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



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow