PosteaBlockStackTransformer
基本信息
| 属性 |
值 |
| 完整类名 |
com.gtnewhorizons.postea.api.PosteaBlockStackTransformer |
| 包路径 |
api |
| 类型 |
抽象基类(abstract class, 需要子类继承) |
| 调用时机 |
子类 register() 方法通常在 FMLPostInitializationEvent 中调用 |
| 关联接口 |
IComplexBlockTransformer / IComplexStackTransformer / ISimpleBlockTransformer / ISimpleItemTransformer / ISimpleStackTransformer |
功能
Postea 提供的"声明式"转换器基类。子类通过实现特定接口来声明自己要做的转换类型(复杂 / 简单 / 块 / 物品),调用 register() 后 Postea 会自动调用对应的 *ReplacementManager.add* 把规则注册到全局。
核心价值:让迁移者专注于"我要做什么",而不是"我要调哪个 API 方法"。一个子类可同时声明 Block 转换 + ItemStack 转换;register() 会按实现的接口分发到不同注册入口。
字段
| 字段 |
类型 |
说明 |
originalId |
String |
要拦截的方块/物品 namespaced ID |
originalMeta |
int |
meta 过滤;OreDictionary.WILDCARD_VALUE (32767) 表示任意 meta |
构造函数
| 构造签名 |
行为 |
PosteaBlockStackTransformer(String originalId) |
任意 meta 匹配 |
PosteaBlockStackTransformer(String originalId, int originalMeta) |
指定 meta;可传 WILDCARD_VALUE |
方法
void register()
按子类实现的接口分发到 Postea 各管理器:
| 实现的接口 |
调用 |
IComplexStackTransformer 且 meta == WILDCARD |
ItemStackReplacementManager.addTransformationHandler(id, complexStackTransformerCheckMeta) |
IComplexStackTransformer 且 meta 固定 |
ItemStackReplacementManager.addTransformationHandler(id, cst::transformStack) |
IComplexBlockTransformer 且 meta == WILDCARD |
BlockReplacementManager.addTransformationHandler(id, complexBlockTransformerCheckMeta) |
IComplexBlockTransformer 且 meta 固定 |
BlockReplacementManager.addTransformationHandler(id, cbt::transformBlock) |
ISimpleBlockTransformer |
BlockReplacementManager.addSimpleReplacement(id, meta, getTargetBlock(), getTargetBlockMeta(), true) |
ISimpleItemTransformer |
ItemStackReplacementManager.addSimpleReplacement(id, meta, getTargetItem(), getTargetItemMeta(), true) |
ISimpleStackTransformer |
ItemStackReplacementManager.addSimpleReplacement(id, meta, stack.getItem(), Items.feather.getDamage(stack), true) |
实现多个接口 = 一次 register() 注册多条规则。
关联接口
| 接口 |
方法 |
用于 |
IComplexBlockTransformer |
boolean transformBlock(BlockConversionInfo info) |
复杂 Block 转换 |
IComplexStackTransformer |
boolean transformStack(String originalId, NBTTagCompound tag) |
复杂 ItemStack 转换 |
ISimpleBlockTransformer |
Block getTargetBlock(), int getTargetBlockMeta() |
简单 Block 替换 |
ISimpleItemTransformer |
Item getTargetItem(), int getTargetItemMeta() |
简单 Item 替换 |
ISimpleStackTransformer |
ItemStack getTargetStack() |
简单 ItemStack 替换 |
使用示例
简单 Block 替换
public class StoneToCobble extends PosteaBlockStackTransformer implements ISimpleBlockTransformer {
public StoneToCobble() {
super("minecraft:stone");
}
@Override public Block getTargetBlock() { return Blocks.cobblestone; }
@Override public int getTargetBlockMeta() { return 0; }
}
// 注册
new StoneToCobble().register();
复杂 ItemStack 转换
public class RenameTagTransformer extends PosteaBlockStackTransformer implements IComplexStackTransformer {
public RenameTagTransformer() {
super("mymod:specialItem", 0);
}
@Override public boolean transformStack(String origId, NBTTagCompound tag) {
tag.setString("MigratedFrom", origId);
return true;
}
}
// 注册
new RenameTagTransformer().register();
同时实现 Block + Stack
public class DiamondOreReplacer extends PosteaBlockStackTransformer
implements ISimpleBlockTransformer, ISimpleStackTransformer {
public DiamondOreReplacer() { super("removedmod:diamondOre"); }
@Override public Block getTargetBlock() { return Blocks.diamond_ore; }
@Override public int getTargetBlockMeta() { return 0; }
@Override public ItemStack getTargetStack() { return new ItemStack(Items.diamond); }
}
// 一次 register() 同时注册 Block 与 ItemStack 规则
new DiamondOreReplacer().register();
第三方 mod 集成
- 无直接依赖;纯 Java。
- 推荐搭配
registerIDResolver 缓存数值 ID 用于复杂转换。
相关条目