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 用于复杂转换。

相关条目