Skip to content

Latest commit

 

History

History
242 lines (212 loc) · 68.9 KB

File metadata and controls

242 lines (212 loc) · 68.9 KB

Tutorial Section

Where to put the plugin?

If your server is currently running, Stop it.
Download the latest plugin release and drop it in the plugin directory. Afterward start your server back up. The plugin will automatically detect which ChunkGeneration version to use, generate the tiny configuration file and post some infos in your server's console.
To check if the plugin loaded successfully either run the command /plugins ingame or from the console and see if the plugin's name is listed green.

Setup of the bukkit.yml file

Setting up the bukkit.yml file is highly recommended, even tho it is only strictly needed for the default worlds.
Open up the bukkit.yml file from your server directory and go to the end of the file. At the end of the file the following snippet needs to be added for all the worlds we want the plugin to handle generation. Here we add the worlds we want the plugin to generate. Just replace the placeholders worldname_1 and worldname_2 with the actual world names. The list can be extended for however many world you want to use:

worlds:
  worldname_1:
    generator: VoidGen
  worldname_2:
    generator: VoidGen

It is also possible to modify the basic generator with additional parameters. You can use any amount of parameters you want to set in any order. Note that specifying the default value of a parameter is the same as not specifying it at all. Chaining multiple parameters together can be done with commas as can be seen in the examples:

worlds:
  worldname_3:
    generator: VoidGen:{"biome":"crimson_forest"}
  worldname_4:
    generator: VoidGen:{"decoration":true, "structures":true, "mobs":true, "biome":"end_barrens"}

Validating parameters

You need to make sure that your parameters are valid. The plugin will try it's best to understand your json syntax and validate it, but there might be some edge cases that will cause the plugin to not work correctly, and the default parameters will be used instead.
Use this website to validate your json syntax.

Restart

Restart your server for all the changes to take effect. If you configured everything correctly, the generator will work in all newly created chunks.
If you find any bug, have crashed because of the plugin or are still experiencing issues, please report it at my official Discord server.

Parameters

Parameter Definition Values Syntax
biome Sets the biome of all locations in the generated world to the specified value.
Not setting this parameter, using a biome that is not supported by your server's version or using anything besides a biome name will result in the vanilla biome grid for your world seed.
Biomes for the latest version. {"biome":"desert"}
All blocks will be set to the desert biome.
caves Controls the creation of vanilla style caves.
This includes ravines and similar world features. Not setting this parameter is the same as setting it to false. Since this plugin does not generate terrain, without the noise parameter no blocks will generate and therefor no caves.
true / false {"caves":true}
Enables vanilla style caves to generate.
mobs Controls whether you want the server to spawn vanilla mobs or not.
Not setting this parameter is the same as setting it to false.
true / false {"mobs":true}
Enables vanilla mobs to spawn.
structures Controls vanilla structure generation.
Not setting this parameter is the same as setting it to false. Some structures need the decoration parameter to be set to true as well to generate correctly (e.g. strongholds).

WARNING: If you set the biome parameter, only structures that are able to naturally generate in the specified biome can generate (e.g. no structure can generate in THE_VOID biome, ocean monuments can not generate in a PLAIN biome)
true / false {"structures":true}
{"structures":true,"decoration":true}
Enables structures to generate.
decoration Controls the creation of vanilla chunk decorations.
Not setting this parameter is the same as setting it to false. Mostly used in combination with the structures parameter.
true / false {"decoration":true}
{"structures":true,"decoration":true}
Enables decorations to generate.
noise Controls the creation of blocks from noise. Think vanilla stone and deepslate, basically everything between bedrock and the surface.
Not setting this parameter is the same as setting it to false.
true / false {"noise":true}
Enabled noise for blocks to generate.
surface Controls the creation of surface blocks. Think vanilla grass blocks.
Not setting this parameter is the same as setting it to false. The surface can only generate if blocks are present. The easiest methode of doing so is enabling the noise parameter.
true / false {"surface":true}
{"surface":true,"noise":true}
Enables the surface to generate.
bedrock Controls the creation of the vanilla bedrock layer at the bottom of the world.
Not setting this parameter is the same as setting it to false.

WARNING: In versions 1.19.2 and above, this setting has no effect! The bedrock layer is now part of the surface parameter.
true / false {"bedrock":true}
Enables the bedrock layer to generate.
layers Controls the creation of the vanilla style layer.
Not setting this parameter is the same as setting leaving it empty.
Arrays of layers. {"layers":[{"block":"bedrock","height":1},{"block":"dirt","height":2},{"block":"grass_block","height":1}]}
Generates the vanilla superflat world.

Layers

Parameter Definition Values Syntax
block Sets a layer to have this type of material/block.
Not setting this parameter is the same as setting it to AIR.
Warning: It needs to be a valid block!
Materials for the latest version. {"block":"bedrock"}
{"block":"water"}
The material used in this layer.
height Sets the amount of blocks up this layer will have, each layer will be with the block type used above.
Not setting this parameter is the same as setting it to 1.
Value between 1 and 384 (or 256 in older versions). {"height":64}
The height of this layer.
data Sets the block data.
Not setting this parameter is the same as setting the block data to the default value.
Warning: It needs to be valid data!
Available block data. {"data":{"bamboo_leaves":true,"age":1}}
The block data used in this layer.

Examples

Let's generate a superflat world with a plains biome and a bedrock layer and a nether world with a nether waste biome and a 40 block netherrack layer.

worlds:
  worldname_5:
    generator: VoidGen:{"biome":"plains","layers":[{"block":"bedrock","height":1},{"block":"dirt","height":2},{"block":"grass_block","height":1}]}
  worldname_6:
    generator: VoidGen:{"biome":"nether_wastes","layers":[{"block":"bedrock","height":1},{"block":"netherrack","height":40}]}
  worldname_7:
    generator: VoidGen:{"biome":"plains","layers":[{"block":"bedrock","height":1},{"block":"dirt","height":2},{"block":"grass_block","height":1},{"block":"bamboo","height":1,"data":{"bamboo_leaves":"small","age":1}}]}

Json syntax for layers

Order of the layers matters!
The first layer will be the bottom layer and the last layer will be the top layer.

{
  "layers": [
    {
      "block": "bedrock",
      "height": 1
    },
    {
      "block": "dirt",
      "height": 2
    },
    {
      "block": "grass_block",
      "height": 1
    },
    {
      "block": "bamboo",
      "height": 1,
      "data": {
        "bamboo_leaves": "small",
        "age": 1
      }
    }
  ]
}

Block data

The block data represents the state of the block.
You can find which block has which data in the Minecraft Wiki.

Simple values

Example of a simple block data:

{
  "data": {
    "bamboo_leaves": "small",
    "waterlogged": true,
    "facing": "north",
    "age": 1
  }
}
Name Definition Values Syntax
bamboo_leaves The value of the 'leaves' property.
Represents the size of the leaves on the bamboo block.
Used by bamboo.
large / none / small {"bamboo_leaves":"large"}
waterlogged The value of the 'waterlogged' property.
Denotes whether this block has fluid in it.
E.g. stairs, leaves, trap doors, etc.
true / false {"waterlogged":true}
{"waterlogged":false}
switch_face The value of the 'face' property.
The face to which a switch type block is stuck.
E.g. a lever.
ceiling / floor / wall {"switch_face":"ceiling"}
door_hinge The value of the 'hinge' property.
Indicates which hinge this door is attached to and will rotate around when opened.
E.g. a door.
left / right {"door_hinge":"left"}
{"door_hinge":"right"}
in_wall The value of the 'in_wall' property.
Indicates if the fence gate is attached to a wall, and if true
the texture is lowered by a small amount to blend in better.
Used by gates.
true / false {"in_wall":true}
{"in_wall":false}
wall_up The value of the 'up' property.
Denotes whether the well has a center post.
Used by walls.
true / false {"wall_up":true}
{"wall_up":false}
mossy_carpet_bottom The value of the 'bottom' property.
Denotes whether this is a bottom block.
Used by mossy carpets.
true / false {"mossy_carpet_bottom":true}
{"mossy_carpet_bottom":false}
facing The value of the 'facing' property.
Represents the face towards which the block is pointing.
Note that some blocks may not be able to face in all directions!
E.g ladder, hopper, bed, etc.
down
east
east_north_east
east_south_east
north
north_east
north_north_east
north_north_west
north_west
south
south_east
south_south_east
south_south_west
south_west
up
west
west_north_west
west_south_west
{"facing":"north"}
{"facing":"down"}
open The value of the 'open' property.
Denotes whether the block is currently opened.
E.g. door, trapdoor, barrel, etc.
true / false {"open":true}
{"open":false}
power The value of the 'power' property.
Represents the redstone power level currently being emitted or transmitted via the block.
E.g. a redstone wire, sculk sensor, etc.
1, 2, 3... {"power":1}
{"power":2}
{"power":3}
...
attached The value of the 'attached' property.
Denotes whether a tripwire hook or string forms a complete tripwire circuit and is ready to trigger.
E.g. hanging sign, tripwire, etc.
true / false {"attached":true}
{"attached":false}
rotation The value of the 'rotation' property.
Represents the current rotation of the block.
E.g. skull, sign, etc.
down
east
east_north_east
east_south_east
north
north_east
north_north_east
north_north_west
north_west
south
south_east
south_south_east
south_south_west
south_west
up
west
west_north_west
west_south_west
{"rotation":"north"}
{"rotation":"down"}
leaves_persistent The value of the 'persistent' property.
Indicates whether or not leaves will be checked
by the server to see if they are subject to decay or not.
Used by leaves.
true / false {"leaves_persistent":true}
{"leaves_persistent":false}
leaves_distance The value of the 'distance' property.
Denotes how far the block is from a tree and is used in conjunction
with 'persistent' flag to determine if the leaves will decay or not.
Used by leaves.
1, 2, 3... {"leaves_distance":1}
{"leaves_distance":2}
{"leaves_distance":3}
...
axis The value of the 'axis' property.
Represents the axis along whilst this block is oriented.
Note that some blocks such as the portal block may not be able to be placed in all orientations.
E.g. chain, etc.
x / y / z {"axis":"x"}
{"axis":"y"}
{"axis":"z"}
age The value of the 'age' property.
Represents the different growth stages that a crop-like block can go through.
E.g. crops, bamboo, etc.
1, 2, 3... {"age":1}
{"age":2}
{"age":3}
...
inverted The value of the 'inverted' property.
Denotes whether a daylight detector is in the inverted mode, i.e. activates in the absence of light rather than presence.
E.g. daylight sensor, etc.
true / false {"inverted":true}
{"inverted":false}
bed_part The value of the 'part' property.
Denotes which half of the bed corresponds to.
Used by beds.
head / foot {"bed_part":"head"}
{"bed_part":"foot"}
bell_attachement The value of the 'attachment' property.
What the bell is attached to.
Used by bells.
ceiling / double_wall / floor / single_wall {"bell_attachment":"ceiling"}
{"bell_attachment":"double_wall"}
dripleaf_tilt The value of the 'tilt' property.
The tilt of a leaf.
Used by big dripleafs.
full / none / partial / unstable {"dripleaf_tilt":"full"}
{"dripleaf_tilt":"unstable"}
bisected_half The value of the 'half' property.
The half of a vertically bisected block.
E.g. doors, pitcher plant, stairs, trap doors, etc.
top / bottom {"bisected_half":"top"}
{"bisected_half":"bottom"}
bubble_drag The value of the 'drag' property.
Indicates whether a force will be applied on entities moving through the block.
Used by bubble columns.
true / false {"bubble_drag":true}
{"bubble_drag":false}
cake_bites The value of the 'bites' property.
Represents the amount of bites which have been taken from this slice of cake.
Used by cakes.
1, 2, 3... {"cake_bites":1}
{"cake_bites":2}
{"cake_bites":3}
...
signal_fire The value of the 'signal_fire' property.
Denotes whether the fire is extra smokey due to having a hay bale placed beneath it.
Used by camp fires.
true / false {"signal_fire":true}
{"signal_fire":false}
candles The value of the 'candles' property.
Represents the number of candles which are present.
Used by candles.
1, 2, 3... {"candles":1}
{"candles":2}
{"candles":3}
...
lit The value of the 'lit' property.
Denotes whether the block is currently lit - that is not burned out.
E.g. redstone torch, furnace, etc.
true / false {"lit":true}
{"lit":false}
berries The value of the 'berries' property.
Indicates whether the block has berries.
Used by cave vines.
true / false {"berries":true}
{"berries":false}
chest_type The value of the 'type' property.
Represents which part of a double chest this block is, or if it is a single chest.
Used by chests.
left / right / single {"chest_type":"right"}
{"chest_type":"single"}
conditional The value of the 'conditional' property.
Denotes whether this command block is conditional or not.
Used by command block.
true / false {"conditional":true}
{"conditional":false}
comparator_mode The value of the 'mode' property.
The mode in which a comparator will operate in.
Used by comparators.
compare / substract {"comparator_mode":"compare"}
{"comparator_mode":"compare"}
jigsaw_orientation The value of the 'orientation' property.
The directions the Jigsaw can be oriented.
Used by jigsaws.
down_east
down_north
down_south
down_west
east_up
north_up
south_up
up_east
up_north
up_south
up_west
west_up
{"jigsaw_orientation":"down_east"}
{"jigsaw_orientation":"east_up"}
crafter_orientation The value of the 'orientation' property.
The directions the Crafter can be oriented.
Used by crafters.
down_east
down_north
down_south
down_west
east_up
north_up
south_up
up_east
up_north
up_south
up_west
west_up
{"crafter_orientation":"down_east"}
{"crafter_orientation":"east_up"}
crafter_triggered The value of the 'triggered' property.
Indicates whether or not the dispenser is currently activated.
Used by crafters.
true / false {"crafter_triggered":true}
{"crafter_triggered":false}
crafter_crafting The value of the 'crafting' property.
Indicates whether crafter's mouth is open and top is glowing.
Used by crafters.
true / false {"crafter_crafting":true}
{"crafter_crafting":false}
ender_eye The value of the 'eye' property.
Denotes whether an end portal frame has been activated by having an eye of ender placed in it.
Used by end portal frames.
true / false {"ender_eye":true}
{"ender_eye":false}
moisture The value of the 'moisture' property.
Indicates how close it is to a water source.
Used by farmlands.
1, 2, 3... {"moisture":1}
{"moisture":2}
{"moisture":3}
...
hanging The value of the 'hanging' property.
Denotes whether the lantern is hanging from a block.
Used by lanterns.
true / false {"hanging":true}
{"hanging":false}
hatch The value of the 'hatch' property.
The number of entities which may hatch from these eggs.
Used by turtle eggs.
1, 2, 3... {"hatch":1}
{"hatch":2}
{"hatch":3}
...
hopper_enabled The value of the 'enabled' property.
Indicates whether or not the hopper is currently activated.
Used by hoppers.
true / false {"hopper_enabled":true}
{"hopper_enabled":false}
level The value of the 'level' property.
Represents the amount of fluid contained within this block, either by itself or inside a cauldron.
E.g. water blocks, lava blocks, cauldrons, etc.
1, 2, 3... {"level":1}
{"level":2}
{"level":3}
...
instrument The value of the 'instrument' property.
The type of sound made when the note block is activated.
Used by note blocks.
banjo
bass_drum
bass_guitar
bell
bit
cow_bell
creeper
didgeridoo
dragon
flute
guitar
iron_xylophone
piano
piglin
skeleton
snare_drum
sticks
wither_skeleton
xylophone
zombie
{"instrument":"bell"}
{"instrument":"flute"}
note The value of the 'note' property.
Represents the specified tuned pitch that the instrument will be played in.
Used by note blocks.
1, 2, 3... {"note":1}
{"note":2}
{"note":3}
...
piston_extended The value of the 'extended' property.
Denotes whether the piston head is currently extended or not.
Used by pistons.
true / false {"piston_extended":true}
{"piston_extended":false}
piston_type The value of the 'type' property.
Different piston variants.
Used by (technical) pistons.
normal / sticky {"piston_type":"normal"}
{"piston_type":"sticky"}
dripstone_thickness The value of the 'thickness' property.
Represents the dripstone thickness.
Used by pointed dripstones.
base
frustum
middle
tip
tip_merge
{"dripstone_thickness":"frustum"}
{"dripstone_thickness":"tip_merge"}
dripstone_vertical_direction The value of the 'vertical_direction' property.
Represents the dripstone orientation.
Used by pointed dripstones.
down / up {"dripstone_vertical_direction":"up"}
{"dripstone_vertical_direction":"down"}
rail_shape The value of the 'shape' property.
The different types of shapes a rail block can occupy.
E.g. rails, redstone rails, etc.
ascending_east
ascending_north
ascending_south
ascending_west
east_west
north_east
north_south
north_west
south_east
south_west
{"rail_shape":"north_south"}
{"rail_shape":"ascending_west"}
repeater_delay The value of the 'delay' property.
Is the propagation delay of a repeater, i.e. how many ticks before
it will be activated from a current change and propagate it to the next block.
Used by repeaters.
1, 2, 3... {"repeater_delay":1}
{"repeater_delay":2}
{"repeater_delay":3}
...
repeater_locked The value of the 'locked' property.
Denotes whether the repeater is in the locked state or not.
Used by repeaters.
true / false {"repeater_locked":true}
{"repeater_locked":false}
charges The value of the 'charges' property.
Represents the amount of times the anchor may still be used.
Used by respawn anchors.
1, 2, 3... {"charges":1}
{"charges":2}
{"charges":3}
...
scaffolding_bottom The value of the 'bottom' property.
Indicates whether the scaffolding is floating or not.
Used by scaffoldings.
true / false {"scaffolding_bottom":true}
{"scaffolding_bottom":false}
scaffolding_distance The value of the 'distance' property.
Indicates the distance from a scaffolding block placed above a 'bottom' scaffold.
Used by scaffoldings.
1, 2, 3... {"scaffolding_distance":1}
{"scaffolding_distance":2}
{"scaffolding_distance":3}
...
sculk_phase The value of the 'sculk_sensor_phase' property.
Indicates the current operational phase of the sensor.
E.g. sculk sensor, calibrated sculk sensor, etc.
active / cooldown / inactive {"sculk_phase":active}
sculk_shrieker_can_summon The value of the 'can_summon' property.
Indicates whether the sculk shrieker can summon the warden.
Used by sculk shriekers.
true / false {"sculk_shrieker_can_summon":true}
{"sculk_shrieker_can_summon":false}
sculk_shrieker_shrieking The value of the 'shrieking' property.
Indicated whether the sculk shrieker is shrieking or not.
Used by sculk shriekers.
true / false {"sculk_shrieker_shrieking":true}
{"sculk_shrieker_shrieking":false}
sculk_catalyst_bloom The value of the 'bloom' property.
Indicates whether the sculk catalyst is actively spreading the sculk or not.
Used by sculk catalysts.
true / false {"sculk_catalyst_bloom":true}
{"sculk_catalyst_bloom":false}
pickles The value of the 'pickles' property.
Indicates the number of pickles in the block.
Used by sea pickles.
1, 2, 3... {"pickles":1}
{"pickles":2}
{"pickles":3}
...
slab_type The value of the 'type' property.
The type of the slab.
Used by slabs.
bottom / double / top {"slab_type":"bottom"}
{"slab_type":"double"}
{"slab_type":"top"}
snow_layers The value of the 'layers' property.
Represents the amount of layers of snow which are present in the block.
Used by snow layers.
1, 2, 3... {"snow_layers":1}
{"snow_layers":2}
{"snow_layers":3}
...
snowy The value of the 'snowy' property.
Denotes whether the block has a snow covered side and top texture (normally because the block above is snow).
E.g. grass block.
true / false {"snowy":true}
{"snowy":false}
stairs_shape The value of the 'shape' property.
The shape of a stair block - used for constructing corners.
Used by stairs.
inner_left
inner_right
outer_left
outer_right
straight
{"stairs_shape":"straight"}
{"stairs_shape":"inner_left"}
structure_block_mode The value of the 'mode' property.
Operating mode of a structure block.
Used by structure blocks.
corner
data
load
save
{"structure_block_mode":"corner"}
{"structure_block_mode":"save"}
trial_spawner_state The value of the 'trial_spawner_state' property.
Indicates the current operational phase of the spawner.
Used by trail spawners.
active
cooldown
ejecting_reward
inactive
waiting_for_players
waiting_for_reward_ejection
{"trial_spawner_state":"active"}
{"trial_spawner_state":"waiting_for_reward_ejection"}
trial_spawner_ominous The value of the 'ominous' property.
Indicates if the block has ominous effects.
Used by trial spawners.
true / false {"trial_spawner_ominous":true}
{"trial_spawner_ominous":false}
vault_state The value of the 'vault_state' property.
Indicates the current operational phase of the vault.
Used by vaults.
active
ejecting
inactive
unlocking
{"vault_state":"active"}
{"vault_state":"unlocking"}
vault_ominous The value of the 'ominous' property.
Indicates if the block has ominous effects.
Used by vaults.
true / false {"vault_ominous":true}
{"vault_ominous":false}
tripwire_disarmed The value of the 'disarmed' property.
Denotes that the tripwire was broken with shears and will not subsequently produce a current when destroyed.
Used by tripwires.
true / false {"tripwire_disarmed":true}
{"tripwire_disarmed":false}
turtle_eggs The value of the 'eggs' property.
Is the number of eggs which appear in this block.
Used by turtle eggs.
1, 2, 3... {"turtle_eggs":1}
{"turtle_eggs":2}
{"turtle_eggs":3}
...
dusted The value of the 'dusted' property.
Represents how far uncovered by brush the block is.
E.g. suspicious gravel, suspicious sand, etc.
1, 2, 3... {"dusted":1}
{"dusted":2}
{"dusted":3}
...
flower_amount The value of the 'flower_amount' property.
Represents the number of petals.
Used by flower beds.
1, 2, 3... {"flower_amount":1}
{"flower_amount":2}
{"flower_amount":3}
...
segment_amount The value of the 'segment_amount' property.
Represents the number of segments.
Used by leaf litter.
1, 2, 3... {"segment_amount":1}
{"segment_amount":2}
{"segment_amount":3}
...
creaking_heart_state The value of the 'creaking_heart_state' property.
Indicates the current operational phase of the block.
Used by creaking hearts.
awake / dormant / uprooted {"creaking_heart_state":"awake"}
{"creaking_heart_state":"uprooted"}
creaking_heart_natural The value of the 'natural' property.
Represents whether this is a naturally generated block.
Used by creaking hearts.
true / false {"creaking_heart_natural":true}
{"creaking_heart_natural":false}
creaking_heart_active The value of the 'creaking_heart_state' property.
Indicates the current operational phase of the block.
Used by creaking hearts.

Warning: Deprecated value, used by old versions.
true / false {"creaking_heart_active":true}
{"creaking_heart_active":false}
crop_state The value of the 'crop_state' property.
E.g. all crops.

Warning: Deprecated value, used by old versions.
germinated
medium
ripe
seeded
small
tall
very_small
very_tall
{"crop_state":"germinated"}
{"crop_state":"tall"}
color The value of the 'color' property.
E.g. wool, beds, etc.

Warning: Deprecated value, used by old versions.
black
blue
brown
cyan
gray
green
light_blue
light_gray
lime
magenta
orange
pink
purple
red
white
yellow
{"color":"red"}
{"color":"black"}

Complex values

Complex values are mapped key-value pairs. Example of a complex block data:

{
  "data": {
    "wall_up": true,
    "wall_heights": {
      "east": "low",
      "north": "none",
      "south": "tall"
    }
  }
}
Name Definition Keys Values Syntax
wall_heights The different heights faces of a wall may have.
Used by walls.

Key: the face of the wall.
Value: the height of the face of the wall.
east
north
south
west
low
none
tall
{"wall_heights":{"east":"low","north":"none","south":"tall"}}
{
"wall_heights":{
"east":"low",
"north":"none",
"south":"tall"
}
}
mossy_carpet_heights The different heights faces of a mossy carpet may have.
Used by mossy carpets.

Key: the face of the mossy carpet.
Value: the height of the face of the mossy carpet.
east
north
south
west
low
none
tall
{"mossy_carpet_heights":{"east":"low","north":"none","south":"tall"}}
{
"mossy_carpet_heights":{
"east":"low",
"north":"none",
"south":"tall"
}
}
faces Used to set which faces of the block textures are displayed on
E.g. fences, fire, glass, glow lichen, resin clump, etc.

Key: the face of the block.
Value: if the face is enabled.
east
north
south
up
west
down
true / false {"faces":{"east":true,"north":false,"south":true,"down":true}}
{
"faces":{
"east":true,
"north":false,
"south":true,
"down":true
}
}
redstone_connections The way in which a redstone wire can connect to an adjacent block face.
Used by redstone.

Key: the face of the connection.
Value: the connection type.
east
north
south
west
none
side
up
{"redstone_connections":{"east":"none","north":"side"}}
{
"redstone_connections":{
"east":"none",
"north":"side"
}
}