biome作成サンプル作る

初期化

forge 1.8.2 をダウンロード パッケージを Intellij で開く

mods.toml を編集 (modid = sampleworld)

modLoader="javafml"  
loaderVersion="[40,)"  
license="MIT"  
[[mods]]  
modId="sampleworld"  
version="${file.jarVersion}"  
displayName="Sample Biome and Dimension"  
authors="mikanbox55"  
description='''A minimal mod for generating dimension and biome'''  
  
[[dependencies.sampleworld]] #optional  
    modId="forge" #mandatory  
    mandatory=true #mandatory  
    versionRange="[40,)" #mandatory  
    ordering="NONE"  
    side="BOTH"  
[[dependencies.sampleworld]]  
    modId="minecraft"  
    mandatory=true  
    versionRange="[1.18.2,1.19)"  
    ordering="NONE"  
    side="BOTH"

biome 登録

ExampleMod を編集

  • パッケージ名も変更する
  • 2ファイル作成
    • EntryPoint
    • Register
tree ./src/main
./src/main
├── java
│   └── com
│       └── mikanbox55
│           └── sampleworld
│               ├── EntryPoint.java
│               └── Register.java
└── resources
    ├── META-INF
    │   └── mods.toml
    ├── assets
    │   └── sampleworld
    │       ├── lang
    │       │   └── en_us.json
    │       └── models
    ├── data
    │   └── sampleworld
    │       └── dimension
    │           └── sample_world_location.json
    └── pack.mcmeta

![[Pasted image 20221204044417.png]]

ここまでで登録されていることは確認。

確認

/locatebiome modドメイン:バイオーム名

dimension 追加

参考 : https://github.com/TelepathicGrunt/Bumblezone/blob/1.18-Forge/src/main/resources/data/the_bumblezone/dimension/the_bumblezone.json

./assets/data/domain/dimension/id.json

{  
  "type": "minecraft:overworld",  
  "generator": {  
    "type": "flat",  
    "settings": {  
      "biome": "sampleworld:sample_world_location",  
      "lakes": false,  
      "features": true,  
      "layers": [  
        {  
          "block": "minecraft:bedrock",  
          "height": 1  
        },  
        {  
          "block": "minecraft:deepslate",  
          "height": 64  
        },  
        {  
          "block": "minecraft:stone",  
          "height": 64  
        },  
        {  
          "block": "minecraft:dirt",  
          "height": 3  
        },  
        {  
          "block": "minecraft:grass_block",  
          "height": 1  
        }  
      ]  
    }  
  }  
}

dimension できたので実機確認 sample

/execute in minecraft:the_nether run tp 0 100 0

実際

/execute in sampleworld:sample_world_location run tp 0 100 0

![[Pasted image 20221204050107.png]]

確かにこれでできた。

次はワープブロックかな。

git プロジェクトから色々除外

デフォルト https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore

追加

*.DS_Store


build/
run/

※ (run/ を消す場合は ./gradlew genIntellijRuns が再度必要 )

https://github.com/github/gitignore/blob/main/Gradle.gitignore これも追加

20221203 JAMD を解析しまとめる

https://github.com/nanite/JAMD

動機

Minecraft の mod を作成したい。最低限のブロック / アイテムなど静的なリソースについては作成方法がわかったものの、ディメンション / バイオームについては作成方法が不明。 良さげなサンプルを見つけたので、これの動作確認と分析を行う

動作確認

git clone https://github.com/nanite/JAMD.git
chmod +x ./gradlew
./gradlew

これで準備完了。build のメニューが作成される

Package 分析

Memo

Package 分析

  • mods.toml (Id)

    • jambd
    • forge
    • minecraft
    • architectury (知らん)
  • コード(Forge)

  • 結構面倒。 common / forge / fabric が混在している

    • JAMDForge
      • modid登録
      • イベントバス登録
      • JAMD.Init()
    • JAMD.common.main
      • JAMDRegistry.REGISTRIES.forEach(DeferredRegister::register);
      • レジストリの各要素に対して, DeferredRegister::register を実行している
        • public static final List<DeferredRegister<?>> REGISTRIES = new ArrayList<>();
        • 普通の List の各要素に対して DeferredRegister::register を実行しているようだ
        • Java でも :: でメソッドを実行できる。 Stream API ではよくある方法っぽい
    • DataEvent
      • リソースの動的追加をおこなっている
  • コード(common)

    • 結合方法がいまいち不明
    • resources
      • assets.jamd
      • data.jamd.dimension
        • mining.json
        • 中身は dimension の定義のような JSON.これを参照しているのは?
  • JAMDRegistry に Biome 部分の登録コード発見

ここまでで一通り完了