Szukaj…


Składnia

  • MODID = reprezentuje identyfikator MOD
  • MODPath = oznacza pełną kwalifikowaną ścieżkę katalogu do folderu mod

Uwagi

Ten temat powinien zawierać najczęściej używane wzorce / przykłady i dobrze przetestowany kod do modyfikowania aplikacji Minecraft za pomocą forge. Może to kiedyś zastąpi oficjalną dokumentację.

Wzór implementacji dla serwerów proxy inicjujących

Ten przykład pokazuje, jak zaimplementować klasy proxy dla aplikacji Mod Minecraft, które są używane do inicjalizacji twojego modu.

Przede wszystkim musisz zaimplementować podstawową klasę CommonProxy.java, która zawiera 3 najczęściej używaną metodę:

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

Zwykle twój mod ma 2 różne pakiety dla kodu klienta i serwera, więc będziesz potrzebował w każdym pakiecie klasy podrzędnej CommonProxy.java, takich jak:

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

a dla serwera:

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

Po utworzeniu tych klas możesz je rozszerzyć metodami, które muszą być uruchamiane tylko po stronie klienta lub serwera, ale możesz także dołączyć je do obu, jeśli wywołasz metody w klasie „podstawowej”.

Na koniec musisz zdefiniować, który serwer proxy jest pobierany w czasie wykonywania. Musisz rozszerzyć swoją główną klasę @Mod adnotację @Mod o:

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;

Umożliwi to Forge wykrycie, którą klasę należy pobrać w czasie wykonywania. W metodach inicjalizacji twojego Modu możesz teraz używać tej statycznej właściwości PROXY.

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

Dodawanie niestandardowych dźwięków do MOD

Ten przykład pokazuje, jak dodajesz nowe dźwięki do MOD i je odtwarzasz. Przede wszystkim potrzebujesz pliku dźwiękowego w formacie *.ogg . Jakikolwiek inny format jest niedozwolony przez aplikację Minecraft i zostanie odrzucony.

Plik dźwiękowy ma nazwę: sound1.ogg

Umieść plik dźwiękowy pod następującą ścieżką:

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

Zamień „MODID” na identyfikator zdefiniowany dla swojego MOD

Następnie musisz utworzyć plik sounds.json w kodowaniu UTF-8 (Standard), który określa nazwę, zasób, ... i inne elementy niestandardowego dźwięku. Ten plik będzie wyglądał następująco:

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

Jako wyjaśnienie tego sounds.json.

Są zdefiniowane 2 zdefiniowane dźwięki, ponieważ dodałem przykład, w którym możesz zbadać, jak dodawać dźwięki wielokrotne. sound1 ma player kategorii player drugi należy do kategorii ambient co oznacza, że na głośność dźwięku mają wpływ ustawienia głośności ustawione przez użytkownika dla dźwięków odtwarzacza / otoczenia. name jest najważniejszą właściwością, ponieważ wskazuje na zasób dźwięku. MODID jest identyfikatorem MOD i jest obowiązkowy, ponieważ aplikacja przeszuka zasoby Twojego modu w poszukiwaniu pliku, w przeciwnym razie przeszuka zasoby Minecraft i nic nie znajdzie. Właściwość stream oznacza, że dźwięk będzie przesyłany strumieniowo z systemu plików, co jest potrzebne tylko w przypadku dźwięków dłuższych niż 4 sekundy.

Twój niestandardowy plik sounds.json musi przejść następującą ścieżkę:

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

Teraz będziesz mógł załadować dźwięki do rejestru gry. Musisz więc stworzyć klasę, która inicjuje SoundEvent i obsługuje rejestrację.

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

Następnie musisz utworzyć 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);
        }   
}

i zarejestruj go w MinecraftForge.EVENT_BUS np .:

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

Wreszcie będziesz mógł odtwarzać swoje dźwięki:

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

Wysłanie polecenia

Ten przykład pokazuje różne sposoby wykonywania „poleceń” dla Minecraft z kodu:

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

aby wysłać polecenie w SinglePlayer



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow