php小編柚子帶來的java問答專題將為您詳細解答Minecraft中關於結構覆蓋現有塊的問題。在遊戲中,如何有效地操作和利用這項功能,將直接影響遊戲體驗和玩法樂趣。透過本文的解讀與指導,希望能幫助您更能掌握這項技巧,從而在遊戲中取得更好的成績和體驗。
我一直在嘗試在線尋找一種方法來修改 Minecraft Fabric 中的現有區塊及其屬性,但我所能找到的只是如何建立新區塊。 我找到的任何版本都低於 1.20。
我實際上根本找不到覆蓋現有區塊屬性的方法。覆蓋也不起作用
您本質上想要做的是重新註冊 minecraft 已經註冊的 block
實例。但沒有人記錄如何做到這一點是有原因的:你不應該。
在 minecraft 中重新註冊區塊可能會導致奇怪的問題,尤其是當您的模組將在大型模組包中使用時。這與其他模組甚至《我的世界》本身的兼容性有關。您最好希望避免這種情況。還有十幾種其他解決方案可以改變特定區塊的行為,而不會造成太多問題。它們包括但不限於:
minecraft:stone
一個age
屬性(無論出於何種原因可能有用),請將minecraft:stone
視為age =0
並使用age
建立自訂區塊(例如modid:ged_stone
) zqb 屬性從1
到任何最大年齡擴大年齡範圍。 另一種更通用的方法是將mixin 建置到block
類別或適當的子類別中,並執行類似以下操作來定位特定區塊(在本例中為石頭):
block self = (block) (object) this; if (builtinregistries.block.getkey(self).equals(new resourcelocation("stone"))) { // do something only if this block is stone }
但是,如果您真的真的想完全取代區塊實例,這裡有一個建議:使用 mixin 注入 registry.register
,用自訂區塊實例取代特定區塊實例:
@Mixin(Registry.class) public class RegistryMixin { @Inject( // You may need to specify the correct signature after the method // name because there are two `register` methods. method="register", at=@At("HEAD"), cancelable=true ) // Note that this is a generic method, in Mixin you'll have to use // Object to replace type parameters private static void onRegister(Registry reg, ResourceLocation id, Object value, CallbackInfoReturnable<Object> cir) { if (reg != BuiltInRegistries.BLOCK) return; if (!id.toString().equals("minecraft:stone")) return; // Now that you've filtered out the minecraft:stone block, // you can re-register it Block myCustomBlock = new Block(.......); ((WritableRegistry) reg).register(id, myCustomBlock); cir.setReturnValue(myCustomBlock); } }
但再次嘗試避免這種解決方案。這裡有龍。
請注意,我尚未測試任何程式碼片段,因為在撰寫本文時我手邊沒有修改環境。它可能需要調整才能工作。
另外,我使用了 mojang 的官方映射,如果您使用 yarn 映射,名稱可能會有所不同。例如,resourcelocation
在 yarn 中被命名為 identifier
。
我希望這有幫助。快樂編碼!
以上是Minecraft 結構覆蓋現有塊 1.20的詳細內容。更多資訊請關注PHP中文網其他相關文章!