Szukaj…


Wprowadzenie

Stworzenie prostego, dekoracyjnego klocka za pomocą Forge jest jednym z pierwszych zadań, których początkujący modder będzie musiał się nauczyć. Jak to zrobić, zmieniło się w różnych wersjach Minecrafta i prawdopodobnie znajduje się na „umiarkowanym” poziomie trudności po wersji 1.7.10 ze względu na dużą liczbę łatwych do popełnienia błędów.

Uwagi

Jeśli coś pójdzie nie tak i twój blok niestandardowy (po umieszczeniu lub przytrzymaniu) ma brakującą teksturę (czarny / fioletowy) lub model (domyślny sześcian, który jest zbyt duży, gdy jest trzymany), sprawdź dziennik. Problemy tego rodzaju prawie zawsze pojawiają się w dzienniku, pod warunkiem, że poprawnie zarejestrowałeś rzeczy.

Pierwszą rzeczą, która się pojawi, jest linia "Exception loading model for variant..." lub podobna, informująca, który blok lub element nie załadował się poprawnie. Po kilkunastu liniach zaczynających się od at... pojawi się kolejna linia Caused by...

Ten wiersz „Spowodowany przez” jest ważny, ponieważ informuje, który plik nie został poprawnie załadowany i może być jednym z kilku błędów, takich jak:

  • Zniekształcony JSON (plik JSON jest nieprawidłowy i ma literówkę)
  • Plik nie znaleziony (plik, którego szuka Minecraft, nie ma prawidłowej nazwy lub nie znajduje się we właściwym miejscu)
  • Brak wyjątku wariantu (JSON Blockstate jest niekompletny)

Możesz nawet otrzymać więcej niż jeden błąd polegający na jednym błędzie! Jeśli nie wiesz, który blok jest problemem, skomentuj każdy blok i element, o którym wiesz, że działa, zmniejsz listę błędów do odpowiedniego bloku (lub bloków). Być może będziesz musiał to zrobić kilka razy.

Dodatkowo tekstura miksowania pokazuje się inaczej niż prosta lista wszystkich brakujących zasobów dla danej domeny (identyfikator mod).

Klasa blokowa

Najpierw potrzebujemy klasy reprezentującej blok

public class CustomBlock extends Block {

    public CustomBlock () {
        super(Material.ROCK);
        setHardness(1.0f);
        setHarvestLevel("pickaxe", 0);
        setResistance(1.0f);
        setCreativeTab(CreativeTabs.DECORATIONS);
        this.setSoundType(SoundType.STONE);
    }
}

Nawet tutaj dostępnych jest kilka modyfikacji: materiał (który decyduje o niektórych właściwościach, takich jak możliwość popychania przez tłoki i czy można go złamać ręcznie), twardość (czas potrzebny na pęknięcie), poziom zbioru (odpowiednie narzędzie i narzędzie materiał: w tym przypadku drewniany kilof), odporność (w porównaniu z eksplozjami), zakładka, którą pokazuje w menu kreatywnym i jaki ma dźwięk kroku.

Tutaj będą musiały przejść dowolne fantazyjne bloki funkcjonalne, ale na razie tworzymy blok, który po prostu wygląda ładnie, więc gotowe.

Model bloku JSON

Następnie musimy powiedzieć Minecraftowi, jak ma wyglądać nasz blok.

{
    "parent": "block/cube_all",
    "textures": {
        "all": "example:blocks/decorative"
    }
}

To prawie wszystko, co jest potrzebne, aby zadziałało po zarejestrowaniu bloku. Jedyną ważną rzeczą jest to, że nazwa pliku odpowiada nazwie rejestru użytej do zarejestrowania bloku i powinna być pisana małymi literami (1.11+ nazwy plików muszą być pisane małymi literami, wcześniej jest to tylko wielkość liter).

Nazwij plik JSON modelu my_block.json (zgodny z nazwą rejestru, którą my_block.json mu później) i zapisz go w my_block.json src\main\resources\assets\example\models\block\ (gdzie example jest identyfikatorem mod określonym w @Mod adnotacja twojej głównej klasy mod).

Model blokowy używa tutaj elementu nadrzędnego bloku / cube_all, co oznacza, że pojedyncza dostarczona tekstura zostanie zastosowana na wszystkich ścianach. Istnieją również inne domyślne modele, takie jak:

  • blok / sześcian (wszystkie sześć ścian przypisanych niezależnie)
  • blok / cube_bottom_top (górne i dolne ściany niezależne od boków)
  • blok / orientowalny (blok kierunkowy, np. piec)
  • blok / krzyż (kwiaty, wysoka trawa)
  • blok / uprawa (pszenica, marchew)

Zauważ, że każdy model określa tekstury, których używa za pomocą identyfikatora nazwy (np. "all" lub "top" ). Spójrz na model nadrzędny, aby określić, jakie są te nazwy, jeśli nie masz pewności. Nieprawidłowo określone tekstury mogą powodować problemy z brakiem tekstur bez zgłaszania błędów .

Możliwe jest również utworzenie całkowicie niestandardowego modelu lub niestandardowego modelu nadrzędnego. Ale na razie to wystarczy.

Nie zapomnij utworzyć tekstury, nazwij ją decorative.png (ponieważ tak określono w pliku JSON) i zapisz ją w pliku src\main\resources\assets\example\textures\blocks\

Zablokuj rejestrację

Rejestrowanie bloków odbywa się z głównej klasy mod lub metody klasy ModBlocks przywołanej z głównej klasy mod podczas preInit.

Block myBlock = new CustomBlock();
string registryname = "my_block";
block.setRegistryName(registryname);
block.setUnlocalizedName(block.getRegistryName().toString());
GameRegistry.register(block);

Istnieje ważny powód, aby używać block.setUnlocalizedName(block.getRegistryName().toString()); także! Zapewnia to, że niezlokalizowane nazwy bloku (i elementu) zawierają identyfikator modu, aby uniknąć konfliktów plików językowych między modami.

Och, chcesz też wersję przedmiotu, aby mogła ona również istnieć w twoim ekwipunku? To jest tworzone osobno po wersji 1.7.10 i zrobione w ten sposób:

ItemBlock ib = new ItemBlock(block);
ib.setRegistryName(registryname);
GameRegistry.register(ib);

Zauważ, że ustawiamy nazwę rejestru ItemBlock na ten sam ciąg co nasz blok. W ten sposób Forge i dopasuj bloki do ich odpowiednika ItemBlock i odwrotnie.

Ale czekaj, jest więcej!

Twój blok może mieć formę przedmiotu , ale ten przedmiot nie ma jeszcze modelu ani tekstury! Modele są automatycznie rejestrowane dla bloków, ale nie elementów. Można to wywołać tylko z serwera proxy klienta i nie obejmuje bloków z wariantami (takimi jak wełna lub liście).

ModelLoader.setCustomModelResourceLocation(
    ib , 0, new ModelResourceLocation(ib.getRegistryName(),"normal"));

Ogólnie rzecz biorąc, nie będziesz również potrzebował Modelu Przedmiotów JSON, ponieważ Kuźnia i wanilia zamiast tego polegają na modelu bloku, jednak nie zawsze tak jest. Jeśli okaże się, że potrzebujesz modelu pozycji JSON, po prostu nadaj go do bloku JSON i zapisz w pliku src\main\resources\assets\example\models\item\ z taką samą nazwą pliku, jak nazwa rejestru bloku.

{
    "parent": "example:block/my_block"
}


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