Add-On開發教學 #4 新增生態系並生成建築物

Minecraft基岩版允許自訂生態系,並在世界中生成建築物。

例如Expansive FantasyExpansive Biomes這二個Add-On,不只新增地形豐富的生態系,還有新生物。
 
這篇文章會教學製作一個生成機率很高的「糖果」生態系,並在裡面生成糖果樹、糖果屋。
新增的方塊有糖果草地、糖果磚、糖果樹幹,這個生態系會以這些方塊做為基礎。





影片版教學:




      新增糖果方塊

      這部分的細節參考#1如何新增方塊
      總共新增糖果草地、糖果土、糖果樹幹、糖果樹葉方塊。


      準備建築物

      在新增生態系前,先使用糖果方塊蓋好房子,拿出結構方塊,把這個糖果屋儲存成.structure檔案。
      注意結構方塊儲存時,命名空間只能使用"mystructure",然後不要把結構方塊本身也儲存進去。如果希望裡面有生物的話,儲存時可勾選包含實體。
      例如這個檔案儲存成"candy_house.mcstructure",把檔案放到行為包的structures/資料夾裡面。



      如果不會用結構方塊可以看這部影片:


      新增生態系

      這個糖果生態系會以糖果草地作為表層,然後底下的方塊都是糖果土。
      不過1.17大改世界生成的機制,因此這個只會生成在地表附近,地下可能還是會有天然洞穴。
      在行為包biomes/新增candy_biome.json,這個檔案定義了糖果生態系的構成方塊以及生成機率。輸入以下內容:
      {
      	"format_version": "1.17.0",
      	"minecraft:biome": {
      		"description": {
      			//不需要命名空間
      			"identifier": "candy_biome"
      		},
      		"components": {
      			//氣候
      			"minecraft:climate": {
      				"downfall": 0.2,
      				"temperature": 15
      			},
      			//地形高度
      			"minecraft:overworld_height": {
      				"noise_type": "lowlands",
      				"noise_params": [
      					0.4,
      					0.6
      				]
      			},
      			//生成的方塊
      			"minecraft:surface_parameters": {
      				//河的深度
      				"sea_floor_depth": 5,
      				"sea_floor_material": "minecraft:water",
      				//地下方塊
      				"foundation_material": "bridge:dirt_candy",
      				"mid_material": "bridge:dirt_candy",
      				//表層方塊
      				"top_material": "bridge:grass_candy",
      				"sea_material": "minecraft:water"
      			},
      			//生成機率
      			"minecraft:overworld_generation_rules": {
      				//以氣候來判別
      				"generate_for_climates": [
      					[
      						"medium",
      						80
      					],
      					[
      						"warm",
      						80
      					],
      					[
      						"cold",
      						80
      					]
      				]
      			},
      			//識別用的標籤
      			"candy_biome": {}
      		}
      	}
      }
      


      設定建築物生成條件

      放好.mcstructure檔案之後,再來就是設定生成條件。
      建築物、樹、礦物等都屬於feature,因此在行為包features/資料夾新增candy_house.json:
      {
          "format_version": "1.13.0",
          "minecraft:structure_template_feature": {
              "description": {
                  "identifier": "bridge:candy_house"
              },
              //結構方塊儲存時只能以mystructure當命名空間
              "structure_name": "mystructure:candy_house",
              "adjustment_radius": 4,
              //可指定生成時面朝東南西北,或者隨機
              "facing_direction": "random",
              //生成要素
              "constraints": {
                  "grounded": {},
                  "unburied": {},
                  "block_intersection": {
                      "block_allowlist": [
                          "minecraft:air"
                      ]
                  }
              }
          }
      }
      


      再來設定生成條件,行為包feature_rules/資料夾新增candy_house_feature.json:
      {
      	"format_version": "1.13.0",
      	"minecraft:feature_rules": {
      		"description": {
      			"identifier": "bridge:candy_house_feature",
      			"places_feature": "bridge:candy_house"
      		},
      		"conditions": {
      			"placement_pass": "before_surface_pass"
      		},
      		"distribution": {
      			"iterations": 10,
      			"x": {
      				"distribution": "uniform",
      				"extent": [
      					0,
      					8
      				]
      			},
      			"y": {
      				"distribution": "uniform",
      				"extent": [
      					0,
      					"query.heightmap(variable.worldx, variable.worldz) * 1.5"
      				]
      			},
      			"z": {
      				"distribution": "uniform",
      				"extent": [
      					0,
      					8
      				]
      			}
      		}
      	}
      }
      


      新增糖果樹

      樹木也可以當成建築物來處理,但Minecraft有內建的樹木生成feature可以使用,類似的還有礦物feature、植物feature、紫水晶feature,這些feature可直接套用Minecraft原版的生成機制。

      在行為包features/資料夾,定義糖果樹的feature,新增candy_tree.json:
      {
      	"format_version": "1.17.0",
      	"minecraft:tree_feature": {
      		"description": {
      			"identifier": "bridge:candy_tree"
      		},
      		"base_block": [
      			"bridge:grass_candy"
      		],
      		//樹叢
      		"base_cluster": {
      			"may_replace": [
      				"minecraft:air"
      			],
      			"cluster_radius": 5,
      			"num_clusters": 5
      		},
      		//生長的方塊
      		"may_grow_on": [
      			{
      				"name": "bridge:grass_candy"
      			}
      		],
      		"may_replace": [
      			{
      				"name": "minecraft:air"
      			}
      		],
      		//樹幹
      		"fancy_trunk": {
      			"trunk_block": "bridge:log_candy",
      			"trunk_height": {
      				"base": 12,
      				"variance": 9,
      				"scale": 1
      			},
      			"trunk_width": 2,
      			"width_scale": 1,
      			"foliage_altitude_factor": 0.5,
      			"branches": {
      				"slope": 0.5,
      				"density": 0.2,
      				"min_altitude_factor": 0
      			}
      		},
      		//樹葉
      		"fancy_canopy": {
      			"height": 5,
      			"radius": 5,
      			"leaf_block": "bridge:leave_candy"
      		}
      	}
      }
      


      然後在feature_rules/新增生成條件的candy_tree_feature.json:
      {
      	"format_version": "1.13.0",
      	"minecraft:feature_rules": {
      		"description": {
      			"identifier": "bridge:candy_tree_feature",
      			//要生成的feature
      			"places_feature": "bridge:candy_tree"
      		},
      		"conditions": {
      			//生成在表面或洞穴
      			"placement_pass": "before_surface_pass"
      		},
      		//生成散佈
      		"distribution": {
      			//生成機率,可超過100,鑽石為1
      			"iterations": 100,
      			"x": {
      				"distribution": "uniform",
      				"extent": [
      					0,
      					8
      				]
      			},
      			"y": {
      				"distribution": "uniform",
      				"extent": [
      					0,
      					"query.heightmap(variable.worldx, variable.worldz) * 1.5"
      				]
      			},
      			"z": {
      				"distribution": "uniform",
      				"extent": [
      					0,
      					8
      				]
      			}
      		}
      	}
      }
      


      範本下載

      世界選項測試版遊戲全部開啟,但1.17的新洞穴機制不要開。
      這裡下載。

      留言

      此網誌的熱門文章

      Minecraft基岩版多人連線教學: 方法一覽

      【詳細解說】什麼是Minecraft基岩版,跟Java版有什麼差?

      Minecraft基岩版安裝模組(Add-On)&資源包&光影教學