No dobrze. Masz już zainstalowane IDE (Eclipse lub Intelij IDEA), lecz co z tym wszystkim zrobić?
Na początek, po rozpoczęciu pracy przywita nas widok:
poprzez klikanie strzałek otwieramy Minecraft i src/main/java.
Po otworzeniu zobaczymy package com.example.examplemod - jest to przykładowy mod, a właściwie jego zalążek dostarczony przez ekipę MinecraftForge. Kliknij go prawym przyciskiem myszy i wybierz opcję delete, gdyż jest nam on nie potrzebny.
Od teraz rozpoczynamy pracę nad własnym modem. Kliknij ppm na src/main/java i utwórz nowy package:
W polu name należy wpisać nazwę nowego package (paczki - aby nie mieszać za wiele będziemy używać nazw angielskich). Nazwa ta zazwyczaj wygląda tak:
- net.autor.nazwamoda
- com.autor.nazwamoda
To, której wersji użyjesz zależy wyłącznie od ciebie. Służy to jedynie rozpoznawaniu dla ciebie, język Java i tak to zinterpretuje prawidłowo. Na cele poradnika stworzymy package net.polskimodder.tutorial.
Po stworzeniu package utwórz class (klasę). Analogicznie będzie to wyglądać następująco: klikasz ppm na utworzony package (dzięki temu nowa klasa znajdzie się w naszym package) i wybierasz opcję class. W nowo otwartym oknie nadaj jej nazwę, która będzie ci się kojarzyć z głównym plikiem moda. W moim wypadku nazwiemy ją po prostu Tutorial. W Modifiers wybierz opcję public po czym zatwierdź nową klasę.
Dobrze teraz możemy zająć się już właściwym kodem, więc od tej pory zalecam być skupionym.
Póki co nie skupimy się na rozdzieleniu kodu serwera i klienta. Tym razem podam cały kod źródłowy, ponieważ jego późniejsze złożenie może okazać się problematyczne.
Standardowo po otworzeniu pliku Tutorial.java zobaczysz taki kod:
package net.polskimodder.tutorial;
public class Tutorial
{
}
Póki co nie ma on nic wspólnego z modami do minecraft, co można zobaczyć poprzez próbę uruchomienia z Eclipse Minecrafta. Poniżej znajduje się kod, który takowym modem już jest:
package net.polskimodder.tutorial;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.registry.EntityRegistry;
@Mod(modid = Tutorial.MODID, version = Tutorial.VERSION)
public class Tutorial
{
public static final String MODID = "tutorial";
public static final String VERSION = "0.0.1";
@Mod.Instance(Tutorial.MODID)
public static Tutorial instance;
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
}
@EventHandler
public void init(FMLInitializationEvent event)
{
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
}
public static String prependModID(String name)
{
return MODID + ":" + name;
}
}
Proszę jedynie, abyście nie kopiowali tego kodu, ponieważ będzie on u was błędny. Rozpocznijmy od linijki pierwszej: package net.polskimodder.tutorial - jest to zadeklarowanie, że ten plik należy do tego package. Potem następują importy wszystkich potrzebnych plików z Minecraft Forge lub samego Minecraft. Dopiero linijka @Mod mówi środowisku Forge, że ten plik jest modem i należy go załadować, jak zauważyliście w @Mod pojawia się modid = Tutorial.MODID oraz version = Tutorial.VERSION. Jest to wpisanie do Forge naszego moda, który za pomocą modid jest rozpoznawany przez Forge, a parametr VERSION nadaje mu aktualną wersję. Dzięki temu Forge wie, że nasz mod nie jest innym modem. public class Tutorial to utworzenie klasy naszego moda, ponieważ w Javie każdy obiekt musi posiadać swoją klasę. Wewnątrz klasy Tutorial tworzymy dwa ciągi znaków (string) z parametrami public static final. Powinniście wiedzieć już do czego one służą, jeśli wzięliście udział w dowolnym kursie Java, jednak jeśli nie wiecie oto wytłumaczenie. Te słowa tworzą obiekty dostępne w dowolnym miejscu w modzie, lecz są one statyczne, dzięki czemu nie można ich modyfikować (Raczej źle skończyłoby się, gdyby nagle w połowie pracy minecrafta mod zmienił nazwę z tutorial na np pączek).
Oczywiście stringi MODID oraz VERSION to wasz własny wymysł, modid będzie wykorzystywane w komendach do uzyskania waszych przedmiotów, version może być dosłownie dowolny.
W następnej linii tworzymy instancję naszego moda. Jest to wymagane, ponieważ Minecraft Forge musi wiedzieć, gdzie jest twój mod i jak ma się do niego odwoływać.
Podział kodu na serwer i klient specjalnie pominąłem, gdyż wpis byłby za długi i nudny... (Aczkolwiek do tego wrócimy w następnej części poradnika - jest to wymagane, aby mod mógł działać prawidłowo)
Na samym końcu posiadamy 3 funkcje, wszystkie poprzedzone linijką @EventHandler.
Są to funkcje, które naszego moda inicjują (startują). Dzielą się na trzy funkcje, gdyż nie nie każdy kod może być włączany w tym samym miejscu.
- preInit - w tej funkcji wywołane zostają podstawowe rzeczy, bez których dalsze ładowanie moda nie może działać. Wczytuję się tutaj pliki konfiguracyjne, tworzy oraz rejestruje bloki i przedmioty.
- init - tutaj twój mod zostaje właściwie załadowany. W tym etapie tworzy się wszystko co jest potrzebne w modzie oraz rejestruje się przepisy.
- postInit - bardzo ważna funkcja, która już nie ładuje samego moda, lecz odpowiada za interakcję z innymi modami (dla przykładu interakcja z modem BuildCraft).
No i pozostaje funckja prependModID, która odpowiada za zwrócenie prawidłowo naszego ModID, kiedy jest potrzebne.
Jeśli przeczytałeś to wytłumaczenie, to znak, że masz ochotę zrozumieć jak działa Minecraft i Minecraft Forge, czyli masz zadatki na moddera! Jeśli kod przepisałeś prawidłowo i zmieniłeś potrzebne wartości na swoje własne możesz spróbować uruchomić Minecrafta. Zrobisz to poprzez wciśnięcie strzałki w zielonym kółku, jeśli mod jest prawidłowo napisany Minecraft się załaduje, a w zakładce Mods zobaczysz swojego moda:
W następnej części omówimy podział kodu na stronę Serwera i Klienta.