当前位置: 首页 > 知识库问答 >
问题:

简单Bukkit插件-打开箱子

白和泽
2023-03-14

服务器主人让我为服务器写一个简单的插件。它只需要,如果你点击一个手里拿着一本书的书架,它会打开一个箱子。当这个人关闭那个箱子时,所有放在里面的书都被销毁了。

我了解bukkit插件开发的基础知识,但是他们网站上的说明非常复杂。我知道我必须注册手头的玩家物品确实是一本带有此代码的书:

Player player = event.getPlayer();
if (player.getItemInHand().getType() == Material.WRITTEN_BOOK) {
// Do other stuff in here
}

然而,如果插件是一个被按下的按钮,手里的书被销毁会更容易,你能让我知道并帮助我完成这些步骤吗?

共有1个答案

常雅珺
2023-03-14

您可以听< code>PlayerInteractEvent,检查他们是否右键单击书架,然后打开chest GUI...你可以这样做:

@EventHandler //ALWAYS use this before events
public void playerInteract(PlayerInteractEvent e){ //listen for PlayerInteractEvent
  if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK){ //make sure the player right-clicked a block
    if(e.getClickedBlock().getType().equals(Material.BOOKSHELF)){ //make sure the player right-clicked a bookshelf
      Player p = e.getPlayer(); //get the player
      if(p.getItemInHand() != null){ //make sure the player has something in their hand
        if(p.getItemInHand().getType().equals(Material.WRITTEN_BOOK)){ //check if the player has a written book in their inventory
          //Inventory inv = Bukkit.createInventory(null, <size (should be divisible by 9)>, "name"); //create the inventory
          //An example of creating the inventory would be:
          Inventory inv = Bukkit.createInventory(null, 36, "Disposal");
        }
      }
    }
  }
}

这应该是你需要做的全部。只需确保在onEnable()方法中使用以下方法注册事件:

this.getServer().getPluginManager().registerEvents(new HandlerClassName(), this);

并确保处理html" target="_blank">程序类< code >实现Listener。

基本上,上面第一段代码所做的是:

    < li >侦听< code > PlayerInteractEvent < li >确保参与互动事件的玩家< code >右击一个方块 < li >确保右键单击的块是< code >书架 < li >确保玩家手中的物品不是< code>null < li >确保玩家手中的物品是< code >书面书籍 < li >创建一个名为< code>Disposal的新清单,其中包含< code>36个插槽,即< code>9 x 4个箱子。

然后,当玩家将物品放入箱子中,并关闭箱子时,物品将被销毁!

如果您想让它在用户右键单击一个箱子时删除书,只需使用:

p.setItemInHand(new ItemStack(Material.AIR));

而不是这样:

Inventory inv = Bukkit.createInventory(null, 36, "Disposal");
 类似资料:
  • 我正在为一个服务器做一个插件,我是开发者,我正在开发一个插件!我想通过执行boss give lvl命令来生成boss鸡蛋

  • 当我试图在我的bukkit服务器中加载插件时,我遇到了NullPointerExc的问题,但在Eclipse中没有错误。我的插件是Rush插件,很多东西没有使用/丢失。错误是这样的: 以下是我的代码:

  • 我正在尝试恢复一个插件,但发现了一个错误: 我做的一切都是对的!plugin.yml外部罐子和出口,但仍然不起作用。知道为什么吗?

  • 在我的Spigot插件中,我使用重复任务每隔0.5秒更新一次玩家的库存。长时间运行代码后,我会得到。 我做了一些调试并使用JProfiler来查看导致内存泄漏的原因,并注意到ItemStacks的数量不断增加。堆遍历器显示这是由更新库存的代码引起的。这是当前代码: 经过更多的调试,我发现删除了将停止增加的itemStack数量。 什么可能导致内存泄漏? 编辑: 我已经更改了代码,不再为每个玻璃窗格

  • 对于许多WordPress 用户来说,插件是必须的。WordPress 插件使得那些只有很少或者没有编程能力的用户可以扩展他们博客的功能。插件的形式多种多样,在WordPress 中,插件几乎可以做任何事情。 即便是WordPress 这样一个优秀的独立应用程序,仍旧有许多方面有缺憾。用户所要求的越来越多的WordPress 所应该具有的特性,都很可能被开发成插件。此外还有很多没有实现的创意,而且

  • 在阅读我需要的内容之前,不要将此标记为重复。 我见过许多类似的主题,但没有一个我找到解决方案。我需要最简单的事情:在我的应用程序中,我有按钮“查看媒体文件”。单击该按钮后,我需要打开(内置文件资源管理器)这个目录-SD_CARD/my_folder媒体文件在哪里(我想单击其中任何一个,它们应该在默认媒体播放器中打开)... 我已经使用了SO的所有建议答案,如下所示: 但他们所做的一切:点击按钮后,