Updated to 1.21.50 (#330)

* - Add new client biome components
* - Added built-in block tags
* - Add liquid detection block component
* - Add item visual component
* - Allow ambient_occlusion to use floats
* - Added cannot_be_attacked and ignore component
* - Added play_sound event response
* - Added summon_event property to summon_entity behavior
* - Updated home and looked_at components
* - Added compostable item component
* - Added jigsaws
* - Added processor_lists
* - Made identifier required in jigsaws
* - Added structure sets
* - Remove compressed volume file
* - Add template pools
* - Setup jigsaw schemas
* - Added broadcast_when_dying
* - Update interact.vibration
* - Fix format_version ref in jigsaw schemas
This commit is contained in:
Xterionix
2024-12-05 20:54:27 +05:00
committed by GitHub
parent b4b53a8074
commit ec99529c64
36 changed files with 1131 additions and 39 deletions

View File

@@ -0,0 +1,20 @@
{
"$id": "blockception.minecraft.behavior.blocks.minecraft.item_visual",
"title": "Item Visual",
"description": "The description identifier of the geometry and material used to render the item of this block.\nExperimental toggles required: Upcoming Creator Features",
"type": "object",
"additionalProperties": false,
"required": [ "geometry", "material_instances" ],
"properties": {
"geometry": {
"title": "Geometry",
"description": "The \"minecraft:geometry\" component that will be used for the item.",
"$ref": "./geometry.json"
},
"material_instances": {
"title": "Geometry",
"description": "The \"minecraft:material_instances\" component that will be used for the item.",
"$ref": "./material_instances.json"
}
}
}

View File

@@ -0,0 +1,56 @@
{
"$id": "blockception.minecraft.behavior.blocks.minecraft.liquid_detection",
"title": "Liquid Detection",
"description": "The definitions for how a block behaves when detecting liquid. Only one rule definition is allowed per liquid type - if multiple are specified, the first will be used and the rest will be ignored.\nExperimental toggles required: Upcoming Creator Features",
"type": "object",
"additionalProperties": false,
"required": [ ],
"definitions": {
"definition_rule": {
"title": "Definition Rule",
"description": "The definition rule that specifies the behavior for one liquid type.",
"type": "object",
"additionalProperties": false,
"properties": {
"can_contain_liquid": {
"title": "Can Contain Liquid",
"description": "Whether this block can contain the liquid. For example, if the liquid type is water, this means the block can be waterlogged.",
"type": "boolean",
"default": false
},
"liquid_type": {
"title": "Liquid Type",
"description": "The type of liquid this detection rule is for.",
"type": "string",
"enum": [ "water" ],
"default": "water"
},
"on_liquid_touches": {
"title": "On Liquid Touches",
"description": "How the block reacts to flowing water. Must be one of the following options:\n\"blocking\" - The default value for this field. The block stops the liquid from flowing.\n\"broken\" - The block is destroyed completely.\n\"popped\" - The block is destroyed and its item is spawned.\n\"no_reaction\" - The block is unaffected; visually, the liquid will flow through the block.",
"type": "string",
"enum": [ "blocking", "broken", "popped", "no_reaction" ],
"default": "blocking"
},
"stops_liquid_flowing_from_direction": {
"title": "Stops Liquid Flowing From Direction",
"description": "When a block contains a liquid, controls the directions in which the liquid can't flow out from the block. Also controls the directions in which a block can stop liquid flowing into it if no_reaction is set for the on_liquid_touches field. The default is an empty list; this means that liquid can flow out of all directions by default.",
"type": "array",
"uniqueItems": true,
"items": {
"type": "string",
"enum": [ "up", "down", "north", "south", "east", "west", "side", "all" ]
}
}
}
}
},
"properties": {
"detection_rules": {
"type": "array",
"items": {
"$ref": "#/definitions/definition_rule"
}
}
}
}

View File

@@ -2,13 +2,13 @@
"$id": "blockception.minecraft.behavior.blocks.minecraft.material_instances",
"title": "Material Instances",
"description": "The material instances for a block. Maps face or material_instance names in a geometry file to an actual material instance. You can assign a material instance object to any of these faces: \"up\", \"down\", \"north\", \"south\", \"east\", \"west\", or \"*\". You can also give an instance the name of your choosing such as \"my_instance\", and then assign it to a face by doing \"north\":\"my_instance\".",
"required": [],
"required": [ ],
"examples": [
{ "*": {} },
{ "custom_sides": {} },
{ "up": {} },
{ "down": {} },
{ "north": {} },
{ "*": { } },
{ "custom_sides": { } },
{ "up": { } },
{ "down": { } },
{ "north": { } },
{ "south": "custom_sides" },
{ "east": "custom_sides" },
{ "west": "custom_sides" }
@@ -27,9 +27,17 @@
"properties": {
"ambient_occlusion": {
"title": "Ambient Occlusion",
"type": "boolean",
"default": true,
"description": "Should this material have ambient occlusion applied when lighting? If true, shadows will be created around and underneath the block."
"description": "Should this material have ambient occlusion applied when lighting? If true, shadows will be created around and underneath the block.",
"anyOf": [
{
"type": "boolean",
"default": true
},
{
"type": "number",
"minimum": 0 //TODO: Check if there's a maximum value
}
]
},
"face_dimming": {
"title": "Face Dimming",
@@ -43,7 +51,7 @@
"default": "opaque",
"description": "The render method to use. Must be one of these options: opaque - Used for a regular block texture without an alpha layer. Does not allow for transparency or translucency. double_sided - Used for completely disabling backface culling. blend - Used for a block like stained glass. Allows for transparency and translucency (slightly transparent textures). alpha_test - Used for a block like the vanilla (unstained) glass. Does not allow for translucency, only fully opaque or fully transparent textures. Also disables backface culling.",
"markdownDescription": "The render method to use. Must be one of these options: \nopaque - Used for a regular block texture without an alpha layer. Does not allow for transparency or translucency.\ndouble_sided - Used for completely disabling backface culling.\nblend - Used for a block like stained glass. Allows for transparency and translucency (slightly transparent textures).\nalpha_test - Used for a block like the vanilla (unstained) glass. Does not allow for translucency, only fully opaque or fully transparent textures. Also disables backface culling.",
"enum": ["opaque", "double_sided", "blend", "alpha_test", "alpha_test_single_sided"]
"enum": [ "opaque", "double_sided", "blend", "alpha_test", "alpha_test_single_sided" ]
},
"texture": {
"title": "Texture",

View File

@@ -23,8 +23,10 @@
"minecraft:flammable": { "$ref": "./components/flammable.json" },
"minecraft:friction": { "$ref": "./components/friction.json" },
"minecraft:geometry": { "$ref": "./components/geometry.json" },
"minecraft:item_visual": { "$ref": "./components/item_visual.json" },
"minecraft:light_dampening": { "$ref": "./components/light_dampening.json" },
"minecraft:light_emission": { "$ref": "./components/light_emission.json" },
"minecraft:liquid_detection": { "$ref": "./components/liquid_detection.json" },
"minecraft:loot": { "$ref": "./components/loot.json" },
"minecraft:map_color": { "$ref": "./components/map_color.json" },
"minecraft:material_instances": { "$ref": "./components/material_instances.json" },
@@ -34,7 +36,19 @@
"minecraft:transformation": { "$ref": "./components/transformation.json" },
"minecraft:custom_components": { "$ref": "./components/custom_components.json" },
"minecraft:tick": { "$ref": "./components/tick.json" },
"minecraft:entity_fall_on": { "$ref": "./components/entity_fall_on.json" }
"minecraft:entity_fall_on": { "$ref": "./components/entity_fall_on.json" },
// Tags
"tag:minecraft:diamond_tier_destructible": { },
"tag:minecraft:iron_tier_destructible": { },
"tag:minecraft:is_axe_item_destructible": { },
"tag:minecraft:is_hoe_item_destructible": { },
"tag:minecraft:is_mace_item_destructible": { },
"tag:minecraft:is_pickaxe_item_destructible": { },
"tag:minecraft:is_shears_item_destructible": { },
"tag:minecraft:is_shovel_item_destructible": { },
"tag:minecraft:is_sword_item_destructible": { },
"tag:minecraft:netherite_tier_destructible": { },
"tag:minecraft:stone_tier_destructible": { }
},
"patternProperties": {
"tag:.+": {

View File

@@ -4,7 +4,7 @@
"title": "Summon Entity",
"type": "object",
"additionalProperties": false,
"required": [],
"required": [ ],
"properties": {
"priority": {
"$ref": "./types/priority.json"
@@ -111,7 +111,7 @@
"type": "string",
"default": "line",
"description": "The base shape of this step. Valid values are circle and line",
"enum": ["line", "circle"],
"enum": [ "line", "circle" ],
"title": "Shape"
},
"size": {
@@ -137,6 +137,11 @@
"description": "Maximum radius where the summon entities can spawn.",
"title": "Summon Cap Radius"
},
"summon_event": {
"title": "Summon Event",
"default": "self",
"description": "Event to invoke on each summoned entity on spawn."
},
"target": {
"type": "string",
"default": "self",
@@ -163,7 +168,7 @@
},
"examples": [
{
"summon_choices": []
"summon_choices": [ ]
}
]
}

View File

@@ -36,6 +36,7 @@
"minecraft:can_fly": { "$ref": "./components/can_fly.json" },
"minecraft:can_join_raid": { "$ref": "./components/can_join_raid.json" },
"minecraft:can_power_jump": { "$ref": "./components/can_power_jump.json" },
"minecraft:cannot_be_attacked": { "$ref": "./components/cannot_be_attacked.json" },
"minecraft:celebrate_hunt": { "$ref": "./components/celebrate_hunt.json" },
"minecraft:collision_box": { "$ref": "./components/collision_box.json" },
"minecraft:color": { "$ref": "./components/color.json" },
@@ -71,6 +72,7 @@
"minecraft:genetics": { "$ref": "./components/genetics.json" },
"minecraft:giveable": { "$ref": "./components/giveable.json" },
"minecraft:ground_offset": { "$ref": "./components/ground_offset.json" },
"minecraft:ignore_cannot_be_attacked": { "$ref": "./components/ignore_cannot_be_attacked.json" },
"minecraft:group_size": { "$ref": "./components/group_size.json" },
"minecraft:grows_crop": { "$ref": "./components/grows_crop.json" },
"minecraft:healable": { "$ref": "./components/healable.json" },

View File

@@ -61,6 +61,12 @@
"description": "If true, other entities of the same entity definition within the broadcastRange will also become angry whenever this mob is attacked.",
"title": "Broadcast Anger On Being Attacked"
},
"broadcast_anger_when_dying": {
"type": "boolean",
"default": false,
"description": "If false, when this mob is killed it does not spread its anger to other entities of the same entity definition within the broadcastRange",
"title": "Broadcast Anger When Dying"
},
"duration": {
"title": "Duration",
"type": "integer",

View File

@@ -0,0 +1,9 @@
{
"$id": "blockception.minecraft.behavior.entities.minecraft.cannot_be_attacked",
"type": "object",
"title": "Cannot Be Attacked",
"additionalProperties": false,
"description": "When set, blocks entities from attacking the owner entity unless they have the \"minecraft:ignore_cannot_be_attacked\" component.",
"required": [ ],
"properties": { }
}

View File

@@ -52,7 +52,7 @@
"title": "Deals Damage",
"description": "Defines how received damage affects the entity:\n- 'yes', received damage is applied to the entity.\n- 'no', received damage is not applied to the entity.\n- 'no_but_side_effects_apply', received damage is not applied to the entity, but the side effects of the attack are. This means that the attacker's weapon loses durability, enchantment side effects are applied, and so on.",
"enum": [ "yes", "no", "no_but_side_effects_apply" ],
"default": "yes",
"default": "yes"
},
"on_damage": {
"type": "object",

View File

@@ -24,7 +24,7 @@
},
"restriction_type": {
"title": "Restriction Type",
"description": "Defines how the the entity will be restricted to its home position. The possible values are:\n- 'none', which poses no restriction.\n- 'random_movement', which restricts randomized movement to be around the home position.\n- [Beta] 'all_movement', which restricts any kind of movement to be around the home position. However, entities that somehow got too far away from their home will always be able to move closer to it, if prompted to do so.",
"description": "Defines how the the entity will be restricted to its home position. The possible values are:\n- 'none', which poses no restriction.\n- 'random_movement', which restricts randomized movement to be around the home position.\n- 'all_movement', which restricts any kind of movement to be around the home position. However, entities that somehow got too far away from their home will always be able to move closer to it, if prompted to do so.",
"enum": [ "none", "random_movement", "all_movement" ],
"default": "none"
}

View File

@@ -0,0 +1,15 @@
{
"$id": "blockception.minecraft.behavior.entities.minecraft.ignore_cannot_be_attacked",
"type": "object",
"title": "Ignore Cannot Be Attacked",
"additionalProperties": false,
"description": "When set, allows the entity to attack entities that have the \"minecraft:cannot_be_attacked\" component.",
"required": [ ],
"properties": {
"filters": {
"title": "Filters",
"$ref": "../../filters/filters.json",
"description": "Defines which entities are exceptions and are allowed to be attacked by the owner entity, potentially attacked entity is subject \"other\". If this is not specified then all attacks by the owner are allowed."
}
}
}

View File

@@ -138,7 +138,9 @@
"vibration": {
"title": "Vibration",
"type": "string",
"description": "Vibration to emit when the interaction occurs. Admitted values are entity_interact (used by default), shear, and none (no vibration emitted)."
"default": "entity_interact",
"description": "Vibration to emit when the interaction occurs. Admitted values are none (no vibration emitted), shear, entity_die, entity_act, entity_interact.",
"enum": ["none", "shear", "entity_die", "entity_act", "entity_interact"]
},
"give_item": {
"title": "Give Item",

View File

@@ -8,7 +8,7 @@
"field_of_view": {
"type": "number",
"default": 26,
"description": "[Beta] Defines, in degrees, the width of the field of view for entities looking at the owner entity. If 'scale_fov_by_distance' is set to true, this value corresponds to the field of view at a distance of one block between the entities.",
"description": "Defines, in degrees, the width of the field of view for entities looking at the owner entity. If 'scale_fov_by_distance' is set to true, this value corresponds to the field of view at a distance of one block between the entities.",
"title": "Field Of View"
},
"filters": {
@@ -18,25 +18,40 @@
},
"find_players_only": {
"title": "Find Players Only",
"description": "[Beta] Limits the search to only the nearest Player that meets the specified \"filters\" rather than all nearby entities.",
"description": "Limits the search to only the nearest Player that meets the specified \"filters\" rather than all nearby entities.",
"type": "boolean",
"default": false
},
"line_of_sight_obstruction_type": {
"title": "Line Of Sight Obstruction Type",
"description": "[Beta] Defines the type of block shape used to check for line of sight obstructions.",
"description": "Defines the type of block shape used to check for line of sight obstructions.",
"type": "string",
"enum": [ "outline", "collision", "collision_for_camera" ],
"default": "collision"
},
"look_at_locations": {
"title": "Look At Locations",
"description": "[Beta] A list of locations on the owner entity towards which line of sight checks are performed. At least one location must be unobstructed for the entity to be considered as looked at.",
"description": "A list of locations on the owner entity towards which line of sight checks are performed. At least one location must be unobstructed for the entity to be considered as looked at.",
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"enum": [ "head", "body", "feet" ]
"title": "",
"description": "",
"type": "object",
"additionalProperties": false,
"properties": {
"location": {
"title": "Location",
"type": "string",
"description": "Location to be looked at",
"enum": [ "head", "body", "feet" ]
},
"vertical_offset": {
"title": "Vertical Offset",
"description": "Vertical offset from the set location",
"type": "number"
}
}
}
},
"looked_at_cooldown": {
@@ -51,13 +66,13 @@
"$ref": "../types/event_object.json"
},
"not_looked_at_event": {
"description": "[Beta] Defines the event to trigger when no entity is found looking at the owner entity.",
"description": "Defines the event to trigger when no entity is found looking at the owner entity.",
"title": "Not Looked At Event",
"$ref": "../types/event_object.json"
},
"scale_fov_by_distance": {
"title": "Scale Fov By Distance",
"description": "[Beta] When true, the field of view narrows as the distance between the owner entity and the entity looking at it increases. This ensures that the width of the view cone remains somewhat constant towards the owner entity position, regardless of distance.",
"description": "When true, the field of view narrows as the distance between the owner entity and the entity looking at it increases. This ensures that the width of the view cone remains somewhat constant towards the owner entity position, regardless of distance.",
"type": "boolean",
"default": false
},
@@ -69,7 +84,7 @@
},
"set_target": {
"title": "Set Target",
"description": "Defines if and how the owner entity will set entities that are looking at it as its combat targets. Valid values:\n- \"never\", looking entities are never set as targets, but events are emitted.\n- \"once_and_stop_scanning\", the first detected looking entity is set as target. Scanning and event emission is suspended if and until the owner entity has a target.\n- [Beta] \"once_and_keep_scanning\", the first detected looking entity is set as target. Scanning and event emission continues.",
"description": "Defines if and how the owner entity will set entities that are looking at it as its combat targets. Valid values:\n- \"never\", looking entities are never set as targets, but events are emitted.\n- \"once_and_stop_scanning\", the first detected looking entity is set as target. Scanning and event emission is suspended if and until the owner entity has a target.\n- \"once_and_keep_scanning\", the first detected looking entity is set as target. Scanning and event emission continues.",
"type": "string",
"default": "once_and_stop_scanning",
"enum": [ "never", "once_and_stop_scanning", "once_and_keep_scanning" ]

View File

@@ -164,6 +164,32 @@
]
}
}
},
"play_sound": {
"title": "Play Sound",
"description": "Allows the owner entity to emit sounds",
"type": "object",
"additionalProperties": false,
"properties": {
"sound": {
"title": "Sound",
"description": "Specifies the sound event to play",
"type": "string"
}
}
},
"emit_particle": {
"title": "Emit Particle",
"description": "Allowing particles to be emitted at the center of the entity's bounding box",
"type": "object",
"additionalProperties": false,
"properties": {
"particle": {
"title": "Particle",
"description": "Specifies the type of particle to emit",
"type": "string"
}
}
}
}
},

View File

@@ -0,0 +1,18 @@
{
"$id": "blockception.minecraft.behavior.items.minecraft:compostable",
"title": "Compostable",
"description": "Allows items to be compostable in the composter block.",
"type": "object",
"additionalProperties": false,
"required": [ ],
"properties": {
"composting_chance": {
"description": "The chance of this item generating a compost layer when supplied to the composter block.",
"title": "Composting Chance",
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 100
}
}
}

View File

@@ -56,6 +56,7 @@
"minecraft:block_placer": { "$ref": "./components/block_placer.json" },
"minecraft:bundle_interaction": { "$ref": "./components/bundle_interaction.json" },
"minecraft:can_destroy_in_creative": { "$ref": "./components/can_destroy_in_creative.json" },
"minecraft:compostable": { "$ref": "./components/compostable.json" },
"minecraft:cooldown": { "$ref": "./components/cooldown.json" },
"minecraft:custom_components": { "$ref": "./components/custom_components.json" },
"minecraft:damage": { "$ref": "./components/damage.json" },

View File

@@ -0,0 +1,93 @@
{
"$id": "blockception.minecraft.behavior.worldgen.jigsaw_structures.minecraft.jigsaw",
"type": "object",
"title": "Jigsaw",
"additionalProperties": false,
"required": [
"description",
"heightmap_projection",
"max_depth",
"start_height",
"start_pool",
"step"
],
"properties": {
"biome_filters": {
"title": "Biome Filters",
"description": "Specifies the biomes in which the Jigsaw Structure can generate.",
"$ref": "../../../entities/filters/filters.json"
},
"description": {
"title": "Description",
"description": "The description of this jigsaw.",
"type": "object",
"additionalProperties": false,
"required": ["identifier"],
"properties": {
"identifier": {
"title": "Identifier",
"description": "Identifier of the Jigsaw Structure. This is used with commands such as /locate, as well as within Structure Set definitions to specify which Jigsaw Structures are included in a given set.",
"type": "string"
}
}
},
"heightmap_projection": {
"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"
]
},
"max_depth": {
"title": "Max Depth",
"type": "integer",
"description": " The maximum recursion depth for Jigsaw Structure Generation. For example, a Jigsaw Structure that builds a road with a max_depth of 5 will only have paths that are a maximum of 5 structures templates in length in any given direction from the origin.",
"minimum": 0.0,
"maximum": 20.0
},
"start_height": {
"title": "Start Height",
"description": "World height at which the Jigsaw Structure should begin generation.",
"type": "integer",
"maximum": 320,
"minimum": -64
},
"start_pool": {
"title": "Start Pool",
"type": "string",
"description": "The first Template Pool to use when generating the Jigsaw Structure."
},
"step": {
"title": "Step",
"description": "Specifies the world generation phase in which the structure is generated. This is used as a grouping concept to keep similar world-generation features generally bundled together.",
"type": "string",
"enum": [
"fluid_springs",
"lakes",
"local_modifications",
"raw_generation",
"strongholds",
"surface_structures",
"top_layer_modification",
"underground_decoration",
"underground_ores",
"underground_structures",
"vegetal_decoration"
]
},
"terrain_adaptation": {
"title": "Terrain Adaptation",
"description": "How the terrain should adapt relative to the generated Jigsaw Structure.",
"type": "string",
"enum": [
"beard_box",
"beard_thin",
"bury",
"encapsulate",
"none"
]
}
}
}

View File

@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "blockception.minecraft.behavior.worldgen.jigsaw_structures.jigsaw",
"type": "object",
"title": "Jigsaw",
"description": "A Jigsaw Structure is a group of Structure Templates that make up a larger structure. Jigsaw Structures are placed during world generation.",
"required": [ "format_version", "minecraft:jigsaw" ],
"additionalProperties": false,
"properties": {
"format_version": { "$ref": "../../../general/format_version.json" },
"minecraft:jigsaw": { "$ref": "./format/minecraft.jigsaw.json" }
}
}

View File

@@ -0,0 +1,34 @@
{
"$id": "blockception.minecraft.behavior.worldgen.processors.minecraft.processor_list",
"type": "object",
"title": "Processor List",
"additionalProperties": false,
"required": [
"description",
"processors"
],
"properties": {
"description": {
"title": "Description",
"description": "The description of this jigsaw.",
"type": "object",
"additionalProperties": false,
"properties": {
"identifier": {
"title": "Identifier",
"description": "Identifier of the Processor List. This is referenced by Template Pools when pairing processors with Structure Templates.",
"type": "string"
}
}
},
"processors": {
"title": "Processors",
"description": "A list of processors.",
"type": "array",
"minItems": 1,
"items": {
"$ref": "./processors.json"
}
}
}
}

View File

@@ -0,0 +1,18 @@
{
"title": "Processors",
"description": "",
"type": "object",
"properties": {
"processor_type": {
"title": "Processor Type",
"type": "string",
"enum": [ "minecraft:rule", "minecraft:capped", "minecraft:block_ignore", "minecraft:protected_blocks" ]
}
},
"allOf": [
{ "if": { "properties": { "processor_type": { "const": "minecraft:rule" } } }, "then": { "$ref": "./processors/minecraft.rule.json" } },
{ "if": { "properties": { "processor_type": { "const": "minecraft:capped" } } }, "then": { "$ref": "./processors/minecraft.capped.json" } },
{ "if": { "properties": { "processor_type": { "const": "minecraft:block_ignore" } } }, "then": { "$ref": "./processors/minecraft.block_ignore.json" } },
{ "if": { "properties": { "processor_type": { "const": "minecraft:protected_blocks" } } }, "then": { "$ref": "./processors/minecraft.protected_blocks.json" } }
]
}

View File

@@ -0,0 +1,22 @@
{
"title": "Block Ignore",
"type": "object",
"properties": {
"blocks": {
"title": "Blocks",
"type": "array",
"items": {
"type": "string"
}
},
"processor_type": {
"title": "Processor Type",
"type": "string",
"const": "minecraft:block_ignore"
}
},
"required": [
"blocks",
"processor_type"
]
}

View File

@@ -0,0 +1,83 @@
{
"title": "Capped",
"type": "object",
"properties": {
"delegate": {
"oneOf": [
{
"$ref": "./minecraft.rule.json"
},
{
"$ref": "./minecraft.block_ignore.json"
},
{
"$ref": "./minecraft.protected_blocks.json"
}
]
},
"limit": {
"oneOf": [
{
"type": "integer"
},
{
"title": "Constant Integer",
"description": "",
"type": "object",
"additionalProperties": false,
"properties": {
"type": {
"title": "Type",
"description": "",
"type": "string",
"const": "constant"
},
"value": {
"title": "Value",
"description": "",
"type": "integer"
}
},
"required": [ "type", "value" ]
},
{
"title": "Uniform Integer",
"type": "object",
"properties": {
"max_inclusive": {
"title": "Max Inclusive",
"description": "",
"type": "integer"
},
"min_inclusive": {
"title": "Min Inclusive",
"description": "",
"type": "integer"
},
"type": {
"title": "Type",
"description": "",
"type": "string",
"const": "uniform"
}
},
"required": [
"max_inclusive",
"min_inclusive",
"type"
]
}
]
},
"processor_type": {
"title": "Processor Type",
"type": "string",
"const": "minecraft:capped"
}
},
"required": [
"delegate",
"limit",
"processor_type"
]
}

View File

@@ -0,0 +1,18 @@
{
"title": "Protected Blocks",
"type": "object",
"properties": {
"processor_type": {
"title": "Processor Type",
"type": "string",
"const": "minecraft:protected_blocks"
},
"value": {
"type": "string"
}
},
"required": [
"processor_type",
"value"
]
}

View File

@@ -0,0 +1,279 @@
{
"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": {
"oneOf": [
{
"$ref": "#/definitions/passthrough"
},
{
"$ref": "#/definitions/append_loot"
}
]
},
"input_predicate": {
"oneOf": [
{
"$ref": "#/definitions/always_true"
},
{
"$ref": "#/definitions/block_match"
},
{
"$ref": "#/definitions/random_block_match"
},
{
"$ref": "#/definitions/tag_match"
}
]
},
"location_predicate": {
"oneOf": [
{
"$ref": "#/definitions/always_true"
},
{
"$ref": "#/definitions/block_match"
},
{
"$ref": "#/definitions/random_block_match"
},
{
"$ref": "#/definitions/tag_match"
}
]
},
"output_state": {
"$ref": "#/definitions/block_specifier"
},
"position_predicate": {
"oneOf": [
{
"$ref": "#/definitions/always_true"
},
{
"$ref": "#/definitions/axis_aligned_linear_pos"
}
]
}
},
"required": [
"output_state"
]
},
"append_loot": {
"title": "Append Loot",
"description": "",
"type": "object",
"additionalProperties": false,
"required": [ "type", "loot_table" ],
"properties": {
"loot_table": {
"title": "Loot Table",
"description": "",
"type": "string"
},
"type": {
"title": "Type",
"description": "",
"type": "string",
"const": "minecraft:append_loot"
}
}
},
"passthrough": {
"title": "Passthrough",
"description": "",
"type": "object",
"additionalProperties": false,
"required": [ "type" ],
"properties": {
"type": {
"title": "Type",
"description": "",
"type": "string",
"const": "minecraft:passthrough"
}
}
},
"always_true": {
"title": "Always True",
"description": "",
"type": "object",
"additionalProperties": false,
"required": [ "predicate_type" ],
"properties": {
"predicate_type": {
"title": "Predicate Type",
"type": "string",
"const": "minecraft:always_true"
}
}
},
"block_match": {
"title": "Block Match",
"type": "object",
"properties": {
"block": {
"type": "string"
},
"predicate_type": {
"title": "Predicate Type",
"type": "string",
"const": "minecraft:block_match"
}
},
"required": [
"block",
"predicate_type"
]
},
"random_block_match": {
"title": "Random Block Match",
"type": "object",
"properties": {
"block": {
"type": "string"
},
"predicate_type": {
"title": "Predicate Type",
"type": "string",
"const": "minecraft:random_block_match"
},
"probability": {
"type": "number",
"minimum": 0.0,
"exclusiveMaximum": 1.0
}
},
"required": [
"block",
"predicate_type",
"probability"
]
},
"tag_match": {
"title": "Tag Match",
"type": "object",
"properties": {
"predicate_type": {
"title": "Predicate Type",
"type": "string",
"const": "minecraft:tag_match"
},
"tag": {
"type": "string"
}
},
"required": [
"predicate_type",
"tag"
]
},
"axis_aligned_linear_pos": {
"title": "Axis Aligned Linear",
"type": "object",
"properties": {
"axis": {
"title": "Axis",
"description": "",
"type": "string",
"enum": [
"x",
"y",
"z"
]
},
"max_chance": {
"title": "Max Chance",
"description": "",
"type": "number",
"minimum": 0.0,
"exclusiveMaximum": 1.0
},
"max_dist": {
"title": "Max Dist",
"description": "",
"type": "integer",
"minimum": 0.0
},
"min_chance": {
"title": "Min Chance",
"description": "",
"type": "number",
"minimum": 0.0,
"exclusiveMaximum": 1.0
},
"min_dist": {
"title": "Min Dist",
"description": "",
"type": "integer",
"minimum": 0.0
},
"predicate_type": {
"title": "Predicate Type",
"description": "",
"type": "string",
"const": "minecraft:axis_aligned_linear_pos"
}
},
"required": [
"predicate_type"
]
}
},
"additionalProperties": false,
"properties": {
"processor_type": {
"title": "Processor Type",
"type": "string",
"const": "minecraft:rule"
},
"rules": {
"title": "Rules",
"type": "array",
"items": {
"$ref": "#/definitions/rule"
}
}
},
"required": [
"processor_type",
"rules"
]
}

View File

@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "blockception.minecraft.behavior.worldgen.processors.processor_list",
"type": "object",
"title": "Processor List",
"description": "Rules used by Jigsaw Structures to determine which blocks to modify or replace when placing a Structure Template in the world.",
"required": [ "format_version", "minecraft:processor_list" ],
"additionalProperties": false,
"properties": {
"format_version": { "$ref": "../../../general/format_version.json" },
"minecraft:processor_list": { "$ref": "./format/minecraft.processor_list.json" }
}
}

View File

@@ -0,0 +1,106 @@
{
"$id": "blockception.minecraft.behavior.worldgen.structure_sets.minecraft.structure_set",
"type": "object",
"title": "Structure Set",
"additionalProperties": false,
"properties": {
"description": {
"title": "Description",
"description": "The description of this structure set.",
"type": "object",
"additionalProperties": false,
"required": ["identifier"],
"properties": {
"identifier": {
"title": "Identifier",
"description": "The name of this structure set.",
"type": "string"
}
}
},
"placement": {
"title": "Placement",
"description": "Describes where structures in the set spawn relative to one another. Currently, the only placement type supported is random_spread, which scatters structures randomly with a given separation and spacing.",
"type": "object",
"additionalProperties": false,
"properties": {
"salt": {
"title": "Salt",
"description": "Seed used for the random generator to provide a unique scatter pattern. This is used to prevent overlap in the case where multiple structure sets use the same placement values.",
"type": "integer"
},
"separation": {
"title": "Separation",
"description": "Padding (in chunks) within each grid cell. Structures will not generate within the padded area.",
"type": "integer",
"minimum": 0.0
},
"spacing": {
"title": "Spacing",
"description": "Grid cell size (in chunks) to use when generating the structure. Structures will attempt to generate at a random position within each cell.",
"type": "integer",
"minimum": 1.0
},
"spread_type": {
"title": "Spread Type",
"description": "Randomness algorithm used when placing structures.",
"type": "string",
"anyOf": [
{
"const": "linear",
"description": "Basic randomness e.g. rand(x)"
},
{
"const": "triangular",
"description": "Average of 2 randoms e.g. (rand(x) + rand(x)) / 2"
}
]
},
"type": {
"title": "Type",
"description": "",
"type": "string",
"const":"minecraft:random_spread"
}
},
"required": [
"salt",
"separation",
"spacing",
"type"
]
},
"structures": {
"title": "Structures",
"description": "A weighted list of Jigsaw Structure identifiers. Structures will be randomly chosen from this set during world generation.",
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"structure": {
"title": "Structure",
"description": "Identifier of the Jigsaw Structure.",
"type": "string"
},
"weight": {
"title": "Weight",
"description": "Weight of the Jigsaw Structure in the set. Higher weights are more likely to be selected.",
"type": "integer",
"minimum": 1.0,
"maximum": 200.0
}
},
"required": [
"structure",
"weight"
]
}
}
},
"required": [
"description",
"placement",
"structures"
]
}

View File

@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "blockception.minecraft.behavior.worldgen.structure_sets.structure_set",
"type": "object",
"title": "Structure Set",
"description": "A Jigsaw Structure Set is a collection of Jigsaw Structures that are placed according to a set of rules.",
"required": [ "format_version", "minecraft:structure_set" ],
"additionalProperties": false,
"properties": {
"format_version": { "$ref": "../../../general/format_version.json" },
"minecraft:structure_set": { "$ref": "./format/minecraft.structure_set.json" }
}
}

View File

@@ -0,0 +1,99 @@
{
"$id": "blockception.minecraft.behavior.worldgen.template_pools.minecraft.template_pool",
"type": "object",
"title": "Template Pool",
"additionalProperties": false,
"definitions": {
"template_pool_element": {
"title": "Template Pool Element",
"description": "A template pool item used to define the element and its weight.",
"type": "object",
"additionalProperties": false,
"required": [ "element" ],
"properties": {
"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"
},
"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"
}
},
"required": [
"element_type",
"location",
"processors"
]
},
"projection": {
"title": "Projection",
"description": "Specifies how structures should be placed relative to the terrain.",
"type": "string",
"default": "rigid",
"anyOf": [
{
"const": "rigid",
"description": "Structures are placed without any height adjustment."
},
{
"const": "terrain_matching",
"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": [ "description", "elements" ],
"properties": {
"description": {
"title": "Description",
"description": "The description of this template pool.",
"type": "object",
"additionalProperties": false,
"required": [ "identifier" ],
"properties": {
"identifier": {
"title": "Identifier",
"description": "Identifier of the template pool. This is used by both the start_pool property of the Jigsaw Structure JSON and the Jigsaw Block's Target Pool field.",
"type": "string"
}
}
},
"elements": {
"title": "Elements",
"description": "An array of pool elements.",
"type": "array",
"minItems": 1,
"items": {
}
},
"fallback": {
"title": "Fallback",
"description": "Fallback template pool to use if no element in the pool can be placed successfully.",
"type": "string"
}
}
}

View File

@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-07/schema",
"$id": "blockception.minecraft.behavior.worldgen.template_pools.template_pool",
"type": "object",
"title": "Template Pool",
"description": "Used to pair block rules with Structure Templates and to randomly place Structure Templates using a weighted list.",
"required": [ "format_version", "minecraft:template_pool" ],
"additionalProperties": false,
"properties": {
"format_version": { "$ref": "../../../general/format_version.json" },
"minecraft:template_pool": { "$ref": "./format/minecraft.template_pool.json" }
}
}