Das Java-Frage- und Antwortthema des PHP-Editors Youzi beantwortet Ihre Frage ausführlich zu Strukturen, die vorhandene Blöcke in Minecraft abdecken. Im Spiel wirkt sich die effektive Bedienung und Nutzung dieser Funktion direkt auf das Spielerlebnis und den Spielspaß aus. Durch die Interpretation und Anleitung dieses Artikels hoffe ich, dass er Ihnen dabei helfen kann, diese Technik besser zu beherrschen und bessere Ergebnisse und Erfahrungen im Spiel zu erzielen.
Ich habe online versucht, eine Möglichkeit zu finden, vorhandene Blöcke und ihre Eigenschaften in Minecraft Fabric zu ändern, aber ich kann nur finden, wie man neue Blöcke erstellt. Alle Versionen, die ich gefunden habe, sind niedriger als 1.20.
Ich finde tatsächlich überhaupt keine Möglichkeit, vorhandene Blockeigenschaften zu überschreiben. Überschreiben funktioniert auch nicht
Was Sie im Wesentlichen tun möchten, ist die block
Instanz von Minecraft, die bereits registriert ist, erneut zu registrieren. Aber es gibt einen Grund, warum niemand dokumentiert hat, wie das geht: Das solltest du nicht.
Das erneute Registrieren von Chunks in Minecraft kann seltsame Probleme verursachen, insbesondere wenn Ihr Mod in einem großen Modpack verwendet wird. Dies hat mit der Kompatibilität mit anderen Mods und sogar Minecraft selbst zu tun. Hoffen Sie besser, dies zu vermeiden. Es gibt ein Dutzend anderer Lösungen, die das Verhalten bestimmter Blöcke ändern können, ohne zu viele Probleme zu verursachen. Dazu gehören unter anderem:
minecraft:stone
一个 age
属性(无论出于何种原因可能有用),请将 minecraft:stone
视为 age=0
并使用 age
创建自定义块(例如 modid:ged_stone
) zqb 属性从 1
geben möchten, erweitern Sie die Altersspanne. Ein anderer, allgemeinerer Ansatz besteht darin, das Mixin in eine block
-Klasse oder eine entsprechende Unterklasse einzubauen und etwa Folgendes zu tun, um einen bestimmten Block (in diesem Fall einen Stein) anzuvisieren:
block self = (block) (object) this; if (builtinregistries.block.getkey(self).equals(new resourcelocation("stone"))) { // do something only if this block is stone }
Aber wenn Sie eine Blockinstanz wirklich, wirklich vollständig ersetzen möchten, ist hier ein Vorschlag: Verwenden Sie die Mixin-Injektion registry.register
, um eine bestimmte Blockinstanz durch eine benutzerdefinierte Blockinstanz zu ersetzen:
@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); } }
Aber versuchen Sie erneut, diese Lösung zu vermeiden. Hier gibt es Drachen.
Bitte beachten Sie, dass ich keine Codefragmente getestet habe, da ich zum Zeitpunkt des Schreibens dieses Artikels keine modifizierte Umgebung zur Hand habe. Möglicherweise muss es angepasst werden, damit es funktioniert.
Außerdem habe ich die offizielle Zuordnung von Mojang verwendet. Wenn Sie Garnzuordnung verwenden, kann der Name anders sein. Zum Beispiel resourcelocation
在 yarn 中被命名为 identifier
.
Ich hoffe, das hilft. Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonMinecraft-Struktur überschreibt vorhandene Blöcke 1.20. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!