minecraft
Modding z Forge
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