如何选择可以放置物品的方块?
How to choose the block that the item can be placed on?
我想知道如何选择放置我的TNT的方块。这是我的代码。
ItemStack tnt = new ItemStack(Material.TNT, 1);
如 give @p tnt 1 0 {PlaceOn:emerald_block}
.
我正在为 Minecraft 1.12 和 Eclipse 使用 Spigot。
本机无法通过 Spigot API 执行此操作,您需要使用 NMS 和 NBT:
net.minecraft.server.v1_12_R1.ItemStack stack = CraftItemStack.asNMSCopy(tnt);
NBTTagList tags = (NBTTagList) stack.getTag().get("CanPlaceOn");
if (tags == null)
tags = new NBTTagList();
tags.add(new NBTTagString("minecraft:emerald_block"));
stack.getTag().set("CanPlaceOn", tags);
ItemStack toUse = CraftItemStack.asCraftMirror(stack);
一般来说,如果您可以避免使用 NMS,那么您应该这样做,并且有一种非常简单的方法可以做到这一点。每当玩家放置方块时,服务器都会调用 BlockPlaceEvent。如果您不确定它们是如何工作的,请看这里:http://bukkit.gamepedia.com/Event_API_Reference.
下面是如何处理此行为的示例:
public void onBlockPlace(BlockPlaceEvent e) {
if (e.getBlockPlaced().getType() == Material.TNT) {
Material belowType = e.getBlockPlaced().getRelative(BlockFace.DOWN).getType();
// your code here...
}
}
此代码允许您检查放置的方块是否为 TNT,然后它会检索正下方方块的类型。
希望对您有所帮助!!
我想知道如何选择放置我的TNT的方块。这是我的代码。
ItemStack tnt = new ItemStack(Material.TNT, 1);
如 give @p tnt 1 0 {PlaceOn:emerald_block}
.
我正在为 Minecraft 1.12 和 Eclipse 使用 Spigot。
本机无法通过 Spigot API 执行此操作,您需要使用 NMS 和 NBT:
net.minecraft.server.v1_12_R1.ItemStack stack = CraftItemStack.asNMSCopy(tnt);
NBTTagList tags = (NBTTagList) stack.getTag().get("CanPlaceOn");
if (tags == null)
tags = new NBTTagList();
tags.add(new NBTTagString("minecraft:emerald_block"));
stack.getTag().set("CanPlaceOn", tags);
ItemStack toUse = CraftItemStack.asCraftMirror(stack);
一般来说,如果您可以避免使用 NMS,那么您应该这样做,并且有一种非常简单的方法可以做到这一点。每当玩家放置方块时,服务器都会调用 BlockPlaceEvent。如果您不确定它们是如何工作的,请看这里:http://bukkit.gamepedia.com/Event_API_Reference.
下面是如何处理此行为的示例:
public void onBlockPlace(BlockPlaceEvent e) {
if (e.getBlockPlaced().getType() == Material.TNT) {
Material belowType = e.getBlockPlaced().getRelative(BlockFace.DOWN).getType();
// your code here...
}
}
此代码允许您检查放置的方块是否为 TNT,然后它会检索正下方方块的类型。
希望对您有所帮助!!