【问题标题】:Minecraft bukkit plugin right click itemMinecraft bukkit 插件右键单击项目
【发布时间】:2022-04-25 17:21:30
【问题描述】:

我正在为我作为开发人员的服务器制作插件,并且正在开发插件! 我想在你执行命令后通过/boss give lvl <lvl> slime 执行命令来生成一个老板蛋,它会给你一个项目,你可以右键单击以生成老板!好吧,就像所有新开发人员的东西并不总是像你想象的那样发展。这是我输入的代码,用于检查玩家是否右键单击空气或玩家手中的物品 SLIME_BALL 的方块。

@EventHandler
public void onPlayerClicks(PlayerInteractEvent event) {
    Player player = event.getPlayer();
    Action action = event.getAction();

     if (action.equals(Action.RIGHT_CLICK_AIR) || action.equals(Action.RIGHT_CLICK_BLOCK)) {
         if (player.getItemInHand().getType() == Material.SLIME_BALL) {
             player.sendMessage("You have right click a slime ball!");
         } 
     }

}

【问题讨论】:

  • 你有什么问题?
  • 我希望能够右键单击一个项目以生成 32 号大小的史莱姆
  • 您当前的代码有什么问题?
  • 它不允许我右键单击该项目向玩家发送 'player.sendMessage("You have right click a slime ball!");'我想说的是我的代码不起作用,并希望帮助调试它,看看阻止代码执行可能是什么问题
  • 不幸的是,这样的调试帮助通常与 SO 无关。在代码运行时查看您的代码编辑器,并尝试缩小它不工作的原因。检查变量是否符合您的预期,并且您没有收到任何错误。

标签: java plugins minecraft bukkit


【解决方案1】:

鉴于您在日志中没有看到任何堆栈跟踪,我同意您的事件侦听器未注册。假设您的侦听器类名为MyEventHandler,它将在onEnable() 方法中注册,类似于此

class MyPlugin extends JavaPlugin {
    ...
    public void onEnable() {
        Listener myEvtHnd = new MyEventHandler();
        Bukkit.getPluginManager().registerEvents( myEvtHnd, this );
        ...
    }
}

一般来说,您的处理程序看起来很合适。 PlayerInteractEvent 提供了一个方便的方法getItem(),它返回玩家当前的手中物品。但是,无论使用哪种方法,您必须检查返回的 ItemStack 是否不为空,如果玩家手头没有物品,就会发生这种情况。

@EventHandler
public void onPlayerClicks(PlayerInteractEvent event) {
    Player player = event.getPlayer();
    Action action = event.getAction();
    ItemStack item = event.getItem();

     if ( action.equals( Action.RIGHT_CLICK_AIR ) || action.equals( Action.RIGHT_CLICK_BLOCK ) ) {
         if ( item != null && item.getType() == Material.SLIME_BALL ) {
             player.sendMessage( "You have right click a slime ball!" );
         } 
     }

}

【讨论】:

    【解决方案2】:

    也许你可以用action ==代替action.equals(),如:

    if (action == Action.RIGHT_CLICK_AIR || action == Action.RIGHT_CLICK_BLOCK) {
         if (player.getItemInHand().getType() == Material.SLIME_BALL) {
             player.sendMessage("You have right click a slime ball!");
         } 
     }
    

    【讨论】:

      猜你喜欢
      • 2017-07-19
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多