From 33697e1a4ffdb4d7a2df4de0a98b8402859dc52c Mon Sep 17 00:00:00 2001 From: Brian Fopiano Date: Sat, 8 Aug 2020 18:59:51 -0700 Subject: [PATCH] dawdadwa --- overworld/biomes/swamp-willow-forest.json | 46 +- overworld/overworld.code-workspace | 902 +++++++++++----------- willwo/willowbutbigger-1/objects/-o.iob | Bin 0 -> 160234 bytes willwo/willowbutbigger-2/objects/-o.iob | Bin 0 -> 177929 bytes 4 files changed, 494 insertions(+), 454 deletions(-) create mode 100644 willwo/willowbutbigger-1/objects/-o.iob create mode 100644 willwo/willowbutbigger-2/objects/-o.iob diff --git a/overworld/biomes/swamp-willow-forest.json b/overworld/biomes/swamp-willow-forest.json index 01b0dc5b..1fd9a9cb 100644 --- a/overworld/biomes/swamp-willow-forest.json +++ b/overworld/biomes/swamp-willow-forest.json @@ -123,9 +123,8 @@ "willwo/willwo-8", "willwo/willwo-9", "willwo/willwo-10", - "willwo/willwo-11", - "willwo/willowbutbigger-1", - "willwo/willowbutbigger-2" + "willwo/willwo-11" + ], "translate": { "x": 0, @@ -133,6 +132,47 @@ "z": 0 } }, + { + "chance": 1, + "density": 1, + "edit":[ + { + "find":"oak_log", + "replace":"dark_oak_log" + }, + { + "find":"oak_wood", + "replace":"dark_oak_wood" + }, + { + "find":"oak_fence", + "replace":"dark_oak_fence" + }, + { + "find":"dark_oak_planks", + "replace":"stripped_dark_oak_wood" + } + ], + "rotation": { + "yAxis": { + "min": 0, + "max": 0, + "interval": 90, + "enabled": true + }, + "enabled": true + }, + "place": [ + "willwo/willowbutbigger-1", + "willwo/willowbutbigger-2" + + ], + "translate": { + "x": 24, + "y": -3, + "z": 0 + } + }, { "chance": 0.135, "density": 1, diff --git a/overworld/overworld.code-workspace b/overworld/overworld.code-workspace index 03567051..cbacc978 100644 --- a/overworld/overworld.code-workspace +++ b/overworld/overworld.code-workspace @@ -10,74 +10,10 @@ "schema": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Represents a dimension", - "title": "Obfuscator", + "title": "Dimension", "type": "object", "definitions": { - "irisdrop": { - "description": "A biome mutation if a condition is met", - "type": "object", - "properties": { - "checks": { - "maximum": 32, - "description": "How many tries per chunk to check for this mutation", - "type": "integer", - "minimum": 1 - }, - "objects": { - "minItems": 1, - "description": "Objects define what schematics (iob files) iris will place in this biome mutation", - "type": "array", - "items": {"$ref": "#/definitions/irisregionfinder"} - }, - "radius": { - "maximum": 1024, - "description": "The scan radius for placing this mutator", - "type": "integer", - "minimum": 1 - }, - "sideB": { - "minItems": 1, - "description": "One of The following biomes or regions must show up", - "type": "array", - "items": {"type": "string"} - }, - "sideA": { - "minItems": 1, - "description": "One of The following biomes or regions must show up", - "type": "array", - "items": {"type": "string"} - } - }, - "required": [ - "sideA", - "sideB", - "radius", - "checks" - ] - }, - "irisdataloader": { - "description": "Find and replace object materials", - "type": "object", - "properties": { - "find": { - "description": "Find this block", - "type": "string" - }, - "replace": { - "description": "Replace it with this block", - "type": "string" - }, - "exact": { - "description": "Exactly match the block data or not", - "type": "boolean" - } - }, - "required": [ - "find", - "replace" - ] - }, - "irisregionfinder": { + "irisobjectplacement": { "description": "Represents an iris object placer. It places objects.", "type": "object", "properties": { @@ -100,7 +36,7 @@ "minItems": 1, "description": "Find and replace blocks", "type": "array", - "items": {"$ref": "#/definitions/irisdataloader"} + "items": {"$ref": "#/definitions/irisobjectreplace"} }, "snow": { "maximum": 1, @@ -254,7 +190,7 @@ "chance" ] }, - "irisjsonarray": { + "irispostprocessor": { "description": "Represents a post processor", "type": "object", "properties": { @@ -274,7 +210,7 @@ "processor" ] }, - "irisadventure": { + "iriscompatabilityfilter": { "description": "Find and replace object materials for compatability", "type": "object", "properties": { @@ -296,7 +232,71 @@ "supplement" ] }, - "iriseyespy": { + "irisobjectreplace": { + "description": "Find and replace object materials", + "type": "object", + "properties": { + "find": { + "description": "Find this block", + "type": "string" + }, + "replace": { + "description": "Replace it with this block", + "type": "string" + }, + "exact": { + "description": "Exactly match the block data or not", + "type": "boolean" + } + }, + "required": [ + "find", + "replace" + ] + }, + "irisbiomemutation": { + "description": "A biome mutation if a condition is met", + "type": "object", + "properties": { + "checks": { + "maximum": 32, + "description": "How many tries per chunk to check for this mutation", + "type": "integer", + "minimum": 1 + }, + "objects": { + "minItems": 1, + "description": "Objects define what schematics (iob files) iris will place in this biome mutation", + "type": "array", + "items": {"$ref": "#/definitions/irisobjectplacement"} + }, + "radius": { + "maximum": 1024, + "description": "The scan radius for placing this mutator", + "type": "integer", + "minimum": 1 + }, + "sideB": { + "minItems": 1, + "description": "One of The following biomes or regions must show up", + "type": "array", + "items": {"type": "string"} + }, + "sideA": { + "minItems": 1, + "description": "One of The following biomes or regions must show up", + "type": "array", + "items": {"type": "string"} + } + }, + "required": [ + "sideA", + "sideB", + "radius", + "checks" + ] + }, + "irisdepositgenerator": { "description": "Creates ore & other block deposits underground", "type": "object", "properties": { @@ -439,7 +439,7 @@ "minItems": 1, "description": "Define biome mutations for this dimension", "type": "array", - "items": {"$ref": "#/definitions/irisdrop"} + "items": {"$ref": "#/definitions/irisbiomemutation"} }, "terrainZoom": { "maximum": 512, @@ -491,7 +491,7 @@ "minItems": 1, "description": "Post Processors", "type": "array", - "items": {"$ref": "#/definitions/irisjsonarray"} + "items": {"$ref": "#/definitions/irispostprocessor"} }, "caveThickness": { "maximum": 64, @@ -538,7 +538,7 @@ "minItems": 1, "description": "Define global deposit generators", "type": "array", - "items": {"$ref": "#/definitions/iriseyespy"} + "items": {"$ref": "#/definitions/irisdepositgenerator"} }, "rockDispersion": { "description": "The dispersion of materials for the rock palette", @@ -575,7 +575,7 @@ "minItems": 1, "description": "Compatability filters", "type": "array", - "items": {"$ref": "#/definitions/irisadventure"} + "items": {"$ref": "#/definitions/iriscompatabilityfilter"} }, "name": { "minLength": 2, @@ -608,7 +608,7 @@ "regions", "fluidHeight" ], - "$id": "http://volmit.com/iris-schema/irisobfuscator.json" + "$id": "http://volmit.com/iris-schema/irisdimension.json" }, "fileMatch": ["/dimensions/*.json"] }, @@ -616,58 +616,10 @@ "schema": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Represents a biome in iris. Biomes are placed inside of regions and hold objects.", - "title": "Schematic", + "title": "Biome", "type": "object", "definitions": { - "irisdataloader": { - "description": "Find and replace object materials", - "type": "object", - "properties": { - "find": { - "description": "Find this block", - "type": "string" - }, - "replace": { - "description": "Replace it with this block", - "type": "string" - }, - "exact": { - "description": "Exactly match the block data or not", - "type": "boolean" - } - }, - "required": [ - "find", - "replace" - ] - }, - "irisbiomegrid": { - "description": "This represents a link to a generator for a biome", - "type": "object", - "properties": { - "min": { - "maximum": 256, - "description": "The min block value (value + fluidHeight)", - "type": "integer", - "minimum": -256 - }, - "max": { - "maximum": 256, - "description": "The max block value (value + fluidHeight)", - "type": "integer", - "minimum": -256 - }, - "generator": { - "description": "The generator id", - "type": "string" - } - }, - "required": [ - "min", - "max" - ] - }, - "irisregionfinder": { + "irisobjectplacement": { "description": "Represents an iris object placer. It places objects.", "type": "object", "properties": { @@ -690,7 +642,7 @@ "minItems": 1, "description": "Find and replace blocks", "type": "array", - "items": {"$ref": "#/definitions/irisdataloader"} + "items": {"$ref": "#/definitions/irisobjectreplace"} }, "snow": { "maximum": 1, @@ -844,49 +796,7 @@ "chance" ] }, - "irisbiomeparser": { - "description": "Represents a structure placement", - "type": "object", - "properties": { - "tileset": { - "description": "The structure tileset to use", - "type": "string" - }, - "zoom": { - "description": "The structure chance zoom. Higher = bigger cells, further away", - "type": "number", - "minimum": 1.0E-4 - }, - "shuffle": { - "description": "The chance cell shuffle (rougher edges)", - "type": "number", - "minimum": 0 - }, - "ratio": { - "maximum": 1, - "description": "The ratio. Lower values means cells can get closer to other cells. Negative values means make veins of structures", - "type": "number", - "minimum": -1 - }, - "rarity": { - "description": "The rarity for this structure", - "type": "integer", - "minimum": 1 - }, - "height": { - "maximum": 255, - "description": "The height or -1 for surface", - "type": "integer", - "minimum": -1 - } - }, - "required": [ - "tileset", - "zoom", - "rarity" - ] - }, - "irisspigot": { + "iriseffect": { "description": "An iris effect", "type": "object", "properties": { @@ -2123,7 +2033,7 @@ "chance" ] }, - "irisgrid": { + "irisbiomedecorator": { "description": "A biome decorator is used for placing flowers, grass, cacti and so on", "type": "object", "properties": { @@ -2200,7 +2110,7 @@ "palette" ] }, - "irisitemdrop": { + "irisbiomepalettelayer": { "description": "A layer of surface / subsurface material in biomes", "type": "object", "properties": { @@ -2238,7 +2148,71 @@ }, "required": ["palette"] }, - "iriseyespy": { + "irisstructureplacement": { + "description": "Represents a structure placement", + "type": "object", + "properties": { + "tileset": { + "description": "The structure tileset to use", + "type": "string" + }, + "zoom": { + "description": "The structure chance zoom. Higher = bigger cells, further away", + "type": "number", + "minimum": 1.0E-4 + }, + "shuffle": { + "description": "The chance cell shuffle (rougher edges)", + "type": "number", + "minimum": 0 + }, + "ratio": { + "maximum": 1, + "description": "The ratio. Lower values means cells can get closer to other cells. Negative values means make veins of structures", + "type": "number", + "minimum": -1 + }, + "rarity": { + "description": "The rarity for this structure", + "type": "integer", + "minimum": 1 + }, + "height": { + "maximum": 255, + "description": "The height or -1 for surface", + "type": "integer", + "minimum": -1 + } + }, + "required": [ + "tileset", + "zoom", + "rarity" + ] + }, + "irisobjectreplace": { + "description": "Find and replace object materials", + "type": "object", + "properties": { + "find": { + "description": "Find this block", + "type": "string" + }, + "replace": { + "description": "Replace it with this block", + "type": "string" + }, + "exact": { + "description": "Exactly match the block data or not", + "type": "boolean" + } + }, + "required": [ + "find", + "replace" + ] + }, + "irisdepositgenerator": { "description": "Creates ore & other block deposits underground", "type": "object", "properties": { @@ -2384,6 +2358,32 @@ "WARPED_FOREST", "BASALT_DELTAS" ] + }, + "irisbiomegeneratorlink": { + "description": "This represents a link to a generator for a biome", + "type": "object", + "properties": { + "min": { + "maximum": 256, + "description": "The min block value (value + fluidHeight)", + "type": "integer", + "minimum": -256 + }, + "max": { + "maximum": 256, + "description": "The max block value (value + fluidHeight)", + "type": "integer", + "minimum": -256 + }, + "generator": { + "description": "The generator id", + "type": "string" + } + }, + "required": [ + "min", + "max" + ] } }, "properties": { @@ -2391,7 +2391,7 @@ "minItems": 1, "description": "This defines the layers of materials in this biome. Each layer has a palette and min/max height and some other properties. Usually a grassy/sandy layer then a dirt layer then a stone layer. Iris will fill in the remaining blocks below your layers with stone.", "type": "array", - "items": {"$ref": "#/definitions/irisitemdrop"} + "items": {"$ref": "#/definitions/irisbiomepalettelayer"} }, "biomeSkyScatter": { "minItems": 1, @@ -2403,7 +2403,7 @@ "minItems": 1, "description": "Objects define what schematics (iob files) iris will place in this biome", "type": "array", - "items": {"$ref": "#/definitions/irisregionfinder"} + "items": {"$ref": "#/definitions/irisobjectplacement"} }, "biomeZoom": { "description": "This zooms in the biome colors if multiple derivatives are chosen", @@ -2414,7 +2414,7 @@ "minItems": 1, "description": "A list of structure tilesets", "type": "array", - "items": {"$ref": "#/definitions/irisbiomeparser"} + "items": {"$ref": "#/definitions/irisstructureplacement"} }, "biomeDispersion": { "description": "This changes the dispersion of the biome colors if multiple derivatives are chosen.", @@ -2513,7 +2513,7 @@ "minItems": 1, "description": "Define biome deposit generators that add onto the existing regional and global deposit generators", "type": "array", - "items": {"$ref": "#/definitions/iriseyespy"} + "items": {"$ref": "#/definitions/irisdepositgenerator"} }, "slab": { "description": "The default slab if iris decides to place a slab in this biome. Default is no slab.", @@ -2556,7 +2556,7 @@ "minItems": 1, "description": "Effects are ambient effects such as potion effects, random sounds, or even particles around each player. All of these effects are played via packets so two players won't see/hear each others effects.\nDue to performance reasons, effects will play arround the player even if where the effect was played is no longer in the biome the player is in.", "type": "array", - "items": {"$ref": "#/definitions/irisspigot"} + "items": {"$ref": "#/definitions/iriseffect"} }, "children": { "minItems": 1, @@ -2568,7 +2568,7 @@ "minItems": 1, "description": "Decorators are used for things like tall grass, bisected flowers, and even kelp or cactus (random heights)", "type": "array", - "items": {"$ref": "#/definitions/irisgrid"} + "items": {"$ref": "#/definitions/irisbiomedecorator"} }, "name": { "minLength": 2, @@ -2579,13 +2579,13 @@ "minItems": 1, "description": "This defines the layers of materials in this biome. Each layer has a palette and min/max height and some other properties. Usually a grassy/sandy layer then a dirt layer then a stone layer. Iris will fill in the remaining blocks below your layers with stone.", "type": "array", - "items": {"$ref": "#/definitions/irisitemdrop"} + "items": {"$ref": "#/definitions/irisbiomepalettelayer"} }, "generators": { "minItems": 1, "description": "Generators for this biome. Multiple generators with different interpolation sizes will mix with other biomes how you would expect. This defines your biome height relative to the fluid height. Use negative for oceans.", "type": "array", - "items": {"$ref": "#/definitions/irisbiomegrid"} + "items": {"$ref": "#/definitions/irisbiomegeneratorlink"} }, "childShrinkFactor": { "description": "If this biome has children biomes, and the gen layer chooses one of this biomes children, how much smaller will it be (inside of this biome). Higher values means a smaller biome relative to this biome's size. Set higher than 1.0 and below 3.0 for best results.", @@ -2651,7 +2651,7 @@ "layers", "generators" ], - "$id": "http://volmit.com/iris-schema/irisschematic.json" + "$id": "http://volmit.com/iris-schema/irisbiome.json" }, "fileMatch": ["/biomes/*.json"] }, @@ -2659,261 +2659,10 @@ "schema": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Represents an iris region", - "title": "JsonObject", + "title": "Region", "type": "object", "definitions": { - "irisjsonvalue": { - "description": "A ridge config", - "type": "object", - "properties": { - "as": { - "description": "What type this spot is (i.e. target SEA but as LAND) like an island. Default matches the target type", - "type": "string", - "enum": [ - "SHORE", - "LAND", - "SEA", - "CAVE", - "ISLAND", - "SKYLAND", - "DEFER" - ] - }, - "chance": { - "maximum": 1, - "description": "The chance this biome will be placed in a given spot", - "type": "number", - "minimum": 0 - }, - "thickness": { - "description": "The thickness of the vein", - "type": "number", - "minimum": 0 - }, - "biome": { - "description": "The biome name", - "type": "string" - }, - "scale": { - "description": "The scale of the biome ridge. Higher values = wider veins & bigger connected cells", - "type": "number", - "minimum": 0 - }, - "noiseMultiplier": { - "description": "Use the distance from cell value to add or remove noise value. (Forces depth or height)", - "type": "number" - }, - "air": { - "description": "If the noise multiplier is below zero, what should the air be filled with?", - "type": "object", - "properties": { - "minHeight": { - "maximum": 256, - "description": "The min thickness of this layer", - "type": "integer", - "minimum": 0 - }, - "terrainZoom": { - "description": "The terrain zoom mostly for zooming in on a wispy palette", - "type": "number", - "minimum": 1.0E-4 - }, - "maxHeight": { - "maximum": 256, - "description": "The max thickness of this layer", - "type": "integer", - "minimum": 1 - }, - "palette": { - "minItems": 1, - "description": "The palette of blocks to be used in this layer", - "type": "array", - "items": {"type": "string"} - }, - "dispersion": { - "description": "The dispersion of materials from the palette", - "type": "string", - "enum": [ - "SCATTER", - "WISPY" - ] - } - } - }, - "type": { - "description": "The type this biome should override (land sea or shore)", - "type": "string", - "enum": [ - "SHORE", - "LAND", - "SEA", - "CAVE", - "ISLAND", - "SKYLAND", - "DEFER" - ] - }, - "shuffle": { - "description": "The shuffle, how 'natural' this looks. Compared to pure polygons", - "type": "number", - "minimum": 0 - }, - "chanceShuffle": { - "description": "The chance shuffle (polygon cell chances)", - "type": "number", - "minimum": 0 - }, - "chanceScale": { - "description": "The chance scale (cell chances)", - "type": "number" - } - }, - "required": [ - "biome", - "type", - "chance" - ] - }, - "irisbiomeparser": { - "description": "Represents a structure placement", - "type": "object", - "properties": { - "tileset": { - "description": "The structure tileset to use", - "type": "string" - }, - "zoom": { - "description": "The structure chance zoom. Higher = bigger cells, further away", - "type": "number", - "minimum": 1.0E-4 - }, - "shuffle": { - "description": "The chance cell shuffle (rougher edges)", - "type": "number", - "minimum": 0 - }, - "ratio": { - "maximum": 1, - "description": "The ratio. Lower values means cells can get closer to other cells. Negative values means make veins of structures", - "type": "number", - "minimum": -1 - }, - "rarity": { - "description": "The rarity for this structure", - "type": "integer", - "minimum": 1 - }, - "height": { - "maximum": 255, - "description": "The height or -1 for surface", - "type": "integer", - "minimum": -1 - } - }, - "required": [ - "tileset", - "zoom", - "rarity" - ] - }, - "irisxmlloader": { - "description": "A spot config", - "type": "object", - "properties": { - "as": { - "description": "What type this spot is (i.e. target SEA but as LAND) like an island. Default matches the target type", - "type": "string", - "enum": [ - "SHORE", - "LAND", - "SEA", - "CAVE", - "ISLAND", - "SKYLAND", - "DEFER" - ] - }, - "biome": { - "description": "The biome to be placed", - "type": "string" - }, - "scale": { - "description": "The scale of splotches", - "type": "number", - "minimum": 0 - }, - "noiseMultiplier": { - "description": "Use the distance from cell value to add or remove noise value. (Forces depth or height)", - "type": "number" - }, - "air": { - "description": "If the noise multiplier is below zero, what should the air be filled with?", - "type": "object", - "properties": { - "minHeight": { - "maximum": 256, - "description": "The min thickness of this layer", - "type": "integer", - "minimum": 0 - }, - "terrainZoom": { - "description": "The terrain zoom mostly for zooming in on a wispy palette", - "type": "number", - "minimum": 1.0E-4 - }, - "maxHeight": { - "maximum": 256, - "description": "The max thickness of this layer", - "type": "integer", - "minimum": 1 - }, - "palette": { - "minItems": 1, - "description": "The palette of blocks to be used in this layer", - "type": "array", - "items": {"type": "string"} - }, - "dispersion": { - "description": "The dispersion of materials from the palette", - "type": "string", - "enum": [ - "SCATTER", - "WISPY" - ] - } - } - }, - "type": { - "description": "Where this spot overrides. Land sea or shore", - "type": "string", - "enum": [ - "SHORE", - "LAND", - "SEA", - "CAVE", - "ISLAND", - "SKYLAND", - "DEFER" - ] - }, - "shuffle": { - "description": "The shuffle or how natural the splotch looks like (anti-polygon)", - "type": "number", - "minimum": 0 - }, - "rarity": { - "description": "Rarity is how often this splotch appears. higher = less often", - "type": "number", - "minimum": 1 - } - }, - "required": [ - "biome", - "type", - "rarity" - ] - }, - "irisspigot": { + "iriseffect": { "description": "An iris effect", "type": "object", "properties": { @@ -4150,7 +3899,258 @@ "chance" ] }, - "iriseyespy": { + "irisstructureplacement": { + "description": "Represents a structure placement", + "type": "object", + "properties": { + "tileset": { + "description": "The structure tileset to use", + "type": "string" + }, + "zoom": { + "description": "The structure chance zoom. Higher = bigger cells, further away", + "type": "number", + "minimum": 1.0E-4 + }, + "shuffle": { + "description": "The chance cell shuffle (rougher edges)", + "type": "number", + "minimum": 0 + }, + "ratio": { + "maximum": 1, + "description": "The ratio. Lower values means cells can get closer to other cells. Negative values means make veins of structures", + "type": "number", + "minimum": -1 + }, + "rarity": { + "description": "The rarity for this structure", + "type": "integer", + "minimum": 1 + }, + "height": { + "maximum": 255, + "description": "The height or -1 for surface", + "type": "integer", + "minimum": -1 + } + }, + "required": [ + "tileset", + "zoom", + "rarity" + ] + }, + "irisregionridge": { + "description": "A ridge config", + "type": "object", + "properties": { + "as": { + "description": "What type this spot is (i.e. target SEA but as LAND) like an island. Default matches the target type", + "type": "string", + "enum": [ + "SHORE", + "LAND", + "SEA", + "CAVE", + "ISLAND", + "SKYLAND", + "DEFER" + ] + }, + "chance": { + "maximum": 1, + "description": "The chance this biome will be placed in a given spot", + "type": "number", + "minimum": 0 + }, + "thickness": { + "description": "The thickness of the vein", + "type": "number", + "minimum": 0 + }, + "biome": { + "description": "The biome name", + "type": "string" + }, + "scale": { + "description": "The scale of the biome ridge. Higher values = wider veins & bigger connected cells", + "type": "number", + "minimum": 0 + }, + "noiseMultiplier": { + "description": "Use the distance from cell value to add or remove noise value. (Forces depth or height)", + "type": "number" + }, + "air": { + "description": "If the noise multiplier is below zero, what should the air be filled with?", + "type": "object", + "properties": { + "minHeight": { + "maximum": 256, + "description": "The min thickness of this layer", + "type": "integer", + "minimum": 0 + }, + "terrainZoom": { + "description": "The terrain zoom mostly for zooming in on a wispy palette", + "type": "number", + "minimum": 1.0E-4 + }, + "maxHeight": { + "maximum": 256, + "description": "The max thickness of this layer", + "type": "integer", + "minimum": 1 + }, + "palette": { + "minItems": 1, + "description": "The palette of blocks to be used in this layer", + "type": "array", + "items": {"type": "string"} + }, + "dispersion": { + "description": "The dispersion of materials from the palette", + "type": "string", + "enum": [ + "SCATTER", + "WISPY" + ] + } + } + }, + "type": { + "description": "The type this biome should override (land sea or shore)", + "type": "string", + "enum": [ + "SHORE", + "LAND", + "SEA", + "CAVE", + "ISLAND", + "SKYLAND", + "DEFER" + ] + }, + "shuffle": { + "description": "The shuffle, how 'natural' this looks. Compared to pure polygons", + "type": "number", + "minimum": 0 + }, + "chanceShuffle": { + "description": "The chance shuffle (polygon cell chances)", + "type": "number", + "minimum": 0 + }, + "chanceScale": { + "description": "The chance scale (cell chances)", + "type": "number" + } + }, + "required": [ + "biome", + "type", + "chance" + ] + }, + "irisregionspot": { + "description": "A spot config", + "type": "object", + "properties": { + "as": { + "description": "What type this spot is (i.e. target SEA but as LAND) like an island. Default matches the target type", + "type": "string", + "enum": [ + "SHORE", + "LAND", + "SEA", + "CAVE", + "ISLAND", + "SKYLAND", + "DEFER" + ] + }, + "biome": { + "description": "The biome to be placed", + "type": "string" + }, + "scale": { + "description": "The scale of splotches", + "type": "number", + "minimum": 0 + }, + "noiseMultiplier": { + "description": "Use the distance from cell value to add or remove noise value. (Forces depth or height)", + "type": "number" + }, + "air": { + "description": "If the noise multiplier is below zero, what should the air be filled with?", + "type": "object", + "properties": { + "minHeight": { + "maximum": 256, + "description": "The min thickness of this layer", + "type": "integer", + "minimum": 0 + }, + "terrainZoom": { + "description": "The terrain zoom mostly for zooming in on a wispy palette", + "type": "number", + "minimum": 1.0E-4 + }, + "maxHeight": { + "maximum": 256, + "description": "The max thickness of this layer", + "type": "integer", + "minimum": 1 + }, + "palette": { + "minItems": 1, + "description": "The palette of blocks to be used in this layer", + "type": "array", + "items": {"type": "string"} + }, + "dispersion": { + "description": "The dispersion of materials from the palette", + "type": "string", + "enum": [ + "SCATTER", + "WISPY" + ] + } + } + }, + "type": { + "description": "Where this spot overrides. Land sea or shore", + "type": "string", + "enum": [ + "SHORE", + "LAND", + "SEA", + "CAVE", + "ISLAND", + "SKYLAND", + "DEFER" + ] + }, + "shuffle": { + "description": "The shuffle or how natural the splotch looks like (anti-polygon)", + "type": "number", + "minimum": 0 + }, + "rarity": { + "description": "Rarity is how often this splotch appears. higher = less often", + "type": "number", + "minimum": 1 + } + }, + "required": [ + "biome", + "type", + "rarity" + ] + }, + "irisdepositgenerator": { "description": "Creates ore & other block deposits underground", "type": "object", "properties": { @@ -4230,7 +4230,7 @@ "minItems": 1, "description": "Spot biomes splotch themselves across this region like lakes", "type": "array", - "items": {"$ref": "#/definitions/irisxmlloader"} + "items": {"$ref": "#/definitions/irisregionspot"} }, "skylandBiomeZoom": { "description": "How large skyland biomes are in this region", @@ -4275,7 +4275,7 @@ "minItems": 1, "description": "Ridge biomes create a vein-like network like rivers through this region", "type": "array", - "items": {"$ref": "#/definitions/irisjsonvalue"} + "items": {"$ref": "#/definitions/irisregionridge"} }, "biomeShuffle": { "description": "The scrambling between biomes", @@ -4291,7 +4291,7 @@ "minItems": 1, "description": "A list of structure tilesets", "type": "array", - "items": {"$ref": "#/definitions/irisbiomeparser"} + "items": {"$ref": "#/definitions/irisstructureplacement"} }, "caveBiomeZoom": { "description": "How large cave biomes are in this region", @@ -4325,7 +4325,7 @@ "minItems": 1, "description": "Define regional deposit generators that add onto the global deposit generators", "type": "array", - "items": {"$ref": "#/definitions/iriseyespy"} + "items": {"$ref": "#/definitions/irisdepositgenerator"} }, "landBiomeZoom": { "description": "How large land biomes are in this region", @@ -4336,7 +4336,7 @@ "minItems": 1, "description": "Effects are ambient effects such as potion effects, random sounds, or even particles around each player. All of these effects are played via packets so two players won't see/hear each others effects.\nDue to performance reasons, effects will play arround the player even if where the effect was played is no longer in the biome the player is in.", "type": "array", - "items": {"$ref": "#/definitions/irisspigot"} + "items": {"$ref": "#/definitions/iriseffect"} }, "name": { "minLength": 2, @@ -4361,7 +4361,7 @@ "seaBiomes", "shoreBiomes" ], - "$id": "http://volmit.com/iris-schema/irisjsonobject.json" + "$id": "http://volmit.com/iris-schema/irisregion.json" }, "fileMatch": ["/regions/*.json"] }, @@ -4369,9 +4369,9 @@ "schema": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Represents a composite generator of noise gens", - "title": "PaperSpigot", + "title": "Generator", "type": "object", - "definitions": {"irisfinder": { + "definitions": {"irisnoisegenerator": { "description": "A noise generator", "type": "object", "properties": { @@ -4400,7 +4400,7 @@ "minItems": 1, "description": "Apply a child noise generator to fracture the input coordinates of this generator", "type": "array", - "items": {"$ref": "#/definitions/irisfinder"} + "items": {"$ref": "#/definitions/irisnoisegenerator"} }, "offsetX": { "description": "Coordinate offset x", @@ -4504,7 +4504,7 @@ "minItems": 1, "description": "Apply a child noise generator to fracture the input coordinates of this generator", "type": "array", - "items": {"$ref": "#/definitions/irisfinder"} + "items": {"$ref": "#/definitions/irisnoisegenerator"} }, "offsetX": { "description": "Coordinate offset x", @@ -4573,7 +4573,7 @@ "minItems": 1, "description": "The list of noise gens this gen contains.", "type": "array", - "items": {"$ref": "#/definitions/irisfinder"} + "items": {"$ref": "#/definitions/irisnoisegenerator"} }, "opacity": { "description": "The opacity, essentially a multiplier on the output.", @@ -4597,7 +4597,7 @@ "interpolationFunction", "interpolationScale" ], - "$id": "http://volmit.com/iris-schema/irispaperspigot.json" + "$id": "http://volmit.com/iris-schema/irisgenerator.json" }, "fileMatch": ["/generators/*.json"] }, @@ -4605,9 +4605,9 @@ "schema": { "$schema": "http://json-schema.org/draft-07/schema#", "description": "Represents a structure in iris.", - "title": "Parser", + "title": "Structure", "type": "object", - "definitions": {"irisbiomeloader": { + "definitions": {"irisstructuretile": { "description": "Represents a structure tile", "type": "object", "properties": { @@ -4693,7 +4693,7 @@ "minItems": 1, "description": "The tiles", "type": "array", - "items": {"$ref": "#/definitions/irisbiomeloader"} + "items": {"$ref": "#/definitions/irisstructuretile"} }, "gridSize": { "maximum": 64, @@ -4730,7 +4730,7 @@ "wallChance", "tiles" ], - "$id": "http://volmit.com/iris-schema/irisparser.json" + "$id": "http://volmit.com/iris-schema/irisstructure.json" }, "fileMatch": ["/structures/*.json"] } diff --git a/willwo/willowbutbigger-1/objects/-o.iob b/willwo/willowbutbigger-1/objects/-o.iob new file mode 100644 index 0000000000000000000000000000000000000000..0e79e5191905482c61c43ecab8b73f2fe7dca404 GIT binary patch literal 160234 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