• Forge论坛

导航页

  • 主页
  • 向文档做出贡献
  • 入门
    • 概述
    • 模组文件
    • 规划你的模组结构
    • 版本号
  • 核心概念
    • 注册表
    • 端位(Sides)
    • 事件
    • 模组生命周期
    • 资源
    • 国际化与本地化
  • 方块
    • 概述
    • 方块状态
  • 物品
    • 概述
    • BlockEntityWithoutLevelRenderer
  • 网络
    • 概述
    • SimpleImpl
    • 实体的同步
  • 方块实体
    • 概述
    • BlockEntityRenderer
  • 游戏特效
    • 粒子效果
    • 音效
  • 数据储存
    • Capabilities
    • Saved Data
    • 编解码器(Codecs)
  • 图形用户界面
    • 菜单(Menus)
    • 屏幕(Screens)
  • 渲染
    • 模型扩展
      • 概述
      • 根变换
      • 渲染类型
      • 部分可见度
      • 面数据
    • 模型加载器
      • 概述
      • 烘焙模型
      • 变换
      • 物品重载
  • 资源
    • 客户端资源(Assets)
      • 概述
      • 模型
        • 概述
        • 纹理色调
        • 物品属性
    • 服务端数据(Data)
      • 概述
      • 配方
        • 概述
        • 自定义配方
        • 原料
        • 非数据包配方
          • 酿造配方
          • 铁砧配方
          • 织布机配方
      • 战利品表
      • 全局战利品修改器
      • 标签
      • 进度
      • 条件性加载数据
  • 数据生成
    • 概述
    • 客户端资源(Assets)
      • 模型提供者
      • 语言提供者
      • 音效提供者
    • 服务端数据(Data)
      • 配方提供者
      • 战利品表提供者
      • 标签提供者
      • 进度提供者
      • 全局战利品修改器提供者
      • 数据包注册表对象提供者
  • 杂项功能
    • 配置
    • 键盘布局
    • 游戏测试
    • Forge更新检查器
    • 调试分析器
  • 进阶主题
    • 访问转换器
  • 向Forge做出贡献
    • 概述
    • Pull Request准则
  • 旧版本
    • 概述
    • 移植到当前版本

非数据包配方

并不是所有的配方都足够简单或迁移到使用数据驱动的配方。一些子系统仍然需要在代码库中进行修补,以提供对添加新配方的支持。

酿造配方

酿造是代码中为数不多的仍然存在的配方之一。酿造配方是作为PotionBrewing中的引导程序的一部分添加的,用于容器、容器配方和药水混合物。为了扩展现有系统,Forge允许通过在FMLCommonSetupEvent中调用BrewingRecipeRegistry#addRecipe来添加酿造配方。

警告

BrewingRecipeRegistry#addRecipe必须在同步工作队列中通过#enqueueWork调用,因为该方法不是线程安全的。

默认实现接受标准实现的输入成分、催化剂成分和物品栈输出。此外,还可以提供一个IBrewingRecipe实例来执行转换。

IBrewingRecipe

IBrewingRecipe是一个伪Recipe接口,用于检查输入和催化剂是否有效,并在有效时提供相关输出。它分别通过#isInput、#isIngredient和#getOutput提供。输出方法可以访问输入和催化剂物品栈来构建结果。

重要

在ItemStack或CompoundTag之间复制数据时,请确保使用它们各自的#copy方法来创建唯一的实例。

没有类似原版的包装来添加额外的药水容器或药水混合物。需要添加一个新的IBrewingRecipe实现来复制此行为。

铁砧配方

铁砧负责接收损坏的输入,并给定一些材料或类似的输入,消除输入结果上的一些损坏。因此,它的系统不是简易地被数据驱动。然而,当用户具有所需的经验等级时,由于铁砧配方是具有一定数量的材料等于一定输出的输入,因此可以通过AnvilUpdateEvent对其进行修改以创建伪配方系统。这接受了输入和材料,并允许模组开发者指定输出、经验等级成本和用于输出的材料数量。该事件还可以通过取消来阻止任何输出。

// 检查左边和右边的物品是否正确
// 当正确时,设置输出,经验等级消耗,以及材料数量
public void updateAnvil(AnvilUpdateEvent event) {
  if (event.getLeft().is(...) && event.getRight().is(...)) {
    event.setOutput(...);
    event.setCost(...);
    event.setMaterialCost(...);
  }
}

该更新事件必须被绑定到Forge事件总线。

织布机配方

织布机负责将染料和图案(从织布机或物品上)应用到旗帜上。虽然旗帜和染料必须分别为BannerItem或DyeItem,但可以在织布机中创建和应用自定义图案。旗帜图案可以通过注册一个BannerPattern来创建。

重要

minecraft:no_item_required标签中的BannerPattern在织布机中作为一个选项出现。不在此标签中的图案必须有一个附带的BannerPatternItem才能与关联的标签一起使用。

private static final DeferredRegister<BannerPattern> REGISTER = DeferredRegister.create(Registries.BANNER_PATTERN, "examplemod");

// 接受要通过网络发送的图案名称
public static final BannerPattern EXAMPLE_PATTERN = REGISTER.register("example_pattern", () -> new BannerPattern("examplemod:ep"));
Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme