Zoeken…


Syntaxis

  • MODID = staat voor de identificatie van de MOD
  • MODPath = staat voor het volledige gekwalificeerde mappad naar uw mod-map

Opmerkingen

Dit onderwerp moet de meest gebruikte patronen / voorbeelden en goed geteste code bevatten voor het modelleren van de Minecraft-toepassing met forge. Misschien kan dit op een dag de officiële documentatie vervangen.

Implementatiepatroon voor initialisatieproxy's

Dit voorbeeld laat zien hoe u proxyklassen voor uw Minecraft Mod-toepassing kunt implementeren, die worden gebruikt om uw mod te initialiseren.

Allereerst moet u de basisklasse CommonProxy.java implementeren die de 3 meest gebruikte methode bevat:

public class CommonProxy {
    public void preInit(FMLPreInitializationEvent e) {}
    public void init(FMLInitializationEvent e) {}
    public void postInit(FMLPostInitializationEvent e) {}
}

Normaal heeft uw mod 2 verschillende pakketten voor client- en servercode, dus u hebt in elk pakket een onderliggende klasse CommonProxy.java nodig, zoals:

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);
    }
}

en voor de 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);
    }
}

Nadat u deze klassen hebt gemaakt, kunt u ze uitbreiden met methoden die alleen aan client- of serverzijde moeten worden uitgevoerd, maar u kunt ze ook aan beide koppelen als u de methoden in de klasse 'base' aanroept.

Ten slotte moet u bepalen welke proxy tijdens runtime wordt gebruikt. Je moet je @Mod klasse uitbreiden met de @Mod annotatie, door:

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;

Hiermee kan Forge detecteren welke klasse tijdens runtime moet worden genomen. In de initialisatiemethoden van uw Mod kunt u nu deze statische PROXY-eigenschap gebruiken.

@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);
}

Aangepaste geluiden aan uw MOD toevoegen

Dit voorbeeld laat zien hoe je nieuwe geluiden aan je MOD toevoegt en speelt. Allereerst heb je een geluidsbestand nodig met het formaat *.ogg . Een ander formaat is niet toegestaan door de Minecraft-toepassing en wordt geweigerd.

De soundfile heeft de naam: sound1.ogg

Plaats het geluidsbestand onder het volgende pad:

/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg

Vervang 'MODID' door de identificatie die u voor uw MOD hebt gedefinieerd

Vervolgens moet je een sounds.json in UTF-8 (Standard) -codering die naam, bron, ... en andere dingen voor je aangepaste geluid definieert. Dit bestand ziet eruit als:

{
  "sound1": {
    "category" : "player",
    "sounds": [{
        "name": "MODID:sound1",
        "stream": false
      }
    ]
  },
  "sound2": {
    "category" : "ambient",
    "sounds": [{
        "name": "MODID:subfolder/sound2",
        "stream": true
      }
    ]
  }
}

Als verklaring voor dit geluid. Json.

Er zijn 2 geluiden gedefinieerd, zoals ik een voorbeeld heb toegevoegd dat je kunt onderzoeken hoe je meerdere geluiden kunt toevoegen. sound1 heeft de categorie- player de tweede is van categorie ambient wat betekent dat het volume van het geluid wordt beïnvloed door de volume-instellingen die de gebruiker heeft ingesteld voor speler / omgevingsgeluiden. name is de belangrijkste eigenschap omdat deze verwijst naar de bron van het geluid. De MODID is de identificatie van uw MOD en is verplicht omdat de toepassing in de bronnen van uw mod naar het bestand zal zoeken, anders zal het in de Minecraft-bronnen zoeken en niets vinden. De eigenschap stream betekent dat het geluid wordt gestreamd vanuit het bestandssysteem, wat alleen nodig is voor geluiden langer dan 4 seconden.

Uw aangepaste sounds.json bestand moet het volgende pad ingaan:

/YourPath/src/main/resources/assets/MODID/sounds.json

Nu kun je de geluiden in het register van het spel laden. U moet dus een klasse maken die SoundEvent s initialiseert en de registratie afhandelt.

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;
    }           
}

Daarna moet u een 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);
        }   
}

en registreer het bij de MinecraftForge.EVENT_BUS zoals:

MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());

Eindelijk kun je je geluiden spelen:

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
    }
}

Een opdracht verzenden

Dit voorbeeld toont u verschillende manieren om 'opdrachten' uit te voeren voor Minecraft vanuit code:

EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");

om een opdracht in SinglePlayer te verzenden



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow