Heim > Java > Minecraft-Struktur überschreibt vorhandene Blöcke 1.20

Minecraft-Struktur überschreibt vorhandene Blöcke 1.20

PHPz
Freigeben: 2024-02-22 13:00:09
nach vorne
795 Leute haben es durchsucht

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.

Frageninhalt

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

Workaround

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:

  • Fügen Sie Ihren Block einfach zu einem der integrierten Tags von Minecraft hinzu – Sie benötigen nicht einmal Java-Code, sondern nur die JSON-Datei aus dem Paket: https://www.php.cn/link/ff7cc29289db44861ce4b3e5e56fe234. Dadurch könnte der Stein beispielsweise mit einer Schaufel abbaubar werden.
  • Verwenden Sie einen der von der Fabric-API bereitgestellten Rückrufe, um auf bestimmte Ereignisse zu warten, die Sie verarbeiten möchten. Es kann beispielsweise Grasblöcke in Erde verwandeln, wenn der Spieler darauf klickt.
  • Erstellen Sie einen sogenannten „Erweiterungsblock“, der als benutzerdefiniertes Statusattribut für den Block dienen kann. dh. Wenn Sie einem Höchstalter 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
}
Nach dem Login kopieren

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);
    }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage