minecraft
Modding mit Schmiede
Suche…
Syntax
- MODID = steht für den Bezeichner der MOD
- MODPath = steht für den vollständigen qualifizierten Verzeichnispfad zu Ihrem Mod-Ordner
Bemerkungen
Dieses Thema sollte die am häufigsten verwendeten Muster / Beispiele und gut getesteten Code zum Modifizieren der Minecraft-Anwendung mit Schmiede enthalten. Vielleicht kann dies eines Tages die offiziellen Unterlagen ersetzen.
Implementierungsmuster für Initialisierungs-Proxies
Dieses Beispiel zeigt Ihnen, wie Sie Proxy-Klassen für Ihre Minecraft Mod Application implementieren, die zum Initialisieren Ihres Mod verwendet werden.
Zunächst müssen Sie die Basis-Klasse CommonProxy.java implementieren, die die 3 hauptsächlich verwendete Methode enthält:
public class CommonProxy {
public void preInit(FMLPreInitializationEvent e) {}
public void init(FMLInitializationEvent e) {}
public void postInit(FMLPostInitializationEvent e) {}
}
Normalerweise enthält Ihr Mod zwei verschiedene Pakete für Client- und Servercode. Sie benötigen also in jedem Paket eine untergeordnete Klasse von CommonProxy.java wie:
public class ClientProxy extends CommonProxy {
@Override
public void preInit(FMLPreInitializationEvent e) {
super.preInit(e);
}
@Override
public void init(FMLInitializationEvent e) {
super.init(e);
}
@Override
public void postInit(FMLPostInitializationEvent e) {
super.postInit(e);
}
}
und für den Server:
public class ServerProxy extends CommonProxy {
@Override
public void preInit(FMLPreInitializationEvent e) {
super.preInit(e);
}
@Override
public void init(FMLInitializationEvent e) {
super.init(e);
}
@Override
public void postInit(FMLPostInitializationEvent e) {
super.postInit(e);
}
}
Nachdem Sie diese Klassen erstellt haben, können Sie sie um Methoden erweitern, die nur auf Client- oder Serverseite ausgeführt werden müssen. Sie können sie jedoch auch an beide anhängen, wenn Sie die Methoden in der Klasse "base" aufrufen.
Zuletzt müssen Sie festlegen, welcher Proxy zur Laufzeit genommen wird. Sie müssen Ihre Hauptmod-Klasse mit der Annotation @Mod
, indem Sie:
private static final String CLIENTPROXY = "com.yourpackage.client.ClientProxy";
private static final String SERVERPROXY = "com.yourpackage.client.ServerProxy";
@SidedProxy(clientSide = CLIENTPROXY, serverSide = SERVERPROXY)
public static CommonProxy PROXY;
Dadurch kann Forge erkennen, welche Klasse zur Laufzeit genommen werden soll. In den Initialisierungsmethoden Ihres Mods können Sie jetzt diese statische PROXY-Eigenschaft verwenden.
@EventHandler
public void init(FMLInitializationEvent event) {
PROXY.init(event);
}
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
PROXY.preInit(event);
}
@EventHandler
public void postInit(FMLPostInitializationEvent event) {
PROXY.postInit(event);
}
Hinzufügen von benutzerdefinierten Sounds zu Ihrem MOD
Dieses Beispiel zeigt Ihnen, wie Sie Ihrem MOD neue Sounds hinzufügen und diese abspielen. Zunächst benötigen Sie eine *.ogg
mit dem Format *.ogg
. Jedes andere Format ist in der Minecraft-Anwendung nicht zulässig und wird abgelehnt.
Die Sounddatei hat den Namen: sound1.ogg
Legen Sie die Sounddatei unter folgendem Pfad ab:
/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg
Ersetzen Sie 'MODID' durch den Bezeichner, den Sie für Ihr MOD definiert haben
Als Nächstes müssen Sie eine sounds.json
in UTF-8-Kodierung (Standard) erstellen, die den Namen, die Ressource, ... und andere Dinge für Ihren benutzerdefinierten Sound definiert. Diese Datei sieht folgendermaßen aus:
{
"sound1": {
"category" : "player",
"sounds": [{
"name": "MODID:sound1",
"stream": false
}
]
},
"sound2": {
"category" : "ambient",
"sounds": [{
"name": "MODID:subfolder/sound2",
"stream": true
}
]
}
}
Als Erklärung für diese Geräusche.
Es gibt zwei definierte Sounds, da ich ein Beispiel hinzugefügt habe, in dem Sie untersuchen können, wie Sie Multiplikations-Sounds hinzufügen. sound1
hat die Kategorie player
der zweite ist von der Kategorie ambient
sound1
bedeutet, dass die Lautstärke des Sounds von den Lautstärkeeinstellungen beeinflusst wird, die der Benutzer für Player- / Ambient-Sounds festgelegt hat. name
ist die wichtigste Eigenschaft, da er auf die Ressource des Sounds verweist. Die MODID
ist die Kennung Ihres MOD und ist obligatorisch, da die Anwendung in den Ressourcen Ihres Mod nach der Datei sucht. Andernfalls wird in den Minecraft-Ressourcen gesucht und nichts gefunden. Die stream
Eigenschaft bedeutet, dass der Sound vom Dateisystem gestreamt wird. Dies wird nur für Sounds benötigt, die länger als 4 Sekunden dauern.
Ihre benutzerdefinierte sounds.json
Datei muss sich unter dem folgenden Pfad befinden:
/YourPath/src/main/resources/assets/MODID/sounds.json
Jetzt können Sie die Sounds in die Registry des Spiels laden. Sie müssen also eine Klasse erstellen, die SoundEvent
s initialisiert und die Registrierung SoundEvent
.
public class SoundRegistrator {
public static final SoundEvent SOUND_1;
public static final SoundEvent SOUND_2;
static {
SOUND_1 = addSoundsToRegistry("sound1");
SOUND_2 = addSoundsToRegistry("sound2");
}
private static SoundEvent addSoundsToRegistry(String soundId) {
ResourceLocation shotSoundLocation = new ResourceLocation("MODID", soundId);
SoundEvent soundEvent = new SoundEvent(shotSoundLocation);
soundEvent.setRegistryName(shotSoundLocation);
return soundEvent;
}
}
Danach müssen Sie einen SoundRegisterListener
erstellen:
public class SoundRegisterListener {
@SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
public void registerSoundEvents(RegistryEvent.Register<SoundEvent> event) {
event.getRegistry().registerAll(SoundRegistrator.SOUND_1,SoundRegistrator.SOUND_2);
}
}
und registriere es bei MinecraftForge.EVENT_BUS
wie:
MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());
Endlich kannst du deine Sounds spielen:
void playSound(SoundEvent sound) {
try {
if (Minecraft.getMinecraft().world.isRemote) {
EntityPlayerSP player = Minecraft.getMinecraft().player;
Minecraft.getMinecraft().world.playSound(player, player.getPosition(), sound, SoundCategory.PLAYERS, RandomGenerator.getNextRandomVolumeLoud(), 1.0F);
}
} catch (Exception ex) {
//Error happened
}
}
Befehl senden
Dieses Beispiel zeigt Ihnen verschiedene Möglichkeiten, Befehle für Minecraft aus Code auszuführen:
EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");
So senden Sie einen Befehl in SinglePlayer