OS | IDE | Forge | JDK | Lang |
---|---|---|---|---|
Windows10 1809 17763.593 | IntelliJ IDEA 2019 | 1.13.2-25.0.74 | 1.8.0_202 | Java |
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.
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.
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.
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.
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
}
}
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 "
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.
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