Notatki operatora
Jak zrobić datapack w Minecraft od zera
Datapack to najprostszy sposób, żeby zmienić reguły świata Minecraft bez ani jednego moda i bez instalowania czegokolwiek po stronie graczy. W tym poradniku robimy datapack od zera: tłumaczymy, czym jest i gdzie go wgrać, składamy plik pack.mcmeta i strukturę folderów, piszemy pierwszą funkcję .mcfunction, podpinamy ją pod tagi minecraft:load i minecraft:tick, a na koniec aktywujemy całość komendą /reload. Przykłady celują w Minecraft 1.21 i nowsze.
Seria: datapacki w Minecraft od podstaw
- Część 1: Datapack od zera (czytasz tę część)
- Część 2: Własne przepisy (recipes)
- Część 3: Funkcje i scoreboardy
- Część 4: Własne przedmioty i advancementy
W skrócie: datapack to czysta zawartość vanilla, nie mod, działa w grze pojedynczej i na serwerze, a gracze nie instalują nic po swojej stronie. Wgrywasz go do folderu świata, do <świat>/datapacks/. Minimalny datapack to plik pack.mcmeta (z pack_format i description) plus folder data/<namespace>/. Funkcje piszesz w plikach .mcfunction, a uruchamiasz je przez tagi minecraft:load (raz po starcie) i minecraft:tick (co tik). Włączasz całość komendą /reload, sprawdzasz przez /datapack list. Uwaga na 1.21: nazwy folderów są teraz pojedyncze (function, a nie functions).
Czym właściwie jest datapack
Datapack (po polsku często „paczka danych”) to zestaw plików, które zmieniają reguły i zawartość konkretnego świata Minecraft, korzystając wyłącznie z mechanizmów wbudowanych w grę. Najważniejsze cechy, które warto zrozumieć, zanim zaczniesz:
- To nie jest mod. Datapack działa w czystym, niezmodyfikowanym Minecraft (vanilla). Nie potrzebujesz Forge, Fabric ani żadnego loadera modów. Wszystko dzieje się na silniku, który masz już w grze.
- Gracze nie instalują nic u siebie. Datapack siedzi po stronie świata albo serwera. Osoba dołączająca do serwera dostaje jego efekty automatycznie, bez pobierania plików. To duża różnica względem paczek zasobów (resource packs), które gracze ściągają, żeby zmienić wygląd gry.
- Działa tak samo w grze pojedynczej i na serwerze. Ten sam folder datapacka wrzucisz do świata na komputerze lub do świata na serwerze, struktura jest identyczna.
Co datapack potrafi? Dodawać własne przepisy w rzemiośle, zmieniać tabele łupów, definiować osiągnięcia (advancementy), a przede wszystkim uruchamiać funkcje, czyli listy komend wykonywanych automatycznie. To właśnie funkcje robią z datapacka żywe narzędzie: dzięki nim świat może wyświetlać tytuły, nadawać efekty, prowadzić punktację czy reagować na to, co robią gracze.
Gdzie wgrać datapack
Datapack zawsze trafia do folderu danego świata, do podfolderu datapacks/. Lokalizacja zależy od tego, gdzie świat żyje:
- Gra pojedyncza:
.minecraft/saves/<nazwa_świata>/datapacks/ - Serwer: folder świata na serwerze, czyli zwykle
world/datapacks/. Nazwa świata zależy od ustawienialevel-namew plikuserver.properties, więc jeśli zmieniłeś tę wartość, podfolderdatapacks/będzie w odpowiednio nazwanym katalogu.
Do tego folderu możesz wrzucić datapack na dwa sposoby:
- jako rozpakowany folder (na przykład
moj-datapack/, a w środkupack.mcmetaidata/), - jako plik .zip, w którym
pack.mcmetależy bezpośrednio w korzeniu archiwum (a nie zagnieżdżony w dodatkowym folderze, to częsty błąd).
Z doświadczenia: przy pakowaniu do .zip pilnuj, żeby pack.mcmeta i folder data/ były na samej górze archiwum. Jeśli spakujesz folder nadrzędny tak, że w zipie wszystko ląduje w środku moj-datapack/, Minecraft nie znajdzie pack.mcmeta i potraktuje paczkę jako niepoprawną. W razie wątpliwości wgrywaj rozpakowany folder, jest mniej zawodny.
Struktura datapacka
Minimalny działający datapack to dwie rzeczy: plik pack.mcmeta w korzeniu i folder data/. Pełniejszy układ, do którego dążymy w tym poradniku, wygląda tak:
moj-datapack/
├── pack.mcmeta
└── data/
├── przyklad/
│ └── function/
│ ├── start.mcfunction
│ └── petla.mcfunction
└── minecraft/
└── tags/
└── function/
├── load.json
└── tick.json
Dwa terminy, które trzeba znać:
- Namespace (przestrzeń nazw): to katalog bezpośrednio w
data/, w naszym przykładzieprzyklad. To Twoja „marka” w datapacku, do funkcji odwołujesz się przez pełną nazwęnamespace:funkcja, czyli na przykładprzyklad:start. Namespaceminecraftjest zarezerwowany dla samej gry, dlatego tagiloaditickwkładamy dodata/minecraft/. - Folder zawartości: wewnątrz namespace siedzą foldery typu zawartości, na przykład
functiondla funkcji.
Ważne dla wersji 1.21 i nowszych: od Minecraft 1.21 nazwy folderów zawartości są pojedyncze. Używasz function, advancement, recipe, loot_table, predicate, a także tags/function. We wcześniejszych wersjach (1.20.x i starszych) te same foldery nazywały się w liczbie mnogiej: functions, advancements, recipes, loot_tables, predicates oraz tags/functions. Jeśli przerabiasz starszy poradnik na nowej wersji gry, to najczęstszy powód, dla którego „nic nie działa”. Przykłady w tym artykule używają nazw pojedynczych, czyli formatu 1.21+.
Plik pack.mcmeta
pack.mcmeta to plik w formacie JSON, który mówi grze, że ma do czynienia z datapackiem i dla jakiej wersji jest on przeznaczony. Minimalna, poprawna zawartość wygląda tak:
{
"pack": {
"pack_format": 48,
"description": "Mój pierwszy datapack"
}
}
Dwa pola, które tu widzisz:
- pack_format: liczba mówiąca grze, dla której wersji jest paczka. Trzeba ją dopasować do wersji serwera, bo przy zbyt dużej rozbieżności Minecraft oznaczy datapack jako niezgodny i go nie włączy.
- description: krótki opis widoczny na liście datapacków w grze. Możesz wpisać dowolny tekst.
Wartości pack_format dla popularnych wersji 1.21:
| Wersja Minecraft | pack_format (datapack) |
|---|---|
| 1.21 i 1.21.1 | 48 |
| 1.21.2 i 1.21.3 | 57 |
| 1.21.4 | 61 |
| 1.21.5 | 71 |
| 1.21.6 | 80 |
Najnowsze wersje gry potrafią też zapisywać format jako parę liczb (format główny i poboczny), a w pack.mcmeta można podać zakres zgodności przez pola min_format i max_format. Na start nie musisz się tym przejmować, zwykły pack_format dopasowany do Twojej wersji w zupełności wystarcza. Jeśli grasz na nowszej wersji niż 1.21.6, sprawdź aktualny numer formatu w oficjalnej dokumentacji, schemat pliku pozostaje taki sam.
Uwaga na JSON: pack.mcmeta musi być poprawnym JSON-em. Zbędny przecinek po ostatnim polu, brak cudzysłowu albo niezamknięty nawias sprawią, że gra w ogóle nie wczyta paczki. Jeśli coś nie działa, w pierwszej kolejności wklej zawartość pliku do dowolnego walidatora JSON.
Pierwsza funkcja .mcfunction
Funkcja to zwykły plik tekstowy z rozszerzeniem .mcfunction, w którym każda linia to jedna komenda (taka sama jak ta, którą wpisałbyś na czacie, tylko bez ukośnika na początku). Pliki funkcji leżą w data/<namespace>/function/.
Zrobimy dwie funkcje. Pierwsza, start.mcfunction, uruchomi się raz po załadowaniu świata i wyświetli wszystkim tytuł na ekranie:
# data/przyklad/function/start.mcfunction
title @a title {"text":"Datapack działa!","color":"green"}
title @a subtitle {"text":"Witaj w świecie z paczką danych","color":"gray"}
tellraw @a {"text":"[przyklad] Datapack załadowany poprawnie.","color":"aqua"}
Linia zaczynająca się od # to komentarz, gra go ignoruje. Selektor @a oznacza „wszyscy gracze”. Komenda title pokazuje duży napis na środku ekranu, a tellraw wypisuje wiadomość na czacie.
Druga funkcja, petla.mcfunction, będzie się wykonywać co tik. To prosty przykład funkcji „pętli”, czyli czegoś, co działa w tle. Żeby nie komplikować, w tej części serii dajemy co tik krótki, nieszkodliwy efekt nocnego widzenia wszystkim graczom:
# data/przyklad/function/petla.mcfunction
effect give @a night_vision 12 0 true
Efekt trwa 12 sekund i jest odnawiany co tik, dzięki czemu nie miga (parametr true na końcu ukrywa ikonkę cząsteczek). To celowo nieszkodliwy przykład, żeby zobaczyć, że funkcja tick faktycznie działa w tle. W trzeciej części serii rozbudujemy pętle o scoreboardy i warunki, które reagują na konkretne zachowania graczy.
Tagi minecraft:load i minecraft:tick
Same pliki funkcji nic nie robią, dopóki nie powiesz grze, kiedy je uruchamiać. Służą do tego dwa wbudowane tagi funkcji, które Minecraft sprawdza automatycznie:
- minecraft:load uruchamia wskazane funkcje raz, zaraz po załadowaniu świata oraz po każdym
/reload. Idealne do jednorazowego ustawienia rzeczy (powitanie, założenie scoreboardu). - minecraft:tick uruchamia funkcje co tik gry, czyli około 20 razy na sekundę. Tu wkładasz wszystko, co ma działać w tle i ciągle sprawdzać warunki.
Pliki tagów to JSON-y w data/minecraft/tags/function/ (pamiętaj, pojedyncze function w 1.21+). Tag load wskazuje funkcję startową:
// data/minecraft/tags/function/load.json
{
"values": [
"przyklad:start"
]
}
A tag tick wskazuje funkcję pętli:
// data/minecraft/tags/function/tick.json
{
"values": [
"przyklad:petla"
]
}
W tablicy values podajesz funkcje po ich pełnej nazwie namespace:funkcja, bez rozszerzenia .mcfunction i bez słowa function w ścieżce. Czyli plik data/przyklad/function/start.mcfunction to po prostu przyklad:start. Do jednego tagu możesz dopisać wiele funkcji, oddzielając je przecinkami w tablicy.
Aktywacja: /reload i /datapack list
Gdy pliki są na miejscu, wczytujesz datapack bez restartu serwera:
- Wgraj datapack do folderu
<świat>/datapacks/(rozpakowany folder albo .zip). - Wpisz
/reloadw grze lub w konsoli serwera. Ta komenda przeładowuje wszystkie datapacki i od razu uruchamia funkcje z taguminecraft:load, więc po jej wykonaniu powinieneś zobaczyć tytuł z naszego przykładu. - Sprawdź
/datapack list. Komenda wypisze paczki dostępne i włączone. Twój datapack powinien być na liście włączonych. Jeśli widnieje jako „dostępny, ale wyłączony” lub jako niezgodny, najczęściej winny jest złypack_formatalbo błąd wpack.mcmeta.
Gdyby paczka się nie załadowała, zajrzyj do konsoli serwera (albo do logów). Minecraft wypisuje tam konkretne błędy ładowania datapacka, na przykład którą funkcję uznał za niepoprawną i dlaczego. To znacznie szybsze niż zgadywanie.
| Komenda | Co robi |
|---|---|
/reload | Przeładowuje datapacki i uruchamia funkcje z tagu minecraft:load. |
/datapack list | Pokazuje datapacki dostępne i włączone w świecie. |
/datapack enable "nazwa" | Włącza datapack, który jest dostępny, ale wyłączony. |
/datapack disable "nazwa" | Wyłącza datapack bez usuwania plików. |
/function przyklad:start | Ręcznie uruchamia konkretną funkcję, przydatne przy testach. |
Cały przykład w jednym miejscu
Jeśli chcesz po prostu skopiować i sprawdzić, że wszystko gra, oto komplet plików naszego datapacka „przyklad” dla wersji 1.21:
moj-datapack/
├── pack.mcmeta
└── data/
├── przyklad/
│ └── function/
│ ├── start.mcfunction
│ └── petla.mcfunction
└── minecraft/
└── tags/
└── function/
├── load.json
└── tick.json
pack.mcmeta
{
"pack": {
"pack_format": 48,
"description": "Mój pierwszy datapack"
}
}
start.mcfunction
title @a title {"text":"Datapack działa!","color":"green"}
tellraw @a {"text":"[przyklad] Datapack załadowany poprawnie.","color":"aqua"}
petla.mcfunction
effect give @a night_vision 12 0 true
load.json
{ "values": ["przyklad:start"] }
tick.json
{ "values": ["przyklad:petla"] }
Wrzuć folder do <świat>/datapacks/, wpisz /reload i powinieneś zobaczyć zielony tytuł oraz wiadomość na czacie. Od tej chwili masz działający szkielet, do którego dokładasz kolejne funkcje, przepisy i przedmioty z dalszych części serii.
Najczęstsze pytania
Czy datapack to mod i czy trzeba coś instalować po stronie gracza?
Nie, datapack to nie mod. Działa w czystym Minecraft (vanilla), bez Forge czy Fabric, a gracze nie instalują niczego u siebie. Wszystko dzieje się po stronie świata lub serwera, więc tym samym datapackiem posłużysz się w grze pojedynczej i online.
Gdzie wgrać datapack na serwerze i w grze pojedynczej?
Zawsze do folderu świata, do podfolderu datapacks/. W grze pojedynczej to .minecraft/saves/<świat>/datapacks/, na serwerze zwykle world/datapacks/ (nazwa świata wynika z level-name w server.properties). Wrzucasz rozpakowany folder lub .zip, potem /reload i sprawdzasz przez /datapack list.
Jak wygląda minimalny pack.mcmeta i co to pack_format?
To JSON z obiektem pack i dwoma polami: pack_format (numer wersji formatu) oraz description (opis). Dla 1.21 i 1.21.1 pack_format to 48, dla 1.21.2 i 1.21.3 to 57, dla 1.21.4 to 61. Niedopasowany format sprawia, że gra oznacza paczkę jako niezgodną.
Dlaczego mój datapack nie chce się załadować po /reload?
Zwykle przez błąd składni w pack.mcmeta, zły pack_format albo złą strukturę folderów. Od 1.21 nazwy folderów są pojedyncze (function, recipe, loot_table), a nie mnogie. Sprawdź też, czy funkcje leżą w data/<namespace>/function/ z rozszerzeniem .mcfunction, a tagi w data/minecraft/tags/function/. Błędy ładowania wypisuje konsola serwera.
Czym różni się tag minecraft:load od minecraft:tick?
Funkcje z minecraft:load uruchamiają się raz po starcie świata i po /reload, więc nadają się do jednorazowych ustawień. Funkcje z minecraft:tick wykonują się co tik (około 20 razy na sekundę) i służą do ciągłego sprawdzania warunków. Pliki tagów umieszczasz w data/minecraft/tags/function/load.json i tick.json.
Dalsze części serii
Masz już działający szkielet datapacka. W kolejnych częściach budujemy na nim konkretne rzeczy:
- Część 2: Własne przepisy (recipes), jak dodać własne receptury rzemiosła i pieca.
- Część 3: Funkcje i scoreboardy, liczniki, warunki i logika w pętli
tick. - Część 4: Własne przedmioty i advancementy, przedmioty z nazwą i własne osiągnięcia.
Powiązane
- Datapack to świetny start, ale gdy chcesz głębszych zmian (gotowe wtyczki, modpacki), zerknij na serwer Minecraft z modami, gdzie tłumaczymy różnicę między datapackiem, pluginem i modem.
- Jeśli dopiero stawiasz świat, od którego zaczniesz zabawę z datapackami, przejdź przez jak zrobić serwer Minecraft krok po kroku.
- Nie chcesz męczyć się z konfiguracją i aktualizacjami serwera? Gotowy hosting Minecraft Java w Supercraft daje dostęp do folderu świata przez panel, więc datapack wrzucasz w kilka sekund, a serwer aktualizuje się sam.