Minecraft Plugin Listener funktioniert nicht?
Hallo,
ich habe aus Langeweile mal ein kleines Plugin programmiert. Dort drin enthalten ist ein Listener, der auf eine Interaktion mit einem Item hört. (ItemInteractEvent) und danach je nach Item eine unterschiedliche Funktion ausführt. Ich denke ich habe anscheinend den Listener falsch registriert, da bei einem anderen (EntityDeathEvent)
auch nichts passiert, auch die Nachricht wird nicht ausgegeben.
Ich hoffe jemand kann mit helfen.
LG,
Finnian
Der Code
MainClass
import org.bukkit.Bukkit;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import de.finnian.funplugin.commands.GoodStuffCmd;
import de.finnian.funplugin.listeners.EntityDeath;
import de.finnian.funplugin.listeners.InteractListener;
public class Main extends JavaPlugin{
public void onEnable() {
System.out.println("Das FunPlugin wurde angeschaltet.");
registerListeners();
registerCommands();
PluginManager pm = Bukkit.getPluginManager();
}
public void registerListeners() {
pm.registerEvents(new InteractListener(), this);
pm.registerEvents(new EntityDeath(), this);
}
public void registerCommands() {
getCommand("opstuff").setExecutor(new GoodStuffCmd());
}
}
InteractListener
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.entity.WitherSkull;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import net.md_5.bungee.api.ChatColor;
public class InteractListener implements Listener{
public void onInteract(PlayerInteractEvent e) {
Player p = e.getPlayer();
if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
}
else if (e.getAction() == Action.RIGHT_CLICK_AIR) {
if (e.getItem().equals(Material.LIGHT_BLUE_CARPET)) {
Bukkit.getWorld("world").getBlockAt(p.getLocation()).setType(Material.WATER);
p.sendMessage(ChatColor.BLUE + "Das Wasser wurde plaziert(vllt. hilft es dir ja).");
}
}
else if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
if (e.getItem().equals(Material.WITHER_SKELETON_SKULL)) {
p.launchProjectile(WitherSkull.class);
p.sendMessage(ChatColor.RED + "Du hast einen Witherkopf abgefeuert.");
}
else if (e.getItem().equals(Material.FIREWORK_ROCKET)) {
Bukkit.getWorld("world").createExplosion(p.getLocation(), 20);
p.sendMessage(ChatColor.DARK_RED + "Achtung! Du hast eine Explosion ausgelöst!");
}
}
}
}
2 Antworten
Das Problem ist, dass ein ItemStack nicht mit einem Material verglichen werden kann.
Richtig wäre es e.getItem().getType() zu verwenden.
Ein Beispiel:
if (e.getItem().getType() == Material.BARRIER) {
//Do stuff
}
Ok das mit dem else if danke für den Hinweis aber das Problem ist, dass auch keine anderer Listener funktioniert.
Ohne den Code von denen kann ich da nicht viel sagen.
Wie wäre es, wenn du einfach mal Debug Nachrichten via System.out.println(); ausgibst?
Dadurch weiß man ganz genau wo der Code stecken bleibt
Ich habe es ausprobiert und es wurde nichts ausgegeben.
Kein Wunder, du hast das @EventHandler über den Event-Methoden vergessen.
Ist mir aber auch nicht gleich aufgefallen wie du sicherlich bereits bemerkt hast xd
Der PluginManager (pm) ist nur im lokalen Scope der onEnable-Methode verfügbar. Du kannst also von einer anderen Methode nicht darauf zugreifen. Den PluginManager speicherst du also am besten in einer Klassenvariable.
Eigentlich solltest du das gar nicht kompilieren können wegen dem Fehler. Benutzt du überhaupt eine IDE (IntelliJ, Eclipse, ...)?
Auch solltest du deinen Code nochmal überarbeiten.
Mit dem letzten else if wirst du noch Probleme bekommen