GameHosting.pl

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.

Opublikowano · ~9 min czytania

Seria: datapacki w Minecraft od podstaw

  1. Część 1: Datapack od zera (czytasz tę część)
  2. Część 2: Własne przepisy (recipes)
  3. Część 3: Funkcje i scoreboardy
  4. 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:

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:

Do tego folderu możesz wrzucić datapack na dwa sposoby:

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ć:

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:

Wartości pack_format dla popularnych wersji 1.21:

Wersja Minecraftpack_format (datapack)
1.21 i 1.21.148
1.21.2 i 1.21.357
1.21.461
1.21.571
1.21.680

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:

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:

  1. Wgraj datapack do folderu <świat>/datapacks/ (rozpakowany folder albo .zip).
  2. Wpisz /reload w grze lub w konsoli serwera. Ta komenda przeładowuje wszystkie datapacki i od razu uruchamia funkcje z tagu minecraft:load, więc po jej wykonaniu powinieneś zobaczyć tytuł z naszego przykładu.
  3. 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ły pack_format albo błąd w pack.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.

KomendaCo robi
/reloadPrzeładowuje datapacki i uruchamia funkcje z tagu minecraft:load.
/datapack listPokazuje 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:startRę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:

Powiązane