[JAVA] [Forge] So registrieren Sie Ihre eigene Entität und Ihr Entity Render in 1.13.2

Entwicklungsumgebung

OS IDE Forge JDK Lang
Windows10 1809 17763.593 IntelliJ IDEA 2019 1.13.2-25.0.74 1.8.0_202 Java

Einführung

Ich dachte, dass es in 1.13.2 nur wenige japanische Materialien zur Registrierung von Entitäten gibt, daher hoffe ich, dass dies hilfreich sein wird. Der Quellcode wird basierend auf dem TorchBowMod meines eigenen Mods erklärt.

Änderungen von 1.12 sind mir aufgefallen

Dieses Mal fasste ich die Hinzufügung der Entität zusammen, über die ich gestolpert bin. Fettgedruckte Teile sind Änderungen im Zusammenhang mit der Hinzufügung einer Entität.

Die Mod-Initialisierungsverarbeitung wird jetzt parallel geladen

preInit


@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
}

In der Vergangenheit wurden Prozesse wie preInit und postInit wie oben beschrieben mit Anmerkungen versehen. Mit dieser Änderung wird jedoch der Konstruktor der Klasse mit der Anmerkung "@ Mod" geändert, um den Listener für den Initialisierungsprozess zu registrieren. es war erledigt. Wenn der Name der Klassendatei mit der Annotation "@ Mod" beispielsweise "TorchBowMod" lautet, lautet der Konstruktor wie folgt.

TorchBowMod.java


public class TorchBowMod {
    public TorchBowMod() {
        final IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        modEventBus.addListener(this::preInit);//Registrieren Sie hier den Listener, der das Initialisierungsverarbeitungsereignis empfängt
        MinecraftForge.EVENT_BUS.register(this);
    }

    //Entspricht preInit, da das formale Argument FMLCommonSetupEvent ist
    //FMLLoadCompleteEvent entspricht postInit
    //Verschiedene andere Ereignisse werden vorbereitet, diesmal jedoch weggelassen
    private void preInit(final FMLCommonSetupEvent event) {
        //Verarbeitung durch preInit ~~~
    }
}

Ich habe eine unbekannte Beschreibung von this :: preInit. Da der Lambda-Ausdruck in diesem Update aktiv verwendet wird, wird häufig die Beschreibung des Lambda-Ausdrucks angezeigt. Weitere Lambda-Ausdrücke finden Sie in anderen Artikeln.

Die Client-Initialisierung kann jetzt ohne Verwendung von SidedProxy durchgeführt werden

In Version 1.12 wurde meiner Meinung nach eine Schnittstelle oder Klasse mit dem Namen "CommonProxy" erstellt und die Client / Server-Verarbeitung zwischen dem geerbten ClientProxy und ServerProxy verzweigt. Zusätzlich zu dem obigen Initialisierungsverarbeitungsereignis bietet 1.13.2 ein clientseitiges Ereignis "FMLClientSetupEvent".

java:1.13.2


//Clientseitiger Ereignis-Listener
private void initClient(final FMLClientSetupEvent event) {
    //Client-seitige Verarbeitung
}

Es sieht aus wie das. Sie können ein Ereignis auf dieselbe Weise wie ein Initialisierungsverarbeitungsereignis registrieren. Übrigens gibt es in Bezug auf das Rendern von Entity in 1.12 und 1.13.2 keine Änderung in der Registrierungsmethode, daher habe ich sie mit "ClientProxy" geschrieben.

ClientProxy


//In diesem Fall werden die selbst erstellte Entität → EntityTorch und die RenderTorch, die das Rendering dieser Entität darstellt, registriert.
enderingRegistry.registerEntityRenderingHandler(EntityTorch.class, RenderTorch::new);

Kann durch Schreiben in den Ereignis-Listener auf der Clientseite registriert werden.

Die Registrierungsmethode für Blöcke, Elemente, Entitäten usw. wurde geändert.

Ich glaube, Sie haben in 1.12 die Annotation "@ SubscribeEvent" verwendet, um Elemente, Blöcke, Modelle usw. zu registrieren. 1.13.2 verwendet dieselbe Anmerkung, die Methode hat sich jedoch geringfügig geändert. Zuerst müssen Sie eine statische Klasse mit der Annotation "@ Mod.EventBusSubscriber (bus = Mod.EventBusSubscriber.Bus.MOD)" erstellen und eine Registermethode mit der Annotation "@ SubscribeEvent" in dieser Klasse schreiben. wurde.

RegistryEvents


@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public static class RegistryEvents {
    //Da das formale Argument die Generika von Item sind, wird das Item registriert. Wenn jedoch die Generika von Block verwendet werden, kann der Blockregistrierungsprozess ausgeführt werden.
    @SubscribeEvent
    public static void onItemsRegistry(RegistryEvent.Register<Item> event) {
        //In diesem Fall Artikelregistrierung
    }
}

Die Methode zum Hinzufügen von Entitäten wurde geändert

Nun, endlich das Hauptthema. Bis 1.12 wurde "Entity Registry" für die Entity-Registrierung verwendet, aber es scheint, dass es in 1.13.2 gelöscht wurde. Daher ist es notwendig, das obige "RegistryEvent" zu verwenden, um die Entität zu registrieren. Wenn Sie sich jedoch die Liste der in Forge definierten Generika ansehen.

ForgeRegistries.class


public static final IForgeRegistry<Block> BLOCKS;
public static final IForgeRegistry<Item> ITEMS;
public static final IForgeRegistry<Potion> POTIONS;
public static final IForgeRegistry<Biome> BIOMES;
public static final IForgeRegistry<SoundEvent> SOUND_EVENTS;
public static final IForgeRegistry<PotionType> POTION_TYPES;
public static final IForgeRegistry<Enchantment> ENCHANTMENTS;
public static final IForgeRegistry<VillagerProfession> VILLAGER_PROFESSIONS;
public static final IForgeRegistry<EntityType<?>> ENTITIES;
public static final IForgeRegistry<TileEntityType<?>> TILE_ENTITIES;
public static final IForgeRegistry<ModDimension> MOD_DIMENSIONS;

Es ist einfach "<EntityType <? >>" anstelle von "". Sie sehen also, dass Sie für die Generika "<EntityType <? >>" angeben müssen. Und da die Generika von "EntityType" "EntityType " sind, können Sie sehen, dass der für die Generika von "EntityType" angegebene Typ der Entitätstyp sein muss.

Also werde ich sofort einen EntityType meiner eigenen Entität erstellen. Angenommen, Sie möchten eine Entität namens "Entity Torch" registrieren, die auch als Render angezeigt wurde.

public static EntityType<EntityTorch> TORCH;

Definieren Sie zunächst eine globale Variable vom Typ EntityType, die eine generische Version Ihrer eigenen Entität ist.

RegistryEvents


@SubscribeEvent
public static void registerEntityTypes(final RegistryEvent.Register<EntityType<?>> event) {
}

Fügen Sie dann die obige Methode zur RegistryEvents-Klasse hinzu, wie unter "Die Registrierungsmethode für Blöcke, Elemente, Entitäten usw. wurde geändert" erläutert. Bei dieser Methode handelt es sich um einen Prozess wie das Schreiben einer eigenschaftsähnlichen Entität in "TORCH", die null bleibt, und das anschließende Registrieren.

In der registerEntityTypes-Methode


TORCH= EntityType.Builder.create(EntityTorch.class, EntityTorch::new).tracker(60, 5, true).build(MODID + ":entitytorch");
TORCH.setRegistryName(new ResourceLocation(MODID, "entitytorch"));
event.getRegistry().register(TORCH);

EntityType wird von EntityType.Builder erstellt, aber zu diesem Zeitpunkt ist es erforderlich, die Entity-Seite auf den Schreibstil von 1.13.2 umzuschreiben. Ich denke, dass dies unter Bezugnahme auf die vorhandene Entität usw. erfolgen kann. Bitte überprüfen Sie dies. tracker () wird in der Reihenfolge von range, updateFrequency und sendVelocityUpdates angegeben. Dies ist dasselbe wie das 6., 7. und 8. Argument von EntityRegistry.registerModEntity () in 1.12, sodass Sie keine Probleme haben. Der Registrierungsname usw. kann mit dem Element usw. identisch sein.

Referenzquelle

Serpentin

Da sowohl Modding als auch Qiita gerade erst begonnen haben, würde ich es begrüßen, wenn Sie auf Fehler oder Punkte hinweisen könnten, die Sie nicht mögen. F: Warum haben Sie jetzt über 1.13.2 geschrieben? A: Ich habe mich kürzlich bei Qiita registriert und einen Artikel gepostet, den ich vor ungefähr 3 Monaten in meinem Blog geschrieben habe.

Recommended Posts

[Forge] So registrieren Sie Ihre eigene Entität und Ihr Entity Render in 1.13.2
So erstellen Sie Ihre eigene Anmerkung in Java und erhalten den Wert
So lesen Sie Ihre eigene YAML-Datei (*****. Yml) in Java
So entwickeln und registrieren Sie eine Sota-App in Java
[Spring Boot Actuator] So registrieren Sie Ihren eigenen Integritätsprüfungsprozess manuell
Gedanke: Wie man eine funktionale Schnittstelle für eigene Funktionen verwendet (Java)
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Umgang mit TSV-Dateien und CSV-Dateien in Ruby
Wie schreibe ich einen Core Mod in Minecraft Forge 1.15.2
So starten Sie die Swagger-Benutzeroberfläche und den Swagger-Editor in Docker
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
So trennen Sie Wörter in Namen in Klassen, Methoden und Variablen
[Rails] So definieren Sie Makros in Rspec und standardisieren die Verarbeitung
So legen Sie den Zeichencode und den Zeilenvorschubcode in Eclipse fest
[Rails] Verschiedene Unterschiede zwischen redirect_to und Render-Methode und Ausgabemethode der Render-Methode
Was ist in "Java 8 bis Java 11" passiert und wie wird eine Umgebung erstellt?
Aufrufen und Verwenden der API in Java (Spring Boot)
So stellen Sie jQuery in Rails-Apps mit Webpacker bereit
Erstellen Sie mit Java Ihren eigenen einfachen Server und verstehen Sie HTTP
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl
So installieren Sie PHP 7.4- und SQL Server-Treiber in CentOS 7.7
So fügen Sie PKCE Code_Verifier und Code_Challenge in die JMeter-Anforderung ein
So wechseln Sie in Netty dynamisch zwischen FIN und RST
Erstellen Sie in Docker Ihre eigene Tastatur-QMK. Für Windows einzigartiges Volume
Wie POST JSON in Java-Methode mit OkHttp3 und Methode mit HttpUrlConnection-
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0
So erstellen Sie mit Spring Boot einen eigenen Controller, der / error entspricht
So legen Sie ein Profil mit annotationsbasierter Konfiguration im Spring-Framework fest und verwenden es
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
So löschen Sie große Datenmengen in Rails und Bedenken
Wie installiere ich die in Ubuntu verwendete Sprache und wie erstelle ich die Umgebung?
Abrufen und Hinzufügen von Daten aus dem Firebase Firestore in Ruby
So bringen Sie JDK 11 bequem in den Mac
Wie man Lombok im Frühling benutzt
Verwendung von StringBurrer und Arrays.toString.
So finden Sie May'n in XPath
So blenden Sie die Bildlaufleiste in WebView aus
So führen Sie JUnit in Eclipse aus
Verwendung von EventBus3 und ThreadMode
Wie man in Ruby auf unbestimmte Zeit iteriert
Wie man die Programmierung in 3 Monaten beherrscht
Wie man JAVA in 7 Tagen lernt
So erhalten Sie Parameter in Spark
Aufrufen von Klassen und Methoden
Behandeln Sie Ihre eigenen Anmerkungen in Java
Wie man Gleichheit und Gleichheit benutzt (wie man Gleichheit benutzt)
So installieren Sie Bootstrap in Ruby
So verbinden Sie Heroku und Sequel
Verwendung von InjectorHolder in OpenAM
So konvertieren Sie LocalDate und Timestamp
So installieren Sie jQuery in Rails 6
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So setzen Sie Lombok in Eclipse
[Einführung in Rails] Verwendung von Render
So verketten Sie Zeichenfolgen mit Java
So installieren Sie Swiper in Rails
So erstellen Sie Ihre eigene kopflose API mit Liferays REST Builder (Teil 3)