包:com.huidu.farmersdelight.api.tag
两个类:FarmersDelightTags —— 本插件使用的标签 id,都是普通 String 常量;KnifeMineableBlocks ——
对 CraftEngine 方块定义所声明标签的只读查询。
本页涉及的类型:
| 类型 | 形态 | @ApiStatus |
|---|---|---|
KnifeMineableBlocks | 静态门面,私有构造 | @NonExtendable |
FarmersDelightTags | 静态常量容器,私有构造 | — |
public static boolean isKnifeMineable(Key blockId);
当 blockId 对应的 CraftEngine 方块定义声明了 farmersdelight:mineable/knife
(FarmersDelightTags.BLOCK_MINEABLE_WITH_KNIFE)或通用标签 c:mineable/knife
(FarmersDelightTags.COMMON_MINEABLE_WITH_KNIFE)时返回 true。两个名字都算,因此按本插件家族写的包与
按通用命名空间写的包会得到同样的答案。
Key 而不是 Block参数是方块的 CraftEngine id,不是 Bukkit 的 Block。把 Block 解析成 CraftEngine id 必须读世界里的
自定义方块状态 —— 那是区域绑定的读,而且 Bukkit 对象本身无法跨区域传递。改传 id 之后,这就成了一个
纯定义查询:只读 CraftEngine 的内存注册表,绝不接触世界、区块、方块实体或方块状态,因此任何线程、
任何区域都可以调用。
null id 返回 false。false。false:RuntimeException 或 LinkageError(CraftEngine 还没起来、定义正处于重载
窗口、本服务器加载不了某个 CraftEngine 类)都被吞掉。不会向调用方抛任何异常 —— "未声明"是安全的
答案。false。它只提供数据。 有三点后果需要记住:
minecraft:mineable/* 标签加上手持物品的 digger 规则决定,
而 CraftEngine 自己的工具判定走定义的 requireCorrectTool() / requiredBreakPower() /
isCorrectTool(..) —— 这两套都不读方块声明的 tags。需要工具要求来门控什么时,请在包里用
require_correct_tool。match_item 规则。把它当作给附属和本插件内部判定用的只读事实查询。
import com.huidu.farmersdelight.api.tag.KnifeMineableBlocks;
import net.momirealms.craftengine.core.util.Key;
// 你手里已经有 CraftEngine 方块 id —— 来自你自己的包或配置。
if (KnifeMineableBlocks.isKnifeMineable(Key.of("myaddon:crate"))) {
// 该方块在包里声明了可被小刀挖掘。掉落行为仍然是包里的 `match_item` 规则,
// 不要在上面再加一份 Java 掉落。
}
传入你已经持有的 id 即可;从 FarmersDelightBlocks.blockIdOf(block) 的返回值构造 Key 会在别的区域上做一次区域绑定的世界读:
这正是本 api 避开的做法。
FarmersDelightTags 收集了本插件使用的标签 id,附属可以直接引用,不必重敲字符串。它们都是普通
String 常量:farmersdelight:... 是本插件自己的标签,c:... 是它同时认可的通用标签。
// 方块标签
public static final String BLOCK_HEAT_SOURCES = "farmersdelight:heat_sources";
public static final String BLOCK_HEAT_CONDUCTORS = "farmersdelight:heat_conductors";
public static final String BLOCK_MINEABLE_WITH_KNIFE = "farmersdelight:mineable/knife";
public static final String BLOCK_MUSHROOM_COLONIES = "farmersdelight:mushroom_colonies";
public static final String BLOCK_CABINETS = "farmersdelight:cabinets";
public static final String BLOCK_COMPOST_ACTIVATORS = "farmersdelight:compost_activators";
// ……另有 drops_cake_slice、tray_heat_sources、planted_from_below、feasts、pies、straw_blocks、
// terrain、unaffected_by_rich_soil、cabinets/wooden、ropes、wild_crops、campfire_signal_smoke
// 物品标签
public static final String ITEM_KNIVES = "farmersdelight:tools/knives";
public static final String ITEM_KNIFE_ENCHANTABLE = "farmersdelight:enchantable/knife";
public static final String ITEM_MILK = "farmersdelight:milk";
public static final String ITEM_FLAT_ON_CUTTING_BOARD = "farmersdelight:flat_on_cutting_board";
// ……另有 snacks、meals、drinks、sweets、feasts、pies、serving_containers、straw_harvesters、
// cabinets、cabinets/wooden、canvas_signs、hanging_canvas_signs、mushroom_colonies、wild_crops
// 实体类型标签
public static final String ENTITY_HORSE_FEED_TEMPTED = "farmersdelight:horse_feed_tempted";
// ……另有 dog_food_users、horse_feed_users
// 通用(c:)标签
public static final String COMMON_MINEABLE_WITH_KNIFE = "c:mineable/knife";
public static final String COMMON_TOOLS_KNIFE = "c:tools/knife";
public static final String COMMON_CROPS_CABBAGE = "c:crops/cabbage";
// ……另有 crops/tomato、crops/onion、crops/rice、storage_blocks/cabbage、storage_blocks/rice
完整列表就在这个类里,按前缀分组:BLOCK_*、ITEM_*、ENTITY_*、COMMON_*。常量只是 id 字符串 ——
用它不会改变标签的解析方式。
没有 hasFeature id 覆盖这个类,因此没有探测手段。它属于发布它的那些构建的 api.** 公开面;更老的构建
里根本没有这个类,任何引用路径都会以 NoClassDefFoundError 失败。要么要求一个带它的构建,要么把引用放在
"确认过类存在之后才会走到的方法体"里。和每个 api 类一样,请在方法体内调用(onEnable、监听器、命令
处理器),不要在字段初始化器或 static final 常量里引用。
farmersdelight:mineable/knife 是从方块定义的默认状态上读的。在 CraftEngine 26.9.1(本构建默认
依赖所钉的版本)里,这条路径是 BlockDefinition.defaultState().settings().tags()。该路径不影响本 api 的
对外形态。
自定义物品优先在所属附属的 items.<id>.settings.tags 中添加标签,FD 合并 CE 标签与原版公共映射用于匹配和预览。CAB/ED 成员已迁回各自包;升级需同步对应 CE items.yml,换 JAR 不会覆盖已有包。FD common-tags.yml 保留服主自定义,不自动清理旧附属成员。
预热时以及 /fd reload tags 时,FD 还会重新读取全部 CE 物品的 settings.tags,把其中的 c: 成员并入家族标签注册表(来源名 craftengine-tags)。这样这些成员不仅对 CE 自身的匹配索引可见,也能被 CommonTagResolver.isCommonTag / getMembers / getTagsForItemId、配方书图标展开和 /fd 标签快照看到。
items:
example:fish:
material: cod
settings:
tags:
- c:foods/raw_fish
原版物品或运行期映射使用已有 FarmersDelightApi.registerCommonTags(source, map),disable 时 unregisterCommonTags(source),重载替换同 source。CE 吸收新导出的原版成员需要下次完整启动。CE 包根键 advanced_tags 是集中配方分组(farmersdelight:advanced_tags 是解析器注册 ID),使用 advtag:<组ID> 引用;它不等同于 CE #tag,不自动给物品加标签。载体 material 也不代表标签身份。
本页转载自 FarmersDelight Wiki,按 GPL-3.0 许可分发。正文未改动,仅对链接与排版做了适配。