Begge barna mine har spilt mye Minecraft opp gjennom årene. Det er på en måte spillet de kommer tilbake til - igjen og igjen. Enten for å kverke Ender-dragen for n’te gang eller bare for å bygge artige ting. I det siste har datteren min fått dilla på SWEM - et sett utvidelser som gjør at man kan drive med hester som på en ekte rideskole. Hestene må mates og behandles riktig - og kan lære seg å sales opp til å ri hinderløyper og slikt. Detaljrikheten og realismen er faktisk ganske imponerende - bra nok til å underholde en jente som aller helst skulle vært i den ekte stallen hver dag.

Google Minecraft SWEM jumping

Det hele består av en rekke utvidelser eller “mods” som de kalles. Den pakken vi spiller på Curseforge består av rundt 25 forskjellige mods satt sammen. Så jeg ble litt nysgjerrig på hvordan utviklingen av ting som dette foregår. Hvor vanskelig er det egentlig å komme i gang med å lage egne mods til Minecraft - og gjøre dem tilgjengelig på for eksempel CurseForge?

Installere utviklingsmiljø

Minecraft mods lager man ved å programmere i Java. Flaks at jeg akkurat oppdaterte meg på den fronten.

  1. Man må ha en versjon av JDK 17 installert (64-bits) og en editor - jeg bruker IntelliJ av gammel vane. SDKMAN! er fin for å sjonglere forskjellige versjoner av JDK.

  2. Selve SDK for Minecraft mods laster man ned fra Minecraft Forge - jeg lastet ned siste versjon (1.20.6) av Mdk/zip filen. Denne pakken er egentlig hovedsaklig en samling smarte gradle-tasks - samt et par eksempel-filer i Java.

  3. Pakk ut zip-filen på ønsket sted - jeg har en projects katalog for sånt. Du får da en katalog som heter det samme som zip-filen du lastet ned - forge-1.20.6-50.0.8-mdk i mitt tilfelle.

  4. Rename den nye katalogen din til ønsket prosjektnavn - jeg har kalt min minecraft-mod-example.

  5. Åpne filen gradle.properties og endre på alle properties i bunn av filen som heter mod_x. Min ser nå slik ut:

# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=examplemod
# The human-readable display name for the mod.
mod_name=Kodemaker Mod
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=All Rights Reserved
# The mod version. See https://semver.org/
mod_version=1.0.0
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
mod_group_id=com.kodemaker.examplemod
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=Eivind Waaler
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description=Example mod providing Kodemaker effects.
  1. Som det står på mod_group_id propertien - må man også rename pakken med Java-filer - så min heter nå com.kodemaker.examplemod.

  2. Da er det bare å åpne et terminal-vindu og kjøre ./gradlew runClient - da lastes det ned rett utgave av Minecraft og starter opp med vår nye mod installert. Hos meg ser det slik ut når jeg går inn på mods og velger “Kodemaker Mod 1.0.0”:

Skjermbilde av første kjøring

Så langt har denne prosessen imponert meg. Superlett å komme i gang - hvertfall for meg som kjenner Gradle og Java fra før. Det er så digg med sånne prosjekt hvor bootstrap tar minimalt med tid - og man kan fokusere på den egentlig jobben. Da er det jo egentlig bare kreativiteten som setter grenser for hva man kan få til!

Utvikle mods

Her står man jo helt fritt. Anbefaler å søke etter noen som lager noe lignende med det du selv ønsker - så dukker det sikkert opp en youtube video. Jeg kikket for eksempel på denne mens jeg lagde min lille mod.

Tenkte jeg skulle være skikkelig firma-nasjonalist - og lage en Kodemaker-blokk. Først laget jeg en texture ved å bruke Preview på Mac (anbefaler å heller laste ned et skikkelig tegneverktøy for dette) - et 16x16 pixel png bilde:

Preview som tegneprogram

Denne lagret jeg som kodemaker_block.png under /src/main/resources/assets/examplemod/textures/block i prosjektet mitt.

Jeg har valgt å kalle min nye blokk kodemaker_block i Java-koden:

public static final RegistryObject<Block> KODEMAKER_BLOCK = BLOCKS.register(
   "kodemaker_block",
   () -> new Block(
      BlockBehaviour.Properties.of().mapColor(MapColor.COLOR_PINK)
   )
);

Deretter kan jeg lage noen json-filer som plukkes opp automatisk på navn fra classpath. Jeg har /src/main/resources/assets/examplemod/blockstates/kodemaker_block.json:

{
  "variants": {
    "": {
      "model": "examplemod:block/kodemaker_block"
    }
  }
}

Denne sier at alle varianter skal bruke modellen jeg har i filen /src/main/resources/assets/examplemod/models/block/kodemaker_block.json:

{
  "parent": "block/cube_all",
  "textures": {
    "all": "examplemod:block/kodemaker_block"
  }
}

Her sier vi at blokken skal rendres som standard kube - med den fancy texturen jeg lagde i starten. Referansene går bare på classpath som nevnt lengre opp.

På tide å teste igjen - og lage en verden full av Kodemaker-blokker. Kjører ./gradlew runClient igjen - så er det bare å bygge:

Kjøre Minecraft med Kodemaker-blokker

Dette var jo relativt greit. Mye av verden i Minecraft er laget på denne måten, hvor man blander inn gjennomsiktighet i tillegg. Bladene på trærne i skjermbildet har for eksempel en texture hvor man kan se gjennom deler. I tillegg kan man selvsagt si hvordan blokker skal oppføre seg under forskjellige forhold - skal de legge igjen en diamant eller noe når man ødelegger dem for eksempel? Eller kanskje de skal se forskjellig ut fra forskjellige vinkler - da kan man legge egne textures til hver retning i stedet for å bruke all som jeg gjorde i filen min.

Publisere mods

Ved å kjøre kommandoen ./gradlew build får man bygget en jar-fil som kan legges rett i mods katalogen til en kompatibel Minecraft installasjon.

Om man vil publisere mods må man opprette bruker og følge retningslinjene til CurseForge eller en av de andre stedene som hoster mods. Jeg tror det er ganske grei skuring, men har ikke gjort det selv. Ser det finnes GitHub Actions som kanskje kan være til hjelp? Digg å få mods publisert automatisk når man pusher nye versjoner av koden.

Konklusjon

Virker ganske smooth å lage egne utvidelser til Minecraft. Imponerende bra oppsettet man får med Gradle - veldig kjapt å komme i gang med kjørende eksempel. Det som tar tid er nok å tegne textures og få disse til å se bra ut - men det er jo også mye av moroa når man skal lage dataspill 😊