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.
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:
- Przepisy na przedmioty, których normalnie nie da się skraftować (na przykład bloki spawnera w trybie kreatywnej ekonomii albo siodło z żelaza i skóry).
- Łagodniejsze receptury survivalowe, na przykład tańsze pochodnie albo blok do szybszego transportu.
- Wyłączenie przepisów, których nie chcesz na serwerze (na przykład blokowanie skraftowania bloku TNT).
- Zmiana ilości wyniku, czyli ten sam przepis, ale zwraca więcej sztuk.
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ć:
- Folder w liczbie pojedynczej. W Minecraft 1.21+ katalog nazywa się
recipe. Starsze wersje używałyrecipes(liczba mnoga). To najczęstsza pułapka przy przenoszeniu starych paczek, na nowej wersji przepisy zrecipes/po prostu się nie wczytają. - Namespace to Twoja przestrzeń nazw. Dla własnych przepisów użyj dowolnej nazwy, na przykład
mojserwer. Identyfikator przepisu powstaje ze ścieżki: plikdata/mojserwer/recipe/zlote_jablko.jsonma idmojserwer:zlote_jablko. - Przestrzeń
minecraftnadpisuje vanilla. Plik wdata/minecraft/recipe/o tej samej nazwie co receptura wbudowana zastąpi ją. To mechanizm, którym wyłącza się i zmienia domyślne przepisy (więcej niżej).
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:
| Typ | Do czego |
|---|---|
minecraft:crafting_shaped | Crafting z układem, liczy się rozmieszczenie składników w siatce (na przykład miecz, kilof). |
minecraft:crafting_shapeless | Crafting bez układu, składniki w dowolnych polach (na przykład barwniki, proste mieszanki). |
minecraft:smelting | Wytapianie w zwykłym piecu (ruda na sztabkę, jedzenie). |
minecraft:blasting | Piec hutniczy, szybsze niż zwykły piec, tylko rudy i metale. |
minecraft:smoking | Wędzarnia, szybsze wytapianie jedzenia. |
minecraft:campfire_cooking | Ognisko, 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:
pattern: tablica od jednego do trzech wierszy, każdy wiersz to maksymalnie trzy znaki. Spacja oznacza puste pole w siatce.key: mapa, która tłumaczy każdą literę zpatternna konkretny przedmiot.result: obiekt z polemid(identyfikator przedmiotu) i opcjonalnymcount(ile sztuk powstaje).
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ć:
- Litery są dowolne. Możesz użyć dowolnych znaków, byle każda litera z
patternbyła opisana wkey, a spacja zawsze oznacza puste pole. - Układ ma znaczenie i można go przesuwać. Gra dopasowuje wzór niezależnie od tego, w którym rogu stołu gracz ułoży składniki, ale wzajemne położenie składników musi się zgadzać.
- Składnik może być tagiem. Zamiast jednego przedmiotu w
keymożesz podać tag, poprzedzając go znakiem#, na przykład"P": "#minecraft:planks"zaakceptuje deski dowolnego drewna. - Składnik może być listą. Litera może mapować na tablicę przedmiotów, na przykład
"X": ["minecraft:oak_log", "minecraft:birch_log"], wtedy pasuje którykolwiek z nich.
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:
ingredients: lista od jednego do dziewięciu składników. Każdy wpis to identyfikator przedmiotu, tag z#albo lista dopuszczalnych przedmiotów.result: tak samo jak wyżej, obiekt zidi opcjonalnymcount.
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:
ingredient: jeden składnik (identyfikator przedmiotu, tag z#albo lista). Uwaga, w liczbie pojedynczej, inaczej niżingredientsw bezukładowym craftingu.result: obiekt zidwyniku.experience: ile doświadczenia dostaje gracz za jeden wytopiony przedmiot (liczba, może być ułamkowa).cookingtime: czas wytapiania w tickach (20 ticków to jedna sekunda). To pole jest opcjonalne, gra ma domyślne wartości dla każdego typu.
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:
| Typ | Domyślny czas | Urządzenie |
|---|---|---|
minecraft:smelting | 200 ticków (10 s) | Piec |
minecraft:blasting | 100 ticków (5 s) | Piec hutniczy |
minecraft:smoking | 100 ticków (5 s) | Wędzarnia |
minecraft:campfire_cooking | 600 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:
- Błąd po
/reloadto sygnał o literówce. Jeśli konsola zgłosi problem z wczytaniem datapacka, najczęściej to błąd składni JSON (brakujący przecinek, niezamknięty nawias) albo zła nazwa pola. Sprawdź plik w walidatorze JSON, zanim zaczniesz szukać głębiej. - Pełny restart tylko przy zmianach listy paczek. Dodanie albo usunięcie całego datapacka (komendy
/datapack enable,/datapack disable, podgląd/datapack list) i zmiany wpack.mcmetawymagają restartu serwera, żeby zadziałały pewnie. Sama edycja istniejących plików łapie się na/reload. - Sprawdź widoczność w grze. Po przeładowaniu otwórz stół rzemieślniczy i ułóż składniki, albo wrzuć surowiec do pieca. Jeśli przepis nie działa, a
/reloadnie zgłosił błędu, najpewniej plik leży w złym folderze (pamiętaj o liczbie pojedynczejrecipe) albo pomyliłeśidprzedmiotu.
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
- Jeśli nie chcesz konfigurować datapacków ręcznie ani pilnować zgodności wersji, gotowy serwer z dostępem do plików i panelem znajdziesz w hostingu Minecraft Java w Supercraft, datapack wgrywasz przez panel, a
/reloadodpalasz z konsoli serwera. - Datapacki w Minecraft: czym są i jak je uruchomić (część 1)
- Funkcje i scoreboardy w datapacku (część 3)
- Hosting serwera Minecraft: VPS vs zarządzany, dobór i koszt