You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spigot中为物品添加CanPlaceOn NBT标签以支持冒险模式放置?

在Spigot中制作冒险模式可放置的物品

要实现冒险模式下可放置的物品,你可以通过两种方式操作:优先使用Spigot官方API(更安全兼容),或者直接修改物品的NBT标签(适用于底层控制场景)。

方法一:使用Spigot ItemMeta内置方法(推荐)

Spigot提供了专门的API来设置物品的可放置方块列表,无需直接操作NBT,兼容性更强:

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays;

// 示例:创建一块可放在橡木木板和圆石上的石头
ItemStack placeableStone = new ItemStack(Material.STONE);
ItemMeta meta = placeableStone.getItemMeta();

// 设置可放置的方块(传入方块的命名空间ID集合)
meta.setCanPlaceOn(Arrays.asList("minecraft:oak_planks", "minecraft:cobblestone"));
// 也可以单个添加方块
// meta.addCanPlaceOn("minecraft:dirt");

placeableStone.setItemMeta(meta);

方法二:直接修改NBT标签(底层场景适用)

如果需要更底层的控制,或者使用的Spigot版本没有提供上述API,可以直接操作物品的NBT标签:

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.StringTag;

// 示例:创建可放置的物品并修改NBT
ItemStack placeableItem = new ItemStack(Material.STONE);
CompoundTag itemTag = placeableItem.getTag();
if (itemTag == null) {
    itemTag = new CompoundTag();
}

// 创建CanPlaceOn列表并添加方块ID
ListTag canPlaceOnList = new ListTag();
canPlaceOnList.add(StringTag.valueOf("minecraft:oak_planks"));
canPlaceOnList.add(StringTag.valueOf("minecraft:cobblestone"));

itemTag.put("CanPlaceOn", canPlaceOnList);
placeableItem.setTag(itemTag);

验证效果

将修改后的物品交给处于冒险模式的玩家,尝试在指定方块上放置,即可确认功能是否生效。

内容的提问来源于stack exchange,提问作者Lukas Schwienbacher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:37:27