Spigot插件求助:玩家高度超24格击杀功能失效
修复你的Spigot高度检测击杀插件
嘿,我看了你的代码,问题其实很明显,主要是事件监听器没注册,还有几个小细节需要调整。让我一步步给你讲清楚:
问题分析
- 事件未注册:你的主类实现了
Listener接口,但在onEnable()方法里没有告诉Spigot要监听这个类里的事件。没有注册的话,@EventHandler注解的方法永远不会被触发。 - 高度条件不符:你说要在玩家超过24格时击杀,但代码里写的是
p.getLocation().getBlockY() > 80,这会导致只有超过80格才会触发,和你的需求不符。 - 小细节问题:
onDisable()里的消息符号不一致(最后是-而不是_),还有onEnable()里的super.onEnable()调用位置建议放在最前面,更符合规范。
修正后的完整代码
import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.plugin.java.JavaPlugin; public class MainFFA extends JavaPlugin implements Listener{ @Override public void onEnable() { super.onEnable(); // 建议放在方法开头,先执行父类的启用逻辑 // 关键:注册事件监听器,告诉Spigot这个类里有要监听的事件 getServer().getPluginManager().registerEvents(this, this); getServer().getConsoleSender().sendMessage("_____________START_____________"); getServer().getConsoleSender().sendMessage("_____________START_____________"); getServer().getConsoleSender().sendMessage("_____________START_____________"); getServer().getConsoleSender().sendMessage("_____________START_____________"); } @Override public void onDisable() { super.onDisable(); getServer().getConsoleSender().sendMessage("_________STOP_________"); // 修正符号不一致问题 } @EventHandler public void onPlayerHigh(PlayerMoveEvent event) { // 方法名更贴合功能,可选 Player p = event.getPlayer(); // 改成你需要的24格高度条件 if(p.getLocation().getBlockY() > 24) { p.setHealth(0); } else { p.sendMessage("Wenn du das siehst dann bist du unter 24 blöcken hoch"); // 顺便把提示里的80改成24,更准确 } } }
关键修改点解释
- 注册事件监听器:
getServer().getPluginManager().registerEvents(this, this);第一个this是监听器实例(你的主类),第二个this是插件实例,这行代码是让Spigot识别并监听你类里的事件方法。 - 修正高度条件:把
>80改成>24,匹配你最初的需求。 - 优化方法名:把
onPlayerDead改成onPlayerHigh,让方法名更直观反映功能,这是可选的,但能提升代码可读性。 - 规范提示文本:把提示消息里的80改成24,避免玩家看到混淆的信息。
这样修改后,插件就能正常工作了:当玩家的Y坐标超过24时,会被立即击杀;在24格及以下时,会收到提示消息。
内容的提问来源于stack exchange,提问作者Leopa
相关产品推荐
相关产品推荐

