Ich mache ein MagicBows-Plugin, wo Sie Sprüche auswählen können, indem Sie mit der linken Maustaste klicken und wenn Sie den Bogen schießen wird der ausgewählte Zauber seinen Effekt, aber der Selektor funktioniert nicht. Ich bin mir nicht sicher, wie ich das beheben soll.Spell Scroller funktioniert nicht
Das ist meine Hauptdatei:
package me.Pixel;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Effect;
import org.bukkit.Material;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityShootBowEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin implements Listener {
public Main plugin;
public List<String> spells = new ArrayList<String>();
public getTargets getTargets = new getTargets();
private Arrow arrow;
public LightningShot LightningShot = new LightningShot(arrow);
public ExplosionShot ExplosionShot = new ExplosionShot(arrow);
@Override
public void onEnable() {
plugin = this;
this.getServer().getPluginManager().registerEvents(this, this);
getCommand("bow").setExecutor(new BowCommand());
spells.add("LightningShot");
spells.add("ExplosionShot");
}
@EventHandler
public void onEntityShootBow(EntityShootBowEvent event) {
if(event.getProjectile() instanceof Arrow) {
Arrow arrow = (Arrow) event.getProjectile();
new LightningShot(arrow).runTaskTimer(this, 0, 1);
}
}
@EventHandler
public void onEntityShootBow1(EntityShootBowEvent event) {
if(event.getProjectile() instanceof Arrow) {
Arrow arrow = (Arrow) event.getProjectile();
new ExplosionShot(arrow).runTaskTimer(this, 0, 1);
}
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
if(e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK) {
Player p = e.getPlayer();
ItemStack stack = p.getItemInHand();
if(stack != null && stack.getType() == Material.BOW && stack.hasItemMeta() && stack.getItemMeta().getDisplayName().equals(ChatColor.RED + "Bow")) {
int SpellSelected = stack.getDurability();
if (SpellSelected < 2) {
stack.setDurability((short) (SpellSelected + 1));
p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, ParticleEffect.SNOW_SHOVEL);
} else {
stack.setDurability((short) 0);
}
ChatUtilities.sendMessage(p, "Selected: " + spells.get(SpellSelected));
}
}
if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
Player p = e.getPlayer();
ItemStack stack = p.getItemInHand();
if(stack != null && stack.getType() == Material.BOW && stack.hasItemMeta() && stack.getItemMeta().getDisplayName().equals(ChatColor.RED + "Bow")) {
int SpellSelected = stack.getDurability();
if(SpellSelected == 1) {
this.LightningShot.run();
} else if (SpellSelected == 2) {
this.ExplosionShot.run();
}
}
}
}
}
Und dies ist mein erster Zauber: LightningShot
package me.Pixel;
import org.bukkit.entity.Arrow;
import org.bukkit.scheduler.BukkitRunnable;
public class LightningShot extends BukkitRunnable {
private Arrow arrow;
private int tick = 1;
public LightningShot(Arrow arrow) {
this.arrow = arrow;
}
@Override
public void run() {
if (arrow == null || arrow.isOnGround() || tick++ > 20 * 10) {
this.cancel();
} else {
arrow.getWorld().strikeLightning(arrow.getLocation());
}
}
}
Und das ist mein zweiter Zauber: ExplosionShot
(Ich versuche, eine „Explosion zu machen Welle ")
package me.Pixel;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.entity.Arrow;
import org.bukkit.scheduler.BukkitRunnable;
public class ExplosionShot extends BukkitRunnable {
private Arrow arrow;
private int tick = 1;
public ExplosionShot(Arrow arrow) {
this.arrow = arrow;
}
@Override
public void run() {
if (arrow == null || arrow.isOnGround() || tick++ > 20 * 10) {
this.cancel();
} else {
arrow.getWorld().createExplosion(arrow.getLocation(), 1);
FireworkEffect.builder().with(Type.BALL).withColor(Color.AQUA).withFade(Color.FUCHSIA).flicker(true).trail(true);
}
}
}
auch irgendwie die ExplosionShot
und LightningShot
kombinieren, also hat der LightningShot Explosionen auf dem Weg des Pfeils?
Also, wenn ein Benutzer die rechte Maustaste klickt es sollte eine Nachricht im Chat sein, der sagt:
[X] (dieses Dienstprogramm mein Chat ist so dies nichts zu befürchten ist) ausgewählt: LightningShot
Und wenn sie ihre rechte Maustaste erneut auf:
[X] Ausgewählt: ExplosionShot
Und dann sollte es diese "Explosionswelle" erstellen, da es dem Pfeil folgt, aber ich kann den Scroller nicht zum Arbeiten bringen.
Ihre 'onEntityShootBow' - und' onEntityShootBow1'-Methoden hören sich beide das gleiche 'EntityShootBowEvent' an, weshalb beide Arten von Aufgaben ausgeführt werden. Wenn ich dich richtig verstehe, willst du beim Klicken mit der rechten Maustaste zwischen den Zaubern wechseln. Denken Sie darüber nach, was diese Aufgabe mit sich bringt, worum geht es hier? Sie müssen herausfinden, wann der Spieler mit der rechten Maustaste klickt. Sie müssen speichern, welche Art von Zauberspruch der Spieler irgendwo ausgewählt hat. Wenn der Spieler dann mit der rechten Maustaste klickt, ermitteln Sie, welchen Zauberspruch er ausgewählt hat, und führen Sie die entsprechende Aufgabe aus. –
@AdrianSohn Also, was ändere ich in der Hauptdatei, um das zu beheben? – Pixel
An diesem Punkt scheint es, als würde ich Ihnen den Code spoon-füttern, der Ihnen nicht helfen wird zu lernen und ist nicht, soweit ich weiß, wofür Stack Overflow ist. Sie scheinen alles zu haben, was Sie brauchen, um das Problem zu lösen: Sie wissen, wie man Ereignisse registriert, und Sie haben eine Liste von Sprüchen, was bedeutet, dass Sie einige Datenstrukturen kennen. Stack Overflow sollte für die Lösung von * spezifischen * Problemen die letzte Lösung sein (http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users) . –