From 5503ea561256d89d52e1cccf800272303cf7b9c9 Mon Sep 17 00:00:00 2001 From: Xterionix <72647213+Xterionix@users.noreply.github.com> Date: Fri, 8 Aug 2025 18:59:24 +0500 Subject: [PATCH] 1.21.100 (#363) * - Added replacements for enderman block place/take behaviors * - Added transport items goal * - Added grass_is_shaded property * - Removed experimental tag for movable component * - Remove experimental tag from random offset * - Added can_wear_armor field * - Added "none" heightmap projection * - Improved descriptions for jigsaw rule * - Added blockstate and random block state predicates * - Improve rule descriptions * - Added min and max values for terrain texture variations * - Update template pool with empty pool * - Improved surface builder component * - Added humidity biome component * - Added partially frozen biome component * - Renamed to rotation_axis_aligned * - Added map_tints biome component --- .../format/components/capped_surface.json | 41 ---- .../components/frozen_ocean_surface.json | 40 ---- .../biomes/format/components/humidity.json | 16 ++ .../biomes/format/components/map_tints.json | 78 +++++++ .../format/components/mesa_surface.json | 71 ------- .../format/components/partially_frozen.json | 8 + .../format/components/surface_builder.json | 197 +++++++++++++++--- .../format/components/swamp_surface.json | 40 ---- .../format/components/the_end_surface.json | 8 - .../biomes/format/minecraft.biome.json | 14 +- .../blocks/format/components/movable.json | 2 +- .../format/components/random_offset.json | 2 +- .../behaviors/enderman_leave_block.json | 13 -- .../format/behaviors/enderman_take_block.json | 13 -- .../format/behaviors/place_block.json | 70 +++++++ .../entities/format/behaviors/take_block.json | 57 +++++ .../format/behaviors/transport_items.json | 114 ++++++++++ .../behavior/entities/format/components.json | 7 +- .../format/components/equip_item.json | 6 + ...ligned.json => rotation_axis_aligned.json} | 0 .../format/minecraft.jigsaw.json | 3 +- .../format/processors/minecraft.rule.json | 109 ++++++---- .../format/minecraft.template_pool.json | 83 +++++--- .../format/components/grass_appearance.json | 6 + source/resource/textures/terrain_texture.json | 9 +- 25 files changed, 662 insertions(+), 345 deletions(-) delete mode 100644 source/behavior/biomes/format/components/capped_surface.json delete mode 100644 source/behavior/biomes/format/components/frozen_ocean_surface.json create mode 100644 source/behavior/biomes/format/components/humidity.json create mode 100644 source/behavior/biomes/format/components/map_tints.json delete mode 100644 source/behavior/biomes/format/components/mesa_surface.json create mode 100644 source/behavior/biomes/format/components/partially_frozen.json delete mode 100644 source/behavior/biomes/format/components/swamp_surface.json delete mode 100644 source/behavior/biomes/format/components/the_end_surface.json delete mode 100644 source/behavior/entities/format/behaviors/enderman_leave_block.json delete mode 100644 source/behavior/entities/format/behaviors/enderman_take_block.json create mode 100644 source/behavior/entities/format/behaviors/place_block.json create mode 100644 source/behavior/entities/format/behaviors/take_block.json create mode 100644 source/behavior/entities/format/behaviors/transport_items.json rename source/behavior/entities/format/components/{body_rotation_axis_aligned.json => rotation_axis_aligned.json} (100%) diff --git a/source/behavior/biomes/format/components/capped_surface.json b/source/behavior/biomes/format/components/capped_surface.json deleted file mode 100644 index 0bc64b5a..00000000 --- a/source/behavior/biomes/format/components/capped_surface.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.biomes.minecraft.capped_surface", - "title": "Capped Surface", - "description": "Generates surface on blocks with non-solid blocks above or below.", - "type": "object", - "additionalProperties": false, - "required": ["floor_materials", "ceiling_materials", "sea_material", "foundation_material"], - "properties": { - "ceiling_materials": { - "title": "Ceiling Materials", - "description": "Materials used for the surface ceiling.", - "minItems": 1, - "items": { - "$ref": "../../../../general/block/reference.json" - } - }, - "floor_materials": { - "title": "Floor Materials", - "description": "Materials used for the surface floor.", - "minItems": 1, - "items": { - "$ref": "../../../../general/block/reference.json" - } - }, - "sea_material": { - "title": "Sea Material", - "description": "Material used to replace air blocks below sea level.", - "$ref": "../../../../general/block/reference.json" - }, - "foundation_material": { - "title": "Foundation Material", - "description": "Material used to repalce solid blocks that are not surface blocks.", - "$ref": "../../../../general/block/reference.json" - }, - "beach_material": { - "title": "Beach Material", - "description": "Material used to decorate surface near sea level.", - "$ref": "../../../../general/block/reference.json" - } - } -} diff --git a/source/behavior/biomes/format/components/frozen_ocean_surface.json b/source/behavior/biomes/format/components/frozen_ocean_surface.json deleted file mode 100644 index a3931451..00000000 --- a/source/behavior/biomes/format/components/frozen_ocean_surface.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.biomes.minecraft.frozen_ocean_surface", - "title": "Frozen Ocean Surface", - "description": "Similar to overworld_surface. Adds icebergs.", - "type": "object", - "additionalProperties": false, - "required": ["top_material", "mid_material", "sea_floor_material", "foundation_material", "sea_material", "sea_floor_depth"], - "properties": { - "top_material": { - "title": "Top Material", - "description": "Controls the block type used for the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "mid_material": { - "title": "Mid Material", - "description": "Controls the block type used in a layer below the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_material": { - "title": "Sea Floor Material", - "description": "Controls the block type used as a floor for bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "foundation_material": { - "title": "Foundation Material", - "description": "Controls the block type used deep underground in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_material": { - "title": "Sea Material", - "description": "Controls the block type used for the bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_depth": { - "title": "Sea Floor Depth", - "description": "Controls how deep below the world water level the floor should occur.", - "type": "integer" - } - } -} diff --git a/source/behavior/biomes/format/components/humidity.json b/source/behavior/biomes/format/components/humidity.json new file mode 100644 index 00000000..88f62e8b --- /dev/null +++ b/source/behavior/biomes/format/components/humidity.json @@ -0,0 +1,16 @@ +{ + "$id": "blockception.minecraft.behavior.biomes.minecraft.humidity", + "title": "Humidity", + "description": "Forces a biome to ether always be humid or never humid. Humidity effects the spread chance, and spread rate of fire in the biome", + "type": "object", + "additionalProperties": false, + "required": ["is_humid"], + "properties": { + "is_humid": { + "title": "Is Humid", + "description": "Whether or not the biome is humid.", + "type": "boolean", + "default": false + } + } +} diff --git a/source/behavior/biomes/format/components/map_tints.json b/source/behavior/biomes/format/components/map_tints.json new file mode 100644 index 00000000..2bb54b86 --- /dev/null +++ b/source/behavior/biomes/format/components/map_tints.json @@ -0,0 +1,78 @@ +{ + "$id": "blockception.minecraft.behavior.biomes.minecraft.map_tints", + "title": "Map Tints", + "description": "Sets the color grass and foliage will be tinted by in this biome on the map.", + "type": "object", + "additionalProperties": false, + "required": [ "grass" ], + "definitions": { + "color": { + "oneOf": [ + { + "type": "string", + "pattern": "^#[a-fA-F0-9]{6}$" + }, + { + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 3, + "maxItems": 3 + } + ] + }, + "tint": { + "type": "object", + "properties": { + "tint": { + "description": "Tint color used in this biome on the map.", + "$ref": "#/definitions/color" + }, + "type": { + "title": "GrassType", + "description": "Controls the type of grass tint to use.", + "type": "string", + "const": "tint" + } + }, + "required": [ + "tint", + "type" + ] + }, + "noise": { + "type": "object", + "properties": { + "type": { + "title": "GrassType", + "description": "Controls the type of grass tint to use.", + "type": "string", + "const": "noise" + } + }, + "required": [ + "type" + ] + } + }, + "properties": { + "grass": { + "title": "Grass", + "description": "Controls whether the grass will use a custom tint color or a noise based tint color.", + "oneOf": [ + { + "$ref": "#/definitions/tint" + }, + { + "$ref": "#/definitions/noise" + } + ] + }, + "foliage": { + "title": "Foliage", + "description": "Sets the color foliage will be tinted by in this biome on the map.", + "$ref": "#/definitions/color" + } + } +} diff --git a/source/behavior/biomes/format/components/mesa_surface.json b/source/behavior/biomes/format/components/mesa_surface.json deleted file mode 100644 index b9d41b7a..00000000 --- a/source/behavior/biomes/format/components/mesa_surface.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.biomes.minecraft.mesa_surface", - "title": "Mesa Surface", - "description": "Similar to overworld_surface. Adds colored strata and optional pillars.", - "type": "object", - "additionalProperties": false, - "required": [ - "top_material", - "mid_material", - "bryce_pillars", - "clay_material", - "foundation_material", - "hard_clay_material", - "has_forest", - "sea_floor_depth", - "sea_floor_material", - "sea_material" - ], - "properties": { - "top_material": { - "title": "Top Material", - "description": "Controls the block type used for the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "mid_material": { - "title": "Mid Material", - "description": "Controls the block type used in a layer below the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_material": { - "title": "Sea Floor Material", - "description": "Controls the block type used as a floor for bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "foundation_material": { - "title": "Foundation Material", - "description": "Controls the block type used deep underground in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_material": { - "title": "Sea Material", - "description": "Controls the block type used for the bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_depth": { - "title": "Sea Floor Depth", - "description": "Controls how deep below the world water level the floor should occur.", - "type": "integer" - }, - "clay_material": { - "title": "Clay Material", - "description": "Base clay block to use.", - "$ref": "../../../../general/block/reference.json" - }, - "hard_clay_material": { - "title": "Hard Clay Material", - "description": "Hardened clay block to use.", - "$ref": "../../../../general/block/reference.json" - }, - "bryce_pillars": { - "title": "Bryce Pillars", - "description": "Whether the mesa generates with pillars.", - "type": "boolean" - }, - "has_forest": { - "title": "Has Forest", - "description": "Places coarse dirt and grass at high altitudes.", - "type": "boolean" - } - } -} diff --git a/source/behavior/biomes/format/components/partially_frozen.json b/source/behavior/biomes/format/components/partially_frozen.json new file mode 100644 index 00000000..2547872d --- /dev/null +++ b/source/behavior/biomes/format/components/partially_frozen.json @@ -0,0 +1,8 @@ +{ + "$id": "blockception.minecraft.behavior.biomes.minecraft.partially_frozen", + "title": "Partially Frozen", + "description": "Component will impact the temperature in a frozen biome, causing some areas to not be frozen. Ex: patchy ice, patchy snow", + "type": "object", + "additionalProperties": false, + "properties": {} +} diff --git a/source/behavior/biomes/format/components/surface_builder.json b/source/behavior/biomes/format/components/surface_builder.json index e6b2b374..8f21060f 100644 --- a/source/behavior/biomes/format/components/surface_builder.json +++ b/source/behavior/biomes/format/components/surface_builder.json @@ -3,7 +3,7 @@ "title": "Surface Builder", "description": "Controls the materials used for terrain generation.", "type": "object", - "required": ["builder"], + "required": [ "builder" ], "additionalProperties": false, "properties": { "builder": { @@ -11,42 +11,171 @@ "description": "Controls the block types used for terrain generation.", "type": "object", "additionalProperties": false, - "required": ["type"], + "required": [ "type" ], "properties": { "type": { - "enum": ["minecraft:overworld", "minecraft:frozen_ocean", "minecraft:mesa", "minecraft:swamp", "minecraft:capped", "minecraft:the_end"] - }, - "top_material": { - "title": "Top Material", - "description": "Controls the block type used for the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "mid_material": { - "title": "Mid Material", - "description": "Controls the block type used in a layer below the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_material": { - "title": "Sea Floor Material", - "description": "Controls the block type used as a floor for bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "foundation_material": { - "title": "Foundation Material", - "description": "Controls the block type used deep underground in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_material": { - "title": "Sea Material", - "description": "Controls the block type used for the bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_depth": { - "title": "Sea Floor Depth", - "description": "Controls how deep below the world water level the floor should occur.", - "type": "integer" + "enum": [ "minecraft:overworld", "minecraft:frozen_ocean", "minecraft:mesa", "minecraft:swamp", "minecraft:capped", "minecraft:the_end" ] } - } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "anyOf": [ + { "const": "minecraft:overworld" }, + { "const": "minecraft:frozen_ocean" }, + { "const": "minecraft:swamp" } + ] + } + } + }, + "then": { + "required": [ "top_material", "mid_material", "sea_floor_material", "foundation_material", "sea_material", "sea_floor_depth" ], + "properties": { + "top_material": { + "title": "Top Material", + "description": "Controls the block type used for the surface of this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "mid_material": { + "title": "Mid Material", + "description": "Controls the block type used in a layer below the surface of this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "sea_floor_material": { + "title": "Sea Floor Material", + "description": "Controls the block type used as a floor for bodies of water in this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "foundation_material": { + "title": "Foundation Material", + "description": "Controls the block type used deep underground in this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "sea_material": { + "title": "Sea Material", + "description": "Controls the block type used for the bodies of water in this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "sea_floor_depth": { + "title": "Sea Floor Depth", + "description": "Controls how deep below the world water level the floor should occur.", + "type": "integer" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "minecraft:mesa" + } + } + }, + "then": { + "required": [ "top_material", "mid_material", "bryce_pillars", "clay_material", "foundation_material", "hard_clay_material", "has_forest", "sea_floor_depth", "sea_floor_material", "sea_material" ], + "properties": { + "top_material": { + "title": "Top Material", + "description": "Controls the block type used for the surface of this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "mid_material": { + "title": "Mid Material", + "description": "Controls the block type used in a layer below the surface of this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "sea_floor_material": { + "title": "Sea Floor Material", + "description": "Controls the block type used as a floor for bodies of water in this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "foundation_material": { + "title": "Foundation Material", + "description": "Controls the block type used deep underground in this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "sea_material": { + "title": "Sea Material", + "description": "Controls the block type used for the bodies of water in this biome.", + "$ref": "../../../../general/block/reference.json" + }, + "sea_floor_depth": { + "title": "Sea Floor Depth", + "description": "Controls how deep below the world water level the floor should occur.", + "type": "integer" + }, + "clay_material": { + "title": "Clay Material", + "description": "Base clay block to use.", + "$ref": "../../../../general/block/reference.json" + }, + "hard_clay_material": { + "title": "Hard Clay Material", + "description": "Hardened clay block to use.", + "$ref": "../../../../general/block/reference.json" + }, + "bryce_pillars": { + "title": "Bryce Pillars", + "description": "Whether the mesa generates with pillars.", + "type": "boolean" + }, + "has_forest": { + "title": "Has Forest", + "description": "Places coarse dirt and grass at high altitudes.", + "type": "boolean" + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "minecraft:capped" + } + } + }, + "then": { + "required": [ "floor_materials", "ceiling_materials", "sea_material", "foundation_material" ], + "properties": { + "ceiling_materials": { + "title": "Ceiling Materials", + "description": "Materials used for the surface ceiling.", + "minItems": 1, + "items": { + "$ref": "../../../../general/block/reference.json" + } + }, + "floor_materials": { + "title": "Floor Materials", + "description": "Materials used for the surface floor.", + "minItems": 1, + "items": { + "$ref": "../../../../general/block/reference.json" + } + }, + "sea_material": { + "title": "Sea Material", + "description": "Material used to replace air blocks below sea level.", + "$ref": "../../../../general/block/reference.json" + }, + "foundation_material": { + "title": "Foundation Material", + "description": "Material used to repalce solid blocks that are not surface blocks.", + "$ref": "../../../../general/block/reference.json" + }, + "beach_material": { + "title": "Beach Material", + "description": "Material used to decorate surface near sea level.", + "$ref": "../../../../general/block/reference.json" + } + } + } + } + ] } } } diff --git a/source/behavior/biomes/format/components/swamp_surface.json b/source/behavior/biomes/format/components/swamp_surface.json deleted file mode 100644 index 8de96a24..00000000 --- a/source/behavior/biomes/format/components/swamp_surface.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.biomes.minecraft.swamp_surface", - "title": "Swamp Surface", - "description": "Similar to overworld_surface. Adds swamp surface details.", - "type": "object", - "required": ["foundation_material", "mid_material", "sea_floor_depth", "sea_floor_material", "sea_material", "top_material"], - "additionalProperties": false, - "properties": { - "top_material": { - "title": "Top Material", - "description": "Controls the block type used for the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "mid_material": { - "title": "Mid Material", - "description": "Controls the block type used in a layer below the surface of this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_material": { - "title": "Sea Floor Material", - "description": "Controls the block type used as a floor for bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "foundation_material": { - "title": "Foundation Material", - "description": "Controls the block type used deep underground in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_material": { - "title": "Sea Material", - "description": "Controls the block type used for the bodies of water in this biome.", - "$ref": "../../../../general/block/reference.json" - }, - "sea_floor_depth": { - "title": "Sea Floor Depth", - "description": "Controls how deep below the world water level the floor should occur.", - "type": "integer" - } - } -} diff --git a/source/behavior/biomes/format/components/the_end_surface.json b/source/behavior/biomes/format/components/the_end_surface.json deleted file mode 100644 index c6191520..00000000 --- a/source/behavior/biomes/format/components/the_end_surface.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.biomes.minecraft.the_end_surface", - "title": "End Surface", - "description": "Use default Minecraft End terrain generation.", - "type": "object", - "additionalProperties": false, - "properties": {} -} \ No newline at end of file diff --git a/source/behavior/biomes/format/minecraft.biome.json b/source/behavior/biomes/format/minecraft.biome.json index dc12526a..397ba35d 100644 --- a/source/behavior/biomes/format/minecraft.biome.json +++ b/source/behavior/biomes/format/minecraft.biome.json @@ -5,28 +5,26 @@ "description": "A custom biome definition.", "type": "object", "additionalProperties": false, - "required": ["description", "components"], + "required": [ "description", "components" ], "definitions": { "components_ref": { "type": "object", "title": "Components", "additionalProperties": false, "properties": { - "minecraft:capped_surface": { "$ref": "./components/capped_surface.json" }, "minecraft:climate": { "$ref": "./components/climate.json" }, "minecraft:creature_spawn_probability": { "$ref": "./components/creature_spawn_probability.json" }, - "minecraft:frozen_ocean_surface": { "$ref": "./components/frozen_ocean_surface.json" }, - "minecraft:mesa_surface": { "$ref": "./components/mesa_surface.json" }, + "minecraft:humidity": { "$ref": "./components/humidity.json" }, + "minecraft:map_tints": { "$ref": "./components/map_tints.json" }, "minecraft:mountain_parameters": { "$ref": "./components/mountain_parameters.json" }, "minecraft:multinoise_generation_rules": { "$ref": "./components/multinoise_generation_rules.json" }, "minecraft:overworld_generation_rules": { "$ref": "./components/overworld_generation_rules.json" }, "minecraft:overworld_height": { "$ref": "./components/overworld_height.json" }, + "minecraft:partially_frozen": { "$ref": "./components/partially_frozen.json" }, "minecraft:replace_biomes": { "$ref": "./components/replace_biomes.json" }, "minecraft:surface_material_adjustments": { "$ref": "./components/surface_material_adjustments.json" }, "minecraft:surface_builder": { "$ref": "./components/surface_builder.json" }, - "minecraft:swamp_surface": { "$ref": "./components/swamp_surface.json" }, - "minecraft:tags": { "$ref": "./components/tags.json" }, - "minecraft:the_end_surface": { "$ref": "./components/the_end_surface.json" } + "minecraft:tags": { "$ref": "./components/tags.json" } } } }, @@ -36,7 +34,7 @@ "description": "The description for this biome.", "type": "object", "additionalProperties": false, - "required": ["identifier"], + "required": [ "identifier" ], "properties": { "identifier": { "title": "Identifier", diff --git a/source/behavior/blocks/format/components/movable.json b/source/behavior/blocks/format/components/movable.json index fc6252c2..976f933f 100644 --- a/source/behavior/blocks/format/components/movable.json +++ b/source/behavior/blocks/format/components/movable.json @@ -1,7 +1,7 @@ { "$id": "blockception.minecraft.behavior.blocks.minecraft.movable", "title": "Movable", - "description": "[Experimental] This allows for blocks to configure how they should react when moved by a piston", + "description": "This allows for blocks to configure how they should react when moved by a piston", "type": "object", "additionalProperties": false, "required": [ "movement_type" ], diff --git a/source/behavior/blocks/format/components/random_offset.json b/source/behavior/blocks/format/components/random_offset.json index c801c510..b5ff02ac 100644 --- a/source/behavior/blocks/format/components/random_offset.json +++ b/source/behavior/blocks/format/components/random_offset.json @@ -1,7 +1,7 @@ { "$id": "blockception.minecraft.behavior.blocks.minecraft.random_offset", "title": "Random Offset", - "description": "[Experimental] This allows for blocks to randomly offset like foliage does in the Vanilla game", + "description": "This allows for blocks to randomly offset like foliage does in the Vanilla game", "type": "object", "additionalProperties": false, "definitions": { diff --git a/source/behavior/entities/format/behaviors/enderman_leave_block.json b/source/behavior/entities/format/behaviors/enderman_leave_block.json deleted file mode 100644 index 81519118..00000000 --- a/source/behavior/entities/format/behaviors/enderman_leave_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.entities.minecraft.behavior.enderman_leave_block", - "type": "object", - "title": "Enderman Leave Block", - "additionalProperties": false, - "description": "Allows the enderman to drop a block they are carrying. Can only be used by Endermen.", - "required": [], - "properties": { - "priority": { - "$ref": "./types/priority.json" - } - } -} diff --git a/source/behavior/entities/format/behaviors/enderman_take_block.json b/source/behavior/entities/format/behaviors/enderman_take_block.json deleted file mode 100644 index ec25c9cd..00000000 --- a/source/behavior/entities/format/behaviors/enderman_take_block.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$id": "blockception.minecraft.behavior.entities.minecraft.behavior.enderman_take_block", - "type": "object", - "title": "Enderman Take Block", - "description": "Allows the enderman to take a block and carry it around. Can only be used by Endermen.", - "additionalProperties": false, - "required": [], - "properties": { - "priority": { - "$ref": "./types/priority.json" - } - } -} diff --git a/source/behavior/entities/format/behaviors/place_block.json b/source/behavior/entities/format/behaviors/place_block.json new file mode 100644 index 00000000..fdaa5c7d --- /dev/null +++ b/source/behavior/entities/format/behaviors/place_block.json @@ -0,0 +1,70 @@ +{ + "$id": "blockception.minecraft.behavior.entities.minecraft.behavior.place_block", + "type": "object", + "title": "Place Block", + "additionalProperties": false, + "description": "Allows an entity to place blocks in the world", + "required": [], + "properties": { + "priority": { + "$ref": "./types/priority.json" + }, + "affected_by_griefing_rule": { + "title": "Affected By Griefing Rule", + "description": "If true, whether the goal is affected by the mob griefing game rule.", + "type": "boolean" + }, + "can_place": { + "title": "Can Place", + "description": "Filters for if the entity should try to place its block. Self and Target are set.", + "$ref": "../../filters/filters.json" + }, + "chance": { + "title": "Chance", + "description": "Chance each tick for the entity to try and place a block.", + "type": "number", + "minimum": 0 + }, + "on_place": { + "title": "On Place", + "description": "Trigger ran if the entity does place its block. Self, Target, and Block are set.", + "$ref": "../types/event.json" + }, + "placeable_carried_blocks": { + "title": "Placeable Carried Blocks", + "description": "Block descriptors for which blocks are valid to be placed from the entity's carried item, if empty all blocks are valid.", + "type": "array", + "items": { + "$ref": "../../../../general/block/reference.json" + } + }, + "randomly_placeable_blocks": { + "title": "Randomly Placeable Blocks", + "description": "Weighted block descriptors for which blocks should be randomly placed, if empty the entity will try to place its carried block from placeable_carried_blocks.", + "type": "array", + "items": { + "type": "array", + "items": [ + { + "$ref": "../../../../general/block/reference.json" + }, + { + "title": "Weight", + "description": "Weight used in random selection. Value is relative to other weights in the collection.", + "type": "number" + } + ] + } + }, + "xz_range": { + "title": "XZ Range", + "description": "XZ range from which the entity will try and place blocks in.", + "$ref": "../types/range_number_type.json" + }, + "y_range": { + "title": "Y Range", + "description": "Y range from which the entity will try and place blocks in.", + "$ref": "../types/range_number_type.json" + } + } +} \ No newline at end of file diff --git a/source/behavior/entities/format/behaviors/take_block.json b/source/behavior/entities/format/behaviors/take_block.json new file mode 100644 index 00000000..9666eda4 --- /dev/null +++ b/source/behavior/entities/format/behaviors/take_block.json @@ -0,0 +1,57 @@ +{ + "$id": "blockception.minecraft.behavior.entities.minecraft.behavior.take_block", + "type": "object", + "title": "Take Block", + "description": "Allows an entity to take blocks from the world.", + "additionalProperties": false, + "required": [], + "properties": { + "priority": { + "$ref": "./types/priority.json" + }, + "affected_by_griefing_rule": { + "title": "Affected By Griefing Rule", + "description": "If true, whether the goal is affected by the mob griefing game rule.", + "type": "boolean" + }, + "blocks": { + "title": "Blocks", + "description": "Block descriptors for which blocks are valid to be taken by the entity, if empty all blocks are valid.", + "type": "array", + "items": { + "$ref": "../../../../general/block/reference.json" + } + }, + "can_take": { + "title": "Can Take", + "description": "Filters for if the entity should try to take a block. Self and Target are set.", + "$ref": "../../filters/filters.json" + }, + "chance": { + "title": "Chance", + "description": "Chance each tick for the entity to try and take a block.", + "type": "number", + "minimum": 0 + }, + "on_take": { + "title": "On Take", + "description": "Trigger ran if the entity does take a block. Self, Target, and Block are set.", + "$ref": "../types/event.json" + }, + "requires_line_of_sight": { + "title": "Requires Line Of Sight", + "description": "If true, whether the entity needs line of sight to the block they are trying to take.", + "type": "boolean" + }, + "xz_range": { + "title": "XZ Range", + "description": "XZ range from which the entity will try and take blocks from.", + "$ref": "../types/range_number_type.json" + }, + "y_range": { + "title": "Y Range", + "description": "Y range from which the entity will try and take blocks from.", + "$ref": "../types/range_number_type.json" + } + } +} \ No newline at end of file diff --git a/source/behavior/entities/format/behaviors/transport_items.json b/source/behavior/entities/format/behaviors/transport_items.json new file mode 100644 index 00000000..8d4225b7 --- /dev/null +++ b/source/behavior/entities/format/behaviors/transport_items.json @@ -0,0 +1,114 @@ +{ + "$id": "blockception.minecraft.behavior.entities.minecraft.behavior.transport_items", + "type": "object", + "title": "Transport Items", + "description": "Allows a mob to transport items from and to containers", + "additionalProperties": false, + "required": [], + "properties": { + "priority": { + "$ref": "./types/priority.json" + }, + "source_container_types": { + "title": "Source Container Types", + "description": "A list of block descriptors that should be a container type to get items from. Default is any container", + "type": "array", + "items": { + "$ref": "../../../../general/block/reference.json" + } + }, + "destination_container_types": { + "title": "Destination Container Types", + "description": "A list of block descriptors that should be a container type to put items in. Default is any container", + "type": "array", + "items": { + "$ref": "../../../../general/block/reference.json" + } + }, + "max_stack_size": { + "title": "Max Stack Size", + "description": "The maximum stack size that the mob will try to take from a container.", + "type": "integer", + "minimum": 1, + "default": 16, + "maxItems": 64 + }, + "interaction_time": { + "title": "Interaction Time", + "description": "The amount of time spent interacting with the containers in seconds.", + "type": "number", + "minimum": 0, + "default": 3.0 + }, + "allow_simultaneous_interaction": { + "title": "Allow Simultaneous Interaction", + "description": "Whether the entity is allowed to simultaneously interact with a container that another non-player entity is already interacting with.", + "type": "boolean", + "default": false + }, + "search_strategy": { + "title": "Search Strategy", + "description": "Whether to select the nearest valid container or a random valid container in range.", + "type": "string", + "enum": [ + "nearest", + "random" + ] + }, + "search_distance": { + "title": "Search Distance", + "description": "The maximum horizontal and vertical distance at which to find containers for taking or placing items.", + "$ref": "../types/range_number_type.json", + "default": [ + 62, + 32 + ] + }, + "max_visited_containers": { + "title": "Max Visited Containers", + "description": "The maximum number of containers the mob will visit before resetting. 0 is unlimited.", + "type": "integer", + "minimum": 0, + "default": 16 + }, + "initial_cooldown": { + "title": "Initial Cooldwon", + "description": "ime, in seconds, the mob will wait after spawning or after its available goals have changed (e.g. due to a component group update).", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "idle_cooldown": { + "title": "Idle Cooldown", + "description": "When the mob cannot find a valid container to interact with, the goal will be disabled for this amount of time in seconds.", + "type": "integer", + "minimum": 0, + "default": 20 + }, + "place_strategy": { + "title": "Place Strategy", + "description": "The strategy to use for placing the transported item.\nAny - always place if there is room,\nWith matching - place if there is a matching item in the container,\nWith matching or empty - like With matching but will also place in empty containers.", + "type": "string", + "default": "any", + "enum": [ + "any", + "with_matching", + "with_matching_or_empty" + ] + }, + "allowed_items": { + "description": "A list of item descriptors that are the only items the mob is allowed to transport. If this and \"disallowed_items\" are both empty, then all items are allowed. If non-empty \"disallowed_items\" must be empty. Default value: empty.", + "type": "array", + "items": { + "type": "string" + } + }, + "disallowed_items": { + "description": "A list of item descriptors that are the mob is not allowed to transport. If non-empty \"allowed_items\" must be empty. Default value: emtpy.", + "type": "array", + "items": { + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/source/behavior/entities/format/components.json b/source/behavior/entities/format/components.json index 3ad9da4b..1a3118bb 100644 --- a/source/behavior/entities/format/components.json +++ b/source/behavior/entities/format/components.json @@ -24,7 +24,6 @@ "minecraft:block_climber": { "$ref": "./components/block_climber.json" }, "minecraft:block_sensor": { "$ref": "./components/block_sensor.json" }, "minecraft:body_rotation_always_follows_head": { "$ref": "./components/body_rotation_always_follows_head.json" }, - "minecraft:body_rotation_axis_aligned": { "$ref": "./components/body_rotation_axis_aligned.json" }, "minecraft:body_rotation_blocked": { "$ref": "./components/body_rotation_blocked.json" }, "minecraft:boostable": { "$ref": "./components/boostable.json" }, "minecraft:boss": { "$ref": "./components/boss.json" }, @@ -169,6 +168,7 @@ "minecraft:rail_sensor": { "$ref": "./components/rail_sensor.json" }, "minecraft:ravager_blocked": { "$ref": "./components/ravager_blocked.json" }, "minecraft:rideable": { "$ref": "./components/rideable.json" }, + "minecraft:rotation_axis_aligned": { "$ref": "./components/rotation_axis_aligned.json" }, "minecraft:reflect_projectiles": { "$ref": "./components/reflect_projectiles.json" }, "minecraft:remove_in_peaceful": { "$ref": "./components/remove_in_peaceful.json" }, "minecraft:renders_when_invisible": { "$ref": "./components/renders_when_invisible.json" }, @@ -241,8 +241,6 @@ "minecraft:behavior.eat_carried_item": { "$ref": "./behaviors/eat_carried_item.json" }, "minecraft:behavior.eat_mob": { "$ref": "./behaviors/eat_mob.json" }, "minecraft:behavior.emerge": { "$ref": "./behaviors/emerge.json" }, - "minecraft:behavior.enderman_leave_block": { "$ref": "./behaviors/enderman_leave_block.json" }, - "minecraft:behavior.enderman_take_block": { "$ref": "./behaviors/enderman_take_block.json" }, "minecraft:behavior.equip_item": { "$ref": "./behaviors/equip_item.json" }, "minecraft:behavior.explore_outskirts": { "$ref": "./behaviors/explore_outskirts.json" }, "minecraft:behavior.fertilize_farm_block": { "$ref": "./behaviors/fertilize_farm_block.json" }, @@ -311,6 +309,7 @@ "minecraft:behavior.panic": { "$ref": "./behaviors/panic.json" }, "minecraft:behavior.pet_sleep_with_owner": { "$ref": "./behaviors/pet_sleep_with_owner.json" }, "minecraft:behavior.pickup_items": { "$ref": "./behaviors/pickup_items.json" }, + "minecraft:behavior.place_block": { "$ref": "./behaviors/place_block.json" }, "minecraft:behavior.play_dead": { "$ref": "./behaviors/play_dead.json" }, "minecraft:behavior.play": { "$ref": "./behaviors/play.json" }, "minecraft:behavior.player_ride_tamed": { "$ref": "./behaviors/player_ride_tamed.json" }, @@ -366,6 +365,7 @@ "minecraft:behavior.swim_wander": { "$ref": "./behaviors/swim_wander.json" }, "minecraft:behavior.swim_with_entity": { "$ref": "./behaviors/swim_with_entity.json" }, "minecraft:behavior.swoop_attack": { "$ref": "./behaviors/swoop_attack.json" }, + "minecraft:behavior.take_block": { "$ref": "./behaviors/take_block.json" }, "minecraft:behavior.take_flower": { "$ref": "./behaviors/take_flower.json" }, "minecraft:behavior.teleport_to_owner": { "$ref": "./behaviors/teleport_to_owner.json" }, "minecraft:behavior.move_around_target": { "$ref": "./behaviors/move_around_target.json" }, @@ -376,6 +376,7 @@ "minecraft:behavior.timer_flag_3": { "$ref": "./behaviors/timer_flag.json" }, "minecraft:behavior.trade_interest": { "$ref": "./behaviors/trade_interest.json" }, "minecraft:behavior.trade_with_player": { "$ref": "./behaviors/trade_with_player.json" }, + "minecraft:behavior.transport_items": { "$ref": "./behaviors/transport_items.json" }, "minecraft:behavior.vex_copy_owner_target": { "$ref": "./behaviors/vex_copy_owner_target.json" }, "minecraft:behavior.vex_random_move": { "$ref": "./behaviors/vex_random_move.json" }, "minecraft:behavior.wither_random_attack_pos_goal": { "$ref": "./behaviors/wither_random_attack_pos_goal.json" }, diff --git a/source/behavior/entities/format/components/equip_item.json b/source/behavior/entities/format/components/equip_item.json index ac89ab85..8c1230b7 100644 --- a/source/behavior/entities/format/components/equip_item.json +++ b/source/behavior/entities/format/components/equip_item.json @@ -14,6 +14,12 @@ "description": "Item that the entity should not equip.", "title": "Excluded Items" } + }, + "can_wear_armor": { + "title": "Can Wear Armor", + "description": "Specifies if equipped armor should be added to the armor slot or hand slot", + "type": "boolean", + "default": false } } } diff --git a/source/behavior/entities/format/components/body_rotation_axis_aligned.json b/source/behavior/entities/format/components/rotation_axis_aligned.json similarity index 100% rename from source/behavior/entities/format/components/body_rotation_axis_aligned.json rename to source/behavior/entities/format/components/rotation_axis_aligned.json diff --git a/source/behavior/worldgen/jigsaw_structures/format/minecraft.jigsaw.json b/source/behavior/worldgen/jigsaw_structures/format/minecraft.jigsaw.json index fe557b9b..2a718d38 100644 --- a/source/behavior/worldgen/jigsaw_structures/format/minecraft.jigsaw.json +++ b/source/behavior/worldgen/jigsaw_structures/format/minecraft.jigsaw.json @@ -28,7 +28,8 @@ "title": "Heightmap Projection", "description": "Heightmap used to calculate the relative start height. For example, a heightmap_projection of ocean_floor and a start_height of 10 means the Jigsaw Structure will begin generating 10 blocks above the ocean floor.", "type": "string", - "enum": ["ocean_floor", "world_surface"] + "default": "none", + "enum": ["ocean_floor", "world_surface", "none"] }, "max_depth": { "title": "Max Depth", diff --git a/source/behavior/worldgen/processors/format/processors/minecraft.rule.json b/source/behavior/worldgen/processors/format/processors/minecraft.rule.json index 742cdbcc..a0c0e8f0 100644 --- a/source/behavior/worldgen/processors/format/processors/minecraft.rule.json +++ b/source/behavior/worldgen/processors/format/processors/minecraft.rule.json @@ -2,38 +2,6 @@ "title": "Rule", "type": "object", "definitions": { - "block_specifier": { - "anyOf": [ - { - "$ref": "../../../../../general/block/identifier.json" - }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "$ref": "../../../../../general/block/identifier.json" - }, - "states": { - "type": "object", - "additionalProperties": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - }, - { - "type": "string" - } - ] - } - } - } - } - ] - }, "rule": { "properties": { "block_entity_modifier": { @@ -59,6 +27,12 @@ }, { "$ref": "#/definitions/tag_match" + }, + { + "$ref": "#/definitions/blockstate_match" + }, + { + "$ref": "#/definitions/random_blockstate_match" } ] }, @@ -75,11 +49,17 @@ }, { "$ref": "#/definitions/tag_match" + }, + { + "$ref": "#/definitions/blockstate_match" + }, + { + "$ref": "#/definitions/random_blockstate_match" } ] }, "output_state": { - "$ref": "#/definitions/block_specifier" + "$ref": "../../../../../general/block/reference.json" }, "position_predicate": { "oneOf": [ @@ -98,19 +78,18 @@ }, "append_loot": { "title": "Append Loot", - "description": "", + "description": "Modifier will attempt to add loot to a block entity.", "type": "object", "additionalProperties": false, "required": [ "type", "loot_table" ], "properties": { "loot_table": { "title": "Loot Table", - "description": "", + "description": "The loot table to append", "type": "string" }, "type": { "title": "Type", - "description": "", "type": "string", "const": "minecraft:append_loot" } @@ -118,14 +97,13 @@ }, "passthrough": { "title": "Passthrough", - "description": "", + "description": "Modifier that leaves the state unchanged. This is the default block modifier if no other block modifier is specified.", "type": "object", "additionalProperties": false, "required": [ "type" ], "properties": { "type": { "title": "Type", - "description": "", "type": "string", "const": "minecraft:passthrough" } @@ -133,7 +111,7 @@ }, "always_true": { "title": "Always True", - "description": "", + "description": "Predicate that always evaluates to true. This is the default predicate if no other predicate is specified.", "type": "object", "additionalProperties": false, "required": [ "predicate_type" ], @@ -147,6 +125,7 @@ }, "block_match": { "title": "Block Match", + "description": "Predicate that evaluates to true if the block at the specified location matches the specified block.", "type": "object", "properties": { "block": { @@ -165,6 +144,7 @@ }, "random_block_match": { "title": "Random Block Match", + "description": "Predicate that evaluates to true with a given probability if the block at the specified location matches the specified block.", "type": "object", "properties": { "block": { @@ -177,6 +157,7 @@ }, "probability": { "type": "number", + "description": "Probability of the evaluating to true when the block matches.", "minimum": 0.0, "exclusiveMaximum": 1.0 } @@ -189,6 +170,7 @@ }, "tag_match": { "title": "Tag Match", + "description": "Predicate that evaluates to true if the block at the specified location contains the tag.", "type": "object", "properties": { "predicate_type": { @@ -197,6 +179,8 @@ "const": "minecraft:tag_match" }, "tag": { + "title": "Tag", + "description": "The tag to be matched.", "type": "string" } }, @@ -205,8 +189,54 @@ "tag" ] }, + "blockstate_match": { + "title": "BlockState Match", + "description": "Predicate that evaluates to true if the block at the specified location matches the specified block.", + "type": "object", + "properties": { + "block_state": { + "$ref": "../../../../../general/block/reference.json" + }, + "predicate_type": { + "title": "Predicate Type", + "type": "string", + "const": "minecraft:blockstate_match" + } + }, + "required": [ + "block_state", + "predicate_type" + ] + }, + "random_blockstate_match": { + "title": "Random BlockState Match", + "description": "Predicate that evaluates to true with a given probability if the block at the specified location matches the specified block.", + "type": "object", + "properties": { + "block_state": { + "$ref": "../../../../../general/block/reference.json" + }, + "predicate_type": { + "title": "Predicate Type", + "type": "string", + "const": "minecraft:random_blockstate_match" + }, + "probability": { + "type": "number", + "description": "Probability of the evaluating to true when the block matches.", + "minimum": 0.0, + "exclusiveMaximum": 1.0 + } + }, + "required": [ + "block_state", + "predicate_type", + "probability" + ] + }, "axis_aligned_linear_pos": { "title": "Axis Aligned Linear", + "description": "Predicate that evalutes to true if the block is within the distance range along the provided axis and and random number is generated between chance range.", "type": "object", "properties": { "axis": { @@ -247,7 +277,6 @@ }, "predicate_type": { "title": "Predicate Type", - "description": "", "type": "string", "const": "minecraft:axis_aligned_linear_pos" } diff --git a/source/behavior/worldgen/template_pools/format/minecraft.template_pool.json b/source/behavior/worldgen/template_pools/format/minecraft.template_pool.json index 1a67c411..d52bbc22 100644 --- a/source/behavior/worldgen/template_pools/format/minecraft.template_pool.json +++ b/source/behavior/worldgen/template_pools/format/minecraft.template_pool.json @@ -14,31 +14,57 @@ "element": { "title": "Element", "description": "A grouping of a Structure Template, the Processor List to use when placing the structure, and its weight that determines the likelihood of the element being chosen.", - "type": "object", - "properties": { - "element_type": { - "title": "Element Type", - "description": " The type of element.", - "type": "string", - "const": "minecraft:single_pool_element" + "oneOf": [ + { + "$ref": "#/definitions/empty_element" }, - "location": { - "title": "Location", - "description": "The path of the structure file. This path is relative to the behavior pack's \"structures\" folder.", - "type": "string" - }, - "processors": { - "title": "Processors", - "description": "The identifier of the processor list to use when placing the structure.", - "type": "string" + { + "$ref": "#/definitions/single_element" } - }, - "required": [ - "element_type", - "location", - "processors" ] }, + "weight": { + "title": "Weight", + "description": "The weighted probability of choosing the element from the pool. For example, a template pool containing 2 structures with weights of 1 and 3 will have a 25% and 75% chance of being chosen respectively.", + "type": "integer", + "minimum": 1.0, + "maximum": 200.0 + } + } + }, + "empty_element": { + "type": "object", + "properties": { + "element_type": { + "title": "Element Type", + "description": " The type of element.", + "type": "string", + "const": "minecraft:empty_pool_element" + } + }, + "required": [ + "element_type" + ] + }, + "single_element": { + "type": "object", + "properties": { + "element_type": { + "title": "Element Type", + "description": " The type of element.", + "type": "string", + "const": "minecraft:single_pool_element" + }, + "location": { + "title": "Location", + "description": "The path of the structure file. This path is relative to the behavior pack's \"structures\" folder.", + "type": "string" + }, + "processors": { + "title": "Processors", + "description": "The identifier of the processor list to use when placing the structure.", + "type": "string" + }, "projection": { "title": "Projection", "description": "Specifies how structures should be placed relative to the terrain.", @@ -54,15 +80,12 @@ "description": "Structures are placed relative to the terrain height. Structure blocks will adjust along the Y axis to match the ground." } ] - }, - "weight": { - "title": "Weight", - "description": "The weighted probability of choosing the element from the pool. For example, a template pool containing 2 structures with weights of 1 and 3 will have a 25% and 75% chance of being chosen respectively.", - "type": "integer", - "minimum": 1.0, - "maximum": 200.0 } - } + }, + "required": [ + "element_type", + "location" + ] } }, "required": [ "description", "elements" ], @@ -87,7 +110,7 @@ "type": "array", "minItems": 1, "items": { - + "$ref": "#/definitions/template_pool_element" } }, "fallback": { diff --git a/source/resource/biomes/format/components/grass_appearance.json b/source/resource/biomes/format/components/grass_appearance.json index 29f6dfeb..955c5487 100644 --- a/source/resource/biomes/format/components/grass_appearance.json +++ b/source/resource/biomes/format/components/grass_appearance.json @@ -41,6 +41,12 @@ } } ] + }, + "grass_is_shaded": { + "title": "Grass Is Shaded", + "description": "Adds a shading effect to the grass as if there was a roof.", + "type": "boolean", + "default": false } } } diff --git a/source/resource/textures/terrain_texture.json b/source/resource/textures/terrain_texture.json index 5bf30773..6da3aa3b 100644 --- a/source/resource/textures/terrain_texture.json +++ b/source/resource/textures/terrain_texture.json @@ -44,7 +44,14 @@ "required": ["path"], "properties": { "path": { "description": "A texture file.", "type": "string", "pattern": "^textures/.+$", "title": "Path" }, - "weight": { "type": "integer", "title": "Weight", "description": "The weight of the texture.", "$comment": "UNDOCUMENTED" } + "weight": { + "type": "number", + "minimum": 0.05, + "maximum": 1000000, + "title": "Weight", + "description": "The weight of the texture.", + "$comment": "UNDOCUMENTED" + } } } }