跳至主要內容

ModifyJS

芒果凍布丁2026/7/28大約 1 分鐘forge-1.20modifyItemBuilder

簡介

這是一個簡單的模組,最開始只是為了對一些 KubeJS 社區沒有怎麼實現的補充,現在只是實現了一些物品的渲染,可以視作對 RenderJS 的一些簡單補充,其次是添加了 Mekanism 模組化物品 的註冊類型。

重要

這個模組重寫了 BlockItemBuildercreateObject 方法,這可能會在方塊註冊期間引起問題。

示例

物品渲染

// 方塊物品渲染
const $Axis = Java.loadClass("com.mojang.math.Axis");

StartupEvents.registry("block", (event) => {
  event.create("test_block").item((pose) => {
    pose.isCustomRenderer(true);
    pose.renderByItem(
      (
        itemStack,
        itemDisplayContext,
        poseStack,
        buffer,
        packedLight,
        packedOverlay,
      ) => {
        poseStack.pushPose();
        let time = Date.now();
        let angle = (time / 10) % 360;
        poseStack.mulPose($Axis.YP.rotationDegrees(angle));
        Client.itemRenderer
          .getBlockEntityRenderer()
          .renderByItem(
            "blue_bed",
            itemDisplayContext,
            poseStack,
            buffer,
            packedLight,
            packedOverlay,
          );
        poseStack.popPose();
      },
    );
  });
});

// 如果你需要為普通物品添加物品渲染器,你應該使用建構器類型 `mjs_item`
StartupEvents.registry("item", (event) => {
  event
    .create("test_item", "mjs_item")
    .isCustomRenderer(true)
    .renderByItem(
      (
        itemStack,
        itemDisplayContext,
        poseStack,
        buffer,
        packedLight,
        packedOverlay,
      ) => {
        Client.itemRenderer
          .getBlockEntityRenderer()
          .renderByItem(
            "blue_bed",
            itemDisplayContext,
            poseStack,
            buffer,
            packedLight,
            packedOverlay,
          );
      },
    );
});

Mekanism 模組化物品

StartupEvents.registry("item", (event) => {
  const module_item = event.create("module_create_energy_unit", "mek_unit");

  // Mekanism 模組化物品
  module_item.setSlot("all").tickServer((module, player) => {
    const maxEnergy = KJSModuleUtils.getMaxEnergy(module.getContainer());
    module.getEnergyContainer().setEnergy(maxEnergy);
  });
});

物品建立器修改

// 這個例子可以讓所有沒有重寫過 use 方法的物品 use 方法都變成終界珍珠的 use 方法。
// 注意:如果要修改指定的物品,需要檢查它的類是否重寫了需要修改的方法。

ItemEvents.modification((event) => {
  event.modifyItemBuilder("*", (itemBuilder) => {
    itemBuilder.use((level, player, hand) => {
      Item.of("ender_pearl").use(level, player, hand);
      return true;
    });
    return itemBuilder;
  });
});
最近更新:
貢獻者: Evan Hsieh