minecraft
Modding med Forge
Sök…
Syntax
- MODID = representerar identifieraren av MOD
- MODPath = står för den fulla kvalificerade katalogvägen till din mod-mapp
Anmärkningar
Detta ämne bör innehålla de mest använda mönstren / exemplen och väl testad kod för att modifiera Minecraft-applikationen med smedja. Kanske detta kan ersätta den officiella dokumentationen en dag.
Implementeringsmönster för initialiseringsproxy
Det här exemplet visar hur du implementerar proxyklasser för din Minecraft Mod-applikation, som används för att initialisera din mod.
Först av allt måste du implementera basen CommonProxy.java-klassen som innehåller 3 huvudsakligen använda metoden:
public class CommonProxy {
public void preInit(FMLPreInitializationEvent e) {}
public void init(FMLInitializationEvent e) {}
public void postInit(FMLPostInitializationEvent e) {}
}
Normalt har din mod 2 olika paket för klient- och serverkod, så du behöver i varje paket en barnklass av CommonProxy.java som:
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);
}
}
och för servern:
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);
}
}
När du har skapat de här klasserna kan du utöka dem med metoder som bara måste köras på klientsidan eller serversidan, men kan också koppla dem till båda om du kallar metoderna i klassen "bas".
Slutligen måste du definiera vilken proxy som tas vid körning. Du måste utöka din huvudmodklasse med @Mod
anteckningen, genom:
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;
Detta gör det möjligt för Forge att upptäcka vilken klass som ska tas vid körning. I initieringsmetoderna för din mod kan du nu använda den här statiska PROXY-egenskapen.
@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);
}
Lägga till anpassade ljud till din MOD
Detta exempel visar hur du lägger till nya ljud till din MOD och spelar upp dem. Först och främst behöver du en ljudfil som har formatet *.ogg
. Något annat format tillåts inte av Minecraft-applikationen och avvisas.
Ljudfilen har namnet: sound1.ogg
Sätt ljudfilen under följande sökväg:
/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg
Byt ut 'MODID' med den identifierare du definierade för din MOD
Nästa måste du skapa en sounds.json
i UTF-8 (Standard) -kodning som definierar namn, resurs, ... och andra saker för ditt anpassade ljud. Den här filen ser ut som:
{
"sound1": {
"category" : "player",
"sounds": [{
"name": "MODID:sound1",
"stream": false
}
]
},
"sound2": {
"category" : "ambient",
"sounds": [{
"name": "MODID:subfolder/sound2",
"stream": true
}
]
}
}
Som förklaring till detta låter.json.
Det definieras två ljud definierade, eftersom jag lade till ett exempel på att du kan undersöka hur du lägger till multiplikationsljud. sound1
har kategori player
den andra är av kategori ambient
vilket innebär att volymen hos ljudet påverkas av volyminställningar som användaren har fastställts för spelare / omgivande ljud. name
är den viktigaste egenskapen eftersom det pekar på ljudets resurs. MODID
är identifieraren för din MOD och är obligatorisk eftersom applikationen kommer att söka i resurserna för din mod efter filen, annars kommer den att söka i Minecraft-resurserna och hittar ingenting. stream
innebär att ljudet kommer att strömmas från filsystem, vilket bara behövs för ljud längre än 4 sekunder.
Din anpassade sounds.json
fil måste gå under följande sökväg:
/YourPath/src/main/resources/assets/MODID/sounds.json
Nu kommer du att kunna ladda ljuden till spelets register. Så du måste skapa en klass som initialiserar SoundEvent
och hanterar registreringen.
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;
}
}
Efteråt måste du skapa en SoundRegisterListener
:
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);
}
}
och registrera det till MinecraftForge.EVENT_BUS
som:
MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());
Slutligen kan du spela dina ljud:
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
}
}
Skickar ett kommando
Detta exempel visar olika sätt att köra "kommandon" för Minecraft från kod:
EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");
för att skicka ett kommando i SinglePlayer