GameHosting.pl

Notatki operatora

Własne przepisy w datapacku Minecraft: crafting i wytapianie

Druga część serii o datapackach. Tym razem konkret, który widać w grze od ręki: jak dodać własny przepis craftingu albo zmienić przepis vanilla, bez modów i bez restartu serwera. Pokażę dokładny format pliku JSON w Minecraft 1.21+ (folder w liczbie pojedynczej recipe), trzy najważniejsze typy przepisów z pełnymi przykładami, sposób na wyłączenie i nadpisanie domyślnych receptur oraz to, jak odświeżyć zmiany komendą /reload.

Opublikowano · ~9 min czytania · dotyczy Minecraft Java 1.21+

Seria: datapacki w Minecraft
Część 1: czym jest datapack i jak go uruchomić · Część 2: własne przepisy (czytasz) · Część 3: funkcje i scoreboardy · Część 4: własne przedmioty

W skrócie: przepisy w datapacku to pliki JSON w folderze data/<namespace>/recipe/ (uwaga, w 1.21+ liczba pojedyncza, dawniej recipes/). Każdy plik ma pole type, na przykład minecraft:crafting_shaped (z układem), minecraft:crafting_shapeless (bez układu) albo minecraft:smelting (piec). Wynik podajesz w polu result jako obiekt { "id": "...", "count": N } (od 1.20.5 to id, nie stare item). Przepis vanilla wyłączasz albo zmieniasz, robiąc plik o tej samej ścieżce w przestrzeni minecraft. Po wgraniu wystarczy /reload, bez restartu serwera.

Po co zmieniać przepisy datapackiem

Datapack pozwala dorzucić nowe receptury i przerobić te wbudowane, korzystając wyłącznie z mechanizmów samej gry. Nie instalujesz modów, nie zmuszasz graczy do niczego po stronie klienta, wszystko dzieje się na serwerze. To dlatego receptury są tak wdzięcznym pierwszym projektem: efekt widać natychmiast w stole rzemieślniczym albo w piecu.

Typowe zastosowania, które realnie pojawiają się na serwerach:

Jeśli to Twój pierwszy datapack, zacznij od części pierwszej, gdzie tłumaczę strukturę paczki, plik pack.mcmeta i jak datapack w ogóle włączyć. Tutaj zakładam, że masz już działający szkielet i wiesz, gdzie go wgrać.

Gdzie trafiają pliki przepisów

Przepisy to zwykłe pliki JSON. Każdy plik to jedna receptura, a jego ścieżka w datapacku wygląda tak:

data/<namespace>/recipe/<nazwa>.json

Trzy rzeczy, które trzeba zapamiętać:

Uwaga na wersję. Nazwa folderu (recipe kontra recipes) i wartość pack_format w pack.mcmeta muszą pasować do wersji gry. Cały ten poradnik opisuje format dla Minecraft Java 1.21 i nowszych. Jeśli prowadzisz starszy serwer, nazwa folderu i kilka pól JSON będą inne. Zawsze sprawdź wersję serwera, zanim zaczniesz pisać przepisy.

Typy przepisów

Pole type na początku pliku mówi grze, jaki to rodzaj receptury. Najważniejsze typy:

TypDo czego
minecraft:crafting_shapedCrafting z układem, liczy się rozmieszczenie składników w siatce (na przykład miecz, kilof).
minecraft:crafting_shapelessCrafting bez układu, składniki w dowolnych polach (na przykład barwniki, proste mieszanki).
minecraft:smeltingWytapianie w zwykłym piecu (ruda na sztabkę, jedzenie).
minecraft:blastingPiec hutniczy, szybsze niż zwykły piec, tylko rudy i metale.
minecraft:smokingWędzarnia, szybsze wytapianie jedzenia.
minecraft:campfire_cookingOgnisko, wolne pieczenie jedzenia bez paliwa.

Cztery ostatnie typy (piec, hutnik, wędzarnia, ognisko) mają niemal identyczną budowę pliku, różnią się głównie domyślnym czasem. Omówię je razem w sekcji o wytapianiu.

Przepis z układem: crafting_shaped

To najczęstszy przypadek. Przepis z układem ma trzy kluczowe pola:

Przykład: złote jabłko z jabłka otoczonego ośmioma sztabkami złota (taki sam układ jak w vanilla, dla czytelności).

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "GGG",
    "GAG",
    "GGG"
  ],
  "key": {
    "G": "minecraft:gold_ingot",
    "A": "minecraft:apple"
  },
  "result": {
    "id": "minecraft:golden_apple",
    "count": 1
  }
}

Jak to czytać: pattern rysuje siatkę 3x3, gdzie G to sztabka złota, a A to jabłko w środku. key przypisuje każdej literze przedmiot. result mówi, że wynikiem jest jedno złote jabłko.

Kilka rzeczy, które warto wiedzieć:

Przepis bez układu: crafting_shapeless

Tutaj rozmieszczenie nie ma znaczenia, liczy się tylko, co gracz wrzuci do siatki. Zamiast pattern i key podajesz jedno pole:

Przykład: cztery pochodnie z jednego patyka i jednej grudki węgla drzewnego, bez znaczenia, gdzie gracz je położy.

{
  "type": "minecraft:crafting_shapeless",
  "ingredients": [
    "minecraft:stick",
    "minecraft:charcoal"
  ],
  "result": {
    "id": "minecraft:torch",
    "count": 4
  }
}

Bezukładowych przepisów używaj tam, gdzie kształt nie ma sensu: mieszanki, barwniki, rozkładanie bloku na składniki. Jeśli ten sam składnik ma wystąpić kilka razy, po prostu powtarzasz go na liście (na przykład trzy sztabki żelaza to trzy osobne wpisy "minecraft:iron_ingot").

Wytapianie: smelting, blasting, smoking, campfire_cooking

Receptury piecowe mają wspólny, prosty układ. Pola:

Przykład: wytapianie własnej rudy na sztabkę miedzi w zwykłym piecu.

{
  "type": "minecraft:smelting",
  "ingredient": "minecraft:raw_copper",
  "result": {
    "id": "minecraft:copper_ingot"
  },
  "experience": 0.7,
  "cookingtime": 200
}

Te same pola działają dla pozostałych trzech typów, zmieniasz tylko type. Różnią się domyślnym czasem:

TypDomyślny czasUrządzenie
minecraft:smelting200 ticków (10 s)Piec
minecraft:blasting100 ticków (5 s)Piec hutniczy
minecraft:smoking100 ticków (5 s)Wędzarnia
minecraft:campfire_cooking600 ticków (30 s)Ognisko

W praktyce, jeśli chcesz, żeby rudę dało się wytopić zarówno w zwykłym piecu, jak i w hutniku, robisz dwa osobne pliki: jeden z minecraft:smelting, drugi z minecraft:blasting. Jedna receptura obsługuje jedno urządzenie.

Nadpisywanie i wyłączanie przepisów vanilla

To moment, w którym datapacki naprawdę błyszczą na serwerze. Mechanizm jest banalnie prosty: plik o tej samej ścieżce w przestrzeni minecraft nadpisuje przepis wbudowany. Datapack z wyższym priorytetem wygrywa z plikami gry.

Zmiana przepisu vanilla

Chcesz, żeby z jednego pnia powstawało sześć desek zamiast czterech? Tworzysz plik o nazwie pasującej do receptury vanilla i wstawiasz swój wynik. Receptury vanilla na deski nazywają się po gatunku drewna, na przykład:

data/minecraft/recipe/oak_planks.json
{
  "type": "minecraft:crafting_shapeless",
  "ingredients": [
    "minecraft:oak_log"
  ],
  "result": {
    "id": "minecraft:oak_planks",
    "count": 6
  }
}

Po /reload gra użyje Twojej wersji zamiast oryginalnej, bo ścieżka jest identyczna.

Wyłączenie przepisu

Żeby zablokować skraftowanie czegoś (na przykład bloku TNT), najprościej nadpisać jego przepis recepturą niewykonalną. Tworzysz plik o tej samej ścieżce co przepis vanilla i wstawiasz układ, którego gracz w normalnej grze nie zestawi (na przykład wymaga przedmiotu, który nie istnieje w obiegu, albo blokujesz go barierą). Ścieżka receptury vanilla na TNT to:

data/minecraft/recipe/tnt.json

Wstaw tam przepis, którego nie da się wykonać, na przykład wymagający dziewięciu bloków bariery (przedmiot dostępny tylko dla operatorów w trybie kreatywnym):

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "BBB",
    "BBB",
    "BBB"
  ],
  "key": {
    "B": "minecraft:barrier"
  },
  "result": {
    "id": "minecraft:tnt",
    "count": 1
  }
}

W praktyce żaden zwykły gracz nie zdobędzie dziewięciu barier, więc przepis przestaje istnieć w rozgrywce. To czystszy sposób niż polowanie na bloki, bo nie zostawia działającej, dziwnej receptury.

Z doświadczenia: nazwy przepisów vanilla łatwo zgadnąć, zwykle to po prostu nazwa przedmiotu (na przykład torch, tnt, oak_planks), ale część ma sufiks albo wariant (na przykład _from_). Jeśli nadpisanie nie działa po /reload, najpewniej trafiłeś w złą nazwę pliku. Wtedy warto sprawdzić oryginalne ścieżki receptur w wbudowanym datapacku gry albo w dokumentacji, zamiast zgadywać dalej.

Odświeżanie zmian: /reload

Najlepsza wiadomość na koniec: zmiany w przepisach nie wymagają restartu serwera. Po wgraniu albo edycji plików wpisujesz w grze (jako operator) lub w konsoli serwera:

/reload

Komenda ponownie wczytuje wszystkie datapacki, czyli przepisy, funkcje, tabele łupów i tagi. Jeśli wszystko jest poprawne, zobaczysz komunikat o przeładowaniu, a nowy przepis od razu pojawi się w stole rzemieślniczym albo piecu.

Kilka praktycznych uwag:

Najczęstsze pytania

Folder recipe czy recipes w datapacku?

W Minecraft 1.21+ to liczba pojedyncza: data/<namespace>/recipe/. Starsze wersje używały recipes/. To częsta pułapka przy przenoszeniu starych paczek, na nowej wersji przepisy z recipes/ się nie wczytają. Dopasuj nazwę folderu i pack_format do wersji serwera.

Jak wygląda pole result w przepisie w 1.21?

Od wersji 1.20.5 result to obiekt z polem id i opcjonalnym count, na przykład "result": { "id": "minecraft:stick", "count": 4 }. Wcześniej używało się item zamiast id. Skopiowany stary przepis z polem item w nowej wersji może się nie wczytać.

Jak wyłączyć przepis vanilla datapackiem?

Tworzysz plik o tej samej ścieżce co przepis wbudowany, w przestrzeni minecraft (na przykład data/minecraft/recipe/tnt.json), i wstawiasz tam recepturę niewykonalną albo zmienioną. Datapack o wyższym priorytecie nadpisuje plik o tej samej ścieżce, więc oryginał przestaje obowiązywać.

Czym różni się crafting_shaped od crafting_shapeless?

crafting_shaped liczy układ składników, definiujesz go polami pattern i key. crafting_shapeless ignoruje układ, podajesz listę w polu ingredients. Z układem robisz przedmioty, których kształt ma znaczenie (miecz), bez układu proste mieszanki (barwniki).

Czy po dodaniu przepisu trzeba restartować serwer?

Nie. Po zmianie plików wystarczy /reload, serwer wczyta datapacki bez restartu. Pełny restart jest potrzebny tylko przy dodawaniu lub usuwaniu całego datapacka z listy (/datapack list) albo zmianach w pack.mcmeta. Błąd po /reload oznacza literówkę w JSON.

Dalej w serii

Masz już własne przepisy. W części trzeciej przechodzimy do funkcji (pliki .mcfunction) i scoreboardów, czyli automatyzacji i liczenia zdarzeń na serwerze. Jeśli pominąłeś podstawy, wróć do części pierwszej o strukturze i włączaniu datapacka.

Powiązane