如何在 Bukkit 事件中引用 ItemStack 块?

问题描述 投票:0回答:1

我目前正在为 Minecraft 1.20.6 制作一个插件,我正在尝试设置当您右键单击某个块(又名我的宝箱 ItemStack,但已放置)时,它会与我的自定义库存一起弹出。但我遇到了一个问题,我无法弄清楚如何做到这一点,因此当您单击我的 Chest ItemStack 时(无需右键单击实际的箱子)。 The code My event

我该怎么做?

plugins minecraft bukkit spigot
1个回答
0
投票

首先,您可以使用

block != null
来代替
e.hasBlock()

另外,如果是之前放置的方块,您可以将位置保存到配置文件中,然后检查单击的位置是否在此文件中。

这是检查配置的代码:

// this method convert location to string
public static String stringifyLocation(Location loc) {
    return loc.getWorld().getName() + "_" + loc.getBlockX() + "_" + loc.getBlockY() + "_" + loc.getBlockZ();
}

// this method check if the chest is one of us
public boolean isMyChest(Location loc) {
    return plugin.getConfig().getStringList("shop.blocks_chest").contains(stringifyLocation(
}

@EventHandler
public void onPlace(BlockPlaceEvent e) {
    // here make all checks about your chest
    if(e.getItemInHand().isSimilar(createChest())) {
        List<String> list = plugin.getConfig().getStringList("shop.blocks_chest"); // list of your chests
        list.add(stringifyLocation(e.getBlock().getLocation()));
        plugin.getConfig().set("shop.blocks_chest", list); // change the value
        plugin.saveConfig(); // save in the config.yml
    }
}

不要忘记根据您自己已经实现的方法转换此代码。

© www.soinside.com 2019 - 2024. All rights reserved.