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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow