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 追加
./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
- リソースの動的追加をおこなっている
- JAMDForge
-
コード(common)
- 結合方法がいまいち不明
- resources
- assets.jamd
- data.jamd.dimension
- mining.json
- 中身は dimension の定義のような JSON.これを参照しているのは?
-
JAMDRegistry に Biome 部分の登録コード発見
ここまでで一通り完了