- Step 0 - Where to put the plugin?
- Step 1 - Setup of the bukkit.yml file
- Step 2 - Setup parameters
- Step 3 - Validating json parameters
- Step 4 - Restart
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.
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"}
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 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.
| 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. |
| 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. |
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}}]}
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
}
}
]
}The block data represents the state of the block.
You can find which block has which data in the Minecraft Wiki.
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. |
downeasteast_north_easteast_south_eastnorthnorth_eastnorth_north_eastnorth_north_westnorth_westsouthsouth_eastsouth_south_eastsouth_south_westsouth_westupwestwest_north_westwest_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. |
downeasteast_north_easteast_south_eastnorthnorth_eastnorth_north_eastnorth_north_westnorth_westsouthsouth_eastsouth_south_eastsouth_south_westsouth_westupwestwest_north_westwest_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 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. |
eastnorthsouthwest |
low none 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. |
eastnorthsouthwest |
low none 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. |
eastnorthsouthupwestdown |
true / false |
{"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. |
eastnorthsouthwest |
nonesideup |
{"redstone_connections":{"east":"none","north":"side"}} { |