diff --git a/404.html b/404.html index 99d07e1f..8284dc25 100644 --- a/404.html +++ b/404.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } - + diff --git a/advancement/index.html b/advancement/index.html index f8af80db..30efa6d0 100644 --- a/advancement/index.html +++ b/advancement/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } - + diff --git a/assets/blockstate/index.html b/assets/blockstate/index.html index 4dcdbf56..4dca3b05 100644 --- a/assets/blockstate/index.html +++ b/assets/blockstate/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } - + diff --git a/assets/en.a3c526c1.js b/assets/en.a3c526c1.js deleted file mode 100644 index e830ad89..00000000 --- a/assets/en.a3c526c1.js +++ /dev/null @@ -1,2 +0,0 @@ -var e=JSON.parse('{"advancement.criteria":"Criteria","advancement.display":"Display","advancement.display.announce_to_chat":"Announce to chat","advancement.display.background":"Background","advancement.display.description":"Description","advancement.display.frame":"Frame","advancement.display.frame.challenge":"Challenge","advancement.display.frame.goal":"Goal","advancement.display.frame.task":"Task","advancement.display.help":"If present, advancement will be visible in the advancement tabs.","advancement.display.hidden":"Hidden","advancement.display.icon":"Icon","advancement.display.icon.item":"Icon item","advancement.display.icon.nbt":"Icon NBT","advancement.display.show_toast":"Show toast","advancement.display.title":"Title","advancement.parent":"Parent advancement","advancement.rewards":"Rewards","advancement.rewards.experience":"Experience","advancement.rewards.function":"Function","advancement.rewards.loot":"Loot tables","advancement.rewards.recipes":"Recipes","advancement_trigger.bee_nest_destroyed":"Bee nest destroyed","advancement_trigger.bred_animals":"Bred animals","advancement_trigger.brewed_potion":"Brewed potion","advancement_trigger.changed_dimension":"Changed dimension","advancement_trigger.channeled_lightning":"Channeled lightning","advancement_trigger.construct_beacon":"Construct beacon","advancement_trigger.consume_item":"Consume item","advancement_trigger.cured_zombie_villager":"Cured zombie villager","advancement_trigger.effects_changed":"Effects changed","advancement_trigger.enchanted_item":"Enchanted item","advancement_trigger.enter_block":"Enter block","advancement_trigger.entity_hurt_player":"Entity hurt player","advancement_trigger.entity_killed_player":"Entity killed player","advancement_trigger.fall_from_height":"Fall from height","advancement_trigger.filled_bucket":"Filled bucket","advancement_trigger.fishing_rod_hooked":"Fishing rod hooked","advancement_trigger.hero_of_the_village":"Hero of the village","advancement_trigger.impossible":"Impossible","advancement_trigger.inventory_changed":"Inventory changed","advancement_trigger.item_durability_changed":"Item durability changed","advancement_trigger.item_used_on_block":"Item used on block","advancement_trigger.killed_by_crossbow":"Killed by crossbow","advancement_trigger.levitation":"Levitation","advancement_trigger.location":"Location","advancement_trigger.nether_travel":"Nether travel","advancement_trigger.placed_block":"Placed block","advancement_trigger.player_generates_container_loot":"Player generates container loot","advancement_trigger.player_hurt_entity":"Player hurt entity","advancement_trigger.player_killed_entity":"Player killed entity","advancement_trigger.recipe_unlocked":"Recipe unlocked","advancement_trigger.ride_entity_in_lava":"Ride entity in lava","advancement_trigger.safely_harvest_honey":"Safely harvest honey","advancement_trigger.shot_crossbow":"Shot crossbow","advancement_trigger.slept_in_bed":"Slept in bed","advancement_trigger.slide_down_block":"Slide down block","advancement_trigger.summoned_entity":"Summoned entity","advancement_trigger.tame_animal":"Tame animal","advancement_trigger.target_hit":"Target hit","advancement_trigger.thrown_item_picked_up_by_entity":"Thrown item picked up by entity","advancement_trigger.tick":"Tick","advancement_trigger.used_ender_eye":"Used ender eye","advancement_trigger.used_totem":"Used totem","advancement_trigger.villager_trade":"Villager trade","advancement_trigger.voluntary_exile":"Voluntary exile","attribute.generic_armor":"Armor","attribute.generic_armor_toughness":"Armor toughness","attribute.generic_attack_damage":"Attack damage","attribute.generic_attack_knockback":"Attack knockback","attribute.generic_attack_speed":"Attack speed","attribute.generic_flying_speed":"Flying speed","attribute.generic_follow_range":"Follow range","attribute.generic_knockback_resistance":"Knockback resistance","attribute.generic_luck":"Luck","attribute.generic_max_health":"Max health","attribute.generic_movement_speed":"Movement speed","attribute.horse.jump_strength":"Jump strength","attribute.zombie.spawn_reinforcements":"Spawn reinforcements","attribute_modifier.amount":"Amount","attribute_modifier.attribute":"Attribute","attribute_modifier.name":"Name","attribute_modifier.operation":"Operation","attribute_modifier.operation.addition":"Addition","attribute_modifier.operation.multiply_base":"Multiply base","attribute_modifier.operation.multiply_total":"Multiply total","attribute_modifier.slot":"Slots","attribute_modifier.slot.list":"Multiple","attribute_modifier.slot.string":"Single","axis.x":"X","axis.y":"Y","axis.z":"Z","badge.experimental":"Experimental","badge.unstable":"Unstable","biome.carvers":"Carvers","biome.carvers.air":"Air","biome.carvers.liquid":"Liquid","biome.category":"Category","biome.creature_spawn_probability":"Creature spawn probability","biome.depth":"Depth","biome.depth.help":"Raises or lowers the terrain. Positive values are considered land and negative are oceans.","biome.downfall":"Downfall","biome.effects":"Effects","biome.effects.additions_sound":"Additions sound","biome.effects.additions_sound.sound":"Sound","biome.effects.additions_sound.tick_chance":"Tick chance","biome.effects.ambient_sound":"Ambient sound","biome.effects.fog_color":"Fog color","biome.effects.foliage_color":"Foliage color","biome.effects.grass_color":"Grass color","biome.effects.grass_color_modifier":"Grass color modifier","biome.effects.grass_color_modifier.dark_forest":"Dark forest","biome.effects.grass_color_modifier.none":"None","biome.effects.grass_color_modifier.swamp":"Swamp","biome.effects.mood_sound":"Mood sound","biome.effects.mood_sound.block_search_extent":"Block search extent","biome.effects.mood_sound.offset":"Offset","biome.effects.mood_sound.sound":"Sound","biome.effects.mood_sound.tick_delay":"Tick delay","biome.effects.music":"Music","biome.effects.music.max_delay":"Max delay","biome.effects.music.min_delay":"Min delay","biome.effects.music.replace_current_music":"Replace current music","biome.effects.music.sound":"Sound","biome.effects.particle":"Particle","biome.effects.particle.options":"Options","biome.effects.particle.options.type":"Particle type","biome.effects.particle.probability":"Probability","biome.effects.sky_color":"Sky color","biome.effects.water_color":"Water color","biome.effects.water_fog_color":"Water fog color","biome.features":"Placed features","biome.features.entry":"Step %0%","biome.features.entry.entry":"Feature","biome.player_spawn_friendly":"Player spawn friendly","biome.player_spawn_friendly.help":"If true, the world spawn will be preferred in this biome.","biome.precipitation":"Precipitation","biome.precipitation.none":"None","biome.precipitation.rain":"Rain","biome.precipitation.snow":"Snow","biome.scale":"Scale","biome.scale.help":"Vertically stretches the terrain. Lower values produce flatter terrain.","biome.spawn_costs":"Spawn costs","biome.spawn_costs.charge":"Charge","biome.spawn_costs.energy_budget":"Energy budget","biome.spawners":"Spawners","biome.spawners.ambient":"Ambient","biome.spawners.creature":"Creature","biome.spawners.entry":"Spawn","biome.spawners.entry.maxCount":"Max count","biome.spawners.entry.minCount":"Min count","biome.spawners.entry.type":"Type","biome.spawners.entry.weight":"Weight","biome.spawners.misc":"Miscellaneous","biome.spawners.monster":"Monster","biome.spawners.water_ambient":"Water ambient","biome.spawners.water_creature":"Water creature","biome.starts":"Structure starts","biome.starts.entry":"Structure","biome.starts.help":"List of configured structure features.","biome.surface_builder":"Surface builder","biome.temperature":"Temperature","biome.temperature_modifier":"Temperature modifier","biome.temperature_modifier.frozen":"Frozen","biome.temperature_modifier.none":"None","block.block":"Block ID","block.nbt":"NBT","block.state":"Block state","block.tag":"Block tag","block_definition.multipart":"Multipart","block_definition.variants":"Variants","block_definition.multipart.entry":"Part","block_definition.multipart.entry.when":"When","block_definition.multipart.entry.apply":"Apply","block_placer.column_placer.extra_size":"Extra size","block_placer.column_placer.min_size":"Min size","block_placer.type":"Type","block_predicate.type":"Type","block_predicate.all_of.predicates":"Predicates","block_predicate.any_of.predicates":"Predicates","block_predicate.inside_world_bounds.offset":"Offset","block_predicate.matching_blocks.offset":"Offset","block_predicate.matching_blocks.blocks":"Blocks","block_predicate.matching_blocks.blocks.entry":"Block","block_predicate.matching_fluids.offset":"Offset","block_predicate.matching_fluids.fluids":"Fluids","block_predicate.matching_fluids.fluids.entry":"Fluid","block_predicate.would_survive.offset":"Offset","block_predicate.would_survive.state":"State","block_predicate_type.all_of":"All of","block_predicate_type.any_of":"Any of","block_predicate_type.inside_world_bounds":"Inside world bounds","block_predicate_type.matching_blocks":"Matching blocks","block_predicate_type.matching_fluids":"Matching fluids","block_predicate_type.not":"Not","block_predicate_type.replaceable":"Replaceable","block_predicate_type.solid":"Solid","block_predicate_type.true":"True","block_predicate_type.would_survive":"Would survive","block_predicate.not.predicate":"Predicate","block_state.Name":"Name","block_state.Properties":"Properties","block_state_provider.dual_noise_provider.seed":"Seed","block_state_provider.dual_noise_provider.noise":"Noise","block_state_provider.dual_noise_provider.scale":"Scale","block_state_provider.dual_noise_provider.variety":"Variety","block_state_provider.dual_noise_provider.slow_noise":"Slow noise","block_state_provider.dual_noise_provider.slow_scale":"Slow scale","block_state_provider.dual_noise_provider.states":"States","block_state_provider.noise_threshold_provider.seed":"Seed","block_state_provider.noise_threshold_provider.noise":"Noise","block_state_provider.noise_threshold_provider.scale":"Scale","block_state_provider.noise_threshold_provider.threshold":"Threshold","block_state_provider.noise_threshold_provider.high_chance":"High chance","block_state_provider.noise_threshold_provider.default_state":"Default state","block_state_provider.noise_threshold_provider.low_states":"Low states","block_state_provider.noise_threshold_provider.high_states":"High states","block_state_provider.noise_provider.seed":"Seed","block_state_provider.noise_provider.noise":"Noise","block_state_provider.noise_provider.scale":"Scale","block_state_provider.noise_provider.states":"States","block_state_provider.randomized_int_state_provider.property":"Property","block_state_provider.randomized_int_state_provider.values":"Values","block_state_provider.randomized_int_state_provider.source":"Source","block_state_provider.rotated_block_provider.state":"State","block_state_provider.simple_state_provider.state":"State","block_state_provider.type":"Type","block_state_provider.weighted_state_provider.entries":"Entries","block_state_provider.weighted_state_provider.entries.entry.data":"State","block_state_provider.weighted_state_provider.entries.entry.weight":"Weight","carver.config":"Config","carver.config.aquifers_enabled":"Aquifers enabled","carver.config.canyon.bottom_inclusive":"Bottom inclusive","carver.config.canyon.top_inclusive":"Top inclusive","carver.config.canyon.vertical_rotation":"Vertical rotation","carver.config.canyon.shape":"Shape","carver.config.canyon.shape.distance_factor":"Distance factor","carver.config.canyon.shape.thickness":"Thickness","carver.config.canyon.shape.width_smoothness":"Width smoothness","carver.config.canyon.shape.horizontal_radius_factor":"Horizontal radius factor","carver.config.canyon.shape.vertical_radius_default_factor":"Vertical radius default factor","carver.config.canyon.shape.vertical_radius_center_factor":"Vertical radius center factor","carver.config.cave.horizontal_radius_multiplier":"Horizontal radius multiplier","carver.config.cave.vertical_radius_multiplier":"Vertical radius multiplier","carver.config.cave.floor_level":"Floor level","carver.config.debug_settings":"Debug settings","carver.config.debug_settings.debug_mode":"Debug mode","carver.config.debug_settings.air_state":"Air state","carver.config.debug_settings.water_state":"Water state","carver.config.debug_settings.lava_state":"Lava state","carver.config.debug_settings.barrier_state":"Barrier state","carver.config.lava_level":"Lava level","carver.config.probability":"Probability","carver.config.y":"Y","carver.config.yScale":"Y scale","carver.type":"Type","cave_surface.ceiling":"Ceiling","cave_surface.floor":"Floor","children":"Children","children.entry":"Entry","condition.alternative.terms":"Terms","condition.block_state_property.block":"Block","condition.block_state_property.properties":"Block state","condition.condition":"Condition","condition.damage_source":"Damage source","condition.entity_properties.entity":"Entity","condition.entity_scores.entity":"Entity","condition.entity_scores.scores":"Scores","condition.entry":"Predicate","condition.inverted.term":"Term","condition.item":"Item","condition.killed_by_player.inverse":"Inverted","condition.list":"Multiple","condition.location":"Location","condition.location_check.offsetX":"X offset","condition.location_check.offsetY":"Y offset","condition.location_check.offsetZ":"Z offset","condition.object":"Single","condition.random_chance.chance":"Chance","condition.random_chance_with_looting.chance":"Chance","condition.random_chance_with_looting.looting_multiplier":"Looting multiplier","condition.reference.name":"Predicate name","condition.table_bonus.chances":"Chances","condition.table_bonus.chances.entry":"Chance","condition.table_bonus.enchantment":"Enchantment","condition.time_check.period":"Period","condition.time_check.period.help":"If present, time will be modulo-divided by this value. For example, if set to 24000, value will operate on a time period of days.","condition.time_check.value":"Value","condition.value_check.range":"Range","condition.value_check.value":"Value","condition.weather_check.raining":"Raining","condition.weather_check.thundering":"Thundering","conditions":"Conditions","conditions.entry":"Condition","conditions.list":"Conditions","conditions.object":"Legacy","copy_source.block_entity":"Block entity","copy_source.direct_killer":"Direct killer","copy_source.killer":"Killer","copy_source.killer_player":"Killer player","copy_source.this":"This","criterion.bee_nest_destroyed.block":"Block","criterion.bee_nest_destroyed.num_bees_inside":"Number of bees inside","criterion.bred_animals.child":"Child","criterion.bred_animals.parent":"Parent","criterion.bred_animals.partner":"Partner","criterion.brewed_potion.potion":"Potion","criterion.changed_dimension.from":"From","criterion.changed_dimension.to":"To","criterion.channeled_lightning.victims":"Victims","criterion.channeled_lightning.victims.entry":"Entity","criterion.conditions":"Conditions","criterion.construct_beacon.beacon_level":"Pyramid level","criterion.consume_item.item":"Item","criterion.cured_zombie_villager.villager":"Villager","criterion.cured_zombie_villager.zombie":"Zombie","criterion.effects_changed.effects":"Effects","criterion.enchanted_item.item":"Item","criterion.enchanted_item.levels":"XP level","criterion.enter_block.block":"Block","criterion.enter_block.state":"States","criterion.entity_hurt_player.damage":"Damage","criterion.entity_killed_player.entity":"Source entity","criterion.entity_killed_player.killing_blow":"Killing blow","criterion.fall_from_height.distance":"Distance","criterion.fall_from_height.start_position":"Start position","criterion.filled_bucket.item":"Item","criterion.fishing_rod_hooked.entity":"Pulled entity","criterion.fishing_rod_hooked.item":"Item","criterion.hero_of_the_village.location":"Location","criterion.inventory_changed.items":"Items","criterion.inventory_changed.items.entry":"Item","criterion.inventory_changed.slots":"Slots","criterion.inventory_changed.slots.empty":"Slots empty","criterion.inventory_changed.slots.full":"Slots full","criterion.inventory_changed.slots.occupied":"Slots occupied","criterion.item_durability_changed.delta":"Delta","criterion.item_durability_changed.durability":"Durability","criterion.item_durability_changed.item":"Item","criterion.item_used_on_block.item":"Item","criterion.item_used_on_block.location":"Location","criterion.killed_by_crossbow.unique_entity_types":"Amount of unique entity types","criterion.killed_by_crossbow.victims":"Victims","criterion.killed_by_crossbow.victims.entry":"Entity","criterion.levitation.distance":"Distance","criterion.levitation.duration":"Duration","criterion.location.location":"Location","criterion.nether_travel.distance":"Distance","criterion.nether_travel.entered":"Entered location","criterion.nether_travel.exited":"Exited location","criterion.nether_travel.start_position":"Start position","criterion.placed_block.block":"Block","criterion.placed_block.item":"Item","criterion.placed_block.location":"Location","criterion.placed_block.state":"States","criterion.player":"Player","criterion.player_generates_container_loot.loot_table":"Loot table","criterion.player_hurt_entity.damage":"Damage","criterion.player_hurt_entity.entity":"Victim entity","criterion.player_killed_entity.entity":"Victim entity","criterion.player_killed_entity.killing_blow":"Killing blow","criterion.recipe_unlocked.recipe":"Recipe","criterion.ride_entity_in_lava.distance":"Distance","criterion.ride_entity_in_lava.start_position":"Start position","criterion.rod":"Rod","criterion.safely_harvest_honey.block":"Block","criterion.safely_harvest_honey.item":"Item","criterion.shot_crossbow.item":"Item","criterion.slept_in_bed.location":"Location","criterion.slide_down_block.block":"Block","criterion.summoned_entity.entity":"Entity","criterion.tame_animal.entity":"Animal","criterion.target_hit.projectile":"Projectile","criterion.target_hit.shooter":"Shooter","criterion.target_hit.signal_strength":"Signal strength","criterion.thrown_item_picked_up_by_entity.entity":"Entity","criterion.thrown_item_picked_up_by_entity.item":"Item","criterion.trigger":"Trigger","criterion.used_ender_eye.distance":"Distance","criterion.used_totem.item":"Totem item","criterion.villager_trade.item":"Purchased item","criterion.villager_trade.villager":"Villager","criterion.voluntary_exile.location":"Location","damage.blocked":"Blocked","damage.dealt":"Damage dealt","damage.source_entity":"Source entity","damage.taken":"Damage taken","damage.type":"Damage type","damage_source.bypasses_armor":"Bypass armor","damage_source.bypasses_invulnerability":"Void","damage_source.bypasses_magic":"Starvation","damage_source.direct_entity":"Direct entity","damage_source.is_explosion":"Explosion","damage_source.is_fire":"Fire","damage_source.is_lightning":"Lightning","damage_source.is_magic":"Magic","damage_source.is_projectile":"Projectile","damage_source.source_entity":"Source entity","decorator.block_predicate_filter.predicate":"Predicate","decorator.carving_mask.step":"Step","decorator.cave_surface.surface":"Surface","decorator.cave_surface.floor_to_ceiling_search_range":"Search range","decorator.cave_surface.floor_to_ceiling_search_range.help":"Floor to ceiling search range.","decorator.cave_surface.allow_water":"Allow water","decorator.chance.chance":"Chance","decorator.config":"Config","decorator.count.count":"Count","decorator.count_extra.count":"Count","decorator.count_extra.extra_chance":"Extra chance","decorator.count_extra.extra_count":"Extra count","decorator.count_multilayer.count":"Count","decorator.count_on_every_layer.count":"Count","decorator.count_noise.above_noise":"Above noise","decorator.count_noise.below_noise":"Below noise","decorator.count_noise.noise_level":"Noise level","decorator.noise_threshold_count.above_noise":"Above noise","decorator.noise_threshold_count.below_noise":"Below noise","decorator.noise_threshold_count.noise_level":"Noise level","decorator.count_noise_biased.noise_factor":"Noise factor","decorator.count_noise_biased.noise_offset":"Noise offset","decorator.count_noise_biased.noise_to_count_ratio":"Noise to count ratio","decorator.noise_based_count.noise_factor":"Noise factor","decorator.noise_based_count.noise_offset":"Noise offset","decorator.noise_based_count.noise_to_count_ratio":"Noise to count ratio","decorator.decorated.inner":"Inner","decorator.decorated.outer":"Outer","decorator.depth_average.baseline":"Baseline","decorator.depth_average.spread":"Spread","decorator.environment_scan.direction_of_search":"Direction","decorator.environment_scan.max_steps":"Max steps","decorator.environment_scan.target_condition":"Target condition","decorator.glowstone.count":"Count","decorator.heightmap.heightmap":"Heightmap","decorator.heightmap_spread_double.heightmap":"Heightmap","decorator.lava_lake.chance":"Chance","decorator.range.bottom_inclusive":"Bottom inclusive","decorator.range.top_inclusive":"Top inclusive","decorator.range_biased_to_bottom.bottom_inclusive":"Bottom inclusive","decorator.range_biased_to_bottom.top_inclusive":"Top inclusive","decorator.range_biased_to_bottom.cutoff":"Cutoff","decorator.range_very_biased_to_bottom.bottom_inclusive":"Bottom inclusive","decorator.range_very_biased_to_bottom.top_inclusive":"Top inclusive","decorator.range_very_biased_to_bottom.cutoff":"Cutoff","decorator.range.height":"Height","decorator.height_range.height":"Height","decorator.random_offset.xz_spread":"XZ spread","decorator.random_offset.y_spread":"Y spread","decorator.surface_relative_threshold_filter.heightmap":"Heightmap","decorator.surface_relative_threshold_filter.min_inclusive":"Min inclusive","decorator.surface_relative_threshold_filter.max_inclusive":"Max inclusive","decorator.water_depth_threshold.max_water_depth":"Max water depth","decorator.surface_water_depth_filter.max_water_depth":"Max water depth","decorator.type":"Type","density_function.string":"Reference","density_function.number":"Constant","density_function.object":"Inline","density_function.type":"Type","density_function.argument":"Argument","density_function.argument1":"Argument 1","density_function.argument2":"Argument 2","density_function.input":"Input","density_function.min":"Min","density_function.max":"Max","density_function.xz_scale":"XZ scale","density_function.y_scale":"Y scale","density_function.min_inclusive":"Min inclusive","density_function.when_in_range":"When in range","density_function.when_out_of_range":"When out of range","density_function.noise":"Noise parameters","density_function.shift_x":"Shift X","density_function.shift_y":"Shift Y","density_function.shift_z":"Shift Z","density_function.spline":"Spline","density_function.min_value":"Min value","density_function.max_value":"Max value","density_function.continentalness":"Continentalness","density_function.erosion":"Erosion","density_function.weirdness":"Weirdness","density_function.rarity_value_mapper":"Rarity value mapper","density_function.from_y":"From Y","density_function.to_y":"To Y","density_function.from_value":"From value","density_function.to_value":"To value","dimension":"Dimension","dimension.generator":"Generator","dimension.generator.biome_source":"Biome source","dimension.overworld":"Overworld","dimension.the_end":"The end","dimension.the_nether":"The nether","dimension.type":"Dimension type","dimension.type.object":"Inline","dimension.type.string":"Reference","dimension_type.ambient_light":"Ambient light","dimension_type.ambient_light.help":"How much ambient light there is. Should be a value between 0.0 and 1.0.","dimension_type.bed_works":"Bed works","dimension_type.bed_works.help":"If true, players can use beds to set their spawn and advance time. If false, beds will blow up when used.","dimension_type.coordinate_scale":"Coordinate scale","dimension_type.coordinate_scale.help":"Multiplier applied to coordinates when traveling between dimensions using a nether portal or /execute in.","dimension_type.effects":"Effects","dimension_type.effects.help":"Sky effects","dimension_type.effects.overworld":"Overworld","dimension_type.effects.the_end":"The end","dimension_type.effects.the_nether":"The nether","dimension_type.fixed_time":"Fixed time","dimension_type.fixed_time.help":"Setting this value will keep the sun in a fixed position.","dimension_type.has_ceiling":"Has ceiling","dimension_type.has_ceiling.help":"Affects the weather, map items and respawning rules.","dimension_type.has_raids":"Has raids","dimension_type.has_raids.help":"If true, players with the Bad Omen effect can cause a raid.","dimension_type.has_skylight":"Has skylight","dimension_type.has_skylight.help":"Affects the weather, lighting engine and respawning rules.","dimension_type.height":"Height","dimension_type.height.help":"The total height in which blocks can exist. Max Y = Min Y + Height.","dimension_type.infiniburn":"Infiniburn","dimension_type.infiniburn.help":"Block tag defining what blocks keep fire infinitely burning.","dimension_type.logical_height":"Logical height","dimension_type.logical_height.help":"Portals can\'t spawn and chorus fruit can\'t teleport players above this height.","dimension_type.min_y":"Min Y","dimension_type.min_y.help":"The minimum height in which blocks can exist.","dimension_type.name":"Name","dimension_type.natural":"Natural","dimension_type.natural.help":"If true, portals will spawn zombified piglins. If false, compasses and clocks spin randomly.","dimension_type.piglin_safe":"Piglin safe","dimension_type.piglin_safe.help":"If false, piglins will shake and convert to zombified piglins.","dimension_type.respawn_anchor_works":"Respawn anchor works","dimension_type.respawn_anchor_works.help":"If true, players can charge and use respawn anchors to set their spawn. If false, respawn anchors will blow up when used.","dimension_type.ultrawarm":"Ultrawarm","dimension_type.ultrawarm.help":"If true, water will evaporate and sponges will dry.","direction.up":"Up","direction.down":"Down","direction.north":"North","direction.east":"East","direction.south":"South","direction.west":"West","display_position.firstperson_righthand":"Firstperson righthand","display_position.firstperson_lefthand":"Firstperson lefthand","display_position.thirdperson_righthand":"Thirdperson righthand","display_position.thirdperson_lefthand":"Thirdperson lefthand","display_position.gui":"GUI","display_position.head":"Head","display_position.ground":"Ground","display_position.fixed":"Fixed","distance.absolute":"Absolute","distance.horizontal":"Horizontal","distance.x":"X","distance.y":"Y","distance.z":"Z","enchantment.aqua_affinity":"Aqua affinity","enchantment.bane_of_arthropods":"Bane of arthropods","enchantment.binding_curse":"Curse of binding","enchantment.blast_protection":"Blast protection","enchantment.channeling":"Channeling","enchantment.depth_strider":"Depth strider","enchantment.efficiency":"Efficiency","enchantment.enchantment":"Enchantment","enchantment.feather_falling":"Feather falling","enchantment.fire_aspect":"Fire aspect","enchantment.fire_protection":"Fire protection","enchantment.flame":"Flame","enchantment.fortune":"Fortune","enchantment.frost_walker":"Frost walker","enchantment.impaling":"Impaling","enchantment.infinity":"Infinity","enchantment.knockback":"Knockback","enchantment.levels":"Levels","enchantment.looting":"Looting","enchantment.loyalty":"Loyalty","enchantment.luck_of_the_sea":"Luck of the sea","enchantment.lure":"Lure","enchantment.mending":"Mending","enchantment.multishot":"Multishot","enchantment.piercing":"Piercing","enchantment.power":"Power","enchantment.projectile_protection":"Projectile protection","enchantment.protection":"Protection","enchantment.punch":"Punch","enchantment.quick_charge":"Quick charge","enchantment.respiration":"Respiration","enchantment.riptide":"Riptide","enchantment.sharpness":"Sharpness","enchantment.silk_touch":"Silk touch","enchantment.smite":"Smite","enchantment.sweeping":"Sweeping edge","enchantment.thorns":"Thorns","enchantment.unbreaking":"Unbreaking","enchantment.vanishing_curse":"Curse of vanishing","entity.distance":"Distance","entity.effects":"Effects","entity.equipment":"Equipment","entity.fishing_hook":"Fishing hook","entity.fishing_hook.in_open_water":"In open water","entity.flags":"Flags","entity.isBaby":"Baby","entity.isOnFire":"On fire","entity.isSneaking":"Sneaking","entity.isSprinting":"Sprinting","entity.isSwimming":"Swimming","entity.location":"Location","entity.nbt":"NBT","entity.player":"Player","entity.targeted_entity":"Targeted entity","entity.team":"Team","entity.type":"Entity","entity.vehicle":"Vehicle","entity_source.direct_killer":"Direct killer","entity_source.killer":"Killer","entity_source.killer_player":"Killer player","entity_source.this":"This","entry":"Entry","error":"Error","error.disallowed_tag_prefix":"Tags cannot start with \\"#\\" here","error.disallowed_tag":"Tags aren\'t allowed here","error.expected_boolean":"Expected a boolean","error.expected_integer":"Expected an integer","error.expected_json":"Expected JSON","error.expected_list":"Expected an array","error.expected_number":"Expected a number","error.expected_object":"Expected an object","error.expected_range":"Expected a range","error.expected_string":"Expected a string","error.expected_uniform_int":"Expected a uniform int","error.expected_tag":"Expected a tag starting with \\"#\\"","error.height_multiple":"Height has to be multiple of %0%","error.invalid_empty_list":"Array cannot be empty","error.invalid_enum_option":"Invalid option \\"%0%\\"","error.invalid_list_range.exact":"Expected a list with length %1%","error.invalid_list_range.larger":"List length %0% is larger than maximum %1%","error.invalid_list_range.smaller":"List length %0% is smaller than minimum %1%","error.invalid_number_range.between":"Expected a number between %1% and %2%","error.invalid_number_range.larger":"Value %0% is larger than maximum %1%","error.invalid_number_range.smaller":"Value %0% is smaller than minimum %1%","error.invalid_number_enum":"Expected one of %0%","error.invalid_resource_location":"Resource location contains invalid characters","error.logical_height":"Logical height cannot be higher than height","error.min_y_multiple":"Min Y has to be a multiple of %0%","error.min_y_plus_height":"Min Y + height cannot be higher than %0%","error.recipe.invalid_key":"only single character is allowed as a key","error.separation_smaller_spacing":"Separation has to be smaller than spacing","false":"False","feature.bamboo.probability":"Probability","feature.basalt_columns.height":"Height","feature.basalt_columns.reach":"Reach","feature.block_column.direction":"Direction","feature.block_column.allowed_placement":"Allowed placement","feature.block_column.prioritize_tip":"Prioritize tip","feature.block_column.layers":"Layers","feature.block_column.layers.entry.height":"Height","feature.block_column.layers.entry.state":"State","feature.block_pile.state_provider":"State provider","feature.config":"Config","feature.decorated.decorator":"Decorator","feature.decorated.feature":"Feature","feature.delta_feature.contents":"Contents","feature.delta_feature.rim":"Rim","feature.delta_feature.rim_size":"Rim size","feature.delta_feature.size":"Size","feature.disk.half_height":"Half height","feature.disk.radius":"Radius","feature.disk.state":"State","feature.disk.targets":"Targets","feature.disk.targets.entry":"State","feature.dripstone_cluster.chance_of_dripstone_column_at_max_distance_from_center":"Far dripstone chance","feature.dripstone_cluster.chance_of_dripstone_column_at_max_distance_from_center.help":"Chance of a dripstone column at the max distance from the center.","feature.dripstone_cluster.density":"Density","feature.dripstone_cluster.dripstone_block_layer_thickness":"Block layer thickness","feature.dripstone_cluster.floor_to_ceiling_search_range":"Search range","feature.dripstone_cluster.floor_to_ceiling_search_range.help":"Floor to ceiling search range.","feature.dripstone_cluster.height":"Height","feature.dripstone_cluster.height_deviation":"Height deviation","feature.dripstone_cluster.max_distance_from_edge_affecting_chance_of_dripstone_column":"Column chance distance","feature.dripstone_cluster.max_distance_from_edge_affecting_chance_of_dripstone_column.help":"Max distance from the edge affecting the chance of dripstone columns.","feature.dripstone_cluster.max_distance_from_center_affecting_height_bias":"Height bias distance","feature.dripstone_cluster.max_distance_from_center_affecting_height_bias.help":"Max distance from the center affecting the height bias.","feature.dripstone_cluster.max_stalagmite_stalactite_height_diff":"Max height difference","feature.dripstone_cluster.max_stalagmite_stalactite_height_diff.help":"Max height difference between the stalagmite and stalactite.","feature.dripstone_cluster.radius":"Radius","feature.dripstone_cluster.wetness":"Wetness","feature.dripstone_cluster.wetness_deviation":"Wetness deviation","feature.dripstone_cluster.wetness_mean":"Wetness mean","feature.emerald_ore.state":"State","feature.emerald_ore.target":"Target","feature.end_gateway.exact":"Exact","feature.end_gateway.exit":"Exit","feature.end_spike.crystal_beam_target":"Crystal beam target","feature.end_spike.crystal_invulnerable":"Crystal invulnerable","feature.end_spike.spikes":"Spikes","feature.end_spike.spikes.entry":"Spike","feature.end_spike.spikes.entry.centerX":"Center X","feature.end_spike.spikes.entry.centerZ":"Center Z","feature.end_spike.spikes.entry.guarded":"Guarded","feature.end_spike.spikes.entry.height":"Height","feature.end_spike.spikes.entry.radius":"Radius","feature.fill_layer.height":"Height","feature.fill_layer.state":"State","feature.flower.blacklist":"Blacklist","feature.flower.block_placer":"Block placer","feature.flower.can_replace":"Can replace","feature.flower.need_water":"Need water","feature.flower.feature":"Placed feature","feature.flower.project":"Project","feature.flower.state_provider":"State provider","feature.flower.tries":"Tries","feature.flower.whitelist":"Whitelist","feature.flower.xspread":"X spread","feature.flower.xz_spread":"XZ spread","feature.flower.yspread":"Y spread","feature.flower.y_spread":"Y spread","feature.flower.zspread":"Z spread","feature.forest_rock.state":"State","feature.fossil.max_empty_corners_allowed":"Max empty corners","feature.fossil.max_empty_corners_allowed.help":"If more corners are exposed to air, feature placement is cancelled.","feature.fossil.fossil_structures":"Fossil structures","feature.fossil.overlay_structures":"Overlay structures","feature.fossil.fossil_processors":"Fossil processors","feature.fossil.fossil_processors.string":"Reference","feature.fossil.fossil_processors.object":"Inline","feature.fossil.overlay_processors":"Overlay processors","feature.fossil.overlay_processors.string":"Reference","feature.fossil.overlay_processors.object":"Inline","feature.geode.blocks":"Blocks","feature.geode.blocks.filling_provider":"Filling","feature.geode.blocks.inner_layer_provider":"Inner layer","feature.geode.blocks.alternate_inner_layer_provider":"Alternate inner layer","feature.geode.blocks.middle_layer_provider":"Middle layer","feature.geode.blocks.outer_layer_provider":"Outer layer","feature.geode.blocks.inner_placements":"Inner placements","feature.geode.blocks.cannot_replace":"Cannot replace","feature.geode.blocks.cannot_replace.help":"Blocks that will not be replaced by the geode.","feature.geode.blocks.invalid_blocks":"Invalid blocks","feature.geode.blocks.invalid_blocks.help":"When encountering an invalid block, feature placement is cancelled.","feature.geode.layers":"Layers","feature.geode.layers.filling":"Filling","feature.geode.layers.inner_layer":"Inner layer","feature.geode.layers.middle_layer":"Middle layer","feature.geode.layers.outer_layer":"Outer layer","feature.geode.crack":"Crack","feature.geode.crack.generate_crack_chance":"Crack chance","feature.geode.crack.base_crack_size":"Crack size","feature.geode.crack.crack_point_offset":"Crack point offset","feature.geode.noise_multiplier":"Noise multiplier","feature.geode.use_potential_placements_chance":"Inner placements chance","feature.geode.use_alternate_layer0_chance":"Alternate inner layer chance","feature.geode.placements_require_layer0_alternate":"Placements require alternate layer","feature.geode.outer_wall_distance":"Outer wall distance","feature.geode.distribution_points":"Distribution points","feature.geode.point_offset":"Point offset","feature.geode.min_gen_offset":"Min gen offset","feature.geode.max_gen_offset":"Max gen offset","feature.geode.invalid_blocks_threshold":"Invalid blocks threshold","feature.glow_lichen.can_be_placed_on":"Can be placed on","feature.glow_lichen.can_be_placed_on.entry":"Block state","feature.glow_lichen.can_place_on_ceiling":"Can place on ceiling","feature.glow_lichen.can_place_on_floor":"Can place on floor","feature.glow_lichen.can_place_on_wall":"Can place on wall","feature.glow_lichen.chance_of_spreading":"Chance of spreading","feature.glow_lichen.search_range":"Search range","feature.growing_plant.direction":"Direction","feature.growing_plant.allow_water":"Allow water","feature.growing_plant.height_distribution":"Height distribution","feature.growing_plant.body_provider":"Body provider","feature.growing_plant.head_provider":"Head provider","feature.huge_brown_mushroom.cap_provider":"Cap provider","feature.huge_brown_mushroom.foliage_radius":"Foliage radius","feature.huge_brown_mushroom.stem_provider":"Stem provider","feature.huge_fungus.decor_state":"Decoration","feature.huge_fungus.hat_state":"Hat","feature.huge_fungus.planted":"Planted","feature.huge_fungus.stem_state":"Stem","feature.huge_fungus.valid_base_block":"Valid base","feature.huge_red_mushroom.cap_provider":"Cap provider","feature.huge_red_mushroom.foliage_radius":"Foliage radius","feature.huge_red_mushroom.stem_provider":"Stem provider","feature.ice_patch.half_height":"Half height","feature.ice_patch.radius":"Radius","feature.ice_patch.state":"State","feature.ice_patch.targets":"Targets","feature.ice_patch.targets.entry":"State","feature.iceberg.state":"State","feature.lake.state":"State","feature.lake.fluid":"Fluid","feature.lake.barrier":"Barrier","feature.large_dripstone.column_radius":"Column radius","feature.large_dripstone.floor_to_ceiling_search_range":"Search range","feature.large_dripstone.floor_to_ceiling_search_range.help":"Floor to ceiling search range.","feature.large_dripstone.height_scale":"Height scale","feature.large_dripstone.max_column_radius_to_cave_height_ratio":"Radius to cave height ratio","feature.large_dripstone.min_bluntness_for_wind":"Min bluntness for wind","feature.large_dripstone.min_radius_for_wind":"Min radius for wind","feature.large_dripstone.stalactite_bluntness":"Stalactite bluntness","feature.large_dripstone.stalagmite_bluntness":"Stalagmite bluntness","feature.large_dripstone.wind_speed":"Wind speed","feature.nether_forest_vegetation.state_provider":"State provider","feature.nether_forest_vegetation.spread_width":"Spread width","feature.nether_forest_vegetation.spread_height":"Spread height","feature.netherrack_replace_blobs.radius":"Radius","feature.netherrack_replace_blobs.state":"State","feature.netherrack_replace_blobs.target":"Target","feature.no_bonemeal_flower.allowed_on":"Allowed on","feature.no_bonemeal_flower.blacklist":"Blacklist","feature.no_bonemeal_flower.block_placer":"Block placer","feature.no_bonemeal_flower.can_replace":"Can replace","feature.no_bonemeal_flower.disallowed_on":"Disallowed on","feature.no_bonemeal_flower.need_water":"Need water","feature.no_bonemeal_flower.feature":"Placed feature","feature.no_bonemeal_flower.only_in_air":"Only in air","feature.no_bonemeal_flower.project":"Project","feature.no_bonemeal_flower.state_provider":"State provider","feature.no_bonemeal_flower.tries":"Tries","feature.no_bonemeal_flower.whitelist":"Whitelist","feature.no_bonemeal_flower.xspread":"X spread","feature.no_bonemeal_flower.xz_spread":"XZ spread","feature.no_bonemeal_flower.yspread":"Y spread","feature.no_bonemeal_flower.y_spread":"Y spread","feature.no_bonemeal_flower.zspread":"Z spread","feature.no_surface_ore.size":"Size","feature.no_surface_ore.state":"State","feature.no_surface_ore.target":"Target","feature.object":"Inline","feature.ore.discard_chance_on_air_exposure":"Discard on exposure chance","feature.ore.discard_chance_on_air_exposure.help":"The chance that feature placement will be discarded if the ore is exposed to air blocks.","feature.ore.size":"Size","feature.ore.state":"State","feature.ore.target":"Target","feature.ore.targets":"Targets","feature.ore.targets.entry.target":"Target","feature.ore.targets.entry.state":"State","feature.scattered_ore.discard_chance_on_air_exposure":"Discard on exposure chance","feature.scattered_ore.discard_chance_on_air_exposure.help":"The chance that feature placement will be discarded if the ore is exposed to air blocks.","feature.scattered_ore.size":"Size","feature.scattered_ore.targets":"Targets","feature.scattered_ore.targets.entry.target":"Target","feature.scattered_ore.targets.entry.state":"State","feature.pointed_dripstone.chance_of_taller_dripstone":"Chance of taller dripstone","feature.pointed_dripstone.chance_of_directional_spread":"Chance of directional spread","feature.pointed_dripstone.chance_of_spread_radius2":"Chance of spread radius 2","feature.pointed_dripstone.chance_of_spread_radius3":"Chance of spread radius 3","feature.random_boolean_selector.feature_false":"Placed feature 1","feature.random_boolean_selector.feature_true":"Placed feature 2","feature.random_patch.allowed_on":"Allowed on","feature.random_patch.blacklist":"Blacklist","feature.random_patch.block_placer":"Block placer","feature.random_patch.can_replace":"Can replace","feature.random_patch.disallowed_on":"Disallowed on","feature.random_patch.need_water":"Need water","feature.random_patch.feature":"Placed feature","feature.random_patch.only_in_air":"Only in air","feature.random_patch.project":"Project","feature.random_patch.state_provider":"State provider","feature.random_patch.tries":"Tries","feature.random_patch.whitelist":"Whitelist","feature.random_patch.xspread":"X spread","feature.random_patch.xz_spread":"XZ spread","feature.random_patch.yspread":"Y spread","feature.random_patch.y_spread":"Y spread","feature.random_patch.zspread":"Z spread","feature.random_selector.default":"Default","feature.random_selector.features":"Features","feature.random_selector.features.entry":"Feature","feature.random_selector.features.entry.chance":"Chance","feature.random_selector.features.entry.feature":"Placed feature","feature.replace_single_block.targets":"Targets","feature.replace_single_block.targets.entry.target":"Target","feature.replace_single_block.targets.entry.state":"State","feature.root_system.required_vertical_space_for_tree":"Required vertical tree space","feature.root_system.root_radius":"Root radius","feature.root_system.root_placement_attempts":"Root placement attempts","feature.root_system.root_column_max_height":"Root max height","feature.root_system.hanging_root_radius":"Hanging roots radius","feature.root_system.hanging_roots_vertical_span":"Hanging roots vertical span","feature.root_system.hanging_root_placement_attempts":"Hanging roots attempts","feature.root_system.allowed_vertical_water_for_tree":"Max water depth","feature.root_system.root_replaceable":"Root replaceable","feature.root_system.root_state_provider":"Root","feature.root_system.hanging_root_state_provider":"Hanging roots","feature.root_system.allowed_tree_position":"Allowed tree position","feature.root_system.feature":"Tree feature","feature.sea_pickle.count":"Count","feature.seagrass.probability":"Probability","feature.simple_block.place_in":"Place in","feature.simple_block.place_in.entry":"State","feature.simple_block.place_on":"Place on","feature.simple_block.place_on.entry":"State","feature.simple_block.place_under":"Place under","feature.simple_block.place_under.entry":"State","feature.simple_block.to_place":"To place","feature.simple_random_selector.features":"Features","feature.simple_random_selector.features.entry":"Placed feature","feature.small_dripstone.chance_of_taller_dripstone":"Chance of taller dripstone","feature.small_dripstone.empty_space_search_radius":"Empty space search radius","feature.small_dripstone.max_offset_from_origin":"Max offset from origin","feature.small_dripstone.max_placements":"Max placements","feature.spring_feature.hole_count":"Hole count","feature.spring_feature.required_block_below":"Required block below","feature.spring_feature.rock_count":"Rock count","feature.spring_feature.state":"State","feature.spring_feature.valid_blocks":"Valid blocks","feature.string":"Reference","feature.tree.decorators":"Decorators","feature.tree.decorators.entry":"Tree decorator","feature.tree.foliage_placer":"Foliage placer","feature.tree.heightmap":"Heightmap","feature.tree.ignore_vines":"Ignore vines","feature.tree.leaves_provider":"Leaves provider","feature.tree.foliage_provider":"Foliage provider","feature.tree.force_dirt":"Force dirt","feature.tree.dirt_provider":"Dirt provider","feature.tree.sapling_provider":"Sapling provider","feature.tree.max_water_depth":"Max water depth","feature.tree.minimum_size":"Minimum size","feature.tree.minimum_size.limit":"Limit","feature.tree.minimum_size.lower_size":"Lower size","feature.tree.minimum_size.middle_size":"Middle size","feature.tree.minimum_size.min_clipped_height":"Min clipped height","feature.tree.minimum_size.type":"Minimum size","feature.tree.minimum_size.upper_limit":"Upper limit","feature.tree.minimum_size.upper_size":"Upper size","feature.tree.trunk_placer":"Trunk placer","feature.tree.trunk_provider":"Trunk provider","feature.twisting_vines.spread_width":"Spread width","feature.twisting_vines.spread_height":"Spread height","feature.twisting_vines.max_height":"Max height","feature.type":"Type","feature.underwater_magma.floor_search_range":"Floor search range","feature.underwater_magma.placement_radius_around_floor":"Placement radius","feature.underwater_magma.placement_probability_per_valid_position":"Probability","feature.underwater_magma.placement_probability_per_valid_position.help":"The probability of placing magma per valid position.","feature.vegetation_patch.depth":"Depth","feature.vegetation_patch.extra_bottom_block_chance":"Extra bottom block chance","feature.vegetation_patch.extra_edge_column_chance":"Extra edge column chance","feature.vegetation_patch.ground_state":"Ground state","feature.vegetation_patch.replaceable":"Replaceable","feature.vegetation_patch.surface":"Surface","feature.vegetation_patch.vegetation_chance":"Vegetation chance","feature.vegetation_patch.vegetation_feature":"Vegetation feature","feature.vegetation_patch.vertical_range":"Vertical range","feature.vegetation_patch.xz_radius":"XZ radius","feature.waterlogged_vegetation_patch.depth":"Depth","feature.waterlogged_vegetation_patch.extra_bottom_block_chance":"Extra bottom block chance","feature.waterlogged_vegetation_patch.extra_edge_column_chance":"Extra edge column chance","feature.waterlogged_vegetation_patch.ground_state":"Ground state","feature.waterlogged_vegetation_patch.replaceable":"Replaceable","feature.waterlogged_vegetation_patch.surface":"Surface","feature.waterlogged_vegetation_patch.vegetation_chance":"Vegetation chance","feature.waterlogged_vegetation_patch.vegetation_feature":"Vegetation feature","feature.waterlogged_vegetation_patch.vertical_range":"Vertical range","feature.waterlogged_vegetation_patch.xz_radius":"XZ radius","float_provider.value.deviation":"Deviation","float_provider.value.mean":"Mean","float_provider.value.min":"Min","float_provider.value.min_inclusive":"Min exclusive","float_provider.value.max":"Max","float_provider.value.max_exclusive":"Max exclusive","float_provider.value.plateau":"Plateau","float_provider.type.number":"Constant","float_provider.type.constant":"Constant+","float_provider.type.uniform":"Uniform","float_provider.type.clamped_normal":"Clamped normal","float_provider.type.trapezoid":"Trapezoid","float_provider.value":"Value","fluid.fluid":"Fluid ID","fluid.state":"Fluid state","fluid.tag":"Fluid tag","fluid_state.Name":"Name","fluid_state.Properties":"Properties","foliage_placer.crown_height":"Crown height","foliage_placer.height":"Height","foliage_placer.offset":"Offset","foliage_placer.radius":"Radius","foliage_placer.trunk_height":"Trunk height","foliage_placer.type":"Type","function.apply_bonus.enchantment":"Enchantment","function.apply_bonus.formula":"Formula","function.apply_bonus.formula.binomial_with_bonus_count":"Binomial with bonus count","function.apply_bonus.formula.ore_drops":"Ore drops","function.apply_bonus.formula.uniform_bonus_count":"Uniform bonus count","function.apply_bonus.parameters":"Parameters","function.apply_bonus.parameters.bonusMultiplier":"Multiplier","function.apply_bonus.parameters.extra":"Extra","function.apply_bonus.parameters.probability":"Probability","function.copy_name.source":"Source","function.copy_nbt.ops":"NBT operations","function.copy_nbt.ops.entry":"Operation","function.copy_nbt.source":"Source","function.copy_state.block":"Block","function.copy_state.properties":"Properties","function.copy_state.properties.entry":"Property","function.enchant_randomly.enchantments":"Optional enchantments","function.enchant_randomly.enchantments.entry":"Enchantment","function.enchant_with_levels.levels":"Levels","function.enchant_with_levels.treasure":"Treasure","function.exploration_map.decoration":"Decoration","function.exploration_map.destination":"Destination","function.exploration_map.search_radius":"Search radius (Chunks)","function.exploration_map.skip_existing_chunks":"Skip existing chunks","function.exploration_map.zoom":"Zoom","function.fill_player_head.entity":"Entity","function.function":"Function","function.limit_count.limit":"Limit","function.list":"Multiple","function.looting_enchant.count":"Count","function.looting_enchant.limit":"Limit","function.object":"Single","function.set_attributes.modifiers":"Modifiers","function.set_attributes.modifiers.entry":"Modifier","function.set_banner_pattern.append":"Append","function.set_banner_pattern.patterns":"Patterns","function.set_contents.entries":"Contents","function.set_contents.entries.entry":"Entry","function.set_contents.type":"Type","function.set_count.add":"Add","function.set_count.add.help":"If true, change will be relative to current item count","function.set_count.count":"Count","function.set_damage.add":"Add","function.set_damage.add.help":"If true, change will be relative to current damage","function.set_damage.damage":"Damage","function.set_data.data":"Data","function.set_enchantments.add":"Add","function.set_enchantments.add.help":"If true, change will be relative to current level","function.set_enchantments.enchantments":"Enchantments","function.set_loot_table.name":"Loot table name","function.set_loot_table.seed":"Seed","function.set_loot_table.type":"Type","function.set_lore.entity":"Entity","function.set_lore.lore":"Lore","function.set_lore.lore.entry":"Line","function.set_lore.replace":"Replace","function.set_name.entity":"Entity","function.set_name.name":"Name","function.set_nbt.tag":"NBT","function.set_potion.id":"Potion","function.set_stew_effect.effects":"Effects","function.set_stew_effect.effects.entry":"Effect","function.set_stew_effect.effects.entry.duration":"Duration","function.set_stew_effect.effects.entry.type":"Type","functions":"Functions","functions.entry":"Function","gamemode.adventure":"Adventure","gamemode.creative":"Creative","gamemode.spectator":"Spectator","gamemode.survival":"Survival","generation_step.air":"Air","generation_step.liquid":"Liquid","generator.biome_source.altitude_noise":"Altitude noise","generator.biome_source.biome":"Biome","generator.biome_source.biomes":"Biomes","generator.biome_source.humidity_noise":"Humidity noise","generator.biome_source.large_biomes":"Large biomes","generator.biome_source.legacy_biome_init_layer":"Legacy biome init layer","generator.biome_source.preset":"Biomes preset","generator.biome_source.preset.nether":"Nether","generator.biome_source.scale":"Scale","generator.biome_source.seed":"Biomes seed","generator.biome_source.temperature_noise":"Temperature noise","generator.biome_source.type":"Biome source","generator.biome_source.weirdness_noise":"Weirdness noise","generator.seed":"Dimension seed","generator.settings":"Generator settings","generator.settings.biome":"Biome","generator.settings.lakes":"Lakes","generator.settings.layers":"Layers","generator.settings.layers.entry":"Layer","generator.settings.layers.entry.block":"Block ID","generator.settings.layers.entry.height":"Height","generator.settings.structure_overrides":"Structure overrides","generator.settings.structure_overrides.entry":"Structure set","generator.settings.object":"Inline","generator.settings.presets.amplified":"Amplified","generator.settings.presets.caves":"Caves","generator.settings.presets.end":"End","generator.settings.presets.floating_islands":"Floating islands","generator.settings.presets.nether":"Nether","generator.settings.presets.overworld":"Overworld","generator.settings.string":"Reference","generator.settings.structures":"Structures","generator.settings.structures.stronghold":"Stronghold","generator.settings.structures.stronghold.count":"Count","generator.settings.structures.stronghold.distance":"Distance","generator.settings.structures.stronghold.spread":"Spread","generator.settings.structures.structures":"Structures","generator.type":"Generator type","generator_biome.biome":"Biome","generator_biome.parameters":"Parameters","generator_biome.parameters.altitude":"Altitude","generator_biome.parameters.help":"These parameters determine the placement of the biome. Every biome must have a unique combination of them. Biomes with similar values will generate next to each other.","generator_biome.parameters.humidity":"Humidity","generator_biome.parameters.offset":"Offset","generator_biome.parameters.temperature":"Temperature","generator_biome.parameters.weirdness":"Weirdness","generator_biome.parameters.continentalness":"Continentalness","generator_biome.parameters.erosion":"Erosion","generator_biome.parameters.depth":"Depth","generator_biome_noise.amplitudes":"Amplitudes","generator_biome_noise.amplitudes.entry":"Octave %0%","generator_biome_noise.firstOctave":"First octave","generator_structure.salt":"Salt","generator_structure.separation":"Separation","generator_structure.separation.help":"The minumum distance in chunks between two structures of this type.","generator_structure.spacing":"Spacing","generator_structure.spacing.help":"The average distance in chunks between two structures of this type.","height_provider.inner":"Inner","height_provider.min_inclusive":"Min inclusive","height_provider.max_inclusive":"Max inclusive","height_provider.plateau":"Plateau","height_provider.value":"Value","height_provider.distribution":"Distribution","height_provider.distribution.entry.weight":"Weight","height_provider.distribution.entry.data":"Data","height_provider.type.number":"Constant","height_provider.type.constant":"Constant+","height_provider.type.uniform":"Uniform","height_provider.type.biased_to_bottom":"Biased to bottom","height_provider.type.very_biased_to_bottom":"Very biased to bottom","height_provider.type.trapezoid":"Trapezoid","height_provider.type.weighted_list":"Weighted list","heightmap_type.MOTION_BLOCKING":"Motion blocking","heightmap_type.MOTION_BLOCKING_NO_LEAVES":"Motion blocking (Ignore Leaves)","heightmap_type.OCEAN_FLOOR":"Ocean floor","heightmap_type.OCEAN_FLOOR_WG":"Ocean floor (World Gen)","heightmap_type.WORLD_SURFACE":"World surface","heightmap_type.WORLD_SURFACE_IGNORE_SNOW":"World surface (Ignore Snow)","heightmap_type.WORLD_SURFACE_WG":"World surface (World Gen)","hide_source":"Hide source","int_provider.value":"Value","int_provider.value.deviation":"Deviation","int_provider.value.mean":"Mean","int_provider.value.min_inclusive":"Min inclusive","int_provider.value.max_inclusive":"Max inclusive","int_provider.value.source":"Source","int_provider.distribution":"Distribution","int_provider.distribution.entry.weight":"Weight","int_provider.distribution.entry.data":"Provider","int_provider.type.number":"Constant","int_provider.type.constant":"Constant+","int_provider.type.uniform":"Uniform","int_provider.type.biased_to_bottom":"Biased to bottom","int_provider.type.clamped":"Clamped","int_provider.type.clamped_normal":"Clamped normal","int_provider.type.weighted_list":"Weighted list","item.count":"Count","item.durability":"Durability","item.enchantments":"Enchantments","item.enchantments.entry":"Enchantment","item.item":"Item ID","item.nbt":"NBT","item.potion":"Potion","item.tag":"Item tag","item_model_predicates.angle":"Angle","item_model_predicates.blocking":"Blocking","item_model_predicates.broken":"Broken","item_model_predicates.cast":"Cast","item_model_predicates.charged":"Charged","item_model_predicates.cooldown":"Cooldown","item_model_predicates.custom_model_data":"Custom model data","item_model_predicates.damage":"Damage","item_model_predicates.damaged":"Damaged","item_model_predicates.firework":"Firework","item_model_predicates.lefthanded":"Lefthanded","item_model_predicates.pull":"Pull","item_model_predicates.pulling":"Pulling","item_model_predicates.throwing":"Throwing","item_model_predicates.time":"Time","item_transform.rotation":"Rotation","item_transform.translation":"Translation","item_transform.scale":"Scale","key.advancements":"Advancements","key.attack":"Attack/destroy","key.back":"Walk backwards","key.chat":"Open chat","key.command":"Open command","key.drop":"Drop selected item","key.forward":"Walk forwards","key.fullscreen":"Toggle fullscreen","key.hotbar.1":"Hotbar slot 1","key.hotbar.2":"Hotbar slot 2","key.hotbar.3":"Hotbar slot 3","key.hotbar.4":"Hotbar slot 4","key.hotbar.5":"Hotbar slot 5","key.hotbar.6":"Hotbar slot 6","key.hotbar.7":"Hotbar slot 7","key.hotbar.8":"Hotbar slot 8","key.hotbar.9":"Hotbar slot 9","key.inventory":"Open/close inventory","key.jump":"Jump","key.left":"Strafe left","key.loadToolbarActivator":"Load toolbar activator","key.pickItem":"Pick block","key.playerlist":"List players","key.right":"Strafe right","key.saveToolbarActivator":"Save toolbar activator","key.screenshot":"Take screenshot","key.smoothCamera":"Toggle cinematic camera","key.sneak":"Sneak","key.spectatorOutlines":"Highlight players (Spectators)","key.sprint":"Sprint","key.swapOffhand":"Swap item with offhand","key.togglePerspective":"Toggle perspective","key.use":"Use item/place block","location.biome":"Biome","location.block":"Block","location.dimension":"Dimension","location.feature":"Feature","location.fluid":"Fluid","location.light":"Light","location.light.light":"Visible light level","location.position":"Position","location.position.x":"X","location.position.y":"Y","location.position.z":"Z","location.smokey":"Smokey","loot_condition_type.alternative":"Alternative","loot_condition_type.block_state_property":"Block state properties","loot_condition_type.damage_source_properties":"Damage source properties","loot_condition_type.entity_properties":"Entity properties","loot_condition_type.entity_scores":"Entity scores","loot_condition_type.inverted":"Inverted","loot_condition_type.killed_by_player":"Killed by player","loot_condition_type.location_check":"Location check","loot_condition_type.match_tool":"Match tool","loot_condition_type.random_chance":"Random chance","loot_condition_type.random_chance_with_looting":"Random chance with looting","loot_condition_type.reference":"Reference","loot_condition_type.survives_explosion":"Survives explosion","loot_condition_type.table_bonus":"Table bonus","loot_condition_type.time_check":"Time check","loot_condition_type.value_check":"Value check","loot_condition_type.weather_check":"Weather check","loot_entry.dynamic.name":"Name","loot_entry.item.name":"Name","loot_entry.loot_table.name":"Loot table name","loot_entry.quality":"Quality","loot_entry.tag.expand":"Expand","loot_entry.tag.expand.help":"If false, entry will return all contents of tag, otherwise entry will behave as multiple item entries.","loot_entry.tag.name":"Item tag name","loot_entry.type":"Type","loot_entry.weight":"Weight","loot_entry.functions":"Functions","loot_entry.functions.entry":"Function","loot_function_type.apply_bonus":"Apply bonus","loot_function_type.copy_name":"Copy name","loot_function_type.copy_nbt":"Copy NBT","loot_function_type.copy_state":"Copy block states","loot_function_type.enchant_randomly":"Enchant randomly","loot_function_type.enchant_with_levels":"Enchant with levels","loot_function_type.exploration_map":"Exploration map properties","loot_function_type.explosion_decay":"Explosion decay","loot_function_type.fill_player_head":"Fill player head","loot_function_type.furnace_smelt":"Furnace smelt","loot_function_type.limit_count":"Limit count","loot_function_type.looting_enchant":"Looting enchant","loot_function_type.set_attributes":"Set attributes","loot_function_type.set_banner_pattern":"Set banner pattern","loot_function_type.set_contents":"Set contents","loot_function_type.set_count":"Set count","loot_function_type.set_damage":"Set damage","loot_function_type.set_data":"Set data","loot_function_type.set_enchantments":"Set enchantments","loot_function_type.set_loot_table":"Set loot table","loot_function_type.set_lore":"Set lore","loot_function_type.set_name":"Set name","loot_function_type.set_nbt":"Set NBT","loot_function_type.set_potion":"Set potion","loot_function_type.set_stew_effect":"Set stew effect","loot_pool.bonus_rolls":"Bonus rolls","loot_pool.entries":"Entries","loot_pool.entries.entry":"Entry","loot_pool.rolls":"Rolls","loot_pool.rolls.help":"The amount of entries that are randomly chosen.","loot_pool_entry_type.alternatives":"Alternatives","loot_pool_entry_type.alternatives.help":"Tests conditions of the child entries and executes the first that can run.","loot_pool_entry_type.dynamic":"Dynamic","loot_pool_entry_type.dynamic.help":"Gets block specific drops.","loot_pool_entry_type.empty":"Empty","loot_pool_entry_type.empty.help":"Adds nothing to the pool.","loot_pool_entry_type.group":"Group","loot_pool_entry_type.group.help":"Executes all child entries when own conditions pass.","loot_pool_entry_type.item":"Item","loot_pool_entry_type.item.help":"Adds a single item.","loot_pool_entry_type.loot_table":"Loot table","loot_pool_entry_type.loot_table.help":"Adds the contents of another loot table.","loot_pool_entry_type.sequence":"Sequence","loot_pool_entry_type.sequence.help":"Executes child entries until the first one that can\'t run due to conditions.","loot_pool_entry_type.tag":"Item tag","loot_pool_entry_type.tag.help":"Adds the contents of an item tag.","loot_table.pools":"Pools","loot_table.pools.entry":"Pool","loot_table.type":"Type","luck_based":"Luck-based","material_condition.biome.biome_is":"Biome","material_condition.noise_threshold.noise":"Noise","material_condition.noise_threshold.min_threshold":"Min threshold","material_condition.noise_threshold.max_threshold":"Max threshold","material_condition.not.invert":"Invert","material_condition.stone_depth.offset":"Offset","material_condition.stone_depth.surface_type":"Surface","material_condition.stone_depth.add_surface_depth":"Add surface depth","material_condition.stone_depth.add_surface_secondary_depth":"Add surface secondary depth","material_condition.stone_depth.secondary_depth_range":"Secondary depth range","material_condition.vertical_gradient.random_name":"Random name","material_condition.vertical_gradient.true_at_and_below":"True at and below","material_condition.vertical_gradient.false_at_and_above":"False at and above","material_condition.water.offset":"Offset","material_condition.water.surface_depth_multiplier":"Surface depth multiplier","material_condition.water.add_stone_depth":"Add stone depth","material_condition.y_above.anchor":"Anchor","material_condition.y_above.surface_depth_multiplier":"Surface depth multiplier","material_condition.y_above.add_stone_depth":"Add stone depth","material_rule.condition.if_true":"If true","material_rule.condition.then_run":"Then run","material_rule.block.result_state":"Result state","material_rule.sequence.sequence":"Sequence","material_rule.sequence.sequence.entry":"Rule","mob_category.monster":"Monster","mob_category.creature":"Creature","mob_category.ambient":"Ambient","mob_category.axolotls":"Axolotls","mob_category.underground_water_creature":"Underground water creature","mob_category.water_creature":"Water creature","mob_category.water_ambient":"Water ambient","mob_category.misc":"Misc","model.parent":"Parent","model.ambientocclusion":"Ambient occlusion","model.gui_light":"GUI light","model.textures":"Textures","model.elements":"Elements","model.elements.entry":"Element","model_element.from":"From","model_element.to":"To","model_element.rotation":"Rotation","model_element.rotation.origin":"Origin","model_element.rotation.axis":"Axis","model_element.rotation.angle":"Angle","model_element.rotation.rescale":"Rescale","model_element.shade":"Shade","model_element.faces":"Faces","model_element.faces.texture":"Texture","model_element.faces.uv":"UV","model_element.faces.cullface":"Cullface","model_element.faces.rotation":"Rotation","model_element.faces.tintindex":"Tint index","model.display":"Display","model.overrides":"Overrides","model.overrides.entry":"Override","model_override.predicate":"Predicate","model_override.model":"Model","model_variant.object":"Single","model_variant.list":"Multiple","model_variant.model":"Model","model_variant.x":"X rotation","model_variant.y":"Y rotation","model_variant.uvlock":"UV lock","model_variant.weight":"Weight","multipart_condition.OR":"Or","multipart_condition.object":"Condition","multipart_condition.or":"Or","multipart_condition.OR.entry":"Condition","nbt_operation.op":"Operation","nbt_operation.op.append":"Append","nbt_operation.op.merge":"Merge","nbt_operation.op.replace":"Replace","nbt_operation.source":"Source","nbt_operation.target":"Target","nbt_provider.source":"Source","nbt_provider.target":"Target","nbt_provider.type":"Type","nbt_provider.type.context":"Context+","nbt_provider.type.storage":"Storage","nbt_provider.type.string":"Context","noise_parameters.string":"Reference","noise_parameters.object":"Inline","noise_parameters.amplitudes":"Amplitudes","noise_parameters.amplitudes.entry":"Octave %0%","noise_parameters.firstOctave":"First octave","noise_settings.aquifers_enabled":"Aquifers enabled","noise_settings.bedrock_floor_position":"Bedrock floor position","noise_settings.bedrock_floor_position.help":"Position of the bedrock floor. Higher numbers move the floor up.","noise_settings.bedrock_roof_position":"Bedrock roof position","noise_settings.bedrock_roof_position.help":"Relative position of the bedrock roof starting at the world height. Higher numbers move the roof down.","noise_settings.biome":"Biome","noise_settings.deepslate_enabled":"Deepslate enabled","noise_settings.default_block":"Default block","noise_settings.default_fluid":"Default fluid","noise_settings.disable_mob_generation":"Disable mob generation","noise_settings.disable_mob_generation.help":"If true, mobs will not spawn during generation.","noise_settings.legacy_random_source":"Legacy random source","noise_settings.min_surface_level":"Min surface level","noise_settings.name":"Name","noise_settings.noise":"Noise options","noise_settings.noise_caves_enabled":"Noise caves enabled","noise_settings.noise.amplified":"Amplified","noise_settings.noise.bottom_slide":"Bottom slide","noise_settings.noise.bottom_slide.help":"Adds or removes terrain at the bottom of the world. Does nothing when size is 0.","noise_settings.noise.bottom_slide.offset":"Offset","noise_settings.noise.bottom_slide.offset.help":"Defines an range of \'Offset * Size vertical * 4\' blocks at the bottom of the world where the density is set to the target.","noise_settings.noise.bottom_slide.size":"Size","noise_settings.noise.bottom_slide.size.help":"Defines a range of \'Size * Size vertical * 4\' blocks where the existing density and target are interpolated.","noise_settings.noise.bottom_slide.target":"Target","noise_settings.noise.bottom_slide.target.help":"The target density. Positive values add terrain and negative values remove terrain.","noise_settings.noise.density_factor":"Density factor","noise_settings.noise.density_factor.help":"Determines how much the height influences the terrain. Positive values produce land at the bottom. Values close to 0 produce uniform cave-like terrain.","noise_settings.noise.density_offset":"Density offset","noise_settings.noise.density_offset.help":"Affects the average terrain height. A value of 0 produces terrain land height at half the height. Positive values raise the height.","noise_settings.noise.height":"Height","noise_settings.noise.height.help":"The total height where blocks can generate. Max Y = Min Y + Height.","noise_settings.noise.island_noise_override":"Island noise override","noise_settings.noise.island_noise_override.help":"If true, terrain will be shaped like islands similar to the end.","noise_settings.noise.large_biomes":"Large biomes","noise_settings.noise.min_y":"Min Y","noise_settings.noise.min_y.help":"The minimum height where blocks start generating.","noise_settings.noise.random_density_offset":"Random density offset","noise_settings.noise.sampling":"Sampling","noise_settings.noise.sampling.xz_factor":"XZ factor","noise_settings.noise.sampling.xz_scale":"XZ scale","noise_settings.noise.sampling.y_factor":"Y factor","noise_settings.noise.sampling.y_scale":"Y scale","noise_settings.noise.simplex_surface_noise":"Simplex surface noise","noise_settings.noise.size_horizontal":"Size horizontal","noise_settings.noise.size_vertical":"Size vertical","noise_settings.noise.top_slide":"Top slide","noise_settings.noise.top_slide.help":"Adds or removes terrain at the top of the world. Does nothing when size is 0.","noise_settings.noise.top_slide.offset":"Offset","noise_settings.noise.top_slide.offset.help":"Defines an range of \'Offset * Size Vertical * 4\' blocks at the top of the world where the density is set to the target.","noise_settings.noise.top_slide.size":"Size","noise_settings.noise.top_slide.size.help":"Defines a range of \'Size * Size Vertical * 4\' blocks where the existing density and target are interpolated.","noise_settings.noise.top_slide.target":"Target","noise_settings.noise.top_slide.target.help":"The target density. Positive values add terrain and negative values remove terrain.","noise_settings.noise.terrain_shaper":"Terrain shaper","noise_settings.noodle_caves_enabled":"Noodle caves enabled","noise_settings.ore_veins_enabled":"Ore veins enabled","noise_settings.sea_level":"Sea level","noise_settings.structures":"Structures","noise_settings.structures.stronghold":"Stronghold","noise_settings.structures.stronghold.count":"Count","noise_settings.structures.stronghold.distance":"Distance","noise_settings.structures.stronghold.spread":"Spread","noise_settings.structures.structures":"Structures","noise_settings.surface_rule":"Surface rule","noise_settings.noise_router":"Noise router","noise_settings.noise_router.barrier":"Barrier","noise_settings.noise_router.fluid_level_floodedness":"Fluid level floodedness","noise_settings.noise_router.fluid_level_spread":"Fluid level spread","noise_settings.noise_router.lava":"Lava","noise_settings.noise_router.temperature":"Temperature","noise_settings.noise_router.vegetation":"Vegetation","noise_settings.noise_router.continents":"Continents","noise_settings.noise_router.erosion":"Erosion","noise_settings.noise_router.depth":"Depth","noise_settings.noise_router.ridges":"Ridges","noise_settings.noise_router.initial_density_without_jaggedness":"Initial density without jaggedness","noise_settings.noise_router.final_density":"Final density","noise_settings.noise_router.vein_toggle":"Vein toggle","noise_settings.noise_router.vein_ridged":"Vein ridged","noise_settings.noise_router.vein_gap":"Vein gap","number_provider.max":"Max","number_provider.min":"Min","number_provider.n":"N","number_provider.p":"P","number_provider.scale":"Scale","number_provider.score":"Objective","number_provider.target":"Target","number_provider.type":"Type","number_provider.type.binomial":"Binomial","number_provider.type.constant":"Constant+","number_provider.type.number":"Constant","number_provider.type.object":"Uniform","number_provider.type.score":"Score","number_provider.type.uniform":"Uniform+","number_provider.value":"Number","placed_feature.string":"Reference","placed_feature.object":"Inline","placed_feature.feature":"Configured feature","placed_feature.placement":"Placement","placed_feature.placement.entry":"Modifier","player.advancements":"Advancements","player.advancements.entry":"Advancement","player.gamemode":"Game mode","player.level":"XP level","player.recipes":"Recipes","player.stats":"Statistics","player.stats.entry":"Statistic","pos_rule_test.always_true":"Always true","pos_rule_test.axis":"Axis","pos_rule_test.axis.x":"X","pos_rule_test.axis.y":"Y","pos_rule_test.axis.z":"Z","pos_rule_test.axis_aligned_linear_pos":"Axis aligned linear pos","pos_rule_test.linear_pos":"Linear pos","pos_rule_test.max_chance":"Max chance","pos_rule_test.max_dist":"Max dist","pos_rule_test.min_chance":"Min chance","pos_rule_test.min_dist":"Min dist","pos_rule_test.predicate_type":"Type","processor.block_age.mossiness":"Mossiness","processor.block_ignore.blocks":"Blocks","processor.block_ignore.blocks.entry":"State","processor.block_rot.integrity":"Integrity","processor.gravity.heightmap":"Heightmap","processor.gravity.offset":"Offset","processor.processor_type":"Type","processor.rule.rules":"Rules","processor.rule.rules.entry":"Rule","processor_list.processors":"Processors","processor_list.processors.entry":"Processor","processor_rule.input_predicate":"Input predicate","processor_rule.location_predicate":"Location predicate","processor_rule.output_nbt":"Output NBT","processor_rule.output_state":"Output state","processor_rule.position_predicate":"Position predicate","processors.object":"Inline","processors.string":"Reference","range.binomial":"Binomial","range.max":"Max","range.min":"Min","range.n":"N","range.number":"Exact","range.object":"Range","range.p":"P","range.type":"Type","range.uniform":"Uniform","recipe.type":"Type","recipe.group":"Group","recipe.group.help":"Identifier to group multiple recipes in the recipe book.","recipe.ingredients":"Ingredients","recipe.ingredient":"Ingredient","recipe.ingredient.item":"Item","recipe.ingredient.tag":"Item tag","recipe.pattern":"Pattern","recipe.pattern.entry":"Row","recipe.key":"Key","recipe.key.item":"Item","recipe.key.tag":"Item tag","recipe.result":"Result","recipe.result.item":"Item","recipe.result.count":"Count","recipe.experience":"Experience","recipe.cookingtime":"Cooking time","recipe.count":"Count","recipe.base":"Base","recipe.base.item":"Item","recipe.base.tag":"Item tag","recipe.addition":"Addition","recipe.addition.item":"Item","recipe.addition.tag":"Item tag","advancement.requirements":"Requirements","rule_test.always_true":"Always true","rule_test.block":"Block","rule_test.block_match":"Block match","rule_test.block_state":"State","rule_test.blockstate_match":"Block state match","rule_test.predicate_type":"Type","rule_test.probability":"Probability","rule_test.random_block_match":"Random block match","rule_test.random_blockstate_match":"Random block state match","rule_test.tag":"Tag","rule_test.tag_match":"Tag match","score_provider.name":"Name","score_provider.target":"Target","score_provider.type":"Type","score_provider.type.context":"Context+","score_provider.type.fixed":"Fixed","score_provider.type.string":"Context","slot.chest":"Chest","slot.feet":"Feet","slot.head":"Head","slot.legs":"Legs","slot.mainhand":"Mainhand","slot.offhand":"Offhand","statistic.stat":"Statistic","statistic.type":"Type","statistic.type.broken":"Broken","statistic.type.crafted":"Crafted","statistic.type.custom":"Custom","statistic.type.dropped":"Dropped","statistic.type.killed":"Killed","statistic.type.killedByTeam":"Killed by team","statistic.type.killed_by":"Killed by","statistic.type.mined":"Mined","statistic.type.picked_up":"Picked up","statistic.type.teamkill":"Killed team","statistic.type.used":"Used","statistic.value":"Value","status_effect.ambient":"Ambient","status_effect.amplifier":"Amplifier","status_effect.duration":"Duration","status_effect.visible":"Visible","structure_feature.biome_temp":"Biome temperature","structure_feature.biome_temp.cold":"Cold","structure_feature.biome_temp.warm":"Warm","structure_feature.cluster_probability":"Cluster probability","structure_feature.config":"Config","structure_feature.is_beached":"Is beached","structure_feature.large_probability":"Large probability","structure_feature.portal_type":"Portal type","structure_feature.portal_type.desert":"Desert","structure_feature.portal_type.jungle":"Jungle","structure_feature.portal_type.mountain":"Mountain","structure_feature.portal_type.nether":"Nether","structure_feature.portal_type.ocean":"Ocean","structure_feature.portal_type.standard":"Standard","structure_feature.portal_type.swamp":"Swamp","structure_feature.probability":"Probability","structure_feature.size":"Size","structure_feature.start_pool":"Start pool","structure_feature.type":"Type","structure_feature.type.mesa":"Mesa","structure_feature.type.normal":"Normal","structure_feature.biomes":"Biomes","structure_feature.biomes.entry":"Biome","structure_feature.adapt_noise":"Adapt noise","structure_feature.adapt_noise.help":"Whether it should add extra terrain below the structure.","structure_feature.spawn_overrides":"Spawn overrides","structure_feature.spawn_overrides.bounding_box":"Bounding box","structure_feature.spawn_overrides.bounding_box.piece":"Piece","structure_feature.spawn_overrides.bounding_box.full":"Full","structure_feature.spawn_overrides.spawns":"Spawns","structure_feature.spawn_overrides.spawns.entry":"Spawn","structure_feature.spawn_overrides.spawns.entry.type":"Type","structure_feature.spawn_overrides.spawns.entry.weight":"Weight","structure_feature.spawn_overrides.spawns.entry.minCount":"Min count","structure_feature.spawn_overrides.spawns.entry.maxCount":"Max count","structure_placement.type":"Type","structure_placement.concentric_rings.distance":"Distance","structure_placement.concentric_rings.spread":"Spread","structure_placement.concentric_rings.count":"Count","structure_placement.random_spread.spread_type":"Spread type","structure_placement.random_spread.spread_type.linear":"Linear","structure_placement.random_spread.spread_type.triangular":"Triangular","structure_placement.random_spread.spacing":"Spacing","structure_placement.random_spread.spacing.help":"The average distance in chunks between two structures of this type.","structure_placement.random_spread.separation":"Separation","structure_placement.random_spread.separation.help":"The minumum distance in chunks between two structures of this type.","structure_placement.random_spread.salt":"Salt","structure_placement.random_spread.locate_offset":"Locate offset","structure_set.string":"Reference","structure_set.object":"Inline","structure_set.structures":"Structures","structure_set.structures.entry":"Structure","structure_set.structures.entry.structure":"Structure feature","structure_set.structures.entry.weight":"Weight","structure_set.placement":"Placement","surface_builder.config":"Config","surface_builder.top_material":"Top material","surface_builder.type":"Type","surface_builder.under_material":"Under material","surface_builder.underwater_material":"Underwater material","table.type":"Type","table.type.block":"Block","table.type.chest":"Chest","table.type.empty":"Empty","table.type.entity":"Entity","table.type.fishing":"Fishing","table.type.generic":"Generic","tag.string":"Single","tag.list":"Multiple","tag.list.string":"Reference","tag.list.object":"Inline","tag.replace":"Replace","tag.values":"Values","terrain_shaper.offset":"Offset","terrain_shaper.factor":"Factor","terrain_shaper.jaggedness":"Jaggedness","terrain_spline.number":"Constant","terrain_spline.object":"Spline","terrain_spline.coordinate":"Coordinate","terrain_spline.coordinate.continents":"Continents","terrain_spline.coordinate.erosion":"Erosion","terrain_spline.coordinate.weirdness":"Weirdness","terrain_spline.coordinate.ridges":"Ridges","terrain_spline.points":"Points","terrain_spline.points.entry":"Point","terrain_spline.points.entry.location":"Location","terrain_spline.points.entry.value":"Value","terrain_spline.points.entry.derivative":"Derivative","template_element.element_type":"Type","template_element.elements":"Elements","template_element.feature":"Placed feature","template_element.location":"Location","template_element.processors":"Processors","template_element.projection":"Projection","template_element.projection.rigid":"Rigid","template_element.projection.terrain_matching":"Terrain matching","template_pool.elements":"Elements","template_pool.elements.entry":"Element","template_pool.elements.entry.element":"Element","template_pool.elements.entry.weight":"Weight","template_pool.fallback":"Fallback","template_pool.name":"Name","text_component":"Text component","text_component.boolean":"Boolean","text_component.list":"Array","text_component.number":"Number","text_component.object":"Object","text_component.object.text":"Plain text","text_component.object.translation":"Translated text","text_component.object.score":"Score value","text_component.object.selector":"Entity name","text_component.object.keybind":"Keybind","text_component.object.nbt":"NBT value","text_component.string":"String","text_component_object.block":"Block","text_component_object.bold":"Bold","text_component_object.clickEvent":"Click event","text_component_object.clickEvent.action":"Action","text_component_object.clickEvent.action.change_page":"Change page","text_component_object.clickEvent.action.copy_to_clipboard":"Copy to clipboard","text_component_object.clickEvent.action.open_file":"Open file","text_component_object.clickEvent.action.open_url":"Open url","text_component_object.clickEvent.action.run_command":"Run command","text_component_object.clickEvent.action.suggest_command":"Suggest command","text_component_object.clickEvent.value":"Value","text_component_object.color":"Color","text_component_object.entity":"Entity","text_component_object.extra":"Extra","text_component_object.font":"Font","text_component_object.hoverEvent":"Hover event","text_component_object.hoverEvent.action":"Action","text_component_object.hoverEvent.action.show_entity":"Show entity","text_component_object.hoverEvent.action.show_item":"Show item","text_component_object.hoverEvent.action.show_text":"Show text","text_component_object.hoverEvent.contents":"Contents","text_component_object.hoverEvent.value":"Value","text_component_object.insertion":"Insertion","text_component_object.interpret":"Interpret","text_component_object.italic":"Italic","text_component_object.keybind":"Keybind","text_component_object.nbt":"NBT","text_component_object.obfuscated":"Obfuscated","text_component_object.score":"Score","text_component_object.score.name":"Name","text_component_object.score.objective":"Objective","text_component_object.score.value":"Value","text_component_object.selector":"Selector","text_component_object.storage":"Storage","text_component_object.strikethrough":"Strikethrough","text_component_object.text":"Text","text_component_object.translate":"Translate","text_component_object.underlined":"Underlined","text_component_object.with":"With","texture.alias":"Alias","texture.reference":"Reference","tree_decorator.alter_ground.provider":"State provider","tree_decorator.beehive.probability":"Probability","tree_decorator.cocoa.probability":"Probability","tree_decorator.type":"Type","true":"True","trunk_placer.base_height":"Base height","trunk_placer.height_rand_a":"Height random A","trunk_placer.height_rand_b":"Height random B","trunk_placer.bending_trunk_placer.bend_length":"Bend length","trunk_placer.bending_trunk_placer.min_height_for_leaves":"Min height for leaves","trunk_placer.type":"Type","uniform_int.base":"Base","uniform_int.number":"Constant","uniform_int.object":"Uniform","uniform_int.spread":"Spread","unset":"Unset","update.pack_format":"Update the pack_format to %0%","vertical_anchor.absolute":"Absolute","vertical_anchor.above_bottom":"Above bottom","vertical_anchor.below_top":"Below top","world.bonus_chest":"Spawn bonus chest","world.generate_features":"Generate features","world.seed":"Seed","world_settings.bonus_chest":"Spawn bonus chest","world_settings.dimensions":"Dimensions","world_settings.generate_features":"Generate features","world_settings.seed":"World seed","worldgen.warning":"This feature is highly experimental and unstable. It can change in future versions. Expect the game to crash when creating worlds.","worldgen/biome_source.checkerboard":"Checkerboard","worldgen/biome_source.checkerboard.help":"Biomes generate in a checkerboard chunk pattern.","worldgen/biome_source.fixed":"Fixed","worldgen/biome_source.fixed.help":"One biome for the whole world.","worldgen/biome_source.multi_noise":"Multi noise","worldgen/biome_source.multi_noise.help":"Custom biome distribution with configurable parameters.","worldgen/biome_source.the_end":"The end","worldgen/biome_source.the_end.help":"Biome distribution for the End.","worldgen/biome_source.vanilla_layered":"Vanilla layered","worldgen/biome_source.vanilla_layered.help":"Biome distribution for the Overworld.","worldgen/block_placer_type.column_placer":"Column","worldgen/block_placer_type.double_plant_placer":"Double plant","worldgen/block_placer_type.simple_block_placer":"Simple","worldgen/block_state_provider_type.dual_noise_provider":"Dual noise provider","worldgen/block_state_provider_type.forest_flower_provider":"Flower forest","worldgen/block_state_provider_type.noise_threshold_provider":"Noise threshold provider","worldgen/block_state_provider_type.noise_provider":"Noise provider","worldgen/block_state_provider_type.plain_flower_provider":"Plain flower","worldgen/block_state_provider_type.randomized_int_state_provider":"Randomized int","worldgen/block_state_provider_type.rotated_block_provider":"Rotated block","worldgen/block_state_provider_type.simple_state_provider":"Simple state","worldgen/block_state_provider_type.weighted_state_provider":"Weighted state","worldgen/carver.canyon":"Canyon","worldgen/carver.cave":"Cave","worldgen/carver.nether_cave":"Nether cave","worldgen/carver.underwater_canyon":"Underwater canyon","worldgen/carver.underwater_cave":"Underwater cave","worldgen/chunk_generator.debug":"Debug world","worldgen/chunk_generator.flat":"Superflat","worldgen/chunk_generator.noise":"Default","worldgen/decorator.carving_mask":"Carving mask","worldgen/decorator.cave_surface":"Cave surface","worldgen/decorator.chance":"Chance","worldgen/decorator.count":"Count","worldgen/decorator.count_extra":"Count extra","worldgen/decorator.count_multilayer":"Count multilayer","worldgen/decorator.count_noise":"Count noise","worldgen/decorator.count_noise_biased":"Count noise biased","worldgen/decorator.dark_oak_tree":"Dark oak tree","worldgen/decorator.decorated":"Decorated","worldgen/decorator.end_gateway":"End gateway","worldgen/decorator.heightmap":"Heightmap","worldgen/decorator.heightmap_spread_double":"Heightmap spread double","worldgen/decorator.iceberg":"Iceberg","worldgen/decorator.lava_lake":"Lava lake","worldgen/decorator.nope":"Nothing","worldgen/decorator.range":"Range","worldgen/decorator.spread_32_above":"Spread 32 above","worldgen/decorator.square":"Square","worldgen/decorator.water_depth_threshold":"Water depth threshold","worldgen/density_function_type.abs":"Abs","worldgen/density_function_type.add":"Add","worldgen/density_function_type.beardifier":"Beardifier","worldgen/density_function_type.blend_alpha":"Blend alpha","worldgen/density_function_type.blend_density":"Blend density","worldgen/density_function_type.blend_offset":"Blend offset","worldgen/density_function_type.cache_2d":"Cache 2D","worldgen/density_function_type.cache_all_in_cell":"Cache all in cell","worldgen/density_function_type.cache_once":"Cache once","worldgen/density_function_type.clamp":"Clamp","worldgen/density_function_type.constant":"Constant","worldgen/density_function_type.cube":"Cube","worldgen/density_function_type.end_islands":"End islands","worldgen/density_function_type.flat_cache":"Flat cache","worldgen/density_function_type.half_negative":"Half negative","worldgen/density_function_type.interpolated":"Interpolated","worldgen/density_function_type.max":"Max","worldgen/density_function_type.min":"Min","worldgen/density_function_type.mul":"Mul","worldgen/density_function_type.noise":"Noise","worldgen/density_function_type.old_blended_noise":"Old blended noise","worldgen/density_function_type.quarter_negative":"Quarter negative","worldgen/density_function_type.range_choice":"Range Choice","worldgen/density_function_type.shift":"Shift","worldgen/density_function_type.shift_a":"Shift A","worldgen/density_function_type.shift_b":"Shift B","worldgen/density_function_type.shifted_noise":"Shifted noise","worldgen/density_function_type.slide":"Slide","worldgen/density_function_type.square":"Square","worldgen/density_function_type.squeeze":"Squeeze","worldgen/density_function_type.terrain_shaper_spline":"Terrain shaper spline","worldgen/density_function_type.weird_scaled_sampler":"Weird scaled sampler","worldgen/density_function_type.y_clamped_gradient":"Y clamped gradient","worldgen/feature.bamboo":"Bamboo","worldgen/feature.basalt_columns":"Basalt columns","worldgen/feature.basalt_pillar":"Basalt pillar","worldgen/feature.block_column":"Block column","worldgen/feature.block_pile":"Block pile","worldgen/feature.blue_ice":"Blue ice","worldgen/feature.bonus_chest":"Bonus chest","worldgen/feature.chorus_plant":"Chorus plant","worldgen/feature.coral_claw":"Coral claw","worldgen/feature.coral_mushroom":"Coral mushroom","worldgen/feature.coral_tree":"Coral tree","worldgen/feature.decorated":"Decorated","worldgen/feature.delta_feature":"Delta feature","worldgen/feature.desert_well":"Desert well","worldgen/feature.disk":"Disk","worldgen/feature.dripstone_cluster":"Dripstone cluster","worldgen/feature.end_gateway":"End gateway","worldgen/feature.end_island":"End island","worldgen/feature.end_spike":"End spike","worldgen/feature.fill_layer":"Fill layer","worldgen/feature.flower":"Flower","worldgen/feature.forest_rock":"Forest rock","worldgen/feature.fossil":"Fossil","worldgen/feature.freeze_top_layer":"Freeze top layer","worldgen/feature.geode":"Geode","worldgen/feature.glow_lichen":"Glow lichen","worldgen/feature.glowstone_blob":"Glowstone blob","worldgen/feature.growing_plant":"Growing plant","worldgen/feature.huge_brown_mushroom":"Huge brown mushroom","worldgen/feature.huge_fungus":"Huge fungus","worldgen/feature.huge_red_mushroom":"Huge red mushroom","worldgen/feature.ice_patch":"Ice patch","worldgen/feature.ice_spike":"Ice spike","worldgen/feature.iceberg":"Iceberg","worldgen/feature.kelp":"Kelp","worldgen/feature.lake":"Lake","worldgen/feature.large_dripstone":"Large dripstone","worldgen/feature.monster_room":"Monster room","worldgen/feature.nether_forest_vegetation":"Nether forest vegetation","worldgen/feature.netherrack_replace_blobs":"Netherrack replace blobs","worldgen/feature.no_bonemeal_flower":"No bonemeal flower","worldgen/feature.no_op":"Nothing","worldgen/feature.ore":"Ore","worldgen/feature.pointed_dripstone":"Pointed dripstone","worldgen/feature.random_boolean_selector":"Random boolean selector","worldgen/feature.random_patch":"Random patch","worldgen/feature.random_selector":"Random selector","worldgen/feature.replace_single_block":"Replace single block","worldgen/feature.root_system":"Root system","worldgen/feature.scattered_ore":"Scattered ore","worldgen/feature.sea_pickle":"Sea pickle","worldgen/feature.seagrass":"Seagrass","worldgen/feature.simple_block":"Simple block","worldgen/feature.simple_random_selector":"Simple random selector","worldgen/feature.small_dripstone":"Small dripstone","worldgen/feature.spring_feature":"Spring feature","worldgen/feature.tree":"Tree","worldgen/feature.twisting_vines":"Twisting vines","worldgen/feature.underwater_magma":"Underwater magma","worldgen/feature.vegetation_patch":"Vegetation patch","worldgen/feature.vines":"Vines","worldgen/feature.void_start_platform":"Void start platform","worldgen/feature.waterlogged_vegetation_patch":"Waterlogged vegetation patch","worldgen/feature.weeping_vines":"Weeping vines","worldgen/feature_size_type.three_layers_feature_size":"Three layers","worldgen/feature_size_type.two_layers_feature_size":"Two layers","worldgen/foliage_placer_type.acacia_foliage_placer":"Acacia","worldgen/foliage_placer_type.blob_foliage_placer":"Blob","worldgen/foliage_placer_type.bush_foliage_placer":"Bush","worldgen/foliage_placer_type.dark_oak_foliage_placer":"Dark oak","worldgen/foliage_placer_type.fancy_foliage_placer":"Fancy","worldgen/foliage_placer_type.jungle_foliage_placer":"Jungle","worldgen/foliage_placer_type.mega_pine_foliage_placer":"Mega pine","worldgen/foliage_placer_type.pine_foliage_placer":"Pine","worldgen/foliage_placer_type.spruce_foliage_placer":"Spruce","worldgen/material_condition.above_preliminary_surface":"Above preliminary surface","worldgen/material_condition.biome":"Biome","worldgen/material_condition.hole":"Hole","worldgen/material_condition.noise_threshold":"Noise threshold","worldgen/material_condition.not":"Not","worldgen/material_condition.steep":"Steep","worldgen/material_condition.stone_depth":"Stone depth","worldgen/material_condition.temperature":"Temperature","worldgen/material_condition.vertical_gradient":"Vertical gradient","worldgen/material_condition.water":"Water","worldgen/material_condition.y_above":"Y above","worldgen/material_rule.bandlands":"Bandlands","worldgen/material_rule.block":"Block","worldgen/material_rule.condition":"Condition","worldgen/material_rule.sequence":"Sequence","worldgen/placement_modifier_type.biome":"Biome","worldgen/placement_modifier_type.block_predicate_filter":"Block predicate filter","worldgen/placement_modifier_type.carving_mask":"Carving mask","worldgen/placement_modifier_type.count":"Count","worldgen/placement_modifier_type.count_on_every_layer":"Count on every layer","worldgen/placement_modifier_type.environment_scan":"Environment scan","worldgen/placement_modifier_type.height_range":"Height range","worldgen/placement_modifier_type.heightmap":"Heightmap","worldgen/placement_modifier_type.in_square":"In square","worldgen/placement_modifier_type.noise_based_count":"Noise based count","worldgen/placement_modifier_type.noise_threshold_count":"Noise threshold count","worldgen/placement_modifier_type.random_offset":"Random offset","worldgen/placement_modifier_type.rarity_filter":"Rarity filter","worldgen/placement_modifier_type.surface_relative_threshold_filter":"Surface relative threshold filter","worldgen/placement_modifier_type.surface_water_depth_filter":"Surface water depth filter","worldgen/structure_placement.concentric_rings":"Concentric rings","worldgen/structure_placement.random_spread":"Random spread","worldgen/structure_pool_element.empty_pool_element":"Empty","worldgen/structure_pool_element.feature_pool_element":"Feature","worldgen/structure_pool_element.legacy_single_pool_element":"Legacy single","worldgen/structure_pool_element.list_pool_element":"List","worldgen/structure_pool_element.single_pool_element":"Single","worldgen/structure_processor.blackstone_replace":"Blackstone replace","worldgen/structure_processor.block_age":"Block age","worldgen/structure_processor.block_ignore":"Block ignore","worldgen/structure_processor.block_rot":"Block rot","worldgen/structure_processor.gravity":"Gravity","worldgen/structure_processor.jigsaw_replacement":"Jigsaw replacement","worldgen/structure_processor.lava_submerged_block":"Lava submerged block","worldgen/structure_processor.nop":"Nothing","worldgen/structure_processor.rule":"Rule","worldgen/tree_decorator_type.alter_ground":"Alter ground","worldgen/tree_decorator_type.beehive":"Beehive","worldgen/tree_decorator_type.cocoa":"Cocoa","worldgen/tree_decorator_type.leave_vine":"Leave vine","worldgen/tree_decorator_type.trunk_vine":"Trunk vine","worldgen/trunk_placer_type.bending_trunk_placer":"Bending","worldgen/trunk_placer_type.dark_oak_trunk_placer":"Dark oak","worldgen/trunk_placer_type.fancy_trunk_placer":"Fancy","worldgen/trunk_placer_type.forking_trunk_placer":"Forking","worldgen/trunk_placer_type.giant_trunk_placer":"Giant","worldgen/trunk_placer_type.mega_jungle_trunk_placer":"Mega jungle","worldgen/trunk_placer_type.straight_trunk_placer":"Straight"}');export default e; -//# sourceMappingURL=en.a3c526c1.js.map diff --git a/assets/en.a3c526c1.js.map b/assets/en.a3c526c1.js.map deleted file mode 100644 index 76780b92..00000000 --- a/assets/en.a3c526c1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"en.a3c526c1.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/assets/en.b4f154b3.js b/assets/en.b4f154b3.js new file mode 100644 index 00000000..d6277e7f --- /dev/null +++ b/assets/en.b4f154b3.js @@ -0,0 +1,2 @@ +var e=JSON.parse('{"advancement.criteria":"Criteria","advancement.display":"Display","advancement.display.announce_to_chat":"Announce to chat","advancement.display.background":"Background","advancement.display.description":"Description","advancement.display.frame":"Frame","advancement.display.frame.challenge":"Challenge","advancement.display.frame.goal":"Goal","advancement.display.frame.task":"Task","advancement.display.help":"If present, advancement will be visible in the advancement tabs.","advancement.display.hidden":"Hidden","advancement.display.icon":"Icon","advancement.display.icon.item":"Icon item","advancement.display.icon.nbt":"Icon NBT","advancement.display.show_toast":"Show toast","advancement.display.title":"Title","advancement.parent":"Parent advancement","advancement.rewards":"Rewards","advancement.rewards.experience":"Experience","advancement.rewards.function":"Function","advancement.rewards.loot":"Loot tables","advancement.rewards.recipes":"Recipes","advancement_trigger.bee_nest_destroyed":"Bee nest destroyed","advancement_trigger.bred_animals":"Bred animals","advancement_trigger.brewed_potion":"Brewed potion","advancement_trigger.changed_dimension":"Changed dimension","advancement_trigger.channeled_lightning":"Channeled lightning","advancement_trigger.construct_beacon":"Construct beacon","advancement_trigger.consume_item":"Consume item","advancement_trigger.cured_zombie_villager":"Cured zombie villager","advancement_trigger.effects_changed":"Effects changed","advancement_trigger.enchanted_item":"Enchanted item","advancement_trigger.enter_block":"Enter block","advancement_trigger.entity_hurt_player":"Entity hurt player","advancement_trigger.entity_killed_player":"Entity killed player","advancement_trigger.fall_from_height":"Fall from height","advancement_trigger.filled_bucket":"Filled bucket","advancement_trigger.fishing_rod_hooked":"Fishing rod hooked","advancement_trigger.hero_of_the_village":"Hero of the village","advancement_trigger.impossible":"Impossible","advancement_trigger.inventory_changed":"Inventory changed","advancement_trigger.item_durability_changed":"Item durability changed","advancement_trigger.item_used_on_block":"Item used on block","advancement_trigger.killed_by_crossbow":"Killed by crossbow","advancement_trigger.levitation":"Levitation","advancement_trigger.location":"Location","advancement_trigger.nether_travel":"Nether travel","advancement_trigger.placed_block":"Placed block","advancement_trigger.player_generates_container_loot":"Player generates container loot","advancement_trigger.player_hurt_entity":"Player hurt entity","advancement_trigger.player_killed_entity":"Player killed entity","advancement_trigger.recipe_unlocked":"Recipe unlocked","advancement_trigger.ride_entity_in_lava":"Ride entity in lava","advancement_trigger.safely_harvest_honey":"Safely harvest honey","advancement_trigger.shot_crossbow":"Shot crossbow","advancement_trigger.slept_in_bed":"Slept in bed","advancement_trigger.slide_down_block":"Slide down block","advancement_trigger.summoned_entity":"Summoned entity","advancement_trigger.tame_animal":"Tame animal","advancement_trigger.target_hit":"Target hit","advancement_trigger.thrown_item_picked_up_by_entity":"Thrown item picked up by entity","advancement_trigger.tick":"Tick","advancement_trigger.used_ender_eye":"Used ender eye","advancement_trigger.used_totem":"Used totem","advancement_trigger.villager_trade":"Villager trade","advancement_trigger.voluntary_exile":"Voluntary exile","attribute.generic_armor":"Armor","attribute.generic_armor_toughness":"Armor toughness","attribute.generic_attack_damage":"Attack damage","attribute.generic_attack_knockback":"Attack knockback","attribute.generic_attack_speed":"Attack speed","attribute.generic_flying_speed":"Flying speed","attribute.generic_follow_range":"Follow range","attribute.generic_knockback_resistance":"Knockback resistance","attribute.generic_luck":"Luck","attribute.generic_max_health":"Max health","attribute.generic_movement_speed":"Movement speed","attribute.horse.jump_strength":"Jump strength","attribute.zombie.spawn_reinforcements":"Spawn reinforcements","attribute_modifier.amount":"Amount","attribute_modifier.attribute":"Attribute","attribute_modifier.name":"Name","attribute_modifier.operation":"Operation","attribute_modifier.operation.addition":"Addition","attribute_modifier.operation.multiply_base":"Multiply base","attribute_modifier.operation.multiply_total":"Multiply total","attribute_modifier.slot":"Slots","attribute_modifier.slot.list":"Multiple","attribute_modifier.slot.string":"Single","axis.x":"X","axis.y":"Y","axis.z":"Z","badge.experimental":"Experimental","badge.unstable":"Unstable","biome.carvers":"Carvers","biome.carvers.air":"Air","biome.carvers.liquid":"Liquid","biome.category":"Category","biome.creature_spawn_probability":"Creature spawn probability","biome.depth":"Depth","biome.depth.help":"Raises or lowers the terrain. Positive values are considered land and negative are oceans.","biome.downfall":"Downfall","biome.effects":"Effects","biome.effects.additions_sound":"Additions sound","biome.effects.additions_sound.sound":"Sound","biome.effects.additions_sound.tick_chance":"Tick chance","biome.effects.ambient_sound":"Ambient sound","biome.effects.fog_color":"Fog color","biome.effects.foliage_color":"Foliage color","biome.effects.grass_color":"Grass color","biome.effects.grass_color_modifier":"Grass color modifier","biome.effects.grass_color_modifier.dark_forest":"Dark forest","biome.effects.grass_color_modifier.none":"None","biome.effects.grass_color_modifier.swamp":"Swamp","biome.effects.mood_sound":"Mood sound","biome.effects.mood_sound.block_search_extent":"Block search extent","biome.effects.mood_sound.offset":"Offset","biome.effects.mood_sound.sound":"Sound","biome.effects.mood_sound.tick_delay":"Tick delay","biome.effects.music":"Music","biome.effects.music.max_delay":"Max delay","biome.effects.music.min_delay":"Min delay","biome.effects.music.replace_current_music":"Replace current music","biome.effects.music.sound":"Sound","biome.effects.particle":"Particle","biome.effects.particle.options":"Options","biome.effects.particle.options.type":"Particle type","biome.effects.particle.probability":"Probability","biome.effects.sky_color":"Sky color","biome.effects.water_color":"Water color","biome.effects.water_fog_color":"Water fog color","biome.features":"Placed features","biome.features.entry":"Step %0%","biome.features.entry.entry":"Feature","biome.player_spawn_friendly":"Player spawn friendly","biome.player_spawn_friendly.help":"If true, the world spawn will be preferred in this biome.","biome.precipitation":"Precipitation","biome.precipitation.none":"None","biome.precipitation.rain":"Rain","biome.precipitation.snow":"Snow","biome.scale":"Scale","biome.scale.help":"Vertically stretches the terrain. Lower values produce flatter terrain.","biome.spawn_costs":"Spawn costs","biome.spawn_costs.charge":"Charge","biome.spawn_costs.energy_budget":"Energy budget","biome.spawners":"Spawners","biome.spawners.ambient":"Ambient","biome.spawners.creature":"Creature","biome.spawners.entry":"Spawn","biome.spawners.entry.maxCount":"Max count","biome.spawners.entry.minCount":"Min count","biome.spawners.entry.type":"Type","biome.spawners.entry.weight":"Weight","biome.spawners.misc":"Miscellaneous","biome.spawners.monster":"Monster","biome.spawners.water_ambient":"Water ambient","biome.spawners.water_creature":"Water creature","biome.starts":"Structure starts","biome.starts.entry":"Structure","biome.starts.help":"List of configured structure features.","biome.surface_builder":"Surface builder","biome.temperature":"Temperature","biome.temperature_modifier":"Temperature modifier","biome.temperature_modifier.frozen":"Frozen","biome.temperature_modifier.none":"None","block.block":"Block ID","block.nbt":"NBT","block.state":"Block state","block.tag":"Block tag","block_definition.multipart":"Multipart","block_definition.variants":"Variants","block_definition.multipart.entry":"Part","block_definition.multipart.entry.when":"When","block_definition.multipart.entry.apply":"Apply","block_placer.column_placer.extra_size":"Extra size","block_placer.column_placer.min_size":"Min size","block_placer.type":"Type","block_predicate.type":"Type","block_predicate.all_of.predicates":"Predicates","block_predicate.any_of.predicates":"Predicates","block_predicate.inside_world_bounds.offset":"Offset","block_predicate.matching_blocks.offset":"Offset","block_predicate.matching_blocks.blocks":"Blocks","block_predicate.matching_blocks.blocks.entry":"Block","block_predicate.matching_fluids.offset":"Offset","block_predicate.matching_fluids.fluids":"Fluids","block_predicate.matching_fluids.fluids.entry":"Fluid","block_predicate.would_survive.offset":"Offset","block_predicate.would_survive.state":"State","block_predicate_type.all_of":"All of","block_predicate_type.any_of":"Any of","block_predicate_type.inside_world_bounds":"Inside world bounds","block_predicate_type.matching_blocks":"Matching blocks","block_predicate_type.matching_fluids":"Matching fluids","block_predicate_type.not":"Not","block_predicate_type.replaceable":"Replaceable","block_predicate_type.solid":"Solid","block_predicate_type.true":"True","block_predicate_type.would_survive":"Would survive","block_predicate.not.predicate":"Predicate","block_state.Name":"Name","block_state.Properties":"Properties","block_state_provider.dual_noise_provider.seed":"Seed","block_state_provider.dual_noise_provider.noise":"Noise","block_state_provider.dual_noise_provider.scale":"Scale","block_state_provider.dual_noise_provider.variety":"Variety","block_state_provider.dual_noise_provider.slow_noise":"Slow noise","block_state_provider.dual_noise_provider.slow_scale":"Slow scale","block_state_provider.dual_noise_provider.states":"States","block_state_provider.noise_threshold_provider.seed":"Seed","block_state_provider.noise_threshold_provider.noise":"Noise","block_state_provider.noise_threshold_provider.scale":"Scale","block_state_provider.noise_threshold_provider.threshold":"Threshold","block_state_provider.noise_threshold_provider.high_chance":"High chance","block_state_provider.noise_threshold_provider.default_state":"Default state","block_state_provider.noise_threshold_provider.low_states":"Low states","block_state_provider.noise_threshold_provider.high_states":"High states","block_state_provider.noise_provider.seed":"Seed","block_state_provider.noise_provider.noise":"Noise","block_state_provider.noise_provider.scale":"Scale","block_state_provider.noise_provider.states":"States","block_state_provider.randomized_int_state_provider.property":"Property","block_state_provider.randomized_int_state_provider.values":"Values","block_state_provider.randomized_int_state_provider.source":"Source","block_state_provider.rotated_block_provider.state":"State","block_state_provider.simple_state_provider.state":"State","block_state_provider.type":"Type","block_state_provider.weighted_state_provider.entries":"Entries","block_state_provider.weighted_state_provider.entries.entry.data":"State","block_state_provider.weighted_state_provider.entries.entry.weight":"Weight","carver.config":"Config","carver.config.aquifers_enabled":"Aquifers enabled","carver.config.canyon.bottom_inclusive":"Bottom inclusive","carver.config.canyon.top_inclusive":"Top inclusive","carver.config.canyon.vertical_rotation":"Vertical rotation","carver.config.canyon.shape":"Shape","carver.config.canyon.shape.distance_factor":"Distance factor","carver.config.canyon.shape.thickness":"Thickness","carver.config.canyon.shape.width_smoothness":"Width smoothness","carver.config.canyon.shape.horizontal_radius_factor":"Horizontal radius factor","carver.config.canyon.shape.vertical_radius_default_factor":"Vertical radius default factor","carver.config.canyon.shape.vertical_radius_center_factor":"Vertical radius center factor","carver.config.cave.horizontal_radius_multiplier":"Horizontal radius multiplier","carver.config.cave.vertical_radius_multiplier":"Vertical radius multiplier","carver.config.cave.floor_level":"Floor level","carver.config.debug_settings":"Debug settings","carver.config.debug_settings.debug_mode":"Debug mode","carver.config.debug_settings.air_state":"Air state","carver.config.debug_settings.water_state":"Water state","carver.config.debug_settings.lava_state":"Lava state","carver.config.debug_settings.barrier_state":"Barrier state","carver.config.lava_level":"Lava level","carver.config.probability":"Probability","carver.config.y":"Y","carver.config.yScale":"Y scale","carver.type":"Type","cave_surface.ceiling":"Ceiling","cave_surface.floor":"Floor","children":"Children","children.entry":"Entry","condition.alternative.terms":"Terms","condition.block_state_property.block":"Block","condition.block_state_property.properties":"Block state","condition.condition":"Condition","condition.damage_source":"Damage source","condition.entity_properties.entity":"Entity","condition.entity_scores.entity":"Entity","condition.entity_scores.scores":"Scores","condition.entry":"Predicate","condition.inverted.term":"Term","condition.item":"Item","condition.killed_by_player.inverse":"Inverted","condition.list":"Multiple","condition.location":"Location","condition.location_check.offsetX":"X offset","condition.location_check.offsetY":"Y offset","condition.location_check.offsetZ":"Z offset","condition.object":"Single","condition.random_chance.chance":"Chance","condition.random_chance_with_looting.chance":"Chance","condition.random_chance_with_looting.looting_multiplier":"Looting multiplier","condition.reference.name":"Predicate name","condition.table_bonus.chances":"Chances","condition.table_bonus.chances.entry":"Chance","condition.table_bonus.enchantment":"Enchantment","condition.time_check.period":"Period","condition.time_check.period.help":"If present, time will be modulo-divided by this value. For example, if set to 24000, value will operate on a time period of days.","condition.time_check.value":"Value","condition.value_check.range":"Range","condition.value_check.value":"Value","condition.weather_check.raining":"Raining","condition.weather_check.thundering":"Thundering","conditions":"Conditions","conditions.entry":"Condition","conditions.list":"Conditions","conditions.object":"Legacy","copy_source.block_entity":"Block entity","copy_source.direct_killer":"Direct killer","copy_source.killer":"Killer","copy_source.killer_player":"Killer player","copy_source.this":"This","criterion.bee_nest_destroyed.block":"Block","criterion.bee_nest_destroyed.num_bees_inside":"Number of bees inside","criterion.bred_animals.child":"Child","criterion.bred_animals.parent":"Parent","criterion.bred_animals.partner":"Partner","criterion.brewed_potion.potion":"Potion","criterion.changed_dimension.from":"From","criterion.changed_dimension.to":"To","criterion.channeled_lightning.victims":"Victims","criterion.channeled_lightning.victims.entry":"Entity","criterion.conditions":"Conditions","criterion.construct_beacon.beacon_level":"Pyramid level","criterion.consume_item.item":"Item","criterion.cured_zombie_villager.villager":"Villager","criterion.cured_zombie_villager.zombie":"Zombie","criterion.effects_changed.effects":"Effects","criterion.enchanted_item.item":"Item","criterion.enchanted_item.levels":"XP level","criterion.enter_block.block":"Block","criterion.enter_block.state":"States","criterion.entity_hurt_player.damage":"Damage","criterion.entity_killed_player.entity":"Source entity","criterion.entity_killed_player.killing_blow":"Killing blow","criterion.fall_from_height.distance":"Distance","criterion.fall_from_height.start_position":"Start position","criterion.filled_bucket.item":"Item","criterion.fishing_rod_hooked.entity":"Pulled entity","criterion.fishing_rod_hooked.item":"Item","criterion.hero_of_the_village.location":"Location","criterion.inventory_changed.items":"Items","criterion.inventory_changed.items.entry":"Item","criterion.inventory_changed.slots":"Slots","criterion.inventory_changed.slots.empty":"Slots empty","criterion.inventory_changed.slots.full":"Slots full","criterion.inventory_changed.slots.occupied":"Slots occupied","criterion.item_durability_changed.delta":"Delta","criterion.item_durability_changed.durability":"Durability","criterion.item_durability_changed.item":"Item","criterion.item_used_on_block.item":"Item","criterion.item_used_on_block.location":"Location","criterion.killed_by_crossbow.unique_entity_types":"Amount of unique entity types","criterion.killed_by_crossbow.victims":"Victims","criterion.killed_by_crossbow.victims.entry":"Entity","criterion.levitation.distance":"Distance","criterion.levitation.duration":"Duration","criterion.location.location":"Location","criterion.nether_travel.distance":"Distance","criterion.nether_travel.entered":"Entered location","criterion.nether_travel.exited":"Exited location","criterion.nether_travel.start_position":"Start position","criterion.placed_block.block":"Block","criterion.placed_block.item":"Item","criterion.placed_block.location":"Location","criterion.placed_block.state":"States","criterion.player":"Player","criterion.player_generates_container_loot.loot_table":"Loot table","criterion.player_hurt_entity.damage":"Damage","criterion.player_hurt_entity.entity":"Victim entity","criterion.player_killed_entity.entity":"Victim entity","criterion.player_killed_entity.killing_blow":"Killing blow","criterion.recipe_unlocked.recipe":"Recipe","criterion.ride_entity_in_lava.distance":"Distance","criterion.ride_entity_in_lava.start_position":"Start position","criterion.rod":"Rod","criterion.safely_harvest_honey.block":"Block","criterion.safely_harvest_honey.item":"Item","criterion.shot_crossbow.item":"Item","criterion.slept_in_bed.location":"Location","criterion.slide_down_block.block":"Block","criterion.summoned_entity.entity":"Entity","criterion.tame_animal.entity":"Animal","criterion.target_hit.projectile":"Projectile","criterion.target_hit.shooter":"Shooter","criterion.target_hit.signal_strength":"Signal strength","criterion.thrown_item_picked_up_by_entity.entity":"Entity","criterion.thrown_item_picked_up_by_entity.item":"Item","criterion.trigger":"Trigger","criterion.used_ender_eye.distance":"Distance","criterion.used_totem.item":"Totem item","criterion.villager_trade.item":"Purchased item","criterion.villager_trade.villager":"Villager","criterion.voluntary_exile.location":"Location","damage.blocked":"Blocked","damage.dealt":"Damage dealt","damage.source_entity":"Source entity","damage.taken":"Damage taken","damage.type":"Damage type","damage_source.bypasses_armor":"Bypass armor","damage_source.bypasses_invulnerability":"Void","damage_source.bypasses_magic":"Starvation","damage_source.direct_entity":"Direct entity","damage_source.is_explosion":"Explosion","damage_source.is_fire":"Fire","damage_source.is_lightning":"Lightning","damage_source.is_magic":"Magic","damage_source.is_projectile":"Projectile","damage_source.source_entity":"Source entity","decoration_step.raw_generation":"Raw generation","decoration_step.lakes":"Lakes","decoration_step.local_modifications":"Local modifications","decoration_step.underground_structures":"Underground structures","decoration_step.strongholds":"Strongholds","decoration_step.underground_ores":"Underground ores","decoration_step.underground_decoration":"Underground decoration","decoration_step.fluid_springs":"Fluid springs","decoration_step.vegetal_decoration":"Vegetal decoration","decoration_step.top_layer_modification":"Top layer modification","decorator.block_predicate_filter.predicate":"Predicate","decorator.carving_mask.step":"Step","decorator.cave_surface.surface":"Surface","decorator.cave_surface.floor_to_ceiling_search_range":"Search range","decorator.cave_surface.floor_to_ceiling_search_range.help":"Floor to ceiling search range.","decorator.cave_surface.allow_water":"Allow water","decorator.chance.chance":"Chance","decorator.config":"Config","decorator.count.count":"Count","decorator.count_extra.count":"Count","decorator.count_extra.extra_chance":"Extra chance","decorator.count_extra.extra_count":"Extra count","decorator.count_multilayer.count":"Count","decorator.count_on_every_layer.count":"Count","decorator.count_noise.above_noise":"Above noise","decorator.count_noise.below_noise":"Below noise","decorator.count_noise.noise_level":"Noise level","decorator.noise_threshold_count.above_noise":"Above noise","decorator.noise_threshold_count.below_noise":"Below noise","decorator.noise_threshold_count.noise_level":"Noise level","decorator.count_noise_biased.noise_factor":"Noise factor","decorator.count_noise_biased.noise_offset":"Noise offset","decorator.count_noise_biased.noise_to_count_ratio":"Noise to count ratio","decorator.noise_based_count.noise_factor":"Noise factor","decorator.noise_based_count.noise_offset":"Noise offset","decorator.noise_based_count.noise_to_count_ratio":"Noise to count ratio","decorator.decorated.inner":"Inner","decorator.decorated.outer":"Outer","decorator.depth_average.baseline":"Baseline","decorator.depth_average.spread":"Spread","decorator.environment_scan.direction_of_search":"Direction","decorator.environment_scan.max_steps":"Max steps","decorator.environment_scan.target_condition":"Target condition","decorator.glowstone.count":"Count","decorator.heightmap.heightmap":"Heightmap","decorator.heightmap_spread_double.heightmap":"Heightmap","decorator.lava_lake.chance":"Chance","decorator.range.bottom_inclusive":"Bottom inclusive","decorator.range.top_inclusive":"Top inclusive","decorator.range_biased_to_bottom.bottom_inclusive":"Bottom inclusive","decorator.range_biased_to_bottom.top_inclusive":"Top inclusive","decorator.range_biased_to_bottom.cutoff":"Cutoff","decorator.range_very_biased_to_bottom.bottom_inclusive":"Bottom inclusive","decorator.range_very_biased_to_bottom.top_inclusive":"Top inclusive","decorator.range_very_biased_to_bottom.cutoff":"Cutoff","decorator.range.height":"Height","decorator.height_range.height":"Height","decorator.random_offset.xz_spread":"XZ spread","decorator.random_offset.y_spread":"Y spread","decorator.surface_relative_threshold_filter.heightmap":"Heightmap","decorator.surface_relative_threshold_filter.min_inclusive":"Min inclusive","decorator.surface_relative_threshold_filter.max_inclusive":"Max inclusive","decorator.water_depth_threshold.max_water_depth":"Max water depth","decorator.surface_water_depth_filter.max_water_depth":"Max water depth","decorator.type":"Type","density_function.string":"Reference","density_function.number":"Constant","density_function.object":"Inline","density_function.type":"Type","density_function.argument":"Argument","density_function.argument1":"Argument 1","density_function.argument2":"Argument 2","density_function.input":"Input","density_function.min":"Min","density_function.max":"Max","density_function.xz_scale":"XZ scale","density_function.y_scale":"Y scale","density_function.min_inclusive":"Min inclusive","density_function.when_in_range":"When in range","density_function.when_out_of_range":"When out of range","density_function.noise":"Noise parameters","density_function.shift_x":"Shift X","density_function.shift_y":"Shift Y","density_function.shift_z":"Shift Z","density_function.spline":"Spline","density_function.min_value":"Min value","density_function.max_value":"Max value","density_function.continentalness":"Continentalness","density_function.erosion":"Erosion","density_function.weirdness":"Weirdness","density_function.rarity_value_mapper":"Rarity value mapper","density_function.from_y":"From Y","density_function.to_y":"To Y","density_function.from_value":"From value","density_function.to_value":"To value","dimension":"Dimension","dimension.generator":"Generator","dimension.generator.biome_source":"Biome source","dimension.overworld":"Overworld","dimension.the_end":"The end","dimension.the_nether":"The nether","dimension.type":"Dimension type","dimension.type.object":"Inline","dimension.type.string":"Reference","dimension_type.ambient_light":"Ambient light","dimension_type.ambient_light.help":"How much ambient light there is. Should be a value between 0.0 and 1.0.","dimension_type.bed_works":"Bed works","dimension_type.bed_works.help":"If true, players can use beds to set their spawn and advance time. If false, beds will blow up when used.","dimension_type.coordinate_scale":"Coordinate scale","dimension_type.coordinate_scale.help":"Multiplier applied to coordinates when traveling between dimensions using a nether portal or /execute in.","dimension_type.effects":"Effects","dimension_type.effects.help":"Sky effects","dimension_type.effects.overworld":"Overworld","dimension_type.effects.the_end":"The end","dimension_type.effects.the_nether":"The nether","dimension_type.fixed_time":"Fixed time","dimension_type.fixed_time.help":"Setting this value will keep the sun in a fixed position.","dimension_type.has_ceiling":"Has ceiling","dimension_type.has_ceiling.help":"Affects the weather, map items and respawning rules.","dimension_type.has_raids":"Has raids","dimension_type.has_raids.help":"If true, players with the Bad Omen effect can cause a raid.","dimension_type.has_skylight":"Has skylight","dimension_type.has_skylight.help":"Affects the weather, lighting engine and respawning rules.","dimension_type.height":"Height","dimension_type.height.help":"The total height in which blocks can exist. Max Y = Min Y + Height.","dimension_type.infiniburn":"Infiniburn","dimension_type.infiniburn.help":"Block tag defining what blocks keep fire infinitely burning.","dimension_type.logical_height":"Logical height","dimension_type.logical_height.help":"Portals can\'t spawn and chorus fruit can\'t teleport players above this height.","dimension_type.min_y":"Min Y","dimension_type.min_y.help":"The minimum height in which blocks can exist.","dimension_type.name":"Name","dimension_type.natural":"Natural","dimension_type.natural.help":"If true, portals will spawn zombified piglins. If false, compasses and clocks spin randomly.","dimension_type.piglin_safe":"Piglin safe","dimension_type.piglin_safe.help":"If false, piglins will shake and convert to zombified piglins.","dimension_type.respawn_anchor_works":"Respawn anchor works","dimension_type.respawn_anchor_works.help":"If true, players can charge and use respawn anchors to set their spawn. If false, respawn anchors will blow up when used.","dimension_type.ultrawarm":"Ultrawarm","dimension_type.ultrawarm.help":"If true, water will evaporate and sponges will dry.","direction.up":"Up","direction.down":"Down","direction.north":"North","direction.east":"East","direction.south":"South","direction.west":"West","display_position.firstperson_righthand":"Firstperson righthand","display_position.firstperson_lefthand":"Firstperson lefthand","display_position.thirdperson_righthand":"Thirdperson righthand","display_position.thirdperson_lefthand":"Thirdperson lefthand","display_position.gui":"GUI","display_position.head":"Head","display_position.ground":"Ground","display_position.fixed":"Fixed","distance.absolute":"Absolute","distance.horizontal":"Horizontal","distance.x":"X","distance.y":"Y","distance.z":"Z","enchantment.aqua_affinity":"Aqua affinity","enchantment.bane_of_arthropods":"Bane of arthropods","enchantment.binding_curse":"Curse of binding","enchantment.blast_protection":"Blast protection","enchantment.channeling":"Channeling","enchantment.depth_strider":"Depth strider","enchantment.efficiency":"Efficiency","enchantment.enchantment":"Enchantment","enchantment.feather_falling":"Feather falling","enchantment.fire_aspect":"Fire aspect","enchantment.fire_protection":"Fire protection","enchantment.flame":"Flame","enchantment.fortune":"Fortune","enchantment.frost_walker":"Frost walker","enchantment.impaling":"Impaling","enchantment.infinity":"Infinity","enchantment.knockback":"Knockback","enchantment.levels":"Levels","enchantment.looting":"Looting","enchantment.loyalty":"Loyalty","enchantment.luck_of_the_sea":"Luck of the sea","enchantment.lure":"Lure","enchantment.mending":"Mending","enchantment.multishot":"Multishot","enchantment.piercing":"Piercing","enchantment.power":"Power","enchantment.projectile_protection":"Projectile protection","enchantment.protection":"Protection","enchantment.punch":"Punch","enchantment.quick_charge":"Quick charge","enchantment.respiration":"Respiration","enchantment.riptide":"Riptide","enchantment.sharpness":"Sharpness","enchantment.silk_touch":"Silk touch","enchantment.smite":"Smite","enchantment.sweeping":"Sweeping edge","enchantment.thorns":"Thorns","enchantment.unbreaking":"Unbreaking","enchantment.vanishing_curse":"Curse of vanishing","entity.distance":"Distance","entity.effects":"Effects","entity.equipment":"Equipment","entity.fishing_hook":"Fishing hook","entity.fishing_hook.in_open_water":"In open water","entity.flags":"Flags","entity.isBaby":"Baby","entity.isOnFire":"On fire","entity.isSneaking":"Sneaking","entity.isSprinting":"Sprinting","entity.isSwimming":"Swimming","entity.location":"Location","entity.nbt":"NBT","entity.player":"Player","entity.targeted_entity":"Targeted entity","entity.team":"Team","entity.type":"Entity","entity.vehicle":"Vehicle","entity_source.direct_killer":"Direct killer","entity_source.killer":"Killer","entity_source.killer_player":"Killer player","entity_source.this":"This","entry":"Entry","error":"Error","error.disallowed_tag_prefix":"Tags cannot start with \\"#\\" here","error.disallowed_tag":"Tags aren\'t allowed here","error.expected_boolean":"Expected a boolean","error.expected_integer":"Expected an integer","error.expected_json":"Expected JSON","error.expected_list":"Expected an array","error.expected_number":"Expected a number","error.expected_object":"Expected an object","error.expected_range":"Expected a range","error.expected_string":"Expected a string","error.expected_uniform_int":"Expected a uniform int","error.expected_tag":"Expected a tag starting with \\"#\\"","error.height_multiple":"Height has to be multiple of %0%","error.invalid_empty_list":"Array cannot be empty","error.invalid_enum_option":"Invalid option \\"%0%\\"","error.invalid_list_range.exact":"Expected a list with length %1%","error.invalid_list_range.larger":"List length %0% is larger than maximum %1%","error.invalid_list_range.smaller":"List length %0% is smaller than minimum %1%","error.invalid_number_range.between":"Expected a number between %1% and %2%","error.invalid_number_range.larger":"Value %0% is larger than maximum %1%","error.invalid_number_range.smaller":"Value %0% is smaller than minimum %1%","error.invalid_number_enum":"Expected one of %0%","error.invalid_resource_location":"Resource location contains invalid characters","error.logical_height":"Logical height cannot be higher than height","error.min_y_multiple":"Min Y has to be a multiple of %0%","error.min_y_plus_height":"Min Y + height cannot be higher than %0%","error.recipe.invalid_key":"only single character is allowed as a key","error.separation_smaller_spacing":"Separation has to be smaller than spacing","false":"False","feature.bamboo.probability":"Probability","feature.basalt_columns.height":"Height","feature.basalt_columns.reach":"Reach","feature.block_column.direction":"Direction","feature.block_column.allowed_placement":"Allowed placement","feature.block_column.prioritize_tip":"Prioritize tip","feature.block_column.layers":"Layers","feature.block_column.layers.entry.height":"Height","feature.block_column.layers.entry.state":"State","feature.block_pile.state_provider":"State provider","feature.config":"Config","feature.decorated.decorator":"Decorator","feature.decorated.feature":"Feature","feature.delta_feature.contents":"Contents","feature.delta_feature.rim":"Rim","feature.delta_feature.rim_size":"Rim size","feature.delta_feature.size":"Size","feature.disk.half_height":"Half height","feature.disk.radius":"Radius","feature.disk.state":"State","feature.disk.targets":"Targets","feature.disk.targets.entry":"State","feature.dripstone_cluster.chance_of_dripstone_column_at_max_distance_from_center":"Far dripstone chance","feature.dripstone_cluster.chance_of_dripstone_column_at_max_distance_from_center.help":"Chance of a dripstone column at the max distance from the center.","feature.dripstone_cluster.density":"Density","feature.dripstone_cluster.dripstone_block_layer_thickness":"Block layer thickness","feature.dripstone_cluster.floor_to_ceiling_search_range":"Search range","feature.dripstone_cluster.floor_to_ceiling_search_range.help":"Floor to ceiling search range.","feature.dripstone_cluster.height":"Height","feature.dripstone_cluster.height_deviation":"Height deviation","feature.dripstone_cluster.max_distance_from_edge_affecting_chance_of_dripstone_column":"Column chance distance","feature.dripstone_cluster.max_distance_from_edge_affecting_chance_of_dripstone_column.help":"Max distance from the edge affecting the chance of dripstone columns.","feature.dripstone_cluster.max_distance_from_center_affecting_height_bias":"Height bias distance","feature.dripstone_cluster.max_distance_from_center_affecting_height_bias.help":"Max distance from the center affecting the height bias.","feature.dripstone_cluster.max_stalagmite_stalactite_height_diff":"Max height difference","feature.dripstone_cluster.max_stalagmite_stalactite_height_diff.help":"Max height difference between the stalagmite and stalactite.","feature.dripstone_cluster.radius":"Radius","feature.dripstone_cluster.wetness":"Wetness","feature.dripstone_cluster.wetness_deviation":"Wetness deviation","feature.dripstone_cluster.wetness_mean":"Wetness mean","feature.emerald_ore.state":"State","feature.emerald_ore.target":"Target","feature.end_gateway.exact":"Exact","feature.end_gateway.exit":"Exit","feature.end_spike.crystal_beam_target":"Crystal beam target","feature.end_spike.crystal_invulnerable":"Crystal invulnerable","feature.end_spike.spikes":"Spikes","feature.end_spike.spikes.entry":"Spike","feature.end_spike.spikes.entry.centerX":"Center X","feature.end_spike.spikes.entry.centerZ":"Center Z","feature.end_spike.spikes.entry.guarded":"Guarded","feature.end_spike.spikes.entry.height":"Height","feature.end_spike.spikes.entry.radius":"Radius","feature.fill_layer.height":"Height","feature.fill_layer.state":"State","feature.flower.blacklist":"Blacklist","feature.flower.block_placer":"Block placer","feature.flower.can_replace":"Can replace","feature.flower.need_water":"Need water","feature.flower.feature":"Placed feature","feature.flower.project":"Project","feature.flower.state_provider":"State provider","feature.flower.tries":"Tries","feature.flower.whitelist":"Whitelist","feature.flower.xspread":"X spread","feature.flower.xz_spread":"XZ spread","feature.flower.yspread":"Y spread","feature.flower.y_spread":"Y spread","feature.flower.zspread":"Z spread","feature.forest_rock.state":"State","feature.fossil.max_empty_corners_allowed":"Max empty corners","feature.fossil.max_empty_corners_allowed.help":"If more corners are exposed to air, feature placement is cancelled.","feature.fossil.fossil_structures":"Fossil structures","feature.fossil.overlay_structures":"Overlay structures","feature.fossil.fossil_processors":"Fossil processors","feature.fossil.fossil_processors.string":"Reference","feature.fossil.fossil_processors.object":"Inline","feature.fossil.overlay_processors":"Overlay processors","feature.fossil.overlay_processors.string":"Reference","feature.fossil.overlay_processors.object":"Inline","feature.geode.blocks":"Blocks","feature.geode.blocks.filling_provider":"Filling","feature.geode.blocks.inner_layer_provider":"Inner layer","feature.geode.blocks.alternate_inner_layer_provider":"Alternate inner layer","feature.geode.blocks.middle_layer_provider":"Middle layer","feature.geode.blocks.outer_layer_provider":"Outer layer","feature.geode.blocks.inner_placements":"Inner placements","feature.geode.blocks.cannot_replace":"Cannot replace","feature.geode.blocks.cannot_replace.help":"Blocks that will not be replaced by the geode.","feature.geode.blocks.invalid_blocks":"Invalid blocks","feature.geode.blocks.invalid_blocks.help":"When encountering an invalid block, feature placement is cancelled.","feature.geode.layers":"Layers","feature.geode.layers.filling":"Filling","feature.geode.layers.inner_layer":"Inner layer","feature.geode.layers.middle_layer":"Middle layer","feature.geode.layers.outer_layer":"Outer layer","feature.geode.crack":"Crack","feature.geode.crack.generate_crack_chance":"Crack chance","feature.geode.crack.base_crack_size":"Crack size","feature.geode.crack.crack_point_offset":"Crack point offset","feature.geode.noise_multiplier":"Noise multiplier","feature.geode.use_potential_placements_chance":"Inner placements chance","feature.geode.use_alternate_layer0_chance":"Alternate inner layer chance","feature.geode.placements_require_layer0_alternate":"Placements require alternate layer","feature.geode.outer_wall_distance":"Outer wall distance","feature.geode.distribution_points":"Distribution points","feature.geode.point_offset":"Point offset","feature.geode.min_gen_offset":"Min gen offset","feature.geode.max_gen_offset":"Max gen offset","feature.geode.invalid_blocks_threshold":"Invalid blocks threshold","feature.glow_lichen.can_be_placed_on":"Can be placed on","feature.glow_lichen.can_be_placed_on.entry":"Block state","feature.glow_lichen.can_place_on_ceiling":"Can place on ceiling","feature.glow_lichen.can_place_on_floor":"Can place on floor","feature.glow_lichen.can_place_on_wall":"Can place on wall","feature.glow_lichen.chance_of_spreading":"Chance of spreading","feature.glow_lichen.search_range":"Search range","feature.growing_plant.direction":"Direction","feature.growing_plant.allow_water":"Allow water","feature.growing_plant.height_distribution":"Height distribution","feature.growing_plant.body_provider":"Body provider","feature.growing_plant.head_provider":"Head provider","feature.huge_brown_mushroom.cap_provider":"Cap provider","feature.huge_brown_mushroom.foliage_radius":"Foliage radius","feature.huge_brown_mushroom.stem_provider":"Stem provider","feature.huge_fungus.decor_state":"Decoration","feature.huge_fungus.hat_state":"Hat","feature.huge_fungus.planted":"Planted","feature.huge_fungus.stem_state":"Stem","feature.huge_fungus.valid_base_block":"Valid base","feature.huge_red_mushroom.cap_provider":"Cap provider","feature.huge_red_mushroom.foliage_radius":"Foliage radius","feature.huge_red_mushroom.stem_provider":"Stem provider","feature.ice_patch.half_height":"Half height","feature.ice_patch.radius":"Radius","feature.ice_patch.state":"State","feature.ice_patch.targets":"Targets","feature.ice_patch.targets.entry":"State","feature.iceberg.state":"State","feature.lake.state":"State","feature.lake.fluid":"Fluid","feature.lake.barrier":"Barrier","feature.large_dripstone.column_radius":"Column radius","feature.large_dripstone.floor_to_ceiling_search_range":"Search range","feature.large_dripstone.floor_to_ceiling_search_range.help":"Floor to ceiling search range.","feature.large_dripstone.height_scale":"Height scale","feature.large_dripstone.max_column_radius_to_cave_height_ratio":"Radius to cave height ratio","feature.large_dripstone.min_bluntness_for_wind":"Min bluntness for wind","feature.large_dripstone.min_radius_for_wind":"Min radius for wind","feature.large_dripstone.stalactite_bluntness":"Stalactite bluntness","feature.large_dripstone.stalagmite_bluntness":"Stalagmite bluntness","feature.large_dripstone.wind_speed":"Wind speed","feature.nether_forest_vegetation.state_provider":"State provider","feature.nether_forest_vegetation.spread_width":"Spread width","feature.nether_forest_vegetation.spread_height":"Spread height","feature.netherrack_replace_blobs.radius":"Radius","feature.netherrack_replace_blobs.state":"State","feature.netherrack_replace_blobs.target":"Target","feature.no_bonemeal_flower.allowed_on":"Allowed on","feature.no_bonemeal_flower.blacklist":"Blacklist","feature.no_bonemeal_flower.block_placer":"Block placer","feature.no_bonemeal_flower.can_replace":"Can replace","feature.no_bonemeal_flower.disallowed_on":"Disallowed on","feature.no_bonemeal_flower.need_water":"Need water","feature.no_bonemeal_flower.feature":"Placed feature","feature.no_bonemeal_flower.only_in_air":"Only in air","feature.no_bonemeal_flower.project":"Project","feature.no_bonemeal_flower.state_provider":"State provider","feature.no_bonemeal_flower.tries":"Tries","feature.no_bonemeal_flower.whitelist":"Whitelist","feature.no_bonemeal_flower.xspread":"X spread","feature.no_bonemeal_flower.xz_spread":"XZ spread","feature.no_bonemeal_flower.yspread":"Y spread","feature.no_bonemeal_flower.y_spread":"Y spread","feature.no_bonemeal_flower.zspread":"Z spread","feature.no_surface_ore.size":"Size","feature.no_surface_ore.state":"State","feature.no_surface_ore.target":"Target","feature.object":"Inline","feature.ore.discard_chance_on_air_exposure":"Discard on exposure chance","feature.ore.discard_chance_on_air_exposure.help":"The chance that feature placement will be discarded if the ore is exposed to air blocks.","feature.ore.size":"Size","feature.ore.state":"State","feature.ore.target":"Target","feature.ore.targets":"Targets","feature.ore.targets.entry.target":"Target","feature.ore.targets.entry.state":"State","feature.scattered_ore.discard_chance_on_air_exposure":"Discard on exposure chance","feature.scattered_ore.discard_chance_on_air_exposure.help":"The chance that feature placement will be discarded if the ore is exposed to air blocks.","feature.scattered_ore.size":"Size","feature.scattered_ore.targets":"Targets","feature.scattered_ore.targets.entry.target":"Target","feature.scattered_ore.targets.entry.state":"State","feature.sculk_patch.charge_count":"Charge count","feature.sculk_patch.amount_per_charge":"Amount per charge","feature.sculk_patch.spread_attempts":"Spread attempts","feature.sculk_patch.growth_rounds":"Growth rounds","feature.sculk_patch.spread_rounds ":"Spread rounds","feature.sculk_patch.catalyst_chance":"Catalyst chance","feature.pointed_dripstone.chance_of_taller_dripstone":"Chance of taller dripstone","feature.pointed_dripstone.chance_of_directional_spread":"Chance of directional spread","feature.pointed_dripstone.chance_of_spread_radius2":"Chance of spread radius 2","feature.pointed_dripstone.chance_of_spread_radius3":"Chance of spread radius 3","feature.random_boolean_selector.feature_false":"Placed feature 1","feature.random_boolean_selector.feature_true":"Placed feature 2","feature.random_patch.allowed_on":"Allowed on","feature.random_patch.blacklist":"Blacklist","feature.random_patch.block_placer":"Block placer","feature.random_patch.can_replace":"Can replace","feature.random_patch.disallowed_on":"Disallowed on","feature.random_patch.need_water":"Need water","feature.random_patch.feature":"Placed feature","feature.random_patch.only_in_air":"Only in air","feature.random_patch.project":"Project","feature.random_patch.state_provider":"State provider","feature.random_patch.tries":"Tries","feature.random_patch.whitelist":"Whitelist","feature.random_patch.xspread":"X spread","feature.random_patch.xz_spread":"XZ spread","feature.random_patch.yspread":"Y spread","feature.random_patch.y_spread":"Y spread","feature.random_patch.zspread":"Z spread","feature.random_selector.default":"Default","feature.random_selector.features":"Features","feature.random_selector.features.entry":"Feature","feature.random_selector.features.entry.chance":"Chance","feature.random_selector.features.entry.feature":"Placed feature","feature.replace_single_block.targets":"Targets","feature.replace_single_block.targets.entry.target":"Target","feature.replace_single_block.targets.entry.state":"State","feature.root_system.required_vertical_space_for_tree":"Required vertical tree space","feature.root_system.root_radius":"Root radius","feature.root_system.root_placement_attempts":"Root placement attempts","feature.root_system.root_column_max_height":"Root max height","feature.root_system.hanging_root_radius":"Hanging roots radius","feature.root_system.hanging_roots_vertical_span":"Hanging roots vertical span","feature.root_system.hanging_root_placement_attempts":"Hanging roots attempts","feature.root_system.allowed_vertical_water_for_tree":"Max water depth","feature.root_system.root_replaceable":"Root replaceable","feature.root_system.root_state_provider":"Root","feature.root_system.hanging_root_state_provider":"Hanging roots","feature.root_system.allowed_tree_position":"Allowed tree position","feature.root_system.feature":"Tree feature","feature.sea_pickle.count":"Count","feature.seagrass.probability":"Probability","feature.simple_block.place_in":"Place in","feature.simple_block.place_in.entry":"State","feature.simple_block.place_on":"Place on","feature.simple_block.place_on.entry":"State","feature.simple_block.place_under":"Place under","feature.simple_block.place_under.entry":"State","feature.simple_block.to_place":"To place","feature.simple_random_selector.features":"Features","feature.simple_random_selector.features.entry":"Placed feature","feature.small_dripstone.chance_of_taller_dripstone":"Chance of taller dripstone","feature.small_dripstone.empty_space_search_radius":"Empty space search radius","feature.small_dripstone.max_offset_from_origin":"Max offset from origin","feature.small_dripstone.max_placements":"Max placements","feature.spring_feature.hole_count":"Hole count","feature.spring_feature.required_block_below":"Required block below","feature.spring_feature.rock_count":"Rock count","feature.spring_feature.state":"State","feature.spring_feature.valid_blocks":"Valid blocks","feature.string":"Reference","feature.tree.decorators":"Decorators","feature.tree.decorators.entry":"Tree decorator","feature.tree.foliage_placer":"Foliage placer","feature.tree.heightmap":"Heightmap","feature.tree.ignore_vines":"Ignore vines","feature.tree.leaves_provider":"Leaves provider","feature.tree.foliage_provider":"Foliage provider","feature.tree.force_dirt":"Force dirt","feature.tree.dirt_provider":"Dirt provider","feature.tree.sapling_provider":"Sapling provider","feature.tree.max_water_depth":"Max water depth","feature.tree.minimum_size":"Minimum size","feature.tree.minimum_size.limit":"Limit","feature.tree.minimum_size.lower_size":"Lower size","feature.tree.minimum_size.middle_size":"Middle size","feature.tree.minimum_size.min_clipped_height":"Min clipped height","feature.tree.minimum_size.type":"Minimum size","feature.tree.minimum_size.upper_limit":"Upper limit","feature.tree.minimum_size.upper_size":"Upper size","feature.tree.trunk_placer":"Trunk placer","feature.tree.trunk_provider":"Trunk provider","feature.twisting_vines.spread_width":"Spread width","feature.twisting_vines.spread_height":"Spread height","feature.twisting_vines.max_height":"Max height","feature.type":"Type","feature.underwater_magma.floor_search_range":"Floor search range","feature.underwater_magma.placement_radius_around_floor":"Placement radius","feature.underwater_magma.placement_probability_per_valid_position":"Probability","feature.underwater_magma.placement_probability_per_valid_position.help":"The probability of placing magma per valid position.","feature.vegetation_patch.depth":"Depth","feature.vegetation_patch.extra_bottom_block_chance":"Extra bottom block chance","feature.vegetation_patch.extra_edge_column_chance":"Extra edge column chance","feature.vegetation_patch.ground_state":"Ground state","feature.vegetation_patch.replaceable":"Replaceable","feature.vegetation_patch.surface":"Surface","feature.vegetation_patch.vegetation_chance":"Vegetation chance","feature.vegetation_patch.vegetation_feature":"Vegetation feature","feature.vegetation_patch.vertical_range":"Vertical range","feature.vegetation_patch.xz_radius":"XZ radius","feature.waterlogged_vegetation_patch.depth":"Depth","feature.waterlogged_vegetation_patch.extra_bottom_block_chance":"Extra bottom block chance","feature.waterlogged_vegetation_patch.extra_edge_column_chance":"Extra edge column chance","feature.waterlogged_vegetation_patch.ground_state":"Ground state","feature.waterlogged_vegetation_patch.replaceable":"Replaceable","feature.waterlogged_vegetation_patch.surface":"Surface","feature.waterlogged_vegetation_patch.vegetation_chance":"Vegetation chance","feature.waterlogged_vegetation_patch.vegetation_feature":"Vegetation feature","feature.waterlogged_vegetation_patch.vertical_range":"Vertical range","feature.waterlogged_vegetation_patch.xz_radius":"XZ radius","float_provider.value.deviation":"Deviation","float_provider.value.mean":"Mean","float_provider.value.min":"Min","float_provider.value.min_inclusive":"Min exclusive","float_provider.value.max":"Max","float_provider.value.max_exclusive":"Max exclusive","float_provider.value.plateau":"Plateau","float_provider.type.number":"Constant","float_provider.type.constant":"Constant+","float_provider.type.uniform":"Uniform","float_provider.type.clamped_normal":"Clamped normal","float_provider.type.trapezoid":"Trapezoid","float_provider.value":"Value","fluid.fluid":"Fluid ID","fluid.state":"Fluid state","fluid.tag":"Fluid tag","fluid_state.Name":"Name","fluid_state.Properties":"Properties","foliage_placer.crown_height":"Crown height","foliage_placer.height":"Height","foliage_placer.offset":"Offset","foliage_placer.radius":"Radius","foliage_placer.trunk_height":"Trunk height","foliage_placer.type":"Type","function.apply_bonus.enchantment":"Enchantment","function.apply_bonus.formula":"Formula","function.apply_bonus.formula.binomial_with_bonus_count":"Binomial with bonus count","function.apply_bonus.formula.ore_drops":"Ore drops","function.apply_bonus.formula.uniform_bonus_count":"Uniform bonus count","function.apply_bonus.parameters":"Parameters","function.apply_bonus.parameters.bonusMultiplier":"Multiplier","function.apply_bonus.parameters.extra":"Extra","function.apply_bonus.parameters.probability":"Probability","function.copy_name.source":"Source","function.copy_nbt.ops":"NBT operations","function.copy_nbt.ops.entry":"Operation","function.copy_nbt.source":"Source","function.copy_state.block":"Block","function.copy_state.properties":"Properties","function.copy_state.properties.entry":"Property","function.enchant_randomly.enchantments":"Optional enchantments","function.enchant_randomly.enchantments.entry":"Enchantment","function.enchant_with_levels.levels":"Levels","function.enchant_with_levels.treasure":"Treasure","function.exploration_map.decoration":"Decoration","function.exploration_map.destination":"Destination","function.exploration_map.search_radius":"Search radius (Chunks)","function.exploration_map.skip_existing_chunks":"Skip existing chunks","function.exploration_map.zoom":"Zoom","function.fill_player_head.entity":"Entity","function.function":"Function","function.limit_count.limit":"Limit","function.list":"Multiple","function.looting_enchant.count":"Count","function.looting_enchant.limit":"Limit","function.object":"Single","function.set_attributes.modifiers":"Modifiers","function.set_attributes.modifiers.entry":"Modifier","function.set_banner_pattern.append":"Append","function.set_banner_pattern.patterns":"Patterns","function.set_contents.entries":"Contents","function.set_contents.entries.entry":"Entry","function.set_contents.type":"Type","function.set_count.add":"Add","function.set_count.add.help":"If true, change will be relative to current item count","function.set_count.count":"Count","function.set_damage.add":"Add","function.set_damage.add.help":"If true, change will be relative to current damage","function.set_damage.damage":"Damage","function.set_data.data":"Data","function.set_enchantments.add":"Add","function.set_enchantments.add.help":"If true, change will be relative to current level","function.set_enchantments.enchantments":"Enchantments","function.set_loot_table.name":"Loot table name","function.set_loot_table.seed":"Seed","function.set_loot_table.type":"Type","function.set_lore.entity":"Entity","function.set_lore.lore":"Lore","function.set_lore.lore.entry":"Line","function.set_lore.replace":"Replace","function.set_name.entity":"Entity","function.set_name.name":"Name","function.set_nbt.tag":"NBT","function.set_potion.id":"Potion","function.set_stew_effect.effects":"Effects","function.set_stew_effect.effects.entry":"Effect","function.set_stew_effect.effects.entry.duration":"Duration","function.set_stew_effect.effects.entry.type":"Type","functions":"Functions","functions.entry":"Function","gamemode.adventure":"Adventure","gamemode.creative":"Creative","gamemode.spectator":"Spectator","gamemode.survival":"Survival","generation_step.air":"Air","generation_step.liquid":"Liquid","generator.biome_source.altitude_noise":"Altitude noise","generator.biome_source.biome":"Biome","generator.biome_source.biomes":"Biomes","generator.biome_source.humidity_noise":"Humidity noise","generator.biome_source.large_biomes":"Large biomes","generator.biome_source.legacy_biome_init_layer":"Legacy biome init layer","generator.biome_source.preset":"Biomes preset","generator.biome_source.preset.nether":"Nether","generator.biome_source.scale":"Scale","generator.biome_source.seed":"Biomes seed","generator.biome_source.temperature_noise":"Temperature noise","generator.biome_source.type":"Biome source","generator.biome_source.weirdness_noise":"Weirdness noise","generator.seed":"Dimension seed","generator.settings":"Generator settings","generator.settings.biome":"Biome","generator.settings.lakes":"Lakes","generator.settings.layers":"Layers","generator.settings.layers.entry":"Layer","generator.settings.layers.entry.block":"Block ID","generator.settings.layers.entry.height":"Height","generator.settings.structure_overrides":"Structure overrides","generator.settings.structure_overrides.entry":"Structure set","generator.settings.object":"Inline","generator.settings.presets.amplified":"Amplified","generator.settings.presets.caves":"Caves","generator.settings.presets.end":"End","generator.settings.presets.floating_islands":"Floating islands","generator.settings.presets.nether":"Nether","generator.settings.presets.overworld":"Overworld","generator.settings.string":"Reference","generator.settings.structures":"Structures","generator.settings.structures.stronghold":"Stronghold","generator.settings.structures.stronghold.count":"Count","generator.settings.structures.stronghold.distance":"Distance","generator.settings.structures.stronghold.spread":"Spread","generator.settings.structures.structures":"Structures","generator.type":"Generator type","generator_biome.biome":"Biome","generator_biome.parameters":"Parameters","generator_biome.parameters.altitude":"Altitude","generator_biome.parameters.help":"These parameters determine the placement of the biome. Every biome must have a unique combination of them. Biomes with similar values will generate next to each other.","generator_biome.parameters.humidity":"Humidity","generator_biome.parameters.offset":"Offset","generator_biome.parameters.temperature":"Temperature","generator_biome.parameters.weirdness":"Weirdness","generator_biome.parameters.continentalness":"Continentalness","generator_biome.parameters.erosion":"Erosion","generator_biome.parameters.depth":"Depth","generator_biome_noise.amplitudes":"Amplitudes","generator_biome_noise.amplitudes.entry":"Octave %0%","generator_biome_noise.firstOctave":"First octave","generator_structure.salt":"Salt","generator_structure.separation":"Separation","generator_structure.separation.help":"The minumum distance in chunks between two structures of this type.","generator_structure.spacing":"Spacing","generator_structure.spacing.help":"The average distance in chunks between two structures of this type.","height_provider.inner":"Inner","height_provider.min_inclusive":"Min inclusive","height_provider.max_inclusive":"Max inclusive","height_provider.plateau":"Plateau","height_provider.value":"Value","height_provider.distribution":"Distribution","height_provider.distribution.entry.weight":"Weight","height_provider.distribution.entry.data":"Data","height_provider.type.number":"Constant","height_provider.type.constant":"Constant+","height_provider.type.uniform":"Uniform","height_provider.type.biased_to_bottom":"Biased to bottom","height_provider.type.very_biased_to_bottom":"Very biased to bottom","height_provider.type.trapezoid":"Trapezoid","height_provider.type.weighted_list":"Weighted list","heightmap_type.MOTION_BLOCKING":"Motion blocking","heightmap_type.MOTION_BLOCKING_NO_LEAVES":"Motion blocking (Ignore Leaves)","heightmap_type.OCEAN_FLOOR":"Ocean floor","heightmap_type.OCEAN_FLOOR_WG":"Ocean floor (World Gen)","heightmap_type.WORLD_SURFACE":"World surface","heightmap_type.WORLD_SURFACE_IGNORE_SNOW":"World surface (Ignore Snow)","heightmap_type.WORLD_SURFACE_WG":"World surface (World Gen)","hide_source":"Hide source","int_provider.value":"Value","int_provider.value.deviation":"Deviation","int_provider.value.mean":"Mean","int_provider.value.min_inclusive":"Min inclusive","int_provider.value.max_inclusive":"Max inclusive","int_provider.value.source":"Source","int_provider.distribution":"Distribution","int_provider.distribution.entry.weight":"Weight","int_provider.distribution.entry.data":"Provider","int_provider.type.number":"Constant","int_provider.type.constant":"Constant+","int_provider.type.uniform":"Uniform","int_provider.type.biased_to_bottom":"Biased to bottom","int_provider.type.clamped":"Clamped","int_provider.type.clamped_normal":"Clamped normal","int_provider.type.weighted_list":"Weighted list","item.count":"Count","item.durability":"Durability","item.enchantments":"Enchantments","item.enchantments.entry":"Enchantment","item.item":"Item ID","item.nbt":"NBT","item.potion":"Potion","item.tag":"Item tag","item_model_predicates.angle":"Angle","item_model_predicates.blocking":"Blocking","item_model_predicates.broken":"Broken","item_model_predicates.cast":"Cast","item_model_predicates.charged":"Charged","item_model_predicates.cooldown":"Cooldown","item_model_predicates.custom_model_data":"Custom model data","item_model_predicates.damage":"Damage","item_model_predicates.damaged":"Damaged","item_model_predicates.firework":"Firework","item_model_predicates.lefthanded":"Lefthanded","item_model_predicates.pull":"Pull","item_model_predicates.pulling":"Pulling","item_model_predicates.throwing":"Throwing","item_model_predicates.time":"Time","item_transform.rotation":"Rotation","item_transform.translation":"Translation","item_transform.scale":"Scale","key.advancements":"Advancements","key.attack":"Attack/destroy","key.back":"Walk backwards","key.chat":"Open chat","key.command":"Open command","key.drop":"Drop selected item","key.forward":"Walk forwards","key.fullscreen":"Toggle fullscreen","key.hotbar.1":"Hotbar slot 1","key.hotbar.2":"Hotbar slot 2","key.hotbar.3":"Hotbar slot 3","key.hotbar.4":"Hotbar slot 4","key.hotbar.5":"Hotbar slot 5","key.hotbar.6":"Hotbar slot 6","key.hotbar.7":"Hotbar slot 7","key.hotbar.8":"Hotbar slot 8","key.hotbar.9":"Hotbar slot 9","key.inventory":"Open/close inventory","key.jump":"Jump","key.left":"Strafe left","key.loadToolbarActivator":"Load toolbar activator","key.pickItem":"Pick block","key.playerlist":"List players","key.right":"Strafe right","key.saveToolbarActivator":"Save toolbar activator","key.screenshot":"Take screenshot","key.smoothCamera":"Toggle cinematic camera","key.sneak":"Sneak","key.spectatorOutlines":"Highlight players (Spectators)","key.sprint":"Sprint","key.swapOffhand":"Swap item with offhand","key.togglePerspective":"Toggle perspective","key.use":"Use item/place block","location.biome":"Biome","location.block":"Block","location.dimension":"Dimension","location.feature":"Structure feature","location.structure":"Structure","location.fluid":"Fluid","location.light":"Light","location.light.light":"Visible light level","location.position":"Position","location.position.x":"X","location.position.y":"Y","location.position.z":"Z","location.smokey":"Smokey","loot_condition_type.alternative":"Alternative","loot_condition_type.block_state_property":"Block state properties","loot_condition_type.damage_source_properties":"Damage source properties","loot_condition_type.entity_properties":"Entity properties","loot_condition_type.entity_scores":"Entity scores","loot_condition_type.inverted":"Inverted","loot_condition_type.killed_by_player":"Killed by player","loot_condition_type.location_check":"Location check","loot_condition_type.match_tool":"Match tool","loot_condition_type.random_chance":"Random chance","loot_condition_type.random_chance_with_looting":"Random chance with looting","loot_condition_type.reference":"Reference","loot_condition_type.survives_explosion":"Survives explosion","loot_condition_type.table_bonus":"Table bonus","loot_condition_type.time_check":"Time check","loot_condition_type.value_check":"Value check","loot_condition_type.weather_check":"Weather check","loot_entry.dynamic.name":"Name","loot_entry.item.name":"Name","loot_entry.loot_table.name":"Loot table name","loot_entry.quality":"Quality","loot_entry.tag.expand":"Expand","loot_entry.tag.expand.help":"If false, entry will return all contents of tag, otherwise entry will behave as multiple item entries.","loot_entry.tag.name":"Item tag name","loot_entry.type":"Type","loot_entry.weight":"Weight","loot_entry.functions":"Functions","loot_entry.functions.entry":"Function","loot_function_type.apply_bonus":"Apply bonus","loot_function_type.copy_name":"Copy name","loot_function_type.copy_nbt":"Copy NBT","loot_function_type.copy_state":"Copy block states","loot_function_type.enchant_randomly":"Enchant randomly","loot_function_type.enchant_with_levels":"Enchant with levels","loot_function_type.exploration_map":"Exploration map properties","loot_function_type.explosion_decay":"Explosion decay","loot_function_type.fill_player_head":"Fill player head","loot_function_type.furnace_smelt":"Furnace smelt","loot_function_type.limit_count":"Limit count","loot_function_type.looting_enchant":"Looting enchant","loot_function_type.set_attributes":"Set attributes","loot_function_type.set_banner_pattern":"Set banner pattern","loot_function_type.set_contents":"Set contents","loot_function_type.set_count":"Set count","loot_function_type.set_damage":"Set damage","loot_function_type.set_data":"Set data","loot_function_type.set_enchantments":"Set enchantments","loot_function_type.set_loot_table":"Set loot table","loot_function_type.set_lore":"Set lore","loot_function_type.set_name":"Set name","loot_function_type.set_nbt":"Set NBT","loot_function_type.set_potion":"Set potion","loot_function_type.set_stew_effect":"Set stew effect","loot_pool.bonus_rolls":"Bonus rolls","loot_pool.entries":"Entries","loot_pool.entries.entry":"Entry","loot_pool.rolls":"Rolls","loot_pool.rolls.help":"The amount of entries that are randomly chosen.","loot_pool_entry_type.alternatives":"Alternatives","loot_pool_entry_type.alternatives.help":"Tests conditions of the child entries and executes the first that can run.","loot_pool_entry_type.dynamic":"Dynamic","loot_pool_entry_type.dynamic.help":"Gets block specific drops.","loot_pool_entry_type.empty":"Empty","loot_pool_entry_type.empty.help":"Adds nothing to the pool.","loot_pool_entry_type.group":"Group","loot_pool_entry_type.group.help":"Executes all child entries when own conditions pass.","loot_pool_entry_type.item":"Item","loot_pool_entry_type.item.help":"Adds a single item.","loot_pool_entry_type.loot_table":"Loot table","loot_pool_entry_type.loot_table.help":"Adds the contents of another loot table.","loot_pool_entry_type.sequence":"Sequence","loot_pool_entry_type.sequence.help":"Executes child entries until the first one that can\'t run due to conditions.","loot_pool_entry_type.tag":"Item tag","loot_pool_entry_type.tag.help":"Adds the contents of an item tag.","loot_table.pools":"Pools","loot_table.pools.entry":"Pool","loot_table.type":"Type","luck_based":"Luck-based","material_condition.biome.biome_is":"Biome","material_condition.noise_threshold.noise":"Noise","material_condition.noise_threshold.min_threshold":"Min threshold","material_condition.noise_threshold.max_threshold":"Max threshold","material_condition.not.invert":"Invert","material_condition.stone_depth.offset":"Offset","material_condition.stone_depth.surface_type":"Surface","material_condition.stone_depth.add_surface_depth":"Add surface depth","material_condition.stone_depth.add_surface_secondary_depth":"Add surface secondary depth","material_condition.stone_depth.secondary_depth_range":"Secondary depth range","material_condition.vertical_gradient.random_name":"Random name","material_condition.vertical_gradient.true_at_and_below":"True at and below","material_condition.vertical_gradient.false_at_and_above":"False at and above","material_condition.water.offset":"Offset","material_condition.water.surface_depth_multiplier":"Surface depth multiplier","material_condition.water.add_stone_depth":"Add stone depth","material_condition.y_above.anchor":"Anchor","material_condition.y_above.surface_depth_multiplier":"Surface depth multiplier","material_condition.y_above.add_stone_depth":"Add stone depth","material_rule.condition.if_true":"If true","material_rule.condition.then_run":"Then run","material_rule.block.result_state":"Result state","material_rule.sequence.sequence":"Sequence","material_rule.sequence.sequence.entry":"Rule","mob_category.monster":"Monster","mob_category.creature":"Creature","mob_category.ambient":"Ambient","mob_category.axolotls":"Axolotls","mob_category.underground_water_creature":"Underground water creature","mob_category.water_creature":"Water creature","mob_category.water_ambient":"Water ambient","mob_category.misc":"Misc","model.parent":"Parent","model.ambientocclusion":"Ambient occlusion","model.gui_light":"GUI light","model.textures":"Textures","model.elements":"Elements","model.elements.entry":"Element","model_element.from":"From","model_element.to":"To","model_element.rotation":"Rotation","model_element.rotation.origin":"Origin","model_element.rotation.axis":"Axis","model_element.rotation.angle":"Angle","model_element.rotation.rescale":"Rescale","model_element.shade":"Shade","model_element.faces":"Faces","model_element.faces.texture":"Texture","model_element.faces.uv":"UV","model_element.faces.cullface":"Cullface","model_element.faces.rotation":"Rotation","model_element.faces.tintindex":"Tint index","model.display":"Display","model.overrides":"Overrides","model.overrides.entry":"Override","model_override.predicate":"Predicate","model_override.model":"Model","model_variant.object":"Single","model_variant.list":"Multiple","model_variant.model":"Model","model_variant.x":"X rotation","model_variant.y":"Y rotation","model_variant.uvlock":"UV lock","model_variant.weight":"Weight","multipart_condition.OR":"Or","multipart_condition.object":"Condition","multipart_condition.or":"Or","multipart_condition.OR.entry":"Condition","nbt_operation.op":"Operation","nbt_operation.op.append":"Append","nbt_operation.op.merge":"Merge","nbt_operation.op.replace":"Replace","nbt_operation.source":"Source","nbt_operation.target":"Target","nbt_provider.source":"Source","nbt_provider.target":"Target","nbt_provider.type":"Type","nbt_provider.type.context":"Context+","nbt_provider.type.storage":"Storage","nbt_provider.type.string":"Context","noise_parameters.string":"Reference","noise_parameters.object":"Inline","noise_parameters.amplitudes":"Amplitudes","noise_parameters.amplitudes.entry":"Octave %0%","noise_parameters.firstOctave":"First octave","noise_settings.aquifers_enabled":"Aquifers enabled","noise_settings.bedrock_floor_position":"Bedrock floor position","noise_settings.bedrock_floor_position.help":"Position of the bedrock floor. Higher numbers move the floor up.","noise_settings.bedrock_roof_position":"Bedrock roof position","noise_settings.bedrock_roof_position.help":"Relative position of the bedrock roof starting at the world height. Higher numbers move the roof down.","noise_settings.biome":"Biome","noise_settings.deepslate_enabled":"Deepslate enabled","noise_settings.default_block":"Default block","noise_settings.default_fluid":"Default fluid","noise_settings.disable_mob_generation":"Disable mob generation","noise_settings.disable_mob_generation.help":"If true, mobs will not spawn during generation.","noise_settings.legacy_random_source":"Legacy random source","noise_settings.min_surface_level":"Min surface level","noise_settings.name":"Name","noise_settings.noise":"Noise options","noise_settings.noise_caves_enabled":"Noise caves enabled","noise_settings.noise.amplified":"Amplified","noise_settings.noise.bottom_slide":"Bottom slide","noise_settings.noise.bottom_slide.help":"Adds or removes terrain at the bottom of the world. Does nothing when size is 0.","noise_settings.noise.bottom_slide.offset":"Offset","noise_settings.noise.bottom_slide.offset.help":"Defines an range of \'Offset * Size vertical * 4\' blocks at the bottom of the world where the density is set to the target.","noise_settings.noise.bottom_slide.size":"Size","noise_settings.noise.bottom_slide.size.help":"Defines a range of \'Size * Size vertical * 4\' blocks where the existing density and target are interpolated.","noise_settings.noise.bottom_slide.target":"Target","noise_settings.noise.bottom_slide.target.help":"The target density. Positive values add terrain and negative values remove terrain.","noise_settings.noise.density_factor":"Density factor","noise_settings.noise.density_factor.help":"Determines how much the height influences the terrain. Positive values produce land at the bottom. Values close to 0 produce uniform cave-like terrain.","noise_settings.noise.density_offset":"Density offset","noise_settings.noise.density_offset.help":"Affects the average terrain height. A value of 0 produces terrain land height at half the height. Positive values raise the height.","noise_settings.noise.height":"Height","noise_settings.noise.height.help":"The total height where blocks can generate. Max Y = Min Y + Height.","noise_settings.noise.island_noise_override":"Island noise override","noise_settings.noise.island_noise_override.help":"If true, terrain will be shaped like islands similar to the end.","noise_settings.noise.large_biomes":"Large biomes","noise_settings.noise.min_y":"Min Y","noise_settings.noise.min_y.help":"The minimum height where blocks start generating.","noise_settings.noise.random_density_offset":"Random density offset","noise_settings.noise.sampling":"Sampling","noise_settings.noise.sampling.xz_factor":"XZ factor","noise_settings.noise.sampling.xz_scale":"XZ scale","noise_settings.noise.sampling.y_factor":"Y factor","noise_settings.noise.sampling.y_scale":"Y scale","noise_settings.noise.simplex_surface_noise":"Simplex surface noise","noise_settings.noise.size_horizontal":"Size horizontal","noise_settings.noise.size_vertical":"Size vertical","noise_settings.noise.top_slide":"Top slide","noise_settings.noise.top_slide.help":"Adds or removes terrain at the top of the world. Does nothing when size is 0.","noise_settings.noise.top_slide.offset":"Offset","noise_settings.noise.top_slide.offset.help":"Defines an range of \'Offset * Size Vertical * 4\' blocks at the top of the world where the density is set to the target.","noise_settings.noise.top_slide.size":"Size","noise_settings.noise.top_slide.size.help":"Defines a range of \'Size * Size Vertical * 4\' blocks where the existing density and target are interpolated.","noise_settings.noise.top_slide.target":"Target","noise_settings.noise.top_slide.target.help":"The target density. Positive values add terrain and negative values remove terrain.","noise_settings.noise.terrain_shaper":"Terrain shaper","noise_settings.noodle_caves_enabled":"Noodle caves enabled","noise_settings.ore_veins_enabled":"Ore veins enabled","noise_settings.sea_level":"Sea level","noise_settings.spawn_target":"Spawn Target","noise_settings.spawn_target.entry.temperature":"Temperature","noise_settings.spawn_target.entry.humidity":"Humidity","noise_settings.spawn_target.entry.continentalness":"Continentalness","noise_settings.spawn_target.entry.erosion":"Erosion","noise_settings.spawn_target.entry.weirdness":"Weirdness","noise_settings.spawn_target.entry.depth":"Depth","noise_settings.spawn_target.entry.offset":"Offset","noise_settings.structures":"Structures","noise_settings.structures.stronghold":"Stronghold","noise_settings.structures.stronghold.count":"Count","noise_settings.structures.stronghold.distance":"Distance","noise_settings.structures.stronghold.spread":"Spread","noise_settings.structures.structures":"Structures","noise_settings.surface_rule":"Surface rule","noise_settings.noise_router":"Noise router","noise_settings.noise_router.barrier":"Barrier","noise_settings.noise_router.fluid_level_floodedness":"Fluid level floodedness","noise_settings.noise_router.fluid_level_spread":"Fluid level spread","noise_settings.noise_router.lava":"Lava","noise_settings.noise_router.temperature":"Temperature","noise_settings.noise_router.vegetation":"Vegetation","noise_settings.noise_router.continents":"Continents","noise_settings.noise_router.erosion":"Erosion","noise_settings.noise_router.depth":"Depth","noise_settings.noise_router.ridges":"Ridges","noise_settings.noise_router.initial_density_without_jaggedness":"Initial density without jaggedness","noise_settings.noise_router.final_density":"Final density","noise_settings.noise_router.vein_toggle":"Vein toggle","noise_settings.noise_router.vein_ridged":"Vein ridged","noise_settings.noise_router.vein_gap":"Vein gap","number_provider.max":"Max","number_provider.min":"Min","number_provider.n":"N","number_provider.p":"P","number_provider.scale":"Scale","number_provider.score":"Objective","number_provider.target":"Target","number_provider.type":"Type","number_provider.type.binomial":"Binomial","number_provider.type.constant":"Constant+","number_provider.type.number":"Constant","number_provider.type.object":"Uniform","number_provider.type.score":"Score","number_provider.type.uniform":"Uniform+","number_provider.value":"Number","placed_feature.string":"Reference","placed_feature.object":"Inline","placed_feature.feature":"Configured feature","placed_feature.placement":"Placement","placed_feature.placement.entry":"Modifier","player.advancements":"Advancements","player.advancements.entry":"Advancement","player.gamemode":"Game mode","player.level":"XP level","player.recipes":"Recipes","player.stats":"Statistics","player.stats.entry":"Statistic","pos_rule_test.always_true":"Always true","pos_rule_test.axis":"Axis","pos_rule_test.axis.x":"X","pos_rule_test.axis.y":"Y","pos_rule_test.axis.z":"Z","pos_rule_test.axis_aligned_linear_pos":"Axis aligned linear pos","pos_rule_test.linear_pos":"Linear pos","pos_rule_test.max_chance":"Max chance","pos_rule_test.max_dist":"Max dist","pos_rule_test.min_chance":"Min chance","pos_rule_test.min_dist":"Min dist","pos_rule_test.predicate_type":"Type","processor.block_age.mossiness":"Mossiness","processor.block_ignore.blocks":"Blocks","processor.block_ignore.blocks.entry":"State","processor.block_rot.integrity":"Integrity","processor.gravity.heightmap":"Heightmap","processor.gravity.offset":"Offset","processor.processor_type":"Type","processor.rule.rules":"Rules","processor.rule.rules.entry":"Rule","processor_list.processors":"Processors","processor_list.processors.entry":"Processor","processor_rule.input_predicate":"Input predicate","processor_rule.location_predicate":"Location predicate","processor_rule.output_nbt":"Output NBT","processor_rule.output_state":"Output state","processor_rule.position_predicate":"Position predicate","processors.object":"Inline","processors.string":"Reference","range.binomial":"Binomial","range.max":"Max","range.min":"Min","range.n":"N","range.number":"Exact","range.object":"Range","range.p":"P","range.type":"Type","range.uniform":"Uniform","recipe.type":"Type","recipe.group":"Group","recipe.group.help":"Identifier to group multiple recipes in the recipe book.","recipe.ingredients":"Ingredients","recipe.ingredient":"Ingredient","recipe.ingredient.item":"Item","recipe.ingredient.tag":"Item tag","recipe.pattern":"Pattern","recipe.pattern.entry":"Row","recipe.key":"Key","recipe.key.item":"Item","recipe.key.tag":"Item tag","recipe.result":"Result","recipe.result.item":"Item","recipe.result.count":"Count","recipe.experience":"Experience","recipe.cookingtime":"Cooking time","recipe.count":"Count","recipe.base":"Base","recipe.base.item":"Item","recipe.base.tag":"Item tag","recipe.addition":"Addition","recipe.addition.item":"Item","recipe.addition.tag":"Item tag","advancement.requirements":"Requirements","rule_test.always_true":"Always true","rule_test.block":"Block","rule_test.block_match":"Block match","rule_test.block_state":"State","rule_test.blockstate_match":"Block state match","rule_test.predicate_type":"Type","rule_test.probability":"Probability","rule_test.random_block_match":"Random block match","rule_test.random_blockstate_match":"Random block state match","rule_test.tag":"Tag","rule_test.tag_match":"Tag match","score_provider.name":"Name","score_provider.target":"Target","score_provider.type":"Type","score_provider.type.context":"Context+","score_provider.type.fixed":"Fixed","score_provider.type.string":"Context","slot.chest":"Chest","slot.feet":"Feet","slot.head":"Head","slot.legs":"Legs","slot.mainhand":"Mainhand","slot.offhand":"Offhand","statistic.stat":"Statistic","statistic.type":"Type","statistic.type.broken":"Broken","statistic.type.crafted":"Crafted","statistic.type.custom":"Custom","statistic.type.dropped":"Dropped","statistic.type.killed":"Killed","statistic.type.killedByTeam":"Killed by team","statistic.type.killed_by":"Killed by","statistic.type.mined":"Mined","statistic.type.picked_up":"Picked up","statistic.type.teamkill":"Killed team","statistic.type.used":"Used","statistic.value":"Value","status_effect.ambient":"Ambient","status_effect.amplifier":"Amplifier","status_effect.duration":"Duration","status_effect.visible":"Visible","structure_feature.biome_temp":"Biome temperature","structure_feature.biome_temp.cold":"Cold","structure_feature.biome_temp.warm":"Warm","structure_feature.cluster_probability":"Cluster probability","structure_feature.config":"Config","structure_feature.is_beached":"Is beached","structure_feature.shipwreck.is_beached":"Is beached","structure_feature.large_probability":"Large probability","structure_feature.portal_type":"Portal type","structure_feature.portal_type.desert":"Desert","structure_feature.portal_type.jungle":"Jungle","structure_feature.portal_type.mountain":"Mountain","structure_feature.portal_type.nether":"Nether","structure_feature.portal_type.ocean":"Ocean","structure_feature.portal_type.standard":"Standard","structure_feature.portal_type.swamp":"Swamp","structure_feature.probability":"Probability","structure_feature.size":"Size","structure_feature.start_pool":"Start pool","structure_feature.type":"Type","structure_feature.type.mesa":"Mesa","structure_feature.type.normal":"Normal","structure_feature.biomes":"Biomes","structure_feature.biomes.entry":"Biome","structure_feature.adapt_noise":"Adapt noise","structure_feature.adapt_noise.help":"Whether it should add extra terrain below the structure.","structure_feature.spawn_overrides":"Spawn overrides","structure_feature.spawn_overrides.bounding_box":"Bounding box","structure_feature.spawn_overrides.bounding_box.piece":"Piece","structure_feature.spawn_overrides.bounding_box.full":"Full","structure_feature.spawn_overrides.spawns":"Spawns","structure_feature.spawn_overrides.spawns.entry":"Spawn","structure_feature.spawn_overrides.spawns.entry.type":"Type","structure_feature.spawn_overrides.spawns.entry.weight":"Weight","structure_feature.spawn_overrides.spawns.entry.minCount":"Min count","structure_feature.spawn_overrides.spawns.entry.maxCount":"Max count","structure_feature.ruined_portal.setups":"Setups","structure_feature.ruined_portal.setups.entry":"Setup","structure_feature.ruined_portal.setups.entry.placement":"Placement","structure_feature.ruined_portal.setups.entry.air_pocket_probability":"Air pocket probability","structure_feature.ruined_portal.setups.entry.mossiness":"Mossiness","structure_feature.ruined_portal.setups.entry.overgrown":"Overgrown","structure_feature.ruined_portal.setups.entry.vines":"Vines","structure_feature.ruined_portal.setups.entry.can_be_cold":"Can be cold","structure_feature.ruined_portal.setups.entry.replace_with_blackstone":"Replace with blackstone","structure_feature.ruined_portal.setups.entry.weight":"Weight","structure_feature.jigsaw.start_pool":"Start pool","structure_feature.jigsaw.size":"Size","structure_feature.jigsaw.start_height":"Start height","structure_feature.jigsaw.project_start_to_heightmap":"Project start to heightmap","structure_feature.jigsaw.use_expansion_hack":"Use expansion hack","structure_feature.step":"Generation step","structure_placement.type":"Type","structure_placement.locate_offset":"Locate offset","structure_placement.exclusion_zone":"Exclusion zone","structure_placement.exclusion_zone.other_set":"Other set","structure_placement.exclusion_zone.chunk_count":"Chunk count","structure_placement.frequency":"Frequency","structure_placement.frequency_reduction_method":"Frequency reduction method","structure_placement.frequency_reduction_method.default":"Default","structure_placement.frequency_reduction_method.legacy_type_1":"Legacy 1","structure_placement.frequency_reduction_method.legacy_type_2":"Legacy 2","structure_placement.frequency_reduction_method.legacy_type_3":"Legacy 3","structure_placement.concentric_rings.distance":"Distance","structure_placement.concentric_rings.spread":"Spread","structure_placement.concentric_rings.count":"Count","structure_placement.concentric_rings.preferred_biomes":"Preferred biomes","structure_placement.random_spread.spread_type":"Spread type","structure_placement.random_spread.spread_type.linear":"Linear","structure_placement.random_spread.spread_type.triangular":"Triangular","structure_placement.random_spread.spacing":"Spacing","structure_placement.random_spread.spacing.help":"The average distance in chunks between two structures of this type.","structure_placement.random_spread.separation":"Separation","structure_placement.random_spread.separation.help":"The minumum distance in chunks between two structures of this type.","structure_placement.random_spread.salt":"Salt","structure_placement.random_spread.locate_offset":"Locate offset","structure_set.string":"Reference","structure_set.object":"Inline","structure_set.structures":"Structures","structure_set.structures.entry":"Structure","structure_set.structures.entry.structure":"Structure feature","structure_set.structures.entry.weight":"Weight","structure_set.placement":"Placement","surface_builder.config":"Config","surface_builder.top_material":"Top material","surface_builder.type":"Type","surface_builder.under_material":"Under material","surface_builder.underwater_material":"Underwater material","table.type":"Type","table.type.block":"Block","table.type.chest":"Chest","table.type.empty":"Empty","table.type.entity":"Entity","table.type.fishing":"Fishing","table.type.generic":"Generic","tag.string":"Single","tag.list":"Multiple","tag.list.string":"Reference","tag.list.object":"Inline","tag.replace":"Replace","tag.values":"Values","terrain_shaper.offset":"Offset","terrain_shaper.factor":"Factor","terrain_shaper.jaggedness":"Jaggedness","terrain_spline.number":"Constant","terrain_spline.object":"Spline","terrain_spline.coordinate":"Coordinate","terrain_spline.coordinate.continents":"Continents","terrain_spline.coordinate.erosion":"Erosion","terrain_spline.coordinate.weirdness":"Weirdness","terrain_spline.coordinate.ridges":"Ridges","terrain_spline.points":"Points","terrain_spline.points.entry":"Point","terrain_spline.points.entry.location":"Location","terrain_spline.points.entry.value":"Value","terrain_spline.points.entry.derivative":"Derivative","template_element.element_type":"Type","template_element.elements":"Elements","template_element.feature":"Placed feature","template_element.location":"Location","template_element.processors":"Processors","template_element.projection":"Projection","template_element.projection.rigid":"Rigid","template_element.projection.terrain_matching":"Terrain matching","template_pool.elements":"Elements","template_pool.elements.entry":"Element","template_pool.elements.entry.element":"Element","template_pool.elements.entry.weight":"Weight","template_pool.fallback":"Fallback","template_pool.name":"Name","text_component":"Text component","text_component.boolean":"Boolean","text_component.list":"Array","text_component.number":"Number","text_component.object":"Object","text_component.object.text":"Plain text","text_component.object.translation":"Translated text","text_component.object.score":"Score value","text_component.object.selector":"Entity name","text_component.object.keybind":"Keybind","text_component.object.nbt":"NBT value","text_component.string":"String","text_component_object.block":"Block","text_component_object.bold":"Bold","text_component_object.clickEvent":"Click event","text_component_object.clickEvent.action":"Action","text_component_object.clickEvent.action.change_page":"Change page","text_component_object.clickEvent.action.copy_to_clipboard":"Copy to clipboard","text_component_object.clickEvent.action.open_file":"Open file","text_component_object.clickEvent.action.open_url":"Open url","text_component_object.clickEvent.action.run_command":"Run command","text_component_object.clickEvent.action.suggest_command":"Suggest command","text_component_object.clickEvent.value":"Value","text_component_object.color":"Color","text_component_object.entity":"Entity","text_component_object.extra":"Extra","text_component_object.font":"Font","text_component_object.hoverEvent":"Hover event","text_component_object.hoverEvent.action":"Action","text_component_object.hoverEvent.action.show_entity":"Show entity","text_component_object.hoverEvent.action.show_item":"Show item","text_component_object.hoverEvent.action.show_text":"Show text","text_component_object.hoverEvent.contents":"Contents","text_component_object.hoverEvent.value":"Value","text_component_object.insertion":"Insertion","text_component_object.interpret":"Interpret","text_component_object.italic":"Italic","text_component_object.keybind":"Keybind","text_component_object.nbt":"NBT","text_component_object.obfuscated":"Obfuscated","text_component_object.score":"Score","text_component_object.score.name":"Name","text_component_object.score.objective":"Objective","text_component_object.score.value":"Value","text_component_object.selector":"Selector","text_component_object.storage":"Storage","text_component_object.strikethrough":"Strikethrough","text_component_object.text":"Text","text_component_object.translate":"Translate","text_component_object.underlined":"Underlined","text_component_object.with":"With","texture.alias":"Alias","texture.reference":"Reference","tree_decorator.alter_ground.provider":"State provider","tree_decorator.beehive.probability":"Probability","tree_decorator.cocoa.probability":"Probability","tree_decorator.type":"Type","true":"True","trunk_placer.base_height":"Base height","trunk_placer.height_rand_a":"Height random A","trunk_placer.height_rand_b":"Height random B","trunk_placer.bending_trunk_placer.bend_length":"Bend length","trunk_placer.bending_trunk_placer.min_height_for_leaves":"Min height for leaves","trunk_placer.type":"Type","uniform_int.base":"Base","uniform_int.number":"Constant","uniform_int.object":"Uniform","uniform_int.spread":"Spread","unset":"Unset","update.pack_format":"Update the pack_format to %0%","vertical_anchor.absolute":"Absolute","vertical_anchor.above_bottom":"Above bottom","vertical_anchor.below_top":"Below top","world.bonus_chest":"Spawn bonus chest","world.generate_features":"Generate features","world.seed":"Seed","world_preset.dimensions":"Dimensions","world_settings.bonus_chest":"Spawn bonus chest","world_settings.dimensions":"Dimensions","world_settings.generate_features":"Generate features","world_settings.seed":"World seed","worldgen.warning":"This feature is highly experimental and unstable. It can change in future versions. Expect the game to crash when creating worlds.","worldgen/biome_source.checkerboard":"Checkerboard","worldgen/biome_source.checkerboard.help":"Biomes generate in a checkerboard chunk pattern.","worldgen/biome_source.fixed":"Fixed","worldgen/biome_source.fixed.help":"One biome for the whole world.","worldgen/biome_source.multi_noise":"Multi noise","worldgen/biome_source.multi_noise.help":"Custom biome distribution with configurable parameters.","worldgen/biome_source.the_end":"The end","worldgen/biome_source.the_end.help":"Biome distribution for the End.","worldgen/biome_source.vanilla_layered":"Vanilla layered","worldgen/biome_source.vanilla_layered.help":"Biome distribution for the Overworld.","worldgen/block_placer_type.column_placer":"Column","worldgen/block_placer_type.double_plant_placer":"Double plant","worldgen/block_placer_type.simple_block_placer":"Simple","worldgen/block_state_provider_type.dual_noise_provider":"Dual noise provider","worldgen/block_state_provider_type.forest_flower_provider":"Flower forest","worldgen/block_state_provider_type.noise_threshold_provider":"Noise threshold provider","worldgen/block_state_provider_type.noise_provider":"Noise provider","worldgen/block_state_provider_type.plain_flower_provider":"Plain flower","worldgen/block_state_provider_type.randomized_int_state_provider":"Randomized int","worldgen/block_state_provider_type.rotated_block_provider":"Rotated block","worldgen/block_state_provider_type.simple_state_provider":"Simple state","worldgen/block_state_provider_type.weighted_state_provider":"Weighted state","worldgen/carver.canyon":"Canyon","worldgen/carver.cave":"Cave","worldgen/carver.nether_cave":"Nether cave","worldgen/carver.underwater_canyon":"Underwater canyon","worldgen/carver.underwater_cave":"Underwater cave","worldgen/chunk_generator.debug":"Debug world","worldgen/chunk_generator.flat":"Superflat","worldgen/chunk_generator.noise":"Default","worldgen/decorator.carving_mask":"Carving mask","worldgen/decorator.cave_surface":"Cave surface","worldgen/decorator.chance":"Chance","worldgen/decorator.count":"Count","worldgen/decorator.count_extra":"Count extra","worldgen/decorator.count_multilayer":"Count multilayer","worldgen/decorator.count_noise":"Count noise","worldgen/decorator.count_noise_biased":"Count noise biased","worldgen/decorator.dark_oak_tree":"Dark oak tree","worldgen/decorator.decorated":"Decorated","worldgen/decorator.end_gateway":"End gateway","worldgen/decorator.heightmap":"Heightmap","worldgen/decorator.heightmap_spread_double":"Heightmap spread double","worldgen/decorator.iceberg":"Iceberg","worldgen/decorator.lava_lake":"Lava lake","worldgen/decorator.nope":"Nothing","worldgen/decorator.range":"Range","worldgen/decorator.spread_32_above":"Spread 32 above","worldgen/decorator.square":"Square","worldgen/decorator.water_depth_threshold":"Water depth threshold","worldgen/density_function_type.abs":"Abs","worldgen/density_function_type.add":"Add","worldgen/density_function_type.beardifier":"Beardifier","worldgen/density_function_type.blend_alpha":"Blend alpha","worldgen/density_function_type.blend_density":"Blend density","worldgen/density_function_type.blend_offset":"Blend offset","worldgen/density_function_type.cache_2d":"Cache 2D","worldgen/density_function_type.cache_all_in_cell":"Cache all in cell","worldgen/density_function_type.cache_once":"Cache once","worldgen/density_function_type.clamp":"Clamp","worldgen/density_function_type.constant":"Constant","worldgen/density_function_type.cube":"Cube","worldgen/density_function_type.end_islands":"End islands","worldgen/density_function_type.flat_cache":"Flat cache","worldgen/density_function_type.half_negative":"Half negative","worldgen/density_function_type.interpolated":"Interpolated","worldgen/density_function_type.max":"Max","worldgen/density_function_type.min":"Min","worldgen/density_function_type.mul":"Mul","worldgen/density_function_type.noise":"Noise","worldgen/density_function_type.old_blended_noise":"Old blended noise","worldgen/density_function_type.quarter_negative":"Quarter negative","worldgen/density_function_type.range_choice":"Range Choice","worldgen/density_function_type.shift":"Shift","worldgen/density_function_type.shift_a":"Shift A","worldgen/density_function_type.shift_b":"Shift B","worldgen/density_function_type.shifted_noise":"Shifted noise","worldgen/density_function_type.slide":"Slide","worldgen/density_function_type.spline":"Spline","worldgen/density_function_type.square":"Square","worldgen/density_function_type.squeeze":"Squeeze","worldgen/density_function_type.terrain_shaper_spline":"Terrain shaper spline","worldgen/density_function_type.weird_scaled_sampler":"Weird scaled sampler","worldgen/density_function_type.y_clamped_gradient":"Y clamped gradient","worldgen/feature.bamboo":"Bamboo","worldgen/feature.basalt_columns":"Basalt columns","worldgen/feature.basalt_pillar":"Basalt pillar","worldgen/feature.block_column":"Block column","worldgen/feature.block_pile":"Block pile","worldgen/feature.blue_ice":"Blue ice","worldgen/feature.bonus_chest":"Bonus chest","worldgen/feature.chorus_plant":"Chorus plant","worldgen/feature.coral_claw":"Coral claw","worldgen/feature.coral_mushroom":"Coral mushroom","worldgen/feature.coral_tree":"Coral tree","worldgen/feature.decorated":"Decorated","worldgen/feature.delta_feature":"Delta feature","worldgen/feature.desert_well":"Desert well","worldgen/feature.disk":"Disk","worldgen/feature.dripstone_cluster":"Dripstone cluster","worldgen/feature.end_gateway":"End gateway","worldgen/feature.end_island":"End island","worldgen/feature.end_spike":"End spike","worldgen/feature.fill_layer":"Fill layer","worldgen/feature.flower":"Flower","worldgen/feature.forest_rock":"Forest rock","worldgen/feature.fossil":"Fossil","worldgen/feature.freeze_top_layer":"Freeze top layer","worldgen/feature.geode":"Geode","worldgen/feature.glow_lichen":"Glow lichen","worldgen/feature.glowstone_blob":"Glowstone blob","worldgen/feature.growing_plant":"Growing plant","worldgen/feature.huge_brown_mushroom":"Huge brown mushroom","worldgen/feature.huge_fungus":"Huge fungus","worldgen/feature.huge_red_mushroom":"Huge red mushroom","worldgen/feature.ice_patch":"Ice patch","worldgen/feature.ice_spike":"Ice spike","worldgen/feature.iceberg":"Iceberg","worldgen/feature.kelp":"Kelp","worldgen/feature.lake":"Lake","worldgen/feature.large_dripstone":"Large dripstone","worldgen/feature.monster_room":"Monster room","worldgen/feature.nether_forest_vegetation":"Nether forest vegetation","worldgen/feature.netherrack_replace_blobs":"Netherrack replace blobs","worldgen/feature.no_bonemeal_flower":"No bonemeal flower","worldgen/feature.no_op":"Nothing","worldgen/feature.ore":"Ore","worldgen/feature.pointed_dripstone":"Pointed dripstone","worldgen/feature.random_boolean_selector":"Random boolean selector","worldgen/feature.random_patch":"Random patch","worldgen/feature.random_selector":"Random selector","worldgen/feature.replace_single_block":"Replace single block","worldgen/feature.root_system":"Root system","worldgen/feature.scattered_ore":"Scattered ore","worldgen/feature.sculk_patch":"Sculk patch","worldgen/feature.sea_pickle":"Sea pickle","worldgen/feature.seagrass":"Seagrass","worldgen/feature.simple_block":"Simple block","worldgen/feature.simple_random_selector":"Simple random selector","worldgen/feature.small_dripstone":"Small dripstone","worldgen/feature.spring_feature":"Spring feature","worldgen/feature.tree":"Tree","worldgen/feature.twisting_vines":"Twisting vines","worldgen/feature.underwater_magma":"Underwater magma","worldgen/feature.vegetation_patch":"Vegetation patch","worldgen/feature.vines":"Vines","worldgen/feature.void_start_platform":"Void start platform","worldgen/feature.waterlogged_vegetation_patch":"Waterlogged vegetation patch","worldgen/feature.weeping_vines":"Weeping vines","worldgen/feature_size_type.three_layers_feature_size":"Three layers","worldgen/feature_size_type.two_layers_feature_size":"Two layers","worldgen/foliage_placer_type.acacia_foliage_placer":"Acacia","worldgen/foliage_placer_type.blob_foliage_placer":"Blob","worldgen/foliage_placer_type.bush_foliage_placer":"Bush","worldgen/foliage_placer_type.dark_oak_foliage_placer":"Dark oak","worldgen/foliage_placer_type.fancy_foliage_placer":"Fancy","worldgen/foliage_placer_type.jungle_foliage_placer":"Jungle","worldgen/foliage_placer_type.mega_pine_foliage_placer":"Mega pine","worldgen/foliage_placer_type.pine_foliage_placer":"Pine","worldgen/foliage_placer_type.spruce_foliage_placer":"Spruce","worldgen/material_condition.above_preliminary_surface":"Above preliminary surface","worldgen/material_condition.biome":"Biome","worldgen/material_condition.hole":"Hole","worldgen/material_condition.noise_threshold":"Noise threshold","worldgen/material_condition.not":"Not","worldgen/material_condition.steep":"Steep","worldgen/material_condition.stone_depth":"Stone depth","worldgen/material_condition.temperature":"Temperature","worldgen/material_condition.vertical_gradient":"Vertical gradient","worldgen/material_condition.water":"Water","worldgen/material_condition.y_above":"Y above","worldgen/material_rule.bandlands":"Bandlands","worldgen/material_rule.block":"Block","worldgen/material_rule.condition":"Condition","worldgen/material_rule.sequence":"Sequence","worldgen/placement_modifier_type.biome":"Biome","worldgen/placement_modifier_type.block_predicate_filter":"Block predicate filter","worldgen/placement_modifier_type.carving_mask":"Carving mask","worldgen/placement_modifier_type.count":"Count","worldgen/placement_modifier_type.count_on_every_layer":"Count on every layer","worldgen/placement_modifier_type.environment_scan":"Environment scan","worldgen/placement_modifier_type.height_range":"Height range","worldgen/placement_modifier_type.heightmap":"Heightmap","worldgen/placement_modifier_type.in_square":"In square","worldgen/placement_modifier_type.noise_based_count":"Noise based count","worldgen/placement_modifier_type.noise_threshold_count":"Noise threshold count","worldgen/placement_modifier_type.random_offset":"Random offset","worldgen/placement_modifier_type.rarity_filter":"Rarity filter","worldgen/placement_modifier_type.surface_relative_threshold_filter":"Surface relative threshold filter","worldgen/placement_modifier_type.surface_water_depth_filter":"Surface water depth filter","worldgen/structure_placement.concentric_rings":"Concentric rings","worldgen/structure_placement.random_spread":"Random spread","worldgen/structure_pool_element.empty_pool_element":"Empty","worldgen/structure_pool_element.feature_pool_element":"Feature","worldgen/structure_pool_element.legacy_single_pool_element":"Legacy single","worldgen/structure_pool_element.list_pool_element":"List","worldgen/structure_pool_element.single_pool_element":"Single","worldgen/structure_processor.blackstone_replace":"Blackstone replace","worldgen/structure_processor.block_age":"Block age","worldgen/structure_processor.block_ignore":"Block ignore","worldgen/structure_processor.block_rot":"Block rot","worldgen/structure_processor.gravity":"Gravity","worldgen/structure_processor.jigsaw_replacement":"Jigsaw replacement","worldgen/structure_processor.lava_submerged_block":"Lava submerged block","worldgen/structure_processor.nop":"Nothing","worldgen/structure_processor.rule":"Rule","worldgen/tree_decorator_type.alter_ground":"Alter ground","worldgen/tree_decorator_type.beehive":"Beehive","worldgen/tree_decorator_type.cocoa":"Cocoa","worldgen/tree_decorator_type.leave_vine":"Leave vine","worldgen/tree_decorator_type.trunk_vine":"Trunk vine","worldgen/trunk_placer_type.bending_trunk_placer":"Bending","worldgen/trunk_placer_type.dark_oak_trunk_placer":"Dark oak","worldgen/trunk_placer_type.fancy_trunk_placer":"Fancy","worldgen/trunk_placer_type.forking_trunk_placer":"Forking","worldgen/trunk_placer_type.giant_trunk_placer":"Giant","worldgen/trunk_placer_type.mega_jungle_trunk_placer":"Mega jungle","worldgen/trunk_placer_type.straight_trunk_placer":"Straight"}');export default e; +//# sourceMappingURL=en.b4f154b3.js.map diff --git a/assets/en.b4f154b3.js.map b/assets/en.b4f154b3.js.map new file mode 100644 index 00000000..a77a4e44 --- /dev/null +++ b/assets/en.b4f154b3.js.map @@ -0,0 +1 @@ +{"version":3,"file":"en.b4f154b3.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/assets/es.0541717e.js b/assets/es.0541717e.js new file mode 100644 index 00000000..23bed868 --- /dev/null +++ b/assets/es.0541717e.js @@ -0,0 +1,2 @@ +var e=JSON.parse('{"advancement.criteria":"Criterios","advancement.display":"Mostrar","advancement.display.announce_to_chat":"Anunciar al chat","advancement.display.background":"Fondo","advancement.display.description":"Descripción","advancement.display.frame":"Marco","advancement.display.frame.challenge":"Desafío","advancement.display.frame.goal":"Objetivo","advancement.display.frame.task":"Tarea","advancement.display.help":"Si está presente, el progreso aparecerá en las pestañas de progresos.","advancement.display.hidden":"Oculto","advancement.display.icon":"Icono","advancement.display.icon.item":"Objecto del icono","advancement.display.icon.nbt":"NBT del icono","advancement.display.show_toast":"Mostrar notificación","advancement.display.title":"Título","advancement.parent":"Progreso padre","advancement.rewards":"Recompensas","advancement.rewards.experience":"Experiencia","advancement.rewards.function":"Función","advancement.rewards.loot":"Tablas de botín","advancement.rewards.recipes":"Recetas","advancement_trigger.bee_nest_destroyed":"Colmena destruida","advancement_trigger.bred_animals":"Cría animales","advancement_trigger.brewed_potion":"Hizo pociones","advancement_trigger.changed_dimension":"Cambió de dimensión","advancement_trigger.channeled_lightning":"Canalizó rayo","advancement_trigger.construct_beacon":"Construyó faro","advancement_trigger.consume_item":"Consume objecto","advancement_trigger.cured_zombie_villager":"Curó aldeano zombi","advancement_trigger.effects_changed":"Cambió de efectos","advancement_trigger.enchanted_item":"Encantó objecto","advancement_trigger.enter_block":"Ingresar bloque","advancement_trigger.entity_hurt_player":"Entidad lastimó jugador","advancement_trigger.entity_killed_player":"Entidad mató jugador","advancement_trigger.fall_from_height":"Caer de altura","advancement_trigger.filled_bucket":"Llenó cubo","advancement_trigger.fishing_rod_hooked":"Caña de pescar enganchó","advancement_trigger.hero_of_the_village":"Héroe de la aldea","advancement_trigger.impossible":"Imposible","advancement_trigger.inventory_changed":"Inventario cambió","advancement_trigger.item_durability_changed":"Durabilidad de objeto cambió","advancement_trigger.item_used_on_block":"Objeto usó en bloque","advancement_trigger.killed_by_crossbow":"Muerto por ballesta","advancement_trigger.levitation":"Levitación","advancement_trigger.location":"Posición","advancement_trigger.nether_travel":"Viaje por el Infierno","advancement_trigger.placed_block":"Colocó bloque","advancement_trigger.player_generates_container_loot":"Jugador genera botín de contenedor","advancement_trigger.player_hurt_entity":"Jugador lastimó entidad","advancement_trigger.player_killed_entity":"Jugador mató entidad","advancement_trigger.recipe_unlocked":"Receta desbloqueada","advancement_trigger.ride_entity_in_lava":"Montar entidad en lava","advancement_trigger.safely_harvest_honey":"Recolectar miel de manera segura","advancement_trigger.shot_crossbow":"Disparó con ballesta","advancement_trigger.slept_in_bed":"Dormió en cama","advancement_trigger.slide_down_block":"Deslizarse un bloque","advancement_trigger.summoned_entity":"Invocó entidad","advancement_trigger.tame_animal":"Domar animal","advancement_trigger.target_hit":"Dar en el blanco","advancement_trigger.thrown_item_picked_up_by_entity":"Entidad recoge item lanzado","advancement_trigger.tick":"Tick","advancement_trigger.used_ender_eye":"Ojo de Ender usado","advancement_trigger.used_totem":"Tótem usado","advancement_trigger.villager_trade":"Comercio con Aldeano","advancement_trigger.voluntary_exile":"Exilio voluntario","attribute.generic_armor":"Armadura","attribute.generic_armor_toughness":"Dureza de armadura","attribute.generic_attack_damage":"Daño","attribute.generic_attack_knockback":"Retroceso","attribute.generic_attack_speed":"Velocidad de ataque","attribute.generic_flying_speed":"Velocidad de vuelo","attribute.generic_follow_range":"Rango de seguimiento","attribute.generic_knockback_resistance":"Resistencia de retroceso","attribute.generic_luck":"Suerte","attribute.generic_max_health":"Vida máxima","attribute.generic_movement_speed":"Velocidad de movimiento","dimension":"Dimensión"}');export default e; +//# sourceMappingURL=es.0541717e.js.map diff --git a/assets/es.0541717e.js.map b/assets/es.0541717e.js.map new file mode 100644 index 00000000..751d7ace --- /dev/null +++ b/assets/es.0541717e.js.map @@ -0,0 +1 @@ +{"version":3,"file":"es.0541717e.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/assets/es.c83d9c73.js b/assets/es.c83d9c73.js deleted file mode 100644 index 450f2f9a..00000000 --- a/assets/es.c83d9c73.js +++ /dev/null @@ -1,2 +0,0 @@ -var e=JSON.parse('{"advancement.criteria":"Criterios","advancement.display":"Mostrar","advancement.display.announce_to_chat":"Anunciar en el chat","advancement.display.background":"Fondo","advancement.display.description":"Descripción","advancement.display.frame.challenge":"Desafío","advancement.display.frame.goal":"Objetivo","advancement.display.frame.task":"Tarea","advancement.display.help":"Si está presente, el progreso aparecerá en la pestaña de progresos.","advancement.display.hidden":"Oculto","advancement.display.icon":"Icono","advancement.display.icon.item":"Elemento del icono","advancement.display.icon.nbt":"NBT del icono","advancement.display.show_toast":"Mostrar notificación","advancement.display.title":"Título","advancement.parent":"Progreso padre","advancement.rewards":"Recompensas","advancement.rewards.experience":"Experiencia","advancement.rewards.function":"Función","advancement.rewards.loot":"Tablas de botín","advancement.rewards.recipes":"Recetas","advancement_trigger.bee_nest_destroyed":"Colmena de abejas destruída","advancement_trigger.bred_animals":"Animales criados","advancement_trigger.brewed_potion":"Poción preparada","advancement_trigger.changed_dimension":"Cambio de dimensión","advancement_trigger.channeled_lightning":"Rayo canalizado","advancement_trigger.construct_beacon":"Faro (Beacon) construido","advancement_trigger.consume_item":"Objeto consumido","advancement_trigger.cured_zombie_villager":"Aldeano zombi curado","advancement_trigger.effects_changed":"Cambio de efectos","advancement_trigger.enchanted_item":"Objeto encantado","advancement_trigger.enter_block":"Entrar a un bloque","advancement_trigger.entity_hurt_player":"Jugador herido por entidad","advancement_trigger.entity_killed_player":"Jugador matado por entidad","advancement_trigger.filled_bucket":"Cubo lleno","advancement_trigger.fishing_rod_hooked":"Anzuelo picado (caña de pescar)","advancement_trigger.hero_of_the_village":"Héroe de la aldea","advancement_trigger.impossible":"Imposible","advancement_trigger.inventory_changed":"Cambio de inventario","advancement_trigger.item_durability_changed":"Cambio de durabilidad de objeto","advancement_trigger.item_used_on_block":"Objeto usado en un bloque","advancement_trigger.killed_by_crossbow":"Muerto por ballesta","advancement_trigger.levitation":"Levitación","advancement_trigger.location":"Posición","advancement_trigger.nether_travel":"Viaje por el Infierno","advancement_trigger.placed_block":"Bloque colocado","advancement_trigger.player_generates_container_loot":"El jugador genera un contenedor con botín","advancement_trigger.player_hurt_entity":"El jugador hiere a una entidad","advancement_trigger.player_killed_entity":"El jugador mata a una entidad","advancement_trigger.recipe_unlocked":"Receta desbloqueada","advancement_trigger.safely_harvest_honey":"Recolectar miel de manera segura","advancement_trigger.shot_crossbow":"Disparar con ballesta","advancement_trigger.slept_in_bed":"Dormir en una cama","advancement_trigger.slide_down_block":"Deslizarse un bloque","advancement_trigger.summoned_entity":"Invocar una entidad","advancement_trigger.tame_animal":"Domar un animal","advancement_trigger.target_hit":"Dar en el blanco","advancement_trigger.thrown_item_picked_up_by_entity":"Entidad recoge item lanzado","advancement_trigger.tick":"Tick","advancement_trigger.used_ender_eye":"Ojo de Ender usado","advancement_trigger.used_totem":"Tótem usado","advancement_trigger.villager_trade":"Comercio con Aldeano","advancement_trigger.voluntary_exile":"Exilio voluntario","attribute.generic_armor":"Armadura","attribute.generic_armor_toughness":"Dureza de armadura","attribute.generic_attack_damage":"Daño","attribute.generic_attack_knockback":"Retroceso","attribute.generic_attack_speed":"Velocidad de ataque","attribute.generic_flying_speed":"Velocidad de vuelo","attribute.generic_follow_range":"Rango de seguimiento","attribute.generic_knockback_resistance":"Resistencia de retroceso","attribute.generic_luck":"Suerte","attribute.generic_max_health":"Vida máxima","attribute.generic_movement_speed":"Velocidad de movimiento","dimension":"Dimensión"}');export default e; -//# sourceMappingURL=es.c83d9c73.js.map diff --git a/assets/es.c83d9c73.js.map b/assets/es.c83d9c73.js.map deleted file mode 100644 index 68fbbe78..00000000 --- a/assets/es.c83d9c73.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"es.c83d9c73.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/assets/index.1a21c031.js b/assets/index.301407da.js similarity index 99% rename from assets/index.1a21c031.js rename to assets/index.301407da.js index 4b40a73a..6ce7da71 100644 --- a/assets/index.1a21c031.js +++ b/assets/index.301407da.js @@ -1,2 +1,2 @@ -var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,s=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,i=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&s(e,n,t[n]);if(o)for(var n of o(t))a.call(t,n)&&s(e,n,t[n]);return e},l=(e,o)=>t(e,n(o));import{y as c,a as d,r as u,l as h,g as m,b as p,s as f,c as g,d as v,e as w,f as _,j as y,h as b,i as x,k,m as C,n as M,q as A,A as I,F as z,o as j,p as E,t as $,C as O,u as S,I as L,v as P,w as D,x as V,z as N,_ as T,X as B,B as H,D as R,E as F,G,H as W,J,K as U,L as Y,M as q,N as Z,O as X,P as K,Q,Z as ee,R as te,S as ne,T as oe,U as re,V as ae,W as se,Y as ie,$ as le,a0 as ce,a1 as de,a2 as ue}from"./vendor.fcb8aee9.js";var he;function me({type:e,id:t}){return c((()=>{var e;null==(e=document.getElementById("ad-placeholder"))||e.remove(),"ethicalads"in window&ðicalads.load()}),[]),d("div",{"data-ea-publisher":"misode-github-io","data-ea-type":e,class:"ad dark flat",id:t})}function pe({icon:e,label:t,active:n,class:o,tooltip:r,tooltipLoc:a,onClick:s}){return d("div",{class:`btn${n?" active":""}${o?` ${o}`:""}${r?` tooltipped tip-${null!=a?a:"sw"}`:""}`,onClick:s,"aria-label":r},e&&Fe[e],t&&d("span",null,t))}!function(e){const t="Site",n="Generator";function o(e,t,n){ga("send","event",e,t,n)}function r(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){r(4,e),o(t,"set-language",e)},e.setTheme=function(e){r(1,e),o(t,"set-theme",e)},e.setVersion=function(e){r(3,e),o(n,"set-version",e)},e.setPreview=function(e){r(5,e),o(n,"set-preview",e)},e.setGenerator=function(e){r(6,e)},e.setPrefersColorScheme=function(e){r(7,e)},e.generatorEvent=function(e,t){o(n,e,t)}}(he||(he={}));var fe=JSON.parse('{"languages":[{"code":"de","name":"Deutsch"},{"code":"en","name":"English"},{"code":"es","name":"Español"},{"code":"fr","name":"Français"},{"code":"it","name":"Italiano"},{"code":"ja","name":"日本語"},{"code":"pl","name":"Polski"},{"code":"pt","name":"Português"},{"code":"ru","name":"Русский"},{"code":"sk","name":"Slovenčina","schemas":false},{"code":"zh-cn","name":"简体中文"},{"code":"zh-tw","name":"正體中文"}],"versions":[{"id":"1.15","ref":"1.15.2"},{"id":"1.16","ref":"1.16.5"},{"id":"1.17","ref":"1.17.1"},{"id":"1.18","ref":"1.18.1"},{"id":"1.18.2","ref":"1.18.1"},{"id":"1.19","dynamic":true}],"generators":[{"id":"loot_table","url":"loot-table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","url":"predicate","path":"predicates","schema":"predicate"},{"id":"item_modifier","url":"item-modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","url":"advancement","path":"advancements","schema":"advancement"},{"id":"recipe","url":"recipe","path":"recipes","schema":"recipe"},{"id":"dimension","url":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension_type","url":"dimension-type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","url":"world","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen/biome","url":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/configured_carver","url":"worldgen/carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/configured_feature","url":"worldgen/feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/density_function","url":"worldgen/density-function","category":"worldgen","schema":"density_function","minVersion":"1.18.2"},{"id":"worldgen/placed_feature","url":"worldgen/placed-feature","category":"worldgen","schema":"placed_feature","minVersion":"1.18"},{"id":"worldgen/noise","url":"worldgen/noise","category":"worldgen","schema":"noise_parameters","minVersion":"1.18"},{"id":"worldgen/noise_settings","url":"worldgen/noise-settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/configured_structure_feature","url":"worldgen/structure-feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16","maxVersion":"1.18.2"},{"id":"worldgen/structure","url":"worldgen/structure","category":"worldgen","schema":"structure","minVersion":"1.19"},{"id":"worldgen/structure_set","url":"worldgen/structure-set","category":"worldgen","schema":"structure_set","minVersion":"1.18.2"},{"id":"worldgen/configured_surface_builder","url":"worldgen/surface-builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16","maxVersion":"1.17"},{"id":"worldgen/processor_list","url":"worldgen/processor-list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template_pool","url":"worldgen/template-pool","category":"worldgen","schema":"template_pool","minVersion":"1.16"},{"id":"worldgen/world_preset","url":"worldgen/world-preset","category":"worldgen","schema":"world_preset","minVersion":"1.19"},{"id":"worldgen/flat_level_generator_preset","url":"worldgen/flat-world-preset","category":"worldgen","schema":"flat_level_generator_preset","minVersion":"1.19"},{"id":"block_definition","url":"assets/blockstate","path":"blockstates","category":"assets","schema":"block_definition"},{"id":"model","url":"assets/model","path":"models","category":"assets","schema":"model"}]}');function ge(e){return"object"==typeof e&&null!==e}const ve=e=>("0"+e.toString(16)).substr(-2);function we(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,ve).join("")}function _e(){return BigInt(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER))}function ye(e){const t=Math.floor(4294967296*Math.random())-2147483648,n=e.get(new h.Path(["dimensions"]));e.set(new h.Path(["seed"]),t,!0),"object"==typeof n&&null!==n&&Object.keys(n).forEach((n=>{e.set(new h.Path(["dimensions",n,"generator","seed"]),t,!0),e.set(new h.Path(["dimensions",n,"generator","biome_source","seed"]),t,!0)})),e.set(new h.Path(["generator","seed"]),t,!0),e.set(new h.Path(["generator","biome_source","seed"]),t)}function be(e){let t=0;for(let n=0;n=0&&(e=e.slice(0,t)),xe(e)}function Ce(e){const t=ke(e).replace(/^\//,"").replace(/\/$/,"");return fe.generators.find((e=>e.url===t))}function Me(e){const t=e.indexOf("?");return t>=0?(e=e.slice(t+1),new Map(e.split("&").map((e=>{const t=e.indexOf("=");return-1===t?[e,"true"]:[decodeURIComponent(e.slice(0,t)),decodeURIComponent(e.slice(t+1))]})))):new Map}function Ae(e,t){const n=m(),o=Me(n);Object.entries(e).forEach((([e,t])=>{void 0===t?o.delete(e):o.set(e,t)}));const r=Array.from(o).map((([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`));p(`${t?xe(t):ke(n)}${0===r.length?"":`?${r.join("&")}`}`,!0)}function Ie(e){const t=Math.abs(be(e));return[t%256,(t>>8)%256,(t>>16)%256]}function ze(e){return e*e}function je(e,t,n){return Math.max(e,Math.min(t,n))}function Ee(e,t,n){return n<0?e:n>1?t:$e(n,e,t)}function $e(e,t,n){return t+e*(n-t)}function Oe(e){return e instanceof Error?e.message:`${e}`}const Se=u();function Le(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){if(e.constructor!==t.constructor)return!1;let n,o;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(o=0;o{}:e=>{const t=e.target.value;null==l||l(t)},h=f(null);c((()=>{r&&h.current&&h.current.select()}),[r]);const m=i&&we();return d("div",{class:`btn btn-input ${n?"large-input":""} ${o?"larger-input":""}`,onClick:e=>e.stopPropagation()},e&&Fe[e],t&&d("span",null,t),d("input",{ref:h,type:"text",value:a,onChange:u,placeholder:s,list:m}),i&&d("datalist",{id:m},i.map((e=>d("option",{value:e})))))}function Ve({cooldown:e,invert:t,initial:n}={}){const[o,r]=g(n),a=f(void 0);return[o,()=>{r(!t),void 0!==a.current&&clearTimeout(a.current),a.current=setTimeout((()=>{r(!!t)}),null!=e?e:2e3)}]}function Ne({size:e,draw:t,onDrag:n,onHover:o,onLeave:r},a){const s=f(null),i=f(),l=f(),d=f([0,0]),u=f(!1);c((()=>{const e=e=>{i.current=[e.offsetX,e.offsetY]},t=e=>{if(void 0===i.current){const t=e.offsetX/s.current.clientWidth,n=e.offsetY/s.current.clientHeight;return void(null==o||o(t,n))}if(!n)return;const t=e.offsetX-i.current[0],r=e.offsetY-i.current[1];0===t&&0===r||(d.current=[d.current[0]+t,d.current[1]+r],u.current||(cancelAnimationFrame(l.current),l.current=requestAnimationFrame((async()=>{u.current=!0;const e=d.current[0]/s.current.clientWidth,t=d.current[1]/s.current.clientHeight;d.current=[0,0],await(null==n?void 0:n(e,t)),u.current=!1})))),i.current=[e.offsetX,e.offsetY]},a=()=>{i.current=void 0},c=()=>{null==r||r()};return s.current.addEventListener("mousedown",e),s.current.addEventListener("mousemove",t),s.current.addEventListener("mouseleave",c),document.body.addEventListener("mouseup",a),()=>{var n,o,r;null==(n=s.current)||n.removeEventListener("mousedown",e),null==(o=s.current)||o.removeEventListener("mousemove",t),null==(r=s.current)||r.removeEventListener("mouseleave",c),document.body.removeEventListener("mouseup",a)}}),[...null!=a?a:[],s.current]);const h=f(),m=f(0);return h.current=async()=>{const n=s.current.getContext("2d"),o=e();s.current.width=o[0],s.current.height=o[1];const r=n.getImageData(0,0,o[0],o[1]),a=m.current+=1;try{await t(r)}catch(i){throw i}a===m.current&&n.putImageData(r,0,0)},{canvas:s,redraw:h.current}}function Te(){const[e,t]=g(!1),n=()=>{t(!1)};return c((()=>(e&&(document.body.addEventListener("click",n),document.body.addEventListener("contextmenu",n)),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("contextmenu",n)})),[e]),[e,()=>t(!0)]}function Be(e){const[t,n]=g(matchMedia(e).matches),o=e=>{n(e.matches)};return c((()=>{const t=matchMedia(e);return t.addEventListener("change",o),()=>{t.removeEventListener("change",o)}}),[e]),t}function He(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),()=>{null==e||e.removeListener(n)})),[e])}function Re(e){const{icon:t,label:n,relative:o,tooltip:r,tooltipLoc:a,children:s}=e,[c,u]=Te();return d("div",i({class:"btn-menu"+(!1===o?" no-relative":"")},e),d(pe,l(i({},{icon:t,label:n,tooltip:r,tooltipLoc:a}),{onClick:u})),c&&d("div",{class:"btn-group"},s))}const Fe={alert:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"})),archive:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"})),arrow_left:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"})),arrow_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"})),check:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"})),chevron_down:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"})),chevron_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"})),chevron_up:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"})),clippy:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"})),code:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"})),dash:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"})),device_desktop:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"})),dot_fill:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8z"})),download:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),duplicate:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M10.5 3a.75.75 0 01.75.75v1h1a.75.75 0 010 1.5h-1v1a.75.75 0 01-1.5 0v-1h-1a.75.75 0 010-1.5h1v-1A.75.75 0 0110.5 3z"}),d("path",{"fill-rule":"evenodd",d:"M6.75 0A1.75 1.75 0 005 1.75v7.5c0 .966.784 1.75 1.75 1.75h7.5A1.75 1.75 0 0016 9.25v-7.5A1.75 1.75 0 0014.25 0h-7.5zM6.5 1.75a.25.25 0 01.25-.25h7.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5z"}),d("path",{d:"M1.75 5A1.75 1.75 0 000 6.75v7.5C0 15.216.784 16 1.75 16h7.5A1.75 1.75 0 0011 14.25v-1.5a.75.75 0 00-1.5 0v1.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25h1.5a.75.75 0 000-1.5h-1.5z"})),eye:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"})),eye_closed:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"})),file:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"})),file_directory:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"})),gear:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"})),globe:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"})),history:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"})),info:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"})),issue_opened:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"})),kebab_horizontal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"})),link:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"})),link_external:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z"})),mark_github:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})),moon:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"})),play:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"})),plus:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"})),plus_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"})),repo:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"})),search:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"})),sort_asc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75zm12.927-9.677a.25.25 0 00-.354 0l-3 3A.25.25 0 009.75 6H12v6.75a.75.75 0 001.5 0V6h2.25a.25.25 0 00.177-.427l-3-3z"})),sort_desc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75z"}),d("path",{d:"M13.5 10h2.25a.25.25 0 01.177.427l-3 3a.25.25 0 01-.354 0l-3-3A.25.25 0 019.75 10H12V3.75a.75.75 0 011.5 0V10z"})),square:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4 5.75C4 4.784 4.784 4 5.75 4h4.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0110.25 12h-4.5A1.75 1.75 0 014 10.25v-4.5zm1.75-.25a.25.25 0 00-.25.25v4.5c0 .138.112.25.25.25h4.5a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-4.5z"})),square_fill:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 4A1.75 1.75 0 004 5.75v4.5c0 .966.784 1.75 1.75 1.75h4.5A1.75 1.75 0 0012 10.25v-4.5A1.75 1.75 0 0010.25 4h-4.5z"})),stack:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.122.392a1.75 1.75 0 011.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 01-1.756 0L2.119 5.456a1.25 1.25 0 010-2.162L7.122.392zM8.125 1.69a.25.25 0 00-.25 0l-4.63 2.685 4.63 2.685a.25.25 0 00.25 0l4.63-2.685-4.63-2.685zM1.601 7.789a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0L1.874 8.814A.75.75 0 011.6 7.789zm0 3.5a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0l-5.248-3.044a.75.75 0 01-.273-1.025z"})),sun:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"})),sync:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"})),tag:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"})),terminal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z"})),three_bars:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"})),trashcan:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"})),unfold:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"})),upload:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),x:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})),x_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"}))};function Ge({error:e,onDismiss:t}){const[n,o]=g(!1),[r,a]=g(void 0);c((()=>{if(e instanceof Error){const t=e.stack.split("\n").map((e=>e.replace(/^(\s+)at (?:async )?(https?:.*)/,"$1at ($2)")));a(t.join("\n")),v.exports.mapStackTrace(t.join("\n"),(e=>{const t=e.map((e=>e.replace(/..\/..\/src\//,"src/"))).join("\n");a(t)}))}}),[e]);const s=w((()=>{let t="https://github.com/misode/misode.github.io/issues/new";return e instanceof Error?(t+=`?title=${encodeURIComponent(`${e.name}: ${e.message}`)}`,r&&(t+=`&body=${encodeURIComponent(`\`\`\`\n${e.name}: ${e.message}\n${r}\n\`\`\`\n`)}`)):t+=`?title=${encodeURIComponent(e.toString())}`,t}),[e,r]);return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},Fe.x),d("h3",null,e instanceof Error?e.message:e,r&&d("span",{onClick:()=>o(!n)},Fe.info)),r&&n&&d("pre",null,r),d("p",null,"If you think this is a bug, you can report it ",d("a",{href:s,target:"_blank"},"on GitHub")))}function We({label:e,value:t,onChange:n}){const o=we();return d("label",{class:"checkbox"},d("input",{id:o,type:"checkbox",checked:t,onClick:()=>n(!t)}),e)}function Je(e,t,n){const o=e=>{const o=e.onChange&&(t=>{var o;const r=t.target.value;null==(o=e.onChange)||o.call(e,n(r))}),r=e.onEnter&&(t=>{var o;if("Enter"===t.key){const r=t.target.value;null==(o=e.onEnter)||o.call(e,n(r))}});return d("input",i(i({},e),{type:t,onChange:o,onKeyDown:r}))};return o.displayName=e,o}const Ue=Je("TextInput","text",(e=>e)),Ye=Je("NumberInput","number",(e=>Number(e))),qe=Je("RangeInput","range",(e=>Number(e)));function Ze({values:e,onSelect:t,searchPlaceholder:n,noResults:o}){const[r,a]=g(""),s=w((()=>{var t;const n=r.trim().split(" ");return null!=(t=null==e?void 0:e.filter((e=>n.every((t=>e.includes(t))))))?t:[]}),[e,r]);return d(_,null,d(De,{icon:"search",large:!0,value:r,onChange:a,doSelect:1,placeholder:null!=n?n:"Search"}),d("div",{class:"result-list"},s.map((e=>d(pe,{key:e,label:e,onClick:()=>null==t?void 0:t(e)}))),0===s.length&&d(pe,{label:null!=o?o:"No results"})))}const Xe="https://raw.githubusercontent.com/misode/technical-changes/main";let Ke=null;async function Qe(){if(!Ke){const e=await(await fetch(`${Xe}/index.json`)).json();Ke=(await Promise.all(e.map(((e,t)=>async function(e,t){const n=await(await fetch(`${Xe}/${e.id}/index.json`)).json();return(await Promise.all(n.map(((n,o)=>async function(e,t,n,o){return function(e){return e.split("\n\n").map((e=>{const t=e.indexOf("|");return{tags:e.substring(0,t).trim().split(" "),content:e.slice(t+1).trim().replaceAll("->","→").replaceAll("\n...\n","\n\n")}}))}(await(await fetch(`${Xe}/${e.id}/${t.id}.md`)).text()).map((r=>i({version:t,group:e,order:1e3*n+o},r)))}(e,et(n),t,o))))).flat()}(et(e),t))))).flat().map((e=>l(i({},e),{tags:[e.group.id,...e.tags]})))}return Ke}function et(e){return"string"==typeof e?{id:e,article:e.match(/\d\dw\d\d[a-z]/)?"minecraft-snapshot-"+e:e.match(/\d+\.\d+(\.\d+)?-pre[0-9]+/)?"minecraft-"+e.replaceAll(".","-").replaceAll("pre","pre-release-"):null}:ge(e)?e:{id:"unknown",article:null}}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`))),["mcdata_master","vanilla_datapack_summary"].forEach((e=>localStorage.removeItem(`cached_${e}`))),caches.delete("misode-v1");const tt="https://raw.githubusercontent.com/misode/mcmeta";function nt(e,t){return`${tt}/${e.dynamic?t:`${e.ref}-${t}`}`}async function ot(e){e.dynamic&&("22w11a"!==localStorage.getItem("cached_latest_version")&&(await async function(e){try{const t=await caches.open("misode-v2");console.debug("[deleteMatching] Opened cache misode-v2");const n=[];for(const o of await t.keys())e(o.url)&&n.push(t.delete(o));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v2: ${Oe(t)}`)}}((e=>e.startsWith(`${tt}/summary/`)||e.startsWith(`${tt}/data/`))),localStorage.setItem("cached_latest_version","22w11a")),e.ref="22w11a")}async function rt(e,t){console.debug(`[fetchRegistries] ${e.id}`);try{const n=await it(`${nt(e,"summary")}/registries/data.min.json`);for(const e in n)t.register(e,n[e].map((e=>"minecraft:"+e)))}catch(n){console.warn("Error occurred while fetching registries:",Oe(n))}}async function at(e,t){console.debug(`[fetchBlockStateMap] ${e.id}`);try{const n=await it(`${nt(e,"summary")}/blocks/data.min.json`);for(const e in n)t["minecraft:"+e]={properties:n[e][0],default:n[e][1]}}catch(n){console.warn("Error occurred while fetching block state map:",Oe(n))}}async function st(e,t,n){console.debug(`[fetchPreset] ${e} ${t} ${n}`);const o=fe.versions.find((t=>t.id===e));try{const e=["blockstates","models"].includes(t)?"assets":"data",r=`${nt(o,e)}/${e}/minecraft/${t}/${n}.json`;return(await fetch(r)).json()}catch(r){throw new Error(`Error occurred while fetching ${t} preset ${n}: ${Oe(r)}`)}}async function it(e,t=(e=>e)){try{const n=await caches.open("misode-v2");console.debug(`[getData] Opened cache misode-v2 ${e}`);const o=await n.match(e);if(o&&o.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await o.json();console.debug(`[getData] fetching data ${e}`);const r=await fetch(e),a=t(await r.json());return await n.put(e,new Response(JSON.stringify(a))),a}catch(n){console.warn(`[getData] Failed to open cache misode-v2: ${Oe(n)}`),console.debug(`[getData] fetching data ${e}`);const o=await fetch(e);return t(await o.json())}}const lt=["1.15","1.16","1.17","1.18","1.18.2","1.19"],ct={},dt={},ut={1.15:y,1.16:b,1.17:x,1.18:k,"1.18.2":C,1.19:M};let ht,mt,pt,ft;async function gt(e){return ct[e]||(ct[e]=(async()=>{try{const t=ut[e].getCollections(),n={};await async function(e,t,n){const o=fe.versions.find((t=>t.id===e));o?(await ot(o),await Promise.all([rt(o,t),at(o,n)])):console.error(`[fetchData] Unknown version ${o} in ${JSON.stringify(fe.versions)}`)}(e,t,n);const o=ut[e].getSchemas(t);return ct[e]={collections:t,schemas:o,blockStates:n},ct[e]}catch(t){throw new Error(`Cannot get version "${e}": ${Oe(t)}`)}})()),ct[e]}function vt(e,t,n){const o=fe.versions.findIndex((t=>t.id===e)),r=t?fe.versions.findIndex((e=>e.id===t)):0,a=n?fe.versions.findIndex((e=>e.id===n)):fe.versions.length-1;return r<=o&&o<=a}const wt={},_t=function(e,t){if(!t)return e();if(void 0===ft){const e=document.createElement("link").relList;ft=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in wt)return;wt[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":ft,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};var yt,bt,xt=JSON.parse('{"add":"Add","add_bottom":"Add to bottom","add_top":"Add to top","advancement":"Advancement","assets":"Assets","block_definition":"Blockstate","changelog.search":"Search changes","changelog.no_results":"No changes","collapse":"Collapse","collapse_all":"Hold %0% to collapse all","configure_layers":"Configure layers","copy":"Copy","copied":"Copied!","copy_context":"Copy context","dimension_type":"Dimension Type","dimension":"Dimension","disabled":"Disabled","download":"Download","duplicate":"Duplicate","enabled":"Enabled","entries_hidden":"%0% entries hidden","entries_hidden.more":"Show %0% more","entries_hidden.all":"Show all","expand":"Expand","expand_all":"Hold %0% to expand all","feature.decorated.decorators":"Decorators","feature.decorated.decorators.entry":"Decorator","follow_reference":"Follow reference","format.json":"JSON","format.yaml":"YAML","fields":"Fields","generate_new_seed":"Generate new seed","github":"GitHub","hide_output":"Hide output","hide_preview":"Hide preview","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.minified":"Minified","indentation.tabs":"Tabs","item_modifier":"Item Modifier","language":"Language","layer.biomes":"Biomes","layer.temperature":"Temperature","layer.humidity":"Humidity","layer.continentalness":"Continentalness","layer.erosion":"Erosion","layer.weirdness":"Weirdness","layer.offset":"Offset","layer.factor":"Factor","layer.jaggedness":"Jaggedness","highlighting":"Highlighting","loading":"Loading...","loot_table":"Loot Table","model":"Model","more":"More","move_down":"Move down","move_up":"Move up","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","output_settings":"Output settings","predicate":"Predicate","recipe":"Recipe","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme":"Theme","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.changelog":"Technical Changelog","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","title.project":"%0% Project","title.sounds":"Sound Explorer","title.versions":"Versions Explorer","presets":"Presets","preview":"Visualize","preview.auto_scroll":"Auto scroll","preview.biome":"Biome","preview.scale":"Scale","preview.depth":"Depth","preview.factor":"Factor","preview.offset":"Offset","preview.peaks":"Peaks","preview.width":"Width","project.delete_file":"Delete file","project.go_to":"Go to project","project.new_file":"New file","project.no_files":"No files","project.search":"Search project","project.search_drafts":"Search drafts","project.unsaved_file":"Unsaved file","remove":"Remove","search":"Search","show_output":"Show output","show_preview":"Show preview","sounds.play":"Play","sounds.play_sound":"Play sound","sounds.play_all":"Play all","sounds.search":"Search sounds","sounds.download_function":"Download Mcfunction","sounds.delay":"Delay","sounds.pitch":"Pitch","sounds.volume":"Volume","sounds.copy_command":"Copy command","sounds.add_sound":"Add sound","sounds.remove_sound":"Remove sound","sounds.unknown_sound":"Unknown sound","sounds.loading_sound":"Loading sound","source_placeholder":"Paste raw %0% content here","switch_generator":"Switch generator","switch_version":"Switch version","terrain_settings":"Terrain settings","undo":"Undo","versions.search":"Search versions","versions.no_results":"No results","versions.all":"All versions","versions.previous":"Previous","versions.next":"Next","versions.released":"Released","versions.release_target":"Release target","versions.data_version":"Data version","versions.protocol_version":"Protocol version","versions.pack_format":"Pack format","versions.data_pack_format":"Data pack format","versions.resource_pack_format":"Resource pack format","versions.technical_changes":"Technical changes","versions.discussion":"Discussion","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/density_function":"Density Function","worldgen/placed_feature":"Placed Feature","worldgen/noise":"Noise","worldgen/noise_settings":"Noise Settings","worldgen/processor_list":"Processor List","worldgen/configured_structure_feature":"Structure Feature","worldgen/structure":"Structure","worldgen/structure_set":"Structure Set","worldgen/configured_surface_builder":"Surface Builder","worldgen/template_pool":"Template Pool","worldgen/world_preset":"World Preset","worldgen/flat_level_generator_preset":"Flat World Preset","zoom_in":"Zoom in","zoom_out":"Zoom out"}'),kt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:xt});(bt=yt||(yt={})).ID_LANGUAGE="language",bt.ID_THEME="theme",bt.ID_VERSION="schema_version",bt.ID_INDENT="indentation",bt.ID_FORMAT="output_format",bt.ID_HIGHLIGHTING="output_highlighting",bt.ID_SOUNDS_VERSION="minecraft_sounds_version",bt.ID_PROJECTS="misode_projects",bt.getLanguage=function(){var e;return null!=(e=localStorage.getItem(bt.ID_LANGUAGE))?e:"en"},bt.getTheme=function(){var e;return null!=(e=localStorage.getItem(bt.ID_THEME))?e:"dark"},bt.getVersion=function(){const e=localStorage.getItem(bt.ID_VERSION);return e&<.includes(e)?e:"1.18.2"},bt.getIndent=function(){var e;return null!=(e=localStorage.getItem(bt.ID_INDENT))?e:"2_spaces"},bt.getFormat=function(){var e;return null!=(e=localStorage.getItem(bt.ID_FORMAT))?e:"json"},bt.getHighlighting=function(){return"false"!==localStorage.getItem(bt.ID_HIGHLIGHTING)},bt.getSoundsVersion=function(){var e;return null!=(e=localStorage.getItem(bt.ID_SOUNDS_VERSION))?e:"latest"},bt.getProjects=function(){const e=localStorage.getItem(bt.ID_PROJECTS);return e?JSON.parse(e):[Et]},bt.setLanguage=function(e){e&&localStorage.setItem(bt.ID_LANGUAGE,e)},bt.setTheme=function(e){e&&localStorage.setItem(bt.ID_THEME,e)},bt.setVersion=function(e){e&&localStorage.setItem(bt.ID_VERSION,e)},bt.setIndent=function(e){e&&localStorage.setItem(bt.ID_INDENT,e)},bt.setFormat=function(e){e&&localStorage.setItem(bt.ID_FORMAT,e)},bt.setHighlighting=function(e){void 0!==e&&localStorage.setItem(bt.ID_HIGHLIGHTING,e.toString())},bt.setSoundsVersion=function(e){e&&localStorage.setItem(bt.ID_SOUNDS_VERSION,e)},bt.setProjects=function(e){e&&localStorage.setItem(bt.ID_PROJECTS,JSON.stringify(e))};const Ct=A({lang:"none",locale:e=>e,changeLanguage:()=>{}}),Mt={fallback:xt};function At(e,t,...n){var o,r,a,s,i;return function(e,t){return e.replace(/%\d+%/g,(e=>{const n=parseInt(e.slice(1,-1));return void 0!==(null==t?void 0:t[n])?t[n]:e}))}(null!=(i=null!=(s=null!=(a=null==(o=Mt[e])?void 0:o[t])?a:null==(r=Mt.en)?void 0:r[t])?s:Mt.fallback[t])?i:t,n)}async function It(e){if(Mt[e])return;const t=fe.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../../locales/de.json":return _t((()=>import("./de.a269acce.js")),void 0);case"../../locales/en.json":return _t((()=>Promise.resolve().then((function(){return kt}))),void 0);case"../../locales/es.json":return _t((()=>import("./es.833a9774.js")),void 0);case"../../locales/fr.json":return _t((()=>import("./fr.f5531eea.js")),void 0);case"../../locales/it.json":return _t((()=>import("./it.fd9a8268.js")),void 0);case"../../locales/ja.json":return _t((()=>import("./ja.a8ff49be.js")),void 0);case"../../locales/pl.json":return _t((()=>import("./pl.3a9fb38c.js")),void 0);case"../../locales/pt.json":return _t((()=>import("./pt.1a04bd2d.js")),void 0);case"../../locales/ru.json":return _t((()=>import("./ru.578070fe.js")),void 0);case"../../locales/sk.json":return _t((()=>import("./sk.96bbf351.js")),void 0);case"../../locales/zh-cn.json":return _t((()=>import("./zh-cn.e3c47b68.js")),void 0);case"../../locales/zh-tw.json":return _t((()=>import("./zh-tw.298bd51e.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../locales/${e}.json`),o=!1!==t.schemas&&await function(e){switch(e){case"../../../node_modules/@mcschema/locales/src/cs.json":return _t((()=>import("./cs.967a01eb.js")),void 0);case"../../../node_modules/@mcschema/locales/src/de.json":return _t((()=>import("./de.6c6a67f3.js")),void 0);case"../../../node_modules/@mcschema/locales/src/en.json":return _t((()=>import("./en.a3c526c1.js")),void 0);case"../../../node_modules/@mcschema/locales/src/es.json":return _t((()=>import("./es.c83d9c73.js")),void 0);case"../../../node_modules/@mcschema/locales/src/fr.json":return _t((()=>import("./fr.e316b1e2.js")),void 0);case"../../../node_modules/@mcschema/locales/src/it.json":return _t((()=>import("./it.7ff123cd.js")),void 0);case"../../../node_modules/@mcschema/locales/src/ja.json":return _t((()=>import("./ja.3170354d.js")),void 0);case"../../../node_modules/@mcschema/locales/src/pl.json":return _t((()=>import("./pl.ae1f6791.js")),void 0);case"../../../node_modules/@mcschema/locales/src/pt.json":return _t((()=>import("./pt.31e14993.js")),void 0);case"../../../node_modules/@mcschema/locales/src/ru.json":return _t((()=>import("./ru.cc3bc989.js")),void 0);case"../../../node_modules/@mcschema/locales/src/sk.json":return _t((()=>import("./sk.d4265232.js")),void 0);case"../../../node_modules/@mcschema/locales/src/zh-cn.json":return _t((()=>import("./zh-cn.4129665a.js")),void 0);case"../../../node_modules/@mcschema/locales/src/zh-tw.json":return _t((()=>import("./zh-tw.bdc36a24.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../../node_modules/@mcschema/locales/src/${e}.json`);Mt[e]=i(i({},n.default),o.default)}function zt(){return z(Ct)}function jt({children:e}){const[t,n]=g("none"),o=I(((e,...n)=>At(t,e,...n)),[t]),r=I((async e=>{await It(e),he.setLanguage(e),yt.setLanguage(e),n(e)}),[]);c((()=>{(async()=>{const e=yt.getLanguage();await Promise.all([It("en"),..."en"!==e?[It(e)]:[]]),n(e)})()}),[]);const a={lang:t,locale:o,changeLanguage:r};return d(Ct.Provider,{value:a},e)}const Et={name:"Drafts",namespace:"draft",files:[]},$t=A({project:Et,changeProject:()=>{},updateProject:()=>{},updateFile:()=>!1,openFile:()=>{},closeFile:()=>{}});function Ot(){return z($t)}function St({children:e}){const[t,n]=g(yt.getProjects()),[o,r]=g(Et.name),a=w((()=>{var e;return null!=(e=t.find((e=>e.name===o)))?e:Et}),[t,o]),[s,c]=g(void 0),u=w((()=>{if(s)return a.files.find((e=>e.type===s[0]&&e.id===s[1]))}),[a,s]),h=I((e=>{yt.setProjects(e),n(e)}),[]),m=I((e=>{h(t.map((t=>t.name===o?i(i({},t),e):t)))}),[t,o]),f=I(((e,t,n)=>{var o;if(n.id){const r=n.id.includes(":")?n.id:`${a.namespace}:${n.id}`,s=a.files.some((t=>t.type===e&&t.id===r));if(t){if((null==u?void 0:u.id)===t&&t!==r&&s)return!1;m({files:a.files.map((o=>o.type===e&&o.id===t?l(i(i({},o),n),{id:r}):o))}),(null==u?void 0:u.id)===t&&c([e,r])}else{if(s)return!1;m({files:[...a.files,{type:e,id:r,data:null!=(o=n.data)?o:{}}]}),c([e,r])}}else m({files:a.files.filter((n=>n.type!==e||n.id!==t))});return!0}),[m,a,u]),v=I(((e,t)=>{const n=fe.generators.find((t=>t.id===e||t.path===e));if(!n)throw new Error(`Cannot find generator of type ${e}`);c([n.id,t]),p(xe(n.url))}),[]),_=I((()=>{c(void 0)}),[]),y={project:a,file:u,changeProject:r,updateProject:m,updateFile:f,openFile:v,closeFile:_};return d($t.Provider,{value:y},e)}function Lt(e){var t;const[n,o]=e.id.includes(":")?e.id.split(":"):["minecraft",e.id],r=fe.generators.find((t=>t.id===e.type));if(!r)throw new Error(`Cannot find generator of type ${e.type}`);return`data/${n}/${null!=(t=r.path)?t:r.id}/${o}`}const Pt=A({theme:"dark",actualTheme:"dark",changeTheme:()=>{}});function Dt(){return z(Pt)}function Vt({children:e}){const[t,n]=g(yt.getTheme()),o=Be("(prefers-color-scheme: light)"),r=Be("(prefers-color-scheme: dark)");c((()=>{document.documentElement.setAttribute("data-theme",t)}),[t]);const a=I((e=>{he.setTheme(e),yt.setTheme(e),n(e)}),[]);c((()=>{he.setPrefersColorScheme(o?"light":r?"dark":"none")}),[o,r]);const s={theme:t,actualTheme:"light"===t||"dark"!==t&&o?"light":"dark",changeTheme:a};return d(Pt.Provider,{value:s},e)}const Nt=A({title:"",changeTitle:()=>{}});function Tt(e,t){const n=z(Nt);return c((()=>{e&&n.changeTitle(e,t)}),[e,t]),n}function Bt({children:e}){const{locale:t}=zt(),[n,o]=g(t("title.home")),r={title:n,changeTitle:I(((e,t)=>{null!=t||(t=fe.versions.map((e=>e.id)));const n=t.slice(t.length-3);document.title=`${e} Minecraft ${n.join(", ")}`,o(e)}),[])};return d(Nt.Provider,{value:r},e)}const Ht=A({version:"1.18.2",changeVersion:()=>{}});function Rt(){return z(Ht)}function Ft({children:e}){const[t,n]=g(yt.getVersion()),o=Me(m()).get("version");c((()=>{lt.includes(o)&&t!==o&&n(o)}),[t,o]);const r=I((e=>{Me(m()).has("version")&&Ae({version:e}),he.setVersion(e),yt.setVersion(e),n(e)}),[]),a={version:t,changeVersion:r};return d(Ht.Provider,{value:a},e)}let Gt=!1;const Wt={temperature:[-1,1],humidity:[-1,1],continentalness:[-1.1,1],erosion:[-1,1],weirdness:[-1,1],offset:[-1,1],factor:[0,12],jaggedness:[0,1]};let Jt,Ut;async function Yt(e,t){const n=[e,t.octaves,`${t.seed}`,t.version];return Le(n,Jt)||(Jt=Se(n),Ut=await async function(e,t){var n,o,r,a,s;switch(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,"")){case"fixed":return new D(O.parse(e.biome));case"checkerboard":const n=(null!=(o=e.scale)?o:2)+2,i=null!=(a=null==(r=e.biomes)?void 0:r.length)?a:0;return{getBiome(t,o,r){var a;const s=(((t>>n)+(r>>n))%i+i)%i;return O.parse(null==(a=e.biomes)?void 0:a[s].node)}};case"multi_noise":switch(null==(s=e.preset)?void 0:s.replace(/^minecraft:/,"")){case"nether":e=vt(t.version,"1.18")?Kt:Xt;break;case"overworld":e=vt(t.version,"1.18")?await async function(){return(await st("1.18","dimension","overworld")).generator.biome_source}():e}if(e=h.DataModel.unwrapLists(e),vt(t.version,"1.18")){await async function(){Gt||(await V(N),Gt=!0,console.debug(`Loaded deepslate-rs from "${N}"`))}();const n=new Pe,o=e=>"number"==typeof e?[e,e]:e,[r,a,s,i,l,c,d,u,h,m,p,f,g,v]=[[],[],[],[],[],[],[],[],[],[],[],[],[],[]];for(const t of e.biomes){const{temperature:e,humidity:w,continentalness:_,erosion:y,weirdness:b,depth:x,offset:k}=t.parameters;r.push(o(e)[0]),a.push(o(e)[1]),s.push(o(w)[0]),i.push(o(w)[1]),l.push(o(_)[0]),c.push(o(_)[1]),d.push(o(y)[0]),u.push(o(y)[1]),h.push(o(b)[0]),m.push(o(b)[1]),p.push(o(x)[0]),f.push(o(x)[1]),g.push(k),v.push(n.getOrPut(t.biome,Math.floor(2147483647*Math.random())))}const w=j(new Float64Array(r),new Float64Array(a),new Float64Array(s),new Float64Array(i),new Float64Array(l),new Float64Array(c),new Float64Array(d),new Float64Array(u),new Float64Array(h),new Float64Array(m),new Float64Array(p),new Float64Array(f),new Float64Array(g),new Int32Array(v)),_=E(t.seed,t.octaves.temperature.firstOctave,new Float64Array(t.octaves.temperature.amplitudes),t.octaves.humidity.firstOctave,new Float64Array(t.octaves.humidity.amplitudes),t.octaves.continentalness.firstOctave,new Float64Array(t.octaves.continentalness.amplitudes),t.octaves.erosion.firstOctave,new Float64Array(t.octaves.erosion.amplitudes),t.octaves.weirdness.firstOctave,new Float64Array(t.octaves.weirdness.amplitudes),t.octaves.shift.firstOctave,new Float64Array(t.octaves.shift.amplitudes));return{getBiome(e,t,o){var r;const a=$(w,_,e,e+1,1,t,t+1,1,o,o+1,1);return O.parse(null!=(r=n.getA(a[0]))?r:"unknown")},getBiomes:(e,t,o,r,a,s,i,l,c)=>[...$(w,_,e,t,o,r,a,s,i,l,c)].map((e=>{var t;return O.parse(null!=(t=n.getA(e))?t:"unknown")})),getClimate(e,t,n){const o=S(_,e,e+1,1,t,t+1,1,n,n+1,1),[r,a,s,i,l]=o.slice(0,5);return{temperature:r,humidity:a,continentalness:s,erosion:i,weirdness:l}},getClimates(e,t,n,o,r,a,s,i,l){const c=S(_,e,t,n,o,r,a,s,i,l),d=[];for(let u=0;u{var r;const a=e[`${n}_noise`];return a.firstOctave=je(null!=(r=a.firstOctave)?r:-7,-100,-1),new L(new P(t.seed+BigInt(o)),a)}));return Array.isArray(e.biomes)&&0!==e.biomes.length?{getBiome(t,o,r){const a=n.map((e=>e.sample(t,r,0)));let s=1/0,i="";for(const{biome:n,parameters:l}of e.biomes){const e=ze(l.altitude-a[0])+ze(l.temperature-a[1])+ze(l.humidity-a[2])+ze(l.weirdness-a[3])+ze(l.offset);eo.nextFloat(),nextInt:e=>o.nextInt(e),nextGaussian:()=>Math.sqrt(-2*Math.log(1-o.nextFloat()))*Math.cos(2*Math.PI*o.nextFloat()),sampleInt(e){return function(e,t){var n,o;if("number"==typeof e)return e;if(e.base)return null!=(o=e.base)?o:1+t.nextInt(1+(null!=(n=e.spread)?n:0));switch(nn(e.type)){case"constant":return e.value;case"uniform":return e.value.min_inclusive+t.nextInt(e.value.max_inclusive-e.value.min_inclusive+1);case"biased_to_bottom":return e.value.min_inclusive+t.nextInt(t.nextInt(e.value.max_inclusive-e.value.min_inclusive+1)+1);case"clamped":return je(t.sampleInt(e.value.source),e.value.min_inclusive,e.value.max_inclusive);case"clamped_normal":const n=e.value.mean+t.nextGaussian()*e.value.deviation;return Math.floor(je(e.value.min_inclusive,e.value.max_inclusive,n));case"weighted_list":const o=e.distribution.reduce(((e,t)=>e+t.weight),0);let r=t.nextInt(o);for(const a of e.distribution)if(r-=a.weight,r<0)return t.sampleInt(a.data);return 0}return 1}(e,this)}};for(let s=0;s=n.size[0]||s[1]>=n.size[1]||s[2]>=n.size[2])continue;const e=s[2]*(4*t.width)+4*s[0],o=i{ln(t,null==e?void 0:e.decorator,n).forEach((t=>sn(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{sn(t,n.nextFloat()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var o,r;for(const a of null!=(o=null==e?void 0:e.features)?o:[])if(n.nextFloat()<(null!=(r=null==a?void 0:a.chance)?r:0))return void sn(t,a.feature,n);sn(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var o,r,a;sn(t,null==(a=null==e?void 0:e.features)?void 0:a[n.nextInt(null!=(r=null==(o=null==e?void 0:e.features)?void 0:o.length)?r:0)],n)}},dn={chance:(e,t,n)=>{var o;return n.nextFloat()<1/(null!=(o=null==e?void 0:e.chance)?o:1)?[t]:[]},count:(e,t,n)=>{var o;return new Array(n.sampleInt(null!=(o=null==e?void 0:e.count)?o:1)).fill(t)},count_extra:(e,t,n)=>{var o,r;let a=null!=(o=null==e?void 0:e.count)?o:1;return n.nextFloat(){var o;return new Array(n.sampleInt(null!=(o=null==e?void 0:e.count)?o:1)).fill(t).map((e=>[e[0]+n.nextInt(16),e[1],e[2]+n.nextInt(16)]))},count_noise:(e,t,n)=>{const o=n.biomeInfoNoise.sample(t[0]/200,0,t[2]/200){var o;const r=Math.max(1,e.noise_factor),a=n.biomeInfoNoise.sample(t[0]/r,0,t[2]/r),s=Math.max(0,Math.ceil((a+(null!=(o=e.noise_offset)?o:0))*e.noise_to_count_ratio));return new Array(s).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,o)=>{const r=4*Math.floor(o/4)+1+n.nextInt(3)+t[0];return[r,Math.max(n.seaLevel,Qt[je(0,63,r)]),4*Math.floor(o%4)+1+n.nextInt(3)+t[2]]})),decorated:(e,t,n)=>ln(t,null==e?void 0:e.outer,n).flatMap((t=>ln(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var o,r,a,s;return on(t,n.nextInt(null!=(o=null==e?void 0:e.spread)?o:0)+n.nextInt(null!=(r=null==e?void 0:e.spread)?r:0)-(null!=(a=e.spread)?a:0)+(null!=(s=null==e?void 0:e.baseline)?s:0))},emerald_ore:(e,t,n)=>{const o=3+n.nextInt(6);return[...new Array(o)].map((()=>[t[0]+n.nextInt(16),4+n.nextInt(28),t[2]+n.nextInt(16)]))},fire:(e,t,n)=>{const o=1+n.nextInt(n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(o)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},glowstone:(e,t,n)=>{const o=n.nextInt(1+n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(o)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},heightmap:(e,t,n)=>on(t,Math.max(n.seaLevel,Qt[je(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>{const o=Math.max(n.seaLevel,Qt[je(0,63,t[0])]);return on(t,n.nextInt(2*o))},heightmap_world_surface:(e,t,n)=>on(t,Math.max(n.seaLevel,Qt[je(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+n.nextInt(8),t[1],t[2]+4+n.nextInt(8)]],lava_lake:(e,t,n)=>{var o,r;if(0===n.nextInt((null!=(o=e.chance)?o:1)/10)){const o=n.nextInt(n.nextInt(248)+8);if(o[t],range:(e,t,n)=>{var o,r,a;return on(t,n.nextInt((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0))+(null!=(a=null==e?void 0:e.bottom_offset)?a:0))},range_biased:(e,t,n)=>{var o,r,a;return on(t,n.nextInt(n.nextInt((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0))+(null!=(a=null==e?void 0:e.bottom_offset)?a:0)))},range_very_biased:(e,t,n)=>{var o,r,a,s;return on(t,n.nextInt(n.nextInt(n.nextInt((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0))+(null!=(a=null==e?void 0:e.bottom_offset)?a:0))+(null!=(s=null==e?void 0:e.bottom_offset)?s:0)))},spread_32_above:(e,t,n)=>on(t,n.nextInt(t[1]+32)),top_solid_heightmap:(e,t)=>on(t,Qt[je(0,63,t[0])]),magma:(e,t,n)=>on(t,n.nextInt(t[1]+32)),square:(e,t,n)=>[[t[0]+n.nextInt(16),t[1],t[2]+n.nextInt(16)]],surface_relative_threshold:(e,t)=>{var n,o;const r=Qt[je(0,63,t[0])],a=r+(null!=(n=null==e?void 0:e.min_inclusive)?n:-1/0),s=r+(null!=(o=null==e?void 0:e.max_inclusive)?o:1/0);return t[1]s?[t]:[]},water_lake:(e,t,n)=>{var o;return 0===n.nextInt(null!=(o=e.chance)?o:1)?[[t[0]+n.nextInt(16),n.nextInt(256),t[2]+n.nextInt(16)]]:[]}};function un(e,t,n){var o;let r=[e];for(const a of t){hn[nn(null!=(o=null==a?void 0:a.type)?o:"nope")]&&(r=r.flatMap((e=>hn[nn(a.type)](a,e,n))))}for(const a of r)n.placements.push([a,0])}const hn={count:({count:e},t,n)=>new Array(n.sampleInt(null!=e?e:1)).fill(t),count_on_every_layer:({count:e},t,n)=>new Array(n.sampleInt(null!=e?e:1)).fill(t).map((e=>[e[0]+n.nextInt(16),e[1],e[2]+n.nextInt(16)])),environment_scan:({},e)=>[e],height_range:({height:e},t,n)=>on(t,function(e,t){var n,o,r,a;if(!ge(e))throw new Error("Invalid height provider");if("string"!=typeof e.type)return rn(e);switch(nn(e.type)){case"constant":return rn(e.value);case"uniform":{const n=rn(e.min_inclusive),o=rn(e.max_inclusive);return n+t.nextInt(o-n+1)}case"biased_to_bottom":{const r=rn(e.min_inclusive),a=rn(e.max_inclusive),s=t.nextInt(a-r-(null!=(n=e.inner)?n:1)+1);return r+t.nextInt(s+(null!=(o=e.inner)?o:1))}case"very_biased_to_bottom":{const n=rn(e.min_inclusive),o=rn(e.max_inclusive),a=null!=(r=e.inner)?r:1,s=n+a+t.nextInt(o-n-a+1),i=n+t.nextInt(s-n);return n+t.nextInt(i-n+a)}case"trapezoid":{const n=rn(e.min_inclusive),o=rn(e.max_inclusive),r=null!=(a=e.plateau)?a:0;if(r>=o-n)return n+t.nextInt(o-n+1);const s=(o-n-r)/2,i=o-n-s;return n+t.nextInt(i+1)+t.nextInt(s+1)}default:throw new Error(`Invalid height provider ${e.type}`)}}(e,n)),heightmap:({},e,t)=>on(e,Math.max(t.seaLevel,Qt[je(0,63,e[0])])),in_square:({},e,t)=>[[e[0]+t.nextInt(16),e[1],e[2]+t.nextInt(16)]],noise_based_count:({noise_to_count_ratio:e,noise_factor:t,noise_offset:n},o,r)=>{const a=Math.max(1,t),s=r.biomeInfoNoise.sample(o[0]/a,0,o[2]/a),i=Math.max(0,Math.ceil((s+(null!=n?n:0))*e));return new Array(i).fill(o)},noise_threshold_count:({noise_level:e,below_noise:t,above_noise:n},o,r)=>{const a=r.biomeInfoNoise.sample(o[0]/200,0,o[2]/200);return new Array(a[[n[0]+o.sampleInt(e),n[1]+o.sampleInt(t),n[2]+o.sampleInt(e)]],rarity_filter:({chance:e},t,n)=>n.nextFloat()<1/(null!=e?e:1)?[t]:[]};class mn{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0;const t=new P(e);this.minLimitPerlinNoise=new T(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.maxLimitPerlinNoise=new T(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.mainPerlinNoise=new T(t,-7,[1,1,1,1,1,1,1,1]),this.depthNoise=new T(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])}reset(e,t,n,o,r){this.settings=e,this.chunkWidth=4*e.size_horizontal,this.chunkHeight=4*e.size_vertical,this.chunkCountY=Math.floor(e.height/this.chunkHeight),e.amplified&&t>0&&(t=1+2*t,n=1+4*n),this.biomeDepth=.265625*(.5*t-.125),this.biomeScale=96/(.9*n+.1),this.noiseColumnCache=Array(r).fill(null),this.xOffset=o}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),o=Math.floor(e%this.chunkWidth)/this.chunkWidth,r=this.fillNoiseColumn(n),a=this.fillNoiseColumn(n+1);for(let h=this.chunkCountY-1;h>=0;h-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[h*this.chunkHeight+e]=(s=n,i=o,l=r[h],c=r[h+1],d=a[h],u=a[h+1],$e(i,$e(s,l,c),$e(s,d,u)))}var s,i,l,c,d,u;return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),o=684.412*this.settings.sampling.xz_scale,r=684.412*this.settings.sampling.y_scale,a=o/this.settings.sampling.xz_factor,s=r/this.settings.sampling.y_factor,i=this.settings.random_density_offset?this.getRandomDensity(e):0;for(let l=0;l<=this.chunkCountY;l+=1){let t=this.sampleAndClampNoise(e,l,this.mainPerlinNoise.getOctaveNoise(0).zo,o,r,a,s);const c=((1-2*l/this.chunkCountY+i)*this.settings.density_factor+this.settings.density_offset+this.biomeDepth)*this.biomeScale;t+=c*(c>0?4:1),this.settings.top_slide.size>0&&(t=Ee(this.settings.top_slide.target,t,(this.chunkCountY-l-this.settings.top_slide.offset)/this.settings.top_slide.size)),this.settings.bottom_slide.size>0&&(t=Ee(this.settings.bottom_slide.target,t,(l-this.settings.bottom_slide.offset)/this.settings.bottom_slide.size)),n[l]=t}return this.noiseColumnCache[e-this.xOffset]=n,n}getRandomDensity(e){const t=this.depthNoise.sample(200*e,10,this.depthNoise.getOctaveNoise(0).zo,1,0,!0),n=24.575625*(t<0?.3*-t:t)-2;return n<0?.009486607142857142*n:.006640625*Math.min(n,1)}sampleAndClampNoise(e,t,n,o,r,a,s){let i=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=T.wrap(e*o*d),m=T.wrap(t*r*d),p=T.wrap(n*o*d),f=r*d,g=this.minLimitPerlinNoise.getOctaveNoise(u);g&&(i+=g.sample(h,m,p,f,t*f)/d);const v=this.maxLimitPerlinNoise.getOctaveNoise(u);if(v&&(l+=v.sample(h,m,p,f,t*f)/d),u<8){const o=this.mainPerlinNoise.getOctaveNoise(u);o&&(c+=o.sample(T.wrap(e*a*d),T.wrap(t*s*d),T.wrap(n*a*d),s*d,t*s*d)/d)}d/=2}return Ee(i/512,l/512,(c/10+1)/2)}}const pn={"minecraft:air":[150,160,170],"minecraft:water":[20,80,170],"minecraft:lava":[200,100,0],"minecraft:stone":[55,55,55],"minecraft:deepslate":[34,34,36],"minecraft:bedrock":[10,10,10],"minecraft:grass_block":[47,120,23],"minecraft:dirt":[64,40,8],"minecraft:gravel":[70,70,70],"minecraft:sand":[196,180,77],"minecraft:sandstone":[148,135,52],"minecraft:netherrack":[100,40,40],"minecraft:crimson_nylium":[144,22,22],"minecraft:warped_nylium":[28,115,113],"minecraft:basalt":[73,74,85],"minecraft:end_stone":[200,200,140]};let fn,gn,vn=[];const wn=new Map;async function _n(e,t,n){var o,r,a;if(vt(n.version,"1.18")){vt(n.version,"1.18.2")&&await xn(n.version);const{settings:r,generator:a}=function(e,t){const n=q.fromJson(h.DataModel.unwrapLists(e)),o=[e,`${t.seed}`,t.biome];if(!Le(o,fn))if(fn=Se(o),vn=[],vt(t.version,"1.18.2")){const e=new D(O.create("unknown"));gn=new Z(t.seed,e,n)}else{const e=new ee("unknown");gn=new X(t.seed,e,n)}return{settings:n,generator:gn}}(e,n),s=new Cn(-n.offset,n.width,r.noise.minY,r.noise.height);s.generate(a,n.biome);const i=t.data;for(let e=0;easync function(e,t,n,o){const r=await async function(e,t){console.debug(`[fetchAllPresets] ${e} ${t}`);const n=fe.versions.find((t=>t.id===e));await ot(n);try{const e=await it(`${nt(n,"registries")}/${t}/data.min.json`);return new Map(await Promise.all(e.map((async e=>[e,await it(`${nt(n,"data")}/data/minecraft/${t}/${e}.json`)]))))}catch(o){throw new Error(`Error occurred while fetching all ${t} presets: ${Oe(o)}`)}}(e,n),a=new U(O.create(n));for(const[s,i]of r.entries())a.register(O.parse(s),o.fromJson(i));t.register(a.key,a)}(e,n,t,o)))),wn.set(e,n)),Y.DENSITY_FUNCTION.clear().assign(n.getOrThrow(O.create("worldgen/density_function"))),Y.NOISE.clear().assign(n.getOrThrow(O.create("worldgen/noise")))}function kn(e,t){return e[t]>0?0:e[t+1]>0?150:255}class Cn{constructor(e,t,n,o){this.minX=e,this.done=[],this.chunks=[...Array(Math.ceil(t/16)+1)].map(((t,r)=>{const a=(e>>4)+r,s=vn.find((e=>e.pos[0]===a));return s?(this.done[r]=!0,s):new K(n,o,B.create(a,0))}))}generate(e,t){this.chunks.forEach(((n,o)=>{this.done[o]||(e.fill(n,!0),e.buildSurface(n,t),this.done[o]=!0,vn.push(n))}))}getBlockState(e){const t=(e[0]>>4)-(this.minX>>4);return this.chunks[t].getBlockState(e)}}const Mn=["biomes","temperature","humidity","continentalness","erosion","weirdness"],An=({model:e,data:t,shown:n,version:o})=>{var r;const{locale:a}=zt(),[s,l]=g(2),[u,m]=g(void 0),[p,v]=g(new Set(["biomes"])),y=f([0,0]),b=f(1),x=f(void 0),k=BigInt(e.get(new h.Path(["generator","seed"]))),C=w((()=>{if(n)return function(e){if("string"!=typeof e){e=q.fromJson(h.DataModel.unwrapLists(e)).legacyRandomSource?"minecraft:nether":"minecraft:overworld"}switch(e.replace(/^minecraft:/,"")){case"overworld":case"amplified":return{temperature:{firstOctave:-9,amplitudes:[1.5,0,1,0,0,0]},humidity:{firstOctave:-7,amplitudes:[1,1,0,0,0,0]},continentalness:{firstOctave:-9,amplitudes:[1,1,2,2,2,1,1,1,1]},erosion:{firstOctave:-9,amplitudes:[1,1,0,1,1]},weirdness:{firstOctave:-7,amplitudes:[1,2,1,0,0,0]},shift:{firstOctave:-3,amplitudes:[1,1,1,0]}};case"end":case"floating_islands":return{temperature:{firstOctave:0,amplitudes:[0]},humidity:{firstOctave:0,amplitudes:[0]},continentalness:{firstOctave:0,amplitudes:[0]},erosion:{firstOctave:0,amplitudes:[0]},weirdness:{firstOctave:0,amplitudes:[0]},shift:{firstOctave:0,amplitudes:[0]}};default:return{temperature:{firstOctave:-7,amplitudes:[1,1]},humidity:{firstOctave:-7,amplitudes:[1,1]},continentalness:{firstOctave:-7,amplitudes:[1,1]},erosion:{firstOctave:-7,amplitudes:[1,1]},weirdness:{firstOctave:-7,amplitudes:[1,1]},shift:{firstOctave:0,amplitudes:[0]}}}}(e.get(new h.Path(["generator","settings"])))}),[n]),M=n?function(e,t){return JSON.stringify([e,t])}(t,C):"",A=null==(r=t.type)?void 0:r.replace(/^minecraft:/,""),{canvas:I,redraw:z}=Ne({size:()=>[200/b.current,200/b.current],async draw(e){const n={octaves:C,biomeColors:{},layers:p,offset:y.current,scale:s,seed:k,res:b.current,version:o};await async function(e,t,n){var o,r,a;const{biomeSource:s}=await Yt(e,n),i=t.data,l=-Math.round(n.offset[0])-100+n.res/2,c=-Math.round(n.offset[1])-100+n.res/2,d=4*t.width/n.res,u=4/n.res,h=[l*n.scale,(200+l)*n.scale,n.res*n.scale],m=[c*n.scale,(200+c)*n.scale,n.res*n.scale],p=n.layers.has("biomes")?null==(o=s.getBiomes)?void 0:o.call(s,...h,64,65,1,...m):void 0,f=[...n.layers].filter((e=>"biomes"!==e)),g=0===f.length||null==(r=s.getClimates)?void 0:r.call(s,...h,64,65,1,...m);for(let v=0;v<200;v+=n.res)for(let e=0;e<200;e+=n.res){const t=e*d+v*u,o=v/n.res*200/n.res+e/n.res,r=(v+l)*n.scale,h=(e+c)*n.scale;let m=[50,50,50];if(n.layers.has("biomes"))m=qt((null!=(a=null==p?void 0:p[o])?a:s.getBiome(r,64,h)).toString(),n.biomeColors);else if(g&&f[0]){const e=g[o][f[0]],[t,n]=Wt[f[0]],r=(e-t)/(n-t)*256;m=[r,r,r]}i[t]=m[0],i[t+1]=m[1],i[t+2]=m[2],i[t+3]=255}}(t,e,n),4===b.current&&(clearTimeout(x.current),x.current=setTimeout((()=>{b.current=1,z()}),150))},async onDrag(e,t){y.current[0]=y.current[0]+200*e,y.current[1]=y.current[1]+200*t,clearTimeout(x.current),b.current="multi_noise"===A?4:1,z()},async onHover(e,n){const r={octaves:C,biomeColors:{},layers:p,offset:y.current,scale:s,seed:k,res:1,version:o},a=await async function(e,t,n,o){var r;const{biomeSource:a}=await Yt(e,o),[s,l]=function([e,t],n){return[(e-n.offset[0]-100+n.res/2)*n.scale,(t-n.offset[1]-100+n.res/2)*n.scale]}([t,n],o);return i({biome:a.getBiome(s,64,l).toString()},null==(r=a.getClimate)?void 0:r.call(a,s,64,l))}(t,Math.floor(200*e),Math.floor(200*n),r);m(a)},onLeave(){m(void 0)}},[M,s,k,p]);c((()=>{n&&(b.current="multi_noise"===A?4:1,z())}),[M,s,k,p,n]);const j=e=>{y.current[0]=y.current[0]*s/e,y.current[1]=y.current[1]*s/e,l(e)};return d(_,null,d("div",{class:"controls preview-controls"},u&&d(pe,{label:u.biome,class:"no-pointer"}),"multi_noise"===A&&d(Re,{icon:"stack",tooltip:a("configure_layers")},Mn.map((e=>{const t=p.has(e);return d(pe,{label:a(`layer.${e}`),active:t,tooltip:a(t?"enabled":"disabled"),onClick:t=>{v(new Set([e])),t.stopPropagation()}})}))),("multi_noise"===A||"checkerboard"===A)&&d(_,null,d(pe,{icon:"dash",tooltip:a("zoom_out"),onClick:()=>j(1.5*s)}),d(pe,{icon:"plus",tooltip:a("zoom_in"),onClick:()=>j(s/1.5)})),"multi_noise"===A&&d(pe,{icon:"sync",tooltip:a("generate_new_seed"),onClick:()=>ye(e)})),(null==u?void 0:u.temperature)&&d("div",{class:"controls secondary-controls"},d(pe,{class:"no-pointer",label:Object.entries(u).filter((([e])=>"biome"!==e)).map((([e,t])=>`${e[0].toUpperCase()}: ${t.toFixed(2)}`)).join(" ")})),d("canvas",{ref:I,width:"200",height:"200"}))};const In=({data:e,version:t,shown:n})=>{const{locale:o}=zt(),[r,a]=g(4),[s,i]=g(_e()),{canvas:l,redraw:u}=Ne({size:()=>[16*r,16*r],async draw(n){tn(e,n,{seed:s,version:t,size:[16*r,128,16*r]})}}),h=JSON.stringify(e);return c((()=>{n&&u()}),[h,r,s,n]),d(_,null,d("div",{class:"controls preview-controls"},d(pe,{icon:"dash",tooltip:o("zoom_out"),onClick:()=>a(Math.min(16,r+1))}),d(pe,{icon:"plus",tooltip:o("zoom_in"),onClick:()=>a(Math.max(1,r-1))}),d(pe,{icon:"sync",tooltip:o("generate_new_seed"),onClick:()=>i(_e())})),d("canvas",{ref:l,width:"64",height:"64"}))},zn=({data:e,shown:t,version:n})=>{var o,r;const{locale:a}=zt(),[s,i]=g(_e()),[l,u]=g(!1),[h,m]=g(void 0),p=f(0),v=f(void 0),w=JSON.stringify([e]),y=null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.height)?r:256,{canvas:b,redraw:x}=Ne({size:()=>[y,y],async draw(t){const o={offset:p.current,width:t.width,seed:s,version:n};await yn(e,t,o)},async onDrag(e){p.current+=e*y,x()},async onHover(t,n){var o,r;const a=Math.floor(t*y-p.current),s=y-Math.max(1,Math.ceil(n*y))+(null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.min_y)?r:0);m(`X=${a} Y=${s}`)},onLeave(){m(void 0)}},[w,s]);return c((()=>{v.current&&clearInterval(v.current),t&&(x(),l&&(v.current=setInterval((()=>{p.current-=8,x()}),100)))}),[w,s,t,l]),d(_,null,d("div",{class:"controls preview-controls"},h&&d(pe,{label:h,class:"no-pointer"}),d(Re,{icon:"gear",tooltip:a("terrain_settings")},d(pe,{icon:l?"square_fill":"square",label:a("preview.auto_scroll"),onClick:()=>u(!l)})),d(pe,{icon:"sync",tooltip:a("generate_new_seed"),onClick:()=>i(_e())})),d("canvas",{ref:b,width:y,height:y}))},jn=({data:e,shown:t,version:n})=>{const{locale:o}=zt(),[r,a]=g(_e()),[s,i]=g(2),l=f([0,0]),u=JSON.stringify([e]),{canvas:m,redraw:p}=Ne({size:()=>[256,256],async draw(t){const o={offset:l.current,scale:s,seed:r,version:n};!function(e,t,n){const o=new P(n.seed),r=Q.fromJson(h.DataModel.unwrapLists(e)),a=new L(o,r),s=-n.offset[0]-100,i=-n.offset[1]-100,l=t.data;for(let c=0;c<256;c+=1)for(let e=0;e<256;e+=1){const t=4*c+4*e*256,o=(c+s)*n.scale,r=(e+i)*n.scale,d=128*(a.sample(o,r,0)+1);l[t]=d,l[t+1]=d,l[t+2]=d,l[t+3]=255}}(e,t,o)},async onDrag(e,t){l.current[0]=l.current[0]+256*e,l.current[1]=l.current[1]+256*t,p()}},[u,s,r]);c((()=>{t&&p()}),[u,s,r,t]);const v=e=>{l.current[0]=l.current[0]*s/e,l.current[1]=l.current[1]*s/e,i(e)};return d(_,null,d("div",{class:"controls preview-controls"},d(pe,{icon:"dash",tooltip:o("zoom_out"),onClick:()=>v(1.5*s)}),d(pe,{icon:"plus",tooltip:o("zoom_in"),onClick:()=>v(s/1.5)}),d(pe,{icon:"sync",tooltip:o("generate_new_seed"),onClick:()=>a(_e())})),d("canvas",{ref:m,width:"256",height:"256"}))},En=({data:e,shown:t,version:n})=>{var o,r;const{locale:a}=zt(),[s,i]=g(_e()),[l,u]=g("minecraft:plains"),[h,m]=g(.2),[p,v]=g(.1),[y,b]=g(!1),[x,k]=g(void 0),C=f(0),M=f(void 0),A=JSON.stringify([e,h,p]),I=null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.height)?r:256,{canvas:z,redraw:j}=Ne({size:()=>[I,I],async draw(t){const o={biome:l,biomeDepth:p,biomeScale:h,offset:C.current,width:t.width,seed:s,version:n};await _n(e,t,o)},async onDrag(e){C.current+=e*I,j()},async onHover(t,n){var o,r;const a=Math.floor(t*I-C.current),s=I-Math.max(1,Math.ceil(n*I))+(null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.min_y)?r:0),i=function(e,t){const n=vn.find((t=>B.minBlockX(t.pos)<=e&&B.maxBlockX(t.pos)>=e));if(n)return n.getBlockState(H.create(e,t,0))}(a,s);k(i?`Y=${s} (${i.getName().path})`:`Y=${s}`)},onLeave(){k(void 0)}},[A,s]);c((()=>{M.current&&clearInterval(M.current),t&&(async()=>{try{await j(),y&&(M.current=setInterval((()=>{C.current-=8,j()}),100))}catch(e){throw e}})()}),[A,s,t,l,h,p,y]);const E=w((()=>{var e;return null!=(e=null==pt?void 0:pt.get("worldgen/biome"))?e:[]}),[n]);return d(_,null,d("div",{class:"controls preview-controls"},x&&d(pe,{label:x,class:"no-pointer"}),d(Re,{icon:"gear",tooltip:a("terrain_settings")},vt(n,void 0,"1.17")?d(_,null,d(De,{label:a("preview.scale"),value:`${h}`,onChange:e=>m(Number(e))}),d(De,{label:a("preview.depth"),value:`${p}`,onChange:e=>v(Number(e))})):d(De,{label:a("preview.biome"),value:l,onChange:u,dataList:E,larger:!0}),d(pe,{icon:y?"square_fill":"square",label:a("preview.auto_scroll"),onClick:()=>b(!y)})),d(pe,{icon:"sync",tooltip:a("generate_new_seed"),onClick:()=>i(_e())})),d("canvas",{ref:z,width:I,height:I}))},$n=["dimension","worldgen/density_function","worldgen/noise","worldgen/noise_settings","worldgen/configured_feature","worldgen/placed_feature"];function On({model:e,version:t,id:n,shown:o}){var r;const[,a]=g(0);if(He(e,(()=>{a((e=>e+1))})),!e)return d(_,null);if("dimension"===n&&(null==(r=e.get(new h.Path(["generator","type"])))?void 0:r.endsWith("noise"))){const n=e.get(new h.Path(["generator","biome_source"]));if(n)return d(An,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/density_function"===n){const n=e.get(new h.Path([]));if(n)return d(zn,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/noise"===n){const n=e.get(new h.Path([]));if(n)return d(jn,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/noise_settings"===n){const n=e.get(new h.Path([]));if(n)return d(En,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/placed_feature"===n||"worldgen/configured_feature"===n&&vt(t,"1.16","1.17")){const n=e.get(new h.Path([]));if(n)return d(In,i({},{model:e,version:t,shown:o,data:n}))}return d(_,null)}function Sn(e,t){return e.schema.hook(Ln,new h.ModelPath(e),e.data,{blockStates:t})}const Ln={base:({},e,t)=>t,choice({switchNode:e},t,n,o){return e.hook(this,t,n,o)},list({children:e},t,n,o){if(!Array.isArray(n))return n;const r=n.map(((n,r)=>e.hook(this,t.push(r),n.node,o)));for(const a of Object.getOwnPropertySymbols(n))r[a]=n[a];return r},map({children:e,config:t},n,o,r){var a,s;if(void 0===o)return;const i="block_state_map"===(null==(a=t.validation)?void 0:a.validator)?null==(s=r.blockStates)?void 0:s[h.relativePath(n,t.validation.params.id).get()]:null,l={};Object.keys(o).forEach((t=>{var a;i&&!Object.keys(null!=(a=i.properties)?a:{}).includes(t)||(l[t]=e.hook(this,n.push(t),o[t],r))}));for(const c of Object.getOwnPropertySymbols(o))l[c]=o[c];return l},object({getActiveFields:e},t,n,o){if(null==n||"object"!=typeof n)return n;const r={},a=e(t);Object.keys(a).filter((e=>a[e].enabled(t))).forEach((e=>{const s=a[e].hook(this,t.push(e),n[e],o);null!=s&&(r[e]=s)}));for(const s of Object.getOwnPropertySymbols(n))r[s]=n[s];return r}},Pn={"2_spaces":2,"4_spaces":4,tabs:"\t",minified:void 0},Dn={json:{parse:ne.parse,stringify:(e,t)=>ne.stringify(e,null,t)+"\n"},yaml:{parse:oe.load,stringify:(e,t)=>oe.dump(e,{flowLevel:void 0===t?0:-1,indent:"string"==typeof t?4:t})}};function Vn({name:e,model:t,blockStates:n,doCopy:o,doDownload:r,doImport:a,copySuccess:s,onError:i}){const{locale:l}=zt(),[u,m]=g(yt.getIndent()),[p,v]=g(yt.getFormat()),[w,y]=g(yt.getHighlighting()),b=f(null),x=f(),k=f(),C=f(),M=f(),A=I(((e,t)=>{const n=Sn(e,t);return Dn[p].stringify(n,Pn[u])}),[u,p]);c((()=>{x.current=()=>{if(t&&n)try{const e=A(t,n);M.current.setValue(e)}catch(e){e instanceof Error?(e.message=`Error getting JSON output: ${e.message}`,i(e)):i(`Error getting JSON output: ${Oe(e)}`),console.error(e),M.current.setValue("")}},k.current=()=>{const e=M.current.getValue();if(0!==e.length)try{const n=Dn[p].parse(e);null==t||t.reset(h.DataModel.wrapLists(n),!1)}catch(n){n instanceof Error?(n.message=`Error importing: ${n.message}`,i(n)):i(`Error importing: ${Oe(n)}`),console.error(n)}}}),[t,n,u,p,w]),c((()=>{if(w){const e=te.edit("editor");e.setOptions({fontSize:14,showFoldWidgets:!1,highlightSelectedWord:!1}),e.$blockScrolling=1/0,e.on("blur",(e=>k.current(e))),e.getSession().setMode("ace/mode/json"),M.current={getValue:()=>e.getSession().getValue(),setValue(t){e.getSession().setValue(t)},configure(t,n){e.setOption("useSoftTabs","tabs"!==t),e.setOption("tabSize","tabs"===t?4:Pn[t]),e.getSession().setMode(`ace/mode/${n}`)},select(){e.selectAll()}}}else M.current={getValue:()=>C.current.value,setValue(e){C.current.value=e},configure(){},select(){}}}),[w]),He(t,(()=>{x.current()})),c((()=>{t&&x.current()}),[t]),c((()=>{M.current.configure(u,p),x.current()}),[u,p,w]),c((()=>{o&&t&&n&&navigator.clipboard.writeText(A(t,n)).then((()=>{s()}))}),[o]),c((()=>{if(r&&t&&n&&b.current){const o=encodeURIComponent(A(t,n));b.current.setAttribute("href",`data:text/json;charset=utf-8,${o}`),b.current.setAttribute("download",`${e}.${p}`),b.current.click()}}),[r]),c((()=>{a&&M.current&&(M.current.setValue(""),M.current.select())}),[a]);return d(_,null,d("div",{class:"controls source-controls"},d(Re,{icon:"gear",tooltip:l("output_settings"),"data-cy":"source-controls"},Object.entries(Pn).map((([e])=>d(pe,{label:l(`indentation.${e}`),active:u===e,onClick:()=>{return t=e,yt.setIndent(t),void m(t);var t}}))),d("hr",null),Object.keys(Dn).map((e=>d(pe,{label:l(`format.${e}`),active:p===e,onClick:()=>{return t=e,yt.setFormat(t),void v(t);var t}}))),d("hr",null),d(pe,{icon:w?"square_fill":"square",label:l("highlighting"),onClick:()=>{return e=!w,yt.setHighlighting(e),void y(e);var e}}))),w?d("pre",{id:"editor",class:"source"}):d("textarea",{ref:C,class:"source",spellcheck:!1,autocorrect:"off",onBlur:k.current}),d("a",{ref:b,style:"display: none;"}))}class Nn extends h.DataModel{constructor(e,t,n,o){super(e),this.mapper=t,this.getter=n,this.setter=o}map(e){return this.mapper(e)}get(e){return this.getter(e)}set(e,t,n){return this.setter(e,t,n)}}const Tn=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","recipe.type","dimension.generator.type","dimension.generator.biome_source.type","dimension.generator.biome_source.preset","carver.type","feature.type","decorator.type","feature.tree.minimum_size.type","block_state_provider.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","int_provider.type","float_provider.type","height_provider.type","structure_feature.type","surface_builder.type","processor.processor_type","rule_test.predicate_type","pos_rule_test.predicate_type","template_element.element_type","block_placer.type","block_predicate.type","material_rule.type","material_condition.type","structure_placement.type","density_function.type"],Bn=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],Hn=["feature.config","decorator.config","int_provider.value","float_provider.value","block_state_provider.simple_state_provider.state","block_state_provider.rotated_block_provider.state","block_state_provider.weighted_state_provider.entries.entry.data","rule_test.block_state","structure_feature.config","surface_builder.config","template_pool.elements.entry.element","decorator.block_survives_filter.state","material_rule.block.result_state"],Rn=["loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","feature.type","decorator.type","block_state_provider.type","feature.tree.minimum_size.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","block_placer.type","rule_test.predicate_type","processor.processor_type","template_element.element_type","nbt_operation.op","number_provider.value","score_provider.name","score_provider.target","nbt_provider.source","nbt_provider.target","generator_biome.biome","block_predicate.type","material_rule.type","material_condition.type","density_function.type"],Fn=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],Gn=["generator_biome.parameters.temperature","generator_biome.parameters.humidity","generator_biome.parameters.continentalness","generator_biome.parameters.erosion","generator_biome.parameters.depth","generator_biome.parameters.weirdness","feature.end_spike.crystal_beam_target","feature.end_gateway.exit","decorator.block_filter.offset","block_predicate.matching_blocks.offset","block_predicate.matching_fluids.offset","model_element.from","model_element.to","model_element.rotation.origin","model_element.faces.uv","item_transform.rotation","item_transform.translation","item_transform.scale","generator_structure.random_spread.locate_offset"],Wn=["noise_settings.surface_rule","noise_settings.noise.terrain_shaper"],Jn=["density_function.argument","density_function.argument1","density_function.argument2","density_function.input","density_function.when_in_range","density_function.when_out_of_range"],Un=new h.DataModel(h.MapNode(h.StringNode(),h.StringNode()),{historyMax:0});function Yn({model:e,lang:t,version:n,blockStates:o}){var r;const a=new h.ModelPath(e),[s,i,l]=e.schema.hook(qn,a,Se(e.data),t,n,o,{});return(null==(r=null==i?void 0:i.props)?void 0:r.children.some((e=>e)))?d("div",{class:`node ${e.schema.type(a)}-node`,"data-category":e.schema.category(a)},d("div",{class:"node-header"},s,i),d("div",{class:"node-body"},l)):l}const qn={base:()=>[null,null,null],boolean:(e,t,n,o,r,a,s)=>[null,d(Kn,i({},l(i({},e),{path:t,value:n,lang:o,version:r,states:a,ctx:s}))),null],choice({choices:e,config:t,switchNode:n},o,r,a,s,i,l){const c=n.activeCase(o,!0),u=(null==t?void 0:t.context)?new h.ModelPath(o.getModel(),new h.Path(o.getArray(),[t.context])):o,[m,p,f]=c.node.hook(this,u,r,a,s,i,l);if(1===e.length)return[m,p,f];const g=(null==t?void 0:t.choiceContext)?new h.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new h.Path([],[t.context]):o,v=d("select",{value:c.type,onChange:n=>(n=>{var a;const s=null!=(a=e.find((e=>e.type===n)))?a:c,i=s.node.default(),l=s.change?s.change(h.DataModel.unwrapLists(r)):"feature"===t.choiceContext&&"minecraft:decorated"===(null==i?void 0:i.type)?i.config.feature:i;o.model.set(o,h.DataModel.wrapLists(l))})(n.target.value)},e.map((e=>d("option",{value:e.type},ro(a,g.contextPush(e.type))))));return[m,d(_,null,v,p),f]},list({children:e,config:t},n,o,r,a,s,c){const{expand:u,collapse:m,isToggled:p}=Xn(),[f,v]=g(50),w=n.getContext().join(".");if(Gn.includes(w)){return[d(_,null,[...Array(t.maxLength)].map(((e,t)=>d(ao,{lang:r,path:n.modelPush(t)}))),d("div",{class:"fixed-list"})),d(_,null,[...Array(t.maxLength)].map(((t,i)=>{var l;return e.hook(this,n.modelPush(i),null==(l=null==o?void 0:o[i])?void 0:l.node,r,a,s,c)[1]}))),null]}return[null,d("button",{class:"add tooltipped tip-se","aria-label":At(r,"add_top"),onClick:()=>{Array.isArray(o)||(o=[]);const t=h.DataModel.wrapLists(e.default());n.model.set(n,[{node:t,id:we()},...o])}},Fe.plus_circle),d(_,null,o&&Array.isArray(o)&&o.map((({node:t,id:h},g)=>{if(g===f)return d("div",{class:"node node-header"},d("label",null,At(r,"entries_hidden",""+(o.length-f))),d("button",{onClick:()=>v(Math.min(f+50,o.length))},At(r,"entries_hidden.more","50")),d("button",{onClick:()=>v(o.length)},At(r,"entries_hidden.all")));if(g>f)return null;const w=n.push(g).contextPush("entry"),_="object"===e.type(w),y=p(h);if(_&&(!1===y||void 0===y&&o.length>20))return d("div",{class:"node node-header","data-category":e.category(w)},d(ao,{lang:r,path:w,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(r,"expand")}\n${At(r,"expand_all","Ctrl")}`,onClick:u(h)},Fe.chevron_right),d("label",null,ro(r,w,`${g}`)),d(Zn,{key:h,path:w,value:t,schema:e}));return d(to,l(i({key:h,path:w,schema:e,value:t},{lang:r,version:a,states:s,actions:[{icon:"duplicate",label:"duplicate",onSelect:()=>{const e=[...n.get()];e.splice(g,0,{id:we(),node:Se(t)}),n.model.set(n,e)}}]}),{ctx:l(i({},c),{index:(0===g?1:0)+(g===o.length-1?2:0)})}),_&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(r,"collapse")}\n${At(r,"collapse_all","Ctrl")}`,onClick:m(h)},Fe.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":At(r,"remove"),onClick:()=>w.set(void 0)},Fe.trashcan),o.length>1&&d("div",{class:"node-move"},d("button",{class:"move tooltipped tip-se","aria-label":At(r,"move_up"),onClick:()=>{const e=[...n.get()];[e[g-1],e[g]]=[e[g],e[g-1]],n.model.set(n,e)},disabled:0===g},Fe.chevron_up),d("button",{class:"move tooltipped tip-se","aria-label":At(r,"move_down"),onClick:()=>{const e=[...n.get()];[e[g+1],e[g]]=[e[g],e[g+1]],n.model.set(n,e)},disabled:g===o.length-1},Fe.chevron_down)))})),o&&o.length>0&&o.length<=f&&d("div",{class:"node node-header"},d("button",{class:"add tooltipped tip-se","aria-label":At(r,"add_bottom"),onClick:()=>{Array.isArray(o)||(o=[]);const t=h.DataModel.wrapLists(e.default());n.model.set(n,[...o,{node:t,id:we()}])}},Fe.plus_circle)))]},map({children:e,keys:t,config:n},o,r,a,s,c,u){var m,p,f,g,v;const{expand:w,collapse:y,isToggled:b}=Xn(),x=new h.ModelPath(Un,new h.Path([oo(o.toString())])),k="block_state_map"===(null==(m=n.validation)?void 0:m.validator)?null==c?void 0:c[h.relativePath(o,n.validation.params.id).get()]:null,C=(null==k?void 0:k.properties)?h.StringNode(null,{enum:Object.keys(null!=(p=k.properties)?p:{})}):t;if(k&&"Properties"===o.last()){"object"!=typeof r&&(r={});const e=Object.entries(null!=(f=k.properties)?f:{}).map((([e,t])=>[e,h.StringNode(null,{enum:t})]));return Object.entries(null!=(g=k.properties)?g:{}).forEach((([e,t])=>{"string"!=typeof r[e]?o.model.errors.add(o.push(e),"error.expected_string"):t.includes(r[e])||o.model.errors.add(o.push(e),"error.invalid_enum_option",r[e])})),h.ObjectNode(Object.fromEntries(e)).hook(this,o,r,a,s,c,u)}return[null,d(_,null,C.hook(this,x,null!=(v=x.get())?v:"",a,s,c,u)[1],d("button",{class:"add tooltipped tip-se","aria-label":At(a,"add"),onClick:()=>{const t=x.get();o.model.set(o.push(t),h.DataModel.wrapLists(e.default()))}},Fe.plus_circle)),d(_,null,"object"==typeof r&&Object.entries(r).map((([t,n])=>{var m,p,f,g;const v=o.modelPush(t),_="object"===e.type(v),x=b(t);if(_&&(!1===x||void 0===x&&r.length>20))return d("div",{class:"node node-header","data-category":e.category(v)},d(ao,{lang:a,path:v,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(a,"expand")}\n${At(a,"expand_all","Ctrl")}`,onClick:w(t)},Fe.chevron_right),d("label",null,t),d(Zn,{key:t,path:v,value:n,schema:e}));const C=k?h.StringNode(null,{enum:null!=(p=null==(m=k.properties)?void 0:m[t])?p:[]}):e;(null==(f=null==k?void 0:k.properties)?void 0:f[t])&&"string"==typeof n&&!(null==(g=k.properties)?void 0:g[t].includes(n))&&o.model.errors.add(v,"error.invalid_enum_option",n);return d(to,l(i({key:t,schema:C,path:v,value:n},{lang:a,version:s,states:c,ctx:u}),{label:t}),_&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(a,"collapse")}\n${At(a,"collapse_all","Ctrl")}`,onClick:y(t)},Fe.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":At(a,"remove"),onClick:()=>v.set(void 0)},Fe.trashcan))})))]},number:(e,t,n,o,r,a,s)=>[null,d(Qn,i({},l(i({},e),{path:t,value:n,lang:o,version:r,states:a,ctx:s}))),null],object({node:e,config:t,getActiveFields:n,getChildModelPath:o},r,a,s,c,u,m){var p;const{expand:f,collapse:g,isToggled:v}=Xn();if(0==r.getArray().length&&function(e,t){var n;return"feature"===e&&"decorated"===(null==(n=null==t?void 0:t.type)?void 0:n.replace(/^minecraft:/,""))&&ge(null==t?void 0:t.config)}(t.context,a)){const{wrapper:e,fields:t}=function(e,t,n){const o=[],r=lo(n,o),a={type:e.type,config:h.ObjectNode({decorators:h.ListNode(ht),feature:mt},{context:"feature.decorated"})},s=h.ObjectNode(a,{context:"feature"}),i=new h.Path(["config","feature"]),l=new h.Path(["config","decorators"]),c=t.getModel(),d=new Nn(s,(e=>{if(e.startsWith(i))return new h.Path([...[...Array(o.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);if(e.startsWith(l)){if(2===e.modelArr.length)return new h.Path([]);const t=e.modelArr[2];if("number"==typeof t)return new h.Path([...[...Array(t)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)])}return e}),(e=>{if(e.equals(l)){const e=[];return lo(c.data,e),e}return c.get(d.map(e))}),((e,t,n)=>{if(e.startsWith(i)){const o=[];lo(c.data,o);const r=new h.Path([...[...Array(o.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);return c.set(r,t,n)}if(e.startsWith(l)){const o=e.modelArr[2];if(2===e.modelArr.length){const e=d.get(i);return c.set(new h.Path,co(e,t),n)}if("number"==typeof o){if(3===e.modelArr.length&&void 0===t){const e=d.get(i),t=[];lo(c.data,t),t.splice(o,1);const r=co(e,t);return c.set(new h.Path,r,n)}{const r=new h.Path([...[...Array(o)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)]);return c.set(r,t,n)}}}c.set(e,t,n)}));return d.data={type:c.data.type,config:{decorators:o,feature:r}},d.errors=c.errors,{fields:a,wrapper:d}}(n(r),r,a);a=e.data,n=()=>t,o=(t,n)=>new h.ModelPath(e,new h.Path(t.getArray(),["feature"])).push(n)}let w=null,y=null;if(e.optional())if(void 0===a){const t=()=>r.set(h.DataModel.wrapLists(e.default()));y=d("button",{class:"collapse closed tooltipped tip-se","aria-label":At(s,"expand"),onClick:t},Fe.plus_circle)}else{const e=()=>r.set(void 0);y=d("button",{class:"collapse open tooltipped tip-se","aria-label":At(s,"remove"),onClick:e},Fe.trashcan)}const b=r.getContext().join(".");if(Jn.includes(b)||Wn.includes(b)){const e=v(""),t=Wn.includes(b)?e:!e;if(w=d(_,null,d("button",{class:"toggle tooltipped tip-se","aria-label":At(s,t?"collapse":"expand"),onClick:e?g(""):f("")},t?Fe.chevron_down:Fe.chevron_right)),!t)return[w,y,null]}const x="object"==typeof a&&null!==a&&(null==(p=e.default())?void 0:p.pools)?l(i({},m),{loot:null==a?void 0:a.type}):m,k=d(_,null,"object"==typeof a&&null!==a&&!(e.optional()&&void 0===a)&&Object.entries(n(r)).filter((([e,t])=>t.enabled(r))).map((([e,t])=>{const n=o(r,e),l=n.getContext().join(".");if(Bn.includes(l))return null;const[h,m,p]=t.hook(this,n,a[e],s,c,u,x),f="object"===t.type(n)&&Hn.includes(l),g=Rn.includes(l);return f||g?(w=d(_,null,w,d(ao,{lang:s,path:n}),d(so,{lang:s,path:n}),h),y=d(_,null,y,m),f?p:null):d(to,i({key:e,schema:t,path:n,value:a[e]},{lang:s,version:c,states:u,ctx:x}))})));return[w,y,k]},string:(e,t,n,o,r,a,s)=>[null,d(eo,i({},l(i({},e),{path:t,value:n,lang:o,version:r,states:a,ctx:s}))),null]};function Zn({path:e,value:t}){var n,o,r,a,s;switch(e.getContext().join(".")){case"loot_table.pools.entry":return d("label",null,null!=(o=null==(n=null==t?void 0:t.entries)?void 0:n.length)?o:0," entries");case"function.set_contents.entries.entry":case"loot_pool.entries.entry":return d("label",null,null!=(s=null==(r=null==t?void 0:t.name)?void 0:r.replace(/^minecraft:/,""))?s:null==(a=null==t?void 0:t.type)?void 0:a.replace(/^minecraft:/,""))}for(const i of Object.values(null!=t?t:{}))if("string"==typeof i)return d("label",null,i.replace(/^minecraft:/,""));return null}function Xn(){const[e,t]=g(new Map),[n,o]=g(void 0);return{expand:e=>n=>{n.ctrlKey?(t(new Map),o(!0)):t((t=>new Map(t.set(e,!0))))},collapse:e=>n=>{n.ctrlKey?(t(new Map),o(!1)):t((t=>new Map(t.set(e,!1))))},isToggled:t=>{var o;return e instanceof Map&&(null!=(o=e.get(t))?o:n)}}}function Kn({path:e,node:t,value:n,lang:o}){const r=o=>{e.model.set(e,t.optional()&&n===o?void 0:o)};return d(_,null,d("button",{class:!1===n?"selected":"",onClick:()=>r(!1)},At(o,"false")),d("button",{class:!0===n?"selected":"",onClick:()=>r(!0)},At(o,"true")))}function Qn({path:e,config:t,integer:n,value:o,lang:r}){var a;const s=t=>{const o=t.target.value,r=n?parseInt(o):parseFloat(o);e.model.set(e,r)};return d(_,null,d("input",{type:"text",value:null!=o?o:"",onBlur:s,onKeyDown:e=>{"Enter"===e.key&&s(e)}}),(null==t?void 0:t.color)&&d("input",{type:"color",value:"#"+(null!=(a=null==o?void 0:o.toString(16).padStart(6,"0"))?a:"000000"),onChange:t=>{const n=t.target.value,o=parseInt(n.slice(1),16);e.model.set(e,o)}}),["dimension.generator.seed","dimension.generator.biome_source.seed","world_settings.seed"].includes(e.getContext().join("."))&&d("button",{onClick:()=>ye(e.model),class:"tooltipped tip-se","aria-label":At(r,"generate_new_seed")},Fe.sync))}function eo({path:e,getValues:t,config:n,node:o,value:r,lang:a,version:s,states:i}){var l;const c=t=>{t.stopPropagation();const n=t.target.value;n!==r&&e.model.set(e,0===n.length?void 0:n)},u=t(),m=e.getContext().join("."),p=no(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool?void 0:n.params.pool;if(Fn.includes(m))return d("textarea",{value:null!=r?r:"",onBlur:c});if(no(n)&&!n.additional||Tn.includes(m)){let t=new h.Path([]);return no(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):p?t=t.contextPush(p):no(n)&&(t=e),d("select",{value:null!=r?r:"",onChange:c},o.optional()&&d("option",{value:""},At(a,"unset")),u.map((e=>d("option",{value:e},ro(a,t.contextPush(e.replace(/^minecraft:/,"")))))))}if(no(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=we(),t=p?(e=>fe.generators.find((t=>t.id===e.replace(/^\$/,""))))(p):void 0;return d(_,null,d("input",{value:null!=r?r:"",onBlur:c,onKeyDown:e=>{"Enter"===e.key&&c(e)},list:u.length>0?e:""}),u.length>0&&d("datalist",{id:e},u.map((e=>d("option",{value:e})))),t&&u.includes(r)&&r.startsWith("minecraft:")&&d("a",{href:`/${t.url}/?version=${s}&preset=${r.replace(/^minecraft:/,"")}`,class:"tooltipped tip-se","aria-label":At(a,"follow_reference")},Fe.link_external))}{const t=null==i?void 0:i[h.relativePath(e,n.params.id).get()],o=Object.keys(null!=(l=null==t?void 0:t.properties)?l:{});return d("select",{value:null!=r?r:"",onChange:c},o.map((e=>d("option",null,e))))}}const to=re((function({label:e,schema:t,path:n,value:o,lang:r,version:a,states:s,ctx:c,actions:u,children:h}){var m;const p=t.type(n),f=t.category(n),g=n.getContext().join("."),[v,w]=Te(),_=l(i({},c),{depth:(null!=(m=c.depth)?m:0)+1});delete _.index;const[y,b,x]=t.hook(qn,n,o,r,a,s,_);return d("div",{class:`node ${p}-node`,"data-category":f},d("div",{class:"node-header",onContextMenu:e=>{e.preventDefault(),w()}},d(ao,{lang:r,path:n}),d(so,{lang:r,path:n}),h,y,d("label",null,null!=e?e:ro(r,n,`${n.last()}`),v&&d("div",{class:"node-menu"},null==u?void 0:u.map((e=>{var t;return d("div",{key:e.label,class:"menu-item"},d(pe,{icon:e.icon,tooltip:At(r,e.label),tooltipLoc:"se",onClick:()=>e.onSelect()}),d("span",null,null!=(t=e.description)?t:At(r,e.label)))})),d("div",{class:"menu-item"},d(pe,{icon:"clippy",tooltip:At(r,"copy_context"),tooltipLoc:"se",onClick:()=>navigator.clipboard.writeText(g)}),d("span",null,g)))),b),x&&d("div",{class:"node-body"},x))}),((e,t)=>e.schema===t.schema&&e.lang===t.lang&&e.path.equals(t.path)&&Le(e.ctx,t.ctx)&&Le(e.value,t.value)));function no(e){return!!(null==e?void 0:e.enum)}function oo(e){var t,n=0;for(t=0;te.path.startsWith(t))):t.model.errors.get(t,!0);if(0===r.length)return null;const a=At(e,r[0].error,...null!=(o=r[0].params)?o:[]);return io("node-error","issue_opened",a)}function so({lang:e,path:t}){const n=t.contextPush("help").getContext().join("."),o=At(e,n);return o===n?null:io("node-help","info",o)}const io=(e,t,n)=>{const[o,r]=Te();return d("div",{class:`node-icon ${e}${o?" show":""}`,onClick:r},Fe[t],d("span",{class:"icon-popup"},n))};function lo(e,t){var n,o;return"decorated"!==(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,""))?e:ge(null==e?void 0:e.config)?(t.push({id:t.length,node:e.config.decorator}),lo(null!=(o=e.config.feature)?o:"",t)):e}function co(e,t){return 0===t.length?e:{type:"minecraft:decorated",config:{decorator:t.shift().node,feature:co(e,t)}}}function uo({version:e,model:t,blockStates:n,onError:o}){const{lang:r}=zt();if(!t||!n||"none"===r)return d(_,null);const[a]=ae((e=>{o(`Error rendering the tree: ${e.message}`),console.error(e)}));if(a)return d(_,null);const[,s]=g(0);return He(t,(()=>{s((e=>e+1))})),d("div",{class:"tree","data-cy":"tree"},d(Yn,i({},{model:t,lang:r,version:e,blockStates:n})))}function ho({term:e}){const{actualTheme:t}=Dt(),n="light"===t?"-burn":"",o=`https://${location.host}/assets/giscus${n}.css`;return d(se,{repo:"misode/misode.github.io",repoId:"MDEwOlJlcG9zaXRvcnkxOTIyNTQyMzA=",category:"Site",categoryId:"DIC_kwDOC3WRFs4COB8r",mapping:e?"specific":"pathname",term:e,reactionsEnabled:"1",emitMetadata:"0",inputPosition:"top",theme:o,lang:"en"})}const mo={system:"device_desktop",dark:"moon",light:"sun"};function po(){const{lang:e,locale:t,changeLanguage:n}=zt(),{theme:o,changeTheme:r}=Dt(),{version:a}=Rt(),{title:s}=Tt(),i=Ce(m());return d("header",null,d("div",{class:"title"},d(ie,{class:"home-link",href:"/","aria-label":t("home"),"data-cy":"home-link"},fo.home),d("h1",null,s),i&&d(Re,{icon:"chevron_down",tooltip:t("switch_generator"),"data-cy":"generator-switcher"},fe.generators.filter((e=>e.category===(null==i?void 0:i.category)&&vt(a,e.minVersion))).map((e=>d(pe,{label:t(e.id),active:e.id===i.id,onClick:()=>p(xe(e.url))}))))),d("nav",null,d("ul",null,d("li",{"data-cy":"language-switcher"},d(Re,{icon:"globe",tooltip:t("language")},fe.languages.map((({code:t,name:o})=>d(pe,{label:o,active:t===e,onClick:()=>n(t)}))))),d("li",{"data-cy":"theme-switcher"},d(Re,{icon:mo[o],tooltip:t("theme")},Object.entries(mo).map((([e,n])=>d(pe,{icon:n,label:t(`theme.${e}`),active:e===o,onClick:()=>r(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",class:"tooltipped tip-sw","aria-label":t("github")},Fe.mark_github)))))}const fo={home:d("svg",{width:"32",height:"28",viewBox:"0 0 32 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},d("rect",{width:"26",height:"6",rx:"3",fill:"#7CB45C"}),d("rect",{x:"8",width:"18",height:"6",rx:"3",fill:"#4BA041"}),d("rect",{y:"11",width:"32",height:"6",rx:"3",fill:"#AAA8A8"}),d("rect",{x:"11",y:"11",width:"21",height:"6",rx:"3",fill:"#91908F"}),d("rect",{x:"11",y:"22",width:"21",height:"6",rx:"3",fill:"#70B5C3"}),d("rect",{x:"17",y:"22",width:"15",height:"6",rx:"3",fill:"#4D989B"})),report:d("svg",{width:"30",height:"36",viewBox:"0 0 30 36",xmlns:"http://www.w3.org/2000/svg"},d("path",{d:"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z",fill:"#6ACC5D"}),d("path",{d:"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z",fill:"#FF4C4C"}),d("path",{d:"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z",fill:"#E5B442"}),d("path",{d:"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z",fill:"#2BAD1D"}),d("path",{d:"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z",fill:"#C10B0B"}),d("path",{d:"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z",fill:"#CC8E00"})),sounds:d("svg",{width:"20",height:"20",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},d("circle",{cx:"10",cy:"10",r:"10",fill:"#451475"}),d("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z",fill:"#C5A5E6"}))};function go({sounds:e,sound:t,delay:n,pitch:o,volume:r,onEdit:a,onDelete:s,delayedPlay:i}){const{locale:l}=zt(),{version:u}=Rt(),[h,m]=g(!0),[p,v]=g(!1),[w,_]=g(!1),y=f([]),b=`playsound minecraft:${t} master @s ~ ~ ~ ${r} ${o}`;c((()=>{var n,a,s;const i=e[t];_(0===(null!=(a=null==(n=null==i?void 0:i.sounds)?void 0:n.length)?a:0)),y.current.forEach((e=>e.stop())),y.current=(null!=(s=null==i?void 0:i.sounds)?s:[]).map((e=>{const t="string"==typeof e?e:e.name,n=(a=u,s=t,`${nt(fe.versions.find((e=>e.id===a)),"assets")}/assets/minecraft/sounds/${s}.ogg`);var a,s;const i=new le.Howl({src:[n],format:["ogg"],volume:r,rate:o});i.on("end",(()=>{v(!1)}));const l=()=>{h&&y.current.every((e=>"loaded"===e.state()))&&m(!1)};return"loaded"===i.state()?setTimeout((()=>l())):i.on("load",(()=>{l()})),i})),m(!0)}),[t,e]),c((()=>{y.current.forEach((e=>e.rate(o)))}),[o]),c((()=>{y.current.forEach((e=>e.volume(r)))}),[r]);const x=()=>{if(h||w)return;k();const e=Math.floor(Math.random()*y.current.length);y.current[e].play(),v(!0)},k=()=>{y.current.forEach((e=>e.stop()))};c((()=>{i&&setTimeout((()=>x()),50*n)}),[i]),c((()=>()=>k()),[]);const[C,M]=g(!1),A=f(void 0);return d("div",{class:`sound-config${h?" loading":p?" playing":""}${w?" invalid":""}`},d(pe,{class:"play",icon:w?"alert":h?"sync":"play",label:l("sounds.play"),onClick:x,tooltip:l(w?"sounds.unknown_sound":h?"sounds.loading_sound":"sounds.play_sound"),tooltipLoc:"se"}),d(Ue,{class:"btn btn-input sound",list:"sound-list",spellcheck:!1,value:t,onChange:e=>a({sound:e})}),d("label",{class:"delay-label"},l("sounds.delay"),": "),d(Ye,{class:"btn btn-input delay",min:0,value:n,onChange:e=>a({delay:e})}),d("label",{class:"pitch-label"},l("sounds.pitch"),": "),d(qe,{class:"pitch tooltipped tip-s",min:.5,max:2,step:.01,"aria-label":o.toFixed(2),style:`--x: ${100/1.5*(o-.5)}%`,value:o,onChange:e=>a({pitch:e})}),d("label",{class:"volume-label"},l("sounds.volume"),": "),d(qe,{class:"volume tooltipped tip-s",min:0,max:1,step:.01,"aria-label":r.toFixed(2),style:`--x: ${100*r}%`,value:r,onChange:e=>a({volume:e})}),d(pe,{class:"copy"+(C?" active":""),icon:C?"check":"terminal",label:l("copy"),tooltip:l(C?"copied":"sounds.copy_command"),onClick:()=>{navigator.clipboard.writeText(b),M(!0),void 0!==A.current&&clearTimeout(A.current),A.current=setTimeout((()=>{M(!1)}),2e3)}}),d(pe,{class:"remove",icon:"trashcan",tooltip:l("sounds.remove_sound"),onClick:()=>{s(),k()}}))}function vo({title:e,desc:t,link:n,icon:o,children:r}){const a=d(_,null,d("div",{class:"tool-head"},o&&fo[o],d("div",null,d("h3",null,e),d("p",null,t))),r&&d("div",{class:"tool-body"},r));return n?d("a",{class:"tool-card",href:n},a):d("div",{class:"tool-card"},a)}function wo({entries:e,onSelect:t,indent:n}){const o=w((()=>{var t;const n={};for(const o of e){const e=o.indexOf("/");if(e>=0){const r=o.slice(0,e);(null!=(t=n[r])?t:n[r]=[]).push(o.slice(e+1))}}return Object.entries(n)}),e),r=w((()=>e.filter((e=>!e.includes("/")))),e),[a,s]=g(new Set);return d("div",{class:"tree-view",style:`--indent: ${null!=n?n:0};`},o.map((([e,o])=>d("div",null,d(_o,{icon:a.has(e)?"chevron_right":"chevron_down",key:e,label:e,onClick:()=>{return t=e,a.has(t)?a.delete(t):a.add(t),void s(new Set(a));var t}}),!a.has(e)&&d(wo,{entries:o,onSelect:n=>t(`${e}/${n}`),indent:(null!=n?n:0)+1})))),r.map((e=>d(_o,{icon:"file",key:e,label:e,onClick:()=>t(e)}))))}function _o({icon:e,label:t,onClick:n}){return d("div",{class:"entry",onClick:n},Fe[e],t)}function yo({change:e,activeTags:t,toggleTag:n}){return d("div",{class:"changelog-entry"},d("div",{class:"changelog-version"},d(bo,i({},e.version)),d(bo,i({},e.group))),d("div",{class:"changelog-tags"},e.tags.map((e=>d(xo,{label:e,onClick:n?()=>n(e):void 0,active:null==t?void 0:t.includes(e)})))),d("div",{class:"changelog-content",dangerouslySetInnerHTML:{__html:ce(e.content)}}))}function bo({id:e,article:t}){return null===t?d("span",null,e):d("a",{href:`https://www.minecraft.net/en-us/article/${t}`,target:"_blank"},e)}function xo({label:e,active:t,onClick:n}){const o="breaking"===e?5:be(e)%360;return d("div",{class:`changelog-tag${t?" active":""}${n?" clickable":""}`,style:`--tint: ${o}`,onClick:n},"breaking"===e&&Fe.alert,e)}function ko({changes:e,defaultOrder:t}){const{locale:n}=zt(),[o,r]=g(""),[a,s]=g([]),i=e=>{a.includes(e)?s(a.filter((t=>t!==e))):s([...a,e])},l=w((()=>{const t=o.split(" ").map((e=>e.trim().toLowerCase())).filter((e=>e.length>0));return 0===t.length&&0===a.length?e:null==e?void 0:e.filter((e=>{if(!a.every((t=>e.tags.includes(t))))return!1;const n=e.tags.join(" ")+" "+e.content.toLowerCase();return t.every((e=>e.startsWith("!")?1===e.length||!n.includes(e.slice(1)):n.includes(e)))}))}),[e,o,a]),[c,u]=g("desc"===t),h=w((()=>null==l?void 0:l.sort(((e,t)=>c?t.order-e.order:e.order-t.order))),[l,c]);return d(_,null,d("div",{class:"changelog-query"},d(Ue,{class:"btn btn-input changelog-search",list:"sound-list",placeholder:n("changelog.search"),value:o,onChange:r}),d(pe,{icon:c?"sort_desc":"sort_asc",label:c?"Newest first":"Oldest first",onClick:()=>u(!c)})),a.length>0&&d("div",{class:"changelog-tags"},a.map((e=>d(xo,{label:e,onClick:()=>s(a.filter((t=>t!==e)))})))),d("div",{class:"changelog-list"},void 0===h?d("span",null,n("loading")):0===h.length?d("span",null,n("changelog.no_results")):h.map((e=>d(yo,{change:e,activeTags:a,toggleTag:i})))))}function Co({version:e}){const{locale:t}=zt(),[n,o]=g("changelog"),[r,a]=g(void 0);c((()=>{Qe().then((e=>a(e.map((e=>l(i({},e),{tags:e.tags.filter((t=>t!==e.group.id))})))))).catch((e=>console.error(e)))}),[]);const s=w((()=>null==r?void 0:r.filter((t=>t.version.id===e.id||t.group.id===e.id))),[e.id,r]);return d(_,null,d("div",{class:"version-detail"},d("h2",null,e.name),d("div",{class:"version-info"},d(zo,{label:t("versions.released"),value:Mo(e)}),d(zo,{label:t("versions.release_target"),value:e.release_target,link:e.id!==e.release_target?`/versions/?id=${e.release_target}`:void 0}),d(zo,{label:t("versions.data_version"),value:e.data_version}),d(zo,{label:t("versions.protocol_version"),value:e.protocol_version}),d(zo,{label:t("versions.data_pack_format"),value:e.data_pack_version}),d(zo,{label:t("versions.resource_pack_format"),value:e.resource_pack_version})),d("div",{class:"version-tabs"},d("span",{class:"changelog"===n?"selected":"",onClick:()=>o("changelog")},t("versions.technical_changes")),d("span",{class:"discussion"===n?"selected":"",onClick:()=>o("discussion")},t("versions.discussion"))),d("div",{class:"version-tab"},"changelog"===n&&d(ko,{changes:s,defaultOrder:"asc"}),"discussion"===n&&d(ho,{term:`version/${e.id}`}))))}function Mo(e){return new Date(e.release_time).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}function Ao({version:e,link:t}){const{locale:n}=zt();return d("a",{class:"version-entry",href:t},d("span",{class:"version-id"},e.id),d(zo,{label:n("versions.released"),value:Mo(e),compact:!0}),d(zo,{label:n("versions.data_version"),value:e.data_version,optional:!0}),d(zo,{label:n("versions.pack_format"),value:e.data_pack_version,optional:!0}))}function Io({versions:e,link:t}){const{locale:n}=zt(),[o,r]=g(!0),[a,s]=g(""),i=w((()=>e.filter((e=>!("snapshot"===e.type&&!o)&&e.id.includes(a)))),[e,o,a]);return d(_,null,d("div",{class:"versions-controls"},d(Ue,{class:"btn btn-input version-search",list:"sound-list",placeholder:n("versions.search"),value:a,onChange:s}),d(We,{label:"Include snapshots",value:o,onChange:r})),d("div",{class:"version-list"},i.map((e=>d(Ao,{version:e,link:null==t?void 0:t(e.id)}))),0===i.length&&d("span",null,n("versions.no_results"))))}function zo({label:e,value:t,link:n,compact:o,optional:r}){return d("div",{class:"version-metadata"+(r?" version-metadata-hide":"")},d("span",{class:o?"version-metadata-hide":void 0},e,": "),d("span",{class:"version-metadata-value"},t),n&&d("a",{href:n,class:"version-metadata-link"},Fe.link_external))}function jo({category:e}){const{locale:t}=zt();return Tt(t("title.generator_category",t(e))),d("main",null,d("div",{class:"category"},fe.generators.filter((t=>t.category===e)).map((e=>d(vo,{title:t(e.id),link:xe(e.url)})))))}function Eo({}){const{locale:e}=zt(),[t,n]=g(null);Tt(e("title.changelog"));const[o,r]=g([]);return c((()=>{Qe().then((e=>r(e))).catch((e=>{console.error(e),n(e)}))}),[]),d("main",null,d(me,{type:"text",id:"changelog"}),t&&d(Ge,{error:t,onDismiss:()=>n(null)}),d("div",{class:"changelog"},d(ko,{changes:o,defaultOrder:"desc"})))}function $o({}){var e;const{locale:t}=zt(),{version:n,changeVersion:o}=Rt(),{project:r,file:a,updateFile:s,openFile:u,closeFile:f}=Ot(),[v,w]=g(null),[y,b]=ae();if(y)return y.message=`Something went wrong rendering the generator: ${y.message}`,d("main",null,d(Ge,{error:y,onDismiss:b}));const x=Ce(m());if(!x)return d("main",null,d(Ge,{error:`Cannot find generator "${m()}"`}));const k=fe.versions.filter((e=>vt(e.id,x.minVersion,x.maxVersion))).map((e=>e.id));Tt(t("title.generator",t(x.id)),k),vt(n,x.minVersion)||w(`The minimum version for this generator is ${x.minVersion}`),vt(n,void 0,x.maxVersion)||w(`This generator is not available in versions above ${x.maxVersion}`);const C=Me(m()).get("preset");c((()=>{M&&C&&R(C).then((e=>{null==M||M.reset(h.DataModel.wrapLists(e),!1),Ae({version:n,preset:C})}))}),[C]);const[M,A]=g(null),[I,z]=g(null);c((()=>{w(null),A(null),async function(e){return(await gt(e)).blockStates}(n).then((e=>z(e))),async function(e,t){var n;if(!dt[t]||dt[t].version!==e){const r=await gt(e);ht=h.Reference(r.schemas,"configured_decorator"),mt=h.ChoiceNode([{type:"string",node:h.StringNode(r.collections,{validator:"resource",params:{pool:"$worldgen/configured_feature"}})},{type:"object",node:h.Reference(r.schemas,"configured_feature")}],{choiceContext:"feature"});const a=null==(n=fe.generators.find((e=>e.id===t)))?void 0:n.schema;if(!a)throw new Error(`Cannot find model ${t}`);try{const n=r.schemas.get(a),o=new h.DataModel(n,{wrapLists:!0});dt[t]?o.reset(dt[t].model.data,!1):(o.validate(!0),o.history=[JSON.stringify(o.data)]),dt[t]={model:o,version:e}}catch(o){const n=new Error(`Cannot get generator "${t}" for version "${e}": ${Oe(o)}`);throw o instanceof Error&&(n.stack=o.stack),n}}return dt[t].model}(n,x.id).then((async e=>{if(he.setGenerator(x.id),C){const t=await R(C);e.reset(h.DataModel.wrapLists(t),!1)}A(e)})).catch((e=>{console.error(e),w(e)}))}),[n,x.id]);const[j,E]=g(!1);He(M,(()=>{Ae({version:void 0,preset:void 0}),w(null),E(!0)}));const[$,O]=g(""),[S,L]=Ve(),[P,D]=Ve(),V=()=>{if($!==(null==a?void 0:a.id)&&$&&M&&I){const e=Sn(M,I);s(x.id,null==a?void 0:a.id,{id:$,data:e})?L():(D(),a&&O(null==a?void 0:a.id))}else a&&O(null==a?void 0:a.id)};c((()=>{a&&O(a.id)}),[a]),c((()=>{var e;M&&(O(null!=(e=null==a?void 0:a.id)?e:""),a&&x.id===a.type&&M.reset(h.DataModel.wrapLists(a.data)),E(!1))}),[a,M]);const N=e=>{e.ctrlKey&&"z"===e.key?(he.generatorEvent("undo","Hotkey"),null==M||M.undo()):e.ctrlKey&&"y"===e.key&&(he.generatorEvent("redo","Hotkey"),null==M||M.redo())},T=e=>{if(e.ctrlKey&&"s"===e.key&&(e.preventDefault(),M&&I&&a)){he.generatorEvent("save","Hotkey");const e=Sn(M,I);s(x.id,null==a?void 0:a.id,{id:null==a?void 0:a.id,data:e}),E(!1),L()}};c((()=>(document.addEventListener("keyup",N),document.addEventListener("keydown",T),()=>{document.removeEventListener("keyup",N),document.removeEventListener("keydown",T)})),[M,I,a]);const[B,H]=g([]);c((()=>{(async function(e){const t=await gt(e);return pt=t.collections,t.collections})(n).then((e=>{H(e.get(x.id).map((e=>e.slice(10))))})).catch((e=>{console.error(e),w(e)}))}),[n,x.id]);const R=async e=>{var t,o,r;try{const a=await st(n,null!=(t=x.path)?t:x.id,e),s=null==M?void 0:M.get(new h.Path(["generator","seed"]));return void 0!==(null==(o=null==a?void 0:a.generator)?void 0:o.seed)&&void 0!==s&&(a.generator.seed=s,void 0!==(null==(r=a.generator.biome_source)?void 0:r.seed)&&(a.generator.biome_source.seed=s)),a}catch(a){w(a instanceof Error?a:Oe(a))}},[F,G]=g(window.innerWidth>820),[W,J]=g(0),[U,Y]=g(0),[q,Z]=g(0),[X,K]=Ve(),[Q,ee]=g(!1),te=$n.includes(x.id)&&!("worldgen/configured_feature"===x.id&&vt(n,"1.18"));Q&&!te&&ee(!1);let ne=1;te&&(ne+=1),F&&(ne+=2);return d(_,null,d("main",{class:Q?"has-preview":""},d(me,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d("div",{class:`project-controls ${a&&"has-file"}`},d("div",{class:"btn-row"},d(Re,{icon:"repo",label:r.name,relative:!1},d(pe,{icon:"arrow_left",label:t("project.go_to"),onClick:()=>p("/project")}),a&&d(pe,{icon:"file",label:t("project.new_file"),onClick:f}),d(Ze,{searchPlaceholder:t("Drafts"===r.name?"project.search_drafts":"project.search"),noResults:t("project.no_files"),values:r.files.filter((e=>e.type===x.id)).map((e=>e.id)),onSelect:e=>u(x.id,e)})),d(Ue,{class:"btn btn-input",placeholder:t("project.unsaved_file"),value:$,onChange:O,onEnter:V,onBlur:V}),a&&d(pe,{icon:"trashcan",tooltip:t("project.delete_file"),onClick:()=>{a&&s(x.id,a.id,{})}})),j?d("div",{class:"status-icon"},Fe.dot_fill):S?d("div",{class:"status-icon active"},Fe.check):P&&d("div",{class:"status-icon danger"},Fe.x)),d("div",{class:"generator-controls"},d(pe,{icon:"upload",label:t("import"),onClick:()=>{he.generatorEvent("import"),G(!0),Z(q+1)}}),d(Re,{icon:"archive",label:t("presets"),relative:!1},d(Ze,{searchPlaceholder:t("search"),noResults:t("no_presets"),values:B,onSelect:e=>{he.generatorEvent("load-preset",e),Ae({version:n,preset:e})}})),d(Re,{icon:"tag",label:n,tooltip:t("switch_version"),"data-cy":"version-switcher"},k.reverse().map((e=>d(pe,{label:e,active:e===n,onClick:()=>o(e)})))),d(Re,{icon:"kebab_horizontal",tooltip:t("more")},d(pe,{icon:"history",label:t("reset"),onClick:()=>{he.generatorEvent("reset"),null==M||M.reset(h.DataModel.wrapLists(M.schema.default()),!0)}}),d(pe,{icon:"arrow_left",label:t("undo"),onClick:e=>{e.stopPropagation(),he.generatorEvent("undo","Menu"),null==M||M.undo()}}),d(pe,{icon:"arrow_right",label:t("redo"),onClick:e=>{e.stopPropagation(),he.generatorEvent("redo","Menu"),null==M||M.redo()}})))),v&&d(Ge,{error:v,onDismiss:()=>w(null)}),d(uo,l(i({},{model:M,version:n,blockStates:I}),{onError:w}))),d("div",{class:"popup-actions",style:`--offset: -${8+50*ne}px;`},d("div",{class:`popup-action action-preview${te?" shown":""} tooltipped tip-nw`,"aria-label":t(Q?"hide_preview":"show_preview"),onClick:()=>{he.generatorEvent("toggle-preview",Q?"hidden":"visible"),ee(!Q),!Q&&F&&G(!1)}},Q?Fe.x_circle:Fe.play),d("div",{class:`popup-action action-download${F?" shown":""} tooltipped tip-nw`,"aria-label":t("download"),onClick:()=>{he.generatorEvent("download"),Y(U+1)}},Fe.download),d("div",{class:`popup-action action-copy${F?" shown":""}${X?" active":""} tooltipped tip-nw`,"aria-label":t(X?"copied":"copy"),onClick:()=>{he.generatorEvent("copy"),J(W+1)}},X?Fe.check:Fe.clippy),d("div",{class:"popup-action action-code shown tooltipped tip-nw","aria-label":t(F?"hide_output":"show_output"),onClick:()=>{he.generatorEvent("toggle-output",F?"hidden":"visible"),G(!F),J(0),Y(0),Z(0)}},F?Fe.chevron_right:Fe.code)),d("div",{class:"popup-preview"+(Q?" shown":"")},d(On,l(i({},{model:M,version:n,id:x.id}),{shown:Q,onError:w}))),d("div",{class:"popup-source"+(F?" shown":"")},d(Vn,l(i({},{model:M,blockStates:I,doCopy:W,doDownload:U,doImport:q}),{name:null!=(e=x.schema)?e:"data",copySuccess:K,onError:w}))))}function Oo({}){const{locale:e}=zt();return Tt(e("title.home")),d("main",null,d("div",{class:"home"},d(vo,{title:"Data packs"},fe.generators.filter((e=>!e.category)).map((t=>d(vo,{title:e(t.id),link:xe(t.url)}))),d(vo,{title:e("worldgen"),link:"/worldgen/"})),d(vo,{title:"Resource packs"},fe.generators.filter((e=>"assets"===e.category)).map((t=>d(vo,{title:e(t.id),link:xe(t.url)})))),d(vo,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/",desc:"Analyse your performance reports"}),d(vo,{title:"Minecraft Sounds",icon:"sounds",link:"/sounds/",desc:"Browse through and mix all the vanilla sounds"}),d(vo,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/",desc:"Convert your data packs from 1.16 to 1.17 to 1.18"}),d(vo,{title:"Technical Changelog",link:"/changelog/"}),d(vo,{title:"Minecraft Versions",link:"/versions/"}),d(ho,null)))}function So({}){const{locale:e}=zt(),{project:t,openFile:n}=Ot();Tt(e("title.project",t.name));const o=w((()=>t.files.map(Lt)),t.files);return d("main",null,d(me,{id:"data-pack-project",type:"text"}),d("div",{class:"project"},d("h2",null,t.name),d("div",{class:"file-view"},d(wo,{entries:o,onSelect:e=>{const[,t,o,...r]=e.split("/");n(o,`${t}:${r}`)}}))))}function Lo({}){const{locale:e}=zt(),{version:t,changeVersion:n}=Rt(),[o,r]=g(null);Tt(e("title.sounds"));const[a,s]=g({}),u=Object.keys(null!=a?a:{});c((()=>{(async function(e){const t=fe.versions.find((t=>t.id===e));await ot(t);try{const e=`${nt(t,"summary")}/sounds/data.min.json`;return await it(e)}catch(n){throw new Error(`Error occurred while fetching sounds for ${t}: ${Oe(n)}`)}})(t).then(s).catch((e=>{console.error(e),r(e)}))}),[t]);const[h,m]=g(""),[p,v]=g([]),w=()=>{v([{id:we(),sound:h,delay:0,pitch:1,volume:1},...p])},y=e=>()=>{v(p.filter((t=>t.id!==e)))},[b,x]=g(0),k=f(null);return d("main",null,o&&d(Ge,{error:o,onDismiss:()=>r(null)}),u.length>0&&d(_,null,d("div",{class:"controls sounds-controls"},d("div",{class:"sound-search-group"},d(Ue,{class:"btn btn-input sound-search",list:"sound-list",placeholder:e("sounds.search"),value:h,onChange:m,onEnter:w}),d(pe,{icon:"plus",tooltip:e("sounds.add_sound"),class:"add-sound",onClick:w})),p.length>1&&d(pe,{icon:"play",label:e("sounds.play_all"),class:"play-all-sounds",onClick:()=>{x(b+1)}}),d("div",{class:"spacer"}),d(pe,{icon:"download",label:e("download"),tooltip:e("sounds.download_function"),class:"download-sounds",onClick:()=>{const e=p.some((e=>e.delay>0)),t=p.sort(((e,t)=>e.delay-t.delay)).map((t=>`${e?`execute if score @s delay matches ${t.delay} run `:""}playsound minecraft:${t.sound} master @s ~ ~ ~ ${t.volume} ${t.pitch}`)).join("\n");k.current.setAttribute("href","data:text/plain;charset=utf-8,"+t+"%0A"),k.current.setAttribute("download","sounds.mcfunction"),k.current.click()}}),d(Re,{icon:"tag",label:t},fe.versions.reverse().map((e=>d(pe,{label:e.id,active:e.id===t,onClick:()=>n(e.id)}))))),d("div",{class:"sounds"},p.map((e=>{return d(go,l(i(i({key:e.id},e),{sounds:a,delayedPlay:b}),{onEdit:(t=e.id,e=>{v(p.map((n=>n.id===t?i(i({},n),e):n)))}),onDelete:y(e.id)}));var t}))),d("a",{ref:k,style:"display: none;"})),d("datalist",{id:"sound-list"},u.map((e=>d("option",{key:e,value:e})))))}function Po({}){const{locale:e}=zt(),[t,n]=g(null);Tt(e("title.versions"));const[o,r]=g([]);c((()=>{(async function(){const e=fe.versions[fe.versions.length-1];await ot(e);try{return it(`${nt(e,"summary")}/versions/data.min.json`)}catch(t){throw new Error(`Error occured while fetching versions: ${Oe(t)}`)}})().then((e=>r(e))).catch((e=>{console.error(e),n(e)}))}),[]);const a=Me(m()).get("id"),s=o.find((e=>e.id===a));Tt(s?s.name:"Versions Explorer",s?[]:void 0);const l=s&&Do(o,s,-1),u=s&&Do(o,s,1);return d("main",null,d(me,{type:"text",id:"versions"}),t&&d(Ge,{error:t,onDismiss:()=>n(null)}),d("div",{class:"versions"},s?d(_,null,d("div",{class:"version-navigation"},d("a",{class:"btn btn-link",href:"/versions/"},Fe.three_bars,e("versions.all")),d("a",i({class:"btn btn-link"},u?{href:`/versions/?id=${u.id}`}:{disabled:!0}),Fe.arrow_left,e("versions.previous")),d("a",i({class:"btn btn-link"},l?{href:`/versions/?id=${l.id}`}:{disabled:!0}),e("versions.next"),Fe.arrow_right)),d(Co,{version:s})):d(Io,{versions:o,link:e=>`/versions/?id=${e}`})))}function Do(e,t,n){const o=e.findIndex((e=>e.id===t.id))+n;if(!(o<0||o>=e.length))return e[o]}function Vo(){return d(_,null,d(po,null),d(de,{onChange:e=>{setTimeout((()=>he.pageview(xe(e.url))))}},d(Oo,{path:"/"}),d(jo,{path:"/worldgen",category:"worldgen"}),d(jo,{path:"/assets",category:"assets"}),d(Lo,{path:"/sounds"}),d(Eo,{path:"/changelog"}),d(Po,{path:"/versions"}),d(So,{path:"/project"}),d($o,{default:!0})))}function No(){return d(jt,null,d(Vt,null,d(Ft,null,d(Bt,null,d(St,null,d(Vo,null))))))}ue(d(No,null),document.body); -//# sourceMappingURL=index.1a21c031.js.map +var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,s=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,i=(e,t)=>{for(var n in t||(t={}))r.call(t,n)&&s(e,n,t[n]);if(o)for(var n of o(t))a.call(t,n)&&s(e,n,t[n]);return e},l=(e,o)=>t(e,n(o));import{y as c,a as d,r as u,l as h,g as m,b as p,s as f,c as g,d as v,e as w,f as _,j as y,h as b,i as x,k,m as C,n as M,q as A,A as I,F as z,o as j,p as E,t as $,C as O,u as S,I as L,v as P,w as D,x as V,z as N,_ as T,X as B,B as H,D as R,E as F,G,H as W,J,K as U,L as Y,M as q,N as Z,O as X,P as K,Q,Z as ee,R as te,S as ne,T as oe,U as re,V as ae,W as se,Y as ie,$ as le,a0 as ce,a1 as de,a2 as ue}from"./vendor.fcb8aee9.js";var he;function me({type:e,id:t}){return c((()=>{var e;null==(e=document.getElementById("ad-placeholder"))||e.remove(),"ethicalads"in window&ðicalads.load()}),[]),d("div",{"data-ea-publisher":"misode-github-io","data-ea-type":e,class:"ad dark flat",id:t})}function pe({icon:e,label:t,active:n,class:o,tooltip:r,tooltipLoc:a,onClick:s}){return d("div",{class:`btn${n?" active":""}${o?` ${o}`:""}${r?` tooltipped tip-${null!=a?a:"sw"}`:""}`,onClick:s,"aria-label":r},e&&Fe[e],t&&d("span",null,t))}!function(e){const t="Site",n="Generator";function o(e,t,n){ga("send","event",e,t,n)}function r(e,t){ga("set",`dimension${e}`,t)}e.pageview=function(e){ga("set","page",e),ga("send","pageview")},e.setLanguage=function(e){r(4,e),o(t,"set-language",e)},e.setTheme=function(e){r(1,e),o(t,"set-theme",e)},e.setVersion=function(e){r(3,e),o(n,"set-version",e)},e.setPreview=function(e){r(5,e),o(n,"set-preview",e)},e.setGenerator=function(e){r(6,e)},e.setPrefersColorScheme=function(e){r(7,e)},e.generatorEvent=function(e,t){o(n,e,t)}}(he||(he={}));var fe=JSON.parse('{"languages":[{"code":"de","name":"Deutsch"},{"code":"en","name":"English"},{"code":"es","name":"Español"},{"code":"fr","name":"Français"},{"code":"it","name":"Italiano"},{"code":"ja","name":"日本語"},{"code":"pl","name":"Polski"},{"code":"pt","name":"Português"},{"code":"ru","name":"Русский"},{"code":"sk","name":"Slovenčina","schemas":false},{"code":"zh-cn","name":"简体中文"},{"code":"zh-tw","name":"正體中文"}],"versions":[{"id":"1.15","ref":"1.15.2"},{"id":"1.16","ref":"1.16.5"},{"id":"1.17","ref":"1.17.1"},{"id":"1.18","ref":"1.18.1"},{"id":"1.18.2","ref":"1.18.1"},{"id":"1.19","dynamic":true}],"generators":[{"id":"loot_table","url":"loot-table","path":"loot_tables","schema":"loot_table"},{"id":"predicate","url":"predicate","path":"predicates","schema":"predicate"},{"id":"item_modifier","url":"item-modifier","path":"item_modifiers","schema":"item_modifier","minVersion":"1.17"},{"id":"advancement","url":"advancement","path":"advancements","schema":"advancement"},{"id":"recipe","url":"recipe","path":"recipes","schema":"recipe"},{"id":"dimension","url":"dimension","schema":"dimension","category":"worldgen","minVersion":"1.16"},{"id":"dimension_type","url":"dimension-type","schema":"dimension_type","category":"worldgen","minVersion":"1.16"},{"id":"world","url":"world","schema":"world_settings","category":"worldgen","minVersion":"1.16"},{"id":"worldgen/biome","url":"worldgen/biome","category":"worldgen","schema":"biome","minVersion":"1.16"},{"id":"worldgen/configured_carver","url":"worldgen/carver","category":"worldgen","schema":"configured_carver","minVersion":"1.16"},{"id":"worldgen/configured_feature","url":"worldgen/feature","category":"worldgen","schema":"configured_feature","minVersion":"1.16"},{"id":"worldgen/density_function","url":"worldgen/density-function","category":"worldgen","schema":"density_function","minVersion":"1.18.2"},{"id":"worldgen/placed_feature","url":"worldgen/placed-feature","category":"worldgen","schema":"placed_feature","minVersion":"1.18"},{"id":"worldgen/noise","url":"worldgen/noise","category":"worldgen","schema":"noise_parameters","minVersion":"1.18"},{"id":"worldgen/noise_settings","url":"worldgen/noise-settings","category":"worldgen","schema":"noise_settings","minVersion":"1.16"},{"id":"worldgen/configured_structure_feature","url":"worldgen/structure-feature","category":"worldgen","schema":"configured_structure_feature","minVersion":"1.16","maxVersion":"1.18.2"},{"id":"worldgen/structure","url":"worldgen/structure","category":"worldgen","schema":"structure","minVersion":"1.19"},{"id":"worldgen/structure_set","url":"worldgen/structure-set","category":"worldgen","schema":"structure_set","minVersion":"1.18.2"},{"id":"worldgen/configured_surface_builder","url":"worldgen/surface-builder","category":"worldgen","schema":"configured_surface_builder","minVersion":"1.16","maxVersion":"1.17"},{"id":"worldgen/processor_list","url":"worldgen/processor-list","category":"worldgen","schema":"processor_list","minVersion":"1.16"},{"id":"worldgen/template_pool","url":"worldgen/template-pool","category":"worldgen","schema":"template_pool","minVersion":"1.16"},{"id":"worldgen/world_preset","url":"worldgen/world-preset","category":"worldgen","schema":"world_preset","minVersion":"1.19"},{"id":"worldgen/flat_level_generator_preset","url":"worldgen/flat-world-preset","category":"worldgen","schema":"flat_level_generator_preset","minVersion":"1.19"},{"id":"block_definition","url":"assets/blockstate","path":"blockstates","category":"assets","schema":"block_definition"},{"id":"model","url":"assets/model","path":"models","category":"assets","schema":"model"}]}');function ge(e){return"object"==typeof e&&null!==e}const ve=e=>("0"+e.toString(16)).substr(-2);function we(e=12){var t=new Uint8Array(e/2);return window.crypto.getRandomValues(t),Array.from(t,ve).join("")}function _e(){return BigInt(Math.floor(Math.random()*Number.MAX_SAFE_INTEGER))}function ye(e){const t=Math.floor(4294967296*Math.random())-2147483648,n=e.get(new h.Path(["dimensions"]));e.set(new h.Path(["seed"]),t,!0),"object"==typeof n&&null!==n&&Object.keys(n).forEach((n=>{e.set(new h.Path(["dimensions",n,"generator","seed"]),t,!0),e.set(new h.Path(["dimensions",n,"generator","biome_source","seed"]),t,!0)})),e.set(new h.Path(["generator","seed"]),t,!0),e.set(new h.Path(["generator","biome_source","seed"]),t)}function be(e){let t=0;for(let n=0;n=0&&(e=e.slice(0,t)),xe(e)}function Ce(e){const t=ke(e).replace(/^\//,"").replace(/\/$/,"");return fe.generators.find((e=>e.url===t))}function Me(e){const t=e.indexOf("?");return t>=0?(e=e.slice(t+1),new Map(e.split("&").map((e=>{const t=e.indexOf("=");return-1===t?[e,"true"]:[decodeURIComponent(e.slice(0,t)),decodeURIComponent(e.slice(t+1))]})))):new Map}function Ae(e,t){const n=m(),o=Me(n);Object.entries(e).forEach((([e,t])=>{void 0===t?o.delete(e):o.set(e,t)}));const r=Array.from(o).map((([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`));p(`${t?xe(t):ke(n)}${0===r.length?"":`?${r.join("&")}`}`,!0)}function Ie(e){const t=Math.abs(be(e));return[t%256,(t>>8)%256,(t>>16)%256]}function ze(e){return e*e}function je(e,t,n){return Math.max(e,Math.min(t,n))}function Ee(e,t,n){return n<0?e:n>1?t:$e(n,e,t)}function $e(e,t,n){return t+e*(n-t)}function Oe(e){return e instanceof Error?e.message:`${e}`}const Se=u();function Le(e,t){if(e===t)return!0;if(e&&t&&"object"==typeof e&&"object"==typeof t){if(e.constructor!==t.constructor)return!1;let n,o;if(Array.isArray(e)){if(n=e.length,n!=t.length)return!1;for(o=0;o{}:e=>{const t=e.target.value;null==l||l(t)},h=f(null);c((()=>{r&&h.current&&h.current.select()}),[r]);const m=i&&we();return d("div",{class:`btn btn-input ${n?"large-input":""} ${o?"larger-input":""}`,onClick:e=>e.stopPropagation()},e&&Fe[e],t&&d("span",null,t),d("input",{ref:h,type:"text",value:a,onChange:u,placeholder:s,list:m}),i&&d("datalist",{id:m},i.map((e=>d("option",{value:e})))))}function Ve({cooldown:e,invert:t,initial:n}={}){const[o,r]=g(n),a=f(void 0);return[o,()=>{r(!t),void 0!==a.current&&clearTimeout(a.current),a.current=setTimeout((()=>{r(!!t)}),null!=e?e:2e3)}]}function Ne({size:e,draw:t,onDrag:n,onHover:o,onLeave:r},a){const s=f(null),i=f(),l=f(),d=f([0,0]),u=f(!1);c((()=>{const e=e=>{i.current=[e.offsetX,e.offsetY]},t=e=>{if(void 0===i.current){const t=e.offsetX/s.current.clientWidth,n=e.offsetY/s.current.clientHeight;return void(null==o||o(t,n))}if(!n)return;const t=e.offsetX-i.current[0],r=e.offsetY-i.current[1];0===t&&0===r||(d.current=[d.current[0]+t,d.current[1]+r],u.current||(cancelAnimationFrame(l.current),l.current=requestAnimationFrame((async()=>{u.current=!0;const e=d.current[0]/s.current.clientWidth,t=d.current[1]/s.current.clientHeight;d.current=[0,0],await(null==n?void 0:n(e,t)),u.current=!1})))),i.current=[e.offsetX,e.offsetY]},a=()=>{i.current=void 0},c=()=>{null==r||r()};return s.current.addEventListener("mousedown",e),s.current.addEventListener("mousemove",t),s.current.addEventListener("mouseleave",c),document.body.addEventListener("mouseup",a),()=>{var n,o,r;null==(n=s.current)||n.removeEventListener("mousedown",e),null==(o=s.current)||o.removeEventListener("mousemove",t),null==(r=s.current)||r.removeEventListener("mouseleave",c),document.body.removeEventListener("mouseup",a)}}),[...null!=a?a:[],s.current]);const h=f(),m=f(0);return h.current=async()=>{const n=s.current.getContext("2d"),o=e();s.current.width=o[0],s.current.height=o[1];const r=n.getImageData(0,0,o[0],o[1]),a=m.current+=1;try{await t(r)}catch(i){throw i}a===m.current&&n.putImageData(r,0,0)},{canvas:s,redraw:h.current}}function Te(){const[e,t]=g(!1),n=()=>{t(!1)};return c((()=>(e&&(document.body.addEventListener("click",n),document.body.addEventListener("contextmenu",n)),()=>{document.body.removeEventListener("click",n),document.body.removeEventListener("contextmenu",n)})),[e]),[e,()=>t(!0)]}function Be(e){const[t,n]=g(matchMedia(e).matches),o=e=>{n(e.matches)};return c((()=>{const t=matchMedia(e);return t.addEventListener("change",o),()=>{t.removeEventListener("change",o)}}),[e]),t}function He(e,t){const n={invalidated(){e&&t(e)}};c((()=>(null==e||e.addListener(n),()=>{null==e||e.removeListener(n)})),[e])}function Re(e){const{icon:t,label:n,relative:o,tooltip:r,tooltipLoc:a,children:s}=e,[c,u]=Te();return d("div",i({class:"btn-menu"+(!1===o?" no-relative":"")},e),d(pe,l(i({},{icon:t,label:n,tooltip:r,tooltipLoc:a}),{onClick:u})),c&&d("div",{class:"btn-group"},s))}const Fe={alert:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"})),archive:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z"})),arrow_left:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"})),arrow_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"})),check:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"})),chevron_down:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z"})),chevron_right:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z"})),chevron_up:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z"})),clippy:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z"})),code:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"})),dash:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z"})),device_desktop:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"})),dot_fill:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 4a4 4 0 100 8 4 4 0 000-8z"})),download:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),duplicate:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M10.5 3a.75.75 0 01.75.75v1h1a.75.75 0 010 1.5h-1v1a.75.75 0 01-1.5 0v-1h-1a.75.75 0 010-1.5h1v-1A.75.75 0 0110.5 3z"}),d("path",{"fill-rule":"evenodd",d:"M6.75 0A1.75 1.75 0 005 1.75v7.5c0 .966.784 1.75 1.75 1.75h7.5A1.75 1.75 0 0016 9.25v-7.5A1.75 1.75 0 0014.25 0h-7.5zM6.5 1.75a.25.25 0 01.25-.25h7.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5z"}),d("path",{d:"M1.75 5A1.75 1.75 0 000 6.75v7.5C0 15.216.784 16 1.75 16h7.5A1.75 1.75 0 0011 14.25v-1.5a.75.75 0 00-1.5 0v1.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25h1.5a.75.75 0 000-1.5h-1.5z"})),eye:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"})),eye_closed:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z"})),file:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z"})),file_directory:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z"})),gear:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"})),globe:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z"})),history:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"})),info:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"})),issue_opened:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"})),kebab_horizontal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"})),link:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z"})),link_external:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z"})),mark_github:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"})),moon:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"})),play:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"})),plus:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z"})),plus_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z"})),repo:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"})),search:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"})),sort_asc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75zm12.927-9.677a.25.25 0 00-.354 0l-3 3A.25.25 0 009.75 6H12v6.75a.75.75 0 001.5 0V6h2.25a.25.25 0 00.177-.427l-3-3z"})),sort_desc:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 4.25a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75z"}),d("path",{d:"M13.5 10h2.25a.25.25 0 01.177.427l-3 3a.25.25 0 01-.354 0l-3-3A.25.25 0 019.75 10H12V3.75a.75.75 0 011.5 0V10z"})),square:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M4 5.75C4 4.784 4.784 4 5.75 4h4.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0110.25 12h-4.5A1.75 1.75 0 014 10.25v-4.5zm1.75-.25a.25.25 0 00-.25.25v4.5c0 .138.112.25.25.25h4.5a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-4.5z"})),square_fill:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M5.75 4A1.75 1.75 0 004 5.75v4.5c0 .966.784 1.75 1.75 1.75h4.5A1.75 1.75 0 0012 10.25v-4.5A1.75 1.75 0 0010.25 4h-4.5z"})),stack:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M7.122.392a1.75 1.75 0 011.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 01-1.756 0L2.119 5.456a1.25 1.25 0 010-2.162L7.122.392zM8.125 1.69a.25.25 0 00-.25 0l-4.63 2.685 4.63 2.685a.25.25 0 00.25 0l4.63-2.685-4.63-2.685zM1.601 7.789a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0L1.874 8.814A.75.75 0 011.6 7.789zm0 3.5a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0l-5.248-3.044a.75.75 0 01-.273-1.025z"})),sun:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"})),sync:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"})),tag:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z"})),terminal:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z"})),three_bars:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"})),trashcan:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"})),unfold:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{d:"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z"})),upload:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z"})),x:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"})),x_circle:d("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",width:"16",height:"16"},d("path",{"fill-rule":"evenodd",d:"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"}))};function Ge({error:e,onDismiss:t}){const[n,o]=g(!1),[r,a]=g(void 0);c((()=>{if(e instanceof Error){const t=e.stack.split("\n").map((e=>e.replace(/^(\s+)at (?:async )?(https?:.*)/,"$1at ($2)")));a(t.join("\n")),v.exports.mapStackTrace(t.join("\n"),(e=>{const t=e.map((e=>e.replace(/..\/..\/src\//,"src/"))).join("\n");a(t)}))}}),[e]);const s=w((()=>{let t="https://github.com/misode/misode.github.io/issues/new";return e instanceof Error?(t+=`?title=${encodeURIComponent(`${e.name}: ${e.message}`)}`,r&&(t+=`&body=${encodeURIComponent(`\`\`\`\n${e.name}: ${e.message}\n${r}\n\`\`\`\n`)}`)):t+=`?title=${encodeURIComponent(e.toString())}`,t}),[e,r]);return d("div",{class:"error"},t&&d("div",{class:"error-dismiss",onClick:t},Fe.x),d("h3",null,e instanceof Error?e.message:e,r&&d("span",{onClick:()=>o(!n)},Fe.info)),r&&n&&d("pre",null,r),d("p",null,"If you think this is a bug, you can report it ",d("a",{href:s,target:"_blank"},"on GitHub")))}function We({label:e,value:t,onChange:n}){const o=we();return d("label",{class:"checkbox"},d("input",{id:o,type:"checkbox",checked:t,onClick:()=>n(!t)}),e)}function Je(e,t,n){const o=e=>{const o=e.onChange&&(t=>{var o;const r=t.target.value;null==(o=e.onChange)||o.call(e,n(r))}),r=e.onEnter&&(t=>{var o;if("Enter"===t.key){const r=t.target.value;null==(o=e.onEnter)||o.call(e,n(r))}});return d("input",i(i({},e),{type:t,onChange:o,onKeyDown:r}))};return o.displayName=e,o}const Ue=Je("TextInput","text",(e=>e)),Ye=Je("NumberInput","number",(e=>Number(e))),qe=Je("RangeInput","range",(e=>Number(e)));function Ze({values:e,onSelect:t,searchPlaceholder:n,noResults:o}){const[r,a]=g(""),s=w((()=>{var t;const n=r.trim().split(" ");return null!=(t=null==e?void 0:e.filter((e=>n.every((t=>e.includes(t))))))?t:[]}),[e,r]);return d(_,null,d(De,{icon:"search",large:!0,value:r,onChange:a,doSelect:1,placeholder:null!=n?n:"Search"}),d("div",{class:"result-list"},s.map((e=>d(pe,{key:e,label:e,onClick:()=>null==t?void 0:t(e)}))),0===s.length&&d(pe,{label:null!=o?o:"No results"})))}const Xe="https://raw.githubusercontent.com/misode/technical-changes/main";let Ke=null;async function Qe(){if(!Ke){const e=await(await fetch(`${Xe}/index.json`)).json();Ke=(await Promise.all(e.map(((e,t)=>async function(e,t){const n=await(await fetch(`${Xe}/${e.id}/index.json`)).json();return(await Promise.all(n.map(((n,o)=>async function(e,t,n,o){return function(e){return e.split("\n\n").map((e=>{const t=e.indexOf("|");return{tags:e.substring(0,t).trim().split(" "),content:e.slice(t+1).trim().replaceAll("->","→").replaceAll("\n...\n","\n\n")}}))}(await(await fetch(`${Xe}/${e.id}/${t.id}.md`)).text()).map((r=>i({version:t,group:e,order:1e3*n+o},r)))}(e,et(n),t,o))))).flat()}(et(e),t))))).flat().map((e=>l(i({},e),{tags:[e.group.id,...e.tags]})))}return Ke}function et(e){return"string"==typeof e?{id:e,article:e.match(/\d\dw\d\d[a-z]/)?"minecraft-snapshot-"+e:e.match(/\d+\.\d+(\.\d+)?-pre[0-9]+/)?"minecraft-"+e.replaceAll(".","-").replaceAll("pre","pre-release-"):null}:ge(e)?e:{id:"unknown",article:null}}["1.15","1.16","1.17"].forEach((e=>localStorage.removeItem(`cache_${e}`))),["mcdata_master","vanilla_datapack_summary"].forEach((e=>localStorage.removeItem(`cached_${e}`))),caches.delete("misode-v1");const tt="https://raw.githubusercontent.com/misode/mcmeta";function nt(e,t){return`${tt}/${e.dynamic?t:`${e.ref}-${t}`}`}async function ot(e){e.dynamic&&("22w11a"!==localStorage.getItem("cached_latest_version")&&(await async function(e){try{const t=await caches.open("misode-v2");console.debug("[deleteMatching] Opened cache misode-v2");const n=[];for(const o of await t.keys())e(o.url)&&n.push(t.delete(o));console.debug(`[deleteMatching] Removing ${n.length} cache objects...`),await Promise.all(n)}catch(t){console.warn(`[deleteMatching] Failed to open cache misode-v2: ${Oe(t)}`)}}((e=>e.startsWith(`${tt}/summary/`)||e.startsWith(`${tt}/data/`))),localStorage.setItem("cached_latest_version","22w11a")),e.ref="22w11a")}async function rt(e,t){console.debug(`[fetchRegistries] ${e.id}`);try{const n=await it(`${nt(e,"summary")}/registries/data.min.json`);for(const e in n)t.register(e,n[e].map((e=>"minecraft:"+e)))}catch(n){console.warn("Error occurred while fetching registries:",Oe(n))}}async function at(e,t){console.debug(`[fetchBlockStateMap] ${e.id}`);try{const n=await it(`${nt(e,"summary")}/blocks/data.min.json`);for(const e in n)t["minecraft:"+e]={properties:n[e][0],default:n[e][1]}}catch(n){console.warn("Error occurred while fetching block state map:",Oe(n))}}async function st(e,t,n){console.debug(`[fetchPreset] ${e} ${t} ${n}`);const o=fe.versions.find((t=>t.id===e));try{const e=["blockstates","models"].includes(t)?"assets":"data",r=`${nt(o,e)}/${e}/minecraft/${t}/${n}.json`;return(await fetch(r)).json()}catch(r){throw new Error(`Error occurred while fetching ${t} preset ${n}: ${Oe(r)}`)}}async function it(e,t=(e=>e)){try{const n=await caches.open("misode-v2");console.debug(`[getData] Opened cache misode-v2 ${e}`);const o=await n.match(e);if(o&&o.ok)return console.debug(`[getData] Retrieving cached data ${e}`),await o.json();console.debug(`[getData] fetching data ${e}`);const r=await fetch(e),a=t(await r.json());return await n.put(e,new Response(JSON.stringify(a))),a}catch(n){console.warn(`[getData] Failed to open cache misode-v2: ${Oe(n)}`),console.debug(`[getData] fetching data ${e}`);const o=await fetch(e);return t(await o.json())}}const lt=["1.15","1.16","1.17","1.18","1.18.2","1.19"],ct={},dt={},ut={1.15:y,1.16:b,1.17:x,1.18:k,"1.18.2":C,1.19:M};let ht,mt,pt,ft;async function gt(e){return ct[e]||(ct[e]=(async()=>{try{const t=ut[e].getCollections(),n={};await async function(e,t,n){const o=fe.versions.find((t=>t.id===e));o?(await ot(o),await Promise.all([rt(o,t),at(o,n)])):console.error(`[fetchData] Unknown version ${o} in ${JSON.stringify(fe.versions)}`)}(e,t,n);const o=ut[e].getSchemas(t);return ct[e]={collections:t,schemas:o,blockStates:n},ct[e]}catch(t){throw new Error(`Cannot get version "${e}": ${Oe(t)}`)}})()),ct[e]}function vt(e,t,n){const o=fe.versions.findIndex((t=>t.id===e)),r=t?fe.versions.findIndex((e=>e.id===t)):0,a=n?fe.versions.findIndex((e=>e.id===n)):fe.versions.length-1;return r<=o&&o<=a}const wt={},_t=function(e,t){if(!t)return e();if(void 0===ft){const e=document.createElement("link").relList;ft=e&&e.supports&&e.supports("modulepreload")?"modulepreload":"preload"}return Promise.all(t.map((e=>{if(e in wt)return;wt[e]=!0;const t=e.endsWith(".css"),n=t?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${e}"]${n}`))return;const o=document.createElement("link");return o.rel=t?"stylesheet":ft,t||(o.as="script",o.crossOrigin=""),o.href=e,document.head.appendChild(o),t?new Promise(((e,t)=>{o.addEventListener("load",e),o.addEventListener("error",t)})):void 0}))).then((()=>e()))};var yt,bt,xt=JSON.parse('{"add":"Add","add_bottom":"Add to bottom","add_top":"Add to top","advancement":"Advancement","assets":"Assets","block_definition":"Blockstate","changelog.search":"Search changes","changelog.no_results":"No changes","collapse":"Collapse","collapse_all":"Hold %0% to collapse all","configure_layers":"Configure layers","copy":"Copy","copied":"Copied!","copy_context":"Copy context","dimension_type":"Dimension Type","dimension":"Dimension","disabled":"Disabled","download":"Download","duplicate":"Duplicate","enabled":"Enabled","entries_hidden":"%0% entries hidden","entries_hidden.more":"Show %0% more","entries_hidden.all":"Show all","expand":"Expand","expand_all":"Hold %0% to expand all","feature.decorated.decorators":"Decorators","feature.decorated.decorators.entry":"Decorator","follow_reference":"Follow reference","format.json":"JSON","format.yaml":"YAML","fields":"Fields","generate_new_seed":"Generate new seed","github":"GitHub","hide_output":"Hide output","hide_preview":"Hide preview","home":"Home","import":"Import","indentation.2_spaces":"2 spaces","indentation.4_spaces":"4 spaces","indentation.minified":"Minified","indentation.tabs":"Tabs","item_modifier":"Item Modifier","language":"Language","layer.biomes":"Biomes","layer.temperature":"Temperature","layer.humidity":"Humidity","layer.continentalness":"Continentalness","layer.erosion":"Erosion","layer.weirdness":"Weirdness","layer.offset":"Offset","layer.factor":"Factor","layer.jaggedness":"Jaggedness","highlighting":"Highlighting","loading":"Loading...","loot_table":"Loot Table","model":"Model","more":"More","move_down":"Move down","move_up":"Move up","not_found.description":"The page you were looking for does not exist.","no_presets":"No presets","output_settings":"Output settings","predicate":"Predicate","recipe":"Recipe","redo":"Redo","reset":"Reset","settings":"Settings","settings.fields.description":"Customize advanced field settings","settings.fields.path":"Context","settings.fields.name":"Name","share":"Share","theme":"Theme","theme.dark":"Dark","theme.light":"Light","theme.system":"System","title.changelog":"Technical Changelog","title.generator":"%0% Generator","title.generator_category":"%0% Generators","title.home":"Data Pack Generators","title.project":"%0% Project","title.sounds":"Sound Explorer","title.versions":"Versions Explorer","presets":"Presets","preview":"Visualize","preview.auto_scroll":"Auto scroll","preview.biome":"Biome","preview.scale":"Scale","preview.depth":"Depth","preview.factor":"Factor","preview.offset":"Offset","preview.peaks":"Peaks","preview.width":"Width","project.delete_file":"Delete file","project.go_to":"Go to project","project.new_file":"New file","project.no_files":"No files","project.search":"Search project","project.search_drafts":"Search drafts","project.unsaved_file":"Unsaved file","remove":"Remove","search":"Search","show_output":"Show output","show_preview":"Show preview","sounds.play":"Play","sounds.play_sound":"Play sound","sounds.play_all":"Play all","sounds.search":"Search sounds","sounds.download_function":"Download Mcfunction","sounds.delay":"Delay","sounds.pitch":"Pitch","sounds.volume":"Volume","sounds.copy_command":"Copy command","sounds.add_sound":"Add sound","sounds.remove_sound":"Remove sound","sounds.unknown_sound":"Unknown sound","sounds.loading_sound":"Loading sound","source_placeholder":"Paste raw %0% content here","switch_generator":"Switch generator","switch_version":"Switch version","terrain_settings":"Terrain settings","undo":"Undo","versions.search":"Search versions","versions.no_results":"No results","versions.all":"All versions","versions.previous":"Previous","versions.next":"Next","versions.released":"Released","versions.release_target":"Release target","versions.data_version":"Data version","versions.protocol_version":"Protocol version","versions.pack_format":"Pack format","versions.data_pack_format":"Data pack format","versions.resource_pack_format":"Resource pack format","versions.technical_changes":"Technical changes","versions.discussion":"Discussion","world":"World Settings","worldgen":"Worldgen","worldgen/biome":"Biome","worldgen/configured_carver":"Carver","worldgen/configured_feature":"Feature","worldgen/density_function":"Density Function","worldgen/placed_feature":"Placed Feature","worldgen/noise":"Noise","worldgen/noise_settings":"Noise Settings","worldgen/processor_list":"Processor List","worldgen/configured_structure_feature":"Structure Feature","worldgen/structure":"Structure","worldgen/structure_set":"Structure Set","worldgen/configured_surface_builder":"Surface Builder","worldgen/template_pool":"Template Pool","worldgen/world_preset":"World Preset","worldgen/flat_level_generator_preset":"Flat World Preset","zoom_in":"Zoom in","zoom_out":"Zoom out"}'),kt=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",default:xt});(bt=yt||(yt={})).ID_LANGUAGE="language",bt.ID_THEME="theme",bt.ID_VERSION="schema_version",bt.ID_INDENT="indentation",bt.ID_FORMAT="output_format",bt.ID_HIGHLIGHTING="output_highlighting",bt.ID_SOUNDS_VERSION="minecraft_sounds_version",bt.ID_PROJECTS="misode_projects",bt.getLanguage=function(){var e;return null!=(e=localStorage.getItem(bt.ID_LANGUAGE))?e:"en"},bt.getTheme=function(){var e;return null!=(e=localStorage.getItem(bt.ID_THEME))?e:"dark"},bt.getVersion=function(){const e=localStorage.getItem(bt.ID_VERSION);return e&<.includes(e)?e:"1.18.2"},bt.getIndent=function(){var e;return null!=(e=localStorage.getItem(bt.ID_INDENT))?e:"2_spaces"},bt.getFormat=function(){var e;return null!=(e=localStorage.getItem(bt.ID_FORMAT))?e:"json"},bt.getHighlighting=function(){return"false"!==localStorage.getItem(bt.ID_HIGHLIGHTING)},bt.getSoundsVersion=function(){var e;return null!=(e=localStorage.getItem(bt.ID_SOUNDS_VERSION))?e:"latest"},bt.getProjects=function(){const e=localStorage.getItem(bt.ID_PROJECTS);return e?JSON.parse(e):[Et]},bt.setLanguage=function(e){e&&localStorage.setItem(bt.ID_LANGUAGE,e)},bt.setTheme=function(e){e&&localStorage.setItem(bt.ID_THEME,e)},bt.setVersion=function(e){e&&localStorage.setItem(bt.ID_VERSION,e)},bt.setIndent=function(e){e&&localStorage.setItem(bt.ID_INDENT,e)},bt.setFormat=function(e){e&&localStorage.setItem(bt.ID_FORMAT,e)},bt.setHighlighting=function(e){void 0!==e&&localStorage.setItem(bt.ID_HIGHLIGHTING,e.toString())},bt.setSoundsVersion=function(e){e&&localStorage.setItem(bt.ID_SOUNDS_VERSION,e)},bt.setProjects=function(e){e&&localStorage.setItem(bt.ID_PROJECTS,JSON.stringify(e))};const Ct=A({lang:"none",locale:e=>e,changeLanguage:()=>{}}),Mt={fallback:xt};function At(e,t,...n){var o,r,a,s,i;return function(e,t){return e.replace(/%\d+%/g,(e=>{const n=parseInt(e.slice(1,-1));return void 0!==(null==t?void 0:t[n])?t[n]:e}))}(null!=(i=null!=(s=null!=(a=null==(o=Mt[e])?void 0:o[t])?a:null==(r=Mt.en)?void 0:r[t])?s:Mt.fallback[t])?i:t,n)}async function It(e){if(Mt[e])return;const t=fe.languages.find((t=>t.code===e));if(!t)return;const n=await function(e){switch(e){case"../../locales/de.json":return _t((()=>import("./de.a269acce.js")),void 0);case"../../locales/en.json":return _t((()=>Promise.resolve().then((function(){return kt}))),void 0);case"../../locales/es.json":return _t((()=>import("./es.833a9774.js")),void 0);case"../../locales/fr.json":return _t((()=>import("./fr.f5531eea.js")),void 0);case"../../locales/it.json":return _t((()=>import("./it.fd9a8268.js")),void 0);case"../../locales/ja.json":return _t((()=>import("./ja.a8ff49be.js")),void 0);case"../../locales/pl.json":return _t((()=>import("./pl.3a9fb38c.js")),void 0);case"../../locales/pt.json":return _t((()=>import("./pt.1a04bd2d.js")),void 0);case"../../locales/ru.json":return _t((()=>import("./ru.578070fe.js")),void 0);case"../../locales/sk.json":return _t((()=>import("./sk.96bbf351.js")),void 0);case"../../locales/zh-cn.json":return _t((()=>import("./zh-cn.e3c47b68.js")),void 0);case"../../locales/zh-tw.json":return _t((()=>import("./zh-tw.298bd51e.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../locales/${e}.json`),o=!1!==t.schemas&&await function(e){switch(e){case"../../../node_modules/@mcschema/locales/src/cs.json":return _t((()=>import("./cs.967a01eb.js")),void 0);case"../../../node_modules/@mcschema/locales/src/de.json":return _t((()=>import("./de.6c6a67f3.js")),void 0);case"../../../node_modules/@mcschema/locales/src/en.json":return _t((()=>import("./en.b4f154b3.js")),void 0);case"../../../node_modules/@mcschema/locales/src/es.json":return _t((()=>import("./es.0541717e.js")),void 0);case"../../../node_modules/@mcschema/locales/src/fr.json":return _t((()=>import("./fr.e316b1e2.js")),void 0);case"../../../node_modules/@mcschema/locales/src/it.json":return _t((()=>import("./it.7ff123cd.js")),void 0);case"../../../node_modules/@mcschema/locales/src/ja.json":return _t((()=>import("./ja.3170354d.js")),void 0);case"../../../node_modules/@mcschema/locales/src/pl.json":return _t((()=>import("./pl.ae1f6791.js")),void 0);case"../../../node_modules/@mcschema/locales/src/pt.json":return _t((()=>import("./pt.31e14993.js")),void 0);case"../../../node_modules/@mcschema/locales/src/ru.json":return _t((()=>import("./ru.1298edc9.js")),void 0);case"../../../node_modules/@mcschema/locales/src/sk.json":return _t((()=>import("./sk.d4265232.js")),void 0);case"../../../node_modules/@mcschema/locales/src/zh-cn.json":return _t((()=>import("./zh-cn.4129665a.js")),void 0);case"../../../node_modules/@mcschema/locales/src/zh-tw.json":return _t((()=>import("./zh-tw.bdc36a24.js")),void 0);default:return Promise.reject(new Error("Unknown variable dynamic import: "+e))}}(`../../../node_modules/@mcschema/locales/src/${e}.json`);Mt[e]=i(i({},n.default),o.default)}function zt(){return z(Ct)}function jt({children:e}){const[t,n]=g("none"),o=I(((e,...n)=>At(t,e,...n)),[t]),r=I((async e=>{await It(e),he.setLanguage(e),yt.setLanguage(e),n(e)}),[]);c((()=>{(async()=>{const e=yt.getLanguage();await Promise.all([It("en"),..."en"!==e?[It(e)]:[]]),n(e)})()}),[]);const a={lang:t,locale:o,changeLanguage:r};return d(Ct.Provider,{value:a},e)}const Et={name:"Drafts",namespace:"draft",files:[]},$t=A({project:Et,changeProject:()=>{},updateProject:()=>{},updateFile:()=>!1,openFile:()=>{},closeFile:()=>{}});function Ot(){return z($t)}function St({children:e}){const[t,n]=g(yt.getProjects()),[o,r]=g(Et.name),a=w((()=>{var e;return null!=(e=t.find((e=>e.name===o)))?e:Et}),[t,o]),[s,c]=g(void 0),u=w((()=>{if(s)return a.files.find((e=>e.type===s[0]&&e.id===s[1]))}),[a,s]),h=I((e=>{yt.setProjects(e),n(e)}),[]),m=I((e=>{h(t.map((t=>t.name===o?i(i({},t),e):t)))}),[t,o]),f=I(((e,t,n)=>{var o;if(n.id){const r=n.id.includes(":")?n.id:`${a.namespace}:${n.id}`,s=a.files.some((t=>t.type===e&&t.id===r));if(t){if((null==u?void 0:u.id)===t&&t!==r&&s)return!1;m({files:a.files.map((o=>o.type===e&&o.id===t?l(i(i({},o),n),{id:r}):o))}),(null==u?void 0:u.id)===t&&c([e,r])}else{if(s)return!1;m({files:[...a.files,{type:e,id:r,data:null!=(o=n.data)?o:{}}]}),c([e,r])}}else m({files:a.files.filter((n=>n.type!==e||n.id!==t))});return!0}),[m,a,u]),v=I(((e,t)=>{const n=fe.generators.find((t=>t.id===e||t.path===e));if(!n)throw new Error(`Cannot find generator of type ${e}`);c([n.id,t]),p(xe(n.url))}),[]),_=I((()=>{c(void 0)}),[]),y={project:a,file:u,changeProject:r,updateProject:m,updateFile:f,openFile:v,closeFile:_};return d($t.Provider,{value:y},e)}function Lt(e){var t;const[n,o]=e.id.includes(":")?e.id.split(":"):["minecraft",e.id],r=fe.generators.find((t=>t.id===e.type));if(!r)throw new Error(`Cannot find generator of type ${e.type}`);return`data/${n}/${null!=(t=r.path)?t:r.id}/${o}`}const Pt=A({theme:"dark",actualTheme:"dark",changeTheme:()=>{}});function Dt(){return z(Pt)}function Vt({children:e}){const[t,n]=g(yt.getTheme()),o=Be("(prefers-color-scheme: light)"),r=Be("(prefers-color-scheme: dark)");c((()=>{document.documentElement.setAttribute("data-theme",t)}),[t]);const a=I((e=>{he.setTheme(e),yt.setTheme(e),n(e)}),[]);c((()=>{he.setPrefersColorScheme(o?"light":r?"dark":"none")}),[o,r]);const s={theme:t,actualTheme:"light"===t||"dark"!==t&&o?"light":"dark",changeTheme:a};return d(Pt.Provider,{value:s},e)}const Nt=A({title:"",changeTitle:()=>{}});function Tt(e,t){const n=z(Nt);return c((()=>{e&&n.changeTitle(e,t)}),[e,t]),n}function Bt({children:e}){const{locale:t}=zt(),[n,o]=g(t("title.home")),r={title:n,changeTitle:I(((e,t)=>{null!=t||(t=fe.versions.map((e=>e.id)));const n=t.slice(t.length-3);document.title=`${e} Minecraft ${n.join(", ")}`,o(e)}),[])};return d(Nt.Provider,{value:r},e)}const Ht=A({version:"1.18.2",changeVersion:()=>{}});function Rt(){return z(Ht)}function Ft({children:e}){const[t,n]=g(yt.getVersion()),o=Me(m()).get("version");c((()=>{lt.includes(o)&&t!==o&&n(o)}),[t,o]);const r=I((e=>{Me(m()).has("version")&&Ae({version:e}),he.setVersion(e),yt.setVersion(e),n(e)}),[]),a={version:t,changeVersion:r};return d(Ht.Provider,{value:a},e)}let Gt=!1;const Wt={temperature:[-1,1],humidity:[-1,1],continentalness:[-1.1,1],erosion:[-1,1],weirdness:[-1,1],offset:[-1,1],factor:[0,12],jaggedness:[0,1]};let Jt,Ut;async function Yt(e,t){const n=[e,t.octaves,`${t.seed}`,t.version];return Le(n,Jt)||(Jt=Se(n),Ut=await async function(e,t){var n,o,r,a,s;switch(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,"")){case"fixed":return new D(O.parse(e.biome));case"checkerboard":const n=(null!=(o=e.scale)?o:2)+2,i=null!=(a=null==(r=e.biomes)?void 0:r.length)?a:0;return{getBiome(t,o,r){var a;const s=(((t>>n)+(r>>n))%i+i)%i;return O.parse(null==(a=e.biomes)?void 0:a[s].node)}};case"multi_noise":switch(null==(s=e.preset)?void 0:s.replace(/^minecraft:/,"")){case"nether":e=vt(t.version,"1.18")?Kt:Xt;break;case"overworld":e=vt(t.version,"1.18")?await async function(){return(await st("1.18","dimension","overworld")).generator.biome_source}():e}if(e=h.DataModel.unwrapLists(e),vt(t.version,"1.18")){await async function(){Gt||(await V(N),Gt=!0,console.debug(`Loaded deepslate-rs from "${N}"`))}();const n=new Pe,o=e=>"number"==typeof e?[e,e]:e,[r,a,s,i,l,c,d,u,h,m,p,f,g,v]=[[],[],[],[],[],[],[],[],[],[],[],[],[],[]];for(const t of e.biomes){const{temperature:e,humidity:w,continentalness:_,erosion:y,weirdness:b,depth:x,offset:k}=t.parameters;r.push(o(e)[0]),a.push(o(e)[1]),s.push(o(w)[0]),i.push(o(w)[1]),l.push(o(_)[0]),c.push(o(_)[1]),d.push(o(y)[0]),u.push(o(y)[1]),h.push(o(b)[0]),m.push(o(b)[1]),p.push(o(x)[0]),f.push(o(x)[1]),g.push(k),v.push(n.getOrPut(t.biome,Math.floor(2147483647*Math.random())))}const w=j(new Float64Array(r),new Float64Array(a),new Float64Array(s),new Float64Array(i),new Float64Array(l),new Float64Array(c),new Float64Array(d),new Float64Array(u),new Float64Array(h),new Float64Array(m),new Float64Array(p),new Float64Array(f),new Float64Array(g),new Int32Array(v)),_=E(t.seed,t.octaves.temperature.firstOctave,new Float64Array(t.octaves.temperature.amplitudes),t.octaves.humidity.firstOctave,new Float64Array(t.octaves.humidity.amplitudes),t.octaves.continentalness.firstOctave,new Float64Array(t.octaves.continentalness.amplitudes),t.octaves.erosion.firstOctave,new Float64Array(t.octaves.erosion.amplitudes),t.octaves.weirdness.firstOctave,new Float64Array(t.octaves.weirdness.amplitudes),t.octaves.shift.firstOctave,new Float64Array(t.octaves.shift.amplitudes));return{getBiome(e,t,o){var r;const a=$(w,_,e,e+1,1,t,t+1,1,o,o+1,1);return O.parse(null!=(r=n.getA(a[0]))?r:"unknown")},getBiomes:(e,t,o,r,a,s,i,l,c)=>[...$(w,_,e,t,o,r,a,s,i,l,c)].map((e=>{var t;return O.parse(null!=(t=n.getA(e))?t:"unknown")})),getClimate(e,t,n){const o=S(_,e,e+1,1,t,t+1,1,n,n+1,1),[r,a,s,i,l]=o.slice(0,5);return{temperature:r,humidity:a,continentalness:s,erosion:i,weirdness:l}},getClimates(e,t,n,o,r,a,s,i,l){const c=S(_,e,t,n,o,r,a,s,i,l),d=[];for(let u=0;u{var r;const a=e[`${n}_noise`];return a.firstOctave=je(null!=(r=a.firstOctave)?r:-7,-100,-1),new L(new P(t.seed+BigInt(o)),a)}));return Array.isArray(e.biomes)&&0!==e.biomes.length?{getBiome(t,o,r){const a=n.map((e=>e.sample(t,r,0)));let s=1/0,i="";for(const{biome:n,parameters:l}of e.biomes){const e=ze(l.altitude-a[0])+ze(l.temperature-a[1])+ze(l.humidity-a[2])+ze(l.weirdness-a[3])+ze(l.offset);eo.nextFloat(),nextInt:e=>o.nextInt(e),nextGaussian:()=>Math.sqrt(-2*Math.log(1-o.nextFloat()))*Math.cos(2*Math.PI*o.nextFloat()),sampleInt(e){return function(e,t){var n,o;if("number"==typeof e)return e;if(e.base)return null!=(o=e.base)?o:1+t.nextInt(1+(null!=(n=e.spread)?n:0));switch(nn(e.type)){case"constant":return e.value;case"uniform":return e.value.min_inclusive+t.nextInt(e.value.max_inclusive-e.value.min_inclusive+1);case"biased_to_bottom":return e.value.min_inclusive+t.nextInt(t.nextInt(e.value.max_inclusive-e.value.min_inclusive+1)+1);case"clamped":return je(t.sampleInt(e.value.source),e.value.min_inclusive,e.value.max_inclusive);case"clamped_normal":const n=e.value.mean+t.nextGaussian()*e.value.deviation;return Math.floor(je(e.value.min_inclusive,e.value.max_inclusive,n));case"weighted_list":const o=e.distribution.reduce(((e,t)=>e+t.weight),0);let r=t.nextInt(o);for(const a of e.distribution)if(r-=a.weight,r<0)return t.sampleInt(a.data);return 0}return 1}(e,this)}};for(let s=0;s=n.size[0]||s[1]>=n.size[1]||s[2]>=n.size[2])continue;const e=s[2]*(4*t.width)+4*s[0],o=i{ln(t,null==e?void 0:e.decorator,n).forEach((t=>sn(t,null==e?void 0:e.feature,n)))},random_boolean_selector:(e,t,n)=>{sn(t,n.nextFloat()<.5?null==e?void 0:e.feature_true:null==e?void 0:e.feature_false,n)},random_selector:(e,t,n)=>{var o,r;for(const a of null!=(o=null==e?void 0:e.features)?o:[])if(n.nextFloat()<(null!=(r=null==a?void 0:a.chance)?r:0))return void sn(t,a.feature,n);sn(t,null==e?void 0:e.default,n)},simple_random_selector:(e,t,n)=>{var o,r,a;sn(t,null==(a=null==e?void 0:e.features)?void 0:a[n.nextInt(null!=(r=null==(o=null==e?void 0:e.features)?void 0:o.length)?r:0)],n)}},dn={chance:(e,t,n)=>{var o;return n.nextFloat()<1/(null!=(o=null==e?void 0:e.chance)?o:1)?[t]:[]},count:(e,t,n)=>{var o;return new Array(n.sampleInt(null!=(o=null==e?void 0:e.count)?o:1)).fill(t)},count_extra:(e,t,n)=>{var o,r;let a=null!=(o=null==e?void 0:e.count)?o:1;return n.nextFloat(){var o;return new Array(n.sampleInt(null!=(o=null==e?void 0:e.count)?o:1)).fill(t).map((e=>[e[0]+n.nextInt(16),e[1],e[2]+n.nextInt(16)]))},count_noise:(e,t,n)=>{const o=n.biomeInfoNoise.sample(t[0]/200,0,t[2]/200){var o;const r=Math.max(1,e.noise_factor),a=n.biomeInfoNoise.sample(t[0]/r,0,t[2]/r),s=Math.max(0,Math.ceil((a+(null!=(o=e.noise_offset)?o:0))*e.noise_to_count_ratio));return new Array(s).fill(t)},dark_oak_tree:(e,t,n)=>[...new Array(16)].map(((e,o)=>{const r=4*Math.floor(o/4)+1+n.nextInt(3)+t[0];return[r,Math.max(n.seaLevel,Qt[je(0,63,r)]),4*Math.floor(o%4)+1+n.nextInt(3)+t[2]]})),decorated:(e,t,n)=>ln(t,null==e?void 0:e.outer,n).flatMap((t=>ln(t,null==e?void 0:e.inner,n))),depth_average:(e,t,n)=>{var o,r,a,s;return on(t,n.nextInt(null!=(o=null==e?void 0:e.spread)?o:0)+n.nextInt(null!=(r=null==e?void 0:e.spread)?r:0)-(null!=(a=e.spread)?a:0)+(null!=(s=null==e?void 0:e.baseline)?s:0))},emerald_ore:(e,t,n)=>{const o=3+n.nextInt(6);return[...new Array(o)].map((()=>[t[0]+n.nextInt(16),4+n.nextInt(28),t[2]+n.nextInt(16)]))},fire:(e,t,n)=>{const o=1+n.nextInt(n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(o)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},glowstone:(e,t,n)=>{const o=n.nextInt(1+n.nextInt(n.sampleInt(null==e?void 0:e.count)));return[...new Array(o)].map((()=>[t[0]+n.nextInt(16),n.nextInt(128),t[2]+n.nextInt(16)]))},heightmap:(e,t,n)=>on(t,Math.max(n.seaLevel,Qt[je(0,63,t[0])])),heightmap_spread_double:(e,t,n)=>{const o=Math.max(n.seaLevel,Qt[je(0,63,t[0])]);return on(t,n.nextInt(2*o))},heightmap_world_surface:(e,t,n)=>on(t,Math.max(n.seaLevel,Qt[je(0,63,t[0])])),iceberg:(e,t,n)=>[[t[0]+4+n.nextInt(8),t[1],t[2]+4+n.nextInt(8)]],lava_lake:(e,t,n)=>{var o,r;if(0===n.nextInt((null!=(o=e.chance)?o:1)/10)){const o=n.nextInt(n.nextInt(248)+8);if(o[t],range:(e,t,n)=>{var o,r,a;return on(t,n.nextInt((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0))+(null!=(a=null==e?void 0:e.bottom_offset)?a:0))},range_biased:(e,t,n)=>{var o,r,a;return on(t,n.nextInt(n.nextInt((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0))+(null!=(a=null==e?void 0:e.bottom_offset)?a:0)))},range_very_biased:(e,t,n)=>{var o,r,a,s;return on(t,n.nextInt(n.nextInt(n.nextInt((null!=(o=null==e?void 0:e.maximum)?o:1)-(null!=(r=null==e?void 0:e.top_offset)?r:0))+(null!=(a=null==e?void 0:e.bottom_offset)?a:0))+(null!=(s=null==e?void 0:e.bottom_offset)?s:0)))},spread_32_above:(e,t,n)=>on(t,n.nextInt(t[1]+32)),top_solid_heightmap:(e,t)=>on(t,Qt[je(0,63,t[0])]),magma:(e,t,n)=>on(t,n.nextInt(t[1]+32)),square:(e,t,n)=>[[t[0]+n.nextInt(16),t[1],t[2]+n.nextInt(16)]],surface_relative_threshold:(e,t)=>{var n,o;const r=Qt[je(0,63,t[0])],a=r+(null!=(n=null==e?void 0:e.min_inclusive)?n:-1/0),s=r+(null!=(o=null==e?void 0:e.max_inclusive)?o:1/0);return t[1]s?[t]:[]},water_lake:(e,t,n)=>{var o;return 0===n.nextInt(null!=(o=e.chance)?o:1)?[[t[0]+n.nextInt(16),n.nextInt(256),t[2]+n.nextInt(16)]]:[]}};function un(e,t,n){var o;let r=[e];for(const a of t){hn[nn(null!=(o=null==a?void 0:a.type)?o:"nope")]&&(r=r.flatMap((e=>hn[nn(a.type)](a,e,n))))}for(const a of r)n.placements.push([a,0])}const hn={count:({count:e},t,n)=>new Array(n.sampleInt(null!=e?e:1)).fill(t),count_on_every_layer:({count:e},t,n)=>new Array(n.sampleInt(null!=e?e:1)).fill(t).map((e=>[e[0]+n.nextInt(16),e[1],e[2]+n.nextInt(16)])),environment_scan:({},e)=>[e],height_range:({height:e},t,n)=>on(t,function(e,t){var n,o,r,a;if(!ge(e))throw new Error("Invalid height provider");if("string"!=typeof e.type)return rn(e);switch(nn(e.type)){case"constant":return rn(e.value);case"uniform":{const n=rn(e.min_inclusive),o=rn(e.max_inclusive);return n+t.nextInt(o-n+1)}case"biased_to_bottom":{const r=rn(e.min_inclusive),a=rn(e.max_inclusive),s=t.nextInt(a-r-(null!=(n=e.inner)?n:1)+1);return r+t.nextInt(s+(null!=(o=e.inner)?o:1))}case"very_biased_to_bottom":{const n=rn(e.min_inclusive),o=rn(e.max_inclusive),a=null!=(r=e.inner)?r:1,s=n+a+t.nextInt(o-n-a+1),i=n+t.nextInt(s-n);return n+t.nextInt(i-n+a)}case"trapezoid":{const n=rn(e.min_inclusive),o=rn(e.max_inclusive),r=null!=(a=e.plateau)?a:0;if(r>=o-n)return n+t.nextInt(o-n+1);const s=(o-n-r)/2,i=o-n-s;return n+t.nextInt(i+1)+t.nextInt(s+1)}default:throw new Error(`Invalid height provider ${e.type}`)}}(e,n)),heightmap:({},e,t)=>on(e,Math.max(t.seaLevel,Qt[je(0,63,e[0])])),in_square:({},e,t)=>[[e[0]+t.nextInt(16),e[1],e[2]+t.nextInt(16)]],noise_based_count:({noise_to_count_ratio:e,noise_factor:t,noise_offset:n},o,r)=>{const a=Math.max(1,t),s=r.biomeInfoNoise.sample(o[0]/a,0,o[2]/a),i=Math.max(0,Math.ceil((s+(null!=n?n:0))*e));return new Array(i).fill(o)},noise_threshold_count:({noise_level:e,below_noise:t,above_noise:n},o,r)=>{const a=r.biomeInfoNoise.sample(o[0]/200,0,o[2]/200);return new Array(a[[n[0]+o.sampleInt(e),n[1]+o.sampleInt(t),n[2]+o.sampleInt(e)]],rarity_filter:({chance:e},t,n)=>n.nextFloat()<1/(null!=e?e:1)?[t]:[]};class mn{constructor(e){this.settings={},this.chunkWidth=4,this.chunkHeight=4,this.chunkCountY=32,this.biomeDepth=.1,this.biomeScale=.2,this.noiseColumnCache=[],this.xOffset=0;const t=new P(e);this.minLimitPerlinNoise=new T(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.maxLimitPerlinNoise=new T(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]),this.mainPerlinNoise=new T(t,-7,[1,1,1,1,1,1,1,1]),this.depthNoise=new T(t,-15,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])}reset(e,t,n,o,r){this.settings=e,this.chunkWidth=4*e.size_horizontal,this.chunkHeight=4*e.size_vertical,this.chunkCountY=Math.floor(e.height/this.chunkHeight),e.amplified&&t>0&&(t=1+2*t,n=1+4*n),this.biomeDepth=.265625*(.5*t-.125),this.biomeScale=96/(.9*n+.1),this.noiseColumnCache=Array(r).fill(null),this.xOffset=o}iterateNoiseColumn(e){const t=Array(this.chunkCountY*this.chunkHeight),n=Math.floor(e/this.chunkWidth),o=Math.floor(e%this.chunkWidth)/this.chunkWidth,r=this.fillNoiseColumn(n),a=this.fillNoiseColumn(n+1);for(let h=this.chunkCountY-1;h>=0;h-=1)for(let e=this.chunkHeight;e>=0;e-=1){const n=e/this.chunkHeight;t[h*this.chunkHeight+e]=(s=n,i=o,l=r[h],c=r[h+1],d=a[h],u=a[h+1],$e(i,$e(s,l,c),$e(s,d,u)))}var s,i,l,c,d,u;return t}fillNoiseColumn(e){const t=this.noiseColumnCache[e-this.xOffset];if(t)return t;const n=Array(this.chunkCountY+1),o=684.412*this.settings.sampling.xz_scale,r=684.412*this.settings.sampling.y_scale,a=o/this.settings.sampling.xz_factor,s=r/this.settings.sampling.y_factor,i=this.settings.random_density_offset?this.getRandomDensity(e):0;for(let l=0;l<=this.chunkCountY;l+=1){let t=this.sampleAndClampNoise(e,l,this.mainPerlinNoise.getOctaveNoise(0).zo,o,r,a,s);const c=((1-2*l/this.chunkCountY+i)*this.settings.density_factor+this.settings.density_offset+this.biomeDepth)*this.biomeScale;t+=c*(c>0?4:1),this.settings.top_slide.size>0&&(t=Ee(this.settings.top_slide.target,t,(this.chunkCountY-l-this.settings.top_slide.offset)/this.settings.top_slide.size)),this.settings.bottom_slide.size>0&&(t=Ee(this.settings.bottom_slide.target,t,(l-this.settings.bottom_slide.offset)/this.settings.bottom_slide.size)),n[l]=t}return this.noiseColumnCache[e-this.xOffset]=n,n}getRandomDensity(e){const t=this.depthNoise.sample(200*e,10,this.depthNoise.getOctaveNoise(0).zo,1,0,!0),n=24.575625*(t<0?.3*-t:t)-2;return n<0?.009486607142857142*n:.006640625*Math.min(n,1)}sampleAndClampNoise(e,t,n,o,r,a,s){let i=0,l=0,c=0,d=1;for(let u=0;u<16;u+=1){const h=T.wrap(e*o*d),m=T.wrap(t*r*d),p=T.wrap(n*o*d),f=r*d,g=this.minLimitPerlinNoise.getOctaveNoise(u);g&&(i+=g.sample(h,m,p,f,t*f)/d);const v=this.maxLimitPerlinNoise.getOctaveNoise(u);if(v&&(l+=v.sample(h,m,p,f,t*f)/d),u<8){const o=this.mainPerlinNoise.getOctaveNoise(u);o&&(c+=o.sample(T.wrap(e*a*d),T.wrap(t*s*d),T.wrap(n*a*d),s*d,t*s*d)/d)}d/=2}return Ee(i/512,l/512,(c/10+1)/2)}}const pn={"minecraft:air":[150,160,170],"minecraft:water":[20,80,170],"minecraft:lava":[200,100,0],"minecraft:stone":[55,55,55],"minecraft:deepslate":[34,34,36],"minecraft:bedrock":[10,10,10],"minecraft:grass_block":[47,120,23],"minecraft:dirt":[64,40,8],"minecraft:gravel":[70,70,70],"minecraft:sand":[196,180,77],"minecraft:sandstone":[148,135,52],"minecraft:netherrack":[100,40,40],"minecraft:crimson_nylium":[144,22,22],"minecraft:warped_nylium":[28,115,113],"minecraft:basalt":[73,74,85],"minecraft:end_stone":[200,200,140]};let fn,gn,vn=[];const wn=new Map;async function _n(e,t,n){var o,r,a;if(vt(n.version,"1.18")){vt(n.version,"1.18.2")&&await xn(n.version);const{settings:r,generator:a}=function(e,t){const n=q.fromJson(h.DataModel.unwrapLists(e)),o=[e,`${t.seed}`,t.biome];if(!Le(o,fn))if(fn=Se(o),vn=[],vt(t.version,"1.18.2")){const e=new D(O.create("unknown"));gn=new Z(t.seed,e,n)}else{const e=new ee("unknown");gn=new X(t.seed,e,n)}return{settings:n,generator:gn}}(e,n),s=new Cn(-n.offset,n.width,r.noise.minY,r.noise.height);s.generate(a,n.biome);const i=t.data;for(let e=0;easync function(e,t,n,o){const r=await async function(e,t){console.debug(`[fetchAllPresets] ${e} ${t}`);const n=fe.versions.find((t=>t.id===e));await ot(n);try{const e=await it(`${nt(n,"registries")}/${t}/data.min.json`);return new Map(await Promise.all(e.map((async e=>[e,await it(`${nt(n,"data")}/data/minecraft/${t}/${e}.json`)]))))}catch(o){throw new Error(`Error occurred while fetching all ${t} presets: ${Oe(o)}`)}}(e,n),a=new U(O.create(n));for(const[s,i]of r.entries())a.register(O.parse(s),o.fromJson(i));t.register(a.key,a)}(e,n,t,o)))),wn.set(e,n)),Y.DENSITY_FUNCTION.clear().assign(n.getOrThrow(O.create("worldgen/density_function"))),Y.NOISE.clear().assign(n.getOrThrow(O.create("worldgen/noise")))}function kn(e,t){return e[t]>0?0:e[t+1]>0?150:255}class Cn{constructor(e,t,n,o){this.minX=e,this.done=[],this.chunks=[...Array(Math.ceil(t/16)+1)].map(((t,r)=>{const a=(e>>4)+r,s=vn.find((e=>e.pos[0]===a));return s?(this.done[r]=!0,s):new K(n,o,B.create(a,0))}))}generate(e,t){this.chunks.forEach(((n,o)=>{this.done[o]||(e.fill(n,!0),e.buildSurface(n,t),this.done[o]=!0,vn.push(n))}))}getBlockState(e){const t=(e[0]>>4)-(this.minX>>4);return this.chunks[t].getBlockState(e)}}const Mn=["biomes","temperature","humidity","continentalness","erosion","weirdness"],An=({model:e,data:t,shown:n,version:o})=>{var r;const{locale:a}=zt(),[s,l]=g(2),[u,m]=g(void 0),[p,v]=g(new Set(["biomes"])),y=f([0,0]),b=f(1),x=f(void 0),k=BigInt(e.get(new h.Path(["generator","seed"]))),C=w((()=>{if(n)return function(e){if("string"!=typeof e){e=q.fromJson(h.DataModel.unwrapLists(e)).legacyRandomSource?"minecraft:nether":"minecraft:overworld"}switch(e.replace(/^minecraft:/,"")){case"overworld":case"amplified":return{temperature:{firstOctave:-9,amplitudes:[1.5,0,1,0,0,0]},humidity:{firstOctave:-7,amplitudes:[1,1,0,0,0,0]},continentalness:{firstOctave:-9,amplitudes:[1,1,2,2,2,1,1,1,1]},erosion:{firstOctave:-9,amplitudes:[1,1,0,1,1]},weirdness:{firstOctave:-7,amplitudes:[1,2,1,0,0,0]},shift:{firstOctave:-3,amplitudes:[1,1,1,0]}};case"end":case"floating_islands":return{temperature:{firstOctave:0,amplitudes:[0]},humidity:{firstOctave:0,amplitudes:[0]},continentalness:{firstOctave:0,amplitudes:[0]},erosion:{firstOctave:0,amplitudes:[0]},weirdness:{firstOctave:0,amplitudes:[0]},shift:{firstOctave:0,amplitudes:[0]}};default:return{temperature:{firstOctave:-7,amplitudes:[1,1]},humidity:{firstOctave:-7,amplitudes:[1,1]},continentalness:{firstOctave:-7,amplitudes:[1,1]},erosion:{firstOctave:-7,amplitudes:[1,1]},weirdness:{firstOctave:-7,amplitudes:[1,1]},shift:{firstOctave:0,amplitudes:[0]}}}}(e.get(new h.Path(["generator","settings"])))}),[n]),M=n?function(e,t){return JSON.stringify([e,t])}(t,C):"",A=null==(r=t.type)?void 0:r.replace(/^minecraft:/,""),{canvas:I,redraw:z}=Ne({size:()=>[200/b.current,200/b.current],async draw(e){const n={octaves:C,biomeColors:{},layers:p,offset:y.current,scale:s,seed:k,res:b.current,version:o};await async function(e,t,n){var o,r,a;const{biomeSource:s}=await Yt(e,n),i=t.data,l=-Math.round(n.offset[0])-100+n.res/2,c=-Math.round(n.offset[1])-100+n.res/2,d=4*t.width/n.res,u=4/n.res,h=[l*n.scale,(200+l)*n.scale,n.res*n.scale],m=[c*n.scale,(200+c)*n.scale,n.res*n.scale],p=n.layers.has("biomes")?null==(o=s.getBiomes)?void 0:o.call(s,...h,64,65,1,...m):void 0,f=[...n.layers].filter((e=>"biomes"!==e)),g=0===f.length||null==(r=s.getClimates)?void 0:r.call(s,...h,64,65,1,...m);for(let v=0;v<200;v+=n.res)for(let e=0;e<200;e+=n.res){const t=e*d+v*u,o=v/n.res*200/n.res+e/n.res,r=(v+l)*n.scale,h=(e+c)*n.scale;let m=[50,50,50];if(n.layers.has("biomes"))m=qt((null!=(a=null==p?void 0:p[o])?a:s.getBiome(r,64,h)).toString(),n.biomeColors);else if(g&&f[0]){const e=g[o][f[0]],[t,n]=Wt[f[0]],r=(e-t)/(n-t)*256;m=[r,r,r]}i[t]=m[0],i[t+1]=m[1],i[t+2]=m[2],i[t+3]=255}}(t,e,n),4===b.current&&(clearTimeout(x.current),x.current=setTimeout((()=>{b.current=1,z()}),150))},async onDrag(e,t){y.current[0]=y.current[0]+200*e,y.current[1]=y.current[1]+200*t,clearTimeout(x.current),b.current="multi_noise"===A?4:1,z()},async onHover(e,n){const r={octaves:C,biomeColors:{},layers:p,offset:y.current,scale:s,seed:k,res:1,version:o},a=await async function(e,t,n,o){var r;const{biomeSource:a}=await Yt(e,o),[s,l]=function([e,t],n){return[(e-n.offset[0]-100+n.res/2)*n.scale,(t-n.offset[1]-100+n.res/2)*n.scale]}([t,n],o);return i({biome:a.getBiome(s,64,l).toString()},null==(r=a.getClimate)?void 0:r.call(a,s,64,l))}(t,Math.floor(200*e),Math.floor(200*n),r);m(a)},onLeave(){m(void 0)}},[M,s,k,p]);c((()=>{n&&(b.current="multi_noise"===A?4:1,z())}),[M,s,k,p,n]);const j=e=>{y.current[0]=y.current[0]*s/e,y.current[1]=y.current[1]*s/e,l(e)};return d(_,null,d("div",{class:"controls preview-controls"},u&&d(pe,{label:u.biome,class:"no-pointer"}),"multi_noise"===A&&d(Re,{icon:"stack",tooltip:a("configure_layers")},Mn.map((e=>{const t=p.has(e);return d(pe,{label:a(`layer.${e}`),active:t,tooltip:a(t?"enabled":"disabled"),onClick:t=>{v(new Set([e])),t.stopPropagation()}})}))),("multi_noise"===A||"checkerboard"===A)&&d(_,null,d(pe,{icon:"dash",tooltip:a("zoom_out"),onClick:()=>j(1.5*s)}),d(pe,{icon:"plus",tooltip:a("zoom_in"),onClick:()=>j(s/1.5)})),"multi_noise"===A&&d(pe,{icon:"sync",tooltip:a("generate_new_seed"),onClick:()=>ye(e)})),(null==u?void 0:u.temperature)&&d("div",{class:"controls secondary-controls"},d(pe,{class:"no-pointer",label:Object.entries(u).filter((([e])=>"biome"!==e)).map((([e,t])=>`${e[0].toUpperCase()}: ${t.toFixed(2)}`)).join(" ")})),d("canvas",{ref:I,width:"200",height:"200"}))};const In=({data:e,version:t,shown:n})=>{const{locale:o}=zt(),[r,a]=g(4),[s,i]=g(_e()),{canvas:l,redraw:u}=Ne({size:()=>[16*r,16*r],async draw(n){tn(e,n,{seed:s,version:t,size:[16*r,128,16*r]})}}),h=JSON.stringify(e);return c((()=>{n&&u()}),[h,r,s,n]),d(_,null,d("div",{class:"controls preview-controls"},d(pe,{icon:"dash",tooltip:o("zoom_out"),onClick:()=>a(Math.min(16,r+1))}),d(pe,{icon:"plus",tooltip:o("zoom_in"),onClick:()=>a(Math.max(1,r-1))}),d(pe,{icon:"sync",tooltip:o("generate_new_seed"),onClick:()=>i(_e())})),d("canvas",{ref:l,width:"64",height:"64"}))},zn=({data:e,shown:t,version:n})=>{var o,r;const{locale:a}=zt(),[s,i]=g(_e()),[l,u]=g(!1),[h,m]=g(void 0),p=f(0),v=f(void 0),w=JSON.stringify([e]),y=null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.height)?r:256,{canvas:b,redraw:x}=Ne({size:()=>[y,y],async draw(t){const o={offset:p.current,width:t.width,seed:s,version:n};await yn(e,t,o)},async onDrag(e){p.current+=e*y,x()},async onHover(t,n){var o,r;const a=Math.floor(t*y-p.current),s=y-Math.max(1,Math.ceil(n*y))+(null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.min_y)?r:0);m(`X=${a} Y=${s}`)},onLeave(){m(void 0)}},[w,s]);return c((()=>{v.current&&clearInterval(v.current),t&&(x(),l&&(v.current=setInterval((()=>{p.current-=8,x()}),100)))}),[w,s,t,l]),d(_,null,d("div",{class:"controls preview-controls"},h&&d(pe,{label:h,class:"no-pointer"}),d(Re,{icon:"gear",tooltip:a("terrain_settings")},d(pe,{icon:l?"square_fill":"square",label:a("preview.auto_scroll"),onClick:()=>u(!l)})),d(pe,{icon:"sync",tooltip:a("generate_new_seed"),onClick:()=>i(_e())})),d("canvas",{ref:b,width:y,height:y}))},jn=({data:e,shown:t,version:n})=>{const{locale:o}=zt(),[r,a]=g(_e()),[s,i]=g(2),l=f([0,0]),u=JSON.stringify([e]),{canvas:m,redraw:p}=Ne({size:()=>[256,256],async draw(t){const o={offset:l.current,scale:s,seed:r,version:n};!function(e,t,n){const o=new P(n.seed),r=Q.fromJson(h.DataModel.unwrapLists(e)),a=new L(o,r),s=-n.offset[0]-100,i=-n.offset[1]-100,l=t.data;for(let c=0;c<256;c+=1)for(let e=0;e<256;e+=1){const t=4*c+4*e*256,o=(c+s)*n.scale,r=(e+i)*n.scale,d=128*(a.sample(o,r,0)+1);l[t]=d,l[t+1]=d,l[t+2]=d,l[t+3]=255}}(e,t,o)},async onDrag(e,t){l.current[0]=l.current[0]+256*e,l.current[1]=l.current[1]+256*t,p()}},[u,s,r]);c((()=>{t&&p()}),[u,s,r,t]);const v=e=>{l.current[0]=l.current[0]*s/e,l.current[1]=l.current[1]*s/e,i(e)};return d(_,null,d("div",{class:"controls preview-controls"},d(pe,{icon:"dash",tooltip:o("zoom_out"),onClick:()=>v(1.5*s)}),d(pe,{icon:"plus",tooltip:o("zoom_in"),onClick:()=>v(s/1.5)}),d(pe,{icon:"sync",tooltip:o("generate_new_seed"),onClick:()=>a(_e())})),d("canvas",{ref:m,width:"256",height:"256"}))},En=({data:e,shown:t,version:n})=>{var o,r;const{locale:a}=zt(),[s,i]=g(_e()),[l,u]=g("minecraft:plains"),[h,m]=g(.2),[p,v]=g(.1),[y,b]=g(!1),[x,k]=g(void 0),C=f(0),M=f(void 0),A=JSON.stringify([e,h,p]),I=null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.height)?r:256,{canvas:z,redraw:j}=Ne({size:()=>[I,I],async draw(t){const o={biome:l,biomeDepth:p,biomeScale:h,offset:C.current,width:t.width,seed:s,version:n};await _n(e,t,o)},async onDrag(e){C.current+=e*I,j()},async onHover(t,n){var o,r;const a=Math.floor(t*I-C.current),s=I-Math.max(1,Math.ceil(n*I))+(null!=(r=null==(o=null==e?void 0:e.noise)?void 0:o.min_y)?r:0),i=function(e,t){const n=vn.find((t=>B.minBlockX(t.pos)<=e&&B.maxBlockX(t.pos)>=e));if(n)return n.getBlockState(H.create(e,t,0))}(a,s);k(i?`Y=${s} (${i.getName().path})`:`Y=${s}`)},onLeave(){k(void 0)}},[A,s]);c((()=>{M.current&&clearInterval(M.current),t&&(async()=>{try{await j(),y&&(M.current=setInterval((()=>{C.current-=8,j()}),100))}catch(e){throw e}})()}),[A,s,t,l,h,p,y]);const E=w((()=>{var e;return null!=(e=null==pt?void 0:pt.get("worldgen/biome"))?e:[]}),[n]);return d(_,null,d("div",{class:"controls preview-controls"},x&&d(pe,{label:x,class:"no-pointer"}),d(Re,{icon:"gear",tooltip:a("terrain_settings")},vt(n,void 0,"1.17")?d(_,null,d(De,{label:a("preview.scale"),value:`${h}`,onChange:e=>m(Number(e))}),d(De,{label:a("preview.depth"),value:`${p}`,onChange:e=>v(Number(e))})):d(De,{label:a("preview.biome"),value:l,onChange:u,dataList:E,larger:!0}),d(pe,{icon:y?"square_fill":"square",label:a("preview.auto_scroll"),onClick:()=>b(!y)})),d(pe,{icon:"sync",tooltip:a("generate_new_seed"),onClick:()=>i(_e())})),d("canvas",{ref:z,width:I,height:I}))},$n=["dimension","worldgen/density_function","worldgen/noise","worldgen/noise_settings","worldgen/configured_feature","worldgen/placed_feature"];function On({model:e,version:t,id:n,shown:o}){var r;const[,a]=g(0);if(He(e,(()=>{a((e=>e+1))})),!e)return d(_,null);if("dimension"===n&&(null==(r=e.get(new h.Path(["generator","type"])))?void 0:r.endsWith("noise"))){const n=e.get(new h.Path(["generator","biome_source"]));if(n)return d(An,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/density_function"===n){const n=e.get(new h.Path([]));if(n)return d(zn,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/noise"===n){const n=e.get(new h.Path([]));if(n)return d(jn,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/noise_settings"===n){const n=e.get(new h.Path([]));if(n)return d(En,i({},{model:e,version:t,shown:o,data:n}))}if("worldgen/placed_feature"===n||"worldgen/configured_feature"===n&&vt(t,"1.16","1.17")){const n=e.get(new h.Path([]));if(n)return d(In,i({},{model:e,version:t,shown:o,data:n}))}return d(_,null)}function Sn(e,t){return e.schema.hook(Ln,new h.ModelPath(e),e.data,{blockStates:t})}const Ln={base:({},e,t)=>t,choice({switchNode:e},t,n,o){return e.hook(this,t,n,o)},list({children:e},t,n,o){if(!Array.isArray(n))return n;const r=n.map(((n,r)=>e.hook(this,t.push(r),n.node,o)));for(const a of Object.getOwnPropertySymbols(n))r[a]=n[a];return r},map({children:e,config:t},n,o,r){var a,s;if(void 0===o)return;const i="block_state_map"===(null==(a=t.validation)?void 0:a.validator)?null==(s=r.blockStates)?void 0:s[h.relativePath(n,t.validation.params.id).get()]:null,l={};Object.keys(o).forEach((t=>{var a;i&&!Object.keys(null!=(a=i.properties)?a:{}).includes(t)||(l[t]=e.hook(this,n.push(t),o[t],r))}));for(const c of Object.getOwnPropertySymbols(o))l[c]=o[c];return l},object({getActiveFields:e},t,n,o){if(null==n||"object"!=typeof n)return n;const r={},a=e(t);Object.keys(a).filter((e=>a[e].enabled(t))).forEach((e=>{const s=a[e].hook(this,t.push(e),n[e],o);null!=s&&(r[e]=s)}));for(const s of Object.getOwnPropertySymbols(n))r[s]=n[s];return r}},Pn={"2_spaces":2,"4_spaces":4,tabs:"\t",minified:void 0},Dn={json:{parse:ne.parse,stringify:(e,t)=>ne.stringify(e,null,t)+"\n"},yaml:{parse:oe.load,stringify:(e,t)=>oe.dump(e,{flowLevel:void 0===t?0:-1,indent:"string"==typeof t?4:t})}};function Vn({name:e,model:t,blockStates:n,doCopy:o,doDownload:r,doImport:a,copySuccess:s,onError:i}){const{locale:l}=zt(),[u,m]=g(yt.getIndent()),[p,v]=g(yt.getFormat()),[w,y]=g(yt.getHighlighting()),b=f(null),x=f(),k=f(),C=f(),M=f(),A=I(((e,t)=>{const n=Sn(e,t);return Dn[p].stringify(n,Pn[u])}),[u,p]);c((()=>{x.current=()=>{if(t&&n)try{const e=A(t,n);M.current.setValue(e)}catch(e){e instanceof Error?(e.message=`Error getting JSON output: ${e.message}`,i(e)):i(`Error getting JSON output: ${Oe(e)}`),console.error(e),M.current.setValue("")}},k.current=()=>{const e=M.current.getValue();if(0!==e.length)try{const n=Dn[p].parse(e);null==t||t.reset(h.DataModel.wrapLists(n),!1)}catch(n){n instanceof Error?(n.message=`Error importing: ${n.message}`,i(n)):i(`Error importing: ${Oe(n)}`),console.error(n)}}}),[t,n,u,p,w]),c((()=>{if(w){const e=te.edit("editor");e.setOptions({fontSize:14,showFoldWidgets:!1,highlightSelectedWord:!1}),e.$blockScrolling=1/0,e.on("blur",(e=>k.current(e))),e.getSession().setMode("ace/mode/json"),M.current={getValue:()=>e.getSession().getValue(),setValue(t){e.getSession().setValue(t)},configure(t,n){e.setOption("useSoftTabs","tabs"!==t),e.setOption("tabSize","tabs"===t?4:Pn[t]),e.getSession().setMode(`ace/mode/${n}`)},select(){e.selectAll()}}}else M.current={getValue:()=>C.current.value,setValue(e){C.current.value=e},configure(){},select(){}}}),[w]),He(t,(()=>{x.current()})),c((()=>{t&&x.current()}),[t]),c((()=>{M.current.configure(u,p),x.current()}),[u,p,w]),c((()=>{o&&t&&n&&navigator.clipboard.writeText(A(t,n)).then((()=>{s()}))}),[o]),c((()=>{if(r&&t&&n&&b.current){const o=encodeURIComponent(A(t,n));b.current.setAttribute("href",`data:text/json;charset=utf-8,${o}`),b.current.setAttribute("download",`${e}.${p}`),b.current.click()}}),[r]),c((()=>{a&&M.current&&(M.current.setValue(""),M.current.select())}),[a]);return d(_,null,d("div",{class:"controls source-controls"},d(Re,{icon:"gear",tooltip:l("output_settings"),"data-cy":"source-controls"},Object.entries(Pn).map((([e])=>d(pe,{label:l(`indentation.${e}`),active:u===e,onClick:()=>{return t=e,yt.setIndent(t),void m(t);var t}}))),d("hr",null),Object.keys(Dn).map((e=>d(pe,{label:l(`format.${e}`),active:p===e,onClick:()=>{return t=e,yt.setFormat(t),void v(t);var t}}))),d("hr",null),d(pe,{icon:w?"square_fill":"square",label:l("highlighting"),onClick:()=>{return e=!w,yt.setHighlighting(e),void y(e);var e}}))),w?d("pre",{id:"editor",class:"source"}):d("textarea",{ref:C,class:"source",spellcheck:!1,autocorrect:"off",onBlur:k.current}),d("a",{ref:b,style:"display: none;"}))}class Nn extends h.DataModel{constructor(e,t,n,o){super(e),this.mapper=t,this.getter=n,this.setter=o}map(e){return this.mapper(e)}get(e){return this.getter(e)}set(e,t,n){return this.setter(e,t,n)}}const Tn=["loot_table.type","loot_entry.type","function.function","condition.condition","criterion.trigger","recipe.type","dimension.generator.type","dimension.generator.biome_source.type","dimension.generator.biome_source.preset","carver.type","feature.type","decorator.type","feature.tree.minimum_size.type","block_state_provider.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","int_provider.type","float_provider.type","height_provider.type","structure_feature.type","surface_builder.type","processor.processor_type","rule_test.predicate_type","pos_rule_test.predicate_type","template_element.element_type","block_placer.type","block_predicate.type","material_rule.type","material_condition.type","structure_placement.type","density_function.type"],Bn=["number_provider.type","score_provider.type","nbt_provider.type","int_provider.type","float_provider.type","height_provider.type"],Hn=["feature.config","decorator.config","int_provider.value","float_provider.value","block_state_provider.simple_state_provider.state","block_state_provider.rotated_block_provider.state","block_state_provider.weighted_state_provider.entries.entry.data","rule_test.block_state","structure_feature.config","surface_builder.config","template_pool.elements.entry.element","decorator.block_survives_filter.state","material_rule.block.result_state"],Rn=["loot_entry.type","function.function","condition.condition","criterion.trigger","dimension.generator.type","dimension.generator.biome_source.type","feature.type","decorator.type","block_state_provider.type","feature.tree.minimum_size.type","trunk_placer.type","foliage_placer.type","tree_decorator.type","block_placer.type","rule_test.predicate_type","processor.processor_type","template_element.element_type","nbt_operation.op","number_provider.value","score_provider.name","score_provider.target","nbt_provider.source","nbt_provider.target","generator_biome.biome","block_predicate.type","material_rule.type","material_condition.type","density_function.type"],Fn=["function.set_nbt.tag","advancement.display.icon.nbt","text_component_object.nbt","entity.nbt","block.nbt","item.nbt"],Gn=["generator_biome.parameters.temperature","generator_biome.parameters.humidity","generator_biome.parameters.continentalness","generator_biome.parameters.erosion","generator_biome.parameters.depth","generator_biome.parameters.weirdness","feature.end_spike.crystal_beam_target","feature.end_gateway.exit","decorator.block_filter.offset","block_predicate.matching_blocks.offset","block_predicate.matching_fluids.offset","model_element.from","model_element.to","model_element.rotation.origin","model_element.faces.uv","item_transform.rotation","item_transform.translation","item_transform.scale","generator_structure.random_spread.locate_offset"],Wn=["noise_settings.surface_rule","noise_settings.noise.terrain_shaper"],Jn=["density_function.argument","density_function.argument1","density_function.argument2","density_function.input","density_function.when_in_range","density_function.when_out_of_range"],Un=new h.DataModel(h.MapNode(h.StringNode(),h.StringNode()),{historyMax:0});function Yn({model:e,lang:t,version:n,blockStates:o}){var r;const a=new h.ModelPath(e),[s,i,l]=e.schema.hook(qn,a,Se(e.data),t,n,o,{});return(null==(r=null==i?void 0:i.props)?void 0:r.children.some((e=>e)))?d("div",{class:`node ${e.schema.type(a)}-node`,"data-category":e.schema.category(a)},d("div",{class:"node-header"},s,i),d("div",{class:"node-body"},l)):l}const qn={base:()=>[null,null,null],boolean:(e,t,n,o,r,a,s)=>[null,d(Kn,i({},l(i({},e),{path:t,value:n,lang:o,version:r,states:a,ctx:s}))),null],choice({choices:e,config:t,switchNode:n},o,r,a,s,i,l){const c=n.activeCase(o,!0),u=(null==t?void 0:t.context)?new h.ModelPath(o.getModel(),new h.Path(o.getArray(),[t.context])):o,[m,p,f]=c.node.hook(this,u,r,a,s,i,l);if(1===e.length)return[m,p,f];const g=(null==t?void 0:t.choiceContext)?new h.Path([],[t.choiceContext]):(null==t?void 0:t.context)?new h.Path([],[t.context]):o,v=d("select",{value:c.type,onChange:n=>(n=>{var a;const s=null!=(a=e.find((e=>e.type===n)))?a:c,i=s.node.default(),l=s.change?s.change(h.DataModel.unwrapLists(r)):"feature"===t.choiceContext&&"minecraft:decorated"===(null==i?void 0:i.type)?i.config.feature:i;o.model.set(o,h.DataModel.wrapLists(l))})(n.target.value)},e.map((e=>d("option",{value:e.type},ro(a,g.contextPush(e.type))))));return[m,d(_,null,v,p),f]},list({children:e,config:t},n,o,r,a,s,c){const{expand:u,collapse:m,isToggled:p}=Xn(),[f,v]=g(50),w=n.getContext().join(".");if(Gn.includes(w)){return[d(_,null,[...Array(t.maxLength)].map(((e,t)=>d(ao,{lang:r,path:n.modelPush(t)}))),d("div",{class:"fixed-list"})),d(_,null,[...Array(t.maxLength)].map(((t,i)=>{var l;return e.hook(this,n.modelPush(i),null==(l=null==o?void 0:o[i])?void 0:l.node,r,a,s,c)[1]}))),null]}return[null,d("button",{class:"add tooltipped tip-se","aria-label":At(r,"add_top"),onClick:()=>{Array.isArray(o)||(o=[]);const t=h.DataModel.wrapLists(e.default());n.model.set(n,[{node:t,id:we()},...o])}},Fe.plus_circle),d(_,null,o&&Array.isArray(o)&&o.map((({node:t,id:h},g)=>{if(g===f)return d("div",{class:"node node-header"},d("label",null,At(r,"entries_hidden",""+(o.length-f))),d("button",{onClick:()=>v(Math.min(f+50,o.length))},At(r,"entries_hidden.more","50")),d("button",{onClick:()=>v(o.length)},At(r,"entries_hidden.all")));if(g>f)return null;const w=n.push(g).contextPush("entry"),_="object"===e.type(w),y=p(h);if(_&&(!1===y||void 0===y&&o.length>20))return d("div",{class:"node node-header","data-category":e.category(w)},d(ao,{lang:r,path:w,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(r,"expand")}\n${At(r,"expand_all","Ctrl")}`,onClick:u(h)},Fe.chevron_right),d("label",null,ro(r,w,`${g}`)),d(Zn,{key:h,path:w,value:t,schema:e}));return d(to,l(i({key:h,path:w,schema:e,value:t},{lang:r,version:a,states:s,actions:[{icon:"duplicate",label:"duplicate",onSelect:()=>{const e=[...n.get()];e.splice(g,0,{id:we(),node:Se(t)}),n.model.set(n,e)}}]}),{ctx:l(i({},c),{index:(0===g?1:0)+(g===o.length-1?2:0)})}),_&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(r,"collapse")}\n${At(r,"collapse_all","Ctrl")}`,onClick:m(h)},Fe.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":At(r,"remove"),onClick:()=>w.set(void 0)},Fe.trashcan),o.length>1&&d("div",{class:"node-move"},d("button",{class:"move tooltipped tip-se","aria-label":At(r,"move_up"),onClick:()=>{const e=[...n.get()];[e[g-1],e[g]]=[e[g],e[g-1]],n.model.set(n,e)},disabled:0===g},Fe.chevron_up),d("button",{class:"move tooltipped tip-se","aria-label":At(r,"move_down"),onClick:()=>{const e=[...n.get()];[e[g+1],e[g]]=[e[g],e[g+1]],n.model.set(n,e)},disabled:g===o.length-1},Fe.chevron_down)))})),o&&o.length>0&&o.length<=f&&d("div",{class:"node node-header"},d("button",{class:"add tooltipped tip-se","aria-label":At(r,"add_bottom"),onClick:()=>{Array.isArray(o)||(o=[]);const t=h.DataModel.wrapLists(e.default());n.model.set(n,[...o,{node:t,id:we()}])}},Fe.plus_circle)))]},map({children:e,keys:t,config:n},o,r,a,s,c,u){var m,p,f,g,v;const{expand:w,collapse:y,isToggled:b}=Xn(),x=new h.ModelPath(Un,new h.Path([oo(o.toString())])),k="block_state_map"===(null==(m=n.validation)?void 0:m.validator)?null==c?void 0:c[h.relativePath(o,n.validation.params.id).get()]:null,C=(null==k?void 0:k.properties)?h.StringNode(null,{enum:Object.keys(null!=(p=k.properties)?p:{})}):t;if(k&&"Properties"===o.last()){"object"!=typeof r&&(r={});const e=Object.entries(null!=(f=k.properties)?f:{}).map((([e,t])=>[e,h.StringNode(null,{enum:t})]));return Object.entries(null!=(g=k.properties)?g:{}).forEach((([e,t])=>{"string"!=typeof r[e]?o.model.errors.add(o.push(e),"error.expected_string"):t.includes(r[e])||o.model.errors.add(o.push(e),"error.invalid_enum_option",r[e])})),h.ObjectNode(Object.fromEntries(e)).hook(this,o,r,a,s,c,u)}return[null,d(_,null,C.hook(this,x,null!=(v=x.get())?v:"",a,s,c,u)[1],d("button",{class:"add tooltipped tip-se","aria-label":At(a,"add"),onClick:()=>{const t=x.get();o.model.set(o.push(t),h.DataModel.wrapLists(e.default()))}},Fe.plus_circle)),d(_,null,"object"==typeof r&&Object.entries(r).map((([t,n])=>{var m,p,f,g;const v=o.modelPush(t),_="object"===e.type(v),x=b(t);if(_&&(!1===x||void 0===x&&r.length>20))return d("div",{class:"node node-header","data-category":e.category(v)},d(ao,{lang:a,path:v,nested:!0}),d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(a,"expand")}\n${At(a,"expand_all","Ctrl")}`,onClick:w(t)},Fe.chevron_right),d("label",null,t),d(Zn,{key:t,path:v,value:n,schema:e}));const C=k?h.StringNode(null,{enum:null!=(p=null==(m=k.properties)?void 0:m[t])?p:[]}):e;(null==(f=null==k?void 0:k.properties)?void 0:f[t])&&"string"==typeof n&&!(null==(g=k.properties)?void 0:g[t].includes(n))&&o.model.errors.add(v,"error.invalid_enum_option",n);return d(to,l(i({key:t,schema:C,path:v,value:n},{lang:a,version:s,states:c,ctx:u}),{label:t}),_&&d("button",{class:"toggle tooltipped tip-se","aria-label":`${At(a,"collapse")}\n${At(a,"collapse_all","Ctrl")}`,onClick:y(t)},Fe.chevron_down),d("button",{class:"remove tooltipped tip-se","aria-label":At(a,"remove"),onClick:()=>v.set(void 0)},Fe.trashcan))})))]},number:(e,t,n,o,r,a,s)=>[null,d(Qn,i({},l(i({},e),{path:t,value:n,lang:o,version:r,states:a,ctx:s}))),null],object({node:e,config:t,getActiveFields:n,getChildModelPath:o},r,a,s,c,u,m){var p;const{expand:f,collapse:g,isToggled:v}=Xn();if(0==r.getArray().length&&function(e,t){var n;return"feature"===e&&"decorated"===(null==(n=null==t?void 0:t.type)?void 0:n.replace(/^minecraft:/,""))&&ge(null==t?void 0:t.config)}(t.context,a)){const{wrapper:e,fields:t}=function(e,t,n){const o=[],r=lo(n,o),a={type:e.type,config:h.ObjectNode({decorators:h.ListNode(ht),feature:mt},{context:"feature.decorated"})},s=h.ObjectNode(a,{context:"feature"}),i=new h.Path(["config","feature"]),l=new h.Path(["config","decorators"]),c=t.getModel(),d=new Nn(s,(e=>{if(e.startsWith(i))return new h.Path([...[...Array(o.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);if(e.startsWith(l)){if(2===e.modelArr.length)return new h.Path([]);const t=e.modelArr[2];if("number"==typeof t)return new h.Path([...[...Array(t)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)])}return e}),(e=>{if(e.equals(l)){const e=[];return lo(c.data,e),e}return c.get(d.map(e))}),((e,t,n)=>{if(e.startsWith(i)){const o=[];lo(c.data,o);const r=new h.Path([...[...Array(o.length-1)].flatMap((()=>["config","feature"])),...e.modelArr]);return c.set(r,t,n)}if(e.startsWith(l)){const o=e.modelArr[2];if(2===e.modelArr.length){const e=d.get(i);return c.set(new h.Path,co(e,t),n)}if("number"==typeof o){if(3===e.modelArr.length&&void 0===t){const e=d.get(i),t=[];lo(c.data,t),t.splice(o,1);const r=co(e,t);return c.set(new h.Path,r,n)}{const r=new h.Path([...[...Array(o)].flatMap((()=>["config","feature"])),"config","decorator",...e.modelArr.slice(3)]);return c.set(r,t,n)}}}c.set(e,t,n)}));return d.data={type:c.data.type,config:{decorators:o,feature:r}},d.errors=c.errors,{fields:a,wrapper:d}}(n(r),r,a);a=e.data,n=()=>t,o=(t,n)=>new h.ModelPath(e,new h.Path(t.getArray(),["feature"])).push(n)}let w=null,y=null;if(e.optional())if(void 0===a){const t=()=>r.set(h.DataModel.wrapLists(e.default()));y=d("button",{class:"collapse closed tooltipped tip-se","aria-label":At(s,"expand"),onClick:t},Fe.plus_circle)}else{const e=()=>r.set(void 0);y=d("button",{class:"collapse open tooltipped tip-se","aria-label":At(s,"remove"),onClick:e},Fe.trashcan)}const b=r.getContext().join(".");if(Jn.includes(b)||Wn.includes(b)){const e=v(""),t=Wn.includes(b)?e:!e;if(w=d(_,null,d("button",{class:"toggle tooltipped tip-se","aria-label":At(s,t?"collapse":"expand"),onClick:e?g(""):f("")},t?Fe.chevron_down:Fe.chevron_right)),!t)return[w,y,null]}const x="object"==typeof a&&null!==a&&(null==(p=e.default())?void 0:p.pools)?l(i({},m),{loot:null==a?void 0:a.type}):m,k=d(_,null,"object"==typeof a&&null!==a&&!(e.optional()&&void 0===a)&&Object.entries(n(r)).filter((([e,t])=>t.enabled(r))).map((([e,t])=>{const n=o(r,e),l=n.getContext().join(".");if(Bn.includes(l))return null;const[h,m,p]=t.hook(this,n,a[e],s,c,u,x),f="object"===t.type(n)&&Hn.includes(l),g=Rn.includes(l);return f||g?(w=d(_,null,w,d(ao,{lang:s,path:n}),d(so,{lang:s,path:n}),h),y=d(_,null,y,m),f?p:null):d(to,i({key:e,schema:t,path:n,value:a[e]},{lang:s,version:c,states:u,ctx:x}))})));return[w,y,k]},string:(e,t,n,o,r,a,s)=>[null,d(eo,i({},l(i({},e),{path:t,value:n,lang:o,version:r,states:a,ctx:s}))),null]};function Zn({path:e,value:t}){var n,o,r,a,s;switch(e.getContext().join(".")){case"loot_table.pools.entry":return d("label",null,null!=(o=null==(n=null==t?void 0:t.entries)?void 0:n.length)?o:0," entries");case"function.set_contents.entries.entry":case"loot_pool.entries.entry":return d("label",null,null!=(s=null==(r=null==t?void 0:t.name)?void 0:r.replace(/^minecraft:/,""))?s:null==(a=null==t?void 0:t.type)?void 0:a.replace(/^minecraft:/,""))}for(const i of Object.values(null!=t?t:{}))if("string"==typeof i)return d("label",null,i.replace(/^minecraft:/,""));return null}function Xn(){const[e,t]=g(new Map),[n,o]=g(void 0);return{expand:e=>n=>{n.ctrlKey?(t(new Map),o(!0)):t((t=>new Map(t.set(e,!0))))},collapse:e=>n=>{n.ctrlKey?(t(new Map),o(!1)):t((t=>new Map(t.set(e,!1))))},isToggled:t=>{var o;return e instanceof Map&&(null!=(o=e.get(t))?o:n)}}}function Kn({path:e,node:t,value:n,lang:o}){const r=o=>{e.model.set(e,t.optional()&&n===o?void 0:o)};return d(_,null,d("button",{class:!1===n?"selected":"",onClick:()=>r(!1)},At(o,"false")),d("button",{class:!0===n?"selected":"",onClick:()=>r(!0)},At(o,"true")))}function Qn({path:e,config:t,integer:n,value:o,lang:r}){var a;const s=t=>{const o=t.target.value,r=n?parseInt(o):parseFloat(o);e.model.set(e,r)};return d(_,null,d("input",{type:"text",value:null!=o?o:"",onBlur:s,onKeyDown:e=>{"Enter"===e.key&&s(e)}}),(null==t?void 0:t.color)&&d("input",{type:"color",value:"#"+(null!=(a=null==o?void 0:o.toString(16).padStart(6,"0"))?a:"000000"),onChange:t=>{const n=t.target.value,o=parseInt(n.slice(1),16);e.model.set(e,o)}}),["dimension.generator.seed","dimension.generator.biome_source.seed","world_settings.seed"].includes(e.getContext().join("."))&&d("button",{onClick:()=>ye(e.model),class:"tooltipped tip-se","aria-label":At(r,"generate_new_seed")},Fe.sync))}function eo({path:e,getValues:t,config:n,node:o,value:r,lang:a,version:s,states:i}){var l;const c=t=>{t.stopPropagation();const n=t.target.value;n!==r&&e.model.set(e,0===n.length?void 0:n)},u=t(),m=e.getContext().join("."),p=no(n)||"resource"!==(null==n?void 0:n.validator)||"string"!=typeof n.params.pool?void 0:n.params.pool;if(Fn.includes(m))return d("textarea",{value:null!=r?r:"",onBlur:c});if(no(n)&&!n.additional||Tn.includes(m)){let t=new h.Path([]);return no(n)&&"string"==typeof n.enum?t=t.contextPush(n.enum):p?t=t.contextPush(p):no(n)&&(t=e),d("select",{value:null!=r?r:"",onChange:c},o.optional()&&d("option",{value:""},At(a,"unset")),u.map((e=>d("option",{value:e},ro(a,t.contextPush(e.replace(/^minecraft:/,"")))))))}if(no(n)||"block_state_key"!==(null==n?void 0:n.validator)){const e=we(),t=p?(e=>fe.generators.find((t=>t.id===e.replace(/^\$/,""))))(p):void 0;return d(_,null,d("input",{value:null!=r?r:"",onBlur:c,onKeyDown:e=>{"Enter"===e.key&&c(e)},list:u.length>0?e:""}),u.length>0&&d("datalist",{id:e},u.map((e=>d("option",{value:e})))),t&&u.includes(r)&&r.startsWith("minecraft:")&&d("a",{href:`/${t.url}/?version=${s}&preset=${r.replace(/^minecraft:/,"")}`,class:"tooltipped tip-se","aria-label":At(a,"follow_reference")},Fe.link_external))}{const t=null==i?void 0:i[h.relativePath(e,n.params.id).get()],o=Object.keys(null!=(l=null==t?void 0:t.properties)?l:{});return d("select",{value:null!=r?r:"",onChange:c},o.map((e=>d("option",null,e))))}}const to=re((function({label:e,schema:t,path:n,value:o,lang:r,version:a,states:s,ctx:c,actions:u,children:h}){var m;const p=t.type(n),f=t.category(n),g=n.getContext().join("."),[v,w]=Te(),_=l(i({},c),{depth:(null!=(m=c.depth)?m:0)+1});delete _.index;const[y,b,x]=t.hook(qn,n,o,r,a,s,_);return d("div",{class:`node ${p}-node`,"data-category":f},d("div",{class:"node-header",onContextMenu:e=>{e.preventDefault(),w()}},d(ao,{lang:r,path:n}),d(so,{lang:r,path:n}),h,y,d("label",null,null!=e?e:ro(r,n,`${n.last()}`),v&&d("div",{class:"node-menu"},null==u?void 0:u.map((e=>{var t;return d("div",{key:e.label,class:"menu-item"},d(pe,{icon:e.icon,tooltip:At(r,e.label),tooltipLoc:"se",onClick:()=>e.onSelect()}),d("span",null,null!=(t=e.description)?t:At(r,e.label)))})),d("div",{class:"menu-item"},d(pe,{icon:"clippy",tooltip:At(r,"copy_context"),tooltipLoc:"se",onClick:()=>navigator.clipboard.writeText(g)}),d("span",null,g)))),b),x&&d("div",{class:"node-body"},x))}),((e,t)=>e.schema===t.schema&&e.lang===t.lang&&e.path.equals(t.path)&&Le(e.ctx,t.ctx)&&Le(e.value,t.value)));function no(e){return!!(null==e?void 0:e.enum)}function oo(e){var t,n=0;for(t=0;te.path.startsWith(t))):t.model.errors.get(t,!0);if(0===r.length)return null;const a=At(e,r[0].error,...null!=(o=r[0].params)?o:[]);return io("node-error","issue_opened",a)}function so({lang:e,path:t}){const n=t.contextPush("help").getContext().join("."),o=At(e,n);return o===n?null:io("node-help","info",o)}const io=(e,t,n)=>{const[o,r]=Te();return d("div",{class:`node-icon ${e}${o?" show":""}`,onClick:r},Fe[t],d("span",{class:"icon-popup"},n))};function lo(e,t){var n,o;return"decorated"!==(null==(n=null==e?void 0:e.type)?void 0:n.replace(/^minecraft:/,""))?e:ge(null==e?void 0:e.config)?(t.push({id:t.length,node:e.config.decorator}),lo(null!=(o=e.config.feature)?o:"",t)):e}function co(e,t){return 0===t.length?e:{type:"minecraft:decorated",config:{decorator:t.shift().node,feature:co(e,t)}}}function uo({version:e,model:t,blockStates:n,onError:o}){const{lang:r}=zt();if(!t||!n||"none"===r)return d(_,null);const[a]=ae((e=>{o(`Error rendering the tree: ${e.message}`),console.error(e)}));if(a)return d(_,null);const[,s]=g(0);return He(t,(()=>{s((e=>e+1))})),d("div",{class:"tree","data-cy":"tree"},d(Yn,i({},{model:t,lang:r,version:e,blockStates:n})))}function ho({term:e}){const{actualTheme:t}=Dt(),n="light"===t?"-burn":"",o=`https://${location.host}/assets/giscus${n}.css`;return d(se,{repo:"misode/misode.github.io",repoId:"MDEwOlJlcG9zaXRvcnkxOTIyNTQyMzA=",category:"Site",categoryId:"DIC_kwDOC3WRFs4COB8r",mapping:e?"specific":"pathname",term:e,reactionsEnabled:"1",emitMetadata:"0",inputPosition:"top",theme:o,lang:"en"})}const mo={system:"device_desktop",dark:"moon",light:"sun"};function po(){const{lang:e,locale:t,changeLanguage:n}=zt(),{theme:o,changeTheme:r}=Dt(),{version:a}=Rt(),{title:s}=Tt(),i=Ce(m());return d("header",null,d("div",{class:"title"},d(ie,{class:"home-link",href:"/","aria-label":t("home"),"data-cy":"home-link"},fo.home),d("h1",null,s),i&&d(Re,{icon:"chevron_down",tooltip:t("switch_generator"),"data-cy":"generator-switcher"},fe.generators.filter((e=>e.category===(null==i?void 0:i.category)&&vt(a,e.minVersion))).map((e=>d(pe,{label:t(e.id),active:e.id===i.id,onClick:()=>p(xe(e.url))}))))),d("nav",null,d("ul",null,d("li",{"data-cy":"language-switcher"},d(Re,{icon:"globe",tooltip:t("language")},fe.languages.map((({code:t,name:o})=>d(pe,{label:o,active:t===e,onClick:()=>n(t)}))))),d("li",{"data-cy":"theme-switcher"},d(Re,{icon:mo[o],tooltip:t("theme")},Object.entries(mo).map((([e,n])=>d(pe,{icon:n,label:t(`theme.${e}`),active:e===o,onClick:()=>r(e)}))))),d("li",{class:"dimmed"},d("a",{href:"https://github.com/misode/misode.github.io",target:"_blank",rel:"noreferrer",class:"tooltipped tip-sw","aria-label":t("github")},Fe.mark_github)))))}const fo={home:d("svg",{width:"32",height:"28",viewBox:"0 0 32 28",fill:"none",xmlns:"http://www.w3.org/2000/svg"},d("rect",{width:"26",height:"6",rx:"3",fill:"#7CB45C"}),d("rect",{x:"8",width:"18",height:"6",rx:"3",fill:"#4BA041"}),d("rect",{y:"11",width:"32",height:"6",rx:"3",fill:"#AAA8A8"}),d("rect",{x:"11",y:"11",width:"21",height:"6",rx:"3",fill:"#91908F"}),d("rect",{x:"11",y:"22",width:"21",height:"6",rx:"3",fill:"#70B5C3"}),d("rect",{x:"17",y:"22",width:"15",height:"6",rx:"3",fill:"#4D989B"})),report:d("svg",{width:"30",height:"36",viewBox:"0 0 30 36",xmlns:"http://www.w3.org/2000/svg"},d("path",{d:"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z",fill:"#6ACC5D"}),d("path",{d:"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z",fill:"#FF4C4C"}),d("path",{d:"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z",fill:"#E5B442"}),d("path",{d:"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z",fill:"#2BAD1D"}),d("path",{d:"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z",fill:"#C10B0B"}),d("path",{d:"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z",fill:"#CC8E00"})),sounds:d("svg",{width:"20",height:"20",viewBox:"0 0 20 20",xmlns:"http://www.w3.org/2000/svg"},d("circle",{cx:"10",cy:"10",r:"10",fill:"#451475"}),d("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z",fill:"#C5A5E6"}))};function go({sounds:e,sound:t,delay:n,pitch:o,volume:r,onEdit:a,onDelete:s,delayedPlay:i}){const{locale:l}=zt(),{version:u}=Rt(),[h,m]=g(!0),[p,v]=g(!1),[w,_]=g(!1),y=f([]),b=`playsound minecraft:${t} master @s ~ ~ ~ ${r} ${o}`;c((()=>{var n,a,s;const i=e[t];_(0===(null!=(a=null==(n=null==i?void 0:i.sounds)?void 0:n.length)?a:0)),y.current.forEach((e=>e.stop())),y.current=(null!=(s=null==i?void 0:i.sounds)?s:[]).map((e=>{const t="string"==typeof e?e:e.name,n=(a=u,s=t,`${nt(fe.versions.find((e=>e.id===a)),"assets")}/assets/minecraft/sounds/${s}.ogg`);var a,s;const i=new le.Howl({src:[n],format:["ogg"],volume:r,rate:o});i.on("end",(()=>{v(!1)}));const l=()=>{h&&y.current.every((e=>"loaded"===e.state()))&&m(!1)};return"loaded"===i.state()?setTimeout((()=>l())):i.on("load",(()=>{l()})),i})),m(!0)}),[t,e]),c((()=>{y.current.forEach((e=>e.rate(o)))}),[o]),c((()=>{y.current.forEach((e=>e.volume(r)))}),[r]);const x=()=>{if(h||w)return;k();const e=Math.floor(Math.random()*y.current.length);y.current[e].play(),v(!0)},k=()=>{y.current.forEach((e=>e.stop()))};c((()=>{i&&setTimeout((()=>x()),50*n)}),[i]),c((()=>()=>k()),[]);const[C,M]=g(!1),A=f(void 0);return d("div",{class:`sound-config${h?" loading":p?" playing":""}${w?" invalid":""}`},d(pe,{class:"play",icon:w?"alert":h?"sync":"play",label:l("sounds.play"),onClick:x,tooltip:l(w?"sounds.unknown_sound":h?"sounds.loading_sound":"sounds.play_sound"),tooltipLoc:"se"}),d(Ue,{class:"btn btn-input sound",list:"sound-list",spellcheck:!1,value:t,onChange:e=>a({sound:e})}),d("label",{class:"delay-label"},l("sounds.delay"),": "),d(Ye,{class:"btn btn-input delay",min:0,value:n,onChange:e=>a({delay:e})}),d("label",{class:"pitch-label"},l("sounds.pitch"),": "),d(qe,{class:"pitch tooltipped tip-s",min:.5,max:2,step:.01,"aria-label":o.toFixed(2),style:`--x: ${100/1.5*(o-.5)}%`,value:o,onChange:e=>a({pitch:e})}),d("label",{class:"volume-label"},l("sounds.volume"),": "),d(qe,{class:"volume tooltipped tip-s",min:0,max:1,step:.01,"aria-label":r.toFixed(2),style:`--x: ${100*r}%`,value:r,onChange:e=>a({volume:e})}),d(pe,{class:"copy"+(C?" active":""),icon:C?"check":"terminal",label:l("copy"),tooltip:l(C?"copied":"sounds.copy_command"),onClick:()=>{navigator.clipboard.writeText(b),M(!0),void 0!==A.current&&clearTimeout(A.current),A.current=setTimeout((()=>{M(!1)}),2e3)}}),d(pe,{class:"remove",icon:"trashcan",tooltip:l("sounds.remove_sound"),onClick:()=>{s(),k()}}))}function vo({title:e,desc:t,link:n,icon:o,children:r}){const a=d(_,null,d("div",{class:"tool-head"},o&&fo[o],d("div",null,d("h3",null,e),d("p",null,t))),r&&d("div",{class:"tool-body"},r));return n?d("a",{class:"tool-card",href:n},a):d("div",{class:"tool-card"},a)}function wo({entries:e,onSelect:t,indent:n}){const o=w((()=>{var t;const n={};for(const o of e){const e=o.indexOf("/");if(e>=0){const r=o.slice(0,e);(null!=(t=n[r])?t:n[r]=[]).push(o.slice(e+1))}}return Object.entries(n)}),e),r=w((()=>e.filter((e=>!e.includes("/")))),e),[a,s]=g(new Set);return d("div",{class:"tree-view",style:`--indent: ${null!=n?n:0};`},o.map((([e,o])=>d("div",null,d(_o,{icon:a.has(e)?"chevron_right":"chevron_down",key:e,label:e,onClick:()=>{return t=e,a.has(t)?a.delete(t):a.add(t),void s(new Set(a));var t}}),!a.has(e)&&d(wo,{entries:o,onSelect:n=>t(`${e}/${n}`),indent:(null!=n?n:0)+1})))),r.map((e=>d(_o,{icon:"file",key:e,label:e,onClick:()=>t(e)}))))}function _o({icon:e,label:t,onClick:n}){return d("div",{class:"entry",onClick:n},Fe[e],t)}function yo({change:e,activeTags:t,toggleTag:n}){return d("div",{class:"changelog-entry"},d("div",{class:"changelog-version"},d(bo,i({},e.version)),d(bo,i({},e.group))),d("div",{class:"changelog-tags"},e.tags.map((e=>d(xo,{label:e,onClick:n?()=>n(e):void 0,active:null==t?void 0:t.includes(e)})))),d("div",{class:"changelog-content",dangerouslySetInnerHTML:{__html:ce(e.content)}}))}function bo({id:e,article:t}){return null===t?d("span",null,e):d("a",{href:`https://www.minecraft.net/en-us/article/${t}`,target:"_blank"},e)}function xo({label:e,active:t,onClick:n}){const o="breaking"===e?5:be(e)%360;return d("div",{class:`changelog-tag${t?" active":""}${n?" clickable":""}`,style:`--tint: ${o}`,onClick:n},"breaking"===e&&Fe.alert,e)}function ko({changes:e,defaultOrder:t}){const{locale:n}=zt(),[o,r]=g(""),[a,s]=g([]),i=e=>{a.includes(e)?s(a.filter((t=>t!==e))):s([...a,e])},l=w((()=>{const t=o.split(" ").map((e=>e.trim().toLowerCase())).filter((e=>e.length>0));return 0===t.length&&0===a.length?e:null==e?void 0:e.filter((e=>{if(!a.every((t=>e.tags.includes(t))))return!1;const n=e.tags.join(" ")+" "+e.content.toLowerCase();return t.every((e=>e.startsWith("!")?1===e.length||!n.includes(e.slice(1)):n.includes(e)))}))}),[e,o,a]),[c,u]=g("desc"===t),h=w((()=>null==l?void 0:l.sort(((e,t)=>c?t.order-e.order:e.order-t.order))),[l,c]);return d(_,null,d("div",{class:"changelog-query"},d(Ue,{class:"btn btn-input changelog-search",list:"sound-list",placeholder:n("changelog.search"),value:o,onChange:r}),d(pe,{icon:c?"sort_desc":"sort_asc",label:c?"Newest first":"Oldest first",onClick:()=>u(!c)})),a.length>0&&d("div",{class:"changelog-tags"},a.map((e=>d(xo,{label:e,onClick:()=>s(a.filter((t=>t!==e)))})))),d("div",{class:"changelog-list"},void 0===h?d("span",null,n("loading")):0===h.length?d("span",null,n("changelog.no_results")):h.map((e=>d(yo,{change:e,activeTags:a,toggleTag:i})))))}function Co({version:e}){const{locale:t}=zt(),[n,o]=g("changelog"),[r,a]=g(void 0);c((()=>{Qe().then((e=>a(e.map((e=>l(i({},e),{tags:e.tags.filter((t=>t!==e.group.id))})))))).catch((e=>console.error(e)))}),[]);const s=w((()=>null==r?void 0:r.filter((t=>t.version.id===e.id||t.group.id===e.id))),[e.id,r]);return d(_,null,d("div",{class:"version-detail"},d("h2",null,e.name),d("div",{class:"version-info"},d(zo,{label:t("versions.released"),value:Mo(e)}),d(zo,{label:t("versions.release_target"),value:e.release_target,link:e.id!==e.release_target?`/versions/?id=${e.release_target}`:void 0}),d(zo,{label:t("versions.data_version"),value:e.data_version}),d(zo,{label:t("versions.protocol_version"),value:e.protocol_version}),d(zo,{label:t("versions.data_pack_format"),value:e.data_pack_version}),d(zo,{label:t("versions.resource_pack_format"),value:e.resource_pack_version})),d("div",{class:"version-tabs"},d("span",{class:"changelog"===n?"selected":"",onClick:()=>o("changelog")},t("versions.technical_changes")),d("span",{class:"discussion"===n?"selected":"",onClick:()=>o("discussion")},t("versions.discussion"))),d("div",{class:"version-tab"},"changelog"===n&&d(ko,{changes:s,defaultOrder:"asc"}),"discussion"===n&&d(ho,{term:`version/${e.id}`}))))}function Mo(e){return new Date(e.release_time).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})}function Ao({version:e,link:t}){const{locale:n}=zt();return d("a",{class:"version-entry",href:t},d("span",{class:"version-id"},e.id),d(zo,{label:n("versions.released"),value:Mo(e),compact:!0}),d(zo,{label:n("versions.data_version"),value:e.data_version,optional:!0}),d(zo,{label:n("versions.pack_format"),value:e.data_pack_version,optional:!0}))}function Io({versions:e,link:t}){const{locale:n}=zt(),[o,r]=g(!0),[a,s]=g(""),i=w((()=>e.filter((e=>!("snapshot"===e.type&&!o)&&e.id.includes(a)))),[e,o,a]);return d(_,null,d("div",{class:"versions-controls"},d(Ue,{class:"btn btn-input version-search",list:"sound-list",placeholder:n("versions.search"),value:a,onChange:s}),d(We,{label:"Include snapshots",value:o,onChange:r})),d("div",{class:"version-list"},i.map((e=>d(Ao,{version:e,link:null==t?void 0:t(e.id)}))),0===i.length&&d("span",null,n("versions.no_results"))))}function zo({label:e,value:t,link:n,compact:o,optional:r}){return d("div",{class:"version-metadata"+(r?" version-metadata-hide":"")},d("span",{class:o?"version-metadata-hide":void 0},e,": "),d("span",{class:"version-metadata-value"},t),n&&d("a",{href:n,class:"version-metadata-link"},Fe.link_external))}function jo({category:e}){const{locale:t}=zt();return Tt(t("title.generator_category",t(e))),d("main",null,d("div",{class:"category"},fe.generators.filter((t=>t.category===e)).map((e=>d(vo,{title:t(e.id),link:xe(e.url)})))))}function Eo({}){const{locale:e}=zt(),[t,n]=g(null);Tt(e("title.changelog"));const[o,r]=g([]);return c((()=>{Qe().then((e=>r(e))).catch((e=>{console.error(e),n(e)}))}),[]),d("main",null,d(me,{type:"text",id:"changelog"}),t&&d(Ge,{error:t,onDismiss:()=>n(null)}),d("div",{class:"changelog"},d(ko,{changes:o,defaultOrder:"desc"})))}function $o({}){var e;const{locale:t}=zt(),{version:n,changeVersion:o}=Rt(),{project:r,file:a,updateFile:s,openFile:u,closeFile:f}=Ot(),[v,w]=g(null),[y,b]=ae();if(y)return y.message=`Something went wrong rendering the generator: ${y.message}`,d("main",null,d(Ge,{error:y,onDismiss:b}));const x=Ce(m());if(!x)return d("main",null,d(Ge,{error:`Cannot find generator "${m()}"`}));const k=fe.versions.filter((e=>vt(e.id,x.minVersion,x.maxVersion))).map((e=>e.id));Tt(t("title.generator",t(x.id)),k),vt(n,x.minVersion)||w(`The minimum version for this generator is ${x.minVersion}`),vt(n,void 0,x.maxVersion)||w(`This generator is not available in versions above ${x.maxVersion}`);const C=Me(m()).get("preset");c((()=>{M&&C&&R(C).then((e=>{null==M||M.reset(h.DataModel.wrapLists(e),!1),Ae({version:n,preset:C})}))}),[C]);const[M,A]=g(null),[I,z]=g(null);c((()=>{w(null),A(null),async function(e){return(await gt(e)).blockStates}(n).then((e=>z(e))),async function(e,t){var n;if(!dt[t]||dt[t].version!==e){const r=await gt(e);ht=h.Reference(r.schemas,"configured_decorator"),mt=h.ChoiceNode([{type:"string",node:h.StringNode(r.collections,{validator:"resource",params:{pool:"$worldgen/configured_feature"}})},{type:"object",node:h.Reference(r.schemas,"configured_feature")}],{choiceContext:"feature"});const a=null==(n=fe.generators.find((e=>e.id===t)))?void 0:n.schema;if(!a)throw new Error(`Cannot find model ${t}`);try{const n=r.schemas.get(a),o=new h.DataModel(n,{wrapLists:!0});dt[t]?o.reset(dt[t].model.data,!1):(o.validate(!0),o.history=[JSON.stringify(o.data)]),dt[t]={model:o,version:e}}catch(o){const n=new Error(`Cannot get generator "${t}" for version "${e}": ${Oe(o)}`);throw o instanceof Error&&(n.stack=o.stack),n}}return dt[t].model}(n,x.id).then((async e=>{if(he.setGenerator(x.id),C){const t=await R(C);e.reset(h.DataModel.wrapLists(t),!1)}A(e)})).catch((e=>{console.error(e),w(e)}))}),[n,x.id]);const[j,E]=g(!1);He(M,(()=>{Ae({version:void 0,preset:void 0}),w(null),E(!0)}));const[$,O]=g(""),[S,L]=Ve(),[P,D]=Ve(),V=()=>{if($!==(null==a?void 0:a.id)&&$&&M&&I){const e=Sn(M,I);s(x.id,null==a?void 0:a.id,{id:$,data:e})?L():(D(),a&&O(null==a?void 0:a.id))}else a&&O(null==a?void 0:a.id)};c((()=>{a&&O(a.id)}),[a]),c((()=>{var e;M&&(O(null!=(e=null==a?void 0:a.id)?e:""),a&&x.id===a.type&&M.reset(h.DataModel.wrapLists(a.data)),E(!1))}),[a,M]);const N=e=>{e.ctrlKey&&"z"===e.key?(he.generatorEvent("undo","Hotkey"),null==M||M.undo()):e.ctrlKey&&"y"===e.key&&(he.generatorEvent("redo","Hotkey"),null==M||M.redo())},T=e=>{if(e.ctrlKey&&"s"===e.key&&(e.preventDefault(),M&&I&&a)){he.generatorEvent("save","Hotkey");const e=Sn(M,I);s(x.id,null==a?void 0:a.id,{id:null==a?void 0:a.id,data:e}),E(!1),L()}};c((()=>(document.addEventListener("keyup",N),document.addEventListener("keydown",T),()=>{document.removeEventListener("keyup",N),document.removeEventListener("keydown",T)})),[M,I,a]);const[B,H]=g([]);c((()=>{(async function(e){const t=await gt(e);return pt=t.collections,t.collections})(n).then((e=>{H(e.get(x.id).map((e=>e.slice(10))))})).catch((e=>{console.error(e),w(e)}))}),[n,x.id]);const R=async e=>{var t,o,r;try{const a=await st(n,null!=(t=x.path)?t:x.id,e),s=null==M?void 0:M.get(new h.Path(["generator","seed"]));return void 0!==(null==(o=null==a?void 0:a.generator)?void 0:o.seed)&&void 0!==s&&(a.generator.seed=s,void 0!==(null==(r=a.generator.biome_source)?void 0:r.seed)&&(a.generator.biome_source.seed=s)),a}catch(a){w(a instanceof Error?a:Oe(a))}},[F,G]=g(window.innerWidth>820),[W,J]=g(0),[U,Y]=g(0),[q,Z]=g(0),[X,K]=Ve(),[Q,ee]=g(!1),te=$n.includes(x.id)&&!("worldgen/configured_feature"===x.id&&vt(n,"1.18"));Q&&!te&&ee(!1);let ne=1;te&&(ne+=1),F&&(ne+=2);return d(_,null,d("main",{class:Q?"has-preview":""},d(me,{id:"data-pack-generator",type:"text"}),d("div",{class:"controls"},d("div",{class:`project-controls ${a&&"has-file"}`},d("div",{class:"btn-row"},d(Re,{icon:"repo",label:r.name,relative:!1},d(pe,{icon:"arrow_left",label:t("project.go_to"),onClick:()=>p("/project")}),a&&d(pe,{icon:"file",label:t("project.new_file"),onClick:f}),d(Ze,{searchPlaceholder:t("Drafts"===r.name?"project.search_drafts":"project.search"),noResults:t("project.no_files"),values:r.files.filter((e=>e.type===x.id)).map((e=>e.id)),onSelect:e=>u(x.id,e)})),d(Ue,{class:"btn btn-input",placeholder:t("project.unsaved_file"),value:$,onChange:O,onEnter:V,onBlur:V}),a&&d(pe,{icon:"trashcan",tooltip:t("project.delete_file"),onClick:()=>{a&&s(x.id,a.id,{})}})),j?d("div",{class:"status-icon"},Fe.dot_fill):S?d("div",{class:"status-icon active"},Fe.check):P&&d("div",{class:"status-icon danger"},Fe.x)),d("div",{class:"generator-controls"},d(pe,{icon:"upload",label:t("import"),onClick:()=>{he.generatorEvent("import"),G(!0),Z(q+1)}}),d(Re,{icon:"archive",label:t("presets"),relative:!1},d(Ze,{searchPlaceholder:t("search"),noResults:t("no_presets"),values:B,onSelect:e=>{he.generatorEvent("load-preset",e),Ae({version:n,preset:e})}})),d(Re,{icon:"tag",label:n,tooltip:t("switch_version"),"data-cy":"version-switcher"},k.reverse().map((e=>d(pe,{label:e,active:e===n,onClick:()=>o(e)})))),d(Re,{icon:"kebab_horizontal",tooltip:t("more")},d(pe,{icon:"history",label:t("reset"),onClick:()=>{he.generatorEvent("reset"),null==M||M.reset(h.DataModel.wrapLists(M.schema.default()),!0)}}),d(pe,{icon:"arrow_left",label:t("undo"),onClick:e=>{e.stopPropagation(),he.generatorEvent("undo","Menu"),null==M||M.undo()}}),d(pe,{icon:"arrow_right",label:t("redo"),onClick:e=>{e.stopPropagation(),he.generatorEvent("redo","Menu"),null==M||M.redo()}})))),v&&d(Ge,{error:v,onDismiss:()=>w(null)}),d(uo,l(i({},{model:M,version:n,blockStates:I}),{onError:w}))),d("div",{class:"popup-actions",style:`--offset: -${8+50*ne}px;`},d("div",{class:`popup-action action-preview${te?" shown":""} tooltipped tip-nw`,"aria-label":t(Q?"hide_preview":"show_preview"),onClick:()=>{he.generatorEvent("toggle-preview",Q?"hidden":"visible"),ee(!Q),!Q&&F&&G(!1)}},Q?Fe.x_circle:Fe.play),d("div",{class:`popup-action action-download${F?" shown":""} tooltipped tip-nw`,"aria-label":t("download"),onClick:()=>{he.generatorEvent("download"),Y(U+1)}},Fe.download),d("div",{class:`popup-action action-copy${F?" shown":""}${X?" active":""} tooltipped tip-nw`,"aria-label":t(X?"copied":"copy"),onClick:()=>{he.generatorEvent("copy"),J(W+1)}},X?Fe.check:Fe.clippy),d("div",{class:"popup-action action-code shown tooltipped tip-nw","aria-label":t(F?"hide_output":"show_output"),onClick:()=>{he.generatorEvent("toggle-output",F?"hidden":"visible"),G(!F),J(0),Y(0),Z(0)}},F?Fe.chevron_right:Fe.code)),d("div",{class:"popup-preview"+(Q?" shown":"")},d(On,l(i({},{model:M,version:n,id:x.id}),{shown:Q,onError:w}))),d("div",{class:"popup-source"+(F?" shown":"")},d(Vn,l(i({},{model:M,blockStates:I,doCopy:W,doDownload:U,doImport:q}),{name:null!=(e=x.schema)?e:"data",copySuccess:K,onError:w}))))}function Oo({}){const{locale:e}=zt();return Tt(e("title.home")),d("main",null,d("div",{class:"home"},d(vo,{title:"Data packs"},fe.generators.filter((e=>!e.category)).map((t=>d(vo,{title:e(t.id),link:xe(t.url)}))),d(vo,{title:e("worldgen"),link:"/worldgen/"})),d(vo,{title:"Resource packs"},fe.generators.filter((e=>"assets"===e.category)).map((t=>d(vo,{title:e(t.id),link:xe(t.url)})))),d(vo,{title:"Report Inspector",icon:"report",link:"https://misode.github.io/report/",desc:"Analyse your performance reports"}),d(vo,{title:"Minecraft Sounds",icon:"sounds",link:"/sounds/",desc:"Browse through and mix all the vanilla sounds"}),d(vo,{title:"Data Pack Upgrader",link:"https://misode.github.io/upgrader/",desc:"Convert your data packs from 1.16 to 1.17 to 1.18"}),d(vo,{title:"Technical Changelog",link:"/changelog/"}),d(vo,{title:"Minecraft Versions",link:"/versions/"}),d(ho,null)))}function So({}){const{locale:e}=zt(),{project:t,openFile:n}=Ot();Tt(e("title.project",t.name));const o=w((()=>t.files.map(Lt)),t.files);return d("main",null,d(me,{id:"data-pack-project",type:"text"}),d("div",{class:"project"},d("h2",null,t.name),d("div",{class:"file-view"},d(wo,{entries:o,onSelect:e=>{const[,t,o,...r]=e.split("/");n(o,`${t}:${r}`)}}))))}function Lo({}){const{locale:e}=zt(),{version:t,changeVersion:n}=Rt(),[o,r]=g(null);Tt(e("title.sounds"));const[a,s]=g({}),u=Object.keys(null!=a?a:{});c((()=>{(async function(e){const t=fe.versions.find((t=>t.id===e));await ot(t);try{const e=`${nt(t,"summary")}/sounds/data.min.json`;return await it(e)}catch(n){throw new Error(`Error occurred while fetching sounds for ${t}: ${Oe(n)}`)}})(t).then(s).catch((e=>{console.error(e),r(e)}))}),[t]);const[h,m]=g(""),[p,v]=g([]),w=()=>{v([{id:we(),sound:h,delay:0,pitch:1,volume:1},...p])},y=e=>()=>{v(p.filter((t=>t.id!==e)))},[b,x]=g(0),k=f(null);return d("main",null,o&&d(Ge,{error:o,onDismiss:()=>r(null)}),u.length>0&&d(_,null,d("div",{class:"controls sounds-controls"},d("div",{class:"sound-search-group"},d(Ue,{class:"btn btn-input sound-search",list:"sound-list",placeholder:e("sounds.search"),value:h,onChange:m,onEnter:w}),d(pe,{icon:"plus",tooltip:e("sounds.add_sound"),class:"add-sound",onClick:w})),p.length>1&&d(pe,{icon:"play",label:e("sounds.play_all"),class:"play-all-sounds",onClick:()=>{x(b+1)}}),d("div",{class:"spacer"}),d(pe,{icon:"download",label:e("download"),tooltip:e("sounds.download_function"),class:"download-sounds",onClick:()=>{const e=p.some((e=>e.delay>0)),t=p.sort(((e,t)=>e.delay-t.delay)).map((t=>`${e?`execute if score @s delay matches ${t.delay} run `:""}playsound minecraft:${t.sound} master @s ~ ~ ~ ${t.volume} ${t.pitch}`)).join("\n");k.current.setAttribute("href","data:text/plain;charset=utf-8,"+t+"%0A"),k.current.setAttribute("download","sounds.mcfunction"),k.current.click()}}),d(Re,{icon:"tag",label:t},fe.versions.reverse().map((e=>d(pe,{label:e.id,active:e.id===t,onClick:()=>n(e.id)}))))),d("div",{class:"sounds"},p.map((e=>{return d(go,l(i(i({key:e.id},e),{sounds:a,delayedPlay:b}),{onEdit:(t=e.id,e=>{v(p.map((n=>n.id===t?i(i({},n),e):n)))}),onDelete:y(e.id)}));var t}))),d("a",{ref:k,style:"display: none;"})),d("datalist",{id:"sound-list"},u.map((e=>d("option",{key:e,value:e})))))}function Po({}){const{locale:e}=zt(),[t,n]=g(null);Tt(e("title.versions"));const[o,r]=g([]);c((()=>{(async function(){const e=fe.versions[fe.versions.length-1];await ot(e);try{return it(`${nt(e,"summary")}/versions/data.min.json`)}catch(t){throw new Error(`Error occured while fetching versions: ${Oe(t)}`)}})().then((e=>r(e))).catch((e=>{console.error(e),n(e)}))}),[]);const a=Me(m()).get("id"),s=o.find((e=>e.id===a));Tt(s?s.name:"Versions Explorer",s?[]:void 0);const l=s&&Do(o,s,-1),u=s&&Do(o,s,1);return d("main",null,d(me,{type:"text",id:"versions"}),t&&d(Ge,{error:t,onDismiss:()=>n(null)}),d("div",{class:"versions"},s?d(_,null,d("div",{class:"version-navigation"},d("a",{class:"btn btn-link",href:"/versions/"},Fe.three_bars,e("versions.all")),d("a",i({class:"btn btn-link"},u?{href:`/versions/?id=${u.id}`}:{disabled:!0}),Fe.arrow_left,e("versions.previous")),d("a",i({class:"btn btn-link"},l?{href:`/versions/?id=${l.id}`}:{disabled:!0}),e("versions.next"),Fe.arrow_right)),d(Co,{version:s})):d(Io,{versions:o,link:e=>`/versions/?id=${e}`})))}function Do(e,t,n){const o=e.findIndex((e=>e.id===t.id))+n;if(!(o<0||o>=e.length))return e[o]}function Vo(){return d(_,null,d(po,null),d(de,{onChange:e=>{setTimeout((()=>he.pageview(xe(e.url))))}},d(Oo,{path:"/"}),d(jo,{path:"/worldgen",category:"worldgen"}),d(jo,{path:"/assets",category:"assets"}),d(Lo,{path:"/sounds"}),d(Eo,{path:"/changelog"}),d(Po,{path:"/versions"}),d(So,{path:"/project"}),d($o,{default:!0})))}function No(){return d(jt,null,d(Vt,null,d(Ft,null,d(Bt,null,d(St,null,d(Vo,null))))))}ue(d(No,null),document.body); +//# sourceMappingURL=index.301407da.js.map diff --git a/assets/index.1a21c031.js.map b/assets/index.301407da.js.map similarity index 99% rename from assets/index.1a21c031.js.map rename to assets/index.301407da.js.map index d2b7470d..121cc476 100644 --- a/assets/index.1a21c031.js.map +++ b/assets/index.301407da.js.map @@ -1 +1 @@ -{"version":3,"file":"index.1a21c031.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/Utils.ts","../../src/app/components/BtnInput.tsx","../../src/app/hooks/useActiveTimout.ts","../../src/app/hooks/useCanvas.ts","../../src/app/hooks/useFocus.ts","../../src/app/hooks/useMediaQuery.ts","../../src/app/hooks/useModel.ts","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../src/app/components/forms/Checkbox.tsx","../../src/app/components/forms/Input.tsx","../../src/app/components/forms/SearchList.tsx","../../src/app/services/Changelogs.ts","../../src/app/services/DataFetcher.ts","../../src/app/services/Schemas.ts","../../vite/preload-helper","../../src/app/Store.ts","../../src/app/contexts/Locale.tsx","../../src/app/contexts/Project.tsx","../../src/app/contexts/Theme.tsx","../../src/app/contexts/Title.tsx","../../src/app/contexts/Version.tsx","../../src/app/previews/BiomeSource.ts","../../src/app/previews/Decorator.ts","../../src/app/previews/noise/NoiseChunkGenerator.ts","../../src/app/previews/NoiseSettings.ts","../../src/app/components/previews/BiomeSourcePreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/components/previews/DensityFunctionPreview.tsx","../../src/app/components/previews/NoisePreview.tsx","../../src/app/previews/NormalNoise.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/generator/PreviewPanel.tsx","../../src/app/schema/transformOutput.ts","../../src/app/components/generator/SourcePanel.tsx","../../src/app/schema/ModelWrapper.ts","../../src/app/schema/renderHtml.tsx","../../src/app/components/generator/Tree.tsx","../../src/app/components/Giscus.tsx","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/components/sounds/SoundConfig.tsx","../../src/app/components/ToolCard.tsx","../../src/app/components/TreeView.tsx","../../src/app/components/versions/ChangelogEntry.tsx","../../src/app/components/versions/ChangelogTag.tsx","../../src/app/components/versions/ChangelogList.tsx","../../src/app/components/versions/VersionDetail.tsx","../../src/app/components/versions/VersionEntry.tsx","../../src/app/components/versions/VersionList.tsx","../../src/app/components/versions/VersionMetaData.tsx","../../src/app/pages/Category.tsx","../../src/app/pages/Changelog.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Project.tsx","../../src/app/pages/Sounds.tsx","../../src/app/pages/Versions.tsx","../../src/app/App.tsx","../../src/app/Main.tsx"],"sourcesContent":["export namespace Analytics {\n\tconst ID_SITE = 'Site'\n\tconst ID_GENERATOR = 'Generator'\n\n\tconst DIM_THEME = 1\n\tconst DIM_VERSION = 3\n\tconst DIM_LANGUAGE = 4\n\tconst DIM_PREVIEW = 5\n\tconst DIM_GENERATOR = 6\n\tconst DIM_PREFERS_COLOR_SCHEME = 7\n\n\tfunction event(category: string, action: string, label?: string) {\n\t\tga('send', 'event', category, action, label)\n\t}\n\n\tfunction dimension(index: number, value: string) {\n\t\tga('set', `dimension${index}`, value)\n\t}\n\n\texport function pageview(page: string) {\n\t\tga('set', 'page', page)\n\t\tga('send', 'pageview')\n\t}\n\n\texport function setLanguage(language: string) {\n\t\tdimension(DIM_LANGUAGE, language)\n\t\tevent(ID_SITE, 'set-language', language)\n\t}\n\n\texport function setTheme(theme: string) {\n\t\tdimension(DIM_THEME, theme)\n\t\tevent(ID_SITE, 'set-theme', theme)\n\t}\n\n\texport function setVersion(version: string) {\n\t\tdimension(DIM_VERSION, version)\n\t\tevent(ID_GENERATOR, 'set-version', version)\n\t}\n\n\texport function setPreview(preview: string) {\n\t\tdimension(DIM_PREVIEW, preview)\n\t\tevent(ID_GENERATOR, 'set-preview', preview)\n\t}\n\n\texport function setGenerator(generator: string) {\n\t\tdimension(DIM_GENERATOR, generator)\n\t}\n\n\texport function setPrefersColorScheme(colorScheme: string) {\n\t\tdimension(DIM_PREFERS_COLOR_SCHEME, colorScheme)\n\t}\n\n\texport function generatorEvent(action: string, label?: string) {\n\t\tevent(ID_GENERATOR, action, label)\n\t}\n}\n","import { useEffect } from 'preact/hooks'\n\ndeclare const ethicalads: any\n\ntype AdProps = {\n\ttype: 'text' | 'image',\n\tid: string,\n}\nexport function Ad({ type, id }: AdProps) {\n\tuseEffect(() => {\n\t\tdocument.getElementById('ad-placeholder')?.remove()\n\t\tif ('ethicalads' in window) {\n\t\t\tethicalads.load()\n\t\t}\n\t}, [])\n\n\treturn
\n}\n","import { Octicon } from '.'\n\ntype BtnProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tactive?: boolean,\n\ttooltip?: string,\n\ttooltipLoc?: 'se' | 'sw' | 'nw',\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: clazz, tooltip, tooltipLoc, onClick }: BtnProps) {\n\treturn
\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t
\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { getCurrentUrl, route } from 'preact-router'\nimport rfdc from 'rfdc'\nimport config from '../config.json'\n\nexport function isPromise(obj: any): obj is Promise {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nexport function isObject(obj: any) {\n\treturn typeof obj === 'object' && obj !== null\n}\n\nconst dec2hex = (dec: number) => ('0' + dec.toString(16)).substr(-2)\n\nexport function hexId(length = 12) {\n\tvar arr = new Uint8Array(length / 2)\n\twindow.crypto.getRandomValues(arr)\n\treturn Array.from(arr, dec2hex).join('')\n}\n\nexport function randomSeed() {\n\treturn BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER))\n}\n\nexport function newSeed(model: DataModel) {\n\tconst seed = Math.floor(Math.random() * (4294967296)) - 2147483648\n\tconst dimensions = model.get(new Path(['dimensions']))\n\tmodel.set(new Path(['seed']), seed, true)\n\tif (typeof dimensions === 'object' && dimensions !== null) {\n\t\tObject.keys(dimensions).forEach(id => {\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'seed']), seed, true)\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'biome_source', 'seed']), seed, true)\n\t\t})\n\t}\n\tmodel.set(new Path(['generator', 'seed']), seed, true)\n\tmodel.set(new Path(['generator', 'biome_source', 'seed']), seed)\n}\n\nexport function htmlEncode(str: string) {\n\treturn str.replace(/&/g, '&').replace(//g, '>')\n\t\t.replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/')\n}\n\nexport function hashString(s: string) {\n\tlet h = 0\n\tfor(let i = 0; i < s.length; i++)\n\t\th = Math.imul(31, h) + s.charCodeAt(i) | 0\n\treturn h\n}\n\nexport function cleanUrl(url: string) {\n\treturn `/${url}/`.replaceAll('//', '/')\n}\n\nexport function getPath(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(0, searchIndex)\n\t}\n\treturn cleanUrl(url)\n}\n\nexport function getGenerator(url: string) {\n\tconst trimmedUrl = getPath(url).replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\n}\n\nexport function getSearchParams(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(searchIndex + 1)\n\t\treturn new Map(url.split('&').map<[string, string]>(param => {\n\t\t\tconst index = param.indexOf('=')\n\t\t\tif (index === -1) return [param, 'true']\n\t\t\treturn [decodeURIComponent(param.slice(0, index)), decodeURIComponent(param.slice(index + 1))]\n\t\t}))\n\t}\n\treturn new Map()\n}\n\nexport function setSeachParams(modifications: Record, newPath?: string) {\n\tconst url = getCurrentUrl()\n\tconst searchParams = getSearchParams(url)\n\tObject.entries(modifications).forEach(([key, value]) => {\n\t\tif (value === undefined) searchParams.delete(key)\n\t\telse searchParams.set(key, value)\n\t})\n\tconst search = Array.from(searchParams).map(([key, value]) =>\n\t\t`${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n\troute(`${newPath ? cleanUrl(newPath) : getPath(url)}${search.length === 0 ? '' : `?${search.join('&')}`}`, true)\n}\n\nexport function stringToColor(str: string): [number, number, number] {\n\tconst h = Math.abs(hashString(str))\n\treturn [h % 256, (h >> 8) % 256, (h >> 16) % 256]\n}\n\nexport function square(a: number) {\n\treturn a * a\n}\n\nexport function clamp(a: number, b: number, c: number) {\n\treturn Math.max(a, Math.min(b, c))\n}\n\nexport function clampedLerp(a: number, b: number, c: number): number {\n\tif (c < 0) {\n\t\treturn a\n\t} else if (c > 1) {\n\t\treturn b\n\t} else {\n\t\treturn lerp(c, a, b)\n\t}\n}\n\nexport function lerp(a: number, b: number, c: number): number {\n\treturn b + a * (c - b)\n}\n\nexport function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {\n\treturn lerp(b, lerp(a, c, d), lerp(a, e, f))\n}\n\nexport function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {\n\treturn lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))\n}\n\nexport function smoothstep(x: number): number {\n\treturn x * x * x * (x * (x * 6 - 15) + 10)\n}\n\nexport function message(e: unknown): string {\n\tif (e instanceof Error) return e.message\n\treturn `${e}`\n}\n\nexport const deepClone = rfdc()\n\n/**\n * MIT License\n * \n * Copyright (c) 2017 Evgeny Poberezkin\n * \n * https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE\n */\nexport function deepEqual(a: any, b: any) {\n\tif (a === b) return true\n\n\tif (a && b && typeof a == 'object' && typeof b == 'object') {\n\t\tif (a.constructor !== b.constructor) return false\n\t\tlet length, i\n\t\tif (Array.isArray(a)) {\n\t\t\tlength = a.length\n\t\t\tif (length != b.length) return false\n\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\tif (!deepEqual(a[i], b[i])) return false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tif (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf()\n\t\tif (a.toString !== Object.prototype.toString) return a.toString() === b.toString()\n\t\tconst keys = Object.keys(a)\n\t\tlength = keys.length\n\t\tif (length !== Object.keys(b).length) return false\n\t\tfor (i = length; i-- !== 0;)\n\t\t\tif (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false\n\t\tfor (i = length; i-- !== 0;) {\n\t\t\tconst key = keys[i]\n\t\t\tif (!deepEqual(a[key], b[key])) return false\n\t\t}\n\t\treturn true\n\t}\n\treturn a !== a && b !== b\n}\n\nexport class BiMap {\n\tprivate readonly forward: Map\n\tprivate readonly backward: Map\n\n\tconstructor() {\n\t\tthis.forward = new Map()\n\t\tthis.backward = new Map()\n\t}\n\n\tpublic set(a: A, b: B) {\n\t\tthis.forward.set(a, b)\n\t\tthis.backward.set(b, a)\n\t}\n\n\tpublic getA(key: B) {\n\t\treturn this.backward.get(key)\n\t}\n\n\tpublic getB(key: A) {\n\t\treturn this.forward.get(key)\n\t}\n\n\tpublic getOrPut(key: A, defaultValue: B) {\n\t\tconst b = this.forward.get(key)\n\t\tif (b === undefined) {\n\t\t\tthis.set(key, defaultValue)\n\t\t\treturn defaultValue\n\t\t}\n\t\treturn b\n\t}\n}\n","import { useEffect, useRef } from 'preact/hooks'\nimport { Octicon } from '.'\nimport { hexId } from '../Utils'\n\ntype BtnInputProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tlarge?: boolean,\n\tlarger?: boolean,\n\tdoSelect?: number,\n\tvalue?: string,\n\tplaceholder?: string,\n\tdataList?: string[],\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, larger, doSelect, value, placeholder, dataList, onChange }: BtnInputProps) {\n\tconst onInput = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tonChange?.(value)\n\t}\n\n\tconst ref = useRef(null)\n\tuseEffect(() => {\n\t\tif (doSelect && ref.current) {\n\t\t\tref.current.select()\n\t\t}\n\t}, [doSelect])\n\n\tconst dataListId = dataList && hexId()\n\n\treturn
e.stopPropagation()}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && {label}}\n\t\t\n\t\t{dataList && \n\t\t\t{dataList.map(e => }\n\t
\n}\n","import { useRef, useState } from 'preact/hooks'\n\ninterface ActiveTimeoutOptions {\n\tcooldown?: number,\n\tinvert?: boolean,\n\tinitial?: boolean,\n}\nexport function useActiveTimeout({ cooldown, invert, initial }: ActiveTimeoutOptions = {}): [boolean | undefined, () => unknown] {\n\tconst [active, setActive] = useState(initial)\n\tconst timeout = useRef(undefined)\n\n\tconst trigger = () => {\n\t\tsetActive(invert ? false : true)\n\t\tif (timeout.current !== undefined) clearTimeout(timeout.current)\n\t\ttimeout.current = setTimeout(() => {\n\t\t\tsetActive(invert ? true : false)\n\t\t}, cooldown ?? 2000) as any\n\t}\n\n\treturn [active, trigger]\n}\n","import type { Inputs } from 'preact/hooks'\nimport { useEffect, useRef } from 'preact/hooks'\n\ntype Vec2 = [number, number]\n\nexport function useCanvas({ size, draw, onDrag, onHover, onLeave }: {\n\tsize: () => Vec2,\n\tdraw: (img: ImageData) => Promise,\n\tonDrag?: (dx: number, dy: number) => Promise,\n\tonHover?: (x: number, y: number) => unknown,\n\tonLeave?: () => unknown,\n}, inputs?: Inputs) {\n\tconst canvas = useRef(null)\n\n\tconst dragStart = useRef()\n\tconst dragRequest = useRef()\n\tconst dragPending = useRef([0, 0])\n\tconst dragBusy = useRef(false)\n\n\tuseEffect(() => {\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (dragStart.current === undefined) {\n\t\t\t\tconst x = e.offsetX / canvas.current.clientWidth\n\t\t\t\tconst y = e.offsetY / canvas.current.clientHeight\n\t\t\t\tonHover?.(x, y)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!onDrag) return\n\t\t\tconst dx = e.offsetX - dragStart.current[0]\n\t\t\tconst dy = e.offsetY - dragStart.current[1]\n\t\t\tif (!(dx === 0 && dy === 0)) {\n\t\t\t\tdragPending.current = [dragPending.current[0] + dx, dragPending.current[1] + dy]\n\t\t\t\tif (!dragBusy.current) {\n\t\t\t\t\tcancelAnimationFrame(dragRequest.current)\n\t\t\t\t\tdragRequest.current = requestAnimationFrame(async () => {\n\t\t\t\t\t\tdragBusy.current = true\n\t\t\t\t\t\tconst dx = dragPending.current[0] / canvas.current.clientWidth\n\t\t\t\t\t\tconst dy = dragPending.current[1] / canvas.current.clientHeight\n\t\t\t\t\t\tdragPending.current = [0, 0]\n\t\t\t\t\t\tawait onDrag?.(dx, dy)\n\t\t\t\t\t\tdragBusy.current = false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseUp = () => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\t\tconst onMouseLeave = () => {\n\t\t\tonLeave?.()\n\t\t}\n\n\t\tcanvas.current.addEventListener('mousedown', onMouseDown)\n\t\tcanvas.current.addEventListener('mousemove', onMouseMove)\n\t\tcanvas.current.addEventListener('mouseleave', onMouseLeave)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\n\t\treturn () => {\n\t\t\tcanvas.current?.removeEventListener('mousedown', onMouseDown)\n\t\t\tcanvas.current?.removeEventListener('mousemove', onMouseMove)\n\t\t\tcanvas.current?.removeEventListener('mouseleave', onMouseLeave)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [...inputs ?? [], canvas.current])\n\n\tconst redraw = useRef<() => Promise>()\n\tconst redrawCount = useRef(0)\n\tredraw.current = async () => {\n\t\tconst ctx = canvas.current.getContext('2d')!\n\t\tconst s = size()\n\t\tcanvas.current.width = s[0]\n\t\tcanvas.current.height = s[1]\n\t\tconst img = ctx.getImageData(0, 0, s[0], s[1])\n\t\tconst ownCount = redrawCount.current += 1\n\t\ttry {\n\t\t\tawait draw(img)\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t\tif (ownCount === redrawCount.current) {\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t}\n\n\treturn {\n\t\tcanvas,\n\t\tredraw: redraw.current,\n\t}\n}\n","import { useEffect, useState } from 'preact/hooks'\n\nexport function useFocus(): [boolean, () => unknown] {\n\tconst [active, setActive] = useState(false)\n\n\tconst hider = () => {\n\t\tsetActive(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active) {\n\t\t\tdocument.body.addEventListener('click', hider)\n\t\t\tdocument.body.addEventListener('contextmenu', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t\tdocument.body.removeEventListener('contextmenu', hider)\n\t\t}\n\t}, [active])\n\n\treturn [active, () => setActive(true)]\n}\n","import { useEffect, useState } from 'preact/hooks'\n\nexport function useMediaQuery(query: string): boolean {\n\tconst [prefers, setPrefers] = useState(matchMedia(query).matches)\n\n\tconst onChange = (e: MediaQueryListEvent) => {\n\t\tsetPrefers(e.matches)\n\t}\n\n\tuseEffect(() => {\n\t\tconst mediaQuery = matchMedia(query)\n\t\tmediaQuery.addEventListener('change', onChange)\n\t\treturn () => {\n\t\t\tmediaQuery.removeEventListener('change', onChange)\n\t\t}\n\t}, [query])\n\n\treturn prefers\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect } from 'preact/hooks'\n\nexport function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown) {\n\tconst listener = {\n\t\tinvalidated() {\n\t\t\tif (model) {\n\t\t\t\tinvalidated(model)\n\t\t\t}\n\t\t},\n\t}\n\n\tuseEffect(() => {\n\t\tmodel?.addListener(listener)\n\t\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import type { ComponentChildren } from 'preact'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\nimport { useFocus } from '../hooks'\n\ninterface BtnMenuProps extends JSX.HTMLAttributes {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\ttooltip?: string,\n\ttooltipLoc?: 'se' | 'sw' | 'nw',\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu(props: BtnMenuProps) {\n\tconst { icon, label, relative, tooltip, tooltipLoc, children } = props\n\tconst [active, setActive] = useFocus()\n\n\treturn
\n\t\t\n\t\t{active &&
\n\t\t\t{children}\n\t\t
}\n\t
\n}\n","export const Octicon = {\n\talert: ,\n\tarchive: ,\n\tarrow_left: ,\n\tarrow_right: ,\n\tcheck: ,\n\tchevron_down: ,\n\tchevron_right: ,\n\tchevron_up: ,\n\tclippy: ,\n\tcode: ,\n\tdash: ,\n\tdevice_desktop: ,\n\tdot_fill: ,\n\tdownload: ,\n\tduplicate: ,\n\teye: ,\n\teye_closed: ,\n\tfile: ,\n\tfile_directory: ,\n\tgear: ,\n\tglobe: ,\n\thistory: ,\n\tinfo: ,\n\tissue_opened: ,\n\tkebab_horizontal: ,\n\tlink: ,\n\tlink_external: ,\n\tmark_github: ,\n\tmoon: ,\n\tplay: ,\n\tplus: ,\n\tplus_circle: ,\n\trepo: ,\n\tsearch: ,\n\tsort_asc: ,\n\tsort_desc: ,\n\tsquare: ,\n\tsquare_fill: ,\n\tstack: ,\n\tsun: ,\n\tsync: ,\n\ttag: ,\n\tterminal: ,\n\tthree_bars: ,\n\ttrashcan: ,\n\tunfold: ,\n\tupload: ,\n\tx: ,\n\tx_circle: ,\n}\n","import { useEffect, useMemo, useState } from 'preact/hooks'\nimport { mapStackTrace } from 'sourcemapped-stacktrace'\nimport { Octicon } from './Octicon'\n\ntype ErrorPanelProps = {\n\terror: string | Error,\n\tonDismiss?: () => unknown,\n}\nexport function ErrorPanel({ error, onDismiss }: ErrorPanelProps) {\n\tconst [stackVisible, setStackVisible] = useState(false)\n\tconst [stack, setStack] = useState(undefined)\n\n\tuseEffect(() => {\n\t\tif (error instanceof Error) {\n\t\t\tconst stack = error.stack!.split('\\n').map(line => {\n\t\t\t\treturn line.replace(/^(\\s+)at (?:async )?(https?:.*)/, '$1at ($2)')\n\t\t\t})\n\t\t\tsetStack(stack.join('\\n'))\n\t\t\tmapStackTrace(stack.join('\\n'), (mapped) => {\n\t\t\t\tconst mappedStack = mapped.map(line => {\n\t\t\t\t\treturn line.replace(/..\\/..\\/src\\//, 'src/')\n\t\t\t\t}).join('\\n')\n\t\t\t\tsetStack(mappedStack)\n\t\t\t})\n\t\t}\n\t}, [error])\n\n\tconst url = useMemo(() => {\n\t\tlet url ='https://github.com/misode/misode.github.io/issues/new'\n\t\tif (error instanceof Error) {\n\t\t\turl += `?title=${encodeURIComponent(`${error.name}: ${error.message}`)}`\n\t\t\tif (stack) {\n\t\t\t\turl += `&body=${encodeURIComponent(`\\`\\`\\`\\n${error.name}: ${error.message}\\n${stack}\\n\\`\\`\\`\\n`)}`\n\t\t\t}\n\t\t} else {\n\t\t\turl += `?title=${encodeURIComponent(error.toString())}`\n\t\t}\n\t\treturn url\n\t}, [error, stack])\n\n\treturn
\n\t\t{onDismiss &&
{Octicon.x}
}\n\t\t

\n\t\t\t{error instanceof Error ? error.message : error}\n\t\t\t{stack && setStackVisible(!stackVisible)}>\n\t\t\t\t{Octicon.info}\n\t\t\t}\n\t\t

\n\t\t{stack && stackVisible &&
{stack}
}\n\t\t

If you think this is a bug, you can report it on GitHub

\n\t
\n}\n","import { hexId } from '../../Utils'\n\ninterface Props {\n\tlabel: string,\n\tvalue: boolean,\n\tonChange: (value: boolean) => unknown,\n}\nexport function Checkbox({ label, value, onChange }: Props) {\n\tconst id = hexId()\n\treturn \n}\n","import type { JSXInternal } from 'preact/src/jsx'\n\ntype InputProps = JSXInternal.HTMLAttributes\n\ntype BaseInputProps = Omit & {\n\tonChange?: (value: T) => unknown,\n\tonEnter?: (value: T) => unknown,\n}\nfunction BaseInput(name: string, type: string, fn: (value: string) => T) {\n\tconst component = (props: BaseInputProps) => {\n\t\tconst onChange = props.onChange && ((evt: Event) => {\n\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\tprops.onChange?.(fn(value))\n\t\t})\n\t\tconst onKeyDown = props.onEnter && ((evt: KeyboardEvent) => {\n\t\t\tif (evt.key === 'Enter') {\n\t\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\t\tprops.onEnter?.(fn(value))\n\t\t\t}\n\t\t})\n\t\treturn \n\t}\n\tcomponent.displayName = name\n\treturn component\n}\n\nexport const TextInput = BaseInput('TextInput', 'text', v => v)\n\nexport const NumberInput = BaseInput('NumberInput', 'number', v => Number(v))\n\nexport const RangeInput = BaseInput('RangeInput', 'range', v => Number(v))\n","import { useMemo, useState } from 'preact/hooks'\nimport { Btn, BtnInput } from '..'\n\ninterface Props {\n\tvalues?: string[],\n\tonSelect?: (value: string) => unknown,\n\tsearchPlaceholder?: string,\n\tnoResults?: string,\n}\nexport function SearchList({ values, onSelect, searchPlaceholder, noResults }: Props) {\n\tconst [search, setSearch] = useState('')\n\tconst results = useMemo(() => {\n\t\tconst terms = search.trim().split(' ')\n\t\treturn values?.filter(v => terms.every(t => v.includes(t))) ?? []\n\t}, [values, search])\n\n\treturn <>\n\t\t\n\t\t
\n\t\t\t{results.map(v => onSelect?.(v)} />)}\n\t\t\t{results.length === 0 && }\n\t\t
\n\t\n}\n","import { isObject } from '../Utils'\n\nconst repo = 'https://raw.githubusercontent.com/misode/technical-changes/main'\n\nexport type Change = {\n\tgroup: ChangelogVersion,\n\tversion: ChangelogVersion,\n\torder: number,\n\ttags: string[],\n\tcontent: string,\n}\n\nexport type ChangelogVersion = {\n\tid: string,\n\tarticle: string | null,\n}\n\nlet Changelogs: Change[] | Promise | null = null\n\nexport async function getChangelogs() {\n\tif (!Changelogs) {\n\t\tconst index = await (await fetch(`${repo}/index.json`)).json() as string[]\n\t\tChangelogs = (await Promise.all(\n\t\t\tindex.map((group, i) => fetchGroup(parseVersion(group), i))\n\t\t)).flat().map(change => ({\n\t\t\t...change,\n\t\t\ttags: [change.group.id, ...change.tags],\n\t\t}))\n\t}\n\treturn Changelogs\n}\n\nasync function fetchGroup(group: ChangelogVersion, groupIndex: number) {\n\tconst index = await (await fetch(`${repo}/${group.id}/index.json`)).json() as string[]\n\treturn (await Promise.all(\n\t\tindex.map((version, i) => fetchChangelog(group, parseVersion(version), groupIndex, i))\n\t)).flat()\n}\n\nasync function fetchChangelog(group: ChangelogVersion, version: ChangelogVersion, groupIndex: number, versionIndex: number) {\n\tconst text = await (await fetch(`${repo}/${group.id}/${version.id}.md`)).text()\n\treturn parseChangelog(text).map(change => ({\n\t\tversion,\n\t\tgroup,\n\t\torder: groupIndex * 1000 + versionIndex,\n\t\t...change,\n\t}))\n}\n\nfunction parseChangelog(text: string) {\n\treturn text.split('\\n\\n')\n\t\t.map(entry => {\n\t\t\tconst i = entry.indexOf('|')\n\t\t\treturn {\n\t\t\t\ttags: entry.substring(0, i).trim().split(' '),\n\t\t\t\tcontent: entry.slice(i + 1).trim()\n\t\t\t\t\t.replaceAll('->', '→')\n\t\t\t\t\t.replaceAll('\\n...\\n', '\\n\\n'),\n\t\t\t}\n\t\t})\n}\n\nfunction parseVersion(version: unknown): ChangelogVersion {\n\tif (typeof version === 'string') {\n\t\treturn {\n\t\t\tid: version,\n\t\t\tarticle: version.match(/\\d\\dw\\d\\d[a-z]/) ? 'minecraft-snapshot-' + version : version.match(/\\d+\\.\\d+(\\.\\d+)?-pre[0-9]+/) ? 'minecraft-' + version.replaceAll('.', '-').replaceAll('pre', 'pre-release-') : null,\n\t\t}\n\t} else if (isObject(version)) {\n\t\treturn version as ChangelogVersion\n\t}\n\treturn { id: 'unknown', article: null }\n}\n","import type { CollectionRegistry } from '@mcschema/core';\nimport config from '../../config.json';\nimport { message } from '../Utils';\nimport type { BlockStateRegistry, VersionId } from './Schemas';\n\n// Cleanup old caches\n['1.15', '1.16', '1.17'].forEach(v => localStorage.removeItem(`cache_${v}`));\n['mcdata_master', 'vanilla_datapack_summary'].forEach(v => localStorage.removeItem(`cached_${v}`))\ncaches.delete('misode-v1')\n\nconst CACHE_NAME = 'misode-v2'\nconst CACHE_LATEST_VERSION = 'cached_latest_version'\n\ntype Version = {\n\tid: string,\n\tref?: string,\n\tdynamic?: boolean,\n}\n\ndeclare var __LATEST_VERSION__: string\nconst latestVersion = __LATEST_VERSION__ ?? ''\nconst mcmetaUrl = 'https://raw.githubusercontent.com/misode/mcmeta'\n\ntype McmetaTypes = 'summary' | 'data' | 'assets' | 'registries'\n\nfunction mcmeta(version: { dynamic: true } | { dynamic?: false, ref?: string}, type: McmetaTypes) {\n\treturn `${mcmetaUrl}/${version.dynamic ? type : `${version.ref}-${type}`}`\n}\n\nasync function validateCache(version: Version) {\n\tif (version.dynamic) {\n\t\tif (localStorage.getItem(CACHE_LATEST_VERSION) !== latestVersion) {\n\t\t\tawait deleteMatching(url => url.startsWith(`${mcmetaUrl}/summary/`) || url.startsWith(`${mcmetaUrl}/data/`))\n\t\t\tlocalStorage.setItem(CACHE_LATEST_VERSION, latestVersion)\n\t\t}\n\t\tversion.ref = latestVersion\n\t}\n}\n\nexport async function fetchData(versionId: string, collectionTarget: CollectionRegistry, blockStateTarget: BlockStateRegistry) {\n\tconst version = config.versions.find(v => v.id === versionId) as Version | undefined\n\tif (!version) {\n\t\tconsole.error(`[fetchData] Unknown version ${version} in ${JSON.stringify(config.versions)}`)\n\t\treturn\n\t}\n\n\tawait validateCache(version)\n\n\tawait Promise.all([\n\t\tfetchRegistries(version, collectionTarget),\n\t\tfetchBlockStateMap(version, blockStateTarget),\n\t])\n}\n\nasync function fetchRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchRegistries] ${version.id}`)\n\ttry {\n\t\tconst data = await getData(`${mcmeta(version, 'summary')}/registries/data.min.json`)\n\t\tfor (const id in data) {\n\t\t\ttarget.register(id, data[id].map((e: string) => 'minecraft:' + e))\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn('Error occurred while fetching registries:', message(e))\n\t}\n}\n\nasync function fetchBlockStateMap(version: Version, target: BlockStateRegistry) {\n\tconsole.debug(`[fetchBlockStateMap] ${version.id}`)\n\ttry {\n\t\tconst data = await getData(`${mcmeta(version, 'summary')}/blocks/data.min.json`)\n\t\tfor (const id in data) {\n\t\t\ttarget['minecraft:' + id] = {\n\t\t\t\tproperties: data[id][0],\n\t\t\t\tdefault: data[id][1],\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn('Error occurred while fetching block state map:', message(e))\n\t}\n}\n\nexport async function fetchPreset(versionId: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${versionId} ${registry} ${id}`)\n\tconst version = config.versions.find(v => v.id === versionId)!\n\ttry {\n\t\tconst type = ['blockstates', 'models'].includes(registry) ? 'assets' : 'data'\n\t\tconst url = `${mcmeta(version, type)}/${type}/minecraft/${registry}/${id}.json`\n\t\tconst res = await fetch(url)\n\t\treturn res.json()\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`)\n\t}\n}\n\nexport async function fetchAllPresets(versionId: VersionId, registry: string) {\n\tconsole.debug(`[fetchAllPresets] ${versionId} ${registry}`)\n\tconst version = config.versions.find(v => v.id === versionId)!\n\tawait validateCache(version)\n\ttry {\n\t\tconst entries = await getData(`${mcmeta(version, 'registries')}/${registry}/data.min.json`)\n\t\treturn new Map(await Promise.all(\n\t\t\tentries.map(async (e: string) =>\n\t\t\t\t[e, await getData(`${mcmeta(version, 'data')}/data/minecraft/${registry}/${e}.json`)])\n\t\t))\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching all ${registry} presets: ${message(e)}`)\n\t}\n}\n\nexport type SoundEvents = {\n\t[key: string]: {\n\t\tsounds: (string | { name: string })[],\n\t},\n}\nexport async function fetchSounds(versionId: VersionId): Promise {\n\tconst version = config.versions.find(v => v.id === versionId)!\n\tawait validateCache(version)\n\ttry {\n\t\tconst url = `${mcmeta(version, 'summary')}/sounds/data.min.json`\n\t\treturn await getData(url)\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching sounds for ${version}: ${message(e)}`)\n\t}\n}\n\nexport function getSoundUrl(versionId: VersionId, path: string) {\n\tconst version = config.versions.find(v => v.id === versionId)!\n\treturn `${mcmeta(version, 'assets')}/assets/minecraft/sounds/${path}.ogg`\n}\n\nexport type VersionMeta = {\n\tid: string,\n\tname: string,\n\trelease_target: string,\n\ttype: 'snapshot' | 'release',\n\tstable: boolean,\n\tdata_version: number,\n\tprotocol_version: number,\n\tdata_pack_version: number,\n\tresource_pack_version: number,\n\tbuild_time: string,\n\trelease_time: string,\n\tsha1: string,\n}\nexport async function fetchVersions(): Promise {\n\tconst version = config.versions[config.versions.length - 1]\n\tawait validateCache(version)\n\ttry {\n\t\treturn getData(`${mcmeta(version, 'summary')}/versions/data.min.json`)\n\t} catch (e) {\n\t\tthrow new Error(`Error occured while fetching versions: ${message(e)}`)\n\t}\n}\n\nasync function getData(url: string, fn: (v: any) => T = (v: any) => v): Promise {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[getData] Opened cache ${CACHE_NAME} ${url}`)\n\t\tconst cacheResponse = await cache.match(url)\n \n\t\tif (cacheResponse && cacheResponse.ok) {\n\t\t\tconsole.debug(`[getData] Retrieving cached data ${url}`)\n\t\t\treturn await cacheResponse.json()\n\t\t}\n \n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\tawait cache.put(url, new Response(JSON.stringify(responseData)))\n\t\treturn responseData\n\t} catch (e) {\n\t\tconsole.warn(`[getData] Failed to open cache ${CACHE_NAME}: ${message(e)}`)\n\n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\treturn responseData\n\t}\n}\n\nasync function deleteMatching(matches: (url: string) => boolean) {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[deleteMatching] Opened cache ${CACHE_NAME}`)\n\t\tconst promises: Promise[] = []\n \n\t\tfor (const request of await cache.keys()) {\n\t\t\tif (matches(request.url)) {\n\t\t\t\tpromises.push(cache.delete(request))\n\t\t\t}\n\t\t}\n\t\tconsole.debug(`[deleteMatching] Removing ${promises.length} cache objects...`)\n\t\tawait Promise.all(promises)\n\t} catch (e) {\n\t\tconsole.warn(`[deleteMatching] Failed to open cache ${CACHE_NAME}: ${message(e)}`)\n\t}\n}\n","import type { CollectionRegistry, INode, SchemaRegistry } from '@mcschema/core'\nimport { ChoiceNode, DataModel, Reference, StringNode } from '@mcschema/core'\nimport * as java15 from '@mcschema/java-1.15'\nimport * as java16 from '@mcschema/java-1.16'\nimport * as java17 from '@mcschema/java-1.17'\nimport * as java18 from '@mcschema/java-1.18'\nimport * as java182 from '@mcschema/java-1.18.2'\nimport * as java19 from '@mcschema/java-1.19'\nimport config from '../../config.json'\nimport { message } from '../Utils'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17', '1.18', '1.18.2', '1.19'] as const\nexport type VersionId = typeof VersionIds[number]\n\nexport type BlockStateRegistry = {\n\t[block: string]: {\n\t\tproperties?: {\n\t\t\t[key: string]: string[],\n\t\t},\n\t\tdefault?: {\n\t\t\t[key: string]: string,\n\t\t},\n\t},\n}\n\ntype VersionData = {\n\tcollections: CollectionRegistry,\n\tschemas: SchemaRegistry,\n\tblockStates: BlockStateRegistry,\n}\nconst Versions: Record> = {}\n\ntype ModelData = {\n\tmodel: DataModel,\n\tversion: VersionId,\n}\nconst Models: Record = {}\n\nconst versionGetter: {\n\t[versionId in VersionId]: {\n\t\tgetCollections: () => CollectionRegistry,\n\t\tgetSchemas: (collections: CollectionRegistry) => SchemaRegistry,\n\t}\n} = {\n\t1.15: java15,\n\t1.16: java16,\n\t1.17: java17,\n\t1.18: java18,\n\t'1.18.2': java182,\n\t1.19: java19,\n}\n\nexport let CachedDecorator: INode\nexport let CachedFeature: INode\nexport let CachedCollections: CollectionRegistry\n\nasync function getVersion(id: VersionId): Promise {\n\tif (!Versions[id]) {\n\t\tVersions[id] = (async () => {\n\t\t\ttry {\n\t\t\t\tconst collections = versionGetter[id].getCollections()\n\t\t\t\tconst blockStates: BlockStateRegistry = {}\n\t\t\t\tawait fetchData(id, collections, blockStates)\n\t\t\t\tconst schemas = versionGetter[id].getSchemas(collections)\n\t\t\t\tVersions[id] = { collections, schemas, blockStates }\n\t\t\t\treturn Versions[id]\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`Cannot get version \"${id}\": ${message(e)}`)\n\t\t\t}\n\t\t})()\n\t\treturn Versions[id]\n\t}\n\treturn Versions[id]\n}\n\nexport async function getModel(version: VersionId, id: string): Promise {\n\tif (!Models[id] || Models[id].version !== version) {\n\t\tconst versionData = await getVersion(version)\n\t\t\n\t\tCachedDecorator = Reference(versionData.schemas, 'configured_decorator')\n\t\tCachedFeature = ChoiceNode([\n\t\t\t{\n\t\t\t\ttype: 'string',\n\t\t\t\tnode: StringNode(versionData.collections, { validator: 'resource', params: { pool: '$worldgen/configured_feature' } }),\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tnode: Reference(versionData.schemas, 'configured_feature'),\n\t\t\t},\n\t\t], { choiceContext: 'feature' })\n\n\t\tconst schemaName = config.generators.find(g => g.id === id)?.schema\n\t\tif (!schemaName) {\n\t\t\tthrow new Error(`Cannot find model ${id}`)\n\t\t}\n\t\ttry {\n\t\t\tconst schema = versionData.schemas.get(schemaName)\n\t\t\tconst model = new DataModel(schema, { wrapLists: true })\n\t\t\tif (Models[id]) {\n\t\t\t\tmodel.reset(Models[id].model.data, false)\n\t\t\t} else {\n\t\t\t\tmodel.validate(true)\n\t\t\t\tmodel.history = [JSON.stringify(model.data)]\n\t\t\t}\n\t\t\tModels[id] = { model, version }\n\t\t} catch (e) {\n\t\t\tconst err = new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${message(e)}`)\n\t\t\tif (e instanceof Error) err.stack = e.stack\n\t\t\tthrow err\n\t\t}\n\t}\n\treturn Models[id].model\n}\n\nexport async function getCollections(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\tCachedCollections = versionData.collections\n\treturn versionData.collections\n}\n\nexport async function getBlockStates(version: VersionId): Promise {\n\tconst versionData = await getVersion(version)\n\treturn versionData.blockStates\n}\n\nexport function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) {\n\tconst version = config.versions.findIndex(v => v.id === versionId)\n\tconst minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0\n\tconst maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1\n\treturn minVersion <= version && version <= maxVersion\n}\n","let scriptRel;const seen = {};export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps) {\n return baseModule();\n }\n // @ts-ignore\n if (scriptRel === undefined) {\n // @ts-ignore\n const relList = document.createElement('link').relList;\n // @ts-ignore\n scriptRel =\n relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload';\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","import type { Project } from './contexts'\nimport { DRAFT_PROJECT } from './contexts'\nimport type { VersionId } from './services'\nimport { VersionIds } from './services'\n\nexport namespace Store {\n\texport const ID_LANGUAGE = 'language'\n\texport const ID_THEME = 'theme'\n\texport const ID_VERSION = 'schema_version'\n\texport const ID_INDENT = 'indentation'\n\texport const ID_FORMAT = 'output_format'\n\texport const ID_HIGHLIGHTING = 'output_highlighting'\n\texport const ID_SOUNDS_VERSION = 'minecraft_sounds_version'\n\texport const ID_PROJECTS = 'misode_projects'\n\n\texport function getLanguage() {\n\t\treturn localStorage.getItem(ID_LANGUAGE) ?? 'en'\n\t}\n\n\texport function getTheme() {\n\t\treturn localStorage.getItem(ID_THEME) ?? 'dark'\n\t}\n\n\texport function getVersion(): VersionId {\n\t\tconst version = localStorage.getItem(ID_VERSION)\n\t\tif (version && VersionIds.includes(version as VersionId)) {\n\t\t\treturn version as VersionId\n\t\t}\n\t\treturn '1.18.2'\n\t}\n\n\texport function getIndent() {\n\t\treturn localStorage.getItem(ID_INDENT) ?? '2_spaces'\n\t}\n\n\texport function getFormat() {\n\t\treturn localStorage.getItem(ID_FORMAT) ?? 'json'\n\t}\n\n\texport function getHighlighting() {\n\t\treturn localStorage.getItem(ID_HIGHLIGHTING) !== 'false'\n\t}\n\n\texport function getSoundsVersion() {\n\t\treturn localStorage.getItem(ID_SOUNDS_VERSION) ?? 'latest'\n\t}\n\n\texport function getProjects(): Project[] {\n\t\tconst projects = localStorage.getItem(ID_PROJECTS)\n\t\tif (projects) {\n\t\t\treturn JSON.parse(projects) as Project[]\n\t\t}\n\t\treturn [DRAFT_PROJECT]\n\t}\n\n\texport function setLanguage(language: string | undefined) {\n\t\tif (language) localStorage.setItem(ID_LANGUAGE, language)\n\t}\n\n\texport function setTheme(theme: string | undefined) {\n\t\tif (theme) localStorage.setItem(ID_THEME, theme)\n\t}\n\n\texport function setVersion(version: VersionId | undefined) {\n\t\tif (version) localStorage.setItem(ID_VERSION, version)\n\t}\n\n\texport function setIndent(indent: string | undefined) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n\n\texport function setFormat(format: string | undefined) {\n\t\tif (format) localStorage.setItem(ID_FORMAT, format)\n\t}\n\n\texport function setHighlighting(highlighting: boolean | undefined) {\n\t\tif (highlighting !== undefined) localStorage.setItem(ID_HIGHLIGHTING, highlighting.toString())\n\t}\n\n\texport function setSoundsVersion(version: string | undefined) {\n\t\tif (version) localStorage.setItem(ID_SOUNDS_VERSION, version)\n\t}\n\n\texport function setProjects(projects: Project[] | undefined) {\n\t\tif (projects) localStorage.setItem(ID_PROJECTS, JSON.stringify(projects))\n\t}\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport English from '../../locales/en.json'\nimport { Analytics } from '../Analytics'\nimport { Store } from '../Store'\n\ninterface Locale {\n\tlang: string,\n\tlocale: (key: string, ...params: string[]) => string,\n\tchangeLanguage: (lang: string) => unknown,\n}\nconst Locale = createContext({\n\tlang: 'none',\n\tlocale: key => key,\n\tchangeLanguage: () => {},\n})\n\nexport const Locales: {\n\t[key: string]: {\n\t\t[key: string]: string,\n\t},\n} = {\n\tfallback: English,\n}\n\nexport function localize(lang: string, key: string, ...params: string[]) {\n\tconst value: string | undefined = Locales[lang]?.[key]\n\t?? Locales.en?.[key] ?? Locales.fallback[key] ?? key\n\treturn resolveLocaleParams(value, params)\n}\n\nfunction resolveLocaleParams(value: string, params?: string[]): string {\n\treturn value.replace(/%\\d+%/g, match => {\n\t\tconst index = parseInt(match.slice(1, -1))\n\t\treturn params?.[index] !== undefined ? params[index] : match\n\t})\n}\n\nasync function loadLocale(language: string) {\n\tif (Locales[language]) return\n\tconst langConfig = config.languages.find(lang => lang.code === language)\n\tif (!langConfig) return\n\tconst data = await import(`../../locales/${language}.json`)\n\tconst schema = langConfig.schemas !== false\n\t\t&& await import(`../../../node_modules/@mcschema/locales/src/${language}.json`)\n\tLocales[language] = { ...data.default, ...schema.default }\n}\n\nexport function useLocale() {\n\treturn useContext(Locale)\n}\n\nexport function LocaleProvider({ children }: { children: ComponentChildren }) {\n\tconst [lang, setLanguage] = useState('none')\n\n\tconst locale = useCallback((key: string, ...params: string[]) => {\n\t\treturn localize(lang, key, ...params)\n\t}, [lang])\n\n\tconst changeLanguage = useCallback(async (lang: string) => {\n\t\tawait loadLocale(lang)\n\t\tAnalytics.setLanguage(lang)\n\t\tStore.setLanguage(lang)\n\t\tsetLanguage(lang)\n\t}, [])\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst target = Store.getLanguage()\n\t\t\tawait Promise.all([\n\t\t\t\tloadLocale('en'),\n\t\t\t\t...(target !== 'en' ? [loadLocale(target)] : []),\n\t\t\t])\n\t\t\tsetLanguage(target)\n\t\t})()\n\t}, [])\n\n\tconst value: Locale = {\n\t\tlang,\n\t\tlocale: locale,\n\t\tchangeLanguage,\n\t}\n\n\treturn \n\t\t{children}\n\t\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { route } from 'preact-router'\nimport { useCallback, useContext, useMemo, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport type { VersionId } from '../services'\nimport { Store } from '../Store'\nimport { cleanUrl } from '../Utils'\n\nexport type Project = {\n\tname: string,\n\tnamespace: string,\n\tversion?: VersionId,\n\tfiles: ProjectFile[],\n}\nexport const DRAFT_PROJECT: Project = {\n\tname: 'Drafts',\n\tnamespace: 'draft',\n\tfiles: [],\n}\n\nexport type ProjectFile = {\n\ttype: string,\n\tid: string,\n\tdata: any,\n}\n\ninterface ProjectContext {\n\tproject: Project,\n\tfile?: ProjectFile,\n\tchangeProject: (name: string) => unknown,\n\tupdateProject: (project: Partial) => unknown,\n\tupdateFile: (type: string, id: string | undefined, file: Partial) => boolean,\n\topenFile: (type: string, id: string) => unknown,\n\tcloseFile: () => unknown,\n}\nconst Project = createContext({\n\tproject: DRAFT_PROJECT,\n\tchangeProject: () => {},\n\tupdateProject: () => {},\n\tupdateFile: () => false,\n\topenFile: () => {},\n\tcloseFile: () => {},\n})\n\nexport function useProject() {\n\treturn useContext(Project)\n}\n\nexport function ProjectProvider({ children }: { children: ComponentChildren }) {\n\tconst [projects, setProjects] = useState(Store.getProjects())\n\n\tconst [projectName, setProjectName] = useState(DRAFT_PROJECT.name)\n\tconst project = useMemo(() => {\n\t\treturn projects.find(p => p.name === projectName) ?? DRAFT_PROJECT\n\t}, [projects, projectName])\n\n\tconst [fileId, setFileId] = useState<[string, string] | undefined>(undefined)\n\tconst file = useMemo(() => {\n\t\tif (!fileId) return undefined\n\t\treturn project.files.find(f => f.type === fileId[0] && f.id === fileId[1])\n\t}, [project, fileId])\n\n\tconst changeProjects = useCallback((projects: Project[]) => {\n\t\tStore.setProjects(projects)\n\t\tsetProjects(projects)\n\t}, [])\n\n\tconst updateProject = useCallback((edits: Partial) => {\n\t\tchangeProjects(projects.map(p => p.name === projectName ?\t{ ...p, ...edits } : p))\n\t}, [projects, projectName])\n\n\tconst updateFile = useCallback((type: string, id: string | undefined, edits: Partial) => {\n\t\tif (!edits.id) { // remove\n\t\t\tupdateProject({ files: project.files.filter(f => f.type !== type || f.id !== id) })\n\t\t} else {\n\t\t\tconst newId = edits.id.includes(':') ? edits.id : `${project.namespace}:${edits.id}`\n\t\t\tconst exists = project.files.some(f => f.type === type && f.id === newId)\n\t\t\tif (!id) { // create\n\t\t\t\tif (exists) return false\n\t\t\t\tupdateProject({ files: [...project.files, { type, id: newId, data: edits.data ?? {} } ]})\n\t\t\t\tsetFileId([type, newId])\n\t\t\t} else { // rename or update data\n\t\t\t\tif (file?.id === id && id !== newId && exists) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tupdateProject({ files: project.files.map(f => f.type === type && f.id === id ? { ...f, ...edits, id: newId } : f)})\n\t\t\t\tif (file?.id === id) setFileId([type, newId])\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}, [updateProject, project, file])\n\n\tconst openFile = useCallback((type: string, id: string) => {\n\t\tconst gen = config.generators.find(g => g.id === type || g.path === type)\n\t\tif (!gen) {\n\t\t\tthrow new Error(`Cannot find generator of type ${type}`)\n\t\t}\n\t\tsetFileId([gen.id, id])\n\t\troute(cleanUrl(gen.url))\n\t}, [])\n\n\tconst closeFile = useCallback(() => {\n\t\tsetFileId(undefined)\n\t}, [])\n\n\tconst value: ProjectContext = {\n\t\tproject,\n\t\tfile,\n\t\tchangeProject: setProjectName,\n\t\tupdateProject,\n\t\tupdateFile,\n\t\topenFile,\n\t\tcloseFile,\n\t}\n\n\treturn \n\t\t{children}\n\t\n}\n\nexport function getFilePath(file: ProjectFile) {\n\tconst [namespace, id] = file.id.includes(':') ? file.id.split(':') : ['minecraft', file.id]\n\tconst gen = config.generators.find(g => g.id === file.type)\n\tif (!gen) {\n\t\tthrow new Error(`Cannot find generator of type ${file.type}`)\n\t}\n\treturn `data/${namespace}/${gen.path ?? gen.id}/${id}`\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport { Analytics } from '../Analytics'\nimport { useMediaQuery } from '../hooks'\nimport { Store } from '../Store'\n\ninterface Theme {\n\ttheme: string,\n\tactualTheme: 'light' | 'dark',\n\tchangeTheme: (theme: string) => unknown,\n}\nconst Theme = createContext({\n\ttheme: 'dark',\n\tactualTheme: 'dark',\n\tchangeTheme: () => {},\n})\n\nexport function useTheme() {\n\treturn useContext(Theme)\n}\n\nexport function ThemeProvider({ children }: { children: ComponentChildren }) {\n\tconst [theme, setTheme] = useState(Store.getTheme())\n\tconst prefersLight = useMediaQuery('(prefers-color-scheme: light)')\n\tconst prefersDark = useMediaQuery('(prefers-color-scheme: dark)')\n\n\tuseEffect(() => {\n\t\tdocument.documentElement.setAttribute('data-theme', theme)\n\t}, [theme])\n\n\tconst changeTheme = useCallback((theme: string) => {\n\t\tAnalytics.setTheme(theme)\n\t\tStore.setTheme(theme)\n\t\tsetTheme(theme)\n\t}, [])\n\n\tuseEffect(() => {\n\t\tAnalytics.setPrefersColorScheme(prefersLight ? 'light' : prefersDark ? 'dark' : 'none')\n\t}, [prefersLight, prefersDark])\n\n\tconst value: Theme = {\n\t\ttheme,\n\t\tactualTheme: theme === 'light' || (theme !== 'dark' && prefersLight) ? 'light' : 'dark',\n\t\tchangeTheme,\n\t}\n\n\treturn \n\t\t{children}\n\t\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport { useLocale } from '.'\nimport config from '../../config.json'\nimport type { VersionId } from '../services'\n\nconst VERSIONS_IN_TITLE = 3\n\ninterface Title {\n\ttitle: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n}\nconst Title = createContext({\n\ttitle: '',\n\tchangeTitle: () => {},\n})\n\nexport function useTitle(title?: string, versions?: VersionId[]) {\n\tconst context = useContext(Title)\n\tuseEffect(() => {\n\t\tif (title) {\n\t\t\tcontext.changeTitle(title, versions)\n\t\t}\n\t}, [title, versions])\n\treturn context\n}\n\nexport function TitleProvider({ children }: { children: ComponentChildren }) {\n\tconst { locale } = useLocale()\n\tconst [title, setTitle] = useState<string>(locale('title.home'))\n\n\tconst changeTitle = useCallback((title: string, versions?: VersionId[]) => {\n\t\tversions ??= config.versions.map(v => v.id as VersionId)\n\t\tconst titleVersions = versions.slice(versions.length - VERSIONS_IN_TITLE)\n\t\tdocument.title = `${title} Minecraft ${titleVersions.join(', ')}`\n\t\tsetTitle(title)\n\t}, [])\n\n\tconst value = {\n\t\ttitle,\n\t\tchangeTitle,\n\t}\n\n\treturn <Title.Provider value={value}>\n\t\t{children}\n\t</Title.Provider>\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { getCurrentUrl } from 'preact-router'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport { Analytics } from '../Analytics'\nimport type { VersionId } from '../services'\nimport { VersionIds } from '../services'\nimport { Store } from '../Store'\nimport { getSearchParams, setSeachParams } from '../Utils'\n\nconst VERSION_PARAM = 'version'\n\ninterface Version {\n\tversion: VersionId,\n\tchangeVersion: (version: VersionId) => unknown,\n}\nconst Version = createContext<Version>({\n\tversion: '1.18.2',\n\tchangeVersion: () => {},\n})\n\nexport function useVersion() {\n\treturn useContext(Version)\n}\n\nexport function VersionProvider({ children }: { children: ComponentChildren }) {\n\tconst [version, setVersion] = useState<VersionId>(Store.getVersion())\n\n\tconst searchParams = getSearchParams(getCurrentUrl())\n\tconst targetVersion = searchParams.get(VERSION_PARAM)\n\tuseEffect(() => {\n\t\tif (VersionIds.includes(targetVersion as VersionId) && version !== targetVersion) {\n\t\t\tsetVersion(targetVersion as VersionId)\n\t\t}\n\t}, [version, targetVersion])\n\n\tconst changeVersion = useCallback((version: VersionId) => {\n\t\tif (getSearchParams(getCurrentUrl()).has(VERSION_PARAM)) {\n\t\t\tsetSeachParams({ version })\n\t\t}\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}, [])\n\n\tconst value: Version = {\n\t\tversion,\n\t\tchangeVersion,\n\t}\n\n\treturn <Version.Provider value={value}>\n\t\t{children}\n\t</Version.Provider>\n}\n","import { DataModel } from '@mcschema/core'\nimport type { NoiseParameters } from 'deepslate'\nimport { FixedBiome, Identifier, LegacyRandom, NormalNoise } from 'deepslate'\nimport init, { biome_parameters, climate_noise, climate_sampler, multi_noise } from 'deepslate-rs'\n// @ts-expect-error\nimport wasm from 'deepslate-rs/deepslate_rs_bg.wasm?url'\nimport type { VersionId } from '../services'\nimport { checkVersion, fetchPreset } from '../services'\nimport { BiMap, clamp, deepClone, deepEqual, square, stringToColor } from '../Utils'\n\nlet ready = false\nasync function loadWasm() {\n\tif (ready) return\n\tawait init(wasm)\n\tready = true\n\tconsole.debug(`Loaded deepslate-rs from \"${wasm}\"`)\n}\n\nconst LAYERS = {\n\ttemperature: [-1, 1],\n\thumidity: [-1, 1],\n\tcontinentalness: [-1.1, 1],\n\terosion: [-1, 1],\n\tweirdness: [-1, 1],\n\toffset: [-1, 1],\n\tfactor: [0, 12],\n\tjaggedness: [0, 1],\n}\n\ntype Triple = [number, number, number]\ntype BiomeColors = Record<string, Triple>\ntype BiomeSourceOptions = {\n\toctaves: Record<string, NoiseParameters>,\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: bigint,\n\tversion: VersionId,\n\tlayers: Set<keyof typeof LAYERS | 'biomes'>,\n}\n\ninterface CachedBiomeSource {\n\tgetBiome(x: number, y: number, z: number): Identifier\n\tgetBiomes?(xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): Identifier[]\n\tgetClimate?(x: number, y: number, z: number): {[k: string]: number}\n\tgetClimates?(xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): {[k: string]: number}[]\n}\n\nlet cacheState: any\nlet biomeSourceCache: CachedBiomeSource\n\nexport async function biomeMap(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst data = img.data\n\tconst ox = -Math.round(options.offset[0]) - 100 + options.res / 2\n\tconst oz = -Math.round(options.offset[1]) - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\n\tconst xRange: Triple = [ox * options.scale, (200 + ox) * options.scale, options.res * options.scale]\n\tconst zRange: Triple = [oz * options.scale, (200 + oz) * options.scale, options.res * options.scale]\n\n\tconst biomes = !options.layers.has('biomes') ? undefined : biomeSource.getBiomes?.(...xRange, 64, 65, 1, ...zRange)\n\tconst layers = [...options.layers].filter(l => l !== 'biomes') as (keyof typeof LAYERS)[]\n\tconst noise = layers.length === 0 ? undefined : biomeSource.getClimates?.(...xRange, 64, 65, 1, ...zRange)\n\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let z = 0; z < 200; z += options.res) {\n\t\t\tconst i = z * row + x * col\n\t\t\tconst j = (x / options.res) * 200 / options.res + z / options.res\n\t\t\tconst worldX = (x + ox) * options.scale\n\t\t\tconst worldZ = (z + oz) * options.scale\n\t\t\tlet color: Triple = [50, 50, 50]\n\t\t\tif (options.layers.has('biomes')) {\n\t\t\t\tconst biome = biomes?.[j] ?? biomeSource.getBiome(worldX, 64, worldZ)\n\t\t\t\tcolor = getBiomeColor(biome.toString(), options.biomeColors)\n\t\t\t} else if (noise && layers[0]) {\n\t\t\t\tconst value = noise[j][layers[0]]\n\t\t\t\tconst [min, max] = LAYERS[layers[0]]\n\t\t\t\tconst brightness = (value - min) / (max - min) * 256\n\t\t\t\tcolor = [brightness, brightness, brightness]\n\t\t\t}\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport async function getBiome(state: any, x: number, z: number, options: BiomeSourceOptions): Promise<{[k: string]: number | string} | undefined> {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst [xx, zz] = toWorld([x, z], options)\n\treturn {\n\t\tbiome: biomeSource.getBiome(xx, 64, zz).toString(),\n\t\t...biomeSource.getClimate?.(xx, 64, zz),\n\t}\n}\n\nasync function getCached(state: any, options: BiomeSourceOptions): Promise<{ biomeSource: CachedBiomeSource}> {\n\tconst newState = [state, options.octaves, `${options.seed}`, options.version]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\n\t\tbiomeSourceCache = await getBiomeSource(state, options)\n\t}\n\treturn {\n\t\tbiomeSource: biomeSourceCache,\n\t} \n}\n\nasync function getBiomeSource(state: any, options: BiomeSourceOptions): Promise<CachedBiomeSource> {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'fixed':\n\t\t\treturn new FixedBiome(Identifier.parse(state.biome as string))\n\n\t\tcase 'checkerboard':\n\t\t\tconst shift = (state.scale ?? 2) + 2\n\t\t\tconst numBiomes = state.biomes?.length ?? 0\n\t\t\treturn {\n\t\t\t\tgetBiome(x: number, _y: number, z: number) {\n\t\t\t\t\tconst i = (((x >> shift) + (z >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\t\t\treturn Identifier.parse(state.biomes?.[i].node as string)\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase 'multi_noise':\n\t\t\tswitch(state.preset?.replace(/^minecraft:/, '')) {\n\t\t\t\tcase 'nether':\n\t\t\t\t\tstate = checkVersion(options.version, '1.18') ? NetherPreset18 : NetherPreset\n\t\t\t\t\tbreak\n\t\t\t\tcase 'overworld':\n\t\t\t\t\tstate = checkVersion(options.version, '1.18') ? await OverworldPreset18() : state\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tstate = DataModel.unwrapLists(state)\n\t\t\tif (checkVersion(options.version, '1.18')) {\n\t\t\t\tawait loadWasm()\n\t\t\t\tconst BiomeIds = new BiMap<string, number>()\n\t\t\t\tconst param = (p: number | number[]) => {\n\t\t\t\t\treturn typeof p === 'number' ? [p, p] : p\n\t\t\t\t}\n\t\t\t\tconst [t0, t1, h0, h1, c0, c1, e0, e1, w0, w1, d0, d1, o, b] = [[], [], [], [], [], [], [], [], [], [], [], [], [], []] as number[][]\n\t\t\t\tfor (const i of state.biomes) {\n\t\t\t\t\tconst { temperature, humidity, continentalness, erosion, weirdness, depth, offset } = i.parameters\n\t\t\t\t\tt0.push(param(temperature)[0])\n\t\t\t\t\tt1.push(param(temperature)[1])\n\t\t\t\t\th0.push(param(humidity)[0])\n\t\t\t\t\th1.push(param(humidity)[1])\n\t\t\t\t\tc0.push(param(continentalness)[0])\n\t\t\t\t\tc1.push(param(continentalness)[1])\n\t\t\t\t\te0.push(param(erosion)[0])\n\t\t\t\t\te1.push(param(erosion)[1])\n\t\t\t\t\tw0.push(param(weirdness)[0])\n\t\t\t\t\tw1.push(param(weirdness)[1])\n\t\t\t\t\td0.push(param(depth)[0])\n\t\t\t\t\td1.push(param(depth)[1])\n\t\t\t\t\to.push(offset)\n\t\t\t\t\tb.push(BiomeIds.getOrPut(i.biome, Math.floor(Math.random() * 2147483647)))\n\t\t\t\t}\n\t\t\t\tconst parameters = biome_parameters(new Float64Array(t0), new Float64Array(t1), new Float64Array(h0), new Float64Array(h1), new Float64Array(c0), new Float64Array(c1), new Float64Array(e0), new Float64Array(e1), new Float64Array(w0), new Float64Array(w1), new Float64Array(d0), new Float64Array(d1), new Float64Array(o), new Int32Array(b))\n\t\t\t\tconst sampler = climate_sampler(options.seed, options.octaves.temperature.firstOctave, new Float64Array(options.octaves.temperature.amplitudes), options.octaves.humidity.firstOctave, new Float64Array(options.octaves.humidity.amplitudes), options.octaves.continentalness.firstOctave, new Float64Array(options.octaves.continentalness.amplitudes), options.octaves.erosion.firstOctave, new Float64Array(options.octaves.erosion.amplitudes), options.octaves.weirdness.firstOctave, new Float64Array(options.octaves.weirdness.amplitudes), options.octaves.shift.firstOctave, new Float64Array(options.octaves.shift.amplitudes))\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x, y, z) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, x, x + 1, 1, y, y + 1, 1, z, z + 1, 1)\n\t\t\t\t\t\treturn Identifier.parse(BiomeIds.getA(ids[0]) ?? 'unknown')\n\t\t\t\t\t},\n\t\t\t\t\tgetBiomes(xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\treturn [...ids].map(id => Identifier.parse(BiomeIds.getA(id) ?? 'unknown'))\n\t\t\t\t\t},\n\t\t\t\t\tgetClimate(x, y, z) {\n\t\t\t\t\t\tconst climate = climate_noise(sampler, x, x + 1, 1, y, y + 1, 1, z, z + 1, 1)\n\t\t\t\t\t\tconst [t, h, c, e, w] = climate.slice(0, 5)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttemperature: t,\n\t\t\t\t\t\t\thumidity: h,\n\t\t\t\t\t\t\tcontinentalness: c,\n\t\t\t\t\t\t\terosion: e,\n\t\t\t\t\t\t\tweirdness: w,\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tgetClimates(xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst climate = climate_noise(sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\tconst result = []\n\t\t\t\t\t\tfor (let i = 0; i < climate.length; i += 7) {\n\t\t\t\t\t\t\tconst [t, h, c, e, w] = climate.slice(i, i + 5)\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\ttemperature: t,\n\t\t\t\t\t\t\t\thumidity: h,\n\t\t\t\t\t\t\t\tcontinentalness: c,\n\t\t\t\t\t\t\t\terosion: e,\n\t\t\t\t\t\t\t\tweirdness: w,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst noise = ['altitude', 'temperature', 'humidity', 'weirdness']\n\t\t\t\t\t.map((id, i) => {\n\t\t\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\t\t\tconfig.firstOctave = clamp(config.firstOctave ?? -7, -100, -1)\n\t\t\t\t\t\treturn new NormalNoise(new LegacyRandom(options.seed + BigInt(i)), config)\n\t\t\t\t\t})\n\t\t\t\tif (!Array.isArray(state.biomes) || state.biomes.length === 0) {\n\t\t\t\t\treturn new FixedBiome(Identifier.create('unknown'))\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x: number, _y: number, z: number): Identifier {\n\t\t\t\t\t\tconst n = noise.map(n => n.sample(x, z, 0))\n\t\t\t\t\t\tlet minDist = Infinity\n\t\t\t\t\t\tlet minBiome = ''\n\t\t\t\t\t\tfor (const { biome, parameters: p } of state.biomes) {\n\t\t\t\t\t\t\tconst dist = square(p.altitude - n[0]) + square(p.temperature - n[1]) + square(p.humidity - n[2]) + square(p.weirdness - n[3]) + square(p.offset)\n\t\t\t\t\t\t\tif (dist < minDist) {\n\t\t\t\t\t\t\t\tminDist = dist\n\t\t\t\t\t\t\t\tminBiome = biome\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Identifier.parse(minBiome)\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t}\n\tthrow new Error('Unknown biome source')\n}\n\nfunction getBiomeColor(biome: string, biomeColors: BiomeColors): Triple {\n\tif (!biome) {\n\t\treturn [128, 128, 128]\n\t}\n\tconst color = biomeColors[biome] ?? VanillaColors[biome]\n\tif (color === undefined) {\n\t\treturn stringToColor(biome)\n\t}\n\treturn color\n}\n\nfunction toWorld([x, z]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst zz = (z - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, zz]\n}\n\nconst VanillaColors: Record<string, Triple> = {\n\t'minecraft:badlands': [217,69,21],\n\t'minecraft:badlands_plateau': [202,140,101],\n\t'minecraft:bamboo_jungle': [118,142,20],\n\t'minecraft:bamboo_jungle_hills': [59,71,10],\n\t'minecraft:basalt_deltas': [64,54,54],\n\t'minecraft:beach': [250,222,85],\n\t'minecraft:birch_forest': [48,116,68],\n\t'minecraft:birch_forest_hills': [31,95,50],\n\t'minecraft:cold_ocean': [32,32,112],\n\t'minecraft:crimson_forest': [221,8,8],\n\t'minecraft:dark_forest': [64,81,26],\n\t'minecraft:dark_forest_hills': [104,121,66],\n\t'minecraft:deep_cold_ocean': [32,32,56],\n\t'minecraft:deep_frozen_ocean': [64,64,144],\n\t'minecraft:deep_lukewarm_ocean': [0,0,64],\n\t'minecraft:deep_ocean': [0,0,48],\n\t'minecraft:deep_warm_ocean': [0,0,80],\n\t'minecraft:desert': [250,148,24],\n\t'minecraft:desert_hills': [210,95,18],\n\t'minecraft:desert_lakes': [255,188,64],\n\t'minecraft:end_barrens': [128,128,255],\n\t'minecraft:end_highlands': [128,128,255],\n\t'minecraft:end_midlands': [128,128,255],\n\t'minecraft:eroded_badlands': [255,109,61],\n\t'minecraft:flower_forest': [45,142,73],\n\t'minecraft:forest': [5,102,33],\n\t'minecraft:frozen_ocean': [112,112,214],\n\t'minecraft:frozen_river': [160,160,255],\n\t'minecraft:giant_spruce_taiga': [129,142,121],\n\t'minecraft:old_growth_spruce_taiga': [129,142,121],\n\t'minecraft:giant_spruce_taiga_hills': [109,119,102],\n\t'minecraft:giant_tree_taiga': [89,102,81],\n\t'minecraft:old_growth_pine_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_hills': [136,136,136],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:windswept_gravelly_hills': [136,136,136],\n\t'minecraft:ice_spikes': [180,220,220],\n\t'minecraft:jungle': [83,123,9],\n\t'minecraft:jungle_edge': [98,139,23],\n\t'minecraft:sparse_jungle': [98,139,23],\n\t'minecraft:jungle_hills': [44,66,5],\n\t'minecraft:lukewarm_ocean': [0,0,144],\n\t'minecraft:modified_badlands_plateau': [242,180,141],\n\t'minecraft:modified_gravelly_mountains': [120,152,120],\n\t'minecraft:modified_jungle': [123,163,49],\n\t'minecraft:modified_jungle_edge': [138,179,63],\n\t'minecraft:modified_wooded_badlands_plateau': [216,191,141],\n\t'minecraft:mountain_edge': [114,120,154],\n\t'minecraft:extreme_hills': [96,96,96],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:windswept_hills': [96,96,96],\n\t'minecraft:mushroom_field_shore': [160,0,255],\n\t'minecraft:mushroom_fields': [255,0,255],\n\t'minecraft:nether_wastes': [191,59,59],\n\t'minecraft:ocean': [0,0,112],\n\t'minecraft:plains': [141,179,96],\n\t'minecraft:river': [0,0,255],\n\t'minecraft:savanna': [189,178,95],\n\t'minecraft:savanna_plateau': [167,157,100],\n\t'minecraft:shattered_savanna': [229,218,135],\n\t'minecraft:windswept_savanna': [229,218,135],\n\t'minecraft:shattered_savanna_plateau': [207,197,140],\n\t'minecraft:small_end_islands': [128,128,255],\n\t'minecraft:snowy_beach': [250,240,192],\n\t'minecraft:snowy_mountains': [160,160,160],\n\t'minecraft:snowy_taiga': [49,85,74],\n\t'minecraft:snowy_taiga_hills': [36,63,54],\n\t'minecraft:snowy_taiga_mountains': [89,125,114],\n\t'minecraft:snowy_tundra': [255,255,255],\n\t'minecraft:snowy_plains': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:stony_shore': [162,162,132],\n\t'minecraft:sunflower_plains': [181,219,136],\n\t'minecraft:swamp': [7,249,178],\n\t'minecraft:swamp_hills': [47,255,218],\n\t'minecraft:taiga': [11,102,89],\n\t'minecraft:taiga_hills': [22,57,51],\n\t'minecraft:taiga_mountains': [51,142,129],\n\t'minecraft:tall_birch_forest': [88,156,108],\n\t'minecraft:old_growth_birch_forest': [88,156,108],\n\t'minecraft:tall_birch_hills': [71,135,90],\n\t'minecraft:the_end': [128,128,255],\n\t'minecraft:the_void': [0,0,0],\n\t'minecraft:warm_ocean': [0,0,172],\n\t'minecraft:warped_forest': [73,144,123],\n\t'minecraft:wooded_badlands_plateau': [176,151,101],\n\t'minecraft:wooded_badlands': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n\t'minecraft:windswept_forest': [80,112,80],\n\t'minecraft:snowy_slopes': [140, 195, 222],\n\t'minecraft:lofty_peaks': [196, 168, 193],\n\t'minecraft:jagged_peaks': [196, 168, 193],\n\t'minecraft:snowcapped_peaks': [200, 198, 200],\n\t'minecraft:frozen_peaks': [200, 198, 200],\n\t'minecraft:stony_peaks': [82, 92, 103],\n\t'minecraft:grove': [150, 150, 189],\n\t'minecraft:meadow': [169, 197, 80],\n\t'minecraft:lush_caves': [112, 255, 79],\n\t'minecraft:dripstone_caves': [140, 124, 0],\n}\n\nconst NetherPreset = {type:'minecraft:multi_noise',seed:0,altitude_noise:{firstOctave:-7,amplitudes:[1,1]},temperature_noise:{firstOctave:-7,amplitudes:[1,1]},humidity_noise:{firstOctave:-7,amplitudes:[1,1]},weirdness_noise:{firstOctave:-7,amplitudes:[1,1]},biomes:[{biome:'minecraft:nether_wastes',parameters:{altitude:0,temperature:0,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{altitude:0,temperature:0,humidity:-0.5,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{altitude:0,temperature:0.4,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{altitude:0,temperature:0,humidity:0.5,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{altitude:0,temperature:-0.5,humidity:0,weirdness:0,offset:0.175}}]}\n\nconst NetherPreset18 = {type:'minecraft:multi_noise',biomes:[{biome:'minecraft:nether_wastes',parameters:{temperature:0,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{temperature:0,humidity:-0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{temperature:0.4,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{temperature:0,humidity:0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{temperature:-0.5,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.175}}]}\n\nasync function OverworldPreset18() {\n\tconst overworld = await fetchPreset('1.18', 'dimension', 'overworld')\n\treturn overworld.generator.biome_source\n}\n","import { DataModel } from '@mcschema/core'\nimport type { Random } from 'deepslate'\nimport { LegacyRandom, PerlinNoise } from 'deepslate'\nimport type { VersionId } from '../services'\nimport { checkVersion } from '../services'\nimport { clamp, isObject, stringToColor } from '../Utils'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: Random,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n\tnextFloat(): number,\n\tnextInt(max: number): number,\n\tnextGaussian(): number,\n\tsampleInt(provider: any): number,\n}\n\nconst terrain = [50, 50, 51, 51, 52, 52, 53, 54, 56, 57, 57, 58, 58, 59, 60, 60, 60, 59, 59, 59, 60, 61, 61, 62, 63, 63, 64, 64, 64, 65, 65, 66, 66, 65, 65, 66, 66, 67, 67, 67, 68, 69, 71, 73, 74, 76, 79, 80, 81, 81, 82, 83, 83, 82, 82, 81, 81, 80, 80, 80, 81, 81, 82, 82] \n\nconst featureColors = [\n\t[255, 77, 54], // red\n\t[59, 118, 255], // blue\n\t[91, 207, 25], // green\n\t[217, 32, 245], // magenta\n\t[255, 209, 41], // yellow\n\t[52, 204, 209], // cyan\n]\n\nexport type DecoratorOptions = {\n\tsize: [number, number, number],\n\tseed: bigint,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(random.fork(), 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t\tnextFloat: () => random.nextFloat(),\n\t\tnextInt: (max: number) => random.nextInt(max),\n\t\tnextGaussian: () => Math.sqrt(-2 * Math.log(1 - random.nextFloat())) * Math.cos(2 * Math.PI * random.nextFloat()),\n\t\tsampleInt(value) { return sampleInt(value, this) },\n\t}\n\n\tfor (let x = 0; x < options.size[0] / 16; x += 1) {\n\t\tfor (let z = 0; z < options.size[2] / 16; z += 1) {\n\t\t\tif (checkVersion(options.version, undefined, '1.17')) {\n\t\t\t\tgetPlacements([x * 16, 0, z * 16], DataModel.unwrapLists(state), ctx)\n\t\t\t} else {\n\t\t\t\tmodifyPlacement([x * 16, 0, z * 16], DataModel.unwrapLists(state.placement), ctx)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst data = img.data\n\timg.data.fill(255)\n\n\tfor (const [pos, feature] of ctx.placements) {\n\t\tif (pos[0] < 0 || pos[1] < 0 || pos[2] < 0 || pos[0] >= options.size[0] || pos[1] >= options.size[1] || pos[2] >= options.size[2]) continue\n\t\tconst i = (pos[2] * (img.width * 4)) + (pos[0] * 4)\n\t\tconst color = feature < featureColors.length ? featureColors[feature] : stringToColor(ctx.features[feature])\n\t\tdata[i] = clamp(50, 205, color[0])\n\t\tdata[i + 1] = clamp(50, 205, color[1])\n\t\tdata[i + 2] = clamp(50, 205, color[2])\n\t\tdata[i + 3] = 255\n\t}\n\n\tfor (let x = 0; x < options.size[0]; x += 1) {\n\t\tfor (let y = 0; y < options.size[2]; y += 1) {\n\t\t\tif ((Math.floor(x / 16) + Math.floor(y / 16)) % 2 === 0) continue\n\t\t\tconst i = (y * (img.width * 4)) + (x * 4)\n\t\t\tfor (let j = 0; j < 3; j += 1) {\n\t\t\t\tdata[i + j] = 0.85 * data[i + j] \n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction normalize(id: string) {\n\treturn id.startsWith('minecraft:') ? id.slice(10) : id\n}\n\nfunction decorateY(pos: BlockPos, y: number): BlockPos[] {\n\treturn [[ pos[0], y, pos[2] ]]\n}\n\nfunction sampleInt(value: any, ctx: PlacementContext): number {\n\tif (typeof value === 'number') {\n\t\treturn value\n\t} else if (value.base) {\n\t\treturn value.base ?? 1 + ctx.nextInt(1 + (value.spread ?? 0))\n\t} else {\n\t\tswitch (normalize(value.type)) {\n\t\t\tcase 'constant': return value.value\n\t\t\tcase 'uniform': return value.value.min_inclusive + ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + ctx.nextInt(ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1) + 1)\n\t\t\tcase 'clamped': return clamp(ctx.sampleInt(value.value.source), value.value.min_inclusive, value.value.max_inclusive)\n\t\t\tcase 'clamped_normal':\n\t\t\t\tconst normal = value.value.mean + ctx.nextGaussian() * value.value.deviation\n\t\t\t\treturn Math.floor(clamp(value.value.min_inclusive, value.value.max_inclusive, normal))\n\t\t\tcase 'weighted_list':\n\t\t\t\tconst totalWeight = (value.distribution as any[]).reduce<number>((sum, e) => sum + e.weight, 0)\n\t\t\t\tlet i = ctx.nextInt(totalWeight)\n\t\t\t\tfor (const e of value.distribution) {\n\t\t\t\t\ti -= e.weight\n\t\t\t\t\tif (i < 0) return ctx.sampleInt(e.data)\n\t\t\t\t}\n\t\t\t\treturn 0\n\t\t}\n\t\treturn 1\n\t}\n}\n\nfunction resolveAnchor(anchor: any, _ctx: PlacementContext): number {\n\tif (!isObject(anchor)) throw new Error('Invalid vertical anchor')\n\tif (anchor.absolute) return anchor.absolute\n\tif (anchor.above_bottom) return anchor.above_bottom\n\tif (anchor.below_top) return 256 - anchor.below_top\n\tthrow new Error('Invalid vertical anchor')\n}\n\nfunction sampleHeight(height: any, ctx: PlacementContext): number {\n\tif (!isObject(height)) throw new Error('Invalid height provider')\n\tif (typeof height.type !== 'string') {\n\t\treturn resolveAnchor(height, ctx)\n\t}\n\tswitch (normalize(height.type)) {\n\t\tcase 'constant': return resolveAnchor(height.value, ctx)\n\t\tcase 'uniform': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\treturn min + ctx.nextInt(max - min + 1)\n\t\t}\n\t\tcase 'biased_to_bottom': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\tconst n = ctx.nextInt(max - min - (height.inner ?? 1) + 1)\n\t\t\treturn min + ctx.nextInt(n + (height.inner ?? 1))\n\t\t}\n\t\tcase 'very_biased_to_bottom': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\tconst inner = height.inner ?? 1\n\t\t\tconst n1 = min + inner + ctx.nextInt(max - min - inner + 1)\n\t\t\tconst n2 = min + ctx.nextInt(n1 - min)\n\t\t\treturn min + ctx.nextInt(n2 - min + inner)\n\t\t}\n\t\tcase 'trapezoid': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\tconst plateau = height.plateau ?? 0\n\t\t\tif (plateau >= max - min) {\n\t\t\t\treturn min + ctx.nextInt(max - min + 1)\n\t\t\t}\n\t\t\tconst n1 = (max - min - plateau) / 2\n\t\t\tconst n2 = (max - min) - n1\n\t\t\treturn min + ctx.nextInt(n2 + 1) + ctx.nextInt(n1 + 1)\n\t\t}\n\t\tdefault: throw new Error(`Invalid height provider ${height.type}`)\n\t}\n}\n\n// 1.17 and before\nfunction useFeature(s: string, ctx: PlacementContext) {\n\tconst i = ctx.features.indexOf(s)\n\tif (i != -1) return i\n\tctx.features.push(s)\n\treturn ctx.features.length - 1\n}\n\nfunction getPlacements(pos: BlockPos, feature: any, ctx: PlacementContext): void {\n\tif (typeof feature === 'string') {\n\t\tctx.placements.push([pos, useFeature(feature, ctx)])\n\t\treturn\n\t}\n\tconst type = normalize(feature?.type ?? 'no_op')\n\tconst featureFn = Features[type]\n\tif (featureFn) {\n\t\tfeatureFn(feature.config, pos, ctx)\n\t} else {\n\t\tctx.placements.push([pos, useFeature(JSON.stringify(feature), ctx)])\n\t}\n}\n\nfunction getPositions(pos: BlockPos, decorator: any, ctx: PlacementContext): BlockPos[] {\n\tconst type = normalize(decorator?.type ?? 'nope')\n\tconst decoratorFn = Decorators[type]\n\tif (!decoratorFn) {\n\t\treturn [pos]\n\t}\n\treturn decoratorFn(decorator?.config, pos, ctx)\n}\n\nconst Features: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => void,\n} = {\n\tdecorated: (config, pos, ctx) => {\n\t\tconst positions = getPositions(pos, config?.decorator, ctx)\n\t\tpositions.forEach(p => getPlacements(p, config?.feature, ctx))\n\t},\n\trandom_boolean_selector: (config, pos, ctx) => {\n\t\tconst feature = ctx.nextFloat() < 0.5 ? config?.feature_true : config?.feature_false\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n\trandom_selector: (config, pos, ctx) => {\n\t\tfor (const f of config?.features ?? []) {\n\t\t\tif (ctx.nextFloat() < (f?.chance ?? 0)) {\n\t\t\t\tgetPlacements(pos, f.feature, ctx)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tgetPlacements(pos, config?.default, ctx)\n\t},\n\tsimple_random_selector: (config, pos, ctx) => {\n\t\tconst feature = config?.features?.[ctx.nextInt(config?.features?.length ?? 0)]\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n}\n\nconst Decorators: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tchance: (config, pos, ctx) => {\n\t\treturn ctx.nextFloat() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.nextFloat() < config.extra_chance ?? 0){\n\t\t\tcount += config.extra_count ?? 0\n\t\t}\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_multilayer: (config, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + ctx.nextInt(16),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + ctx.nextInt(16),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < config.noise_level ? config.below_noise : config.above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_noise_biased: (config, pos, ctx) => {\n\t\tconst factor = Math.max(1, config.noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (config.noise_offset ?? 0)) * config.noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tdark_oak_tree: (_config, pos, ctx) => {\n\t\treturn [...new Array(16)].map((_, i) => {\n\t\t\tconst x = Math.floor(i / 4) * 4 + 1 + ctx.nextInt(3) + pos[0]\n\t\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, x)])\n\t\t\tconst z = Math.floor(i % 4) * 4 + 1 + ctx.nextInt(3) + pos[2]\n\t\t\treturn [x, y, z]\n\t\t})\n\t},\n\tdecorated: (config, pos, ctx) => {\n\t\treturn getPositions(pos, config?.outer, ctx).flatMap(p => {\n\t\t\treturn getPositions(p, config?.inner, ctx)\n\t\t})\n\t},\n\tdepth_average: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(config?.spread ?? 0) + ctx.nextInt(config?.spread ?? 0) - (config.spread ?? 0) + (config?.baseline ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\temerald_ore: (_config, pos, ctx) => {\n\t\tconst count = 3 + ctx.nextInt(6)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t4 + ctx.nextInt(28),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + ctx.nextInt(ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = ctx.nextInt(1 + ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\theightmap: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\theightmap_spread_double: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, ctx.nextInt(y * 2))\n\t},\n\theightmap_world_surface: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\ticeberg: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + 4 + ctx.nextInt(8),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + ctx.nextInt(8),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt((config.chance ?? 1) / 10) === 0) {\n\t\t\tconst y = ctx.nextInt(ctx.nextInt(256 - 8) + 8)\n\t\t\tif (y < ctx.seaLevel || ctx.nextInt((config?.chance ?? 1) / 8) == 0) {\n\t\t\t\tconst x = ctx.nextInt(16) + pos[0]\n\t\t\t\tconst z = ctx.nextInt(16) + pos[2]\n\t\t\t\treturn [[x, y, z]]\n\t\t\t}\n\t\t}\n\t\treturn []\n\t},\n\tnope: (_config, pos) => {\n\t\treturn [pos]\n\t},\n\trange: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(pos[1] + 32)\n\t\treturn decorateY(pos, y)\n\t},\n\ttop_solid_heightmap: (_config, pos) => {\n\t\tconst y = terrain[clamp(0, 63, pos[0])]\n\t\treturn decorateY(pos, y)\n\t},\n\tmagma: (_config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(pos[1] + 32)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tpos[1],\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t]]\n\t},\n\tsurface_relative_threshold: (config, pos) => {\n\t\tconst height = terrain[clamp(0, 63, pos[0])]\n\t\tconst min = height + (config?.min_inclusive ?? -Infinity)\n\t\tconst max = height + (config?.max_inclusive ?? Infinity)\n\t\treturn (pos[1] < min || pos[1] > max) ? [pos] : []\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt(config.chance ?? 1) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t\tctx.nextInt(256),\n\t\t\t\tpos[2] + ctx.nextInt(16),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n\n// 1.18 and after\nfunction modifyPlacement(pos: BlockPos, placement: any[], ctx: PlacementContext) {\n\tlet positions = [pos]\n\tfor (const modifier of placement) {\n\t\tconst modifierFn = PlacementModifiers[normalize(modifier?.type ?? 'nope')]\n\t\tif (!modifierFn) continue\n\t\tpositions = positions.flatMap(pos =>\n\t\t\tPlacementModifiers[normalize(modifier.type)](modifier, pos, ctx)\n\t\t)\n\t}\n\tfor (const pos of positions) {\n\t\tctx.placements.push([pos, 0])\n\t}\n}\n\nconst PlacementModifiers: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tcount: ({ count }, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(count ?? 1)).fill(pos)\n\t},\n\tcount_on_every_layer: ({ count }, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(count ?? 1)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + ctx.nextInt(16),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + ctx.nextInt(16),\n\t\t\t])\n\t},\n\tenvironment_scan: ({}, pos) => {\n\t\treturn [pos]\n\t},\n\theight_range: ({ height }, pos, ctx) => {\n\t\treturn decorateY(pos, sampleHeight(height, ctx))\n\t},\n\theightmap: ({}, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\tin_square: ({}, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tpos[1],\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t]]\n\t},\n\tnoise_based_count: ({ noise_to_count_ratio, noise_factor, noise_offset }, pos, ctx) => {\n\t\tconst factor = Math.max(1, noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (noise_offset ?? 0)) * noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tnoise_threshold_count: ({ noise_level, below_noise, above_noise }, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < noise_level ? below_noise : above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\trandom_offset: ({ xz_spread, y_spread }, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.sampleInt(xz_spread),\n\t\t\tpos[1] + ctx.sampleInt(y_spread),\n\t\t\tpos[2] + ctx.sampleInt(xz_spread),\n\t\t]]\n\t},\n\trarity_filter: ({ chance }, pos, ctx) => {\n\t\treturn ctx.nextFloat() < 1 / (chance ?? 1) ? [pos] : []\n\t},\n}\n","import { LegacyRandom, PerlinNoise } from 'deepslate'\nimport { clampedLerp, lerp2 } from '../../Utils'\n\nexport class NoiseChunkGenerator {\n\tprivate readonly minLimitPerlinNoise: PerlinNoise\n\tprivate readonly maxLimitPerlinNoise: PerlinNoise\n\tprivate readonly mainPerlinNoise: PerlinNoise\n\tprivate readonly depthNoise: PerlinNoise\n\n\tprivate settings: any = {}\n\tprivate chunkWidth: number = 4\n\tprivate chunkHeight: number = 4\n\tprivate chunkCountY: number = 32\n\tprivate biomeDepth: number = 0.1\n\tprivate biomeScale: number = 0.2\n\n\tprivate noiseColumnCache: (number[] | null)[] = []\n\tprivate xOffset: number = 0\n\n\tconstructor(seed: bigint) {\n\t\tconst random = new LegacyRandom(seed)\n\t\tthis.minLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.maxLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.mainPerlinNoise = new PerlinNoise(random, -7, [1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.depthNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t}\n\n\tpublic reset(settings: any, depth: number, scale: number, xOffset: number, width: number) {\n\t\tthis.settings = settings\n\t\tthis.chunkWidth = settings.size_horizontal * 4\n\t\tthis.chunkHeight = settings.size_vertical * 4\n\t\tthis.chunkCountY = Math.floor(settings.height / this.chunkHeight)\n\n\t\tif (settings.amplified && depth > 0) {\n\t\t\tdepth = 1 + depth * 2\n\t\t\tscale = 1 + scale * 4\n\t\t}\n\t\tthis.biomeDepth = 0.265625 * (depth * 0.5 - 0.125)\n\t\tthis.biomeScale = 96.0 / (scale * 0.9 + 0.1)\n\n\t\tthis.noiseColumnCache = Array(width).fill(null)\n\t\tthis.xOffset = xOffset\n\t}\n \n\tpublic iterateNoiseColumn(x: number): number[] {\n\t\tconst data = Array(this.chunkCountY * this.chunkHeight)\n\t\tconst cx = Math.floor(x / this.chunkWidth)\n\t\tconst ox = Math.floor(x % this.chunkWidth) / this.chunkWidth\n\t\tconst noise1 = this.fillNoiseColumn(cx)\n\t\tconst noise2 = this.fillNoiseColumn(cx + 1)\n\n\t\tfor (let y = this.chunkCountY - 1; y >= 0; y -= 1) {\n\t\t\tfor (let yy = this.chunkHeight; yy >= 0; yy -= 1) {\n\t\t\t\tconst oy = yy / this.chunkHeight\n\t\t\t\tconst i = y * this.chunkHeight + yy\n\t\t\t\tdata[i] = lerp2(oy, ox, noise1[y], noise1[y+1], noise2[y], noise2[y+1])\n\t\t\t}\n\t\t}\n\t\treturn data\n\t}\n\n\tprivate fillNoiseColumn(x: number): number[] {\n\t\tconst cachedColumn = this.noiseColumnCache[x - this.xOffset]\n\t\tif (cachedColumn) return cachedColumn\n\n\t\tconst data = Array(this.chunkCountY + 1)\n\n\t\tconst xzScale = 684.412 * this.settings.sampling.xz_scale\n\t\tconst yScale = 684.412 * this.settings.sampling.y_scale\n\t\tconst xzFactor = xzScale / this.settings.sampling.xz_factor\n\t\tconst yFactor = yScale / this.settings.sampling.y_factor\n\t\tconst randomDensity = this.settings.random_density_offset ? this.getRandomDensity(x) : 0\n\n\t\tfor (let y = 0; y <= this.chunkCountY; y += 1) {\n\t\t\tlet noise = this.sampleAndClampNoise(x, y, this.mainPerlinNoise.getOctaveNoise(0)!.zo, xzScale, yScale, xzFactor, yFactor)\n\t\t\tconst yOffset = 1 - y * 2 / this.chunkCountY + randomDensity\n\t\t\tconst density = yOffset * this.settings.density_factor + this.settings.density_offset\n\t\t\tconst falloff = (density + this.biomeDepth) * this.biomeScale\n\t\t\tnoise += falloff * (falloff > 0 ? 4 : 1)\n\n\t\t\tif (this.settings.top_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.top_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(this.chunkCountY - y - (this.settings.top_slide.offset)) / (this.settings.top_slide.size)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.settings.bottom_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.bottom_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(y - (this.settings.bottom_slide.offset)) / (this.settings.bottom_slide.size)\n\t\t\t\t)\n\t\t\t}\n\t\t\tdata[y] = noise\n\t\t}\n\n\t\tthis.noiseColumnCache[x - this.xOffset] = data\n\t\treturn data\n\t}\n\n\tprivate getRandomDensity(x: number): number {\n\t\tconst noise = this.depthNoise.sample(x * 200, 10, this.depthNoise.getOctaveNoise(0)!.zo, 1, 0, true)\n\t\tconst a = (noise < 0) ? -noise * 0.3 : noise\n\t\tconst b = a * 24.575625 - 2\n\t\treturn (b < 0) ? b * 0.009486607142857142 : Math.min(b, 1) * 0.006640625\n\t}\n\n\tprivate sampleAndClampNoise(x: number, y: number, z: number, xzScale: number, yScale: number, xzFactor: number, yFactor: number): number {\n\t\tlet a = 0\n\t\tlet b = 0\n\t\tlet c = 0\n\t\tlet d = 1\n\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst x2 = PerlinNoise.wrap(x * xzScale * d)\n\t\t\tconst y2 = PerlinNoise.wrap(y * yScale * d)\n\t\t\tconst z2 = PerlinNoise.wrap(z * xzScale * d)\n\t\t\tconst e = yScale * d\n\n\t\t\tconst minLimitNoise = this.minLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (minLimitNoise) {\n\t\t\t\ta += minLimitNoise.sample(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tconst maxLimitNoise = this.maxLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (maxLimitNoise) {\n\t\t\t\tb += maxLimitNoise.sample(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tif (i < 8) {\n\t\t\t\tconst mainNoise = this.mainPerlinNoise.getOctaveNoise(i)\n\t\t\t\tif (mainNoise) {\n\t\t\t\t\tc += mainNoise.sample(\n\t\t\t\t\t\tPerlinNoise.wrap(x * xzFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(y * yFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(z * xzFactor * d),\n\t\t\t\t\t\tyFactor * d,\n\t\t\t\t\t\ty * yFactor * d \n\t\t\t\t\t) / d\n\t\t\t\t}\n\t\t\t}\n\n\t\t\td /= 2\n\t\t}\n\n\t\treturn clampedLerp(a / 512, b / 512, (c / 10 + 1) / 2)\n\t}\n}\n","import { DataModel } from '@mcschema/core'\nimport type { BlockState } from 'deepslate'\nimport { BlockPos, Chunk, ChunkPos, clampedMap, DensityFunction, FixedBiome, Identifier, NoiseChunkGenerator, NoiseGeneratorSettings, NoiseParameters, NoiseRouter, NoiseSettings, Registry, WorldgenRegistries, XoroshiroRandom } from 'deepslate'\nimport * as deepslate18 from 'deepslate-1.18'\nimport type { VersionId } from '../services'\nimport { checkVersion, fetchAllPresets } from '../services'\nimport { deepClone, deepEqual } from '../Utils'\nimport { NoiseChunkGenerator as OldNoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiome?: string,\n\tbiomeScale?: number,\n\tbiomeDepth?: number,\n\toffset: number,\n\twidth: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nconst Z = 0\n\nconst colors: Record<string, [number, number, number]> = {\n\t'minecraft:air': [150, 160, 170],\n\t'minecraft:water': [20, 80, 170],\n\t'minecraft:lava': [200, 100, 0],\n\t'minecraft:stone': [55, 55, 55],\n\t'minecraft:deepslate': [34, 34, 36],\n\t'minecraft:bedrock': [10, 10, 10],\n\t'minecraft:grass_block': [47, 120, 23],\n\t'minecraft:dirt': [64, 40, 8],\n\t'minecraft:gravel': [70, 70, 70],\n\t'minecraft:sand': [196, 180, 77],\n\t'minecraft:sandstone': [148, 135, 52],\n\t'minecraft:netherrack': [100, 40, 40],\n\t'minecraft:crimson_nylium': [144, 22, 22],\n\t'minecraft:warped_nylium': [28, 115, 113],\n\t'minecraft:basalt': [73, 74, 85],\n\t'minecraft:end_stone': [200, 200, 140],\n}\n\nlet cacheState: any\nlet generatorCache: NoiseChunkGenerator\nlet chunkCache: Chunk[] = []\nconst registryCache = new Map<VersionId, Registry<Registry<any>>>()\n\nexport async function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tif (checkVersion(options.version, '1.18')) {\n\t\tif (checkVersion(options.version, '1.18.2')) {\n\t\t\tawait initRegistries(options.version)\n\t\t}\n\n\t\tconst { settings, generator } = getCached(state, options)\n\n\t\tconst slice = new LevelSlice(-options.offset, options.width, settings.noise.minY, settings.noise.height)\n\t\tslice.generate(generator, options.biome)\n\n\t\tconst data = img.data\n\t\tfor (let x = 0; x < options.width; x += 1) {\n\t\t\tfor (let y = 0; y < settings.noise.height; y += 1) {\n\t\t\t\tconst i = x * 4 + (settings.noise.height-y-1) * 4 * img.width\n\t\t\t\tconst state = slice.getBlockState([x - options.offset, y + settings.noise.minY, Z])\n\t\t\t\tconst color = colors[state.getName().toString()] ?? [0, 0, 0]\n\t\t\t\tdata[i] = color[0]\n\t\t\t\tdata[i + 1] = color[1]\n\t\t\t\tdata[i + 2] = color[2]\n\t\t\t\tdata[i + 3] = 255\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tconst generator = new OldNoiseChunkGenerator(options.seed)\n\tgenerator.reset(state.noise, options.biomeDepth ?? 0, options.biomeScale ?? 0, options.offset, options.width)\n\tconst data = img.data\n\tconst row = img.width * 4\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tconst noise = generator.iterateNoiseColumn(x - options.offset).reverse()\n\t\tfor (let y = 0; y < state.noise.height; y += 1) {\n\t\t\tconst i = y * row + x * 4\n\t\t\tconst color = getColor(noise, y)\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport function getNoiseBlock(x: number, y: number) {\n\tconst chunk = chunkCache.find(c => ChunkPos.minBlockX(c.pos) <= x && ChunkPos.maxBlockX(c.pos) >= x)\n\tif (!chunk) {\n\t\treturn undefined\n\t}\n\treturn chunk.getBlockState(BlockPos.create(x, y, Z))\n}\n\nexport async function densityFunction(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tconst { fn, settings } = await createDensityFunction(state, options)\n\n\tconst arr = Array(options.width * settings.height)\n\tlet min = Infinity\n\tlet max = -Infinity\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tfor (let y = 0; y < settings.height; y += 1) {\n\t\t\tconst i = x + (settings.height-y-1) * options.width\n\t\t\tconst density = fn.compute(DensityFunction.context(x - options.offset, y, 0))\n\t\t\tmin = Math.min(min, density)\n\t\t\tmax = Math.max(max, density)\n\t\t\tarr[i] = density\n\t\t}\n\t}\n\n\tconst data = img.data\n\tfor (let i = 0; i < options.width * settings.height; i += 1) {\n\t\tconst color = Math.floor(clampedMap(arr[i], min, max, 0, 256))\n\t\tdata[4 * i] = color\n\t\tdata[4 * i + 1] = color\n\t\tdata[4 * i + 2] = color\n\t\tdata[4 * i + 3] = 255\n\t}\n}\n\nasync function createDensityFunction(state: any, options: NoiseSettingsOptions) {\n\tawait initRegistries(options.version)\n\n\tconst random = XoroshiroRandom.create(options.seed).forkPositional()\n\tconst settings = NoiseSettings.fromJson({\n\t\tmin_y: -64,\n\t\theight: 384,\n\t\tsize_horizontal: 1,\n\t\tsize_vertical: 2,\n\t\tsampling: { xz_scale: 1, y_scale: 1, xz_factor: 80, y_factor: 160 },\n\t\tbottom_slide: { target: 0.1171875, size: 3, offset: 0 },\n\t\ttop_slide: { target: -0.078125, size: 2, offset: 8 },\n\t\tterrain_shaper: { offset: 0.044, factor: 4, jaggedness: 0 },\n\t})\n\tconst originalFn = DensityFunction.fromJson(state)\n\tconst fn = originalFn.mapAll(new NoiseRouter.Visitor(random, settings))\n\n\treturn {\n\t\tfn,\n\t\tsettings,\n\t}\n}\n\nconst Registries: [string, { fromJson(obj: unknown): any}][] = [\n\t['worldgen/noise', NoiseParameters],\n\t['worldgen/density_function', DensityFunction],\n]\n\nasync function initRegistries(version: VersionId) {\n\tconst rootRegistries = registryCache.get(version) ?? new Registry(new Identifier('misode', 'temp'))\n\tif (!registryCache.has(version)) {\n\t\tawait Promise.all(Registries.map(([id, c]) => fetchRegistry(version, rootRegistries, id, c)))\n\t\tregistryCache.set(version, rootRegistries)\n\t}\n\tWorldgenRegistries.DENSITY_FUNCTION.clear().assign(rootRegistries.getOrThrow(Identifier.create('worldgen/density_function')))\n\tWorldgenRegistries.NOISE.clear().assign(rootRegistries.getOrThrow(Identifier.create('worldgen/noise')))\n}\n\nasync function fetchRegistry<T extends { fromJson(obj: unknown): T }>(version: VersionId, root: Registry<Registry<unknown>>, id: string, clazz: T) {\n\tconst entries = await fetchAllPresets(version, id)\n\tconst registry = new Registry<typeof clazz>(Identifier.create(id))\n\tfor (const [key, value] of entries.entries()) {\n\t\tregistry.register(Identifier.parse(key), clazz.fromJson(value))\n\t}\n\troot.register(registry.key, registry)\n}\n\nfunction getCached(state: unknown, options: NoiseSettingsOptions) {\n\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(state))\n\n\tconst newState = [state, `${options.seed}`, options.biome]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\t\tchunkCache = []\n\t\tif (checkVersion(options.version, '1.18.2')) {\n\t\t\tconst biomeSource = new FixedBiome(Identifier.create('unknown'))\n\t\t\tgeneratorCache = new NoiseChunkGenerator(options.seed, biomeSource, settings)\n\t\t} else {\n\t\t\tconst biomeSource = new deepslate18.FixedBiome('unknown')\n\t\t\tgeneratorCache = new deepslate18.NoiseChunkGenerator(options.seed, biomeSource, settings as any) as any\n\t\t}\n\t}\n\treturn {\n\t\tsettings,\n\t\tgenerator: generatorCache,\n\t}\n}\n\nfunction getColor(noise: number[], y: number): number {\n\tif (noise[y] > 0) {\n\t\treturn 0\n\t}\n\tif (noise[y+1] > 0) {\n\t\treturn 150\n\t}\n\treturn 255\n}\n\nclass LevelSlice {\n\tprivate readonly chunks: Chunk[]\n\tprivate readonly done: boolean[]\n\n\tconstructor(\n\t\tprivate readonly minX: number,\n\t\twidth: number,\n\t\tminY: number,\n\t\theight: number,\n\t) {\n\t\tthis.done = []\n\t\tthis.chunks = [...Array(Math.ceil(width / 16) + 1)]\n\t\t\t.map((_, i) => {\n\t\t\t\tconst x = (minX >> 4) + i\n\t\t\t\tconst cached = chunkCache.find(c => c.pos[0] === x)\n\t\t\t\tif (cached) {\n\t\t\t\t\tthis.done[i] = true\n\t\t\t\t\treturn cached\n\t\t\t\t}\n\t\t\t\treturn new Chunk(minY, height, ChunkPos.create(x, Z >> 4))\n\t\t\t})\n\t}\n\n\tpublic generate(generator: NoiseChunkGenerator, forcedBiome?: string) {\n\t\tthis.chunks.forEach((chunk, i) => {\n\t\t\tif (!this.done[i]) {\n\t\t\t\tgenerator.fill(chunk, true)\n\t\t\t\tgenerator.buildSurface(chunk, forcedBiome)\n\t\t\t\tthis.done[i] = true\n\t\t\t\tchunkCache.push(chunk)\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic getBlockState(pos: BlockPos): BlockState {\n\t\tconst chunkIndex = (pos[0] >> 4) - (this.minX >> 4)\n\t\treturn this.chunks[chunkIndex].getBlockState(pos)\n\t}\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport type { NoiseParameters } from 'deepslate'\nimport { NoiseGeneratorSettings } from 'deepslate'\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { biomeMap, getBiome } from '../../previews'\nimport { newSeed } from '../../Utils'\n\nconst LAYERS = ['biomes', 'temperature', 'humidity', 'continentalness', 'erosion', 'weirdness'] as const\n\nexport const BiomeSourcePreview = ({ model, data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [scale, setScale] = useState(2)\n\tconst [focused, setFocused] = useState<{[k: string]: number | string} | undefined>(undefined)\n\tconst [layers, setLayers] = useState(new Set<typeof LAYERS[number]>(['biomes']))\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst res = useRef(1)\n\tconst refineTimeout = useRef<number>(undefined)\n\n\tconst seed = BigInt(model.get(new Path(['generator', 'seed'])))\n\tconst octaves = useMemo(() => {\n\t\tif (!shown) return undefined\n\t\treturn getOctaves(model.get(new Path(['generator', 'settings'])))\n\t}, [shown])\n\tconst state = shown ? calculateState(data, octaves!) : ''\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [200 / res.current, 200 / res.current]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { octaves: octaves!, biomeColors: {}, layers, offset: offset.current, scale, seed, res: res.current, version }\n\t\t\tawait biomeMap(data, img, options)\n\t\t\tif (res.current === 4) {\n\t\t\t\tclearTimeout(refineTimeout.current)\n\t\t\t\trefineTimeout.current = setTimeout(() => {\n\t\t\t\t\tres.current = 1\n\t\t\t\t\tredraw()\n\t\t\t\t}, 150) as any\n\t\t\t}\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 200\n\t\t\toffset.current[1] = offset.current[1] + dy * 200\n\t\t\tclearTimeout(refineTimeout.current)\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst options = { octaves: octaves!, biomeColors: {}, layers, offset: offset.current, scale, seed, res: 1, version }\n\t\t\tconst biome = await getBiome(data, Math.floor(x * 200), Math.floor(y * 200), options)\n\t\t\tsetFocused(biome)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, scale, seed, layers])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, layers, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.current[1] * scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t{focused && <Btn label={focused.biome as string} class=\"no-pointer\" />}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t<BtnMenu icon=\"stack\" tooltip={locale('configure_layers')}>\n\t\t\t\t\t{LAYERS.map(name => {\n\t\t\t\t\t\tconst enabled = layers.has(name)\n\t\t\t\t\t\treturn <Btn label={locale(`layer.${name}`)} \n\t\t\t\t\t\t\tactive={enabled}\n\t\t\t\t\t\t\ttooltip={enabled ? locale('enabled') : locale('disabled')}\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\tsetLayers(new Set([name]))\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t}} />\n\t\t\t\t\t})}\n\t\t\t\t</BtnMenu>}\n\t\t\t{(type === 'multi_noise' || type === 'checkerboard') && <>\n\t\t\t\t<Btn icon=\"dash\" tooltip={locale('zoom_out')}\n\t\t\t\t\tonClick={() => changeScale(scale * 1.5)} />\n\t\t\t\t<Btn icon=\"plus\" tooltip={locale('zoom_in')}\n\t\t\t\t\tonClick={() => changeScale(scale / 1.5)} />\n\t\t\t</>}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\t\tonClick={() => newSeed(model)} />}\n\t\t</div>\n\t\t{focused?.temperature && <div class=\"controls secondary-controls\">\n\t\t\t<Btn class=\"no-pointer\" label={Object.entries(focused)\n\t\t\t\t.filter(([k]) => k !== 'biome')\n\t\t\t\t.map(([k, v]) => `${k[0].toUpperCase()}: ${(v as number).toFixed(2)}`).join(' ')}/>\n\t\t</div>}\n\t\t<canvas ref={canvas} width=\"200\" height=\"200\"></canvas>\n\t</>\n}\n\nfunction calculateState(data: any, octaves: Record<string, NoiseParameters>) {\n\treturn JSON.stringify([data, octaves])\n}\n\nexport function getOctaves(obj: any): Record<string, NoiseParameters> {\n\tif (typeof obj !== 'string') {\n\t\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(obj))\n\t\tobj = settings.legacyRandomSource ? 'minecraft:nether' : 'minecraft:overworld'\n\t}\n\tswitch (obj.replace(/^minecraft:/, '')) {\n\t\tcase 'overworld':\n\t\tcase 'amplified':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -9, amplitudes: [1.5, 0, 1, 0, 0, 0] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1, 0, 0, 0, 0] },\n\t\t\t\tcontinentalness: { firstOctave: -9, amplitudes: [1, 1, 2, 2, 2, 1, 1, 1, 1] },\n\t\t\t\terosion: { firstOctave: -9, amplitudes: [1, 1, 0, 1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 2, 1, 0, 0, 0] },\n\t\t\t\tshift: { firstOctave: -3, amplitudes: [1, 1, 1, 0] },\n\t\t\t}\n\t\tcase 'end':\n\t\tcase 'floating_islands':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\thumidity: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tcontinentalness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\terosion: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tweirdness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tcontinentalness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\terosion: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t}\n}\n","import { useEffect, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { decorator } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const DecoratorPreview = ({ data, version, shown }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(randomSeed())\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [scale * 16, scale * 16]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t},\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t<Btn icon=\"dash\" tooltip={locale('zoom_out')}\n\t\t\t\tonClick={() => setScale(Math.min(16, scale + 1))} />\n\t\t\t<Btn icon=\"plus\" tooltip={locale('zoom_in')}\n\t\t\t\tonClick={() => setScale(Math.max(1, scale - 1))} />\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width=\"64\" height=\"64\"></canvas>\n\t</>\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { densityFunction } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const DensityFunctionPreview = ({ data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [autoScroll, setAutoScroll] = useState(false)\n\tconst [focused, setFocused] = useState<string | undefined>(undefined)\n\tconst offset = useRef(0)\n\tconst scrollInterval = useRef<number | undefined>(undefined)\n\tconst state = JSON.stringify([data])\n\n\tconst size = data?.noise?.height ?? 256\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [size, size]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { offset: offset.current, width: img.width, seed, version }\n\t\t\tawait densityFunction(data, img, options)\n\t\t},\n\t\tasync onDrag(dx) {\n\t\t\toffset.current += dx * size\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst worldX = Math.floor(x * size - offset.current)\n\t\t\tconst worldY = size - Math.max(1, Math.ceil(y * size)) + (data?.noise?.min_y ?? 0)\n\t\t\tsetFocused(`X=${worldX} Y=${worldY}`)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, seed])\n\n\tuseEffect(() => {\n\t\tif (scrollInterval.current) {\n\t\t\tclearInterval(scrollInterval.current)\n\t\t}\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t\tif (autoScroll) {\n\t\t\t\tscrollInterval.current = setInterval(() => {\n\t\t\t\t\toffset.current -= 8\n\t\t\t\t\tredraw()\n\t\t\t\t}, 100) as any\n\t\t\t}\n\t\t}\n\t}, [state, seed, shown, autoScroll])\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t{focused && <Btn label={focused} class=\"no-pointer\" />}\n\t\t\t<BtnMenu icon=\"gear\" tooltip={locale('terrain_settings')}>\n\t\t\t\t<Btn icon={autoScroll ? 'square_fill' : 'square'} label={locale('preview.auto_scroll')} onClick={() => setAutoScroll(!autoScroll)} />\n\t\t\t</BtnMenu>\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width={size} height={size}></canvas>\n\t</>\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { normalNoise } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const NoisePreview = ({ data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [scale, setScale] = useState(2)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst state = JSON.stringify([data])\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [256, 256]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { offset: offset.current, scale, seed, version }\n\t\t\tnormalNoise(data, img, options)\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 256\n\t\t\toffset.current[1] = offset.current[1] + dy * 256\n\t\t\tredraw()\n\t\t},\n\t}, [state, scale, seed])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.current[1] * scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t<Btn icon=\"dash\" tooltip={locale('zoom_out')}\n\t\t\t\tonClick={() => changeScale(scale * 1.5)} />\n\t\t\t<Btn icon=\"plus\" tooltip={locale('zoom_in')}\n\t\t\t\tonClick={() => changeScale(scale / 1.5)} />\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width=\"256\" height=\"256\"></canvas>\n\t</>\n}\n","import { DataModel } from '@mcschema/core'\nimport { LegacyRandom, NoiseParameters, NormalNoise } from 'deepslate'\nimport type { VersionId } from '../services'\n\nexport type NoiseOptions = {\n\toffset: [number, number],\n\tscale: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nexport function normalNoise(state: any, img: ImageData, options: NoiseOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst params = NoiseParameters.fromJson(DataModel.unwrapLists(state))\n\tconst noise = new NormalNoise(random, params)\n\n\tconst ox = -options.offset[0] - 100\n\tconst oz = -options.offset[1] - 100\n\tconst data = img.data\n\tfor (let x = 0; x < 256; x += 1) {\n\t\tfor (let y = 0; y < 256; y += 1) {\n\t\t\tconst i = x * 4 + y * 4 * 256\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oz) * options.scale\n\t\t\tconst color = (noise.sample(xx, yy, 0) + 1) * 128\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n","import { useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { getNoiseBlock, noiseSettings } from '../../previews'\nimport { CachedCollections, checkVersion } from '../../services'\nimport { randomSeed } from '../../Utils'\n\nexport const NoiseSettingsPreview = ({ data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [biome, setBiome] = useState('minecraft:plains')\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [autoScroll, setAutoScroll] = useState(false)\n\tconst [focused, setFocused] = useState<string | undefined>(undefined)\n\tconst offset = useRef(0)\n\tconst scrollInterval = useRef<number | undefined>(undefined)\n\tconst state = JSON.stringify([data, biomeScale, biomeDepth])\n\n\tconst size = data?.noise?.height ?? 256\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [size, size]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { biome, biomeDepth, biomeScale, offset: offset.current, width: img.width, seed, version }\n\t\t\tawait noiseSettings(data, img, options)\n\t\t},\n\t\tasync onDrag(dx) {\n\t\t\toffset.current += dx * size\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst worldX = Math.floor(x * size - offset.current)\n\t\t\tconst worldY = size - Math.max(1, Math.ceil(y * size)) + (data?.noise?.min_y ?? 0)\n\t\t\tconst block = getNoiseBlock(worldX, worldY)\n\t\t\tsetFocused(block ? `Y=${worldY} (${block.getName().path})` : `Y=${worldY}`)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, seed])\n\n\tuseEffect(() => {\n\t\tif (scrollInterval.current) {\n\t\t\tclearInterval(scrollInterval.current)\n\t\t}\n\t\tif (shown) {\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait redraw()\n\t\t\t\t\tif (autoScroll) {\n\t\t\t\t\t\tscrollInterval.current = setInterval(() => {\n\t\t\t\t\t\t\toffset.current -= 8\n\t\t\t\t\t\t\tredraw()\n\t\t\t\t\t\t}, 100) as any\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t})()\n\t\t}\n\t}, [state, seed, shown, biome, biomeScale, biomeDepth, autoScroll])\n\n\tconst allBiomes = useMemo(() => CachedCollections?.get('worldgen/biome') ?? [], [version])\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t{focused && <Btn label={focused} class=\"no-pointer\" />}\n\t\t\t<BtnMenu icon=\"gear\" tooltip={locale('terrain_settings')}>\n\t\t\t\t{checkVersion(version, undefined, '1.17') ? <>\n\t\t\t\t\t<BtnInput label={locale('preview.scale')} value={`${biomeScale}`} onChange={v => setBiomeScale(Number(v))} />\n\t\t\t\t\t<BtnInput label={locale('preview.depth')} value={`${biomeDepth}`} onChange={v => setBiomeDepth(Number(v))} />\n\t\t\t\t</> :\n\t\t\t\t\t<BtnInput label={locale('preview.biome')} value={biome} onChange={setBiome} dataList={allBiomes} larger />\n\t\t\t\t}\n\t\t\t\t<Btn icon={autoScroll ? 'square_fill' : 'square'} label={locale('preview.auto_scroll')} onClick={() => setAutoScroll(!autoScroll)} />\n\t\t\t</BtnMenu>\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width={size} height={size}></canvas>\n\t</>\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../../hooks'\nimport type { VersionId } from '../../services'\nimport { checkVersion } from '../../services'\nimport { BiomeSourcePreview, DecoratorPreview, DensityFunctionPreview, NoisePreview, NoiseSettingsPreview } from '../previews'\n\nexport const HasPreview = ['dimension', 'worldgen/density_function', 'worldgen/noise', 'worldgen/noise_settings', 'worldgen/configured_feature', 'worldgen/placed_feature']\n\ntype PreviewPanelProps = {\n\tmodel: DataModel | null,\n\tversion: VersionId,\n\tid: string,\n\tshown: boolean,\n\tonError: (message: string) => unknown,\n}\nexport function PreviewPanel({ model, version, id, shown }: PreviewPanelProps) {\n\tconst [, setCount] = useState(0)\n\n\tuseModel(model, () => {\n\t\tsetCount(count => count + 1)\n\t})\n\n\tif (!model) return <></>\n\n\tif (id === 'dimension' && model.get(new Path(['generator', 'type']))?.endsWith('noise')) {\n\t\tconst data = model.get(new Path(['generator', 'biome_source']))\n\t\tif (data) return <BiomeSourcePreview {...{ model, version, shown, data }} />\n\t}\n\n\tif (id === 'worldgen/density_function') {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <DensityFunctionPreview {...{ model, version, shown, data }} />\n\t}\n\n\tif (id === 'worldgen/noise') {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <NoisePreview {...{ model, version, shown, data }} />\n\t}\n\n\tif (id === 'worldgen/noise_settings') {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <NoiseSettingsPreview {...{ model, version, shown, data }} />\n\t}\n\n\tif ((id === 'worldgen/placed_feature' || (id === 'worldgen/configured_feature' && checkVersion(version, '1.16', '1.17')))) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <DecoratorPreview {...{ model, version, shown, data }} />\n\t}\n\n\treturn <></>\n}\n","import type { DataModel, Hook } from '@mcschema/core'\nimport { ModelPath, relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../services'\n\nexport function getOutput(model: DataModel, blockStates: BlockStateRegistry): any {\n\treturn model.schema.hook(transformOutput, new ModelPath(model), model.data, { blockStates })\n}\n\nexport type OutputProps = {\n\tblockStates: BlockStateRegistry,\n}\nexport const transformOutput: Hook<[any, OutputProps], any> = {\n\tbase({}, _, value) {\n\t\treturn value\n\t},\n\n\tchoice({ switchNode }, path, value, props) {\n\t\treturn switchNode.hook(this, path, value, props)\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tif (!Array.isArray(value)) return value\n\t\tconst res = value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj.node, props)\n\t\t)\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a as any]\n\t\t}\n\t\treturn res\n\t},\n\n\tmap({ children, config }, path, value, props) {\n\t\tif (value === undefined) return undefined\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst res: any = {}\n\t\tObject.keys(value).forEach(f => {\n\t\t\tif (blockState) {\n\t\t\t\tif (!Object.keys(blockState.properties ?? {}).includes(f)) return\n\t\t\t}\n\t\t\tres[f] = children.hook(this, path.push(f), value[f], props)\n\t\t})\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\n\t\t}\n\t\treturn res\n\t},\n\n\tobject({ getActiveFields }, path, value, props) {\n\t\tif (value === undefined || value === null || typeof value !== 'object') {\n\t\t\treturn value\n\t\t}\n\t\tconst res: any = {}\n\t\tconst activeFields = getActiveFields(path)\n\t\tObject.keys(activeFields)\n\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\t.forEach(f => {\n\t\t\t\tconst out = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t\tif (out !== undefined && out !== null) {\n\t\t\t\t\tres[f] = out\n\t\t\t\t}\n\t\t\t})\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\n\t\t}\n\t\treturn res\n\t},\n}\n","import { DataModel } from '@mcschema/core'\nimport brace from 'brace'\nimport 'brace/mode/json'\nimport 'brace/mode/yaml'\nimport json from 'comment-json'\nimport yaml from 'js-yaml'\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useModel } from '../../hooks'\nimport { getOutput } from '../../schema/transformOutput'\nimport type { BlockStateRegistry } from '../../services'\nimport { Store } from '../../Store'\nimport { message } from '../../Utils'\n\nconst INDENT: Record<string, number | string | undefined> = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n\tminified: undefined,\n}\n\nconst FORMATS: Record<string, {\n\tparse: (v: string) => any,\n\tstringify: (v: any, indentation: string | number | undefined) => string,\n}> = {\n\tjson: {\n\t\tparse: json.parse,\n\t\tstringify: (v, i) => json.stringify(v, null, i) + '\\n',\n\t},\n\tyaml: {\n\t\tparse: yaml.load,\n\t\tstringify: (v, i) => yaml.dump(v, {\n\t\t\tflowLevel: i === undefined ? 0 : -1,\n\t\t\tindent: typeof i === 'string' ? 4 : i,\n\t\t}),\n\t},\n}\n\ninterface Editor {\n\tgetValue(): string\n\tsetValue(value: string): void\n\tconfigure(indent: string, format: string): void\n\tselect(): void\n}\n\ntype SourcePanelProps = {\n\tname: string,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tdoCopy?: number,\n\tdoDownload?: number,\n\tdoImport?: number,\n\tcopySuccess: () => unknown,\n\tonError: (message: string | Error) => unknown,\n}\nexport function SourcePanel({ name, model, blockStates, doCopy, doDownload, doImport, copySuccess, onError }: SourcePanelProps) {\n\tconst { locale } = useLocale()\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst [format, setFormat] = useState(Store.getFormat())\n\tconst [highlighting, setHighlighting] = useState(Store.getHighlighting())\n\tconst download = useRef<HTMLAnchorElement>(null)\n\tconst retransform = useRef<Function>()\n\tconst onImport = useRef<(e: any) => any>()\n\n\tconst textarea = useRef<HTMLTextAreaElement>()\n\tconst editor = useRef<Editor>()\n\n\tconst getSerializedOutput = useCallback((model: DataModel, blockStates: BlockStateRegistry) => {\n\t\tconst data = getOutput(model, blockStates)\n\t\treturn FORMATS[format].stringify(data, INDENT[indent])\n\t}, [indent, format])\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst output = getSerializedOutput(model, blockStates)\n\t\t\t\teditor.current.setValue(output)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\te.message = `Error getting JSON output: ${e.message}`\n\t\t\t\t\tonError(e)\n\t\t\t\t} else {\n\t\t\t\t\tonError(`Error getting JSON output: ${message(e)}`)\n\t\t\t\t}\n\t\t\t\tconsole.error(e)\n\t\t\t\teditor.current.setValue('')\n\t\t\t}\n\t\t}\n\n\t\tonImport.current = () => {\n\t\t\tconst value = editor.current.getValue()\n\t\t\tif (value.length === 0) return\n\t\t\ttry {\n\t\t\t\tconst data = FORMATS[format].parse(value)\n\t\t\t\tmodel?.reset(DataModel.wrapLists(data), false)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\te.message = `Error importing: ${e.message}`\n\t\t\t\t\tonError(e)\n\t\t\t\t} else {\n\t\t\t\t\tonError(`Error importing: ${message(e)}`)\n\t\t\t\t}\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t}\n\t}, [model, blockStates, indent, format, highlighting])\n\n\tuseEffect(() => {\n\t\tif (highlighting) {\n\t\t\tconst braceEditor = brace.edit('editor')\n\t\t\tbraceEditor.setOptions({\n\t\t\t\tfontSize: 14,\n\t\t\t\tshowFoldWidgets: false,\n\t\t\t\thighlightSelectedWord: false,\n\t\t\t})\n\t\t\tbraceEditor.$blockScrolling = Infinity\n\t\t\tbraceEditor.on('blur', e => onImport.current(e))\n\t\t\tbraceEditor.getSession().setMode('ace/mode/json')\n\n\t\t\teditor.current = {\n\t\t\t\tgetValue() {\n\t\t\t\t\treturn braceEditor.getSession().getValue()\n\t\t\t\t},\n\t\t\t\tsetValue(value) {\n\t\t\t\t\tbraceEditor.getSession().setValue(value)\n\t\t\t\t},\n\t\t\t\tconfigure(indent, format) {\n\t\t\t\t\tbraceEditor.setOption('useSoftTabs', indent !== 'tabs')\n\t\t\t\t\tbraceEditor.setOption('tabSize', indent === 'tabs' ? 4 : INDENT[indent])\n\t\t\t\t\tbraceEditor.getSession().setMode(`ace/mode/${format}`)\n\t\t\t\t},\n\t\t\t\tselect() {\n\t\t\t\t\tbraceEditor.selectAll()\n\t\t\t\t},\n\t\t\t}\n\t\t} else {\n\t\t\teditor.current = {\n\t\t\t\tgetValue() {\n\t\t\t\t\treturn textarea.current.value\n\t\t\t\t},\n\t\t\t\tsetValue(value: string) {\n\t\t\t\t\ttextarea.current.value = value\n\t\t\t\t},\n\t\t\t\tconfigure() {},\n\t\t\t\tselect() {},\n\t\t\t}\n\t\t}\n\t}, [highlighting])\n\n\tuseModel(model, () => {\n\t\tretransform.current()\n\t})\n\tuseEffect(() => {\n\t\tif (model) retransform.current()\n\t}, [model])\n\n\tuseEffect(() => {\n\t\teditor.current.configure(indent, format)\n\t\tretransform.current()\n\t}, [indent, format, highlighting])\n\n\tuseEffect(() => {\n\t\tif (doCopy && model && blockStates) {\n\t\t\tnavigator.clipboard.writeText(getSerializedOutput(model, blockStates)).then(() => {\n\t\t\t\tcopySuccess()\n\t\t\t})\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && model && blockStates && download.current) {\n\t\t\tconst content = encodeURIComponent(getSerializedOutput(model, blockStates))\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.${format}`)\n\t\t\tdownload.current.click()\n\t\t}\n\t}, [doDownload])\n\n\tuseEffect(() => {\n\t\tif (doImport && editor.current) {\n\t\t\teditor.current.setValue('')\n\t\t\teditor.current.select()\n\t\t}\n\t}, [doImport])\n\n\tconst changeIndent = (value: string) => {\n\t\tStore.setIndent(value)\n\t\tsetIndent(value)\n\t}\n\n\tconst changeFormat = (value: string) => {\n\t\tStore.setFormat(value)\n\t\tsetFormat(value)\n\t}\n\n\tconst changeHighlighting = (value: boolean) => {\n\t\tStore.setHighlighting(value)\n\t\tsetHighlighting(value)\n\t}\n\n\treturn <> \n\t\t<div class=\"controls source-controls\">\n\t\t\t<BtnMenu icon=\"gear\" tooltip={locale('output_settings')} data-cy=\"source-controls\">\n\t\t\t\t{Object.entries(INDENT).map(([key]) =>\n\t\t\t\t\t<Btn label={locale(`indentation.${key}`)} active={indent === key}\n\t\t\t\t\t\tonClick={() => changeIndent(key)}/>\n\t\t\t\t)}\n\t\t\t\t<hr />\n\t\t\t\t{Object.keys(FORMATS).map(key =>\n\t\t\t\t\t<Btn label={locale(`format.${key}`)} active={format === key}\n\t\t\t\t\t\tonClick={() => changeFormat(key)} />)}\n\t\t\t\t<hr />\n\t\t\t\t<Btn icon={highlighting ? 'square_fill' : 'square'} label={locale('highlighting')}\n\t\t\t\t\tonClick={() => changeHighlighting(!highlighting)} />\n\t\t\t</BtnMenu>\n\t\t</div>\n\t\t{highlighting\n\t\t\t? <pre id=\"editor\" class=\"source\"></pre>\n\t\t\t: <textarea ref={textarea} class=\"source\" spellcheck={false} autocorrect=\"off\" onBlur={onImport.current}></textarea>}\n\t\t<a ref={download} style=\"display: none;\"></a>\n\t</>\n}\n","import type { INode, Path } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\n\nexport class ModelWrapper extends DataModel {\n\tconstructor(\n\t\tschema: INode<any>,\n\t\tprivate readonly mapper: (path: Path) => Path,\n\t\tprivate readonly getter: (path: Path) => any,\n\t\tprivate readonly setter: (path: Path, value: any, silent?: boolean) => any,\n\t) {\n\t\tsuper(schema)\n\t}\n\n\tmap(path: Path) {\n\t\treturn this.mapper(path)\n\t}\n\n\tget(path: Path) {\n\t\treturn this.getter(path)\n\t}\n\n\tset(path: Path, value: any, silent?: boolean) {\n\t\treturn this.setter(path, value, silent)\n\t}\n}\n","import type { BooleanHookParams, EnumOption, Hook, INode, NodeChildren, NumberHookParams, StringHookParams, ValidationOption } from '@mcschema/core'\nimport { DataModel, ListNode, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { ComponentChildren, JSX } from 'preact'\nimport { memo } from 'preact/compat'\nimport { useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Btn, Octicon } from '../components'\nimport { localize } from '../contexts'\nimport { useFocus } from '../hooks'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { CachedDecorator, CachedFeature } from '../services'\nimport { deepClone, deepEqual, hexId, isObject, newSeed } from '../Utils'\nimport { ModelWrapper } from './ModelWrapper'\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'recipe.type', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'dimension.generator.biome_source.preset', 'carver.type', 'feature.type', 'decorator.type', 'feature.tree.minimum_size.type', 'block_state_provider.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'int_provider.type', 'float_provider.type', 'height_provider.type', 'structure_feature.type', 'surface_builder.type', 'processor.processor_type', 'rule_test.predicate_type', 'pos_rule_test.predicate_type', 'template_element.element_type', 'block_placer.type', 'block_predicate.type', 'material_rule.type', 'material_condition.type', 'structure_placement.type', 'density_function.type']\nconst hiddenFields = ['number_provider.type', 'score_provider.type', 'nbt_provider.type', 'int_provider.type', 'float_provider.type', 'height_provider.type']\nconst flattenedFields = ['feature.config', 'decorator.config', 'int_provider.value', 'float_provider.value', 'block_state_provider.simple_state_provider.state', 'block_state_provider.rotated_block_provider.state', 'block_state_provider.weighted_state_provider.entries.entry.data', 'rule_test.block_state', 'structure_feature.config', 'surface_builder.config', 'template_pool.elements.entry.element', 'decorator.block_survives_filter.state', 'material_rule.block.result_state']\nconst inlineFields = ['loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'feature.type', 'decorator.type', 'block_state_provider.type', 'feature.tree.minimum_size.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'block_placer.type', 'rule_test.predicate_type', 'processor.processor_type', 'template_element.element_type', 'nbt_operation.op', 'number_provider.value', 'score_provider.name', 'score_provider.target', 'nbt_provider.source', 'nbt_provider.target', 'generator_biome.biome', 'block_predicate.type', 'material_rule.type', 'material_condition.type', 'density_function.type']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\nconst fixedLists = ['generator_biome.parameters.temperature', 'generator_biome.parameters.humidity', 'generator_biome.parameters.continentalness', 'generator_biome.parameters.erosion', 'generator_biome.parameters.depth', 'generator_biome.parameters.weirdness', 'feature.end_spike.crystal_beam_target', 'feature.end_gateway.exit', 'decorator.block_filter.offset', 'block_predicate.matching_blocks.offset', 'block_predicate.matching_fluids.offset', 'model_element.from', 'model_element.to', 'model_element.rotation.origin', 'model_element.faces.uv', 'item_transform.rotation', 'item_transform.translation', 'item_transform.scale', 'generator_structure.random_spread.locate_offset']\nconst collapsedFields = ['noise_settings.surface_rule', 'noise_settings.noise.terrain_shaper']\nconst collapsableFields = ['density_function.argument', 'density_function.argument1', 'density_function.argument2', 'density_function.input', 'density_function.when_in_range', 'density_function.when_out_of_range']\n\nconst findGenerator = (id: string) => {\n\treturn config.generators.find(g => g.id === id.replace(/^\\$/, ''))\n}\n\n/**\n * Secondary model used to remember the keys of a map\n */\nconst keysModel = new DataModel(MapNode(\n\tStringNode(),\n\tStringNode()\n), { historyMax: 0 })\n\ntype JSXTriple = [JSX.Element | null, JSX.Element | null, JSX.Element | null]\ntype RenderHook = Hook<[any, string, VersionId, BlockStateRegistry, Record<string, any>], JSXTriple>\n\ntype NodeProps<T> = T & {\n\tnode: INode<any>,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record<string, any>,\n}\n\nexport function FullNode({ model, lang, version, blockStates }: { model: DataModel, lang: string, version: VersionId, blockStates: BlockStateRegistry }) {\n\tconst path = new ModelPath(model)\n\tconst [prefix, suffix, body] = model.schema.hook(renderHtml, path, deepClone(model.data), lang, version, blockStates, {})\n\treturn suffix?.props?.children.some((c: any) => c) ? <div class={`node ${model.schema.type(path)}-node`} data-category={model.schema.category(path)}>\n\t\t<div class=\"node-header\">{prefix}{suffix}</div>\n\t\t<div class=\"node-body\">{body}</div>\n\t</div> : body\n}\n\nconst renderHtml: RenderHook = {\n\tbase() {\n\t\treturn [null, null, null]\n\t},\n\n\tboolean(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, <BooleanSuffix {...{...params, path, value, lang, version, states, ctx}} />, null]\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, lang, version, states, ctx) {\n\t\tconst choice = switchNode.activeCase(path, true) as typeof choices[number]\n\t\tconst contextPath = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, contextPath, value, lang, version, states, ctx)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\t\tconst choiceContextPath = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\t\tconst set = (type: string) => {\n\t\t\tconst c = choices.find(c => c.type === type) ?? choice\n\t\t\tconst def = c.node.default()\n\t\t\tconst newValue = c.change\n\t\t\t\t? c.change(DataModel.unwrapLists(value))\n\t\t\t\t: config.choiceContext === 'feature' && def?.type === 'minecraft:decorated' ? def.config.feature : def\n\t\t\tpath.model.set(path, DataModel.wrapLists(newValue))\n\t\t}\n\t\tconst inject = <select value={choice.type} onChange={(e) => set((e.target as HTMLSelectElement).value)}>\n\t\t\t{choices.map(c => <option value={c.type}>\n\t\t\t\t{pathLocale(lang, choiceContextPath.contextPush(c.type))}\n\t\t\t</option>)}\n\t\t</select>\n\t\treturn [prefix, <>{inject}{suffix}</>, body]\n\t},\n\n\tlist({ children, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\t\tconst [maxShown, setMaxShown] = useState(50)\n\n\t\tconst context = path.getContext().join('.')\n\t\tif (fixedLists.includes(context)) {\n\t\t\tconst prefix = <>\n\t\t\t\t{[...Array(config.maxLength!)].map((_, i) =>\n\t\t\t\t\t<ErrorPopup lang={lang} path={path.modelPush(i)} />)}\n\t\t\t\t<div class=\"fixed-list\"></div>\n\t\t\t</>\n\t\t\tconst suffix = <>{[...Array(config.maxLength)].map((_, i) => {\n\t\t\t\tconst child = children.hook(this, path.modelPush(i), value?.[i]?.node, lang, version, states, ctx)\n\t\t\t\treturn child[1]\n\t\t\t})}</>\n\t\t\treturn [prefix, suffix, null]\n\t\t}\n\n\t\tconst onAdd = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [{ node, id: hexId() }, ...value])\n\t\t}\n\t\tconst onAddBottom = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [...value, { node, id: hexId() }])\n\t\t}\n\t\tconst suffix = <button class=\"add tooltipped tip-se\" aria-label={localize(lang, 'add_top')} onClick={onAdd}>{Octicon.plus_circle}</button>\n\t\tconst body = <>\n\t\t\t{(value && Array.isArray(value)) && value.map(({ node: cValue, id: cId }, index) => {\n\t\t\t\tif (index === maxShown) {\n\t\t\t\t\treturn <div class=\"node node-header\">\n\t\t\t\t\t\t<label>{localize(lang, 'entries_hidden', `${value.length - maxShown}`)}</label>\n\t\t\t\t\t\t<button onClick={() => setMaxShown(Math.min(maxShown + 50, value.length))}>{localize(lang, 'entries_hidden.more', '50')}</button>\n\t\t\t\t\t\t<button onClick={() => setMaxShown(value.length)}>{localize(lang, 'entries_hidden.all')}</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\tif (index > maxShown) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst cPath = path.push(index).contextPush('entry')\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(cId)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn <div class=\"node node-header\" data-category={children.category(cPath)}>\n\t\t\t\t\t\t<ErrorPopup lang={lang} path={cPath} nested />\n\t\t\t\t\t\t<button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'expand')}\\n${localize(lang, 'expand_all', 'Ctrl')}`} onClick={expand(cId)}>{Octicon.chevron_right}</button>\n\t\t\t\t\t\t<label>{pathLocale(lang, cPath, `${index}`)}</label>\n\t\t\t\t\t\t<Collapsed key={cId} path={cPath} value={cValue} schema={children} />\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\tconst onMoveUp = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index - 1], v[index]] = [v[index], v[index - 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst onMoveDown = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index + 1], v[index]] = [v[index], v[index + 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst actions: MenuAction[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'duplicate',\n\t\t\t\t\t\tlabel: 'duplicate',\n\t\t\t\t\t\tonSelect: () => {\n\t\t\t\t\t\t\tconst v = [...path.get()]\n\t\t\t\t\t\t\tv.splice(index, 0, { id: hexId(), node: deepClone(cValue) })\n\t\t\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t\treturn <MemoedTreeNode key={cId} path={cPath} schema={children} value={cValue} {...{lang, version, states, actions}} ctx={{...ctx, index: (index === 0 ? 1 : 0) + (index === value.length - 1 ? 2 : 0)}}>\n\t\t\t\t\t{canToggle && <button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'collapse')}\\n${localize(lang, 'collapse_all', 'Ctrl')}`} onClick={collapse(cId)}>{Octicon.chevron_down}</button>}\n\t\t\t\t\t<button class=\"remove tooltipped tip-se\" aria-label={localize(lang, 'remove')} onClick={onRemove}>{Octicon.trashcan}</button>\n\t\t\t\t\t{value.length > 1 && <div class=\"node-move\">\n\t\t\t\t\t\t<button class=\"move tooltipped tip-se\" aria-label={localize(lang, 'move_up')} onClick={onMoveUp} disabled={index === 0}>{Octicon.chevron_up}</button>\n\t\t\t\t\t\t<button class=\"move tooltipped tip-se\" aria-label={localize(lang, 'move_down')} onClick={onMoveDown} disabled={index === value.length - 1}>{Octicon.chevron_down}</button>\n\t\t\t\t\t</div>}\n\t\t\t\t</MemoedTreeNode>\n\t\t\t})}\n\t\t\t{(value && value.length > 0 && value.length <= maxShown) && <div class=\"node node-header\">\n\t\t\t\t<button class=\"add tooltipped tip-se\" aria-label={localize(lang, 'add_bottom')} onClick={onAddBottom}>{Octicon.plus_circle}</button>\n\t\t\t</div>}\n\t\t</>\n\t\treturn [null, suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = () => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), DataModel.wrapLists(children.default()))\n\t\t}\n\t\tconst blockState = config.validation?.validator === 'block_state_map' ? states?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst keysSchema = blockState?.properties\n\t\t\t? StringNode(null!, { enum: Object.keys(blockState.properties ?? {}) })\n\t\t\t: keys\n\t\tif (blockState && path.last() === 'Properties') {\n\t\t\tif (typeof value !== 'object') value = {}\n\t\t\tconst properties = Object.entries(blockState.properties ?? {})\n\t\t\t\t.map(([key, values]) => [key, StringNode(null!, { enum: values })])\n\t\t\tObject.entries(blockState.properties ?? {}).forEach(([key, values]) => {\n\t\t\t\tif (typeof value[key] !== 'string') {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.expected_string')\n\t\t\t\t} else if (!values.includes(value[key])) {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.invalid_enum_option', value[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn ObjectNode(Object.fromEntries(properties)).hook(this, path, value, lang, version, states, ctx)\n\t\t}\n\t\tconst suffix = <>\n\t\t\t{keysSchema.hook(this, keyPath, keyPath.get() ?? '', lang, version, states, ctx)[1]}\n\t\t\t<button class=\"add tooltipped tip-se\" aria-label={localize(lang, 'add')} onClick={onAdd}>{Octicon.plus_circle}</button>\n\t\t</>\n\t\tconst body = <>\n\t\t\t{typeof value === 'object' && Object.entries(value).map(([key, cValue]) => {\n\n\t\t\t\tconst cPath = path.modelPush(key)\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(key)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn <div class=\"node node-header\" data-category={children.category(cPath)}>\n\t\t\t\t\t\t<ErrorPopup lang={lang} path={cPath} nested />\n\t\t\t\t\t\t<button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'expand')}\\n${localize(lang, 'expand_all', 'Ctrl')}`} onClick={expand(key)}>{Octicon.chevron_right}</button>\n\t\t\t\t\t\t<label>{key}</label>\n\t\t\t\t\t\t<Collapsed key={key} path={cPath} value={cValue} schema={children} />\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\tconst cSchema = blockState\n\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t: children\n\t\t\t\tif (blockState?.properties?.[key] && typeof cValue === 'string'\n\t\t\t\t\t&& !blockState.properties?.[key].includes(cValue)) {\n\t\t\t\t\tpath.model.errors.add(cPath, 'error.invalid_enum_option', cValue)\n\t\t\t\t}\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\treturn <MemoedTreeNode key={key} schema={cSchema} path={cPath} value={cValue} {...{lang, version, states, ctx}} label={key}>\n\t\t\t\t\t{canToggle && <button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'collapse')}\\n${localize(lang, 'collapse_all', 'Ctrl')}`} onClick={collapse(key)}>{Octicon.chevron_down}</button>}\n\t\t\t\t\t<button class=\"remove tooltipped tip-se\" aria-label={localize(lang, 'remove')} onClick={onRemove}>{Octicon.trashcan}</button>\n\t\t\t\t</MemoedTreeNode>\n\t\t\t})}\n\t\t</>\n\t\treturn [null, suffix, body]\n\t},\n\n\tnumber(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, <NumberSuffix {...{...params, path, value, lang, version, states, ctx}} />, null]\n\t},\n\n\tobject({ node, config, getActiveFields, getChildModelPath }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tif (path.getArray().length == 0 && isDecorated(config.context, value)) {\n\t\t\tconst { wrapper, fields } = createDecoratorsWrapper(getActiveFields(path), path, value)\n\t\t\tvalue = wrapper.data\n\t\t\tgetActiveFields = () => fields\n\t\t\tgetChildModelPath = (path, key) => new ModelPath(wrapper, new Path(path.getArray(), ['feature'])).push(key)\n\t\t}\n\n\t\tlet prefix: JSX.Element | null = null\n\t\tlet suffix: JSX.Element | null = null\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tconst onExpand = () => path.set(DataModel.wrapLists(node.default()))\n\t\t\t\tsuffix = <button class=\"collapse closed tooltipped tip-se\" aria-label={localize(lang, 'expand')} onClick={onExpand}>{Octicon.plus_circle}</button>\n\t\t\t} else {\n\t\t\t\tconst onCollapse = () => path.set(undefined)\n\t\t\t\tsuffix = <button class=\"collapse open tooltipped tip-se\" aria-label={localize(lang, 'remove')} onClick={onCollapse}>{Octicon.trashcan}</button>\n\t\t\t}\n\t\t}\n\t\tconst context = path.getContext().join('.')\n\t\tif (collapsableFields.includes(context) || collapsedFields.includes(context)) {\n\t\t\tconst toggled = isToggled('')\n\t\t\tconst expanded = collapsedFields.includes(context) ? toggled : !toggled\n\t\t\tprefix = <>\n\t\t\t\t<button class=\"toggle tooltipped tip-se\" aria-label={localize(lang, expanded ? 'collapse' : 'expand')} onClick={toggled ? collapse('') : expand('')}>{expanded ? Octicon.chevron_down : Octicon.chevron_right}</button>\n\t\t\t</>\n\t\t\tif (!expanded) {\n\t\t\t\treturn [prefix, suffix, null]\n\t\t\t}\n\t\t}\n\n\t\tconst newCtx = (typeof value === 'object' && value !== null && node.default()?.pools)\n\t\t\t? { ...ctx, loot: value?.type } : ctx\n\t\tconst body = <>\n\t\t\t{(typeof value === 'object' && value !== null && !(node.optional() && value === undefined)) &&\n\t\t\t\tObject.entries(getActiveFields(path))\n\t\t\t\t\t.filter(([_, child]) => child.enabled(path))\n\t\t\t\t\t.map(([key, child]) => {\n\t\t\t\t\t\tconst cPath = getChildModelPath(path, key)\n\t\t\t\t\t\tconst context = cPath.getContext().join('.')\n\t\t\t\t\t\tif (hiddenFields.includes(context)) return null\n\t\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = child.hook(this, cPath, value[key], lang, version, states, newCtx)\n\t\t\t\t\t\tconst isFlattened = child.type(cPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\t\t\tprefix = <>{prefix}<ErrorPopup lang={lang} path={cPath} /><HelpPopup lang={lang} path={cPath} />{cPrefix}</>\n\t\t\t\t\t\t\tsuffix = <>{suffix}{cSuffix}</>\n\t\t\t\t\t\t\treturn isFlattened ? cBody : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn <MemoedTreeNode key={key} schema={child} path={cPath} value={value[key]} {...{lang, version, states, ctx: newCtx}} />\n\t\t\t\t\t})\n\t\t\t}\n\t\t</>\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, <StringSuffix {...{...params, path, value, lang, version, states, ctx}} />, null]\n\t},\n}\n\nfunction Collapsed({ path, value }: { path: ModelPath, value: any, schema: INode<any> }) {\n\tconst context = path.getContext().join('.')\n\tswitch (context) {\n\t\tcase 'loot_table.pools.entry':\n\t\t\treturn <label>{value?.entries?.length ?? 0} entries</label>\n\t\tcase 'function.set_contents.entries.entry':\n\t\tcase 'loot_pool.entries.entry':\n\t\t\treturn <label>{value?.name?.replace(/^minecraft:/, '') ?? value?.type?.replace(/^minecraft:/, '')}</label>\n\t}\n\tfor (const child of Object.values(value ?? {})) {\n\t\tif (typeof child === 'string') {\n\t\t\treturn <label>{child.replace(/^minecraft:/, '')}</label>\n\t\t}\n\t}\n\treturn null\n}\n\nfunction useToggles() {\n\tconst [toggleState, setToggleState] = useState(new Map<string, boolean>())\n\tconst [toggleAll, setToggleAll] = useState<boolean | undefined>(undefined)\n\n\tconst expand = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(true)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, true)))\n\t\t}\n\t}\n\tconst collapse = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(false)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, false)))\n\t\t}\n\t}\n\t\n\tconst isToggled = (key: string) => {\n\t\tif (!(toggleState instanceof Map)) return false\n\t\treturn toggleState.get(key) ?? toggleAll\n\t}\n\n\treturn { expand, collapse, isToggled }\n}\n\nfunction BooleanSuffix({ path, node, value, lang }: NodeProps<BooleanHookParams>) {\n\tconst set = (target: boolean) => {\n\t\tpath.model.set(path, node.optional() && value === target ? undefined : target)\n\t}\n\treturn <>\n\t\t<button class={value === false ? 'selected' : ''} onClick={() => set(false)}>{localize(lang, 'false')}</button>\n\t\t<button class={value === true ? 'selected' : ''} onClick={() => set(true)}>{localize(lang, 'true')}</button>\n\t</>\n}\n\nfunction NumberSuffix({ path, config, integer, value, lang }: NodeProps<NumberHookParams>) {\n\tconst onChange = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = integer ? parseInt(value) : parseFloat(value)\n\t\tpath.model.set(path, parsed)\n\t}\n\tconst onColor = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = parseInt(value.slice(1), 16)\n\t\tpath.model.set(path, parsed)\n\t}\n\treturn <>\n\t\t<input type=\"text\" value={value ?? ''} onBlur={onChange} onKeyDown={evt => {if (evt.key === 'Enter') onChange(evt)}} />\n\t\t{config?.color && <input type=\"color\" value={'#' + (value?.toString(16).padStart(6, '0') ?? '000000')} onChange={onColor} />}\n\t\t{['dimension.generator.seed', 'dimension.generator.biome_source.seed', 'world_settings.seed'].includes(path.getContext().join('.')) && <button onClick={() => newSeed(path.model)} class=\"tooltipped tip-se\" aria-label={localize(lang, 'generate_new_seed')}>{Octicon.sync}</button>}\n\t</>\n}\n\nfunction StringSuffix({ path, getValues, config, node, value, lang, version, states }: NodeProps<StringHookParams>) {\n\tconst onChange = (evt: Event) => {\n\t\tevt.stopPropagation()\n\t\tconst newValue = (evt.target as HTMLSelectElement).value\n\t\tif (newValue === value) return\n\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t}\n\tconst values = getValues()\n\tconst context = path.getContext().join('.')\n\tconst id = !isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string' ? config.params.pool : undefined\n\n\tif (nbtFields.includes(context)) {\n\t\treturn <textarea value={value ?? ''} onBlur={onChange}></textarea>\n\t} else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) {\n\t\tlet context = new Path([])\n\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\tcontext = context.contextPush(config.enum)\n\t\t} else if (id) {\n\t\t\tcontext = context.contextPush(id)\n\t\t} else if (isEnum(config)) {\n\t\t\tcontext = path\n\t\t}\n\t\treturn <select value={value ?? ''} onChange={onChange}>\n\t\t\t{node.optional() && <option value=\"\">{localize(lang, 'unset')}</option>}\n\t\t\t{values.map(v => <option value={v}>\n\t\t\t\t{pathLocale(lang, context.contextPush(v.replace(/^minecraft:/, '')))}\n\t\t\t</option>)}\n\t\t</select>\n\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\tconst blockState = states?.[relativePath(path, config.params.id).get()]\n\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\treturn <select value={value ?? ''} onChange={onChange}>\n\t\t\t{values.map(v => <option>{v}</option>)}\n\t\t</select>\n\t} else {\n\t\tconst datalistId = hexId()\n\t\tconst gen = id ? findGenerator(id) : undefined\n\t\treturn <>\n\t\t\t<input value={value ?? ''} onBlur={onChange} onKeyDown={evt => {if (evt.key === 'Enter') onChange(evt)}}\n\t\t\t\tlist={values.length > 0 ? datalistId : ''} />\n\t\t\t{values.length > 0 && <datalist id={datalistId}>\n\t\t\t\t{values.map(v => <option value={v} />)}\n\t\t\t</datalist>}\n\t\t\t{gen && values.includes(value) && value.startsWith('minecraft:') &&\n\t\t\t\t<a href={`/${gen.url}/?version=${version}&preset=${value.replace(/^minecraft:/, '')}`} class=\"tooltipped tip-se\" aria-label={localize(lang, 'follow_reference')}>{Octicon.link_external}</a>}\n\t\t</>\n\t}\n}\n\ntype MenuAction = {\n\tlabel: string,\n\tdescription?: string,\n\ticon: keyof typeof Octicon,\n\tonSelect: () => unknown,\n}\n\ntype TreeNodeProps = {\n\tschema: INode<any>,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record<string, any>,\n\tcompare?: any,\n\tlabel?: string,\n\tactions?: MenuAction[],\n\tchildren?: ComponentChildren,\n}\nfunction TreeNode({ label, schema, path, value, lang, version, states, ctx, actions, children }: TreeNodeProps) {\n\tconst type = schema.type(path)\n\tconst category = schema.category(path)\n\tconst context = path.getContext().join('.')\n\n\tconst [active, setActive] = useFocus()\n\tconst onContextMenu = (evt: MouseEvent) => {\n\t\tevt.preventDefault()\n\t\tsetActive()\n\t}\n\n\tconst newCtx: Record<string, any> = { ...ctx, depth: (ctx.depth ?? 0) + 1 }\n\tdelete newCtx.index\n\tconst [prefix, suffix, body] = schema.hook(renderHtml, path, value, lang, version, states, newCtx)\n\treturn <div class={`node ${type}-node`} data-category={category}>\n\t\t<div class=\"node-header\" onContextMenu={onContextMenu}>\n\t\t\t<ErrorPopup lang={lang} path={path} />\n\t\t\t<HelpPopup lang={lang} path={path} />\n\t\t\t{children}\n\t\t\t{prefix}\n\t\t\t<label>\n\t\t\t\t{label ?? pathLocale(lang, path, `${path.last()}`)}\n\t\t\t\t{active && <div class=\"node-menu\">\n\t\t\t\t\t{actions?.map(a => <div key={a.label} class=\"menu-item\">\n\t\t\t\t\t\t<Btn icon={a.icon} tooltip={localize(lang, a.label)} tooltipLoc=\"se\" onClick={() => a.onSelect()}/>\n\t\t\t\t\t\t<span>{a.description ?? localize(lang, a.label)}</span>\n\t\t\t\t\t</div>)}\n\t\t\t\t\t<div class=\"menu-item\">\n\t\t\t\t\t\t<Btn icon=\"clippy\" tooltip={localize(lang, 'copy_context')} tooltipLoc=\"se\" onClick={() => navigator.clipboard.writeText(context)} />\n\t\t\t\t\t\t<span>{context}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>}\n\t\t\t</label>\n\t\t\t{suffix}\n\t\t</div>\n\t\t{body && <div class=\"node-body\">{body}</div>}\n\t</div>\n}\n\nconst MemoedTreeNode = memo(TreeNode, (prev, next) => {\n\treturn prev.schema === next.schema\n\t\t&& prev.lang === next.lang\n\t\t&& prev.path.equals(next.path)\n\t\t&& deepEqual(prev.ctx, next.ctx)\n\t\t&& deepEqual(prev.value, next.value)\n})\n\nfunction isEnum(value?: ValidationOption | EnumOption): value is EnumOption {\n\treturn !!(value as any)?.enum\n}\n\nfunction hashString(str: string) {\n\tvar hash = 0, i, chr\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t\thash |= 0\n\t}\n\treturn hash\n}\n\nfunction pathLocale(lang: string, path: Path, ...params: string[]) {\n\tconst ctx = path.getContext()\n\tfor (let i = 0; i < ctx.length; i += 1) {\n\t\tconst key = ctx.slice(i).join('.')\n\t\tconst result = localize(lang, key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn ctx[ctx.length - 1]\n}\n\nfunction ErrorPopup({ lang, path, nested }: { lang: string, path: ModelPath, nested?: boolean }) {\n\tif (path.model instanceof ModelWrapper) {\n\t\tpath = path.model.map(path).withModel(path.model)\n\t}\n\tconst e = nested\n\t\t?\tpath.model.errors.getAll().filter(e => e.path.startsWith(path))\n\t\t: path.model.errors.get(path, true)\n\tif (e.length === 0) return null\n\tconst message = localize(lang, e[0].error, ...(e[0].params ?? []))\n\treturn popupIcon('node-error', 'issue_opened', message)\n}\n\nfunction HelpPopup({ lang, path }: { lang: string, path: Path }) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = localize(lang, key)\n\tif (message === key) return null\n\treturn popupIcon('node-help', 'info', message)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string) => {\n\tconst [active, setActive] = useFocus()\n\n\treturn <div class={`node-icon ${type}${active ? ' show' : ''}`} onClick={setActive}>\n\t\t{Octicon[icon]}\n\t\t<span class=\"icon-popup\">{popup}</span>\n\t</div>\n}\n\nfunction isDecorated(context: string | undefined, value: any) {\n\treturn context === 'feature'\n\t\t&& value?.type?.replace(/^minecraft:/, '') === 'decorated'\n\t\t&& isObject(value?.config)\n}\n\nfunction createDecoratorsWrapper(originalFields: NodeChildren, path: ModelPath, value: any) {\n\tconst decorators: any[] = []\n\tconst feature = iterateNestedDecorators(value, decorators)\n\tconst fields = {\n\t\ttype: originalFields.type,\n\t\tconfig: ObjectNode({\n\t\t\tdecorators: ListNode(CachedDecorator),\n\t\t\tfeature: CachedFeature,\n\t\t}, { context: 'feature.decorated' }),\n\t}\n\tconst schema = ObjectNode(fields, { context: 'feature' })\n\tconst featurePath = new Path(['config', 'feature'])\n\tconst decoratorsPath = new Path(['config', 'decorators'])\n\tconst model = path.getModel()\n\tconst wrapper: ModelWrapper = new ModelWrapper(schema, path => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\treturn new Path([...[...Array(decorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\treturn new Path([])\n\t\t\t}\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (typeof index === 'number') {\n\t\t\t\treturn new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t}\n\t\t}\n\t\treturn path\n\t}, path => {\n\t\tif (path.equals(decoratorsPath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\treturn newDecorators\n\t\t}\n\t\treturn model.get(wrapper.map(path))\n\t}, (path, value, silent) => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\tconst newPath =new Path([...[...Array(newDecorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t\treturn model.set(newPath, value, silent)\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\treturn model.set(new Path(), produceNestedDecorators(feature, value), silent)\n\t\t\t} else if (typeof index === 'number') {\n\t\t\t\tif (path.modelArr.length === 3 && value === undefined) {\n\t\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\t\tconst newDecorators: any[] = []\n\t\t\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\t\t\tnewDecorators.splice(index, 1)\n\t\t\t\t\tconst newValue = produceNestedDecorators(feature, newDecorators)\n\t\t\t\t\treturn model.set(new Path(), newValue, silent)\n\t\t\t\t} else {\n\t\t\t\t\tconst newPath = new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t\t\treturn model.set(newPath, value, silent)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tmodel.set(path, value, silent)\n\t})\n\twrapper.data = {\n\t\ttype: model.data.type,\n\t\tconfig: {\n\t\t\tdecorators,\n\t\t\tfeature,\n\t\t},\n\t}\n\twrapper.errors = model.errors\n\treturn { fields, wrapper }\n}\n\nfunction iterateNestedDecorators(value: any, decorators: any[]): any {\n\tif (value?.type?.replace(/^minecraft:/, '') !== 'decorated') {\n\t\treturn value\n\t}\n\tif (!isObject(value?.config)) {\n\t\treturn value\n\t}\n\tdecorators.push({ id: decorators.length, node: value.config.decorator })\n\treturn iterateNestedDecorators(value.config.feature ?? '', decorators)\n}\n\nfunction produceNestedDecorators(feature: any, decorators: any[]): any {\n\tif (decorators.length === 0) return feature\n\treturn {\n\t\ttype: 'minecraft:decorated',\n\t\tconfig: {\n\t\t\tdecorator: decorators.shift().node,\n\t\t\tfeature: produceNestedDecorators(feature, decorators),\n\t\t},\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useErrorBoundary, useState } from 'preact/hooks'\nimport { useLocale } from '../../contexts'\nimport { useModel } from '../../hooks'\nimport { FullNode } from '../../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../../services'\n\ntype TreePanelProps = {\n\tversion: VersionId,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tonError: (message: string) => unknown,\n}\nexport function Tree({ version, model, blockStates, onError }: TreePanelProps) {\n\tconst { lang } = useLocale()\n\tif (!model || !blockStates || lang === 'none') return <></>\n\n\tconst [error] = useErrorBoundary(e => {\n\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\tconsole.error(e)\n\t})\n\tif (error) return <></>\n\n\tconst [, setState] = useState(0)\n\tuseModel(model, () => {\n\t\tsetState(state => state + 1)\n\t})\n\n\treturn <div class=\"tree\" data-cy=\"tree\">\n\t\t<FullNode {...{model, lang, version, blockStates}}/>\n\t</div>\n}\n","import { Giscus as GiscusReact } from '@giscus/react'\nimport { useTheme } from '../contexts'\n\ninterface Props {\n\tterm?: string,\n}\nexport function Giscus({ term }: Props) {\n\tconst { actualTheme } = useTheme()\n\tconst themeSuffix = actualTheme === 'light' ? '-burn' : ''\n\tconst themeUrl = (import.meta as any).env.DEV\n\t\t? `http://localhost:3000/src/styles/giscus${themeSuffix}.css`\n\t\t: `https://${location.host}/assets/giscus${themeSuffix}.css`\n\n\treturn <GiscusReact\n\t\trepo=\"misode/misode.github.io\"\n\t\trepoId=\"MDEwOlJlcG9zaXRvcnkxOTIyNTQyMzA=\"\n\t\tcategory=\"Site\"\n\t\tcategoryId=\"DIC_kwDOC3WRFs4COB8r\"\n\t\tmapping={term ? 'specific' : 'pathname'}\n\t\tterm={term}\n\t\treactionsEnabled=\"1\"\n\t\temitMetadata=\"0\"\n\t\tinputPosition=\"top\"\n\t\ttheme={themeUrl}\n\t\tlang=\"en\" />\n}\n","import { getCurrentUrl, Link, route } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { useLocale, useTheme, useTitle, useVersion } from '../contexts'\nimport { checkVersion } from '../services'\nimport { cleanUrl, getGenerator } from '../Utils'\n\nconst Themes: Record<string, keyof typeof Octicon> = {\n\tsystem: 'device_desktop',\n\tdark: 'moon',\n\tlight: 'sun',\n}\n\nexport function Header() {\n\tconst { lang, locale, changeLanguage } = useLocale()\n\tconst { theme, changeTheme } = useTheme()\n\tconst { version } = useVersion()\n\tconst { title } = useTitle()\n\tconst gen = getGenerator(getCurrentUrl())\n\n\treturn <header>\n\t\t<div class=\"title\">\n\t\t\t<Link class=\"home-link\" href=\"/\" aria-label={locale('home')} data-cy=\"home-link\">{Icons.home}</Link>\n\t\t\t<h1>{title}</h1>\n\t\t\t{gen && <BtnMenu icon=\"chevron_down\" tooltip={locale('switch_generator')} data-cy=\"generator-switcher\">\n\t\t\t\t{config.generators\n\t\t\t\t\t.filter(g => g.category === gen?.category && checkVersion(version, g.minVersion))\n\t\t\t\t\t.map(g =>\n\t\t\t\t\t\t<Btn label={locale(g.id)} active={g.id === gen.id} onClick={() => route(cleanUrl(g.url))} />\n\t\t\t\t\t)}\n\t\t\t</BtnMenu>}\n\t\t</div>\n\t\t<nav>\n\t\t\t<ul>\n\t\t\t\t<li data-cy=\"language-switcher\">\n\t\t\t\t\t<BtnMenu icon=\"globe\" tooltip={locale('language')}>\n\t\t\t\t\t\t{config.languages.map(({ code, name }) =>\n\t\t\t\t\t\t\t<Btn label={name} active={code === lang}\n\t\t\t\t\t\t\t\tonClick={() => changeLanguage(code)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t</li>\n\t\t\t\t<li data-cy=\"theme-switcher\">\n\t\t\t\t\t<BtnMenu icon={Themes[theme]} tooltip={locale('theme')}>\n\t\t\t\t\t\t{Object.entries(Themes).map(([th, icon]) =>\n\t\t\t\t\t\t\t<Btn icon={icon} label={locale(`theme.${th}`)} active={th === theme}\n\t\t\t\t\t\t\t\tonClick={() => changeTheme(th)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"dimmed\">\n\t\t\t\t\t<a href=\"https://github.com/misode/misode.github.io\" target=\"_blank\" rel=\"noreferrer\" class=\"tooltipped tip-sw\" aria-label={locale('github')}>\n\t\t\t\t\t\t{Octicon.mark_github}\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</nav>\n\t</header>\n}\n","export const Icons = {\n\thome: <svg width=\"32\" height=\"28\" viewBox=\"0 0 32 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"26\" height=\"6\" rx=\"3\" fill=\"#7CB45C\"/><rect x=\"8\" width=\"18\" height=\"6\" rx=\"3\" fill=\"#4BA041\"/><rect y=\"11\" width=\"32\" height=\"6\" rx=\"3\" fill=\"#AAA8A8\"/><rect x=\"11\" y=\"11\" width=\"21\" height=\"6\" rx=\"3\" fill=\"#91908F\"/><rect x=\"11\" y=\"22\" width=\"21\" height=\"6\" rx=\"3\" fill=\"#70B5C3\"/><rect x=\"17\" y=\"22\" width=\"15\" height=\"6\" rx=\"3\" fill=\"#4D989B\"/></svg>,\n\treport: <svg width=\"30\" height=\"36\" viewBox=\"0 0 30 36\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z\" fill=\"#6ACC5D\"/><path d=\"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z\" fill=\"#FF4C4C\"/><path d=\"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z\" fill=\"#E5B442\"/><path d=\"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z\" fill=\"#2BAD1D\"/><path d=\"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z\" fill=\"#C10B0B\"/><path d=\"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z\" fill=\"#CC8E00\"/></svg>,\n\tsounds: <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#451475\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z\" fill=\"#C5A5E6\"/></svg>,\n}\n","import { Howl } from 'howler'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, NumberInput, RangeInput, TextInput } from '..'\nimport { useLocale, useVersion } from '../../contexts'\nimport type { SoundEvents } from '../../services'\nimport { getSoundUrl } from '../../services'\n\nexport interface SoundConfig {\n\tid: string,\n\tsound: string,\n\tdelay: number,\n\tpitch: number,\n\tvolume: number,\n}\ntype SoundConfigProps = SoundConfig & {\n\tsounds: SoundEvents,\n\tonEdit: (changes: Partial<SoundConfig>) => unknown,\n\tonDelete: () => unknown,\n\tdelayedPlay?: number,\n}\nexport function SoundConfig({ sounds, sound, delay, pitch, volume, onEdit, onDelete, delayedPlay }: SoundConfigProps) {\n\tconst { locale } = useLocale()\n\tconst { version } = useVersion()\n\tconst [loading, setLoading] = useState(true)\n\tconst [playing, setPlaying] = useState(false)\n\tconst [invalid, setInvalid] = useState(false)\n\tconst howls = useRef<Howl[]>([])\n\tconst command = `playsound minecraft:${sound} master @s ~ ~ ~ ${volume} ${pitch}`\n\n\tuseEffect(() => {\n\t\tconst soundEvent = sounds[sound]\n\t\tsetInvalid((soundEvent?.sounds?.length ?? 0) === 0)\n\t\thowls.current.forEach(h => h.stop())\n\t\thowls.current = (soundEvent?.sounds ?? []).map(entry => {\n\t\t\tconst soundPath = typeof entry === 'string' ? entry : entry.name\n\t\t\tconst url = getSoundUrl(version, soundPath)\n\t\t\tconst howl = new Howl({\n\t\t\t\tsrc: [url],\n\t\t\t\tformat: ['ogg'],\n\t\t\t\tvolume,\n\t\t\t\trate: pitch,\n\t\t\t})\n\t\t\thowl.on('end', () => {\n\t\t\t\tsetPlaying(false)\n\t\t\t})\n\t\t\tconst completed = () => {\n\t\t\t\tif (loading && howls.current.every(h => h.state() === 'loaded')) {\n\t\t\t\t\tsetLoading(false)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (howl.state() === 'loaded') {\n\t\t\t\tsetTimeout(() => completed())\n\t\t\t} else {\n\t\t\t\thowl.on('load', () => {\n\t\t\t\t\tcompleted()\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn howl\n\t\t})\n\t\tsetLoading(true)\n\t}, [sound, sounds])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.rate(pitch))\n\t}, [pitch])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.volume(volume))\n\t}, [volume])\n\n\tconst play = () => {\n\t\tif (loading || invalid) return\n\t\tstop()\n\t\tconst howl = Math.floor(Math.random() * howls.current.length)\n\t\thowls.current[howl].play()\n\t\tsetPlaying(true)\n\t}\n\tconst stop = () => {\n\t\thowls.current.forEach(h => h.stop())\n\t}\n\tuseEffect(() => {\n\t\tif (delayedPlay) setTimeout(() => play(), delay * 50)\n\t}, [delayedPlay])\n\n\tuseEffect(() => {\n\t\treturn () => stop()\n\t}, [])\n\n\tconst [copyActive, setCopyActive] = useState(false)\n\tconst copyTimeout = useRef<number | undefined>(undefined)\n\tconst copy = () => {\n\t\tnavigator.clipboard.writeText(command)\n\t\tsetCopyActive(true)\n\t\tif (copyTimeout.current !== undefined) clearTimeout(copyTimeout.current)\n\t\tcopyTimeout.current = setTimeout(() => {\n\t\t\tsetCopyActive(false)\n\t\t}, 2000) as any\n\t}\n\n\treturn <div class={`sound-config${loading ? ' loading' : playing ? ' playing' : ''}${invalid ? ' invalid' : ''}`}>\n\t\t<Btn class=\"play\" icon={invalid ? 'alert' : loading ? 'sync' : 'play'} label={locale('sounds.play')} onClick={play} tooltip={invalid ? locale('sounds.unknown_sound') : loading ? locale('sounds.loading_sound') : locale('sounds.play_sound')} tooltipLoc=\"se\" />\n\t\t<TextInput class=\"btn btn-input sound\" list=\"sound-list\" spellcheck={false}\n\t\t\tvalue={sound} onChange={sound => onEdit({ sound })} />\n\t\t<label class=\"delay-label\">{locale('sounds.delay')}: </label>\n\t\t<NumberInput class=\"btn btn-input delay\" min={0}\n\t\t\tvalue={delay} onChange={delay => onEdit({ delay })} />\n\t\t<label class=\"pitch-label\">{locale('sounds.pitch')}: </label>\n\t\t<RangeInput class=\"pitch tooltipped tip-s\" min={0.5} max={2} step={0.01}\n\t\t\taria-label={pitch.toFixed(2)} style={`--x: ${(pitch - 0.5) * (100 / 1.5)}%`}\n\t\t\tvalue={pitch} onChange={pitch => onEdit({ pitch })} />\n\t\t<label class=\"volume-label\">{locale('sounds.volume')}: </label>\n\t\t<RangeInput class=\"volume tooltipped tip-s\" min={0} max={1} step={0.01}\n\t\t\taria-label={volume.toFixed(2)} style={`--x: ${volume * 100}%`}\n\t\t\tvalue={volume} onChange={volume => onEdit({ volume })} />\n\t\t<Btn class={`copy${copyActive ? ' active' : ''}`} icon={copyActive ? 'check' : 'terminal'} label={locale('copy')} tooltip={copyActive ? locale('copied') : locale('sounds.copy_command')}\n\t\t\tonClick={copy} />\n\t\t<Btn class=\"remove\" icon=\"trashcan\" tooltip={locale('sounds.remove_sound')}\n\t\t\tonClick={() => {onDelete(); stop()}} />\n\t</div>\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tdesc?: string,\n\tlink?: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, desc, link, icon, children }: ToolCardProps) {\n\tconst content = <>\n\t\t<div class=\"tool-head\">\n\t\t\t{icon && Icons[icon]}\n\t\t\t<div>\n\t\t\t\t<h3>{title}</h3>\n\t\t\t\t<p>{desc}</p>\n\t\t\t</div>\n\t\t</div>\n\t\t{children && <div class=\"tool-body\">\n\t\t\t{children}\n\t\t</div>}\n\t</>\n\treturn link\n\t\t? <a class=\"tool-card\" href={link}>{content}</a>\n\t\t: <div class=\"tool-card\">{content}</div>\n}\n","import { useMemo, useState } from 'preact/hooks'\nimport { Octicon } from '.'\n\nconst SEPARATOR = '/'\n\ninterface Props {\n\tentries: string[],\n\tonSelect: (entry: string) => unknown,\n\tindent?: number,\n}\nexport function TreeView({ entries, onSelect, indent }: Props) {\n\tconst roots = useMemo(() => {\n\t\tconst groups: Record<string, string[]> = {}\n\t\tfor (const entry of entries) {\n\t\t\tconst i = entry.indexOf(SEPARATOR)\n\t\t\tif (i >= 0) {\n\t\t\t\tconst root = entry.slice(0, i)\n\t\t\t\t;(groups[root] ??= []).push(entry.slice(i + 1))\n\t\t\t}\n\t\t}\n\t\treturn Object.entries(groups)\n\t}, entries)\n\n\tconst leaves = useMemo(() => {\n\t\treturn entries.filter(e => !e.includes(SEPARATOR))\n\t}, entries)\n\n\tconst [hidden, setHidden] = useState(new Set<string>())\n\tconst toggle = (root: string) => {\n\t\tif (hidden.has(root)) {\n\t\t\thidden.delete(root)\n\t\t} else {\n\t\t\thidden.add(root)\n\t\t}\n\t\tsetHidden(new Set(hidden))\n\t}\n\n\treturn <div class=\"tree-view\" style={`--indent: ${indent ?? 0};`}>\n\t\t{roots.map(([r, entries]) => <div>\n\t\t\t<TreeViewEntry icon={hidden.has(r) ? 'chevron_right' : 'chevron_down'} key={r} label={r} onClick={() => toggle(r)}/>\n\t\t\t{!hidden.has(r) &&\n\t\t\t\t<TreeView entries={entries} onSelect={e => onSelect(`${r}/${e}`)} indent={(indent ?? 0) + 1} />}\n\t\t</div>)}\n\t\t{leaves.map(e => <TreeViewEntry icon=\"file\" key={e} label={e} onClick={() => onSelect(e)} />)}\n\t</div>\n}\n\ninterface TreeViewEntryProps {\n\ticon: keyof typeof Octicon,\n\tlabel: string,\n\tonClick?: () => unknown,\n}\nfunction TreeViewEntry({ icon, label, onClick }: TreeViewEntryProps) {\n\treturn <div class=\"entry\" onClick={onClick} >\n\t\t{Octicon[icon]}\n\t\t{label}\n\t</div>\n}\n","import { marked } from 'marked'\nimport { ChangelogTag } from '.'\nimport type { Change, ChangelogVersion } from '../../services'\n\ntype Props = {\n\tchange: Change,\n\tactiveTags?: string[],\n\ttoggleTag?: (tag: string) => unknown,\n}\nexport function ChangelogEntry({ change, activeTags, toggleTag }: Props) {\n\treturn <div class=\"changelog-entry\">\n\t\t<div class=\"changelog-version\">\n\t\t\t<ArticleLink {...change.version}/>\n\t\t\t<ArticleLink {...change.group}/>\n\t\t</div>\n\t\t<div class=\"changelog-tags\">\n\t\t\t{change.tags.map(tag => <ChangelogTag label={tag} onClick={toggleTag ? () => toggleTag(tag) : undefined} active={activeTags?.includes(tag)} />)}\n\t\t</div>\n\t\t<div class=\"changelog-content\" dangerouslySetInnerHTML={{ __html: marked(change.content) }} />\n\t</div>\n}\n\nfunction ArticleLink({ id, article }: ChangelogVersion) {\n\treturn article === null\n\t\t? <span>{id}</span>\n\t\t: <a href={`https://www.minecraft.net/en-us/article/${article}`} target=\"_blank\">{id}</a>\n}\n","import { Octicon } from '..'\nimport { hashString } from '../../Utils'\n\ntype TagProps = {\n\tlabel: string,\n\tactive?: boolean,\n\tonClick?: () => unknown,\n}\nexport function ChangelogTag({ label, active, onClick }: TagProps) {\n\tconst color = label === 'breaking' ? 5 : hashString(label) % 360\n\treturn <div class={`changelog-tag${active ? ' active' : ''}${onClick ? ' clickable' : ''}`} style={`--tint: ${color}`} onClick={onClick}>\n\t\t{label === 'breaking' && Octicon.alert}\n\t\t{label}\n\t</div>\n}\n","import { useMemo, useState } from 'preact/hooks'\nimport { Btn, TextInput } from '..'\nimport { useLocale } from '../../contexts'\nimport type { Change } from '../../services'\nimport { ChangelogEntry } from './ChangelogEntry'\nimport { ChangelogTag } from './ChangelogTag'\n\ninterface Props {\n\tchanges: Change[] | undefined,\n\tdefaultOrder: 'asc' | 'desc',\n}\nexport function ChangelogList({ changes, defaultOrder }: Props) {\n\tconst { locale } = useLocale()\n\t\n\tconst [search, setSearch] = useState('')\n\tconst [tags, setTags] = useState<string[]>([])\n\tconst toggleTag = (tag: string) => {\n\t\tif (!tags.includes(tag)) {\n\t\t\tsetTags([...tags, tag])\n\t\t} else {\n\t\t\tsetTags(tags.filter(t => t !== tag))\n\t\t}\n\t}\n\n\tconst filteredChangelogs = useMemo(() => {\n\t\tconst query = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)\n\t\tif (query.length === 0 && tags.length === 0) return changes\n\t\treturn changes?.filter(change => {\n\t\t\tif (!tags.every(tag => change.tags.includes(tag))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst content = change.tags.join(' ') + ' ' + change.content.toLowerCase()\n\t\t\treturn query.every(q => {\n\t\t\t\tif (q.startsWith('!')) {\n\t\t\t\t\treturn q.length === 1 || !content.includes(q.slice(1))\n\t\t\t\t}\n\t\t\t\treturn content.includes(q)\n\t\t\t})\n\t\t})\n\t}, [changes, search, tags])\n\n\tconst [sort, setSort] = useState(defaultOrder === 'desc')\n\n\tconst sortedChangelogs = useMemo(() => {\n\t\treturn filteredChangelogs?.sort((a, b) => sort ? b.order - a.order : a.order - b.order)\n\t}, [filteredChangelogs, sort])\n\n\treturn <>\n\t\t<div class=\"changelog-query\">\n\t\t\t<TextInput class=\"btn btn-input changelog-search\" list=\"sound-list\" placeholder={locale('changelog.search')}\n\t\t\t\tvalue={search} onChange={setSearch} />\n\t\t\t<Btn icon={sort ? 'sort_desc' : 'sort_asc'} label={sort ? 'Newest first' : 'Oldest first'} onClick={() => setSort(!sort)} />\n\t\t</div>\n\t\t{tags.length > 0 && <div class=\"changelog-tags\">\n\t\t\t{tags.map(tag => <ChangelogTag label={tag} onClick={() => setTags(tags.filter(t => t !== tag))} />)}\n\t\t</div>}\n\t\t<div class=\"changelog-list\">\n\t\t\t{sortedChangelogs === undefined\n\t\t\t\t? <span>{locale('loading')}</span>\n\t\t\t\t: sortedChangelogs.length === 0\n\t\t\t\t\t? <span>{locale('changelog.no_results')}</span>\n\t\t\t\t\t:\tsortedChangelogs.map(change =>\n\t\t\t\t\t\t<ChangelogEntry change={change} activeTags={tags} toggleTag={toggleTag} />)}\n\t\t</div>\n\t</>\n}\n","import { useEffect, useMemo, useState } from 'preact/hooks'\nimport { VersionMetaData } from '.'\nimport { useLocale } from '../../contexts'\nimport type { Change, VersionMeta } from '../../services'\nimport { getChangelogs } from '../../services'\nimport { Giscus } from '../Giscus'\nimport { ChangelogList } from './ChangelogList'\n\ntype Tab = 'changelog' | 'discussion' \n\ninterface Props {\n\tversion: VersionMeta\n}\nexport function VersionDetail({ version }: Props) {\n\tconst { locale } = useLocale()\n\n\tconst [tab, setTab] = useState<Tab>('changelog')\n\n\tconst [changelogs, setChangelogs] = useState<Change[] | undefined>(undefined)\n\tuseEffect(() => {\n\t\tgetChangelogs()\n\t\t\t.then(changelogs => setChangelogs(\n\t\t\t\tchangelogs.map(c => ({ ...c, tags: c.tags.filter(t => t !== c.group.id) }))\n\t\t\t))\n\t\t\t.catch(e => console.error(e))\n\t}, [])\n\n\tconst filteredChangelogs = useMemo(() =>\n\t\tchangelogs?.filter(c => c.version.id === version.id || c.group.id === version.id),\n\t[version.id, changelogs])\n\n\treturn <>\n\t\t<div class=\"version-detail\">\n\t\t\t<h2>{version.name}</h2>\n\t\t\t<div class=\"version-info\">\n\t\t\t\t<VersionMetaData label={locale('versions.released')} value={releaseDate(version)} />\n\t\t\t\t<VersionMetaData label={locale('versions.release_target')} value={version.release_target} link={version.id !== version.release_target ? `/versions/?id=${version.release_target}` : undefined} />\n\t\t\t\t<VersionMetaData label={locale('versions.data_version')} value={version.data_version} />\n\t\t\t\t<VersionMetaData label={locale('versions.protocol_version')} value={version.protocol_version} />\n\t\t\t\t<VersionMetaData label={locale('versions.data_pack_format')} value={version.data_pack_version} />\n\t\t\t\t<VersionMetaData label={locale('versions.resource_pack_format')} value={version.resource_pack_version} />\n\t\t\t</div>\n\t\t\t<div class=\"version-tabs\">\n\t\t\t\t<span class={tab === 'changelog' ? 'selected' : ''} onClick={() => setTab('changelog')}>{locale('versions.technical_changes')}</span>\n\t\t\t\t<span class={tab === 'discussion' ? 'selected' : ''} onClick={() => setTab('discussion')}>{locale('versions.discussion')}</span>\n\t\t\t</div>\n\t\t\t<div class=\"version-tab\">\n\t\t\t\t{tab === 'changelog' && <ChangelogList changes={filteredChangelogs} defaultOrder=\"asc\" />}\n\t\t\t\t{tab === 'discussion' && <Giscus term={`version/${version.id}`} />}\n\t\t\t</div>\n\t\t</div>\n\t</>\n}\n\nexport function releaseDate(version: VersionMeta) {\n\treturn new Date(version.release_time).toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric' })\n}\n","import { releaseDate, VersionMetaData } from '.'\nimport { useLocale } from '../../contexts'\nimport type { VersionMeta } from '../../services'\n\ninterface Props {\n\tversion: VersionMeta,\n\tlink?: string,\n}\nexport function VersionEntry({ version, link }: Props) {\n\tconst { locale } = useLocale()\n\n\treturn <a class=\"version-entry\" href={link}>\n\t\t<span class=\"version-id\">{version.id}</span>\n\t\t<VersionMetaData label={locale('versions.released')} value={releaseDate(version)} compact />\n\t\t<VersionMetaData label={locale('versions.data_version')} value={version.data_version} optional />\n\t\t<VersionMetaData label={locale('versions.pack_format')} value={version.data_pack_version} optional />\n\t</a>\n}\n","import { useMemo, useState } from 'preact/hooks'\nimport { Checkbox, TextInput } from '..'\nimport { useLocale } from '../../contexts'\nimport type { VersionMeta } from '../../services'\nimport { VersionEntry } from './VersionEntry'\n\ninterface Props {\n\tversions: VersionMeta[]\n\tlink?: (id: string) => string\n}\nexport function VersionList({ versions, link }: Props) {\n\tconst { locale } = useLocale()\n\t\n\tconst [snapshots, setSnapshots] = useState(true)\n\tconst [search, setSearch] = useState('')\n\n\tconst filteredVersions = useMemo(() => versions.filter(v => {\n\t\tif (v.type === 'snapshot' && !snapshots) return false\n\t\treturn v.id.includes(search)\n\t}), [versions, snapshots, search])\n\n\n\treturn <>\n\t\t<div class=\"versions-controls\">\n\t\t\t<TextInput class=\"btn btn-input version-search\" list=\"sound-list\" placeholder={locale('versions.search')}\n\t\t\t\tvalue={search} onChange={setSearch} />\n\t\t\t<Checkbox label=\"Include snapshots\" value={snapshots} onChange={setSnapshots} />\n\t\t</div>\n\t\t<div class=\"version-list\">\n\t\t\t{filteredVersions.map(v => <VersionEntry version={v} link={link?.(v.id)} />)}\n\t\t\t{filteredVersions.length === 0 && <span>\n\t\t\t\t{locale('versions.no_results')}\n\t\t\t</span>}\n\t\t</div>\n\t</>\n}\n","import { Octicon } from '..'\n\ninterface Props {\n\tlabel: string,\n\tvalue: string | number,\n\tlink?: string,\n\tcompact?: boolean,\n\toptional?: boolean,\n}\nexport function VersionMetaData({ label, value, link, compact, optional }: Props) {\n\treturn <div class={`version-metadata${optional ? ' version-metadata-hide' : ''}`}>\n\t\t<span class={compact ? 'version-metadata-hide' : undefined}>{label}: </span>\n\t\t<span class=\"version-metadata-value\">{value}</span>\n\t\t{link && <a href={link} class=\"version-metadata-link\">{Octicon.link_external}</a>}\n\t</div>\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport { cleanUrl } from '../Utils'\n\ninterface Props {\n\tcategory: string,\n\tpath?: string,\n}\nexport function Category({ category }: Props) {\n\tconst { locale } = useLocale()\n\tuseTitle(locale('title.generator_category', locale(category)))\n\treturn <main>\n\t\t<div class=\"category\">\n\t\t\t{config.generators.filter(g => g.category === category).map(g => \n\t\t\t\t<ToolCard title={locale(g.id)} link={cleanUrl(g.url)} />\n\t\t\t)}\n\t\t</div>\n\t</main>\n}\n","import { useEffect, useState } from 'preact/hooks'\nimport { Ad, ChangelogList, ErrorPanel } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport type { Change } from '../services'\nimport { getChangelogs } from '../services'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Changelog({}: Props) {\n\tconst { locale } = useLocale()\n\tconst [error, setError] = useState<Error | null>(null)\n\tuseTitle(locale('title.changelog'))\n\n\tconst [changelogs, setChangelogs] = useState<Change[]>([])\n\tuseEffect(() => {\n\t\tgetChangelogs()\n\t\t\t.then(changelogs => setChangelogs(changelogs))\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [])\n\n\n\treturn <main>\n\t\t<Ad type=\"text\" id=\"changelog\" />\n\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t<div class=\"changelog\">\n\t\t\t<ChangelogList changes={changelogs} defaultOrder=\"desc\" />\n\t\t</div>\n\t</main>\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport { getCurrentUrl, route } from 'preact-router'\nimport { useEffect, useErrorBoundary, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Analytics } from '../Analytics'\nimport { Ad, Btn, BtnMenu, ErrorPanel, HasPreview, Octicon, PreviewPanel, SearchList, SourcePanel, TextInput, Tree } from '../components'\nimport { useLocale, useProject, useTitle, useVersion } from '../contexts'\nimport { useActiveTimeout, useModel } from '../hooks'\nimport { getOutput } from '../schema/transformOutput'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { checkVersion, fetchPreset, getBlockStates, getCollections, getModel } from '../services'\nimport { getGenerator, getSearchParams, message, setSeachParams } from '../Utils'\n\ninterface Props {\n\tdefault?: true,\n}\nexport function Generator({}: Props) {\n\tconst { locale } = useLocale()\n\tconst { version, changeVersion } = useVersion()\n\tconst { project, file, updateFile, openFile, closeFile } = useProject()\n\tconst [error, setError] = useState<Error | string | null>(null)\n\tconst [errorBoundary, errorRetry] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\terrorBoundary.message = `Something went wrong rendering the generator: ${errorBoundary.message}`\n\t\treturn <main><ErrorPanel error={errorBoundary} onDismiss={errorRetry} /></main>\n\t}\n\n\tconst gen = getGenerator(getCurrentUrl())\n\tif (!gen) {\n\t\treturn <main><ErrorPanel error={`Cannot find generator \"${getCurrentUrl()}\"`} /></main>\n\t}\n\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion, gen.maxVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tuseTitle(locale('title.generator', locale(gen.id)), allowedVersions)\n\n\tif (!checkVersion(version, gen.minVersion)) {\n\t\tsetError(`The minimum version for this generator is ${gen.minVersion}`)\n\t}\n\tif (!checkVersion(version, undefined, gen.maxVersion)) {\n\t\tsetError(`This generator is not available in versions above ${gen.maxVersion}`)\n\t}\n\n\tconst searchParams = getSearchParams(getCurrentUrl())\n\tconst currentPreset = searchParams.get('preset')\n\tuseEffect(() => {\n\t\tif (model && currentPreset) {\n\t\t\tloadPreset(currentPreset).then(preset => {\n\t\t\t\tmodel?.reset(DataModel.wrapLists(preset), false)\n\t\t\t\tsetSeachParams({ version, preset: currentPreset })\n\t\t\t})\n\t\t}\n\t}, [currentPreset])\n\n\tconst [model, setModel] = useState<DataModel | null>(null)\n\tconst [blockStates, setBlockStates] = useState<BlockStateRegistry | null>(null)\n\tuseEffect(() => {\n\t\tsetError(null)\n\t\tsetModel(null)\n\t\tgetBlockStates(version)\n\t\t\t.then(b => setBlockStates(b))\n\t\tgetModel(version, gen.id)\n\t\t\t.then(async m => {\n\t\t\t\tAnalytics.setGenerator(gen.id)\n\t\t\t\tif (currentPreset) {\n\t\t\t\t\tconst preset = await loadPreset(currentPreset)\n\t\t\t\t\tm.reset(DataModel.wrapLists(preset), false)\n\t\t\t\t}\n\t\t\t\tsetModel(m)\n\t\t\t})\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [version, gen.id])\n\n\tconst [dirty, setDirty] = useState(false)\n\tuseModel(model, () => {\n\t\tsetSeachParams({ version: undefined, preset: undefined })\n\t\tsetError(null)\n\t\tsetDirty(true)\n\t})\n\n\tconst [fileRename, setFileRename] = useState('')\n\tconst [fileSaved, doSave] = useActiveTimeout()\n\tconst [fileError, doFileError] = useActiveTimeout()\n\n\tconst doFileRename = () => {\n\t\tif (fileRename !== file?.id && fileRename && model && blockStates) {\n\t\t\tconst data = getOutput(model, blockStates)\n\t\t\tconst success = updateFile(gen.id, file?.id, { id: fileRename, data })\n\t\t\tif (success) {\n\t\t\t\tdoSave()\n\t\t\t} else {\n\t\t\t\tdoFileError()\n\t\t\t\tif (file) {\n\t\t\t\t\tsetFileRename(file?.id)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (file) {\n\t\t\tsetFileRename(file?.id)\n\t\t}\n\t}\n\n\tconst deleteFile = () => {\n\t\tif (file) {\n\t\t\tupdateFile(gen.id, file.id, {})\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (file) {\n\t\t\tsetFileRename(file.id)\n\t\t}\n\t}, [file])\n\n\tuseEffect(() => {\n\t\tif (model) {\n\t\t\tsetFileRename(file?.id ?? '')\n\t\t\tif (file && gen.id === file.type) {\n\t\t\t\tmodel.reset(DataModel.wrapLists(file.data))\n\t\t\t}\n\t\t\tsetDirty(false)\n\t\t}\n\t}, [file, model])\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(DataModel.wrapLists(model.schema.default()), true)\n\t}\n\tconst undo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('undo', 'Menu')\n\t\tmodel?.undo()\n\t}\n\tconst redo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('redo', 'Menu')\n\t\tmodel?.redo()\n\t}\n\n\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 'z') {\n\t\t\tAnalytics.generatorEvent('undo', 'Hotkey')\n\t\t\tmodel?.undo()\n\t\t} else if (e.ctrlKey && e.key === 'y') {\n\t\t\tAnalytics.generatorEvent('redo', 'Hotkey')\n\t\t\tmodel?.redo()\n\t\t}\n\t}\n\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 's') {\n\t\t\te.preventDefault()\n\t\t\tif (model && blockStates && file) {\n\t\t\t\tAnalytics.generatorEvent('save', 'Hotkey')\n\t\t\t\tconst data = getOutput(model, blockStates)\n\t\t\t\tupdateFile(gen.id, file?.id, { id: file?.id, data })\n\t\t\t\tsetDirty(false)\n\t\t\t\tdoSave()\n\t\t\t}\n\t\t}\n\t}\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keyup', onKeyUp)\n\t\tdocument.addEventListener('keydown', onKeyDown)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keyup', onKeyUp)\n\t\t\tdocument.removeEventListener('keydown', onKeyDown)\n\t\t}\n\t}, [model, blockStates, file])\n\n\tconst [presets, setPresets] = useState<string[]>([])\n\tuseEffect(() => {\n\t\tgetCollections(version).then(collections => {\n\t\t\tsetPresets(collections.get(gen.id).map(p => p.slice(10)))\n\t\t})\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [version, gen.id])\n\n\tconst selectPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tsetSeachParams({ version, preset: id })\n\t}\n\n\tconst loadPreset = async (id: string) => {\n\t\ttry {\n\t\t\tconst preset = await fetchPreset(version, gen.path ?? gen.id, id)\n\t\t\tconst seed = model?.get(new Path(['generator', 'seed']))\n\t\t\tif (preset?.generator?.seed !== undefined && seed !== undefined) {\n\t\t\t\tpreset.generator.seed = seed\n\t\t\t\tif (preset.generator.biome_source?.seed !== undefined) {\n\t\t\t\t\tpreset.generator.biome_source.seed = seed\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn preset\n\t\t} catch (e) {\n\t\t\tsetError(e instanceof Error ? e : message(e))\n\t\t}\n\t}\n\n\tconst [sourceShown, setSourceShown] = useState(window.innerWidth > 820)\n\tconst [doCopy, setCopy] = useState(0)\n\tconst [doDownload, setDownload] = useState(0)\n\tconst [doImport, setImport] = useState(0)\n\n\tconst copySource = () => {\n\t\tAnalytics.generatorEvent('copy')\n\t\tsetCopy(doCopy + 1)\n\t}\n\tconst downloadSource = () => {\n\t\tAnalytics.generatorEvent('download')\n\t\tsetDownload(doDownload + 1)\n\t}\n\tconst importSource = () => {\n\t\tAnalytics.generatorEvent('import')\n\t\tsetSourceShown(true)\n\t\tsetImport(doImport + 1)\n\t}\n\tconst toggleSource = () => {\n\t\tAnalytics.generatorEvent('toggle-output', !sourceShown ? 'visible' : 'hidden')\n\t\tsetSourceShown(!sourceShown)\n\t\tsetCopy(0)\n\t\tsetDownload(0)\n\t\tsetImport(0)\n\t}\n\n\tconst [copyActive, copySuccess] = useActiveTimeout()\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\tconst hasPreview = HasPreview.includes(gen.id) && !(gen.id === 'worldgen/configured_feature' && checkVersion(version, '1.18'))\n\tif (previewShown && !hasPreview) setPreviewShown(false)\n\tlet actionsShown = 1\n\tif (hasPreview) actionsShown += 1\n\tif (sourceShown) actionsShown += 2\n\n\tconst togglePreview = () => {\n\t\tAnalytics.generatorEvent('toggle-preview', !previewShown ? 'visible' : 'hidden')\n\t\tsetPreviewShown(!previewShown)\n\t\tif (!previewShown && sourceShown) {\n\t\t\tsetSourceShown(false)\n\t\t}\n\t}\n\n\treturn <>\n\t\t<main class={previewShown ? 'has-preview' : ''}>\n\t\t\t<Ad id=\"data-pack-generator\" type=\"text\" />\n\t\t\t<div class=\"controls\">\n\t\t\t\t<div class={`project-controls ${file && 'has-file'}`}>\n\t\t\t\t\t<div class=\"btn-row\">\n\t\t\t\t\t\t<BtnMenu icon=\"repo\" label={project.name} relative={false}>\n\t\t\t\t\t\t\t<Btn icon=\"arrow_left\" label={locale('project.go_to')} onClick={() => route('/project')} />\n\t\t\t\t\t\t\t{file && <Btn icon=\"file\" label={locale('project.new_file')} onClick={closeFile} />}\n\t\t\t\t\t\t\t<SearchList searchPlaceholder={locale(project.name === 'Drafts' ? 'project.search_drafts' : 'project.search')} noResults={locale('project.no_files')} values={project.files.filter(f => f.type === gen.id).map(f => f.id)} onSelect={(id) => openFile(gen.id, id)} />\n\t\t\t\t\t\t</BtnMenu>\n\t\t\t\t\t\t<TextInput class=\"btn btn-input\" placeholder={locale('project.unsaved_file')} value={fileRename} onChange={setFileRename} onEnter={doFileRename} onBlur={doFileRename} />\n\t\t\t\t\t\t{file && <Btn icon=\"trashcan\" tooltip={locale('project.delete_file')} onClick={deleteFile} />}\n\t\t\t\t\t</div>\n\t\t\t\t\t{dirty ? <div class=\"status-icon\">{Octicon.dot_fill}</div>\n\t\t\t\t\t\t: fileSaved ? <div class=\"status-icon active\">{Octicon.check}</div>\n\t\t\t\t\t\t\t: fileError && <div class=\"status-icon danger\">{Octicon.x}</div> }\n\t\t\t\t</div>\n\t\t\t\t<div class=\"generator-controls\">\n\t\t\t\t\t<Btn icon=\"upload\" label={locale('import')} onClick={importSource} />\n\t\t\t\t\t<BtnMenu icon=\"archive\" label={locale('presets')} relative={false}>\n\t\t\t\t\t\t<SearchList searchPlaceholder={locale('search')} noResults={locale('no_presets')} values={presets} onSelect={selectPreset}/>\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t\t<BtnMenu icon=\"tag\" label={version} tooltip={locale('switch_version')} data-cy=\"version-switcher\">\n\t\t\t\t\t\t{allowedVersions.reverse().map(v =>\n\t\t\t\t\t\t\t<Btn label={v} active={v === version} onClick={() => changeVersion(v)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t\t<BtnMenu icon=\"kebab_horizontal\" tooltip={locale('more')}>\n\t\t\t\t\t\t<Btn icon=\"history\" label={locale('reset')} onClick={reset} />\n\t\t\t\t\t\t<Btn icon=\"arrow_left\" label={locale('undo')} onClick={undo} />\n\t\t\t\t\t\t<Btn icon=\"arrow_right\" label={locale('redo')} onClick={redo} />\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t\t<Tree {...{model, version, blockStates}} onError={setError} />\n\t\t</main>\n\t\t<div class=\"popup-actions\" style={`--offset: -${8 + actionsShown * 50}px;`}>\n\t\t\t<div class={`popup-action action-preview${hasPreview ? ' shown' : ''} tooltipped tip-nw`} aria-label={locale(previewShown ? 'hide_preview' : 'show_preview')} onClick={togglePreview}>\n\t\t\t\t{previewShown ? Octicon.x_circle : Octicon.play}\n\t\t\t</div>\n\t\t\t<div class={`popup-action action-download${sourceShown ? ' shown' : ''} tooltipped tip-nw`} aria-label={locale('download')} onClick={downloadSource}>\n\t\t\t\t{Octicon.download}\n\t\t\t</div>\n\t\t\t<div class={`popup-action action-copy${sourceShown ? ' shown' : ''}${copyActive ? ' active' : ''} tooltipped tip-nw`} aria-label={locale(copyActive ? 'copied' : 'copy')} onClick={copySource}>\n\t\t\t\t{copyActive ? Octicon.check : Octicon.clippy}\n\t\t\t</div>\n\t\t\t<div class={'popup-action action-code shown tooltipped tip-nw'} aria-label={locale(sourceShown ? 'hide_output' : 'show_output')} onClick={toggleSource}>\n\t\t\t\t{sourceShown ? Octicon.chevron_right : Octicon.code}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class={`popup-preview${previewShown ? ' shown' : ''}`}>\n\t\t\t<PreviewPanel {...{model, version, id: gen.id}} shown={previewShown} onError={setError} />\n\t\t</div>\n\t\t<div class={`popup-source${sourceShown ? ' shown' : ''}`}>\n\t\t\t<SourcePanel {...{model, blockStates, doCopy, doDownload, doImport}} name={gen.schema ?? 'data'} copySuccess={copySuccess} onError={setError} />\n\t\t</div>\n\t</>\n}\n","import config from '../../config.json'\nimport { Giscus, ToolCard } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport { cleanUrl } from '../Utils'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Home({}: Props) {\n\tconst { locale } = useLocale()\n\tuseTitle(locale('title.home'))\n\treturn <main>\n\t\t<div class=\"home\">\n\t\t\t<ToolCard title=\"Data packs\">\n\t\t\t\t{config.generators.filter(g => !g.category).map(g => \n\t\t\t\t\t<ToolCard title={locale(g.id)} link={cleanUrl(g.url)} />\n\t\t\t\t)}\n\t\t\t\t<ToolCard title={locale('worldgen')} link=\"/worldgen/\" />\n\t\t\t</ToolCard>\n\t\t\t<ToolCard title=\"Resource packs\">\n\t\t\t\t{config.generators.filter(g => g.category === 'assets').map(g =>\n\t\t\t\t\t<ToolCard title={locale(g.id)} link={cleanUrl(g.url)} />\n\t\t\t\t)}\n\t\t\t</ToolCard>\n\t\t\t<ToolCard title=\"Report Inspector\" icon=\"report\"\n\t\t\t\tlink=\"https://misode.github.io/report/\"\n\t\t\t\tdesc=\"Analyse your performance reports\" />\n\t\t\t<ToolCard title=\"Minecraft Sounds\" icon=\"sounds\"\n\t\t\t\tlink=\"/sounds/\"\n\t\t\t\tdesc=\"Browse through and mix all the vanilla sounds\" />\n\t\t\t<ToolCard title=\"Data Pack Upgrader\"\n\t\t\t\tlink=\"https://misode.github.io/upgrader/\"\n\t\t\t\tdesc=\"Convert your data packs from 1.16 to 1.17 to 1.18\" />\n\t\t\t<ToolCard title=\"Technical Changelog\" link=\"/changelog/\" />\n\t\t\t<ToolCard title=\"Minecraft Versions\" link=\"/versions/\" />\n\t\t\t<Giscus />\n\t\t</div>\n\t</main>\n}\n","import { useMemo } from 'preact/hooks'\nimport { Ad, TreeView } from '../components'\nimport { getFilePath, useLocale, useProject, useTitle } from '../contexts'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Project({}: Props) {\n\tconst { locale } = useLocale()\n\tconst { project, openFile } = useProject()\n\tuseTitle(locale('title.project', project.name))\n\tconst entries = useMemo(() => project.files.map(getFilePath), project.files)\n\n\tconst selectFile = (entry: string) => {\n\t\tconst [, namespace, type, ...id] = entry.split('/')\n\t\topenFile(type, `${namespace}:${id}`)\n\t}\n\n\treturn <main>\n\t\t<Ad id=\"data-pack-project\" type=\"text\" />\n\t\t<div class=\"project\">\n\t\t\t<h2>{project.name}</h2>\n\t\t\t<div class=\"file-view\">\n\t\t\t\t<TreeView entries={entries} onSelect={selectFile}/>\n\t\t\t</div>\n\t\t</div>\n\t</main>\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Btn, BtnMenu, ErrorPanel, SoundConfig, TextInput } from '../components'\nimport { useLocale, useTitle, useVersion } from '../contexts'\nimport type { SoundEvents, VersionId } from '../services'\nimport { fetchSounds } from '../services'\nimport { hexId } from '../Utils'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Sounds({}: Props) {\n\tconst { locale } = useLocale()\n\tconst { version, changeVersion } = useVersion()\n\tconst [error, setError] = useState<Error | null>(null)\n\tuseTitle(locale('title.sounds'))\n\n\tconst [sounds, setSounds] = useState<SoundEvents>({})\n\tconst soundKeys = Object.keys(sounds ?? {})\n\tuseEffect(() => {\n\t\tfetchSounds(version)\n\t\t\t.then(setSounds)\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [version])\n\n\tconst [search, setSearch] = useState('')\n\tconst [configs, setConfigs] = useState<SoundConfig[]>([])\n\tconst addConfig = () => {\n\t\tsetConfigs([{ id: hexId(), sound: search, delay: 0, pitch: 1, volume: 1 }, ...configs])\n\t}\n\tconst editConfig = (id: string) => (changes: Partial<SoundConfig>) => {\n\t\tsetConfigs(configs.map(c => c.id === id ? { ...c, ...changes } : c))\n\t}\n\tconst deleteConfig = (id: string) => () => {\n\t\tsetConfigs(configs.filter(c => c.id !== id))\n\t}\n\n\tconst [delayedPlay, setDelayedPlay] = useState(0)\n\tconst playAll = () => {\n\t\tsetDelayedPlay(delayedPlay + 1)\n\t}\n\n\tconst download = useRef<HTMLAnchorElement>(null)\n\tconst downloadFunction = () => {\n\t\tconst hasDelay = configs.some(c => c.delay > 0)\n\t\tconst content = configs\n\t\t\t.sort((a, b) => a.delay - b.delay)\n\t\t\t.map(c => `${hasDelay ? `execute if score @s delay matches ${c.delay} run ` : ''}playsound minecraft:${c.sound} master @s ~ ~ ~ ${c.volume} ${c.pitch}`)\n\t\t\t.join('\\n')\n\t\tdownload.current.setAttribute('href', 'data:text/plain;charset=utf-8,' + content + '%0A')\n\t\tdownload.current.setAttribute('download', 'sounds.mcfunction')\n\t\tdownload.current.click()\n\t}\n\n\treturn <main>\n\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t{soundKeys.length > 0 && <>\n\t\t\t<div class=\"controls sounds-controls\">\n\t\t\t\t<div class=\"sound-search-group\">\n\t\t\t\t\t<TextInput class=\"btn btn-input sound-search\" list=\"sound-list\" placeholder={locale('sounds.search')}\n\t\t\t\t\t\tvalue={search} onChange={setSearch} onEnter={addConfig} />\n\t\t\t\t\t<Btn icon=\"plus\" tooltip={locale('sounds.add_sound')} class=\"add-sound\" onClick={addConfig} />\n\t\t\t\t</div>\n\t\t\t\t{configs.length > 1 && <Btn icon=\"play\" label={ locale('sounds.play_all')} class=\"play-all-sounds\" onClick={playAll} />}\n\t\t\t\t<div class=\"spacer\"></div>\n\t\t\t\t<Btn icon=\"download\" label={locale('download')} tooltip={locale('sounds.download_function')} class=\"download-sounds\" onClick={downloadFunction} />\n\t\t\t\t<BtnMenu icon=\"tag\" label={version}>\n\t\t\t\t\t{config.versions.reverse().map(v =>\n\t\t\t\t\t\t<Btn label={v.id} active={v.id === version} onClick={() => changeVersion(v.id as VersionId)} />\n\t\t\t\t\t)}\n\t\t\t\t</BtnMenu>\n\t\t\t</div>\n\t\t\t<div class=\"sounds\">\n\t\t\t\t{configs.map(c => <SoundConfig key={c.id} {...c} {...{ sounds, delayedPlay }} onEdit={editConfig(c.id)} onDelete={deleteConfig(c.id)} />)}\n\t\t\t</div>\n\t\t\t<a ref={download} style=\"display: none;\"></a>\n\t\t</>}\n\t\t<datalist id=\"sound-list\">\n\t\t\t{soundKeys.map(s => <option key={s} value={s} />)}\n\t\t</datalist>\n\t</main>\n}\n","import { getCurrentUrl } from 'preact-router'\nimport { useEffect, useState } from 'preact/hooks'\nimport { Ad, ErrorPanel, Octicon, VersionDetail, VersionList } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport type { VersionMeta } from '../services'\nimport { fetchVersions } from '../services'\nimport { getSearchParams } from '../Utils'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Versions({}: Props) {\n\tconst { locale } = useLocale()\n\tconst [error, setError] = useState<Error | null>(null)\n\tuseTitle(locale('title.versions'))\n\n\tconst [versions, setVersions] = useState<VersionMeta[]>([])\n\tuseEffect(() => {\n\t\tfetchVersions()\n\t\t\t.then(versions => setVersions(versions))\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [])\n\n\tconst selectedId = getSearchParams(getCurrentUrl()).get('id')\n\tconst selected = versions.find(v => v.id === selectedId)\n\n\tuseTitle(selected ? selected.name : 'Versions Explorer', selected ? [] : undefined)\n\n\tconst nextVersion = selected && getOffsetVersion(versions, selected, -1)\n\tconst previousVersion = selected && getOffsetVersion(versions, selected, 1)\n\n\treturn <main>\n\t\t<Ad type=\"text\" id=\"versions\" />\n\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t<div class=\"versions\">\n\t\t\t{selected ? <>\n\t\t\t\t<div class=\"version-navigation\">\n\t\t\t\t\t<a class=\"btn btn-link\" href=\"/versions/\">\n\t\t\t\t\t\t{Octicon.three_bars}\n\t\t\t\t\t\t{locale('versions.all')}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"btn btn-link\" {...previousVersion ? {href: `/versions/?id=${previousVersion.id}`} : {disabled: true}}>\n\t\t\t\t\t\t{Octicon.arrow_left}\n\t\t\t\t\t\t{locale('versions.previous')}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"btn btn-link\" {...nextVersion ? {href: `/versions/?id=${nextVersion.id}`} : {disabled: true}}>\n\t\t\t\t\t\t{locale('versions.next')}\n\t\t\t\t\t\t{Octicon.arrow_right}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<VersionDetail version={selected} />\n\t\t\t</> : <VersionList versions={versions} link={id => `/versions/?id=${id}`} />}\n\t\t</div>\n\t</main>\n}\n\nfunction getOffsetVersion(versions: VersionMeta[], current: VersionMeta, offset: number) {\n\tconst currentIndex = versions.findIndex(v => v.id === current.id)\n\tconst offsetIndex = currentIndex + offset\n\tif (offsetIndex < 0 || offsetIndex >= versions.length) {\n\t\treturn undefined\n\t}\n\treturn versions[offsetIndex]\n}\n","import type { RouterOnChangeArgs } from 'preact-router'\nimport { Router } from 'preact-router'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { Category, Changelog, Generator, Home, Project, Sounds, Versions } from './pages'\nimport { cleanUrl } from './Utils'\n\nexport function App() {\n\tconst changeRoute = (e: RouterOnChangeArgs) => {\n\t\t// Needs a timeout to ensure the title is set correctly\n\t\tsetTimeout(() => Analytics.pageview(cleanUrl(e.url)))\n\t}\n\n\treturn <>\n\t\t<Header />\n\t\t<Router onChange={changeRoute}>\n\t\t\t<Home path=\"/\" />\n\t\t\t<Category path=\"/worldgen\" category=\"worldgen\" />\n\t\t\t<Category path=\"/assets\" category=\"assets\" />\n\t\t\t<Sounds path=\"/sounds\" />\n\t\t\t<Changelog path=\"/changelog\" />\n\t\t\t<Versions path=\"/versions\" />\n\t\t\t<Project path=\"/project\" />\n\t\t\t<Generator default />\n\t\t</Router>\n\t</>\n}\n","import { render } from 'preact'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { App } from './App'\nimport { LocaleProvider, ProjectProvider, ThemeProvider, TitleProvider, VersionProvider } from './contexts'\n\nfunction Main() {\n\treturn <LocaleProvider>\n\t\t<ThemeProvider>\n\t\t\t<VersionProvider>\n\t\t\t\t<TitleProvider>\n\t\t\t\t\t<ProjectProvider>\n\t\t\t\t\t\t<App />\n\t\t\t\t\t</ProjectProvider>\n\t\t\t\t</TitleProvider>\n\t\t\t</VersionProvider>\n\t\t</ThemeProvider>\n\t</LocaleProvider>\n}\n\nrender(<Main />, document.body)\n"],"names":["Analytics","type","id","getElementById","remove","window","load","data-ea-publisher","data-ea-type","class","icon","label","active","clazz","tooltip","tooltipLoc","onClick","aria-label","Octicon","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","value","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","setGenerator","generator","setPrefersColorScheme","colorScheme","generatorEvent","obj","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","BigInt","Math","floor","random","Number","MAX_SAFE_INTEGER","model","seed","dimensions","get","Path","set","keys","forEach","s2","h","i","imul","charCodeAt","url","replaceAll","searchIndex","indexOf","slice","cleanUrl","trimmedUrl","getPath","replace","config","generators","find","g2","Map","split","map","param","decodeURIComponent","modifications","newPath","getCurrentUrl","searchParams","getSearchParams","entries","key","delete","search","encodeURIComponent","str","abs","hashString","a2","b2","c","max","min","lerp","e","Error","message","deepClone","rfdc","constructor","isArray","deepEqual","valueOf","Object","prototype","hasOwnProperty","call","[object Object]","forward","backward","this","defaultValue","large","larger","doSelect","placeholder","dataList","onChange","onInput","value2","target","ref","useRef","current","select","dataListId","hexId","stopPropagation","list","cooldown","invert","initial","setActive","useState","timeout","setTimeout","size","draw","onDrag","onHover","onLeave","inputs","canvas","dragStart","dragRequest","dragPending","dragBusy","onMouseDown","offsetX","offsetY","onMouseMove","x","clientWidth","y2","clientHeight","dx","dy","requestAnimationFrame","async","dx2","dy2","onMouseUp","onMouseLeave","addEventListener","body","removeEventListener","redraw","redrawCount","ctx","getContext","width","height","img","getImageData","ownCount","putImageData","hider","query","prefers","setPrefers","matchMedia","matches","mediaQuery","invalidated","listener","addListener","removeListener","props","relative","children","useFocus","__spreadValues","Btn","__spreadProps","alert","xmlns","viewBox","fill-rule","d","archive","arrow_left","arrow_right","check","chevron_down","chevron_right","chevron_up","clippy","code","dash","device_desktop","dot_fill","download","duplicate","eye","eye_closed","file","file_directory","gear","globe","history","info","issue_opened","kebab_horizontal","link","link_external","mark_github","moon","play","plus","plus_circle","repo","sort_asc","sort_desc","square","square_fill","stack","sun","sync","tag","terminal","three_bars","trashcan","unfold","upload","x_circle","error","onDismiss","stackVisible","setStackVisible","setStack","stack2","line","mapped","mappedStack","useMemo","url2","name","href","checked","component","evt","fn","onKeyDown","onEnter","displayName","TextInput","BaseInput","v","NumberInput","RangeInput","values","onSelect","searchPlaceholder","noResults","setSearch","results","terms","trim","filter","every","includes","t","BtnInput","Changelogs","fetch","json","Promise","all","group","groupIndex","versionIndex","text","entry","tags","substring","content","parseChangelog","order","change","fetchChangelog","parseVersion","flat","fetchGroup","article","match","isObject","localStorage","removeItem","caches","mcmetaUrl","dynamic","getItem","cache","open","debug","promises","request","push","warn","deleteMatching","startsWith","setItem","data","getData","mcmeta","register","properties","default","versionId","registry","versions","cacheResponse","ok","fetchResponse","responseData","put","Response","JSON","stringify","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","1.18","java18","1.18.2","java182","1.19","java19","CachedDecorator","CachedFeature","CachedCollections","scriptRel","collections","getCollections","blockStates","collectionTarget","blockStateTarget","validateCache","fetchRegistries","fetchBlockStateMap","fetchData","schemas","getSchemas","minVersionId","maxVersionId","findIndex","minVersion","maxVersion","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","dep","isCss","endsWith","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Store","Store2","getLanguage","getTheme","getVersion","getIndent","getFormat","getHighlighting","getSoundsVersion","getProjects","projects","parse","DRAFT_PROJECT","setIndent","indent","setFormat","format","setHighlighting","highlighting","setSoundsVersion","setProjects","Locale","createContext","lang","locale","changeLanguage","Locales","fallback","English","params","parseInt","resolveLocaleParams","en","langConfig","languages","__variableDynamicImportRuntime0__","schema","__variableDynamicImportRuntime1__","useContext","useCallback","localize","lang2","loadLocale","Provider","namespace","files","Project","project","changeProject","updateProject","updateFile","openFile","closeFile","projectName","setProjectName","p","fileId","setFileId","f","changeProjects","projects2","edits","newId","exists","some","gen","path","Theme","actualTheme","changeTheme","prefersLight","useMediaQuery","prefersDark","documentElement","setAttribute","theme2","Title","title","changeTitle","context","useLocale","setTitle","title2","titleVersions","Version","changeVersion","targetVersion","version2","has","ready","LAYERS","temperature","humidity","continentalness","erosion","weirdness","offset","factor","jaggedness","cacheState","biomeSourceCache","state","options","newState","octaves","FixedBiome","Identifier","biome","shift","scale","numBiomes","biomes","_y","z","node","preset","checkVersion","NetherPreset18","NetherPreset","fetchPreset","biome_source","OverworldPreset18","DataModel","unwrapLists","init","wasm","loadWasm","BiomeIds","BiMap","t0","t1","h0","h1","c0","c1","e0","e1","w0","w1","d0","d1","o","depth","parameters","getOrPut","biome_parameters","Float64Array","Int32Array","sampler","climate_sampler","firstOctave","amplitudes","ids","multi_noise","getA","getBiomes","xFrom","xTo","xStep","yFrom","yTo","yStep","zFrom","zTo","zStep","climate","climate_noise","w","result","noise","config2","clamp","NormalNoise","LegacyRandom","n","n2","sample","minDist","Infinity","minBiome","dist","altitude","create","getBiomeSource","biomeSource","biomeColors","color","VanillaColors","stringToColor","minecraft:badlands","minecraft:badlands_plateau","minecraft:bamboo_jungle","minecraft:bamboo_jungle_hills","minecraft:basalt_deltas","minecraft:beach","minecraft:birch_forest","minecraft:birch_forest_hills","minecraft:cold_ocean","minecraft:crimson_forest","minecraft:dark_forest","minecraft:dark_forest_hills","minecraft:deep_cold_ocean","minecraft:deep_frozen_ocean","minecraft:deep_lukewarm_ocean","minecraft:deep_ocean","minecraft:deep_warm_ocean","minecraft:desert","minecraft:desert_hills","minecraft:desert_lakes","minecraft:end_barrens","minecraft:end_highlands","minecraft:end_midlands","minecraft:eroded_badlands","minecraft:flower_forest","minecraft:forest","minecraft:frozen_ocean","minecraft:frozen_river","minecraft:giant_spruce_taiga","minecraft:old_growth_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:old_growth_pine_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_hills","minecraft:gravelly_mountains","minecraft:windswept_gravelly_hills","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:sparse_jungle","minecraft:jungle_hills","minecraft:lukewarm_ocean","minecraft:modified_badlands_plateau","minecraft:modified_gravelly_mountains","minecraft:modified_jungle","minecraft:modified_jungle_edge","minecraft:modified_wooded_badlands_plateau","minecraft:mountain_edge","minecraft:extreme_hills","minecraft:mountains","minecraft:windswept_hills","minecraft:mushroom_field_shore","minecraft:mushroom_fields","minecraft:nether_wastes","minecraft:ocean","minecraft:plains","minecraft:river","minecraft:savanna","minecraft:savanna_plateau","minecraft:shattered_savanna","minecraft:windswept_savanna","minecraft:shattered_savanna_plateau","minecraft:small_end_islands","minecraft:snowy_beach","minecraft:snowy_mountains","minecraft:snowy_taiga","minecraft:snowy_taiga_hills","minecraft:snowy_taiga_mountains","minecraft:snowy_tundra","minecraft:snowy_plains","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:stony_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:old_growth_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_badlands","minecraft:wooded_hills","minecraft:wooded_mountains","minecraft:windswept_forest","minecraft:snowy_slopes","minecraft:lofty_peaks","minecraft:jagged_peaks","minecraft:snowcapped_peaks","minecraft:frozen_peaks","minecraft:stony_peaks","minecraft:grove","minecraft:meadow","minecraft:lush_caves","minecraft:dripstone_caves","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","placements","features","biomeInfoNoise","PerlinNoise","fork","seaLevel","nextFloat","nextInt","nextGaussian","sqrt","log","cos","PI","base","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","normal","mean","deviation","totalWeight","distribution","reduce","sum","weight","placement","fill","pos","feature","j","anchor","_ctx","absolute","above_bottom","below_top","useFeature","featureFn","Features","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","noise_level","below_noise","above_noise","count_noise_biased","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","outer","flatMap","inner","depth_average","decorateY","baseline","emerald_ore","fire","glowstone","heightmap","heightmap_spread_double","heightmap_world_surface","iceberg","lava_lake","nope","range","maximum","top_offset","bottom_offset","range_biased","range_very_biased","spread_32_above","top_solid_heightmap","magma","surface_relative_threshold","water_lake","positions","modifier","PlacementModifiers","pos2","count_on_every_layer","environment_scan","height_range","resolveAnchor","n1","plateau","sampleHeight","in_square","noise_based_count","noise_threshold_count","random_offset","xz_spread","y_spread","rarity_filter","minLimitPerlinNoise","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","cx","ox","noise1","fillNoiseColumn","noise2","yy","oy","d2","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","zo","falloff","density_factor","density_offset","top_slide","clampedLerp","bottom_slide","x2","wrap","y22","z2","minLimitNoise","maxLimitNoise","mainNoise","colors","minecraft:air","minecraft:water","minecraft:lava","minecraft:stone","minecraft:deepslate","minecraft:bedrock","minecraft:grass_block","minecraft:dirt","minecraft:gravel","minecraft:sand","minecraft:sandstone","minecraft:netherrack","minecraft:crimson_nylium","minecraft:warped_nylium","minecraft:basalt","minecraft:end_stone","generatorCache","chunkCache","registryCache","initRegistries","NoiseGeneratorSettings","fromJson","NoiseChunkGenerator","deepslate18.FixedBiome","deepslate18.NoiseChunkGenerator","getCached","LevelSlice","minY","generate","generator2","data2","state2","getBlockState","getName","OldNoiseChunkGenerator","reset","row","iterateNoiseColumn","reverse","getColor","XoroshiroRandom","forkPositional","NoiseSettings","min_y","terrain_shaper","originalFn","DensityFunction","mapAll","NoiseRouter","Visitor","createDensityFunction","density","compute","clampedMap","Registries","NoiseParameters","rootRegistries","Registry","root","fetchAllPresets","fetchRegistry","DENSITY_FUNCTION","clear","assign","getOrThrow","NOISE","minX","done","chunks","cached","Chunk","ChunkPos","Z","forcedBiome","chunk","buildSurface","chunkIndex","BiomeSourcePreview","shown","setScale","focused","setFocused","layers","setLayers","Set","refineTimeout","legacyRandomSource","getOctaves","calculateState","useCanvas","round","oz","col","xRange","zRange","l2","getClimates","worldX","worldZ","getBiomeColor","getBiome","brightness","biomeMap","xx","zz","toWorld","getClimate","changeScale","newScale","BtnMenu","enabled","newSeed","k","toUpperCase","toFixed","DecoratorPreview","setSeed","randomSeed","DensityFunctionPreview","autoScroll","setAutoScroll","scrollInterval","densityFunction","worldY","setInterval","NoisePreview","NoiseSettingsPreview","setBiome","setBiomeScale","setBiomeDepth","noiseSettings","block","minBlockX","maxBlockX","BlockPos","getNoiseBlock","allBiomes","HasPreview","setCount","hook","transformOutput","ModelPath","switchNode","getOwnPropertySymbols","blockState","validation","validator","relativePath","getActiveFields","activeFields","out","INDENT","2_spaces","4_spaces","tabs","minified","FORMATS","yaml","dump","flowLevel","doCopy","doDownload","doImport","copySuccess","onError","retransform","onImport","textarea","editor","getSerializedOutput","model2","blockStates2","getOutput","output","setValue","getValue","wrapLists","braceEditor","brace","edit","setOptions","fontSize","showFoldWidgets","highlightSelectedWord","$blockScrolling","on","getSession","setMode","indent2","format2","setOption","selectAll","configure","clipboard","writeText","click","data-cy","changeIndent","changeFormat","changeHighlighting","spellcheck","autocorrect","onBlur","style","mapper","getter","setter","silent","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","fixedLists","collapsedFields","collapsableFields","keysModel","MapNode","StringNode","historyMax","prefix","suffix","renderHtml","data-category","boolean","states","BooleanSuffix","choices","choice","activeCase","contextPath","getModel","getArray","choiceContextPath","choiceContext","inject","c2","def","newValue","pathLocale","contextPush","expand","collapse","isToggled","useToggles","maxShown","setMaxShown","maxLength","ErrorPopup","modelPush","cValue","cId","cPath","canToggle","toggle","nested","Collapsed","MemoedTreeNode","actions","splice","disabled","keyPath","keysSchema","enum","last","errors","add","ObjectNode","fromEntries","cSchema","number","NumberSuffix","getChildModelPath","isDecorated","wrapper","fields","originalFields","decorators","iterateNestedDecorators","ListNode","featurePath","decoratorsPath","ModelWrapper","path2","modelArr","equals","newDecorators","feature2","produceNestedDecorators","createDecoratorsWrapper","optional","onExpand","onCollapse","toggled","expanded","newCtx","pools","loot","child","context2","cPrefix","cSuffix","cBody","isFlattened","isInlined","HelpPopup","string","StringSuffix","toggleState","setToggleState","toggleAll","setToggleAll","ctrlKey","integer","parsed","parseFloat","padStart","getValues","isEnum","pool","additional","datalistId","findGenerator","values2","memo","onContextMenu","preventDefault","a","description","navigator","prev","next","hash","withModel","getAll","e2","message2","popupIcon","popup","useErrorBoundary","setState","FullNode","term","useTheme","themeSuffix","themeUrl","location","host","GiscusReact","repoId","categoryId","mapping","reactionsEnabled","emitMetadata","inputPosition","Themes","system","dark","light","useVersion","useTitle","getGenerator","Link","Icons","home","route","th","rx","y","report","sounds","cy","r","clip-rule","sound","delay","pitch","volume","onEdit","onDelete","delayedPlay","loading","setLoading","playing","setPlaying","invalid","setInvalid","howls","command","soundEvent","h2","stop","soundPath","howl","Howl","src","rate","completed","copyActive","setCopyActive","copyTimeout","step","desc","roots","groups","leaves","hidden","setHidden","entries2","TreeViewEntry","TreeView","activeTags","toggleTag","ArticleLink","ChangelogTag","dangerouslySetInnerHTML","__html","marked","changes","defaultOrder","setTags","filteredChangelogs","q2","toLowerCase","sort","setSort","sortedChangelogs","ChangelogEntry","tab","setTab","changelogs","setChangelogs","changelogs2","catch","console","VersionMetaData","releaseDate","release_target","data_version","protocol_version","data_pack_version","resource_pack_version","ChangelogList","Giscus","Date","release_time","toLocaleDateString","day","month","year","compact","snapshots","setSnapshots","filteredVersions","Checkbox","VersionEntry","ToolCard","setError","Ad","ErrorPanel","useProject","errorBoundary","errorRetry","allowedVersions","currentPreset","setModel","setBlockStates","versionData","Reference","ChoiceNode","schemaName","validate","err","m","loadPreset","dirty","setDirty","fileRename","setFileRename","fileSaved","doSave","useActiveTimeout","fileError","doFileError","doFileRename","onKeyUp","undo","redo","presets","setPresets","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","SearchList","Tree","PreviewPanel","SourcePanel","getFilePath","setSounds","soundKeys","configs","setConfigs","addConfig","deleteConfig","setDelayedPlay","hasDelay","SoundConfig","setVersions","versions2","selectedId","selected","nextVersion","getOffsetVersion","previousVersion","VersionDetail","VersionList","offsetIndex","Header","Router","Home","Category","Sounds","Changelog","Generator","LocaleProvider","ThemeProvider","VersionProvider","TitleProvider","ProjectProvider","App","render","Main"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.301407da.js","sources":["../../src/app/Analytics.ts","../../src/app/components/Ad.tsx","../../src/app/components/Btn.tsx","../../src/app/Utils.ts","../../src/app/components/BtnInput.tsx","../../src/app/hooks/useActiveTimout.ts","../../src/app/hooks/useCanvas.ts","../../src/app/hooks/useFocus.ts","../../src/app/hooks/useMediaQuery.ts","../../src/app/hooks/useModel.ts","../../src/app/components/BtnMenu.tsx","../../src/app/components/Octicon.tsx","../../src/app/components/ErrorPanel.tsx","../../src/app/components/forms/Checkbox.tsx","../../src/app/components/forms/Input.tsx","../../src/app/components/forms/SearchList.tsx","../../src/app/services/Changelogs.ts","../../src/app/services/DataFetcher.ts","../../src/app/services/Schemas.ts","../../vite/preload-helper","../../src/app/Store.ts","../../src/app/contexts/Locale.tsx","../../src/app/contexts/Project.tsx","../../src/app/contexts/Theme.tsx","../../src/app/contexts/Title.tsx","../../src/app/contexts/Version.tsx","../../src/app/previews/BiomeSource.ts","../../src/app/previews/Decorator.ts","../../src/app/previews/noise/NoiseChunkGenerator.ts","../../src/app/previews/NoiseSettings.ts","../../src/app/components/previews/BiomeSourcePreview.tsx","../../src/app/components/previews/DecoratorPreview.tsx","../../src/app/components/previews/DensityFunctionPreview.tsx","../../src/app/components/previews/NoisePreview.tsx","../../src/app/previews/NormalNoise.ts","../../src/app/components/previews/NoiseSettingsPreview.tsx","../../src/app/components/generator/PreviewPanel.tsx","../../src/app/schema/transformOutput.ts","../../src/app/components/generator/SourcePanel.tsx","../../src/app/schema/ModelWrapper.ts","../../src/app/schema/renderHtml.tsx","../../src/app/components/generator/Tree.tsx","../../src/app/components/Giscus.tsx","../../src/app/components/Header.tsx","../../src/app/components/Icons.tsx","../../src/app/components/sounds/SoundConfig.tsx","../../src/app/components/ToolCard.tsx","../../src/app/components/TreeView.tsx","../../src/app/components/versions/ChangelogEntry.tsx","../../src/app/components/versions/ChangelogTag.tsx","../../src/app/components/versions/ChangelogList.tsx","../../src/app/components/versions/VersionDetail.tsx","../../src/app/components/versions/VersionEntry.tsx","../../src/app/components/versions/VersionList.tsx","../../src/app/components/versions/VersionMetaData.tsx","../../src/app/pages/Category.tsx","../../src/app/pages/Changelog.tsx","../../src/app/pages/Generator.tsx","../../src/app/pages/Home.tsx","../../src/app/pages/Project.tsx","../../src/app/pages/Sounds.tsx","../../src/app/pages/Versions.tsx","../../src/app/App.tsx","../../src/app/Main.tsx"],"sourcesContent":["export namespace Analytics {\n\tconst ID_SITE = 'Site'\n\tconst ID_GENERATOR = 'Generator'\n\n\tconst DIM_THEME = 1\n\tconst DIM_VERSION = 3\n\tconst DIM_LANGUAGE = 4\n\tconst DIM_PREVIEW = 5\n\tconst DIM_GENERATOR = 6\n\tconst DIM_PREFERS_COLOR_SCHEME = 7\n\n\tfunction event(category: string, action: string, label?: string) {\n\t\tga('send', 'event', category, action, label)\n\t}\n\n\tfunction dimension(index: number, value: string) {\n\t\tga('set', `dimension${index}`, value)\n\t}\n\n\texport function pageview(page: string) {\n\t\tga('set', 'page', page)\n\t\tga('send', 'pageview')\n\t}\n\n\texport function setLanguage(language: string) {\n\t\tdimension(DIM_LANGUAGE, language)\n\t\tevent(ID_SITE, 'set-language', language)\n\t}\n\n\texport function setTheme(theme: string) {\n\t\tdimension(DIM_THEME, theme)\n\t\tevent(ID_SITE, 'set-theme', theme)\n\t}\n\n\texport function setVersion(version: string) {\n\t\tdimension(DIM_VERSION, version)\n\t\tevent(ID_GENERATOR, 'set-version', version)\n\t}\n\n\texport function setPreview(preview: string) {\n\t\tdimension(DIM_PREVIEW, preview)\n\t\tevent(ID_GENERATOR, 'set-preview', preview)\n\t}\n\n\texport function setGenerator(generator: string) {\n\t\tdimension(DIM_GENERATOR, generator)\n\t}\n\n\texport function setPrefersColorScheme(colorScheme: string) {\n\t\tdimension(DIM_PREFERS_COLOR_SCHEME, colorScheme)\n\t}\n\n\texport function generatorEvent(action: string, label?: string) {\n\t\tevent(ID_GENERATOR, action, label)\n\t}\n}\n","import { useEffect } from 'preact/hooks'\n\ndeclare const ethicalads: any\n\ntype AdProps = {\n\ttype: 'text' | 'image',\n\tid: string,\n}\nexport function Ad({ type, id }: AdProps) {\n\tuseEffect(() => {\n\t\tdocument.getElementById('ad-placeholder')?.remove()\n\t\tif ('ethicalads' in window) {\n\t\t\tethicalads.load()\n\t\t}\n\t}, [])\n\n\treturn <div data-ea-publisher=\"misode-github-io\" data-ea-type={type} class=\"ad dark flat\" id={id}></div>\n}\n","import { Octicon } from '.'\n\ntype BtnProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tactive?: boolean,\n\ttooltip?: string,\n\ttooltipLoc?: 'se' | 'sw' | 'nw',\n\tclass?: string,\n\tonClick?: (event: MouseEvent) => unknown,\n}\nexport function Btn({ icon, label, active, class: clazz, tooltip, tooltipLoc, onClick }: BtnProps) {\n\treturn <div class={`btn${active ? ' active' : ''}${clazz ? ` ${clazz}` : ''}${tooltip ? ` tooltipped tip-${tooltipLoc ?? 'sw'}` : ''}`} onClick={onClick} aria-label={tooltip}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && <span>{label}</span>}\n\t</div>\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { getCurrentUrl, route } from 'preact-router'\nimport rfdc from 'rfdc'\nimport config from '../config.json'\n\nexport function isPromise(obj: any): obj is Promise<any> {\n\treturn typeof (obj as any)?.then === 'function' \n}\n\nexport function isObject(obj: any) {\n\treturn typeof obj === 'object' && obj !== null\n}\n\nconst dec2hex = (dec: number) => ('0' + dec.toString(16)).substr(-2)\n\nexport function hexId(length = 12) {\n\tvar arr = new Uint8Array(length / 2)\n\twindow.crypto.getRandomValues(arr)\n\treturn Array.from(arr, dec2hex).join('')\n}\n\nexport function randomSeed() {\n\treturn BigInt(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER))\n}\n\nexport function newSeed(model: DataModel) {\n\tconst seed = Math.floor(Math.random() * (4294967296)) - 2147483648\n\tconst dimensions = model.get(new Path(['dimensions']))\n\tmodel.set(new Path(['seed']), seed, true)\n\tif (typeof dimensions === 'object' && dimensions !== null) {\n\t\tObject.keys(dimensions).forEach(id => {\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'seed']), seed, true)\n\t\t\tmodel.set(new Path(['dimensions', id, 'generator', 'biome_source', 'seed']), seed, true)\n\t\t})\n\t}\n\tmodel.set(new Path(['generator', 'seed']), seed, true)\n\tmodel.set(new Path(['generator', 'biome_source', 'seed']), seed)\n}\n\nexport function htmlEncode(str: string) {\n\treturn str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')\n\t\t.replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/')\n}\n\nexport function hashString(s: string) {\n\tlet h = 0\n\tfor(let i = 0; i < s.length; i++)\n\t\th = Math.imul(31, h) + s.charCodeAt(i) | 0\n\treturn h\n}\n\nexport function cleanUrl(url: string) {\n\treturn `/${url}/`.replaceAll('//', '/')\n}\n\nexport function getPath(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(0, searchIndex)\n\t}\n\treturn cleanUrl(url)\n}\n\nexport function getGenerator(url: string) {\n\tconst trimmedUrl = getPath(url).replace(/^\\//, '').replace(/\\/$/, '')\n\treturn config.generators.find(g => g.url === trimmedUrl)\n}\n\nexport function getSearchParams(url: string) {\n\tconst searchIndex = url.indexOf('?')\n\tif (searchIndex >= 0) {\n\t\turl = url.slice(searchIndex + 1)\n\t\treturn new Map(url.split('&').map<[string, string]>(param => {\n\t\t\tconst index = param.indexOf('=')\n\t\t\tif (index === -1) return [param, 'true']\n\t\t\treturn [decodeURIComponent(param.slice(0, index)), decodeURIComponent(param.slice(index + 1))]\n\t\t}))\n\t}\n\treturn new Map<string, string>()\n}\n\nexport function setSeachParams(modifications: Record<string, string | undefined>, newPath?: string) {\n\tconst url = getCurrentUrl()\n\tconst searchParams = getSearchParams(url)\n\tObject.entries(modifications).forEach(([key, value]) => {\n\t\tif (value === undefined) searchParams.delete(key)\n\t\telse searchParams.set(key, value)\n\t})\n\tconst search = Array.from(searchParams).map(([key, value]) =>\n\t\t`${encodeURIComponent(key)}=${encodeURIComponent(value)}`)\n\troute(`${newPath ? cleanUrl(newPath) : getPath(url)}${search.length === 0 ? '' : `?${search.join('&')}`}`, true)\n}\n\nexport function stringToColor(str: string): [number, number, number] {\n\tconst h = Math.abs(hashString(str))\n\treturn [h % 256, (h >> 8) % 256, (h >> 16) % 256]\n}\n\nexport function square(a: number) {\n\treturn a * a\n}\n\nexport function clamp(a: number, b: number, c: number) {\n\treturn Math.max(a, Math.min(b, c))\n}\n\nexport function clampedLerp(a: number, b: number, c: number): number {\n\tif (c < 0) {\n\t\treturn a\n\t} else if (c > 1) {\n\t\treturn b\n\t} else {\n\t\treturn lerp(c, a, b)\n\t}\n}\n\nexport function lerp(a: number, b: number, c: number): number {\n\treturn b + a * (c - b)\n}\n\nexport function lerp2(a: number, b: number, c: number, d: number, e: number, f: number): number {\n\treturn lerp(b, lerp(a, c, d), lerp(a, e, f))\n}\n\nexport function lerp3(a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) {\n\treturn lerp(c, lerp2(a, b, d, e, f, g), lerp2(a, b, h, i, j, k))\n}\n\nexport function smoothstep(x: number): number {\n\treturn x * x * x * (x * (x * 6 - 15) + 10)\n}\n\nexport function message(e: unknown): string {\n\tif (e instanceof Error) return e.message\n\treturn `${e}`\n}\n\nexport const deepClone = rfdc()\n\n/**\n * MIT License\n * \n * Copyright (c) 2017 Evgeny Poberezkin\n * \n * https://github.com/epoberezkin/fast-deep-equal/blob/master/LICENSE\n */\nexport function deepEqual(a: any, b: any) {\n\tif (a === b) return true\n\n\tif (a && b && typeof a == 'object' && typeof b == 'object') {\n\t\tif (a.constructor !== b.constructor) return false\n\t\tlet length, i\n\t\tif (Array.isArray(a)) {\n\t\t\tlength = a.length\n\t\t\tif (length != b.length) return false\n\t\t\tfor (i = 0; i < length; i++) {\n\t\t\t\tif (!deepEqual(a[i], b[i])) return false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tif (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf()\n\t\tif (a.toString !== Object.prototype.toString) return a.toString() === b.toString()\n\t\tconst keys = Object.keys(a)\n\t\tlength = keys.length\n\t\tif (length !== Object.keys(b).length) return false\n\t\tfor (i = length; i-- !== 0;)\n\t\t\tif (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false\n\t\tfor (i = length; i-- !== 0;) {\n\t\t\tconst key = keys[i]\n\t\t\tif (!deepEqual(a[key], b[key])) return false\n\t\t}\n\t\treturn true\n\t}\n\treturn a !== a && b !== b\n}\n\nexport class BiMap<A, B> {\n\tprivate readonly forward: Map<A, B>\n\tprivate readonly backward: Map<B, A>\n\n\tconstructor() {\n\t\tthis.forward = new Map()\n\t\tthis.backward = new Map()\n\t}\n\n\tpublic set(a: A, b: B) {\n\t\tthis.forward.set(a, b)\n\t\tthis.backward.set(b, a)\n\t}\n\n\tpublic getA(key: B) {\n\t\treturn this.backward.get(key)\n\t}\n\n\tpublic getB(key: A) {\n\t\treturn this.forward.get(key)\n\t}\n\n\tpublic getOrPut(key: A, defaultValue: B) {\n\t\tconst b = this.forward.get(key)\n\t\tif (b === undefined) {\n\t\t\tthis.set(key, defaultValue)\n\t\t\treturn defaultValue\n\t\t}\n\t\treturn b\n\t}\n}\n","import { useEffect, useRef } from 'preact/hooks'\nimport { Octicon } from '.'\nimport { hexId } from '../Utils'\n\ntype BtnInputProps = {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\tlarge?: boolean,\n\tlarger?: boolean,\n\tdoSelect?: number,\n\tvalue?: string,\n\tplaceholder?: string,\n\tdataList?: string[],\n\tonChange?: (value: string) => unknown,\n}\nexport function BtnInput({ icon, label, large, larger, doSelect, value, placeholder, dataList, onChange }: BtnInputProps) {\n\tconst onInput = onChange === undefined ? () => {} : (e: any) => {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tonChange?.(value)\n\t}\n\n\tconst ref = useRef<HTMLInputElement>(null)\n\tuseEffect(() => {\n\t\tif (doSelect && ref.current) {\n\t\t\tref.current.select()\n\t\t}\n\t}, [doSelect])\n\n\tconst dataListId = dataList && hexId()\n\n\treturn <div class={`btn btn-input ${large ? 'large-input' : ''} ${larger ? 'larger-input' : ''}`} onClick={e => e.stopPropagation()}>\n\t\t{icon && Octicon[icon]}\n\t\t{label && <span>{label}</span>}\n\t\t<input ref={ref} type=\"text\" value={value} onChange={onInput} placeholder={placeholder} list={dataListId} />\n\t\t{dataList && <datalist id={dataListId}>\n\t\t\t{dataList.map(e => <option value={e} />)}\n\t\t</datalist>}\n\t</div>\n}\n","import { useRef, useState } from 'preact/hooks'\n\ninterface ActiveTimeoutOptions {\n\tcooldown?: number,\n\tinvert?: boolean,\n\tinitial?: boolean,\n}\nexport function useActiveTimeout({ cooldown, invert, initial }: ActiveTimeoutOptions = {}): [boolean | undefined, () => unknown] {\n\tconst [active, setActive] = useState(initial)\n\tconst timeout = useRef<number | undefined>(undefined)\n\n\tconst trigger = () => {\n\t\tsetActive(invert ? false : true)\n\t\tif (timeout.current !== undefined) clearTimeout(timeout.current)\n\t\ttimeout.current = setTimeout(() => {\n\t\t\tsetActive(invert ? true : false)\n\t\t}, cooldown ?? 2000) as any\n\t}\n\n\treturn [active, trigger]\n}\n","import type { Inputs } from 'preact/hooks'\nimport { useEffect, useRef } from 'preact/hooks'\n\ntype Vec2 = [number, number]\n\nexport function useCanvas({ size, draw, onDrag, onHover, onLeave }: {\n\tsize: () => Vec2,\n\tdraw: (img: ImageData) => Promise<unknown>,\n\tonDrag?: (dx: number, dy: number) => Promise<unknown>,\n\tonHover?: (x: number, y: number) => unknown,\n\tonLeave?: () => unknown,\n}, inputs?: Inputs) {\n\tconst canvas = useRef<HTMLCanvasElement>(null)\n\n\tconst dragStart = useRef<Vec2 | undefined>()\n\tconst dragRequest = useRef<number>()\n\tconst dragPending = useRef<Vec2>([0, 0])\n\tconst dragBusy = useRef(false)\n\n\tuseEffect(() => {\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (dragStart.current === undefined) {\n\t\t\t\tconst x = e.offsetX / canvas.current.clientWidth\n\t\t\t\tconst y = e.offsetY / canvas.current.clientHeight\n\t\t\t\tonHover?.(x, y)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!onDrag) return\n\t\t\tconst dx = e.offsetX - dragStart.current[0]\n\t\t\tconst dy = e.offsetY - dragStart.current[1]\n\t\t\tif (!(dx === 0 && dy === 0)) {\n\t\t\t\tdragPending.current = [dragPending.current[0] + dx, dragPending.current[1] + dy]\n\t\t\t\tif (!dragBusy.current) {\n\t\t\t\t\tcancelAnimationFrame(dragRequest.current)\n\t\t\t\t\tdragRequest.current = requestAnimationFrame(async () => {\n\t\t\t\t\t\tdragBusy.current = true\n\t\t\t\t\t\tconst dx = dragPending.current[0] / canvas.current.clientWidth\n\t\t\t\t\t\tconst dy = dragPending.current[1] / canvas.current.clientHeight\n\t\t\t\t\t\tdragPending.current = [0, 0]\n\t\t\t\t\t\tawait onDrag?.(dx, dy)\n\t\t\t\t\t\tdragBusy.current = false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tdragStart.current = [e.offsetX, e.offsetY]\n\t\t}\n\t\tconst onMouseUp = () => {\n\t\t\tdragStart.current = undefined\n\t\t}\n\t\tconst onMouseLeave = () => {\n\t\t\tonLeave?.()\n\t\t}\n\n\t\tcanvas.current.addEventListener('mousedown', onMouseDown)\n\t\tcanvas.current.addEventListener('mousemove', onMouseMove)\n\t\tcanvas.current.addEventListener('mouseleave', onMouseLeave)\n\t\tdocument.body.addEventListener('mouseup', onMouseUp)\n\n\t\treturn () => {\n\t\t\tcanvas.current?.removeEventListener('mousedown', onMouseDown)\n\t\t\tcanvas.current?.removeEventListener('mousemove', onMouseMove)\n\t\t\tcanvas.current?.removeEventListener('mouseleave', onMouseLeave)\n\t\t\tdocument.body.removeEventListener('mouseup', onMouseUp)\n\t\t}\n\t}, [...inputs ?? [], canvas.current])\n\n\tconst redraw = useRef<() => Promise<unknown>>()\n\tconst redrawCount = useRef(0)\n\tredraw.current = async () => {\n\t\tconst ctx = canvas.current.getContext('2d')!\n\t\tconst s = size()\n\t\tcanvas.current.width = s[0]\n\t\tcanvas.current.height = s[1]\n\t\tconst img = ctx.getImageData(0, 0, s[0], s[1])\n\t\tconst ownCount = redrawCount.current += 1\n\t\ttry {\n\t\t\tawait draw(img)\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t\tif (ownCount === redrawCount.current) {\n\t\t\tctx.putImageData(img, 0, 0)\n\t\t}\n\t}\n\n\treturn {\n\t\tcanvas,\n\t\tredraw: redraw.current,\n\t}\n}\n","import { useEffect, useState } from 'preact/hooks'\n\nexport function useFocus(): [boolean, () => unknown] {\n\tconst [active, setActive] = useState(false)\n\n\tconst hider = () => {\n\t\tsetActive(false)\n\t}\n\n\tuseEffect(() => {\n\t\tif (active) {\n\t\t\tdocument.body.addEventListener('click', hider)\n\t\t\tdocument.body.addEventListener('contextmenu', hider)\n\t\t}\n\t\treturn () => {\n\t\t\tdocument.body.removeEventListener('click', hider)\n\t\t\tdocument.body.removeEventListener('contextmenu', hider)\n\t\t}\n\t}, [active])\n\n\treturn [active, () => setActive(true)]\n}\n","import { useEffect, useState } from 'preact/hooks'\n\nexport function useMediaQuery(query: string): boolean {\n\tconst [prefers, setPrefers] = useState(matchMedia(query).matches)\n\n\tconst onChange = (e: MediaQueryListEvent) => {\n\t\tsetPrefers(e.matches)\n\t}\n\n\tuseEffect(() => {\n\t\tconst mediaQuery = matchMedia(query)\n\t\tmediaQuery.addEventListener('change', onChange)\n\t\treturn () => {\n\t\t\tmediaQuery.removeEventListener('change', onChange)\n\t\t}\n\t}, [query])\n\n\treturn prefers\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useEffect } from 'preact/hooks'\n\nexport function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown) {\n\tconst listener = {\n\t\tinvalidated() {\n\t\t\tif (model) {\n\t\t\t\tinvalidated(model)\n\t\t\t}\n\t\t},\n\t}\n\n\tuseEffect(() => {\n\t\tmodel?.addListener(listener)\n\t\treturn () => {\n\t\t\tmodel?.removeListener(listener)\n\t\t}\n\t}, [model])\n}\n","import type { ComponentChildren } from 'preact'\nimport type { Octicon } from '.'\nimport { Btn } from '.'\nimport { useFocus } from '../hooks'\n\ninterface BtnMenuProps extends JSX.HTMLAttributes<HTMLDivElement> {\n\ticon?: keyof typeof Octicon,\n\tlabel?: string,\n\trelative?: boolean,\n\ttooltip?: string,\n\ttooltipLoc?: 'se' | 'sw' | 'nw',\n\tchildren: ComponentChildren,\n}\nexport function BtnMenu(props: BtnMenuProps) {\n\tconst { icon, label, relative, tooltip, tooltipLoc, children } = props\n\tconst [active, setActive] = useFocus()\n\n\treturn <div class={`btn-menu${relative === false ? ' no-relative' : ''}`} {...props}>\n\t\t<Btn {...{icon, label, tooltip, tooltipLoc}} onClick={setActive} />\n\t\t{active && <div class=\"btn-group\">\n\t\t\t{children}\n\t\t</div>}\n\t</div>\n}\n","export const Octicon = {\n\talert: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z\"></path></svg>,\n\tarchive: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.75 2.5a.25.25 0 00-.25.25v1.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-1.5a.25.25 0 00-.25-.25H1.75zM0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v1.5A1.75 1.75 0 0114.25 6H1.75A1.75 1.75 0 010 4.25v-1.5zM1.75 7a.75.75 0 01.75.75v5.5c0 .138.112.25.25.25h10.5a.25.25 0 00.25-.25v-5.5a.75.75 0 111.5 0v5.5A1.75 1.75 0 0113.25 15H2.75A1.75 1.75 0 011 13.25v-5.5A.75.75 0 011.75 7zm4.5 1a.75.75 0 000 1.5h3.5a.75.75 0 100-1.5h-3.5z\"></path></svg>,\n\tarrow_left: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z\"></path></svg>,\n\tarrow_right: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z\"></path></svg>,\n\tcheck: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z\"></path></svg>,\n\tchevron_down: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M12.78 6.22a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06 0L3.22 7.28a.75.75 0 011.06-1.06L8 9.94l3.72-3.72a.75.75 0 011.06 0z\"></path></svg>,\n\tchevron_right: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z\"></path></svg>,\n\tchevron_up: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M3.22 9.78a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 0l4.25 4.25a.75.75 0 01-1.06 1.06L8 6.06 4.28 9.78a.75.75 0 01-1.06 0z\"></path></svg>,\n\tclippy: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z\"></path></svg>,\n\tcode: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z\"></path></svg>,\n\tdash: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M2 8a.75.75 0 01.75-.75h10.5a.75.75 0 010 1.5H2.75A.75.75 0 012 8z\"></path></svg>,\n\tdevice_desktop: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z\"></path></svg>,\n\tdot_fill: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 4a4 4 0 100 8 4 4 0 000-8z\"></path></svg>,\n\tdownload: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M7.47 10.78a.75.75 0 001.06 0l3.75-3.75a.75.75 0 00-1.06-1.06L8.75 8.44V1.75a.75.75 0 00-1.5 0v6.69L4.78 5.97a.75.75 0 00-1.06 1.06l3.75 3.75zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z\"></path></svg>,\n\tduplicate: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path d=\"M10.5 3a.75.75 0 01.75.75v1h1a.75.75 0 010 1.5h-1v1a.75.75 0 01-1.5 0v-1h-1a.75.75 0 010-1.5h1v-1A.75.75 0 0110.5 3z\"></path><path fill-rule=\"evenodd\" d=\"M6.75 0A1.75 1.75 0 005 1.75v7.5c0 .966.784 1.75 1.75 1.75h7.5A1.75 1.75 0 0016 9.25v-7.5A1.75 1.75 0 0014.25 0h-7.5zM6.5 1.75a.25.25 0 01.25-.25h7.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5z\"></path><path d=\"M1.75 5A1.75 1.75 0 000 6.75v7.5C0 15.216.784 16 1.75 16h7.5A1.75 1.75 0 0011 14.25v-1.5a.75.75 0 00-1.5 0v1.5a.25.25 0 01-.25.25h-7.5a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25h1.5a.75.75 0 000-1.5h-1.5z\"></path></svg>,\n\teye: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z\"></path></svg>,\n\teye_closed: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M.143 2.31a.75.75 0 011.047-.167l14.5 10.5a.75.75 0 11-.88 1.214l-2.248-1.628C11.346 13.19 9.792 14 8 14c-1.981 0-3.67-.992-4.933-2.078C1.797 10.832.88 9.577.43 8.9a1.618 1.618 0 010-1.797c.353-.533.995-1.42 1.868-2.305L.31 3.357A.75.75 0 01.143 2.31zm3.386 3.378a14.21 14.21 0 00-1.85 2.244.12.12 0 00-.022.068c0 .021.006.045.022.068.412.621 1.242 1.75 2.366 2.717C5.175 11.758 6.527 12.5 8 12.5c1.195 0 2.31-.488 3.29-1.191L9.063 9.695A2 2 0 016.058 7.52l-2.53-1.832zM8 3.5c-.516 0-1.017.09-1.499.251a.75.75 0 11-.473-1.423A6.23 6.23 0 018 2c1.981 0 3.67.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.619 1.619 0 010 1.798c-.11.166-.248.365-.41.587a.75.75 0 11-1.21-.887c.148-.201.272-.382.371-.53a.119.119 0 000-.137c-.412-.621-1.242-1.75-2.366-2.717C10.825 4.242 9.473 3.5 8 3.5z\"></path></svg>,\n\tfile: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M3.75 1.5a.25.25 0 00-.25.25v11.5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25V6H9.75A1.75 1.75 0 018 4.25V1.5H3.75zm5.75.56v2.19c0 .138.112.25.25.25h2.19L9.5 2.06zM2 1.75C2 .784 2.784 0 3.75 0h5.086c.464 0 .909.184 1.237.513l3.414 3.414c.329.328.513.773.513 1.237v8.086A1.75 1.75 0 0112.25 15h-8.5A1.75 1.75 0 012 13.25V1.75z\"></path></svg>,\n\tfile_directory: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.75 1A1.75 1.75 0 000 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0016 13.25v-8.5A1.75 1.75 0 0014.25 3h-6.5a.25.25 0 01-.2-.1l-.9-1.2c-.33-.44-.85-.7-1.4-.7h-3.5z\"></path></svg>,\n\tgear: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z\"></path></svg>,\n\tglobe: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.543 7.25h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.506 6.506 0 00-4.666 5.5zm2.733 1.5H1.543a6.506 6.506 0 004.666 5.5 11.13 11.13 0 01-.352-.552c-.715-1.192-1.437-2.874-1.581-4.948zm1.504 0h4.44a9.637 9.637 0 01-1.363 4.177c-.306.51-.612.919-.857 1.215a9.978 9.978 0 01-.857-1.215A9.637 9.637 0 015.78 8.75zm4.44-1.5H5.78a9.637 9.637 0 011.363-4.177c.306-.51.612-.919.857-1.215.245.296.55.705.857 1.215A9.638 9.638 0 0110.22 7.25zm1.504 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.506 6.506 0 004.666-5.5h-2.733zm2.733-1.5h-2.733c-.144-2.074-.866-3.756-1.58-4.948a11.738 11.738 0 00-.353-.552 6.506 6.506 0 014.666 5.5zM8 0a8 8 0 100 16A8 8 0 008 0z\"></path></svg>,\n\thistory: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z\"></path></svg>,\n\tinfo: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z\"></path></svg>,\n\tissue_opened: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z\"></path></svg>,\n\tkebab_horizontal: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path d=\"M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z\"></path></svg>,\n\tlink: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z\"></path></svg>,\n\tlink_external: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M10.604 1h4.146a.25.25 0 01.25.25v4.146a.25.25 0 01-.427.177L13.03 4.03 9.28 7.78a.75.75 0 01-1.06-1.06l3.75-3.75-1.543-1.543A.25.25 0 0110.604 1zM3.75 2A1.75 1.75 0 002 3.75v8.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 12.25v-3.5a.75.75 0 00-1.5 0v3.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-8.5a.25.25 0 01.25-.25h3.5a.75.75 0 000-1.5h-3.5z\"></path></svg>,\n\tmark_github: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z\"></path></svg>,\n\tmoon: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z\"></path></svg>,\n\tplay: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z\"></path></svg>,\n\tplus: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 2a.75.75 0 01.75.75v4.5h4.5a.75.75 0 010 1.5h-4.5v4.5a.75.75 0 01-1.5 0v-4.5h-4.5a.75.75 0 010-1.5h4.5v-4.5A.75.75 0 018 2z\"></path></svg>,\n\tplus_circle: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zm.75 4.75a.75.75 0 00-1.5 0v2.5h-2.5a.75.75 0 000 1.5h2.5v2.5a.75.75 0 001.5 0v-2.5h2.5a.75.75 0 000-1.5h-2.5v-2.5z\"></path></svg>,\n\trepo: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z\"></path></svg>,\n\tsearch: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z\"></path></svg>,\n\tsort_asc: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M0 4.25a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75zm12.927-9.677a.25.25 0 00-.354 0l-3 3A.25.25 0 009.75 6H12v6.75a.75.75 0 001.5 0V6h2.25a.25.25 0 00.177-.427l-3-3z\"></path></svg>,\n\tsort_desc: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M0 4.25a.75.75 0 01.75-.75h7.5a.75.75 0 010 1.5H.75A.75.75 0 010 4.25zm0 4a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5H.75A.75.75 0 010 8.25zm0 4a.75.75 0 01.75-.75h2.5a.75.75 0 010 1.5H.75a.75.75 0 01-.75-.75z\"></path><path d=\"M13.5 10h2.25a.25.25 0 01.177.427l-3 3a.25.25 0 01-.354 0l-3-3A.25.25 0 019.75 10H12V3.75a.75.75 0 011.5 0V10z\"></path></svg>,\n\tsquare: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M4 5.75C4 4.784 4.784 4 5.75 4h4.5c.966 0 1.75.784 1.75 1.75v4.5A1.75 1.75 0 0110.25 12h-4.5A1.75 1.75 0 014 10.25v-4.5zm1.75-.25a.25.25 0 00-.25.25v4.5c0 .138.112.25.25.25h4.5a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-4.5z\"></path></svg>,\n\tsquare_fill: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M5.75 4A1.75 1.75 0 004 5.75v4.5c0 .966.784 1.75 1.75 1.75h4.5A1.75 1.75 0 0012 10.25v-4.5A1.75 1.75 0 0010.25 4h-4.5z\"></path></svg>,\n\tstack: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M7.122.392a1.75 1.75 0 011.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 01-1.756 0L2.119 5.456a1.25 1.25 0 010-2.162L7.122.392zM8.125 1.69a.25.25 0 00-.25 0l-4.63 2.685 4.63 2.685a.25.25 0 00.25 0l4.63-2.685-4.63-2.685zM1.601 7.789a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0L1.874 8.814A.75.75 0 011.6 7.789zm0 3.5a.75.75 0 011.025-.273l5.249 3.044a.25.25 0 00.25 0l5.249-3.044a.75.75 0 01.752 1.298l-5.248 3.044a1.75 1.75 0 01-1.756 0l-5.248-3.044a.75.75 0 01-.273-1.025z\"></path></svg>,\n\tsun: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z\"></path></svg>,\n\tsync: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z\"></path></svg>,\n\ttag: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M2.5 7.775V2.75a.25.25 0 01.25-.25h5.025a.25.25 0 01.177.073l6.25 6.25a.25.25 0 010 .354l-5.025 5.025a.25.25 0 01-.354 0l-6.25-6.25a.25.25 0 01-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 010 2.474l-5.026 5.026a1.75 1.75 0 01-2.474 0l-6.25-6.25A1.75 1.75 0 011 7.775zM6 5a1 1 0 100 2 1 1 0 000-2z\"></path></svg>,\n\tterminal: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M0 2.75C0 1.784.784 1 1.75 1h12.5c.966 0 1.75.784 1.75 1.75v10.5A1.75 1.75 0 0114.25 15H1.75A1.75 1.75 0 010 13.25V2.75zm1.75-.25a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25V2.75a.25.25 0 00-.25-.25H1.75zM7.25 8a.75.75 0 01-.22.53l-2.25 2.25a.75.75 0 11-1.06-1.06L5.44 8 3.72 6.28a.75.75 0 111.06-1.06l2.25 2.25c.141.14.22.331.22.53zm1.5 1.5a.75.75 0 000 1.5h3a.75.75 0 000-1.5h-3z\"></path></svg>,\n\tthree_bars: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z\"></path></svg>,\n\ttrashcan: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z\"></path></svg>,\n\tunfold: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path d=\"M8.177.677l2.896 2.896a.25.25 0 01-.177.427H8.75v1.25a.75.75 0 01-1.5 0V4H5.104a.25.25 0 01-.177-.427L7.823.677a.25.25 0 01.354 0zM7.25 10.75a.75.75 0 011.5 0V12h2.146a.25.25 0 01.177.427l-2.896 2.896a.25.25 0 01-.354 0l-2.896-2.896A.25.25 0 015.104 12H7.25v-1.25zm-5-2a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM6 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 016 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5zM12 8a.75.75 0 01-.75.75h-.5a.75.75 0 010-1.5h.5A.75.75 0 0112 8zm2.25.75a.75.75 0 000-1.5h-.5a.75.75 0 000 1.5h.5z\"></path></svg>,\n\tupload: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M8.53 1.22a.75.75 0 00-1.06 0L3.72 4.97a.75.75 0 001.06 1.06l2.47-2.47v6.69a.75.75 0 001.5 0V3.56l2.47 2.47a.75.75 0 101.06-1.06L8.53 1.22zM3.75 13a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5z\"></path></svg>,\n\tx: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z\"></path></svg>,\n\tx_circle: <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"16\" height=\"16\"><path fill-rule=\"evenodd\" d=\"M3.404 12.596a6.5 6.5 0 119.192-9.192 6.5 6.5 0 01-9.192 9.192zM2.344 2.343a8 8 0 1011.313 11.314A8 8 0 002.343 2.343zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z\"></path></svg>,\n}\n","import { useEffect, useMemo, useState } from 'preact/hooks'\nimport { mapStackTrace } from 'sourcemapped-stacktrace'\nimport { Octicon } from './Octicon'\n\ntype ErrorPanelProps = {\n\terror: string | Error,\n\tonDismiss?: () => unknown,\n}\nexport function ErrorPanel({ error, onDismiss }: ErrorPanelProps) {\n\tconst [stackVisible, setStackVisible] = useState(false)\n\tconst [stack, setStack] = useState<string | undefined>(undefined)\n\n\tuseEffect(() => {\n\t\tif (error instanceof Error) {\n\t\t\tconst stack = error.stack!.split('\\n').map(line => {\n\t\t\t\treturn line.replace(/^(\\s+)at (?:async )?(https?:.*)/, '$1at ($2)')\n\t\t\t})\n\t\t\tsetStack(stack.join('\\n'))\n\t\t\tmapStackTrace(stack.join('\\n'), (mapped) => {\n\t\t\t\tconst mappedStack = mapped.map(line => {\n\t\t\t\t\treturn line.replace(/..\\/..\\/src\\//, 'src/')\n\t\t\t\t}).join('\\n')\n\t\t\t\tsetStack(mappedStack)\n\t\t\t})\n\t\t}\n\t}, [error])\n\n\tconst url = useMemo(() => {\n\t\tlet url ='https://github.com/misode/misode.github.io/issues/new'\n\t\tif (error instanceof Error) {\n\t\t\turl += `?title=${encodeURIComponent(`${error.name}: ${error.message}`)}`\n\t\t\tif (stack) {\n\t\t\t\turl += `&body=${encodeURIComponent(`\\`\\`\\`\\n${error.name}: ${error.message}\\n${stack}\\n\\`\\`\\`\\n`)}`\n\t\t\t}\n\t\t} else {\n\t\t\turl += `?title=${encodeURIComponent(error.toString())}`\n\t\t}\n\t\treturn url\n\t}, [error, stack])\n\n\treturn <div class=\"error\">\n\t\t{onDismiss && <div class=\"error-dismiss\" onClick={onDismiss}>{Octicon.x}</div>}\n\t\t<h3>\n\t\t\t{error instanceof Error ? error.message : error}\n\t\t\t{stack && <span onClick={() => setStackVisible(!stackVisible)}>\n\t\t\t\t{Octicon.info}\n\t\t\t</span>}\n\t\t</h3>\n\t\t{stack && stackVisible && <pre>{stack}</pre>}\n\t\t<p>If you think this is a bug, you can report it <a href={url} target=\"_blank\">on GitHub</a></p>\n\t</div>\n}\n","import { hexId } from '../../Utils'\n\ninterface Props {\n\tlabel: string,\n\tvalue: boolean,\n\tonChange: (value: boolean) => unknown,\n}\nexport function Checkbox({ label, value, onChange }: Props) {\n\tconst id = hexId()\n\treturn <label class=\"checkbox\">\n\t\t<input id={id} type=\"checkbox\" checked={value} onClick={() => onChange(!value)} />\n\t\t{label}\n\t</label>\n}\n","import type { JSXInternal } from 'preact/src/jsx'\n\ntype InputProps = JSXInternal.HTMLAttributes<HTMLInputElement>\n\ntype BaseInputProps<T> = Omit<InputProps, 'onChange' | 'type'> & {\n\tonChange?: (value: T) => unknown,\n\tonEnter?: (value: T) => unknown,\n}\nfunction BaseInput<T>(name: string, type: string, fn: (value: string) => T) {\n\tconst component = (props: BaseInputProps<T>) => {\n\t\tconst onChange = props.onChange && ((evt: Event) => {\n\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\tprops.onChange?.(fn(value))\n\t\t})\n\t\tconst onKeyDown = props.onEnter && ((evt: KeyboardEvent) => {\n\t\t\tif (evt.key === 'Enter') {\n\t\t\t\tconst value = (evt.target as HTMLInputElement).value\n\t\t\t\tprops.onEnter?.(fn(value))\n\t\t\t}\n\t\t})\n\t\treturn <input {...props} {...{ type, onChange, onKeyDown }} />\n\t}\n\tcomponent.displayName = name\n\treturn component\n}\n\nexport const TextInput = BaseInput('TextInput', 'text', v => v)\n\nexport const NumberInput = BaseInput('NumberInput', 'number', v => Number(v))\n\nexport const RangeInput = BaseInput('RangeInput', 'range', v => Number(v))\n","import { useMemo, useState } from 'preact/hooks'\nimport { Btn, BtnInput } from '..'\n\ninterface Props {\n\tvalues?: string[],\n\tonSelect?: (value: string) => unknown,\n\tsearchPlaceholder?: string,\n\tnoResults?: string,\n}\nexport function SearchList({ values, onSelect, searchPlaceholder, noResults }: Props) {\n\tconst [search, setSearch] = useState('')\n\tconst results = useMemo(() => {\n\t\tconst terms = search.trim().split(' ')\n\t\treturn values?.filter(v => terms.every(t => v.includes(t))) ?? []\n\t}, [values, search])\n\n\treturn <>\n\t\t<BtnInput icon=\"search\" large value={search} onChange={setSearch} doSelect={1} placeholder={searchPlaceholder ?? 'Search'} />\n\t\t<div class=\"result-list\">\n\t\t\t{results.map(v => <Btn key={v} label={v} onClick={() => onSelect?.(v)} />)}\n\t\t\t{results.length === 0 && <Btn label={noResults ?? 'No results'}/>}\n\t\t</div>\n\t</>\n}\n","import { isObject } from '../Utils'\n\nconst repo = 'https://raw.githubusercontent.com/misode/technical-changes/main'\n\nexport type Change = {\n\tgroup: ChangelogVersion,\n\tversion: ChangelogVersion,\n\torder: number,\n\ttags: string[],\n\tcontent: string,\n}\n\nexport type ChangelogVersion = {\n\tid: string,\n\tarticle: string | null,\n}\n\nlet Changelogs: Change[] | Promise<Change[]> | null = null\n\nexport async function getChangelogs() {\n\tif (!Changelogs) {\n\t\tconst index = await (await fetch(`${repo}/index.json`)).json() as string[]\n\t\tChangelogs = (await Promise.all(\n\t\t\tindex.map((group, i) => fetchGroup(parseVersion(group), i))\n\t\t)).flat().map<Change>(change => ({\n\t\t\t...change,\n\t\t\ttags: [change.group.id, ...change.tags],\n\t\t}))\n\t}\n\treturn Changelogs\n}\n\nasync function fetchGroup(group: ChangelogVersion, groupIndex: number) {\n\tconst index = await (await fetch(`${repo}/${group.id}/index.json`)).json() as string[]\n\treturn (await Promise.all(\n\t\tindex.map((version, i) => fetchChangelog(group, parseVersion(version), groupIndex, i))\n\t)).flat()\n}\n\nasync function fetchChangelog(group: ChangelogVersion, version: ChangelogVersion, groupIndex: number, versionIndex: number) {\n\tconst text = await (await fetch(`${repo}/${group.id}/${version.id}.md`)).text()\n\treturn parseChangelog(text).map(change => ({\n\t\tversion,\n\t\tgroup,\n\t\torder: groupIndex * 1000 + versionIndex,\n\t\t...change,\n\t}))\n}\n\nfunction parseChangelog(text: string) {\n\treturn text.split('\\n\\n')\n\t\t.map(entry => {\n\t\t\tconst i = entry.indexOf('|')\n\t\t\treturn {\n\t\t\t\ttags: entry.substring(0, i).trim().split(' '),\n\t\t\t\tcontent: entry.slice(i + 1).trim()\n\t\t\t\t\t.replaceAll('->', '→')\n\t\t\t\t\t.replaceAll('\\n...\\n', '\\n\\n'),\n\t\t\t}\n\t\t})\n}\n\nfunction parseVersion(version: unknown): ChangelogVersion {\n\tif (typeof version === 'string') {\n\t\treturn {\n\t\t\tid: version,\n\t\t\tarticle: version.match(/\\d\\dw\\d\\d[a-z]/) ? 'minecraft-snapshot-' + version : version.match(/\\d+\\.\\d+(\\.\\d+)?-pre[0-9]+/) ? 'minecraft-' + version.replaceAll('.', '-').replaceAll('pre', 'pre-release-') : null,\n\t\t}\n\t} else if (isObject(version)) {\n\t\treturn version as ChangelogVersion\n\t}\n\treturn { id: 'unknown', article: null }\n}\n","import type { CollectionRegistry } from '@mcschema/core';\nimport config from '../../config.json';\nimport { message } from '../Utils';\nimport type { BlockStateRegistry, VersionId } from './Schemas';\n\n// Cleanup old caches\n['1.15', '1.16', '1.17'].forEach(v => localStorage.removeItem(`cache_${v}`));\n['mcdata_master', 'vanilla_datapack_summary'].forEach(v => localStorage.removeItem(`cached_${v}`))\ncaches.delete('misode-v1')\n\nconst CACHE_NAME = 'misode-v2'\nconst CACHE_LATEST_VERSION = 'cached_latest_version'\n\ntype Version = {\n\tid: string,\n\tref?: string,\n\tdynamic?: boolean,\n}\n\ndeclare var __LATEST_VERSION__: string\nconst latestVersion = __LATEST_VERSION__ ?? ''\nconst mcmetaUrl = 'https://raw.githubusercontent.com/misode/mcmeta'\n\ntype McmetaTypes = 'summary' | 'data' | 'assets' | 'registries'\n\nfunction mcmeta(version: { dynamic: true } | { dynamic?: false, ref?: string}, type: McmetaTypes) {\n\treturn `${mcmetaUrl}/${version.dynamic ? type : `${version.ref}-${type}`}`\n}\n\nasync function validateCache(version: Version) {\n\tif (version.dynamic) {\n\t\tif (localStorage.getItem(CACHE_LATEST_VERSION) !== latestVersion) {\n\t\t\tawait deleteMatching(url => url.startsWith(`${mcmetaUrl}/summary/`) || url.startsWith(`${mcmetaUrl}/data/`))\n\t\t\tlocalStorage.setItem(CACHE_LATEST_VERSION, latestVersion)\n\t\t}\n\t\tversion.ref = latestVersion\n\t}\n}\n\nexport async function fetchData(versionId: string, collectionTarget: CollectionRegistry, blockStateTarget: BlockStateRegistry) {\n\tconst version = config.versions.find(v => v.id === versionId) as Version | undefined\n\tif (!version) {\n\t\tconsole.error(`[fetchData] Unknown version ${version} in ${JSON.stringify(config.versions)}`)\n\t\treturn\n\t}\n\n\tawait validateCache(version)\n\n\tawait Promise.all([\n\t\tfetchRegistries(version, collectionTarget),\n\t\tfetchBlockStateMap(version, blockStateTarget),\n\t])\n}\n\nasync function fetchRegistries(version: Version, target: CollectionRegistry) {\n\tconsole.debug(`[fetchRegistries] ${version.id}`)\n\ttry {\n\t\tconst data = await getData(`${mcmeta(version, 'summary')}/registries/data.min.json`)\n\t\tfor (const id in data) {\n\t\t\ttarget.register(id, data[id].map((e: string) => 'minecraft:' + e))\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn('Error occurred while fetching registries:', message(e))\n\t}\n}\n\nasync function fetchBlockStateMap(version: Version, target: BlockStateRegistry) {\n\tconsole.debug(`[fetchBlockStateMap] ${version.id}`)\n\ttry {\n\t\tconst data = await getData(`${mcmeta(version, 'summary')}/blocks/data.min.json`)\n\t\tfor (const id in data) {\n\t\t\ttarget['minecraft:' + id] = {\n\t\t\t\tproperties: data[id][0],\n\t\t\t\tdefault: data[id][1],\n\t\t\t}\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn('Error occurred while fetching block state map:', message(e))\n\t}\n}\n\nexport async function fetchPreset(versionId: VersionId, registry: string, id: string) {\n\tconsole.debug(`[fetchPreset] ${versionId} ${registry} ${id}`)\n\tconst version = config.versions.find(v => v.id === versionId)!\n\ttry {\n\t\tconst type = ['blockstates', 'models'].includes(registry) ? 'assets' : 'data'\n\t\tconst url = `${mcmeta(version, type)}/${type}/minecraft/${registry}/${id}.json`\n\t\tconst res = await fetch(url)\n\t\treturn res.json()\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching ${registry} preset ${id}: ${message(e)}`)\n\t}\n}\n\nexport async function fetchAllPresets(versionId: VersionId, registry: string) {\n\tconsole.debug(`[fetchAllPresets] ${versionId} ${registry}`)\n\tconst version = config.versions.find(v => v.id === versionId)!\n\tawait validateCache(version)\n\ttry {\n\t\tconst entries = await getData(`${mcmeta(version, 'registries')}/${registry}/data.min.json`)\n\t\treturn new Map<string, unknown>(await Promise.all(\n\t\t\tentries.map(async (e: string) =>\n\t\t\t\t[e, await getData(`${mcmeta(version, 'data')}/data/minecraft/${registry}/${e}.json`)])\n\t\t))\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching all ${registry} presets: ${message(e)}`)\n\t}\n}\n\nexport type SoundEvents = {\n\t[key: string]: {\n\t\tsounds: (string | { name: string })[],\n\t},\n}\nexport async function fetchSounds(versionId: VersionId): Promise<SoundEvents> {\n\tconst version = config.versions.find(v => v.id === versionId)!\n\tawait validateCache(version)\n\ttry {\n\t\tconst url = `${mcmeta(version, 'summary')}/sounds/data.min.json`\n\t\treturn await getData(url)\n\t} catch (e) {\n\t\tthrow new Error(`Error occurred while fetching sounds for ${version}: ${message(e)}`)\n\t}\n}\n\nexport function getSoundUrl(versionId: VersionId, path: string) {\n\tconst version = config.versions.find(v => v.id === versionId)!\n\treturn `${mcmeta(version, 'assets')}/assets/minecraft/sounds/${path}.ogg`\n}\n\nexport type VersionMeta = {\n\tid: string,\n\tname: string,\n\trelease_target: string,\n\ttype: 'snapshot' | 'release',\n\tstable: boolean,\n\tdata_version: number,\n\tprotocol_version: number,\n\tdata_pack_version: number,\n\tresource_pack_version: number,\n\tbuild_time: string,\n\trelease_time: string,\n\tsha1: string,\n}\nexport async function fetchVersions(): Promise<VersionMeta[]> {\n\tconst version = config.versions[config.versions.length - 1]\n\tawait validateCache(version)\n\ttry {\n\t\treturn getData(`${mcmeta(version, 'summary')}/versions/data.min.json`)\n\t} catch (e) {\n\t\tthrow new Error(`Error occured while fetching versions: ${message(e)}`)\n\t}\n}\n\nasync function getData<T = any>(url: string, fn: (v: any) => T = (v: any) => v): Promise<T> {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[getData] Opened cache ${CACHE_NAME} ${url}`)\n\t\tconst cacheResponse = await cache.match(url)\n \n\t\tif (cacheResponse && cacheResponse.ok) {\n\t\t\tconsole.debug(`[getData] Retrieving cached data ${url}`)\n\t\t\treturn await cacheResponse.json()\n\t\t}\n \n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\tawait cache.put(url, new Response(JSON.stringify(responseData)))\n\t\treturn responseData\n\t} catch (e) {\n\t\tconsole.warn(`[getData] Failed to open cache ${CACHE_NAME}: ${message(e)}`)\n\n\t\tconsole.debug(`[getData] fetching data ${url}`)\n\t\tconst fetchResponse = await fetch(url)\n\t\tconst responseData = fn(await fetchResponse.json())\n\t\treturn responseData\n\t}\n}\n\nasync function deleteMatching(matches: (url: string) => boolean) {\n\ttry {\n\t\tconst cache = await caches.open(CACHE_NAME)\n\t\tconsole.debug(`[deleteMatching] Opened cache ${CACHE_NAME}`)\n\t\tconst promises: Promise<boolean>[] = []\n \n\t\tfor (const request of await cache.keys()) {\n\t\t\tif (matches(request.url)) {\n\t\t\t\tpromises.push(cache.delete(request))\n\t\t\t}\n\t\t}\n\t\tconsole.debug(`[deleteMatching] Removing ${promises.length} cache objects...`)\n\t\tawait Promise.all(promises)\n\t} catch (e) {\n\t\tconsole.warn(`[deleteMatching] Failed to open cache ${CACHE_NAME}: ${message(e)}`)\n\t}\n}\n","import type { CollectionRegistry, INode, SchemaRegistry } from '@mcschema/core'\nimport { ChoiceNode, DataModel, Reference, StringNode } from '@mcschema/core'\nimport * as java15 from '@mcschema/java-1.15'\nimport * as java16 from '@mcschema/java-1.16'\nimport * as java17 from '@mcschema/java-1.17'\nimport * as java18 from '@mcschema/java-1.18'\nimport * as java182 from '@mcschema/java-1.18.2'\nimport * as java19 from '@mcschema/java-1.19'\nimport config from '../../config.json'\nimport { message } from '../Utils'\nimport { fetchData } from './DataFetcher'\n\nexport const VersionIds = ['1.15', '1.16', '1.17', '1.18', '1.18.2', '1.19'] as const\nexport type VersionId = typeof VersionIds[number]\n\nexport type BlockStateRegistry = {\n\t[block: string]: {\n\t\tproperties?: {\n\t\t\t[key: string]: string[],\n\t\t},\n\t\tdefault?: {\n\t\t\t[key: string]: string,\n\t\t},\n\t},\n}\n\ntype VersionData = {\n\tcollections: CollectionRegistry,\n\tschemas: SchemaRegistry,\n\tblockStates: BlockStateRegistry,\n}\nconst Versions: Record<string, VersionData | Promise<VersionData>> = {}\n\ntype ModelData = {\n\tmodel: DataModel,\n\tversion: VersionId,\n}\nconst Models: Record<string, ModelData> = {}\n\nconst versionGetter: {\n\t[versionId in VersionId]: {\n\t\tgetCollections: () => CollectionRegistry,\n\t\tgetSchemas: (collections: CollectionRegistry) => SchemaRegistry,\n\t}\n} = {\n\t1.15: java15,\n\t1.16: java16,\n\t1.17: java17,\n\t1.18: java18,\n\t'1.18.2': java182,\n\t1.19: java19,\n}\n\nexport let CachedDecorator: INode<any>\nexport let CachedFeature: INode<any>\nexport let CachedCollections: CollectionRegistry\n\nasync function getVersion(id: VersionId): Promise<VersionData> {\n\tif (!Versions[id]) {\n\t\tVersions[id] = (async () => {\n\t\t\ttry {\n\t\t\t\tconst collections = versionGetter[id].getCollections()\n\t\t\t\tconst blockStates: BlockStateRegistry = {}\n\t\t\t\tawait fetchData(id, collections, blockStates)\n\t\t\t\tconst schemas = versionGetter[id].getSchemas(collections)\n\t\t\t\tVersions[id] = { collections, schemas, blockStates }\n\t\t\t\treturn Versions[id]\n\t\t\t} catch (e) {\n\t\t\t\tthrow new Error(`Cannot get version \"${id}\": ${message(e)}`)\n\t\t\t}\n\t\t})()\n\t\treturn Versions[id]\n\t}\n\treturn Versions[id]\n}\n\nexport async function getModel(version: VersionId, id: string): Promise<DataModel> {\n\tif (!Models[id] || Models[id].version !== version) {\n\t\tconst versionData = await getVersion(version)\n\t\t\n\t\tCachedDecorator = Reference(versionData.schemas, 'configured_decorator')\n\t\tCachedFeature = ChoiceNode([\n\t\t\t{\n\t\t\t\ttype: 'string',\n\t\t\t\tnode: StringNode(versionData.collections, { validator: 'resource', params: { pool: '$worldgen/configured_feature' } }),\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tnode: Reference(versionData.schemas, 'configured_feature'),\n\t\t\t},\n\t\t], { choiceContext: 'feature' })\n\n\t\tconst schemaName = config.generators.find(g => g.id === id)?.schema\n\t\tif (!schemaName) {\n\t\t\tthrow new Error(`Cannot find model ${id}`)\n\t\t}\n\t\ttry {\n\t\t\tconst schema = versionData.schemas.get(schemaName)\n\t\t\tconst model = new DataModel(schema, { wrapLists: true })\n\t\t\tif (Models[id]) {\n\t\t\t\tmodel.reset(Models[id].model.data, false)\n\t\t\t} else {\n\t\t\t\tmodel.validate(true)\n\t\t\t\tmodel.history = [JSON.stringify(model.data)]\n\t\t\t}\n\t\t\tModels[id] = { model, version }\n\t\t} catch (e) {\n\t\t\tconst err = new Error(`Cannot get generator \"${id}\" for version \"${version}\": ${message(e)}`)\n\t\t\tif (e instanceof Error) err.stack = e.stack\n\t\t\tthrow err\n\t\t}\n\t}\n\treturn Models[id].model\n}\n\nexport async function getCollections(version: VersionId): Promise<CollectionRegistry> {\n\tconst versionData = await getVersion(version)\n\tCachedCollections = versionData.collections\n\treturn versionData.collections\n}\n\nexport async function getBlockStates(version: VersionId): Promise<BlockStateRegistry> {\n\tconst versionData = await getVersion(version)\n\treturn versionData.blockStates\n}\n\nexport function checkVersion(versionId: string, minVersionId: string | undefined, maxVersionId?: string) {\n\tconst version = config.versions.findIndex(v => v.id === versionId)\n\tconst minVersion = minVersionId ? config.versions.findIndex(v => v.id === minVersionId) : 0\n\tconst maxVersion = maxVersionId ? config.versions.findIndex(v => v.id === maxVersionId) : config.versions.length - 1\n\treturn minVersion <= version && version <= maxVersion\n}\n","let scriptRel;const seen = {};export const __vitePreload = function preload(baseModule, deps) {\n // @ts-ignore\n if (!__VITE_IS_MODERN__ || !deps) {\n return baseModule();\n }\n // @ts-ignore\n if (scriptRel === undefined) {\n // @ts-ignore\n const relList = document.createElement('link').relList;\n // @ts-ignore\n scriptRel =\n relList && relList.supports && relList.supports('modulepreload')\n ? 'modulepreload'\n : 'preload';\n }\n return Promise.all(deps.map((dep) => {\n // @ts-ignore\n if (dep in seen)\n return;\n // @ts-ignore\n seen[dep] = true;\n const isCss = dep.endsWith('.css');\n const cssSelector = isCss ? '[rel=\"stylesheet\"]' : '';\n // @ts-ignore check if the file is already preloaded by SSR markup\n if (document.querySelector(`link[href=\"${dep}\"]${cssSelector}`)) {\n return;\n }\n // @ts-ignore\n const link = document.createElement('link');\n // @ts-ignore\n link.rel = isCss ? 'stylesheet' : scriptRel;\n if (!isCss) {\n link.as = 'script';\n link.crossOrigin = '';\n }\n link.href = dep;\n // @ts-ignore\n document.head.appendChild(link);\n if (isCss) {\n return new Promise((res, rej) => {\n link.addEventListener('load', res);\n link.addEventListener('error', rej);\n });\n }\n })).then(() => baseModule());\n}","import type { Project } from './contexts'\nimport { DRAFT_PROJECT } from './contexts'\nimport type { VersionId } from './services'\nimport { VersionIds } from './services'\n\nexport namespace Store {\n\texport const ID_LANGUAGE = 'language'\n\texport const ID_THEME = 'theme'\n\texport const ID_VERSION = 'schema_version'\n\texport const ID_INDENT = 'indentation'\n\texport const ID_FORMAT = 'output_format'\n\texport const ID_HIGHLIGHTING = 'output_highlighting'\n\texport const ID_SOUNDS_VERSION = 'minecraft_sounds_version'\n\texport const ID_PROJECTS = 'misode_projects'\n\n\texport function getLanguage() {\n\t\treturn localStorage.getItem(ID_LANGUAGE) ?? 'en'\n\t}\n\n\texport function getTheme() {\n\t\treturn localStorage.getItem(ID_THEME) ?? 'dark'\n\t}\n\n\texport function getVersion(): VersionId {\n\t\tconst version = localStorage.getItem(ID_VERSION)\n\t\tif (version && VersionIds.includes(version as VersionId)) {\n\t\t\treturn version as VersionId\n\t\t}\n\t\treturn '1.18.2'\n\t}\n\n\texport function getIndent() {\n\t\treturn localStorage.getItem(ID_INDENT) ?? '2_spaces'\n\t}\n\n\texport function getFormat() {\n\t\treturn localStorage.getItem(ID_FORMAT) ?? 'json'\n\t}\n\n\texport function getHighlighting() {\n\t\treturn localStorage.getItem(ID_HIGHLIGHTING) !== 'false'\n\t}\n\n\texport function getSoundsVersion() {\n\t\treturn localStorage.getItem(ID_SOUNDS_VERSION) ?? 'latest'\n\t}\n\n\texport function getProjects(): Project[] {\n\t\tconst projects = localStorage.getItem(ID_PROJECTS)\n\t\tif (projects) {\n\t\t\treturn JSON.parse(projects) as Project[]\n\t\t}\n\t\treturn [DRAFT_PROJECT]\n\t}\n\n\texport function setLanguage(language: string | undefined) {\n\t\tif (language) localStorage.setItem(ID_LANGUAGE, language)\n\t}\n\n\texport function setTheme(theme: string | undefined) {\n\t\tif (theme) localStorage.setItem(ID_THEME, theme)\n\t}\n\n\texport function setVersion(version: VersionId | undefined) {\n\t\tif (version) localStorage.setItem(ID_VERSION, version)\n\t}\n\n\texport function setIndent(indent: string | undefined) {\n\t\tif (indent) localStorage.setItem(ID_INDENT, indent)\n\t}\n\n\texport function setFormat(format: string | undefined) {\n\t\tif (format) localStorage.setItem(ID_FORMAT, format)\n\t}\n\n\texport function setHighlighting(highlighting: boolean | undefined) {\n\t\tif (highlighting !== undefined) localStorage.setItem(ID_HIGHLIGHTING, highlighting.toString())\n\t}\n\n\texport function setSoundsVersion(version: string | undefined) {\n\t\tif (version) localStorage.setItem(ID_SOUNDS_VERSION, version)\n\t}\n\n\texport function setProjects(projects: Project[] | undefined) {\n\t\tif (projects) localStorage.setItem(ID_PROJECTS, JSON.stringify(projects))\n\t}\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport English from '../../locales/en.json'\nimport { Analytics } from '../Analytics'\nimport { Store } from '../Store'\n\ninterface Locale {\n\tlang: string,\n\tlocale: (key: string, ...params: string[]) => string,\n\tchangeLanguage: (lang: string) => unknown,\n}\nconst Locale = createContext<Locale>({\n\tlang: 'none',\n\tlocale: key => key,\n\tchangeLanguage: () => {},\n})\n\nexport const Locales: {\n\t[key: string]: {\n\t\t[key: string]: string,\n\t},\n} = {\n\tfallback: English,\n}\n\nexport function localize(lang: string, key: string, ...params: string[]) {\n\tconst value: string | undefined = Locales[lang]?.[key]\n\t?? Locales.en?.[key] ?? Locales.fallback[key] ?? key\n\treturn resolveLocaleParams(value, params)\n}\n\nfunction resolveLocaleParams(value: string, params?: string[]): string {\n\treturn value.replace(/%\\d+%/g, match => {\n\t\tconst index = parseInt(match.slice(1, -1))\n\t\treturn params?.[index] !== undefined ? params[index] : match\n\t})\n}\n\nasync function loadLocale(language: string) {\n\tif (Locales[language]) return\n\tconst langConfig = config.languages.find(lang => lang.code === language)\n\tif (!langConfig) return\n\tconst data = await import(`../../locales/${language}.json`)\n\tconst schema = langConfig.schemas !== false\n\t\t&& await import(`../../../node_modules/@mcschema/locales/src/${language}.json`)\n\tLocales[language] = { ...data.default, ...schema.default }\n}\n\nexport function useLocale() {\n\treturn useContext(Locale)\n}\n\nexport function LocaleProvider({ children }: { children: ComponentChildren }) {\n\tconst [lang, setLanguage] = useState('none')\n\n\tconst locale = useCallback((key: string, ...params: string[]) => {\n\t\treturn localize(lang, key, ...params)\n\t}, [lang])\n\n\tconst changeLanguage = useCallback(async (lang: string) => {\n\t\tawait loadLocale(lang)\n\t\tAnalytics.setLanguage(lang)\n\t\tStore.setLanguage(lang)\n\t\tsetLanguage(lang)\n\t}, [])\n\n\tuseEffect(() => {\n\t\t(async () => {\n\t\t\tconst target = Store.getLanguage()\n\t\t\tawait Promise.all([\n\t\t\t\tloadLocale('en'),\n\t\t\t\t...(target !== 'en' ? [loadLocale(target)] : []),\n\t\t\t])\n\t\t\tsetLanguage(target)\n\t\t})()\n\t}, [])\n\n\tconst value: Locale = {\n\t\tlang,\n\t\tlocale: locale,\n\t\tchangeLanguage,\n\t}\n\n\treturn <Locale.Provider value={value}>\n\t\t{children}\n\t</Locale.Provider>\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { route } from 'preact-router'\nimport { useCallback, useContext, useMemo, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport type { VersionId } from '../services'\nimport { Store } from '../Store'\nimport { cleanUrl } from '../Utils'\n\nexport type Project = {\n\tname: string,\n\tnamespace: string,\n\tversion?: VersionId,\n\tfiles: ProjectFile[],\n}\nexport const DRAFT_PROJECT: Project = {\n\tname: 'Drafts',\n\tnamespace: 'draft',\n\tfiles: [],\n}\n\nexport type ProjectFile = {\n\ttype: string,\n\tid: string,\n\tdata: any,\n}\n\ninterface ProjectContext {\n\tproject: Project,\n\tfile?: ProjectFile,\n\tchangeProject: (name: string) => unknown,\n\tupdateProject: (project: Partial<Project>) => unknown,\n\tupdateFile: (type: string, id: string | undefined, file: Partial<ProjectFile>) => boolean,\n\topenFile: (type: string, id: string) => unknown,\n\tcloseFile: () => unknown,\n}\nconst Project = createContext<ProjectContext>({\n\tproject: DRAFT_PROJECT,\n\tchangeProject: () => {},\n\tupdateProject: () => {},\n\tupdateFile: () => false,\n\topenFile: () => {},\n\tcloseFile: () => {},\n})\n\nexport function useProject() {\n\treturn useContext(Project)\n}\n\nexport function ProjectProvider({ children }: { children: ComponentChildren }) {\n\tconst [projects, setProjects] = useState<Project[]>(Store.getProjects())\n\n\tconst [projectName, setProjectName] = useState<string>(DRAFT_PROJECT.name)\n\tconst project = useMemo(() => {\n\t\treturn projects.find(p => p.name === projectName) ?? DRAFT_PROJECT\n\t}, [projects, projectName])\n\n\tconst [fileId, setFileId] = useState<[string, string] | undefined>(undefined)\n\tconst file = useMemo(() => {\n\t\tif (!fileId) return undefined\n\t\treturn project.files.find(f => f.type === fileId[0] && f.id === fileId[1])\n\t}, [project, fileId])\n\n\tconst changeProjects = useCallback((projects: Project[]) => {\n\t\tStore.setProjects(projects)\n\t\tsetProjects(projects)\n\t}, [])\n\n\tconst updateProject = useCallback((edits: Partial<Project>) => {\n\t\tchangeProjects(projects.map(p => p.name === projectName ?\t{ ...p, ...edits } : p))\n\t}, [projects, projectName])\n\n\tconst updateFile = useCallback((type: string, id: string | undefined, edits: Partial<ProjectFile>) => {\n\t\tif (!edits.id) { // remove\n\t\t\tupdateProject({ files: project.files.filter(f => f.type !== type || f.id !== id) })\n\t\t} else {\n\t\t\tconst newId = edits.id.includes(':') ? edits.id : `${project.namespace}:${edits.id}`\n\t\t\tconst exists = project.files.some(f => f.type === type && f.id === newId)\n\t\t\tif (!id) { // create\n\t\t\t\tif (exists) return false\n\t\t\t\tupdateProject({ files: [...project.files, { type, id: newId, data: edits.data ?? {} } ]})\n\t\t\t\tsetFileId([type, newId])\n\t\t\t} else { // rename or update data\n\t\t\t\tif (file?.id === id && id !== newId && exists) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tupdateProject({ files: project.files.map(f => f.type === type && f.id === id ? { ...f, ...edits, id: newId } : f)})\n\t\t\t\tif (file?.id === id) setFileId([type, newId])\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}, [updateProject, project, file])\n\n\tconst openFile = useCallback((type: string, id: string) => {\n\t\tconst gen = config.generators.find(g => g.id === type || g.path === type)\n\t\tif (!gen) {\n\t\t\tthrow new Error(`Cannot find generator of type ${type}`)\n\t\t}\n\t\tsetFileId([gen.id, id])\n\t\troute(cleanUrl(gen.url))\n\t}, [])\n\n\tconst closeFile = useCallback(() => {\n\t\tsetFileId(undefined)\n\t}, [])\n\n\tconst value: ProjectContext = {\n\t\tproject,\n\t\tfile,\n\t\tchangeProject: setProjectName,\n\t\tupdateProject,\n\t\tupdateFile,\n\t\topenFile,\n\t\tcloseFile,\n\t}\n\n\treturn <Project.Provider value={value}>\n\t\t{children}\n\t</Project.Provider>\n}\n\nexport function getFilePath(file: ProjectFile) {\n\tconst [namespace, id] = file.id.includes(':') ? file.id.split(':') : ['minecraft', file.id]\n\tconst gen = config.generators.find(g => g.id === file.type)\n\tif (!gen) {\n\t\tthrow new Error(`Cannot find generator of type ${file.type}`)\n\t}\n\treturn `data/${namespace}/${gen.path ?? gen.id}/${id}`\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport { Analytics } from '../Analytics'\nimport { useMediaQuery } from '../hooks'\nimport { Store } from '../Store'\n\ninterface Theme {\n\ttheme: string,\n\tactualTheme: 'light' | 'dark',\n\tchangeTheme: (theme: string) => unknown,\n}\nconst Theme = createContext<Theme>({\n\ttheme: 'dark',\n\tactualTheme: 'dark',\n\tchangeTheme: () => {},\n})\n\nexport function useTheme() {\n\treturn useContext(Theme)\n}\n\nexport function ThemeProvider({ children }: { children: ComponentChildren }) {\n\tconst [theme, setTheme] = useState(Store.getTheme())\n\tconst prefersLight = useMediaQuery('(prefers-color-scheme: light)')\n\tconst prefersDark = useMediaQuery('(prefers-color-scheme: dark)')\n\n\tuseEffect(() => {\n\t\tdocument.documentElement.setAttribute('data-theme', theme)\n\t}, [theme])\n\n\tconst changeTheme = useCallback((theme: string) => {\n\t\tAnalytics.setTheme(theme)\n\t\tStore.setTheme(theme)\n\t\tsetTheme(theme)\n\t}, [])\n\n\tuseEffect(() => {\n\t\tAnalytics.setPrefersColorScheme(prefersLight ? 'light' : prefersDark ? 'dark' : 'none')\n\t}, [prefersLight, prefersDark])\n\n\tconst value: Theme = {\n\t\ttheme,\n\t\tactualTheme: theme === 'light' || (theme !== 'dark' && prefersLight) ? 'light' : 'dark',\n\t\tchangeTheme,\n\t}\n\n\treturn <Theme.Provider value={value}>\n\t\t{children}\n\t</Theme.Provider>\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport { useLocale } from '.'\nimport config from '../../config.json'\nimport type { VersionId } from '../services'\n\nconst VERSIONS_IN_TITLE = 3\n\ninterface Title {\n\ttitle: string,\n\tchangeTitle: (title: string, versions?: VersionId[]) => unknown,\n}\nconst Title = createContext<Title>({\n\ttitle: '',\n\tchangeTitle: () => {},\n})\n\nexport function useTitle(title?: string, versions?: VersionId[]) {\n\tconst context = useContext(Title)\n\tuseEffect(() => {\n\t\tif (title) {\n\t\t\tcontext.changeTitle(title, versions)\n\t\t}\n\t}, [title, versions])\n\treturn context\n}\n\nexport function TitleProvider({ children }: { children: ComponentChildren }) {\n\tconst { locale } = useLocale()\n\tconst [title, setTitle] = useState<string>(locale('title.home'))\n\n\tconst changeTitle = useCallback((title: string, versions?: VersionId[]) => {\n\t\tversions ??= config.versions.map(v => v.id as VersionId)\n\t\tconst titleVersions = versions.slice(versions.length - VERSIONS_IN_TITLE)\n\t\tdocument.title = `${title} Minecraft ${titleVersions.join(', ')}`\n\t\tsetTitle(title)\n\t}, [])\n\n\tconst value = {\n\t\ttitle,\n\t\tchangeTitle,\n\t}\n\n\treturn <Title.Provider value={value}>\n\t\t{children}\n\t</Title.Provider>\n}\n","import type { ComponentChildren } from 'preact'\nimport { createContext } from 'preact'\nimport { getCurrentUrl } from 'preact-router'\nimport { useCallback, useContext, useEffect, useState } from 'preact/hooks'\nimport { Analytics } from '../Analytics'\nimport type { VersionId } from '../services'\nimport { VersionIds } from '../services'\nimport { Store } from '../Store'\nimport { getSearchParams, setSeachParams } from '../Utils'\n\nconst VERSION_PARAM = 'version'\n\ninterface Version {\n\tversion: VersionId,\n\tchangeVersion: (version: VersionId) => unknown,\n}\nconst Version = createContext<Version>({\n\tversion: '1.18.2',\n\tchangeVersion: () => {},\n})\n\nexport function useVersion() {\n\treturn useContext(Version)\n}\n\nexport function VersionProvider({ children }: { children: ComponentChildren }) {\n\tconst [version, setVersion] = useState<VersionId>(Store.getVersion())\n\n\tconst searchParams = getSearchParams(getCurrentUrl())\n\tconst targetVersion = searchParams.get(VERSION_PARAM)\n\tuseEffect(() => {\n\t\tif (VersionIds.includes(targetVersion as VersionId) && version !== targetVersion) {\n\t\t\tsetVersion(targetVersion as VersionId)\n\t\t}\n\t}, [version, targetVersion])\n\n\tconst changeVersion = useCallback((version: VersionId) => {\n\t\tif (getSearchParams(getCurrentUrl()).has(VERSION_PARAM)) {\n\t\t\tsetSeachParams({ version })\n\t\t}\n\t\tAnalytics.setVersion(version)\n\t\tStore.setVersion(version)\n\t\tsetVersion(version)\n\t}, [])\n\n\tconst value: Version = {\n\t\tversion,\n\t\tchangeVersion,\n\t}\n\n\treturn <Version.Provider value={value}>\n\t\t{children}\n\t</Version.Provider>\n}\n","import { DataModel } from '@mcschema/core'\nimport type { NoiseParameters } from 'deepslate'\nimport { FixedBiome, Identifier, LegacyRandom, NormalNoise } from 'deepslate'\nimport init, { biome_parameters, climate_noise, climate_sampler, multi_noise } from 'deepslate-rs'\n// @ts-expect-error\nimport wasm from 'deepslate-rs/deepslate_rs_bg.wasm?url'\nimport type { VersionId } from '../services'\nimport { checkVersion, fetchPreset } from '../services'\nimport { BiMap, clamp, deepClone, deepEqual, square, stringToColor } from '../Utils'\n\nlet ready = false\nasync function loadWasm() {\n\tif (ready) return\n\tawait init(wasm)\n\tready = true\n\tconsole.debug(`Loaded deepslate-rs from \"${wasm}\"`)\n}\n\nconst LAYERS = {\n\ttemperature: [-1, 1],\n\thumidity: [-1, 1],\n\tcontinentalness: [-1.1, 1],\n\terosion: [-1, 1],\n\tweirdness: [-1, 1],\n\toffset: [-1, 1],\n\tfactor: [0, 12],\n\tjaggedness: [0, 1],\n}\n\ntype Triple = [number, number, number]\ntype BiomeColors = Record<string, Triple>\ntype BiomeSourceOptions = {\n\toctaves: Record<string, NoiseParameters>,\n\tbiomeColors: BiomeColors,\n\toffset: [number, number],\n\tscale: number,\n\tres: number,\n\tseed: bigint,\n\tversion: VersionId,\n\tlayers: Set<keyof typeof LAYERS | 'biomes'>,\n}\n\ninterface CachedBiomeSource {\n\tgetBiome(x: number, y: number, z: number): Identifier\n\tgetBiomes?(xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): Identifier[]\n\tgetClimate?(x: number, y: number, z: number): {[k: string]: number}\n\tgetClimates?(xFrom: number, xTo: number, xStep: number, yFrom: number, yTo: number, yStep: number, zFrom: number, zTo: number, zStep: number): {[k: string]: number}[]\n}\n\nlet cacheState: any\nlet biomeSourceCache: CachedBiomeSource\n\nexport async function biomeMap(state: any, img: ImageData, options: BiomeSourceOptions) {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst data = img.data\n\tconst ox = -Math.round(options.offset[0]) - 100 + options.res / 2\n\tconst oz = -Math.round(options.offset[1]) - 100 + options.res / 2\n\tconst row = img.width * 4 / options.res\n\tconst col = 4 / options.res\n\n\tconst xRange: Triple = [ox * options.scale, (200 + ox) * options.scale, options.res * options.scale]\n\tconst zRange: Triple = [oz * options.scale, (200 + oz) * options.scale, options.res * options.scale]\n\n\tconst biomes = !options.layers.has('biomes') ? undefined : biomeSource.getBiomes?.(...xRange, 64, 65, 1, ...zRange)\n\tconst layers = [...options.layers].filter(l => l !== 'biomes') as (keyof typeof LAYERS)[]\n\tconst noise = layers.length === 0 ? undefined : biomeSource.getClimates?.(...xRange, 64, 65, 1, ...zRange)\n\n\tfor (let x = 0; x < 200; x += options.res) {\n\t\tfor (let z = 0; z < 200; z += options.res) {\n\t\t\tconst i = z * row + x * col\n\t\t\tconst j = (x / options.res) * 200 / options.res + z / options.res\n\t\t\tconst worldX = (x + ox) * options.scale\n\t\t\tconst worldZ = (z + oz) * options.scale\n\t\t\tlet color: Triple = [50, 50, 50]\n\t\t\tif (options.layers.has('biomes')) {\n\t\t\t\tconst biome = biomes?.[j] ?? biomeSource.getBiome(worldX, 64, worldZ)\n\t\t\t\tcolor = getBiomeColor(biome.toString(), options.biomeColors)\n\t\t\t} else if (noise && layers[0]) {\n\t\t\t\tconst value = noise[j][layers[0]]\n\t\t\t\tconst [min, max] = LAYERS[layers[0]]\n\t\t\t\tconst brightness = (value - min) / (max - min) * 256\n\t\t\t\tcolor = [brightness, brightness, brightness]\n\t\t\t}\n\t\t\tdata[i] = color[0]\n\t\t\tdata[i + 1] = color[1]\n\t\t\tdata[i + 2] = color[2]\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport async function getBiome(state: any, x: number, z: number, options: BiomeSourceOptions): Promise<{[k: string]: number | string} | undefined> {\n\tconst { biomeSource } = await getCached(state, options)\n\n\tconst [xx, zz] = toWorld([x, z], options)\n\treturn {\n\t\tbiome: biomeSource.getBiome(xx, 64, zz).toString(),\n\t\t...biomeSource.getClimate?.(xx, 64, zz),\n\t}\n}\n\nasync function getCached(state: any, options: BiomeSourceOptions): Promise<{ biomeSource: CachedBiomeSource}> {\n\tconst newState = [state, options.octaves, `${options.seed}`, options.version]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\n\t\tbiomeSourceCache = await getBiomeSource(state, options)\n\t}\n\treturn {\n\t\tbiomeSource: biomeSourceCache,\n\t} \n}\n\nasync function getBiomeSource(state: any, options: BiomeSourceOptions): Promise<CachedBiomeSource> {\n\tswitch (state?.type?.replace(/^minecraft:/, '')) {\n\t\tcase 'fixed':\n\t\t\treturn new FixedBiome(Identifier.parse(state.biome as string))\n\n\t\tcase 'checkerboard':\n\t\t\tconst shift = (state.scale ?? 2) + 2\n\t\t\tconst numBiomes = state.biomes?.length ?? 0\n\t\t\treturn {\n\t\t\t\tgetBiome(x: number, _y: number, z: number) {\n\t\t\t\t\tconst i = (((x >> shift) + (z >> shift)) % numBiomes + numBiomes) % numBiomes\n\t\t\t\t\treturn Identifier.parse(state.biomes?.[i].node as string)\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase 'multi_noise':\n\t\t\tswitch(state.preset?.replace(/^minecraft:/, '')) {\n\t\t\t\tcase 'nether':\n\t\t\t\t\tstate = checkVersion(options.version, '1.18') ? NetherPreset18 : NetherPreset\n\t\t\t\t\tbreak\n\t\t\t\tcase 'overworld':\n\t\t\t\t\tstate = checkVersion(options.version, '1.18') ? await OverworldPreset18() : state\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t\tstate = DataModel.unwrapLists(state)\n\t\t\tif (checkVersion(options.version, '1.18')) {\n\t\t\t\tawait loadWasm()\n\t\t\t\tconst BiomeIds = new BiMap<string, number>()\n\t\t\t\tconst param = (p: number | number[]) => {\n\t\t\t\t\treturn typeof p === 'number' ? [p, p] : p\n\t\t\t\t}\n\t\t\t\tconst [t0, t1, h0, h1, c0, c1, e0, e1, w0, w1, d0, d1, o, b] = [[], [], [], [], [], [], [], [], [], [], [], [], [], []] as number[][]\n\t\t\t\tfor (const i of state.biomes) {\n\t\t\t\t\tconst { temperature, humidity, continentalness, erosion, weirdness, depth, offset } = i.parameters\n\t\t\t\t\tt0.push(param(temperature)[0])\n\t\t\t\t\tt1.push(param(temperature)[1])\n\t\t\t\t\th0.push(param(humidity)[0])\n\t\t\t\t\th1.push(param(humidity)[1])\n\t\t\t\t\tc0.push(param(continentalness)[0])\n\t\t\t\t\tc1.push(param(continentalness)[1])\n\t\t\t\t\te0.push(param(erosion)[0])\n\t\t\t\t\te1.push(param(erosion)[1])\n\t\t\t\t\tw0.push(param(weirdness)[0])\n\t\t\t\t\tw1.push(param(weirdness)[1])\n\t\t\t\t\td0.push(param(depth)[0])\n\t\t\t\t\td1.push(param(depth)[1])\n\t\t\t\t\to.push(offset)\n\t\t\t\t\tb.push(BiomeIds.getOrPut(i.biome, Math.floor(Math.random() * 2147483647)))\n\t\t\t\t}\n\t\t\t\tconst parameters = biome_parameters(new Float64Array(t0), new Float64Array(t1), new Float64Array(h0), new Float64Array(h1), new Float64Array(c0), new Float64Array(c1), new Float64Array(e0), new Float64Array(e1), new Float64Array(w0), new Float64Array(w1), new Float64Array(d0), new Float64Array(d1), new Float64Array(o), new Int32Array(b))\n\t\t\t\tconst sampler = climate_sampler(options.seed, options.octaves.temperature.firstOctave, new Float64Array(options.octaves.temperature.amplitudes), options.octaves.humidity.firstOctave, new Float64Array(options.octaves.humidity.amplitudes), options.octaves.continentalness.firstOctave, new Float64Array(options.octaves.continentalness.amplitudes), options.octaves.erosion.firstOctave, new Float64Array(options.octaves.erosion.amplitudes), options.octaves.weirdness.firstOctave, new Float64Array(options.octaves.weirdness.amplitudes), options.octaves.shift.firstOctave, new Float64Array(options.octaves.shift.amplitudes))\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x, y, z) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, x, x + 1, 1, y, y + 1, 1, z, z + 1, 1)\n\t\t\t\t\t\treturn Identifier.parse(BiomeIds.getA(ids[0]) ?? 'unknown')\n\t\t\t\t\t},\n\t\t\t\t\tgetBiomes(xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst ids = multi_noise(parameters, sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\treturn [...ids].map(id => Identifier.parse(BiomeIds.getA(id) ?? 'unknown'))\n\t\t\t\t\t},\n\t\t\t\t\tgetClimate(x, y, z) {\n\t\t\t\t\t\tconst climate = climate_noise(sampler, x, x + 1, 1, y, y + 1, 1, z, z + 1, 1)\n\t\t\t\t\t\tconst [t, h, c, e, w] = climate.slice(0, 5)\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttemperature: t,\n\t\t\t\t\t\t\thumidity: h,\n\t\t\t\t\t\t\tcontinentalness: c,\n\t\t\t\t\t\t\terosion: e,\n\t\t\t\t\t\t\tweirdness: w,\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tgetClimates(xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep) {\n\t\t\t\t\t\tconst climate = climate_noise(sampler, xFrom, xTo, xStep, yFrom, yTo, yStep, zFrom, zTo, zStep)\n\t\t\t\t\t\tconst result = []\n\t\t\t\t\t\tfor (let i = 0; i < climate.length; i += 7) {\n\t\t\t\t\t\t\tconst [t, h, c, e, w] = climate.slice(i, i + 5)\n\t\t\t\t\t\t\tresult.push({\n\t\t\t\t\t\t\t\ttemperature: t,\n\t\t\t\t\t\t\t\thumidity: h,\n\t\t\t\t\t\t\t\tcontinentalness: c,\n\t\t\t\t\t\t\t\terosion: e,\n\t\t\t\t\t\t\t\tweirdness: w,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst noise = ['altitude', 'temperature', 'humidity', 'weirdness']\n\t\t\t\t\t.map((id, i) => {\n\t\t\t\t\t\tconst config = state[`${id}_noise`]\n\t\t\t\t\t\tconfig.firstOctave = clamp(config.firstOctave ?? -7, -100, -1)\n\t\t\t\t\t\treturn new NormalNoise(new LegacyRandom(options.seed + BigInt(i)), config)\n\t\t\t\t\t})\n\t\t\t\tif (!Array.isArray(state.biomes) || state.biomes.length === 0) {\n\t\t\t\t\treturn new FixedBiome(Identifier.create('unknown'))\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tgetBiome(x: number, _y: number, z: number): Identifier {\n\t\t\t\t\t\tconst n = noise.map(n => n.sample(x, z, 0))\n\t\t\t\t\t\tlet minDist = Infinity\n\t\t\t\t\t\tlet minBiome = ''\n\t\t\t\t\t\tfor (const { biome, parameters: p } of state.biomes) {\n\t\t\t\t\t\t\tconst dist = square(p.altitude - n[0]) + square(p.temperature - n[1]) + square(p.humidity - n[2]) + square(p.weirdness - n[3]) + square(p.offset)\n\t\t\t\t\t\t\tif (dist < minDist) {\n\t\t\t\t\t\t\t\tminDist = dist\n\t\t\t\t\t\t\t\tminBiome = biome\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Identifier.parse(minBiome)\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t}\n\tthrow new Error('Unknown biome source')\n}\n\nfunction getBiomeColor(biome: string, biomeColors: BiomeColors): Triple {\n\tif (!biome) {\n\t\treturn [128, 128, 128]\n\t}\n\tconst color = biomeColors[biome] ?? VanillaColors[biome]\n\tif (color === undefined) {\n\t\treturn stringToColor(biome)\n\t}\n\treturn color\n}\n\nfunction toWorld([x, z]: [number, number], options: BiomeSourceOptions) {\n\tconst xx = (x - options.offset[0] - 100 + options.res / 2) * options.scale\n\tconst zz = (z - options.offset[1] - 100 + options.res / 2) * options.scale\n\treturn [xx, zz]\n}\n\nconst VanillaColors: Record<string, Triple> = {\n\t'minecraft:badlands': [217,69,21],\n\t'minecraft:badlands_plateau': [202,140,101],\n\t'minecraft:bamboo_jungle': [118,142,20],\n\t'minecraft:bamboo_jungle_hills': [59,71,10],\n\t'minecraft:basalt_deltas': [64,54,54],\n\t'minecraft:beach': [250,222,85],\n\t'minecraft:birch_forest': [48,116,68],\n\t'minecraft:birch_forest_hills': [31,95,50],\n\t'minecraft:cold_ocean': [32,32,112],\n\t'minecraft:crimson_forest': [221,8,8],\n\t'minecraft:dark_forest': [64,81,26],\n\t'minecraft:dark_forest_hills': [104,121,66],\n\t'minecraft:deep_cold_ocean': [32,32,56],\n\t'minecraft:deep_frozen_ocean': [64,64,144],\n\t'minecraft:deep_lukewarm_ocean': [0,0,64],\n\t'minecraft:deep_ocean': [0,0,48],\n\t'minecraft:deep_warm_ocean': [0,0,80],\n\t'minecraft:desert': [250,148,24],\n\t'minecraft:desert_hills': [210,95,18],\n\t'minecraft:desert_lakes': [255,188,64],\n\t'minecraft:end_barrens': [128,128,255],\n\t'minecraft:end_highlands': [128,128,255],\n\t'minecraft:end_midlands': [128,128,255],\n\t'minecraft:eroded_badlands': [255,109,61],\n\t'minecraft:flower_forest': [45,142,73],\n\t'minecraft:forest': [5,102,33],\n\t'minecraft:frozen_ocean': [112,112,214],\n\t'minecraft:frozen_river': [160,160,255],\n\t'minecraft:giant_spruce_taiga': [129,142,121],\n\t'minecraft:old_growth_spruce_taiga': [129,142,121],\n\t'minecraft:giant_spruce_taiga_hills': [109,119,102],\n\t'minecraft:giant_tree_taiga': [89,102,81],\n\t'minecraft:old_growth_pine_taiga': [89,102,81],\n\t'minecraft:giant_tree_taiga_hills': [69,79,62],\n\t'minecraft:gravelly_hills': [136,136,136],\n\t'minecraft:gravelly_mountains': [136,136,136],\n\t'minecraft:windswept_gravelly_hills': [136,136,136],\n\t'minecraft:ice_spikes': [180,220,220],\n\t'minecraft:jungle': [83,123,9],\n\t'minecraft:jungle_edge': [98,139,23],\n\t'minecraft:sparse_jungle': [98,139,23],\n\t'minecraft:jungle_hills': [44,66,5],\n\t'minecraft:lukewarm_ocean': [0,0,144],\n\t'minecraft:modified_badlands_plateau': [242,180,141],\n\t'minecraft:modified_gravelly_mountains': [120,152,120],\n\t'minecraft:modified_jungle': [123,163,49],\n\t'minecraft:modified_jungle_edge': [138,179,63],\n\t'minecraft:modified_wooded_badlands_plateau': [216,191,141],\n\t'minecraft:mountain_edge': [114,120,154],\n\t'minecraft:extreme_hills': [96,96,96],\n\t'minecraft:mountains': [96,96,96],\n\t'minecraft:windswept_hills': [96,96,96],\n\t'minecraft:mushroom_field_shore': [160,0,255],\n\t'minecraft:mushroom_fields': [255,0,255],\n\t'minecraft:nether_wastes': [191,59,59],\n\t'minecraft:ocean': [0,0,112],\n\t'minecraft:plains': [141,179,96],\n\t'minecraft:river': [0,0,255],\n\t'minecraft:savanna': [189,178,95],\n\t'minecraft:savanna_plateau': [167,157,100],\n\t'minecraft:shattered_savanna': [229,218,135],\n\t'minecraft:windswept_savanna': [229,218,135],\n\t'minecraft:shattered_savanna_plateau': [207,197,140],\n\t'minecraft:small_end_islands': [128,128,255],\n\t'minecraft:snowy_beach': [250,240,192],\n\t'minecraft:snowy_mountains': [160,160,160],\n\t'minecraft:snowy_taiga': [49,85,74],\n\t'minecraft:snowy_taiga_hills': [36,63,54],\n\t'minecraft:snowy_taiga_mountains': [89,125,114],\n\t'minecraft:snowy_tundra': [255,255,255],\n\t'minecraft:snowy_plains': [255,255,255],\n\t'minecraft:soul_sand_valley': [94,56,48],\n\t'minecraft:stone_shore': [162,162,132],\n\t'minecraft:stony_shore': [162,162,132],\n\t'minecraft:sunflower_plains': [181,219,136],\n\t'minecraft:swamp': [7,249,178],\n\t'minecraft:swamp_hills': [47,255,218],\n\t'minecraft:taiga': [11,102,89],\n\t'minecraft:taiga_hills': [22,57,51],\n\t'minecraft:taiga_mountains': [51,142,129],\n\t'minecraft:tall_birch_forest': [88,156,108],\n\t'minecraft:old_growth_birch_forest': [88,156,108],\n\t'minecraft:tall_birch_hills': [71,135,90],\n\t'minecraft:the_end': [128,128,255],\n\t'minecraft:the_void': [0,0,0],\n\t'minecraft:warm_ocean': [0,0,172],\n\t'minecraft:warped_forest': [73,144,123],\n\t'minecraft:wooded_badlands_plateau': [176,151,101],\n\t'minecraft:wooded_badlands': [176,151,101],\n\t'minecraft:wooded_hills': [34,85,28],\n\t'minecraft:wooded_mountains': [80,112,80],\n\t'minecraft:windswept_forest': [80,112,80],\n\t'minecraft:snowy_slopes': [140, 195, 222],\n\t'minecraft:lofty_peaks': [196, 168, 193],\n\t'minecraft:jagged_peaks': [196, 168, 193],\n\t'minecraft:snowcapped_peaks': [200, 198, 200],\n\t'minecraft:frozen_peaks': [200, 198, 200],\n\t'minecraft:stony_peaks': [82, 92, 103],\n\t'minecraft:grove': [150, 150, 189],\n\t'minecraft:meadow': [169, 197, 80],\n\t'minecraft:lush_caves': [112, 255, 79],\n\t'minecraft:dripstone_caves': [140, 124, 0],\n}\n\nconst NetherPreset = {type:'minecraft:multi_noise',seed:0,altitude_noise:{firstOctave:-7,amplitudes:[1,1]},temperature_noise:{firstOctave:-7,amplitudes:[1,1]},humidity_noise:{firstOctave:-7,amplitudes:[1,1]},weirdness_noise:{firstOctave:-7,amplitudes:[1,1]},biomes:[{biome:'minecraft:nether_wastes',parameters:{altitude:0,temperature:0,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{altitude:0,temperature:0,humidity:-0.5,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{altitude:0,temperature:0.4,humidity:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{altitude:0,temperature:0,humidity:0.5,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{altitude:0,temperature:-0.5,humidity:0,weirdness:0,offset:0.175}}]}\n\nconst NetherPreset18 = {type:'minecraft:multi_noise',biomes:[{biome:'minecraft:nether_wastes',parameters:{temperature:0,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:soul_sand_valley',parameters:{temperature:0,humidity:-0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:crimson_forest',parameters:{temperature:0.4,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0}},{biome:'minecraft:warped_forest',parameters:{temperature:0,humidity:0.5,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.375}},{biome:'minecraft:basalt_deltas',parameters:{temperature:-0.5,humidity:0,continentalness:0,erosion:0,depth:0,weirdness:0,offset:0.175}}]}\n\nasync function OverworldPreset18() {\n\tconst overworld = await fetchPreset('1.18', 'dimension', 'overworld')\n\treturn overworld.generator.biome_source\n}\n","import { DataModel } from '@mcschema/core'\nimport type { Random } from 'deepslate'\nimport { LegacyRandom, PerlinNoise } from 'deepslate'\nimport type { VersionId } from '../services'\nimport { checkVersion } from '../services'\nimport { clamp, isObject, stringToColor } from '../Utils'\n\ntype BlockPos = [number, number, number]\ntype Placement = [BlockPos, number]\n\ntype PlacementContext = {\n\tplacements: Placement[],\n\tfeatures: string[],\n\trandom: Random,\n\tbiomeInfoNoise: PerlinNoise,\n\tseaLevel: number,\n\tversion: VersionId,\n\tnextFloat(): number,\n\tnextInt(max: number): number,\n\tnextGaussian(): number,\n\tsampleInt(provider: any): number,\n}\n\nconst terrain = [50, 50, 51, 51, 52, 52, 53, 54, 56, 57, 57, 58, 58, 59, 60, 60, 60, 59, 59, 59, 60, 61, 61, 62, 63, 63, 64, 64, 64, 65, 65, 66, 66, 65, 65, 66, 66, 67, 67, 67, 68, 69, 71, 73, 74, 76, 79, 80, 81, 81, 82, 83, 83, 82, 82, 81, 81, 80, 80, 80, 81, 81, 82, 82] \n\nconst featureColors = [\n\t[255, 77, 54], // red\n\t[59, 118, 255], // blue\n\t[91, 207, 25], // green\n\t[217, 32, 245], // magenta\n\t[255, 209, 41], // yellow\n\t[52, 204, 209], // cyan\n]\n\nexport type DecoratorOptions = {\n\tsize: [number, number, number],\n\tseed: bigint,\n\tversion: VersionId,\n}\nexport function decorator(state: any, img: ImageData, options: DecoratorOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst ctx: PlacementContext = {\n\t\tplacements: [],\n\t\tfeatures: [],\n\t\trandom,\n\t\tbiomeInfoNoise: new PerlinNoise(random.fork(), 0, [1]),\n\t\tseaLevel: 63,\n\t\tversion: options.version,\n\t\tnextFloat: () => random.nextFloat(),\n\t\tnextInt: (max: number) => random.nextInt(max),\n\t\tnextGaussian: () => Math.sqrt(-2 * Math.log(1 - random.nextFloat())) * Math.cos(2 * Math.PI * random.nextFloat()),\n\t\tsampleInt(value) { return sampleInt(value, this) },\n\t}\n\n\tfor (let x = 0; x < options.size[0] / 16; x += 1) {\n\t\tfor (let z = 0; z < options.size[2] / 16; z += 1) {\n\t\t\tif (checkVersion(options.version, undefined, '1.17')) {\n\t\t\t\tgetPlacements([x * 16, 0, z * 16], DataModel.unwrapLists(state), ctx)\n\t\t\t} else {\n\t\t\t\tmodifyPlacement([x * 16, 0, z * 16], DataModel.unwrapLists(state.placement), ctx)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst data = img.data\n\timg.data.fill(255)\n\n\tfor (const [pos, feature] of ctx.placements) {\n\t\tif (pos[0] < 0 || pos[1] < 0 || pos[2] < 0 || pos[0] >= options.size[0] || pos[1] >= options.size[1] || pos[2] >= options.size[2]) continue\n\t\tconst i = (pos[2] * (img.width * 4)) + (pos[0] * 4)\n\t\tconst color = feature < featureColors.length ? featureColors[feature] : stringToColor(ctx.features[feature])\n\t\tdata[i] = clamp(50, 205, color[0])\n\t\tdata[i + 1] = clamp(50, 205, color[1])\n\t\tdata[i + 2] = clamp(50, 205, color[2])\n\t\tdata[i + 3] = 255\n\t}\n\n\tfor (let x = 0; x < options.size[0]; x += 1) {\n\t\tfor (let y = 0; y < options.size[2]; y += 1) {\n\t\t\tif ((Math.floor(x / 16) + Math.floor(y / 16)) % 2 === 0) continue\n\t\t\tconst i = (y * (img.width * 4)) + (x * 4)\n\t\t\tfor (let j = 0; j < 3; j += 1) {\n\t\t\t\tdata[i + j] = 0.85 * data[i + j] \n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction normalize(id: string) {\n\treturn id.startsWith('minecraft:') ? id.slice(10) : id\n}\n\nfunction decorateY(pos: BlockPos, y: number): BlockPos[] {\n\treturn [[ pos[0], y, pos[2] ]]\n}\n\nfunction sampleInt(value: any, ctx: PlacementContext): number {\n\tif (typeof value === 'number') {\n\t\treturn value\n\t} else if (value.base) {\n\t\treturn value.base ?? 1 + ctx.nextInt(1 + (value.spread ?? 0))\n\t} else {\n\t\tswitch (normalize(value.type)) {\n\t\t\tcase 'constant': return value.value\n\t\t\tcase 'uniform': return value.value.min_inclusive + ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1)\n\t\t\tcase 'biased_to_bottom': return value.value.min_inclusive + ctx.nextInt(ctx.nextInt(value.value.max_inclusive - value.value.min_inclusive + 1) + 1)\n\t\t\tcase 'clamped': return clamp(ctx.sampleInt(value.value.source), value.value.min_inclusive, value.value.max_inclusive)\n\t\t\tcase 'clamped_normal':\n\t\t\t\tconst normal = value.value.mean + ctx.nextGaussian() * value.value.deviation\n\t\t\t\treturn Math.floor(clamp(value.value.min_inclusive, value.value.max_inclusive, normal))\n\t\t\tcase 'weighted_list':\n\t\t\t\tconst totalWeight = (value.distribution as any[]).reduce<number>((sum, e) => sum + e.weight, 0)\n\t\t\t\tlet i = ctx.nextInt(totalWeight)\n\t\t\t\tfor (const e of value.distribution) {\n\t\t\t\t\ti -= e.weight\n\t\t\t\t\tif (i < 0) return ctx.sampleInt(e.data)\n\t\t\t\t}\n\t\t\t\treturn 0\n\t\t}\n\t\treturn 1\n\t}\n}\n\nfunction resolveAnchor(anchor: any, _ctx: PlacementContext): number {\n\tif (!isObject(anchor)) throw new Error('Invalid vertical anchor')\n\tif (anchor.absolute) return anchor.absolute\n\tif (anchor.above_bottom) return anchor.above_bottom\n\tif (anchor.below_top) return 256 - anchor.below_top\n\tthrow new Error('Invalid vertical anchor')\n}\n\nfunction sampleHeight(height: any, ctx: PlacementContext): number {\n\tif (!isObject(height)) throw new Error('Invalid height provider')\n\tif (typeof height.type !== 'string') {\n\t\treturn resolveAnchor(height, ctx)\n\t}\n\tswitch (normalize(height.type)) {\n\t\tcase 'constant': return resolveAnchor(height.value, ctx)\n\t\tcase 'uniform': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\treturn min + ctx.nextInt(max - min + 1)\n\t\t}\n\t\tcase 'biased_to_bottom': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\tconst n = ctx.nextInt(max - min - (height.inner ?? 1) + 1)\n\t\t\treturn min + ctx.nextInt(n + (height.inner ?? 1))\n\t\t}\n\t\tcase 'very_biased_to_bottom': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\tconst inner = height.inner ?? 1\n\t\t\tconst n1 = min + inner + ctx.nextInt(max - min - inner + 1)\n\t\t\tconst n2 = min + ctx.nextInt(n1 - min)\n\t\t\treturn min + ctx.nextInt(n2 - min + inner)\n\t\t}\n\t\tcase 'trapezoid': {\n\t\t\tconst min = resolveAnchor(height.min_inclusive, ctx)\n\t\t\tconst max = resolveAnchor(height.max_inclusive, ctx)\n\t\t\tconst plateau = height.plateau ?? 0\n\t\t\tif (plateau >= max - min) {\n\t\t\t\treturn min + ctx.nextInt(max - min + 1)\n\t\t\t}\n\t\t\tconst n1 = (max - min - plateau) / 2\n\t\t\tconst n2 = (max - min) - n1\n\t\t\treturn min + ctx.nextInt(n2 + 1) + ctx.nextInt(n1 + 1)\n\t\t}\n\t\tdefault: throw new Error(`Invalid height provider ${height.type}`)\n\t}\n}\n\n// 1.17 and before\nfunction useFeature(s: string, ctx: PlacementContext) {\n\tconst i = ctx.features.indexOf(s)\n\tif (i != -1) return i\n\tctx.features.push(s)\n\treturn ctx.features.length - 1\n}\n\nfunction getPlacements(pos: BlockPos, feature: any, ctx: PlacementContext): void {\n\tif (typeof feature === 'string') {\n\t\tctx.placements.push([pos, useFeature(feature, ctx)])\n\t\treturn\n\t}\n\tconst type = normalize(feature?.type ?? 'no_op')\n\tconst featureFn = Features[type]\n\tif (featureFn) {\n\t\tfeatureFn(feature.config, pos, ctx)\n\t} else {\n\t\tctx.placements.push([pos, useFeature(JSON.stringify(feature), ctx)])\n\t}\n}\n\nfunction getPositions(pos: BlockPos, decorator: any, ctx: PlacementContext): BlockPos[] {\n\tconst type = normalize(decorator?.type ?? 'nope')\n\tconst decoratorFn = Decorators[type]\n\tif (!decoratorFn) {\n\t\treturn [pos]\n\t}\n\treturn decoratorFn(decorator?.config, pos, ctx)\n}\n\nconst Features: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => void,\n} = {\n\tdecorated: (config, pos, ctx) => {\n\t\tconst positions = getPositions(pos, config?.decorator, ctx)\n\t\tpositions.forEach(p => getPlacements(p, config?.feature, ctx))\n\t},\n\trandom_boolean_selector: (config, pos, ctx) => {\n\t\tconst feature = ctx.nextFloat() < 0.5 ? config?.feature_true : config?.feature_false\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n\trandom_selector: (config, pos, ctx) => {\n\t\tfor (const f of config?.features ?? []) {\n\t\t\tif (ctx.nextFloat() < (f?.chance ?? 0)) {\n\t\t\t\tgetPlacements(pos, f.feature, ctx)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tgetPlacements(pos, config?.default, ctx)\n\t},\n\tsimple_random_selector: (config, pos, ctx) => {\n\t\tconst feature = config?.features?.[ctx.nextInt(config?.features?.length ?? 0)]\n\t\tgetPlacements(pos, feature, ctx)\n\t},\n}\n\nconst Decorators: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tchance: (config, pos, ctx) => {\n\t\treturn ctx.nextFloat() < 1 / (config?.chance ?? 1) ? [pos] : []\n\t},\n\tcount: (config, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t},\n\tcount_extra: (config, pos, ctx) => {\n\t\tlet count = config?.count ?? 1\n\t\tif (ctx.nextFloat() < config.extra_chance ?? 0){\n\t\t\tcount += config.extra_count ?? 0\n\t\t}\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_multilayer: (config, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(config?.count ?? 1)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + ctx.nextInt(16),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + ctx.nextInt(16),\n\t\t\t])\n\t},\n\tcount_noise: (config, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < config.noise_level ? config.below_noise : config.above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\tcount_noise_biased: (config, pos, ctx) => {\n\t\tconst factor = Math.max(1, config.noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (config.noise_offset ?? 0)) * config.noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tdark_oak_tree: (_config, pos, ctx) => {\n\t\treturn [...new Array(16)].map((_, i) => {\n\t\t\tconst x = Math.floor(i / 4) * 4 + 1 + ctx.nextInt(3) + pos[0]\n\t\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, x)])\n\t\t\tconst z = Math.floor(i % 4) * 4 + 1 + ctx.nextInt(3) + pos[2]\n\t\t\treturn [x, y, z]\n\t\t})\n\t},\n\tdecorated: (config, pos, ctx) => {\n\t\treturn getPositions(pos, config?.outer, ctx).flatMap(p => {\n\t\t\treturn getPositions(p, config?.inner, ctx)\n\t\t})\n\t},\n\tdepth_average: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(config?.spread ?? 0) + ctx.nextInt(config?.spread ?? 0) - (config.spread ?? 0) + (config?.baseline ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\temerald_ore: (_config, pos, ctx) => {\n\t\tconst count = 3 + ctx.nextInt(6)\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t4 + ctx.nextInt(28),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tfire: (config, pos, ctx) => {\n\t\tconst count = 1 + ctx.nextInt(ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\tglowstone: (config, pos, ctx) => {\n\t\tconst count = ctx.nextInt(1 + ctx.nextInt(ctx.sampleInt(config?.count)))\n\t\treturn [...new Array(count)].map(() => [\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tctx.nextInt(128),\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t])\n\t},\n\theightmap: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\theightmap_spread_double: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, ctx.nextInt(y * 2))\n\t},\n\theightmap_world_surface: (_config, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\ticeberg: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + 4 + ctx.nextInt(8),\n\t\t\tpos[1],\n\t\t\tpos[2] + 4 + ctx.nextInt(8),\n\t\t]]\n\t},\n\tlava_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt((config.chance ?? 1) / 10) === 0) {\n\t\t\tconst y = ctx.nextInt(ctx.nextInt(256 - 8) + 8)\n\t\t\tif (y < ctx.seaLevel || ctx.nextInt((config?.chance ?? 1) / 8) == 0) {\n\t\t\t\tconst x = ctx.nextInt(16) + pos[0]\n\t\t\t\tconst z = ctx.nextInt(16) + pos[2]\n\t\t\t\treturn [[x, y, z]]\n\t\t\t}\n\t\t}\n\t\treturn []\n\t},\n\tnope: (_config, pos) => {\n\t\treturn [pos]\n\t},\n\trange: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)\n\t\treturn decorateY(pos, y)\n\t},\n\trange_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\trange_very_biased: (config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(ctx.nextInt(ctx.nextInt((config?.maximum ?? 1) - (config?.top_offset ?? 0)) + (config?.bottom_offset ?? 0)) + (config?.bottom_offset ?? 0))\n\t\treturn decorateY(pos, y)\n\t},\n\tspread_32_above: (_config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(pos[1] + 32)\n\t\treturn decorateY(pos, y)\n\t},\n\ttop_solid_heightmap: (_config, pos) => {\n\t\tconst y = terrain[clamp(0, 63, pos[0])]\n\t\treturn decorateY(pos, y)\n\t},\n\tmagma: (_config, pos, ctx) => {\n\t\tconst y = ctx.nextInt(pos[1] + 32)\n\t\treturn decorateY(pos, y)\n\t},\n\tsquare: (_config, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tpos[1],\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t]]\n\t},\n\tsurface_relative_threshold: (config, pos) => {\n\t\tconst height = terrain[clamp(0, 63, pos[0])]\n\t\tconst min = height + (config?.min_inclusive ?? -Infinity)\n\t\tconst max = height + (config?.max_inclusive ?? Infinity)\n\t\treturn (pos[1] < min || pos[1] > max) ? [pos] : []\n\t},\n\twater_lake: (config, pos, ctx) => {\n\t\tif (ctx.nextInt(config.chance ?? 1) === 0) {\n\t\t\treturn [[\n\t\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\t\tctx.nextInt(256),\n\t\t\t\tpos[2] + ctx.nextInt(16),\n\t\t\t]]\n\t\t}\n\t\treturn []\n\t},\n}\n\n// 1.18 and after\nfunction modifyPlacement(pos: BlockPos, placement: any[], ctx: PlacementContext) {\n\tlet positions = [pos]\n\tfor (const modifier of placement) {\n\t\tconst modifierFn = PlacementModifiers[normalize(modifier?.type ?? 'nope')]\n\t\tif (!modifierFn) continue\n\t\tpositions = positions.flatMap(pos =>\n\t\t\tPlacementModifiers[normalize(modifier.type)](modifier, pos, ctx)\n\t\t)\n\t}\n\tfor (const pos of positions) {\n\t\tctx.placements.push([pos, 0])\n\t}\n}\n\nconst PlacementModifiers: {\n\t[key: string]: (config: any, pos: BlockPos, ctx: PlacementContext) => BlockPos[],\n} = {\n\tcount: ({ count }, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(count ?? 1)).fill(pos)\n\t},\n\tcount_on_every_layer: ({ count }, pos, ctx) => {\n\t\treturn new Array(ctx.sampleInt(count ?? 1)).fill(pos)\n\t\t\t.map(p => [\n\t\t\t\tp[0] + ctx.nextInt(16),\n\t\t\t\tp[1], \n\t\t\t\tp[2] + ctx.nextInt(16),\n\t\t\t])\n\t},\n\tenvironment_scan: ({}, pos) => {\n\t\treturn [pos]\n\t},\n\theight_range: ({ height }, pos, ctx) => {\n\t\treturn decorateY(pos, sampleHeight(height, ctx))\n\t},\n\theightmap: ({}, pos, ctx) => {\n\t\tconst y = Math.max(ctx.seaLevel, terrain[clamp(0, 63, pos[0])])\n\t\treturn decorateY(pos, y)\n\t},\n\tin_square: ({}, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.nextInt(16),\n\t\t\tpos[1],\n\t\t\tpos[2] + ctx.nextInt(16),\n\t\t]]\n\t},\n\tnoise_based_count: ({ noise_to_count_ratio, noise_factor, noise_offset }, pos, ctx) => {\n\t\tconst factor = Math.max(1, noise_factor)\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / factor, 0, pos[2] / factor)\n\t\tconst count = Math.max(0, Math.ceil((noise + (noise_offset ?? 0)) * noise_to_count_ratio))\n\t\treturn new Array(count).fill(pos)\n\t},\n\tnoise_threshold_count: ({ noise_level, below_noise, above_noise }, pos, ctx) => {\n\t\tconst noise = ctx.biomeInfoNoise.sample(pos[0] / 200, 0, pos[2] / 200)\n\t\tconst count = noise < noise_level ? below_noise : above_noise\n\t\treturn new Array(count).fill(pos)\n\t},\n\trandom_offset: ({ xz_spread, y_spread }, pos, ctx) => {\n\t\treturn [[\n\t\t\tpos[0] + ctx.sampleInt(xz_spread),\n\t\t\tpos[1] + ctx.sampleInt(y_spread),\n\t\t\tpos[2] + ctx.sampleInt(xz_spread),\n\t\t]]\n\t},\n\trarity_filter: ({ chance }, pos, ctx) => {\n\t\treturn ctx.nextFloat() < 1 / (chance ?? 1) ? [pos] : []\n\t},\n}\n","import { LegacyRandom, PerlinNoise } from 'deepslate'\nimport { clampedLerp, lerp2 } from '../../Utils'\n\nexport class NoiseChunkGenerator {\n\tprivate readonly minLimitPerlinNoise: PerlinNoise\n\tprivate readonly maxLimitPerlinNoise: PerlinNoise\n\tprivate readonly mainPerlinNoise: PerlinNoise\n\tprivate readonly depthNoise: PerlinNoise\n\n\tprivate settings: any = {}\n\tprivate chunkWidth: number = 4\n\tprivate chunkHeight: number = 4\n\tprivate chunkCountY: number = 32\n\tprivate biomeDepth: number = 0.1\n\tprivate biomeScale: number = 0.2\n\n\tprivate noiseColumnCache: (number[] | null)[] = []\n\tprivate xOffset: number = 0\n\n\tconstructor(seed: bigint) {\n\t\tconst random = new LegacyRandom(seed)\n\t\tthis.minLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.maxLimitPerlinNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.mainPerlinNoise = new PerlinNoise(random, -7, [1, 1, 1, 1, 1, 1, 1, 1])\n\t\tthis.depthNoise = new PerlinNoise(random, -15, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])\n\t}\n\n\tpublic reset(settings: any, depth: number, scale: number, xOffset: number, width: number) {\n\t\tthis.settings = settings\n\t\tthis.chunkWidth = settings.size_horizontal * 4\n\t\tthis.chunkHeight = settings.size_vertical * 4\n\t\tthis.chunkCountY = Math.floor(settings.height / this.chunkHeight)\n\n\t\tif (settings.amplified && depth > 0) {\n\t\t\tdepth = 1 + depth * 2\n\t\t\tscale = 1 + scale * 4\n\t\t}\n\t\tthis.biomeDepth = 0.265625 * (depth * 0.5 - 0.125)\n\t\tthis.biomeScale = 96.0 / (scale * 0.9 + 0.1)\n\n\t\tthis.noiseColumnCache = Array(width).fill(null)\n\t\tthis.xOffset = xOffset\n\t}\n \n\tpublic iterateNoiseColumn(x: number): number[] {\n\t\tconst data = Array(this.chunkCountY * this.chunkHeight)\n\t\tconst cx = Math.floor(x / this.chunkWidth)\n\t\tconst ox = Math.floor(x % this.chunkWidth) / this.chunkWidth\n\t\tconst noise1 = this.fillNoiseColumn(cx)\n\t\tconst noise2 = this.fillNoiseColumn(cx + 1)\n\n\t\tfor (let y = this.chunkCountY - 1; y >= 0; y -= 1) {\n\t\t\tfor (let yy = this.chunkHeight; yy >= 0; yy -= 1) {\n\t\t\t\tconst oy = yy / this.chunkHeight\n\t\t\t\tconst i = y * this.chunkHeight + yy\n\t\t\t\tdata[i] = lerp2(oy, ox, noise1[y], noise1[y+1], noise2[y], noise2[y+1])\n\t\t\t}\n\t\t}\n\t\treturn data\n\t}\n\n\tprivate fillNoiseColumn(x: number): number[] {\n\t\tconst cachedColumn = this.noiseColumnCache[x - this.xOffset]\n\t\tif (cachedColumn) return cachedColumn\n\n\t\tconst data = Array(this.chunkCountY + 1)\n\n\t\tconst xzScale = 684.412 * this.settings.sampling.xz_scale\n\t\tconst yScale = 684.412 * this.settings.sampling.y_scale\n\t\tconst xzFactor = xzScale / this.settings.sampling.xz_factor\n\t\tconst yFactor = yScale / this.settings.sampling.y_factor\n\t\tconst randomDensity = this.settings.random_density_offset ? this.getRandomDensity(x) : 0\n\n\t\tfor (let y = 0; y <= this.chunkCountY; y += 1) {\n\t\t\tlet noise = this.sampleAndClampNoise(x, y, this.mainPerlinNoise.getOctaveNoise(0)!.zo, xzScale, yScale, xzFactor, yFactor)\n\t\t\tconst yOffset = 1 - y * 2 / this.chunkCountY + randomDensity\n\t\t\tconst density = yOffset * this.settings.density_factor + this.settings.density_offset\n\t\t\tconst falloff = (density + this.biomeDepth) * this.biomeScale\n\t\t\tnoise += falloff * (falloff > 0 ? 4 : 1)\n\n\t\t\tif (this.settings.top_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.top_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(this.chunkCountY - y - (this.settings.top_slide.offset)) / (this.settings.top_slide.size)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (this.settings.bottom_slide.size > 0) {\n\t\t\t\tnoise = clampedLerp(\n\t\t\t\t\tthis.settings.bottom_slide.target,\n\t\t\t\t\tnoise,\n\t\t\t\t\t(y - (this.settings.bottom_slide.offset)) / (this.settings.bottom_slide.size)\n\t\t\t\t)\n\t\t\t}\n\t\t\tdata[y] = noise\n\t\t}\n\n\t\tthis.noiseColumnCache[x - this.xOffset] = data\n\t\treturn data\n\t}\n\n\tprivate getRandomDensity(x: number): number {\n\t\tconst noise = this.depthNoise.sample(x * 200, 10, this.depthNoise.getOctaveNoise(0)!.zo, 1, 0, true)\n\t\tconst a = (noise < 0) ? -noise * 0.3 : noise\n\t\tconst b = a * 24.575625 - 2\n\t\treturn (b < 0) ? b * 0.009486607142857142 : Math.min(b, 1) * 0.006640625\n\t}\n\n\tprivate sampleAndClampNoise(x: number, y: number, z: number, xzScale: number, yScale: number, xzFactor: number, yFactor: number): number {\n\t\tlet a = 0\n\t\tlet b = 0\n\t\tlet c = 0\n\t\tlet d = 1\n\n\t\tfor (let i = 0; i < 16; i += 1) {\n\t\t\tconst x2 = PerlinNoise.wrap(x * xzScale * d)\n\t\t\tconst y2 = PerlinNoise.wrap(y * yScale * d)\n\t\t\tconst z2 = PerlinNoise.wrap(z * xzScale * d)\n\t\t\tconst e = yScale * d\n\n\t\t\tconst minLimitNoise = this.minLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (minLimitNoise) {\n\t\t\t\ta += minLimitNoise.sample(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tconst maxLimitNoise = this.maxLimitPerlinNoise.getOctaveNoise(i)\n\t\t\tif (maxLimitNoise) {\n\t\t\t\tb += maxLimitNoise.sample(x2, y2, z2, e, y * e) / d\n\t\t\t}\n\n\t\t\tif (i < 8) {\n\t\t\t\tconst mainNoise = this.mainPerlinNoise.getOctaveNoise(i)\n\t\t\t\tif (mainNoise) {\n\t\t\t\t\tc += mainNoise.sample(\n\t\t\t\t\t\tPerlinNoise.wrap(x * xzFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(y * yFactor * d),\n\t\t\t\t\t\tPerlinNoise.wrap(z * xzFactor * d),\n\t\t\t\t\t\tyFactor * d,\n\t\t\t\t\t\ty * yFactor * d \n\t\t\t\t\t) / d\n\t\t\t\t}\n\t\t\t}\n\n\t\t\td /= 2\n\t\t}\n\n\t\treturn clampedLerp(a / 512, b / 512, (c / 10 + 1) / 2)\n\t}\n}\n","import { DataModel } from '@mcschema/core'\nimport type { BlockState } from 'deepslate'\nimport { BlockPos, Chunk, ChunkPos, clampedMap, DensityFunction, FixedBiome, Identifier, NoiseChunkGenerator, NoiseGeneratorSettings, NoiseParameters, NoiseRouter, NoiseSettings, Registry, WorldgenRegistries, XoroshiroRandom } from 'deepslate'\nimport * as deepslate18 from 'deepslate-1.18'\nimport type { VersionId } from '../services'\nimport { checkVersion, fetchAllPresets } from '../services'\nimport { deepClone, deepEqual } from '../Utils'\nimport { NoiseChunkGenerator as OldNoiseChunkGenerator } from './noise/NoiseChunkGenerator'\n\nexport type NoiseSettingsOptions = {\n\tbiome?: string,\n\tbiomeScale?: number,\n\tbiomeDepth?: number,\n\toffset: number,\n\twidth: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nconst Z = 0\n\nconst colors: Record<string, [number, number, number]> = {\n\t'minecraft:air': [150, 160, 170],\n\t'minecraft:water': [20, 80, 170],\n\t'minecraft:lava': [200, 100, 0],\n\t'minecraft:stone': [55, 55, 55],\n\t'minecraft:deepslate': [34, 34, 36],\n\t'minecraft:bedrock': [10, 10, 10],\n\t'minecraft:grass_block': [47, 120, 23],\n\t'minecraft:dirt': [64, 40, 8],\n\t'minecraft:gravel': [70, 70, 70],\n\t'minecraft:sand': [196, 180, 77],\n\t'minecraft:sandstone': [148, 135, 52],\n\t'minecraft:netherrack': [100, 40, 40],\n\t'minecraft:crimson_nylium': [144, 22, 22],\n\t'minecraft:warped_nylium': [28, 115, 113],\n\t'minecraft:basalt': [73, 74, 85],\n\t'minecraft:end_stone': [200, 200, 140],\n}\n\nlet cacheState: any\nlet generatorCache: NoiseChunkGenerator\nlet chunkCache: Chunk[] = []\nconst registryCache = new Map<VersionId, Registry<Registry<any>>>()\n\nexport async function noiseSettings(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tif (checkVersion(options.version, '1.18')) {\n\t\tif (checkVersion(options.version, '1.18.2')) {\n\t\t\tawait initRegistries(options.version)\n\t\t}\n\n\t\tconst { settings, generator } = getCached(state, options)\n\n\t\tconst slice = new LevelSlice(-options.offset, options.width, settings.noise.minY, settings.noise.height)\n\t\tslice.generate(generator, options.biome)\n\n\t\tconst data = img.data\n\t\tfor (let x = 0; x < options.width; x += 1) {\n\t\t\tfor (let y = 0; y < settings.noise.height; y += 1) {\n\t\t\t\tconst i = x * 4 + (settings.noise.height-y-1) * 4 * img.width\n\t\t\t\tconst state = slice.getBlockState([x - options.offset, y + settings.noise.minY, Z])\n\t\t\t\tconst color = colors[state.getName().toString()] ?? [0, 0, 0]\n\t\t\t\tdata[i] = color[0]\n\t\t\t\tdata[i + 1] = color[1]\n\t\t\t\tdata[i + 2] = color[2]\n\t\t\t\tdata[i + 3] = 255\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tconst generator = new OldNoiseChunkGenerator(options.seed)\n\tgenerator.reset(state.noise, options.biomeDepth ?? 0, options.biomeScale ?? 0, options.offset, options.width)\n\tconst data = img.data\n\tconst row = img.width * 4\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tconst noise = generator.iterateNoiseColumn(x - options.offset).reverse()\n\t\tfor (let y = 0; y < state.noise.height; y += 1) {\n\t\t\tconst i = y * row + x * 4\n\t\t\tconst color = getColor(noise, y)\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n\nexport function getNoiseBlock(x: number, y: number) {\n\tconst chunk = chunkCache.find(c => ChunkPos.minBlockX(c.pos) <= x && ChunkPos.maxBlockX(c.pos) >= x)\n\tif (!chunk) {\n\t\treturn undefined\n\t}\n\treturn chunk.getBlockState(BlockPos.create(x, y, Z))\n}\n\nexport async function densityFunction(state: any, img: ImageData, options: NoiseSettingsOptions) {\n\tconst { fn, settings } = await createDensityFunction(state, options)\n\n\tconst arr = Array(options.width * settings.height)\n\tlet min = Infinity\n\tlet max = -Infinity\n\tfor (let x = 0; x < options.width; x += 1) {\n\t\tfor (let y = 0; y < settings.height; y += 1) {\n\t\t\tconst i = x + (settings.height-y-1) * options.width\n\t\t\tconst density = fn.compute(DensityFunction.context(x - options.offset, y, 0))\n\t\t\tmin = Math.min(min, density)\n\t\t\tmax = Math.max(max, density)\n\t\t\tarr[i] = density\n\t\t}\n\t}\n\n\tconst data = img.data\n\tfor (let i = 0; i < options.width * settings.height; i += 1) {\n\t\tconst color = Math.floor(clampedMap(arr[i], min, max, 0, 256))\n\t\tdata[4 * i] = color\n\t\tdata[4 * i + 1] = color\n\t\tdata[4 * i + 2] = color\n\t\tdata[4 * i + 3] = 255\n\t}\n}\n\nasync function createDensityFunction(state: any, options: NoiseSettingsOptions) {\n\tawait initRegistries(options.version)\n\n\tconst random = XoroshiroRandom.create(options.seed).forkPositional()\n\tconst settings = NoiseSettings.fromJson({\n\t\tmin_y: -64,\n\t\theight: 384,\n\t\tsize_horizontal: 1,\n\t\tsize_vertical: 2,\n\t\tsampling: { xz_scale: 1, y_scale: 1, xz_factor: 80, y_factor: 160 },\n\t\tbottom_slide: { target: 0.1171875, size: 3, offset: 0 },\n\t\ttop_slide: { target: -0.078125, size: 2, offset: 8 },\n\t\tterrain_shaper: { offset: 0.044, factor: 4, jaggedness: 0 },\n\t})\n\tconst originalFn = DensityFunction.fromJson(state)\n\tconst fn = originalFn.mapAll(new NoiseRouter.Visitor(random, settings))\n\n\treturn {\n\t\tfn,\n\t\tsettings,\n\t}\n}\n\nconst Registries: [string, { fromJson(obj: unknown): any}][] = [\n\t['worldgen/noise', NoiseParameters],\n\t['worldgen/density_function', DensityFunction],\n]\n\nasync function initRegistries(version: VersionId) {\n\tconst rootRegistries = registryCache.get(version) ?? new Registry(new Identifier('misode', 'temp'))\n\tif (!registryCache.has(version)) {\n\t\tawait Promise.all(Registries.map(([id, c]) => fetchRegistry(version, rootRegistries, id, c)))\n\t\tregistryCache.set(version, rootRegistries)\n\t}\n\tWorldgenRegistries.DENSITY_FUNCTION.clear().assign(rootRegistries.getOrThrow(Identifier.create('worldgen/density_function')))\n\tWorldgenRegistries.NOISE.clear().assign(rootRegistries.getOrThrow(Identifier.create('worldgen/noise')))\n}\n\nasync function fetchRegistry<T extends { fromJson(obj: unknown): T }>(version: VersionId, root: Registry<Registry<unknown>>, id: string, clazz: T) {\n\tconst entries = await fetchAllPresets(version, id)\n\tconst registry = new Registry<typeof clazz>(Identifier.create(id))\n\tfor (const [key, value] of entries.entries()) {\n\t\tregistry.register(Identifier.parse(key), clazz.fromJson(value))\n\t}\n\troot.register(registry.key, registry)\n}\n\nfunction getCached(state: unknown, options: NoiseSettingsOptions) {\n\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(state))\n\n\tconst newState = [state, `${options.seed}`, options.biome]\n\tif (!deepEqual(newState, cacheState)) {\n\t\tcacheState = deepClone(newState)\n\t\tchunkCache = []\n\t\tif (checkVersion(options.version, '1.18.2')) {\n\t\t\tconst biomeSource = new FixedBiome(Identifier.create('unknown'))\n\t\t\tgeneratorCache = new NoiseChunkGenerator(options.seed, biomeSource, settings)\n\t\t} else {\n\t\t\tconst biomeSource = new deepslate18.FixedBiome('unknown')\n\t\t\tgeneratorCache = new deepslate18.NoiseChunkGenerator(options.seed, biomeSource, settings as any) as any\n\t\t}\n\t}\n\treturn {\n\t\tsettings,\n\t\tgenerator: generatorCache,\n\t}\n}\n\nfunction getColor(noise: number[], y: number): number {\n\tif (noise[y] > 0) {\n\t\treturn 0\n\t}\n\tif (noise[y+1] > 0) {\n\t\treturn 150\n\t}\n\treturn 255\n}\n\nclass LevelSlice {\n\tprivate readonly chunks: Chunk[]\n\tprivate readonly done: boolean[]\n\n\tconstructor(\n\t\tprivate readonly minX: number,\n\t\twidth: number,\n\t\tminY: number,\n\t\theight: number,\n\t) {\n\t\tthis.done = []\n\t\tthis.chunks = [...Array(Math.ceil(width / 16) + 1)]\n\t\t\t.map((_, i) => {\n\t\t\t\tconst x = (minX >> 4) + i\n\t\t\t\tconst cached = chunkCache.find(c => c.pos[0] === x)\n\t\t\t\tif (cached) {\n\t\t\t\t\tthis.done[i] = true\n\t\t\t\t\treturn cached\n\t\t\t\t}\n\t\t\t\treturn new Chunk(minY, height, ChunkPos.create(x, Z >> 4))\n\t\t\t})\n\t}\n\n\tpublic generate(generator: NoiseChunkGenerator, forcedBiome?: string) {\n\t\tthis.chunks.forEach((chunk, i) => {\n\t\t\tif (!this.done[i]) {\n\t\t\t\tgenerator.fill(chunk, true)\n\t\t\t\tgenerator.buildSurface(chunk, forcedBiome)\n\t\t\t\tthis.done[i] = true\n\t\t\t\tchunkCache.push(chunk)\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic getBlockState(pos: BlockPos): BlockState {\n\t\tconst chunkIndex = (pos[0] >> 4) - (this.minX >> 4)\n\t\treturn this.chunks[chunkIndex].getBlockState(pos)\n\t}\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport type { NoiseParameters } from 'deepslate'\nimport { NoiseGeneratorSettings } from 'deepslate'\nimport { useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { biomeMap, getBiome } from '../../previews'\nimport { newSeed } from '../../Utils'\n\nconst LAYERS = ['biomes', 'temperature', 'humidity', 'continentalness', 'erosion', 'weirdness'] as const\n\nexport const BiomeSourcePreview = ({ model, data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [scale, setScale] = useState(2)\n\tconst [focused, setFocused] = useState<{[k: string]: number | string} | undefined>(undefined)\n\tconst [layers, setLayers] = useState(new Set<typeof LAYERS[number]>(['biomes']))\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst res = useRef(1)\n\tconst refineTimeout = useRef<number>(undefined)\n\n\tconst seed = BigInt(model.get(new Path(['generator', 'seed'])))\n\tconst octaves = useMemo(() => {\n\t\tif (!shown) return undefined\n\t\treturn getOctaves(model.get(new Path(['generator', 'settings'])))\n\t}, [shown])\n\tconst state = shown ? calculateState(data, octaves!) : ''\n\tconst type: string = data.type?.replace(/^minecraft:/, '')\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [200 / res.current, 200 / res.current]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { octaves: octaves!, biomeColors: {}, layers, offset: offset.current, scale, seed, res: res.current, version }\n\t\t\tawait biomeMap(data, img, options)\n\t\t\tif (res.current === 4) {\n\t\t\t\tclearTimeout(refineTimeout.current)\n\t\t\t\trefineTimeout.current = setTimeout(() => {\n\t\t\t\t\tres.current = 1\n\t\t\t\t\tredraw()\n\t\t\t\t}, 150) as any\n\t\t\t}\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 200\n\t\t\toffset.current[1] = offset.current[1] + dy * 200\n\t\t\tclearTimeout(refineTimeout.current)\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst options = { octaves: octaves!, biomeColors: {}, layers, offset: offset.current, scale, seed, res: 1, version }\n\t\t\tconst biome = await getBiome(data, Math.floor(x * 200), Math.floor(y * 200), options)\n\t\t\tsetFocused(biome)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, scale, seed, layers])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tres.current = type === 'multi_noise' ? 4 : 1\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, layers, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.current[1] * scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t{focused && <Btn label={focused.biome as string} class=\"no-pointer\" />}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t<BtnMenu icon=\"stack\" tooltip={locale('configure_layers')}>\n\t\t\t\t\t{LAYERS.map(name => {\n\t\t\t\t\t\tconst enabled = layers.has(name)\n\t\t\t\t\t\treturn <Btn label={locale(`layer.${name}`)} \n\t\t\t\t\t\t\tactive={enabled}\n\t\t\t\t\t\t\ttooltip={enabled ? locale('enabled') : locale('disabled')}\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\tsetLayers(new Set([name]))\n\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t}} />\n\t\t\t\t\t})}\n\t\t\t\t</BtnMenu>}\n\t\t\t{(type === 'multi_noise' || type === 'checkerboard') && <>\n\t\t\t\t<Btn icon=\"dash\" tooltip={locale('zoom_out')}\n\t\t\t\t\tonClick={() => changeScale(scale * 1.5)} />\n\t\t\t\t<Btn icon=\"plus\" tooltip={locale('zoom_in')}\n\t\t\t\t\tonClick={() => changeScale(scale / 1.5)} />\n\t\t\t</>}\n\t\t\t{type === 'multi_noise' &&\n\t\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\t\tonClick={() => newSeed(model)} />}\n\t\t</div>\n\t\t{focused?.temperature && <div class=\"controls secondary-controls\">\n\t\t\t<Btn class=\"no-pointer\" label={Object.entries(focused)\n\t\t\t\t.filter(([k]) => k !== 'biome')\n\t\t\t\t.map(([k, v]) => `${k[0].toUpperCase()}: ${(v as number).toFixed(2)}`).join(' ')}/>\n\t\t</div>}\n\t\t<canvas ref={canvas} width=\"200\" height=\"200\"></canvas>\n\t</>\n}\n\nfunction calculateState(data: any, octaves: Record<string, NoiseParameters>) {\n\treturn JSON.stringify([data, octaves])\n}\n\nexport function getOctaves(obj: any): Record<string, NoiseParameters> {\n\tif (typeof obj !== 'string') {\n\t\tconst settings = NoiseGeneratorSettings.fromJson(DataModel.unwrapLists(obj))\n\t\tobj = settings.legacyRandomSource ? 'minecraft:nether' : 'minecraft:overworld'\n\t}\n\tswitch (obj.replace(/^minecraft:/, '')) {\n\t\tcase 'overworld':\n\t\tcase 'amplified':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -9, amplitudes: [1.5, 0, 1, 0, 0, 0] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1, 0, 0, 0, 0] },\n\t\t\t\tcontinentalness: { firstOctave: -9, amplitudes: [1, 1, 2, 2, 2, 1, 1, 1, 1] },\n\t\t\t\terosion: { firstOctave: -9, amplitudes: [1, 1, 0, 1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 2, 1, 0, 0, 0] },\n\t\t\t\tshift: { firstOctave: -3, amplitudes: [1, 1, 1, 0] },\n\t\t\t}\n\t\tcase 'end':\n\t\tcase 'floating_islands':\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\thumidity: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tcontinentalness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\terosion: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tweirdness: { firstOctave: 0, amplitudes: [0] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttemperature: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\thumidity: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tcontinentalness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\terosion: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tweirdness: { firstOctave: -7, amplitudes: [1, 1] },\n\t\t\t\tshift: { firstOctave: 0, amplitudes: [0] },\n\t\t\t}\n\t}\n}\n","import { useEffect, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { decorator } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const DecoratorPreview = ({ data, version, shown }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [scale, setScale] = useState(4)\n\tconst [seed, setSeed] = useState(randomSeed())\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [scale * 16, scale * 16]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tdecorator(data, img, { seed, version, size: [scale * 16, 128, scale * 16] })\n\t\t},\n\t})\n\n\tconst state = JSON.stringify(data)\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t<Btn icon=\"dash\" tooltip={locale('zoom_out')}\n\t\t\t\tonClick={() => setScale(Math.min(16, scale + 1))} />\n\t\t\t<Btn icon=\"plus\" tooltip={locale('zoom_in')}\n\t\t\t\tonClick={() => setScale(Math.max(1, scale - 1))} />\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width=\"64\" height=\"64\"></canvas>\n\t</>\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { densityFunction } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const DensityFunctionPreview = ({ data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [autoScroll, setAutoScroll] = useState(false)\n\tconst [focused, setFocused] = useState<string | undefined>(undefined)\n\tconst offset = useRef(0)\n\tconst scrollInterval = useRef<number | undefined>(undefined)\n\tconst state = JSON.stringify([data])\n\n\tconst size = data?.noise?.height ?? 256\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [size, size]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { offset: offset.current, width: img.width, seed, version }\n\t\t\tawait densityFunction(data, img, options)\n\t\t},\n\t\tasync onDrag(dx) {\n\t\t\toffset.current += dx * size\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst worldX = Math.floor(x * size - offset.current)\n\t\t\tconst worldY = size - Math.max(1, Math.ceil(y * size)) + (data?.noise?.min_y ?? 0)\n\t\t\tsetFocused(`X=${worldX} Y=${worldY}`)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, seed])\n\n\tuseEffect(() => {\n\t\tif (scrollInterval.current) {\n\t\t\tclearInterval(scrollInterval.current)\n\t\t}\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t\tif (autoScroll) {\n\t\t\t\tscrollInterval.current = setInterval(() => {\n\t\t\t\t\toffset.current -= 8\n\t\t\t\t\tredraw()\n\t\t\t\t}, 100) as any\n\t\t\t}\n\t\t}\n\t}, [state, seed, shown, autoScroll])\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t{focused && <Btn label={focused} class=\"no-pointer\" />}\n\t\t\t<BtnMenu icon=\"gear\" tooltip={locale('terrain_settings')}>\n\t\t\t\t<Btn icon={autoScroll ? 'square_fill' : 'square'} label={locale('preview.auto_scroll')} onClick={() => setAutoScroll(!autoScroll)} />\n\t\t\t</BtnMenu>\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width={size} height={size}></canvas>\n\t</>\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { normalNoise } from '../../previews'\nimport { randomSeed } from '../../Utils'\n\nexport const NoisePreview = ({ data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [scale, setScale] = useState(2)\n\tconst offset = useRef<[number, number]>([0, 0])\n\tconst state = JSON.stringify([data])\n\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [256, 256]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { offset: offset.current, scale, seed, version }\n\t\t\tnormalNoise(data, img, options)\n\t\t},\n\t\tasync onDrag(dx, dy) {\n\t\t\toffset.current[0] = offset.current[0] + dx * 256\n\t\t\toffset.current[1] = offset.current[1] + dy * 256\n\t\t\tredraw()\n\t\t},\n\t}, [state, scale, seed])\n\n\tuseEffect(() => {\n\t\tif (shown) {\n\t\t\tredraw()\n\t\t}\n\t}, [state, scale, seed, shown])\n\n\tconst changeScale = (newScale: number) => {\n\t\toffset.current[0] = offset.current[0] * scale / newScale\n\t\toffset.current[1] = offset.current[1] * scale / newScale\n\t\tsetScale(newScale)\n\t}\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t<Btn icon=\"dash\" tooltip={locale('zoom_out')}\n\t\t\t\tonClick={() => changeScale(scale * 1.5)} />\n\t\t\t<Btn icon=\"plus\" tooltip={locale('zoom_in')}\n\t\t\t\tonClick={() => changeScale(scale / 1.5)} />\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width=\"256\" height=\"256\"></canvas>\n\t</>\n}\n","import { DataModel } from '@mcschema/core'\nimport { LegacyRandom, NoiseParameters, NormalNoise } from 'deepslate'\nimport type { VersionId } from '../services'\n\nexport type NoiseOptions = {\n\toffset: [number, number],\n\tscale: number,\n\tseed: bigint,\n\tversion: VersionId,\n}\n\nexport function normalNoise(state: any, img: ImageData, options: NoiseOptions) {\n\tconst random = new LegacyRandom(options.seed)\n\tconst params = NoiseParameters.fromJson(DataModel.unwrapLists(state))\n\tconst noise = new NormalNoise(random, params)\n\n\tconst ox = -options.offset[0] - 100\n\tconst oz = -options.offset[1] - 100\n\tconst data = img.data\n\tfor (let x = 0; x < 256; x += 1) {\n\t\tfor (let y = 0; y < 256; y += 1) {\n\t\t\tconst i = x * 4 + y * 4 * 256\n\t\t\tconst xx = (x + ox) * options.scale\n\t\t\tconst yy = (y + oz) * options.scale\n\t\t\tconst color = (noise.sample(xx, yy, 0) + 1) * 128\n\t\t\tdata[i] = color\n\t\t\tdata[i + 1] = color\n\t\t\tdata[i + 2] = color\n\t\t\tdata[i + 3] = 255\n\t\t}\n\t}\n}\n","import { useEffect, useMemo, useRef, useState } from 'preact/hooks'\nimport type { PreviewProps } from '.'\nimport { Btn, BtnInput, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useCanvas } from '../../hooks'\nimport { getNoiseBlock, noiseSettings } from '../../previews'\nimport { CachedCollections, checkVersion } from '../../services'\nimport { randomSeed } from '../../Utils'\n\nexport const NoiseSettingsPreview = ({ data, shown, version }: PreviewProps) => {\n\tconst { locale } = useLocale()\n\tconst [seed, setSeed] = useState(randomSeed())\n\tconst [biome, setBiome] = useState('minecraft:plains')\n\tconst [biomeScale, setBiomeScale] = useState(0.2)\n\tconst [biomeDepth, setBiomeDepth] = useState(0.1)\n\tconst [autoScroll, setAutoScroll] = useState(false)\n\tconst [focused, setFocused] = useState<string | undefined>(undefined)\n\tconst offset = useRef(0)\n\tconst scrollInterval = useRef<number | undefined>(undefined)\n\tconst state = JSON.stringify([data, biomeScale, biomeDepth])\n\n\tconst size = data?.noise?.height ?? 256\n\tconst { canvas, redraw } = useCanvas({\n\t\tsize() {\n\t\t\treturn [size, size]\n\t\t},\n\t\tasync draw(img) {\n\t\t\tconst options = { biome, biomeDepth, biomeScale, offset: offset.current, width: img.width, seed, version }\n\t\t\tawait noiseSettings(data, img, options)\n\t\t},\n\t\tasync onDrag(dx) {\n\t\t\toffset.current += dx * size\n\t\t\tredraw()\n\t\t},\n\t\tasync onHover(x, y) {\n\t\t\tconst worldX = Math.floor(x * size - offset.current)\n\t\t\tconst worldY = size - Math.max(1, Math.ceil(y * size)) + (data?.noise?.min_y ?? 0)\n\t\t\tconst block = getNoiseBlock(worldX, worldY)\n\t\t\tsetFocused(block ? `Y=${worldY} (${block.getName().path})` : `Y=${worldY}`)\n\t\t},\n\t\tonLeave() {\n\t\t\tsetFocused(undefined)\n\t\t},\n\t}, [state, seed])\n\n\tuseEffect(() => {\n\t\tif (scrollInterval.current) {\n\t\t\tclearInterval(scrollInterval.current)\n\t\t}\n\t\tif (shown) {\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait redraw()\n\t\t\t\t\tif (autoScroll) {\n\t\t\t\t\t\tscrollInterval.current = setInterval(() => {\n\t\t\t\t\t\t\toffset.current -= 8\n\t\t\t\t\t\t\tredraw()\n\t\t\t\t\t\t}, 100) as any\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t})()\n\t\t}\n\t}, [state, seed, shown, biome, biomeScale, biomeDepth, autoScroll])\n\n\tconst allBiomes = useMemo(() => CachedCollections?.get('worldgen/biome') ?? [], [version])\n\n\treturn <>\n\t\t<div class=\"controls preview-controls\">\n\t\t\t{focused && <Btn label={focused} class=\"no-pointer\" />}\n\t\t\t<BtnMenu icon=\"gear\" tooltip={locale('terrain_settings')}>\n\t\t\t\t{checkVersion(version, undefined, '1.17') ? <>\n\t\t\t\t\t<BtnInput label={locale('preview.scale')} value={`${biomeScale}`} onChange={v => setBiomeScale(Number(v))} />\n\t\t\t\t\t<BtnInput label={locale('preview.depth')} value={`${biomeDepth}`} onChange={v => setBiomeDepth(Number(v))} />\n\t\t\t\t</> :\n\t\t\t\t\t<BtnInput label={locale('preview.biome')} value={biome} onChange={setBiome} dataList={allBiomes} larger />\n\t\t\t\t}\n\t\t\t\t<Btn icon={autoScroll ? 'square_fill' : 'square'} label={locale('preview.auto_scroll')} onClick={() => setAutoScroll(!autoScroll)} />\n\t\t\t</BtnMenu>\n\t\t\t<Btn icon=\"sync\" tooltip={locale('generate_new_seed')}\n\t\t\t\tonClick={() => setSeed(randomSeed())} />\n\t\t</div>\n\t\t<canvas ref={canvas} width={size} height={size}></canvas>\n\t</>\n}\n","import type { DataModel } from '@mcschema/core'\nimport { Path } from '@mcschema/core'\nimport { useState } from 'preact/hooks'\nimport { useModel } from '../../hooks'\nimport type { VersionId } from '../../services'\nimport { checkVersion } from '../../services'\nimport { BiomeSourcePreview, DecoratorPreview, DensityFunctionPreview, NoisePreview, NoiseSettingsPreview } from '../previews'\n\nexport const HasPreview = ['dimension', 'worldgen/density_function', 'worldgen/noise', 'worldgen/noise_settings', 'worldgen/configured_feature', 'worldgen/placed_feature']\n\ntype PreviewPanelProps = {\n\tmodel: DataModel | null,\n\tversion: VersionId,\n\tid: string,\n\tshown: boolean,\n\tonError: (message: string) => unknown,\n}\nexport function PreviewPanel({ model, version, id, shown }: PreviewPanelProps) {\n\tconst [, setCount] = useState(0)\n\n\tuseModel(model, () => {\n\t\tsetCount(count => count + 1)\n\t})\n\n\tif (!model) return <></>\n\n\tif (id === 'dimension' && model.get(new Path(['generator', 'type']))?.endsWith('noise')) {\n\t\tconst data = model.get(new Path(['generator', 'biome_source']))\n\t\tif (data) return <BiomeSourcePreview {...{ model, version, shown, data }} />\n\t}\n\n\tif (id === 'worldgen/density_function') {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <DensityFunctionPreview {...{ model, version, shown, data }} />\n\t}\n\n\tif (id === 'worldgen/noise') {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <NoisePreview {...{ model, version, shown, data }} />\n\t}\n\n\tif (id === 'worldgen/noise_settings') {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <NoiseSettingsPreview {...{ model, version, shown, data }} />\n\t}\n\n\tif ((id === 'worldgen/placed_feature' || (id === 'worldgen/configured_feature' && checkVersion(version, '1.16', '1.17')))) {\n\t\tconst data = model.get(new Path([]))\n\t\tif (data) return <DecoratorPreview {...{ model, version, shown, data }} />\n\t}\n\n\treturn <></>\n}\n","import type { DataModel, Hook } from '@mcschema/core'\nimport { ModelPath, relativePath } from '@mcschema/core'\nimport type { BlockStateRegistry } from '../services'\n\nexport function getOutput(model: DataModel, blockStates: BlockStateRegistry): any {\n\treturn model.schema.hook(transformOutput, new ModelPath(model), model.data, { blockStates })\n}\n\nexport type OutputProps = {\n\tblockStates: BlockStateRegistry,\n}\nexport const transformOutput: Hook<[any, OutputProps], any> = {\n\tbase({}, _, value) {\n\t\treturn value\n\t},\n\n\tchoice({ switchNode }, path, value, props) {\n\t\treturn switchNode.hook(this, path, value, props)\n\t},\n\n\tlist({ children }, path, value, props) {\n\t\tif (!Array.isArray(value)) return value\n\t\tconst res = value.map((obj, index) =>\n\t\t\tchildren.hook(this, path.push(index), obj.node, props)\n\t\t)\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a as any]\n\t\t}\n\t\treturn res\n\t},\n\n\tmap({ children, config }, path, value, props) {\n\t\tif (value === undefined) return undefined\n\t\tconst blockState = config.validation?.validator === 'block_state_map'? props.blockStates?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst res: any = {}\n\t\tObject.keys(value).forEach(f => {\n\t\t\tif (blockState) {\n\t\t\t\tif (!Object.keys(blockState.properties ?? {}).includes(f)) return\n\t\t\t}\n\t\t\tres[f] = children.hook(this, path.push(f), value[f], props)\n\t\t})\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\n\t\t}\n\t\treturn res\n\t},\n\n\tobject({ getActiveFields }, path, value, props) {\n\t\tif (value === undefined || value === null || typeof value !== 'object') {\n\t\t\treturn value\n\t\t}\n\t\tconst res: any = {}\n\t\tconst activeFields = getActiveFields(path)\n\t\tObject.keys(activeFields)\n\t\t\t.filter(k => activeFields[k].enabled(path))\n\t\t\t.forEach(f => {\n\t\t\t\tconst out = activeFields[f].hook(this, path.push(f), value[f], props)\n\t\t\t\tif (out !== undefined && out !== null) {\n\t\t\t\t\tres[f] = out\n\t\t\t\t}\n\t\t\t})\n\t\tfor (const a of Object.getOwnPropertySymbols(value)) {\n\t\t\tres[a as any] = value[a]\n\t\t}\n\t\treturn res\n\t},\n}\n","import { DataModel } from '@mcschema/core'\nimport brace from 'brace'\nimport 'brace/mode/json'\nimport 'brace/mode/yaml'\nimport json from 'comment-json'\nimport yaml from 'js-yaml'\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, BtnMenu } from '..'\nimport { useLocale } from '../../contexts'\nimport { useModel } from '../../hooks'\nimport { getOutput } from '../../schema/transformOutput'\nimport type { BlockStateRegistry } from '../../services'\nimport { Store } from '../../Store'\nimport { message } from '../../Utils'\n\nconst INDENT: Record<string, number | string | undefined> = {\n\t'2_spaces': 2,\n\t'4_spaces': 4,\n\ttabs: '\\t',\n\tminified: undefined,\n}\n\nconst FORMATS: Record<string, {\n\tparse: (v: string) => any,\n\tstringify: (v: any, indentation: string | number | undefined) => string,\n}> = {\n\tjson: {\n\t\tparse: json.parse,\n\t\tstringify: (v, i) => json.stringify(v, null, i) + '\\n',\n\t},\n\tyaml: {\n\t\tparse: yaml.load,\n\t\tstringify: (v, i) => yaml.dump(v, {\n\t\t\tflowLevel: i === undefined ? 0 : -1,\n\t\t\tindent: typeof i === 'string' ? 4 : i,\n\t\t}),\n\t},\n}\n\ninterface Editor {\n\tgetValue(): string\n\tsetValue(value: string): void\n\tconfigure(indent: string, format: string): void\n\tselect(): void\n}\n\ntype SourcePanelProps = {\n\tname: string,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tdoCopy?: number,\n\tdoDownload?: number,\n\tdoImport?: number,\n\tcopySuccess: () => unknown,\n\tonError: (message: string | Error) => unknown,\n}\nexport function SourcePanel({ name, model, blockStates, doCopy, doDownload, doImport, copySuccess, onError }: SourcePanelProps) {\n\tconst { locale } = useLocale()\n\tconst [indent, setIndent] = useState(Store.getIndent())\n\tconst [format, setFormat] = useState(Store.getFormat())\n\tconst [highlighting, setHighlighting] = useState(Store.getHighlighting())\n\tconst download = useRef<HTMLAnchorElement>(null)\n\tconst retransform = useRef<Function>()\n\tconst onImport = useRef<(e: any) => any>()\n\n\tconst textarea = useRef<HTMLTextAreaElement>()\n\tconst editor = useRef<Editor>()\n\n\tconst getSerializedOutput = useCallback((model: DataModel, blockStates: BlockStateRegistry) => {\n\t\tconst data = getOutput(model, blockStates)\n\t\treturn FORMATS[format].stringify(data, INDENT[indent])\n\t}, [indent, format])\n\n\tuseEffect(() => {\n\t\tretransform.current = () => {\n\t\t\tif (!model || !blockStates) return\n\t\t\ttry {\n\t\t\t\tconst output = getSerializedOutput(model, blockStates)\n\t\t\t\teditor.current.setValue(output)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\te.message = `Error getting JSON output: ${e.message}`\n\t\t\t\t\tonError(e)\n\t\t\t\t} else {\n\t\t\t\t\tonError(`Error getting JSON output: ${message(e)}`)\n\t\t\t\t}\n\t\t\t\tconsole.error(e)\n\t\t\t\teditor.current.setValue('')\n\t\t\t}\n\t\t}\n\n\t\tonImport.current = () => {\n\t\t\tconst value = editor.current.getValue()\n\t\t\tif (value.length === 0) return\n\t\t\ttry {\n\t\t\t\tconst data = FORMATS[format].parse(value)\n\t\t\t\tmodel?.reset(DataModel.wrapLists(data), false)\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof Error) {\n\t\t\t\t\te.message = `Error importing: ${e.message}`\n\t\t\t\t\tonError(e)\n\t\t\t\t} else {\n\t\t\t\t\tonError(`Error importing: ${message(e)}`)\n\t\t\t\t}\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t}\n\t}, [model, blockStates, indent, format, highlighting])\n\n\tuseEffect(() => {\n\t\tif (highlighting) {\n\t\t\tconst braceEditor = brace.edit('editor')\n\t\t\tbraceEditor.setOptions({\n\t\t\t\tfontSize: 14,\n\t\t\t\tshowFoldWidgets: false,\n\t\t\t\thighlightSelectedWord: false,\n\t\t\t})\n\t\t\tbraceEditor.$blockScrolling = Infinity\n\t\t\tbraceEditor.on('blur', e => onImport.current(e))\n\t\t\tbraceEditor.getSession().setMode('ace/mode/json')\n\n\t\t\teditor.current = {\n\t\t\t\tgetValue() {\n\t\t\t\t\treturn braceEditor.getSession().getValue()\n\t\t\t\t},\n\t\t\t\tsetValue(value) {\n\t\t\t\t\tbraceEditor.getSession().setValue(value)\n\t\t\t\t},\n\t\t\t\tconfigure(indent, format) {\n\t\t\t\t\tbraceEditor.setOption('useSoftTabs', indent !== 'tabs')\n\t\t\t\t\tbraceEditor.setOption('tabSize', indent === 'tabs' ? 4 : INDENT[indent])\n\t\t\t\t\tbraceEditor.getSession().setMode(`ace/mode/${format}`)\n\t\t\t\t},\n\t\t\t\tselect() {\n\t\t\t\t\tbraceEditor.selectAll()\n\t\t\t\t},\n\t\t\t}\n\t\t} else {\n\t\t\teditor.current = {\n\t\t\t\tgetValue() {\n\t\t\t\t\treturn textarea.current.value\n\t\t\t\t},\n\t\t\t\tsetValue(value: string) {\n\t\t\t\t\ttextarea.current.value = value\n\t\t\t\t},\n\t\t\t\tconfigure() {},\n\t\t\t\tselect() {},\n\t\t\t}\n\t\t}\n\t}, [highlighting])\n\n\tuseModel(model, () => {\n\t\tretransform.current()\n\t})\n\tuseEffect(() => {\n\t\tif (model) retransform.current()\n\t}, [model])\n\n\tuseEffect(() => {\n\t\teditor.current.configure(indent, format)\n\t\tretransform.current()\n\t}, [indent, format, highlighting])\n\n\tuseEffect(() => {\n\t\tif (doCopy && model && blockStates) {\n\t\t\tnavigator.clipboard.writeText(getSerializedOutput(model, blockStates)).then(() => {\n\t\t\t\tcopySuccess()\n\t\t\t})\n\t\t}\n\t}, [doCopy])\n\n\tuseEffect(() => {\n\t\tif (doDownload && model && blockStates && download.current) {\n\t\t\tconst content = encodeURIComponent(getSerializedOutput(model, blockStates))\n\t\t\tdownload.current.setAttribute('href', `data:text/json;charset=utf-8,${content}`)\n\t\t\tdownload.current.setAttribute('download', `${name}.${format}`)\n\t\t\tdownload.current.click()\n\t\t}\n\t}, [doDownload])\n\n\tuseEffect(() => {\n\t\tif (doImport && editor.current) {\n\t\t\teditor.current.setValue('')\n\t\t\teditor.current.select()\n\t\t}\n\t}, [doImport])\n\n\tconst changeIndent = (value: string) => {\n\t\tStore.setIndent(value)\n\t\tsetIndent(value)\n\t}\n\n\tconst changeFormat = (value: string) => {\n\t\tStore.setFormat(value)\n\t\tsetFormat(value)\n\t}\n\n\tconst changeHighlighting = (value: boolean) => {\n\t\tStore.setHighlighting(value)\n\t\tsetHighlighting(value)\n\t}\n\n\treturn <> \n\t\t<div class=\"controls source-controls\">\n\t\t\t<BtnMenu icon=\"gear\" tooltip={locale('output_settings')} data-cy=\"source-controls\">\n\t\t\t\t{Object.entries(INDENT).map(([key]) =>\n\t\t\t\t\t<Btn label={locale(`indentation.${key}`)} active={indent === key}\n\t\t\t\t\t\tonClick={() => changeIndent(key)}/>\n\t\t\t\t)}\n\t\t\t\t<hr />\n\t\t\t\t{Object.keys(FORMATS).map(key =>\n\t\t\t\t\t<Btn label={locale(`format.${key}`)} active={format === key}\n\t\t\t\t\t\tonClick={() => changeFormat(key)} />)}\n\t\t\t\t<hr />\n\t\t\t\t<Btn icon={highlighting ? 'square_fill' : 'square'} label={locale('highlighting')}\n\t\t\t\t\tonClick={() => changeHighlighting(!highlighting)} />\n\t\t\t</BtnMenu>\n\t\t</div>\n\t\t{highlighting\n\t\t\t? <pre id=\"editor\" class=\"source\"></pre>\n\t\t\t: <textarea ref={textarea} class=\"source\" spellcheck={false} autocorrect=\"off\" onBlur={onImport.current}></textarea>}\n\t\t<a ref={download} style=\"display: none;\"></a>\n\t</>\n}\n","import type { INode, Path } from '@mcschema/core'\nimport { DataModel } from '@mcschema/core'\n\nexport class ModelWrapper extends DataModel {\n\tconstructor(\n\t\tschema: INode<any>,\n\t\tprivate readonly mapper: (path: Path) => Path,\n\t\tprivate readonly getter: (path: Path) => any,\n\t\tprivate readonly setter: (path: Path, value: any, silent?: boolean) => any,\n\t) {\n\t\tsuper(schema)\n\t}\n\n\tmap(path: Path) {\n\t\treturn this.mapper(path)\n\t}\n\n\tget(path: Path) {\n\t\treturn this.getter(path)\n\t}\n\n\tset(path: Path, value: any, silent?: boolean) {\n\t\treturn this.setter(path, value, silent)\n\t}\n}\n","import type { BooleanHookParams, EnumOption, Hook, INode, NodeChildren, NumberHookParams, StringHookParams, ValidationOption } from '@mcschema/core'\nimport { DataModel, ListNode, MapNode, ModelPath, ObjectNode, Path, relativePath, StringNode } from '@mcschema/core'\nimport type { ComponentChildren, JSX } from 'preact'\nimport { memo } from 'preact/compat'\nimport { useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Btn, Octicon } from '../components'\nimport { localize } from '../contexts'\nimport { useFocus } from '../hooks'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { CachedDecorator, CachedFeature } from '../services'\nimport { deepClone, deepEqual, hexId, isObject, newSeed } from '../Utils'\nimport { ModelWrapper } from './ModelWrapper'\n\nconst selectRegistries = ['loot_table.type', 'loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'recipe.type', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'dimension.generator.biome_source.preset', 'carver.type', 'feature.type', 'decorator.type', 'feature.tree.minimum_size.type', 'block_state_provider.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'int_provider.type', 'float_provider.type', 'height_provider.type', 'structure_feature.type', 'surface_builder.type', 'processor.processor_type', 'rule_test.predicate_type', 'pos_rule_test.predicate_type', 'template_element.element_type', 'block_placer.type', 'block_predicate.type', 'material_rule.type', 'material_condition.type', 'structure_placement.type', 'density_function.type']\nconst hiddenFields = ['number_provider.type', 'score_provider.type', 'nbt_provider.type', 'int_provider.type', 'float_provider.type', 'height_provider.type']\nconst flattenedFields = ['feature.config', 'decorator.config', 'int_provider.value', 'float_provider.value', 'block_state_provider.simple_state_provider.state', 'block_state_provider.rotated_block_provider.state', 'block_state_provider.weighted_state_provider.entries.entry.data', 'rule_test.block_state', 'structure_feature.config', 'surface_builder.config', 'template_pool.elements.entry.element', 'decorator.block_survives_filter.state', 'material_rule.block.result_state']\nconst inlineFields = ['loot_entry.type', 'function.function', 'condition.condition', 'criterion.trigger', 'dimension.generator.type', 'dimension.generator.biome_source.type', 'feature.type', 'decorator.type', 'block_state_provider.type', 'feature.tree.minimum_size.type', 'trunk_placer.type', 'foliage_placer.type', 'tree_decorator.type', 'block_placer.type', 'rule_test.predicate_type', 'processor.processor_type', 'template_element.element_type', 'nbt_operation.op', 'number_provider.value', 'score_provider.name', 'score_provider.target', 'nbt_provider.source', 'nbt_provider.target', 'generator_biome.biome', 'block_predicate.type', 'material_rule.type', 'material_condition.type', 'density_function.type']\nconst nbtFields = ['function.set_nbt.tag', 'advancement.display.icon.nbt', 'text_component_object.nbt', 'entity.nbt', 'block.nbt', 'item.nbt']\nconst fixedLists = ['generator_biome.parameters.temperature', 'generator_biome.parameters.humidity', 'generator_biome.parameters.continentalness', 'generator_biome.parameters.erosion', 'generator_biome.parameters.depth', 'generator_biome.parameters.weirdness', 'feature.end_spike.crystal_beam_target', 'feature.end_gateway.exit', 'decorator.block_filter.offset', 'block_predicate.matching_blocks.offset', 'block_predicate.matching_fluids.offset', 'model_element.from', 'model_element.to', 'model_element.rotation.origin', 'model_element.faces.uv', 'item_transform.rotation', 'item_transform.translation', 'item_transform.scale', 'generator_structure.random_spread.locate_offset']\nconst collapsedFields = ['noise_settings.surface_rule', 'noise_settings.noise.terrain_shaper']\nconst collapsableFields = ['density_function.argument', 'density_function.argument1', 'density_function.argument2', 'density_function.input', 'density_function.when_in_range', 'density_function.when_out_of_range']\n\nconst findGenerator = (id: string) => {\n\treturn config.generators.find(g => g.id === id.replace(/^\\$/, ''))\n}\n\n/**\n * Secondary model used to remember the keys of a map\n */\nconst keysModel = new DataModel(MapNode(\n\tStringNode(),\n\tStringNode()\n), { historyMax: 0 })\n\ntype JSXTriple = [JSX.Element | null, JSX.Element | null, JSX.Element | null]\ntype RenderHook = Hook<[any, string, VersionId, BlockStateRegistry, Record<string, any>], JSXTriple>\n\ntype NodeProps<T> = T & {\n\tnode: INode<any>,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record<string, any>,\n}\n\nexport function FullNode({ model, lang, version, blockStates }: { model: DataModel, lang: string, version: VersionId, blockStates: BlockStateRegistry }) {\n\tconst path = new ModelPath(model)\n\tconst [prefix, suffix, body] = model.schema.hook(renderHtml, path, deepClone(model.data), lang, version, blockStates, {})\n\treturn suffix?.props?.children.some((c: any) => c) ? <div class={`node ${model.schema.type(path)}-node`} data-category={model.schema.category(path)}>\n\t\t<div class=\"node-header\">{prefix}{suffix}</div>\n\t\t<div class=\"node-body\">{body}</div>\n\t</div> : body\n}\n\nconst renderHtml: RenderHook = {\n\tbase() {\n\t\treturn [null, null, null]\n\t},\n\n\tboolean(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, <BooleanSuffix {...{...params, path, value, lang, version, states, ctx}} />, null]\n\t},\n\n\tchoice({ choices, config, switchNode }, path, value, lang, version, states, ctx) {\n\t\tconst choice = switchNode.activeCase(path, true) as typeof choices[number]\n\t\tconst contextPath = (config?.context) ? new ModelPath(path.getModel(), new Path(path.getArray(), [config.context])) : path\n\t\tconst [prefix, suffix, body] = choice.node.hook(this, contextPath, value, lang, version, states, ctx)\n\t\tif (choices.length === 1) {\n\t\t\treturn [prefix, suffix, body]\n\t\t}\n\t\tconst choiceContextPath = config?.choiceContext ? new Path([], [config.choiceContext]) : config?.context ? new Path([], [config.context]) : path\n\t\tconst set = (type: string) => {\n\t\t\tconst c = choices.find(c => c.type === type) ?? choice\n\t\t\tconst def = c.node.default()\n\t\t\tconst newValue = c.change\n\t\t\t\t? c.change(DataModel.unwrapLists(value))\n\t\t\t\t: config.choiceContext === 'feature' && def?.type === 'minecraft:decorated' ? def.config.feature : def\n\t\t\tpath.model.set(path, DataModel.wrapLists(newValue))\n\t\t}\n\t\tconst inject = <select value={choice.type} onChange={(e) => set((e.target as HTMLSelectElement).value)}>\n\t\t\t{choices.map(c => <option value={c.type}>\n\t\t\t\t{pathLocale(lang, choiceContextPath.contextPush(c.type))}\n\t\t\t</option>)}\n\t\t</select>\n\t\treturn [prefix, <>{inject}{suffix}</>, body]\n\t},\n\n\tlist({ children, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\t\tconst [maxShown, setMaxShown] = useState(50)\n\n\t\tconst context = path.getContext().join('.')\n\t\tif (fixedLists.includes(context)) {\n\t\t\tconst prefix = <>\n\t\t\t\t{[...Array(config.maxLength!)].map((_, i) =>\n\t\t\t\t\t<ErrorPopup lang={lang} path={path.modelPush(i)} />)}\n\t\t\t\t<div class=\"fixed-list\"></div>\n\t\t\t</>\n\t\t\tconst suffix = <>{[...Array(config.maxLength)].map((_, i) => {\n\t\t\t\tconst child = children.hook(this, path.modelPush(i), value?.[i]?.node, lang, version, states, ctx)\n\t\t\t\treturn child[1]\n\t\t\t})}</>\n\t\t\treturn [prefix, suffix, null]\n\t\t}\n\n\t\tconst onAdd = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [{ node, id: hexId() }, ...value])\n\t\t}\n\t\tconst onAddBottom = () => {\n\t\t\tif (!Array.isArray(value)) value = []\n\t\t\tconst node = DataModel.wrapLists(children.default())\n\t\t\tpath.model.set(path, [...value, { node, id: hexId() }])\n\t\t}\n\t\tconst suffix = <button class=\"add tooltipped tip-se\" aria-label={localize(lang, 'add_top')} onClick={onAdd}>{Octicon.plus_circle}</button>\n\t\tconst body = <>\n\t\t\t{(value && Array.isArray(value)) && value.map(({ node: cValue, id: cId }, index) => {\n\t\t\t\tif (index === maxShown) {\n\t\t\t\t\treturn <div class=\"node node-header\">\n\t\t\t\t\t\t<label>{localize(lang, 'entries_hidden', `${value.length - maxShown}`)}</label>\n\t\t\t\t\t\t<button onClick={() => setMaxShown(Math.min(maxShown + 50, value.length))}>{localize(lang, 'entries_hidden.more', '50')}</button>\n\t\t\t\t\t\t<button onClick={() => setMaxShown(value.length)}>{localize(lang, 'entries_hidden.all')}</button>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\tif (index > maxShown) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\tconst cPath = path.push(index).contextPush('entry')\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(cId)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn <div class=\"node node-header\" data-category={children.category(cPath)}>\n\t\t\t\t\t\t<ErrorPopup lang={lang} path={cPath} nested />\n\t\t\t\t\t\t<button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'expand')}\\n${localize(lang, 'expand_all', 'Ctrl')}`} onClick={expand(cId)}>{Octicon.chevron_right}</button>\n\t\t\t\t\t\t<label>{pathLocale(lang, cPath, `${index}`)}</label>\n\t\t\t\t\t\t<Collapsed key={cId} path={cPath} value={cValue} schema={children} />\n\t\t\t\t\t</div>\n\t\t\t\t}\n\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\tconst onMoveUp = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index - 1], v[index]] = [v[index], v[index - 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst onMoveDown = () => {\n\t\t\t\t\tconst v = [...path.get()];\n\t\t\t\t\t[v[index + 1], v[index]] = [v[index], v[index + 1]]\n\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t}\n\t\t\t\tconst actions: MenuAction[] = [\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'duplicate',\n\t\t\t\t\t\tlabel: 'duplicate',\n\t\t\t\t\t\tonSelect: () => {\n\t\t\t\t\t\t\tconst v = [...path.get()]\n\t\t\t\t\t\t\tv.splice(index, 0, { id: hexId(), node: deepClone(cValue) })\n\t\t\t\t\t\t\tpath.model.set(path, v)\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t\treturn <MemoedTreeNode key={cId} path={cPath} schema={children} value={cValue} {...{lang, version, states, actions}} ctx={{...ctx, index: (index === 0 ? 1 : 0) + (index === value.length - 1 ? 2 : 0)}}>\n\t\t\t\t\t{canToggle && <button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'collapse')}\\n${localize(lang, 'collapse_all', 'Ctrl')}`} onClick={collapse(cId)}>{Octicon.chevron_down}</button>}\n\t\t\t\t\t<button class=\"remove tooltipped tip-se\" aria-label={localize(lang, 'remove')} onClick={onRemove}>{Octicon.trashcan}</button>\n\t\t\t\t\t{value.length > 1 && <div class=\"node-move\">\n\t\t\t\t\t\t<button class=\"move tooltipped tip-se\" aria-label={localize(lang, 'move_up')} onClick={onMoveUp} disabled={index === 0}>{Octicon.chevron_up}</button>\n\t\t\t\t\t\t<button class=\"move tooltipped tip-se\" aria-label={localize(lang, 'move_down')} onClick={onMoveDown} disabled={index === value.length - 1}>{Octicon.chevron_down}</button>\n\t\t\t\t\t</div>}\n\t\t\t\t</MemoedTreeNode>\n\t\t\t})}\n\t\t\t{(value && value.length > 0 && value.length <= maxShown) && <div class=\"node node-header\">\n\t\t\t\t<button class=\"add tooltipped tip-se\" aria-label={localize(lang, 'add_bottom')} onClick={onAddBottom}>{Octicon.plus_circle}</button>\n\t\t\t</div>}\n\t\t</>\n\t\treturn [null, suffix, body]\n\t},\n\n\tmap({ children, keys, config }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tconst keyPath = new ModelPath(keysModel, new Path([hashString(path.toString())]))\n\t\tconst onAdd = () => {\n\t\t\tconst key = keyPath.get()\n\t\t\tpath.model.set(path.push(key), DataModel.wrapLists(children.default()))\n\t\t}\n\t\tconst blockState = config.validation?.validator === 'block_state_map' ? states?.[relativePath(path, config.validation.params.id).get()] : null\n\t\tconst keysSchema = blockState?.properties\n\t\t\t? StringNode(null!, { enum: Object.keys(blockState.properties ?? {}) })\n\t\t\t: keys\n\t\tif (blockState && path.last() === 'Properties') {\n\t\t\tif (typeof value !== 'object') value = {}\n\t\t\tconst properties = Object.entries(blockState.properties ?? {})\n\t\t\t\t.map(([key, values]) => [key, StringNode(null!, { enum: values })])\n\t\t\tObject.entries(blockState.properties ?? {}).forEach(([key, values]) => {\n\t\t\t\tif (typeof value[key] !== 'string') {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.expected_string')\n\t\t\t\t} else if (!values.includes(value[key])) {\n\t\t\t\t\tpath.model.errors.add(path.push(key), 'error.invalid_enum_option', value[key])\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn ObjectNode(Object.fromEntries(properties)).hook(this, path, value, lang, version, states, ctx)\n\t\t}\n\t\tconst suffix = <>\n\t\t\t{keysSchema.hook(this, keyPath, keyPath.get() ?? '', lang, version, states, ctx)[1]}\n\t\t\t<button class=\"add tooltipped tip-se\" aria-label={localize(lang, 'add')} onClick={onAdd}>{Octicon.plus_circle}</button>\n\t\t</>\n\t\tconst body = <>\n\t\t\t{typeof value === 'object' && Object.entries(value).map(([key, cValue]) => {\n\n\t\t\t\tconst cPath = path.modelPush(key)\n\t\t\t\tconst canToggle = children.type(cPath) === 'object'\n\t\t\t\tconst toggle = isToggled(key)\n\t\t\t\tif (canToggle && (toggle === false || (toggle === undefined && value.length > 20))) {\n\t\t\t\t\treturn <div class=\"node node-header\" data-category={children.category(cPath)}>\n\t\t\t\t\t\t<ErrorPopup lang={lang} path={cPath} nested />\n\t\t\t\t\t\t<button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'expand')}\\n${localize(lang, 'expand_all', 'Ctrl')}`} onClick={expand(key)}>{Octicon.chevron_right}</button>\n\t\t\t\t\t\t<label>{key}</label>\n\t\t\t\t\t\t<Collapsed key={key} path={cPath} value={cValue} schema={children} />\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\tconst cSchema = blockState\n\t\t\t\t\t? StringNode(null!, { enum: blockState.properties?.[key] ?? [] })\n\t\t\t\t\t: children\n\t\t\t\tif (blockState?.properties?.[key] && typeof cValue === 'string'\n\t\t\t\t\t&& !blockState.properties?.[key].includes(cValue)) {\n\t\t\t\t\tpath.model.errors.add(cPath, 'error.invalid_enum_option', cValue)\n\t\t\t\t}\n\t\t\t\tconst onRemove = () => cPath.set(undefined)\n\t\t\t\treturn <MemoedTreeNode key={key} schema={cSchema} path={cPath} value={cValue} {...{lang, version, states, ctx}} label={key}>\n\t\t\t\t\t{canToggle && <button class=\"toggle tooltipped tip-se\" aria-label={`${localize(lang, 'collapse')}\\n${localize(lang, 'collapse_all', 'Ctrl')}`} onClick={collapse(key)}>{Octicon.chevron_down}</button>}\n\t\t\t\t\t<button class=\"remove tooltipped tip-se\" aria-label={localize(lang, 'remove')} onClick={onRemove}>{Octicon.trashcan}</button>\n\t\t\t\t</MemoedTreeNode>\n\t\t\t})}\n\t\t</>\n\t\treturn [null, suffix, body]\n\t},\n\n\tnumber(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, <NumberSuffix {...{...params, path, value, lang, version, states, ctx}} />, null]\n\t},\n\n\tobject({ node, config, getActiveFields, getChildModelPath }, path, value, lang, version, states, ctx) {\n\t\tconst { expand, collapse, isToggled } = useToggles()\n\n\t\tif (path.getArray().length == 0 && isDecorated(config.context, value)) {\n\t\t\tconst { wrapper, fields } = createDecoratorsWrapper(getActiveFields(path), path, value)\n\t\t\tvalue = wrapper.data\n\t\t\tgetActiveFields = () => fields\n\t\t\tgetChildModelPath = (path, key) => new ModelPath(wrapper, new Path(path.getArray(), ['feature'])).push(key)\n\t\t}\n\n\t\tlet prefix: JSX.Element | null = null\n\t\tlet suffix: JSX.Element | null = null\n\t\tif (node.optional()) {\n\t\t\tif (value === undefined) {\n\t\t\t\tconst onExpand = () => path.set(DataModel.wrapLists(node.default()))\n\t\t\t\tsuffix = <button class=\"collapse closed tooltipped tip-se\" aria-label={localize(lang, 'expand')} onClick={onExpand}>{Octicon.plus_circle}</button>\n\t\t\t} else {\n\t\t\t\tconst onCollapse = () => path.set(undefined)\n\t\t\t\tsuffix = <button class=\"collapse open tooltipped tip-se\" aria-label={localize(lang, 'remove')} onClick={onCollapse}>{Octicon.trashcan}</button>\n\t\t\t}\n\t\t}\n\t\tconst context = path.getContext().join('.')\n\t\tif (collapsableFields.includes(context) || collapsedFields.includes(context)) {\n\t\t\tconst toggled = isToggled('')\n\t\t\tconst expanded = collapsedFields.includes(context) ? toggled : !toggled\n\t\t\tprefix = <>\n\t\t\t\t<button class=\"toggle tooltipped tip-se\" aria-label={localize(lang, expanded ? 'collapse' : 'expand')} onClick={toggled ? collapse('') : expand('')}>{expanded ? Octicon.chevron_down : Octicon.chevron_right}</button>\n\t\t\t</>\n\t\t\tif (!expanded) {\n\t\t\t\treturn [prefix, suffix, null]\n\t\t\t}\n\t\t}\n\n\t\tconst newCtx = (typeof value === 'object' && value !== null && node.default()?.pools)\n\t\t\t? { ...ctx, loot: value?.type } : ctx\n\t\tconst body = <>\n\t\t\t{(typeof value === 'object' && value !== null && !(node.optional() && value === undefined)) &&\n\t\t\t\tObject.entries(getActiveFields(path))\n\t\t\t\t\t.filter(([_, child]) => child.enabled(path))\n\t\t\t\t\t.map(([key, child]) => {\n\t\t\t\t\t\tconst cPath = getChildModelPath(path, key)\n\t\t\t\t\t\tconst context = cPath.getContext().join('.')\n\t\t\t\t\t\tif (hiddenFields.includes(context)) return null\n\t\t\t\t\t\tconst [cPrefix, cSuffix, cBody] = child.hook(this, cPath, value[key], lang, version, states, newCtx)\n\t\t\t\t\t\tconst isFlattened = child.type(cPath) === 'object' && flattenedFields.includes(context)\n\t\t\t\t\t\tconst isInlined = inlineFields.includes(context)\n\t\t\t\t\t\tif (isFlattened || isInlined) {\n\t\t\t\t\t\t\tprefix = <>{prefix}<ErrorPopup lang={lang} path={cPath} /><HelpPopup lang={lang} path={cPath} />{cPrefix}</>\n\t\t\t\t\t\t\tsuffix = <>{suffix}{cSuffix}</>\n\t\t\t\t\t\t\treturn isFlattened ? cBody : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn <MemoedTreeNode key={key} schema={child} path={cPath} value={value[key]} {...{lang, version, states, ctx: newCtx}} />\n\t\t\t\t\t})\n\t\t\t}\n\t\t</>\n\t\treturn [prefix, suffix, body]\n\t},\n\n\tstring(params, path, value, lang, version, states, ctx) {\n\t\treturn [null, <StringSuffix {...{...params, path, value, lang, version, states, ctx}} />, null]\n\t},\n}\n\nfunction Collapsed({ path, value }: { path: ModelPath, value: any, schema: INode<any> }) {\n\tconst context = path.getContext().join('.')\n\tswitch (context) {\n\t\tcase 'loot_table.pools.entry':\n\t\t\treturn <label>{value?.entries?.length ?? 0} entries</label>\n\t\tcase 'function.set_contents.entries.entry':\n\t\tcase 'loot_pool.entries.entry':\n\t\t\treturn <label>{value?.name?.replace(/^minecraft:/, '') ?? value?.type?.replace(/^minecraft:/, '')}</label>\n\t}\n\tfor (const child of Object.values(value ?? {})) {\n\t\tif (typeof child === 'string') {\n\t\t\treturn <label>{child.replace(/^minecraft:/, '')}</label>\n\t\t}\n\t}\n\treturn null\n}\n\nfunction useToggles() {\n\tconst [toggleState, setToggleState] = useState(new Map<string, boolean>())\n\tconst [toggleAll, setToggleAll] = useState<boolean | undefined>(undefined)\n\n\tconst expand = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(true)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, true)))\n\t\t}\n\t}\n\tconst collapse = (key: string) => (evt: MouseEvent) => {\n\t\tif (evt.ctrlKey) {\n\t\t\tsetToggleState(new Map())\n\t\t\tsetToggleAll(false)\n\t\t} else {\n\t\t\tsetToggleState(state => new Map(state.set(key, false)))\n\t\t}\n\t}\n\t\n\tconst isToggled = (key: string) => {\n\t\tif (!(toggleState instanceof Map)) return false\n\t\treturn toggleState.get(key) ?? toggleAll\n\t}\n\n\treturn { expand, collapse, isToggled }\n}\n\nfunction BooleanSuffix({ path, node, value, lang }: NodeProps<BooleanHookParams>) {\n\tconst set = (target: boolean) => {\n\t\tpath.model.set(path, node.optional() && value === target ? undefined : target)\n\t}\n\treturn <>\n\t\t<button class={value === false ? 'selected' : ''} onClick={() => set(false)}>{localize(lang, 'false')}</button>\n\t\t<button class={value === true ? 'selected' : ''} onClick={() => set(true)}>{localize(lang, 'true')}</button>\n\t</>\n}\n\nfunction NumberSuffix({ path, config, integer, value, lang }: NodeProps<NumberHookParams>) {\n\tconst onChange = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = integer ? parseInt(value) : parseFloat(value)\n\t\tpath.model.set(path, parsed)\n\t}\n\tconst onColor = (evt: Event) => {\n\t\tconst value = (evt.target as HTMLInputElement).value\n\t\tconst parsed = parseInt(value.slice(1), 16)\n\t\tpath.model.set(path, parsed)\n\t}\n\treturn <>\n\t\t<input type=\"text\" value={value ?? ''} onBlur={onChange} onKeyDown={evt => {if (evt.key === 'Enter') onChange(evt)}} />\n\t\t{config?.color && <input type=\"color\" value={'#' + (value?.toString(16).padStart(6, '0') ?? '000000')} onChange={onColor} />}\n\t\t{['dimension.generator.seed', 'dimension.generator.biome_source.seed', 'world_settings.seed'].includes(path.getContext().join('.')) && <button onClick={() => newSeed(path.model)} class=\"tooltipped tip-se\" aria-label={localize(lang, 'generate_new_seed')}>{Octicon.sync}</button>}\n\t</>\n}\n\nfunction StringSuffix({ path, getValues, config, node, value, lang, version, states }: NodeProps<StringHookParams>) {\n\tconst onChange = (evt: Event) => {\n\t\tevt.stopPropagation()\n\t\tconst newValue = (evt.target as HTMLSelectElement).value\n\t\tif (newValue === value) return\n\t\tpath.model.set(path, newValue.length === 0 ? undefined : newValue)\n\t}\n\tconst values = getValues()\n\tconst context = path.getContext().join('.')\n\tconst id = !isEnum(config) && config?.validator === 'resource' && typeof config.params.pool === 'string' ? config.params.pool : undefined\n\n\tif (nbtFields.includes(context)) {\n\t\treturn <textarea value={value ?? ''} onBlur={onChange}></textarea>\n\t} else if ((isEnum(config) && !config.additional) || selectRegistries.includes(context)) {\n\t\tlet context = new Path([])\n\t\tif (isEnum(config) && typeof config.enum === 'string') {\n\t\t\tcontext = context.contextPush(config.enum)\n\t\t} else if (id) {\n\t\t\tcontext = context.contextPush(id)\n\t\t} else if (isEnum(config)) {\n\t\t\tcontext = path\n\t\t}\n\t\treturn <select value={value ?? ''} onChange={onChange}>\n\t\t\t{node.optional() && <option value=\"\">{localize(lang, 'unset')}</option>}\n\t\t\t{values.map(v => <option value={v}>\n\t\t\t\t{pathLocale(lang, context.contextPush(v.replace(/^minecraft:/, '')))}\n\t\t\t</option>)}\n\t\t</select>\n\t} else if (!isEnum(config) && config?.validator === 'block_state_key') {\n\t\tconst blockState = states?.[relativePath(path, config.params.id).get()]\n\t\tconst values = Object.keys(blockState?.properties ?? {})\n\t\treturn <select value={value ?? ''} onChange={onChange}>\n\t\t\t{values.map(v => <option>{v}</option>)}\n\t\t</select>\n\t} else {\n\t\tconst datalistId = hexId()\n\t\tconst gen = id ? findGenerator(id) : undefined\n\t\treturn <>\n\t\t\t<input value={value ?? ''} onBlur={onChange} onKeyDown={evt => {if (evt.key === 'Enter') onChange(evt)}}\n\t\t\t\tlist={values.length > 0 ? datalistId : ''} />\n\t\t\t{values.length > 0 && <datalist id={datalistId}>\n\t\t\t\t{values.map(v => <option value={v} />)}\n\t\t\t</datalist>}\n\t\t\t{gen && values.includes(value) && value.startsWith('minecraft:') &&\n\t\t\t\t<a href={`/${gen.url}/?version=${version}&preset=${value.replace(/^minecraft:/, '')}`} class=\"tooltipped tip-se\" aria-label={localize(lang, 'follow_reference')}>{Octicon.link_external}</a>}\n\t\t</>\n\t}\n}\n\ntype MenuAction = {\n\tlabel: string,\n\tdescription?: string,\n\ticon: keyof typeof Octicon,\n\tonSelect: () => unknown,\n}\n\ntype TreeNodeProps = {\n\tschema: INode<any>,\n\tpath: ModelPath,\n\tvalue: any,\n\tlang: string,\n\tversion: VersionId,\n\tstates: BlockStateRegistry,\n\tctx: Record<string, any>,\n\tcompare?: any,\n\tlabel?: string,\n\tactions?: MenuAction[],\n\tchildren?: ComponentChildren,\n}\nfunction TreeNode({ label, schema, path, value, lang, version, states, ctx, actions, children }: TreeNodeProps) {\n\tconst type = schema.type(path)\n\tconst category = schema.category(path)\n\tconst context = path.getContext().join('.')\n\n\tconst [active, setActive] = useFocus()\n\tconst onContextMenu = (evt: MouseEvent) => {\n\t\tevt.preventDefault()\n\t\tsetActive()\n\t}\n\n\tconst newCtx: Record<string, any> = { ...ctx, depth: (ctx.depth ?? 0) + 1 }\n\tdelete newCtx.index\n\tconst [prefix, suffix, body] = schema.hook(renderHtml, path, value, lang, version, states, newCtx)\n\treturn <div class={`node ${type}-node`} data-category={category}>\n\t\t<div class=\"node-header\" onContextMenu={onContextMenu}>\n\t\t\t<ErrorPopup lang={lang} path={path} />\n\t\t\t<HelpPopup lang={lang} path={path} />\n\t\t\t{children}\n\t\t\t{prefix}\n\t\t\t<label>\n\t\t\t\t{label ?? pathLocale(lang, path, `${path.last()}`)}\n\t\t\t\t{active && <div class=\"node-menu\">\n\t\t\t\t\t{actions?.map(a => <div key={a.label} class=\"menu-item\">\n\t\t\t\t\t\t<Btn icon={a.icon} tooltip={localize(lang, a.label)} tooltipLoc=\"se\" onClick={() => a.onSelect()}/>\n\t\t\t\t\t\t<span>{a.description ?? localize(lang, a.label)}</span>\n\t\t\t\t\t</div>)}\n\t\t\t\t\t<div class=\"menu-item\">\n\t\t\t\t\t\t<Btn icon=\"clippy\" tooltip={localize(lang, 'copy_context')} tooltipLoc=\"se\" onClick={() => navigator.clipboard.writeText(context)} />\n\t\t\t\t\t\t<span>{context}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>}\n\t\t\t</label>\n\t\t\t{suffix}\n\t\t</div>\n\t\t{body && <div class=\"node-body\">{body}</div>}\n\t</div>\n}\n\nconst MemoedTreeNode = memo(TreeNode, (prev, next) => {\n\treturn prev.schema === next.schema\n\t\t&& prev.lang === next.lang\n\t\t&& prev.path.equals(next.path)\n\t\t&& deepEqual(prev.ctx, next.ctx)\n\t\t&& deepEqual(prev.value, next.value)\n})\n\nfunction isEnum(value?: ValidationOption | EnumOption): value is EnumOption {\n\treturn !!(value as any)?.enum\n}\n\nfunction hashString(str: string) {\n\tvar hash = 0, i, chr\n\tfor (i = 0; i < str.length; i++) {\n\t\tchr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t\thash |= 0\n\t}\n\treturn hash\n}\n\nfunction pathLocale(lang: string, path: Path, ...params: string[]) {\n\tconst ctx = path.getContext()\n\tfor (let i = 0; i < ctx.length; i += 1) {\n\t\tconst key = ctx.slice(i).join('.')\n\t\tconst result = localize(lang, key, ...params)\n\t\tif (key !== result) {\n\t\t\treturn result\n\t\t}\n\t}\n\treturn ctx[ctx.length - 1]\n}\n\nfunction ErrorPopup({ lang, path, nested }: { lang: string, path: ModelPath, nested?: boolean }) {\n\tif (path.model instanceof ModelWrapper) {\n\t\tpath = path.model.map(path).withModel(path.model)\n\t}\n\tconst e = nested\n\t\t?\tpath.model.errors.getAll().filter(e => e.path.startsWith(path))\n\t\t: path.model.errors.get(path, true)\n\tif (e.length === 0) return null\n\tconst message = localize(lang, e[0].error, ...(e[0].params ?? []))\n\treturn popupIcon('node-error', 'issue_opened', message)\n}\n\nfunction HelpPopup({ lang, path }: { lang: string, path: Path }) {\n\tconst key = path.contextPush('help').getContext().join('.')\n\tconst message = localize(lang, key)\n\tif (message === key) return null\n\treturn popupIcon('node-help', 'info', message)\n}\n\nconst popupIcon = (type: string, icon: keyof typeof Octicon, popup: string) => {\n\tconst [active, setActive] = useFocus()\n\n\treturn <div class={`node-icon ${type}${active ? ' show' : ''}`} onClick={setActive}>\n\t\t{Octicon[icon]}\n\t\t<span class=\"icon-popup\">{popup}</span>\n\t</div>\n}\n\nfunction isDecorated(context: string | undefined, value: any) {\n\treturn context === 'feature'\n\t\t&& value?.type?.replace(/^minecraft:/, '') === 'decorated'\n\t\t&& isObject(value?.config)\n}\n\nfunction createDecoratorsWrapper(originalFields: NodeChildren, path: ModelPath, value: any) {\n\tconst decorators: any[] = []\n\tconst feature = iterateNestedDecorators(value, decorators)\n\tconst fields = {\n\t\ttype: originalFields.type,\n\t\tconfig: ObjectNode({\n\t\t\tdecorators: ListNode(CachedDecorator),\n\t\t\tfeature: CachedFeature,\n\t\t}, { context: 'feature.decorated' }),\n\t}\n\tconst schema = ObjectNode(fields, { context: 'feature' })\n\tconst featurePath = new Path(['config', 'feature'])\n\tconst decoratorsPath = new Path(['config', 'decorators'])\n\tconst model = path.getModel()\n\tconst wrapper: ModelWrapper = new ModelWrapper(schema, path => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\treturn new Path([...[...Array(decorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\treturn new Path([])\n\t\t\t}\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (typeof index === 'number') {\n\t\t\t\treturn new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t}\n\t\t}\n\t\treturn path\n\t}, path => {\n\t\tif (path.equals(decoratorsPath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\treturn newDecorators\n\t\t}\n\t\treturn model.get(wrapper.map(path))\n\t}, (path, value, silent) => {\n\t\tif (path.startsWith(featurePath)) {\n\t\t\tconst newDecorators: any[] = []\n\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\tconst newPath =new Path([...[...Array(newDecorators.length - 1)].flatMap(() => ['config', 'feature']), ...path.modelArr])\n\t\t\treturn model.set(newPath, value, silent)\n\t\t} else if (path.startsWith(decoratorsPath)) {\n\t\t\tconst index = path.modelArr[2]\n\t\t\tif (path.modelArr.length === 2) {\n\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\treturn model.set(new Path(), produceNestedDecorators(feature, value), silent)\n\t\t\t} else if (typeof index === 'number') {\n\t\t\t\tif (path.modelArr.length === 3 && value === undefined) {\n\t\t\t\t\tconst feature = wrapper.get(featurePath)\n\t\t\t\t\tconst newDecorators: any[] = []\n\t\t\t\t\titerateNestedDecorators(model.data, newDecorators)\n\t\t\t\t\tnewDecorators.splice(index, 1)\n\t\t\t\t\tconst newValue = produceNestedDecorators(feature, newDecorators)\n\t\t\t\t\treturn model.set(new Path(), newValue, silent)\n\t\t\t\t} else {\n\t\t\t\t\tconst newPath = new Path([...[...Array(index)].flatMap(() => ['config', 'feature']), 'config', 'decorator', ...path.modelArr.slice(3)])\n\t\t\t\t\treturn model.set(newPath, value, silent)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tmodel.set(path, value, silent)\n\t})\n\twrapper.data = {\n\t\ttype: model.data.type,\n\t\tconfig: {\n\t\t\tdecorators,\n\t\t\tfeature,\n\t\t},\n\t}\n\twrapper.errors = model.errors\n\treturn { fields, wrapper }\n}\n\nfunction iterateNestedDecorators(value: any, decorators: any[]): any {\n\tif (value?.type?.replace(/^minecraft:/, '') !== 'decorated') {\n\t\treturn value\n\t}\n\tif (!isObject(value?.config)) {\n\t\treturn value\n\t}\n\tdecorators.push({ id: decorators.length, node: value.config.decorator })\n\treturn iterateNestedDecorators(value.config.feature ?? '', decorators)\n}\n\nfunction produceNestedDecorators(feature: any, decorators: any[]): any {\n\tif (decorators.length === 0) return feature\n\treturn {\n\t\ttype: 'minecraft:decorated',\n\t\tconfig: {\n\t\t\tdecorator: decorators.shift().node,\n\t\t\tfeature: produceNestedDecorators(feature, decorators),\n\t\t},\n\t}\n}\n","import type { DataModel } from '@mcschema/core'\nimport { useErrorBoundary, useState } from 'preact/hooks'\nimport { useLocale } from '../../contexts'\nimport { useModel } from '../../hooks'\nimport { FullNode } from '../../schema/renderHtml'\nimport type { BlockStateRegistry, VersionId } from '../../services'\n\ntype TreePanelProps = {\n\tversion: VersionId,\n\tmodel: DataModel | null,\n\tblockStates: BlockStateRegistry | null,\n\tonError: (message: string) => unknown,\n}\nexport function Tree({ version, model, blockStates, onError }: TreePanelProps) {\n\tconst { lang } = useLocale()\n\tif (!model || !blockStates || lang === 'none') return <></>\n\n\tconst [error] = useErrorBoundary(e => {\n\t\tonError(`Error rendering the tree: ${e.message}`)\n\t\tconsole.error(e)\n\t})\n\tif (error) return <></>\n\n\tconst [, setState] = useState(0)\n\tuseModel(model, () => {\n\t\tsetState(state => state + 1)\n\t})\n\n\treturn <div class=\"tree\" data-cy=\"tree\">\n\t\t<FullNode {...{model, lang, version, blockStates}}/>\n\t</div>\n}\n","import { Giscus as GiscusReact } from '@giscus/react'\nimport { useTheme } from '../contexts'\n\ninterface Props {\n\tterm?: string,\n}\nexport function Giscus({ term }: Props) {\n\tconst { actualTheme } = useTheme()\n\tconst themeSuffix = actualTheme === 'light' ? '-burn' : ''\n\tconst themeUrl = (import.meta as any).env.DEV\n\t\t? `http://localhost:3000/src/styles/giscus${themeSuffix}.css`\n\t\t: `https://${location.host}/assets/giscus${themeSuffix}.css`\n\n\treturn <GiscusReact\n\t\trepo=\"misode/misode.github.io\"\n\t\trepoId=\"MDEwOlJlcG9zaXRvcnkxOTIyNTQyMzA=\"\n\t\tcategory=\"Site\"\n\t\tcategoryId=\"DIC_kwDOC3WRFs4COB8r\"\n\t\tmapping={term ? 'specific' : 'pathname'}\n\t\tterm={term}\n\t\treactionsEnabled=\"1\"\n\t\temitMetadata=\"0\"\n\t\tinputPosition=\"top\"\n\t\ttheme={themeUrl}\n\t\tlang=\"en\" />\n}\n","import { getCurrentUrl, Link, route } from 'preact-router'\nimport { Btn, BtnMenu, Icons, Octicon } from '.'\nimport config from '../../config.json'\nimport { useLocale, useTheme, useTitle, useVersion } from '../contexts'\nimport { checkVersion } from '../services'\nimport { cleanUrl, getGenerator } from '../Utils'\n\nconst Themes: Record<string, keyof typeof Octicon> = {\n\tsystem: 'device_desktop',\n\tdark: 'moon',\n\tlight: 'sun',\n}\n\nexport function Header() {\n\tconst { lang, locale, changeLanguage } = useLocale()\n\tconst { theme, changeTheme } = useTheme()\n\tconst { version } = useVersion()\n\tconst { title } = useTitle()\n\tconst gen = getGenerator(getCurrentUrl())\n\n\treturn <header>\n\t\t<div class=\"title\">\n\t\t\t<Link class=\"home-link\" href=\"/\" aria-label={locale('home')} data-cy=\"home-link\">{Icons.home}</Link>\n\t\t\t<h1>{title}</h1>\n\t\t\t{gen && <BtnMenu icon=\"chevron_down\" tooltip={locale('switch_generator')} data-cy=\"generator-switcher\">\n\t\t\t\t{config.generators\n\t\t\t\t\t.filter(g => g.category === gen?.category && checkVersion(version, g.minVersion))\n\t\t\t\t\t.map(g =>\n\t\t\t\t\t\t<Btn label={locale(g.id)} active={g.id === gen.id} onClick={() => route(cleanUrl(g.url))} />\n\t\t\t\t\t)}\n\t\t\t</BtnMenu>}\n\t\t</div>\n\t\t<nav>\n\t\t\t<ul>\n\t\t\t\t<li data-cy=\"language-switcher\">\n\t\t\t\t\t<BtnMenu icon=\"globe\" tooltip={locale('language')}>\n\t\t\t\t\t\t{config.languages.map(({ code, name }) =>\n\t\t\t\t\t\t\t<Btn label={name} active={code === lang}\n\t\t\t\t\t\t\t\tonClick={() => changeLanguage(code)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t</li>\n\t\t\t\t<li data-cy=\"theme-switcher\">\n\t\t\t\t\t<BtnMenu icon={Themes[theme]} tooltip={locale('theme')}>\n\t\t\t\t\t\t{Object.entries(Themes).map(([th, icon]) =>\n\t\t\t\t\t\t\t<Btn icon={icon} label={locale(`theme.${th}`)} active={th === theme}\n\t\t\t\t\t\t\t\tonClick={() => changeTheme(th)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t</li>\n\t\t\t\t<li class=\"dimmed\">\n\t\t\t\t\t<a href=\"https://github.com/misode/misode.github.io\" target=\"_blank\" rel=\"noreferrer\" class=\"tooltipped tip-sw\" aria-label={locale('github')}>\n\t\t\t\t\t\t{Octicon.mark_github}\n\t\t\t\t\t</a>\n\t\t\t\t</li>\n\t\t\t</ul>\n\t\t</nav>\n\t</header>\n}\n","export const Icons = {\n\thome: <svg width=\"32\" height=\"28\" viewBox=\"0 0 32 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"26\" height=\"6\" rx=\"3\" fill=\"#7CB45C\"/><rect x=\"8\" width=\"18\" height=\"6\" rx=\"3\" fill=\"#4BA041\"/><rect y=\"11\" width=\"32\" height=\"6\" rx=\"3\" fill=\"#AAA8A8\"/><rect x=\"11\" y=\"11\" width=\"21\" height=\"6\" rx=\"3\" fill=\"#91908F\"/><rect x=\"11\" y=\"22\" width=\"21\" height=\"6\" rx=\"3\" fill=\"#70B5C3\"/><rect x=\"17\" y=\"22\" width=\"15\" height=\"6\" rx=\"3\" fill=\"#4D989B\"/></svg>,\n\treport: <svg width=\"30\" height=\"36\" viewBox=\"0 0 30 36\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 16C0 13.7909 1.79086 12 4 12V12C6.20914 12 8 13.7909 8 16V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V16Z\" fill=\"#6ACC5D\"/><path d=\"M11 4C11 1.79086 12.7909 0 15 0V0C17.2091 0 19 1.79086 19 4V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V4Z\" fill=\"#FF4C4C\"/><path d=\"M22 10C22 7.79086 23.7909 6 26 6V6C28.2091 6 30 7.79086 30 10V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V10Z\" fill=\"#E5B442\"/><path d=\"M0 23C0 20.7909 1.79086 19 4 19V19C6.20914 19 8 20.7909 8 23V32C8 34.2091 6.20914 36 4 36V36C1.79086 36 0 34.2091 0 32V23Z\" fill=\"#2BAD1D\"/><path d=\"M11 15C11 12.7909 12.7909 11 15 11V11C17.2091 11 19 12.7909 19 15V32C19 34.2091 17.2091 36 15 36V36C12.7909 36 11 34.2091 11 32V15Z\" fill=\"#C10B0B\"/><path d=\"M22 19C22 16.7909 23.7909 15 26 15V15C28.2091 15 30 16.7909 30 19V32C30 34.2091 28.2091 36 26 36V36C23.7909 36 22 34.2091 22 32V19Z\" fill=\"#CC8E00\"/></svg>,\n\tsounds: <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"10\" cy=\"10\" r=\"10\" fill=\"#451475\"/><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M3.5 10C3.5 8.27609 4.18482 6.62279 5.40381 5.40381C6.62279 4.18482 8.27609 3.5 10 3.5C11.7239 3.5 13.3772 4.18482 14.5962 5.40381C15.8152 6.62279 16.5 8.27609 16.5 10C16.5 11.7239 15.8152 13.3772 14.5962 14.5962C13.3772 15.8152 11.7239 16.5 10 16.5C8.27609 16.5 6.62279 15.8152 5.40381 14.5962C4.18482 13.3772 3.5 11.7239 3.5 10V10ZM10 2C7.87827 2 5.84344 2.84285 4.34315 4.34315C2.84285 5.84344 2 7.87827 2 10C2 12.1217 2.84285 14.1566 4.34315 15.6569C5.84344 17.1571 7.87827 18 10 18C12.1217 18 14.1566 17.1571 15.6569 15.6569C17.1571 14.1566 18 12.1217 18 10C18 7.87827 17.1571 5.84344 15.6569 4.34315C14.1566 2.84285 12.1217 2 10 2V2ZM8.379 7.227C8.34101 7.20412 8.29762 7.19175 8.25327 7.19117C8.20892 7.19059 8.16522 7.20181 8.12664 7.2237C8.08807 7.24558 8.05601 7.27733 8.03375 7.3157C8.0115 7.35406 7.99985 7.39765 8 7.442V12.559C8.00003 12.6033 8.0118 12.6467 8.03413 12.685C8.05646 12.7232 8.08854 12.7548 8.12708 12.7765C8.16563 12.7983 8.20926 12.8095 8.25352 12.8088C8.29778 12.8082 8.34108 12.7958 8.379 12.773L12.643 10.214C12.6798 10.1917 12.7103 10.1604 12.7315 10.1229C12.7526 10.0854 12.7638 10.043 12.7638 10C12.7638 9.95695 12.7526 9.91463 12.7315 9.87714C12.7103 9.83965 12.6798 9.80825 12.643 9.786L8.379 7.227Z\" fill=\"#C5A5E6\"/></svg>,\n}\n","import { Howl } from 'howler'\nimport { useEffect, useRef, useState } from 'preact/hooks'\nimport { Btn, NumberInput, RangeInput, TextInput } from '..'\nimport { useLocale, useVersion } from '../../contexts'\nimport type { SoundEvents } from '../../services'\nimport { getSoundUrl } from '../../services'\n\nexport interface SoundConfig {\n\tid: string,\n\tsound: string,\n\tdelay: number,\n\tpitch: number,\n\tvolume: number,\n}\ntype SoundConfigProps = SoundConfig & {\n\tsounds: SoundEvents,\n\tonEdit: (changes: Partial<SoundConfig>) => unknown,\n\tonDelete: () => unknown,\n\tdelayedPlay?: number,\n}\nexport function SoundConfig({ sounds, sound, delay, pitch, volume, onEdit, onDelete, delayedPlay }: SoundConfigProps) {\n\tconst { locale } = useLocale()\n\tconst { version } = useVersion()\n\tconst [loading, setLoading] = useState(true)\n\tconst [playing, setPlaying] = useState(false)\n\tconst [invalid, setInvalid] = useState(false)\n\tconst howls = useRef<Howl[]>([])\n\tconst command = `playsound minecraft:${sound} master @s ~ ~ ~ ${volume} ${pitch}`\n\n\tuseEffect(() => {\n\t\tconst soundEvent = sounds[sound]\n\t\tsetInvalid((soundEvent?.sounds?.length ?? 0) === 0)\n\t\thowls.current.forEach(h => h.stop())\n\t\thowls.current = (soundEvent?.sounds ?? []).map(entry => {\n\t\t\tconst soundPath = typeof entry === 'string' ? entry : entry.name\n\t\t\tconst url = getSoundUrl(version, soundPath)\n\t\t\tconst howl = new Howl({\n\t\t\t\tsrc: [url],\n\t\t\t\tformat: ['ogg'],\n\t\t\t\tvolume,\n\t\t\t\trate: pitch,\n\t\t\t})\n\t\t\thowl.on('end', () => {\n\t\t\t\tsetPlaying(false)\n\t\t\t})\n\t\t\tconst completed = () => {\n\t\t\t\tif (loading && howls.current.every(h => h.state() === 'loaded')) {\n\t\t\t\t\tsetLoading(false)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (howl.state() === 'loaded') {\n\t\t\t\tsetTimeout(() => completed())\n\t\t\t} else {\n\t\t\t\thowl.on('load', () => {\n\t\t\t\t\tcompleted()\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn howl\n\t\t})\n\t\tsetLoading(true)\n\t}, [sound, sounds])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.rate(pitch))\n\t}, [pitch])\n\n\tuseEffect(() => {\n\t\thowls.current.forEach(h => h.volume(volume))\n\t}, [volume])\n\n\tconst play = () => {\n\t\tif (loading || invalid) return\n\t\tstop()\n\t\tconst howl = Math.floor(Math.random() * howls.current.length)\n\t\thowls.current[howl].play()\n\t\tsetPlaying(true)\n\t}\n\tconst stop = () => {\n\t\thowls.current.forEach(h => h.stop())\n\t}\n\tuseEffect(() => {\n\t\tif (delayedPlay) setTimeout(() => play(), delay * 50)\n\t}, [delayedPlay])\n\n\tuseEffect(() => {\n\t\treturn () => stop()\n\t}, [])\n\n\tconst [copyActive, setCopyActive] = useState(false)\n\tconst copyTimeout = useRef<number | undefined>(undefined)\n\tconst copy = () => {\n\t\tnavigator.clipboard.writeText(command)\n\t\tsetCopyActive(true)\n\t\tif (copyTimeout.current !== undefined) clearTimeout(copyTimeout.current)\n\t\tcopyTimeout.current = setTimeout(() => {\n\t\t\tsetCopyActive(false)\n\t\t}, 2000) as any\n\t}\n\n\treturn <div class={`sound-config${loading ? ' loading' : playing ? ' playing' : ''}${invalid ? ' invalid' : ''}`}>\n\t\t<Btn class=\"play\" icon={invalid ? 'alert' : loading ? 'sync' : 'play'} label={locale('sounds.play')} onClick={play} tooltip={invalid ? locale('sounds.unknown_sound') : loading ? locale('sounds.loading_sound') : locale('sounds.play_sound')} tooltipLoc=\"se\" />\n\t\t<TextInput class=\"btn btn-input sound\" list=\"sound-list\" spellcheck={false}\n\t\t\tvalue={sound} onChange={sound => onEdit({ sound })} />\n\t\t<label class=\"delay-label\">{locale('sounds.delay')}: </label>\n\t\t<NumberInput class=\"btn btn-input delay\" min={0}\n\t\t\tvalue={delay} onChange={delay => onEdit({ delay })} />\n\t\t<label class=\"pitch-label\">{locale('sounds.pitch')}: </label>\n\t\t<RangeInput class=\"pitch tooltipped tip-s\" min={0.5} max={2} step={0.01}\n\t\t\taria-label={pitch.toFixed(2)} style={`--x: ${(pitch - 0.5) * (100 / 1.5)}%`}\n\t\t\tvalue={pitch} onChange={pitch => onEdit({ pitch })} />\n\t\t<label class=\"volume-label\">{locale('sounds.volume')}: </label>\n\t\t<RangeInput class=\"volume tooltipped tip-s\" min={0} max={1} step={0.01}\n\t\t\taria-label={volume.toFixed(2)} style={`--x: ${volume * 100}%`}\n\t\t\tvalue={volume} onChange={volume => onEdit({ volume })} />\n\t\t<Btn class={`copy${copyActive ? ' active' : ''}`} icon={copyActive ? 'check' : 'terminal'} label={locale('copy')} tooltip={copyActive ? locale('copied') : locale('sounds.copy_command')}\n\t\t\tonClick={copy} />\n\t\t<Btn class=\"remove\" icon=\"trashcan\" tooltip={locale('sounds.remove_sound')}\n\t\t\tonClick={() => {onDelete(); stop()}} />\n\t</div>\n}\n","import type { ComponentChildren } from 'preact'\nimport { Icons } from './Icons'\n\ntype ToolCardProps = {\n\ttitle: string,\n\tdesc?: string,\n\tlink?: string,\n\ticon?: keyof typeof Icons,\n\tchildren?: ComponentChildren,\n}\nexport function ToolCard({ title, desc, link, icon, children }: ToolCardProps) {\n\tconst content = <>\n\t\t<div class=\"tool-head\">\n\t\t\t{icon && Icons[icon]}\n\t\t\t<div>\n\t\t\t\t<h3>{title}</h3>\n\t\t\t\t<p>{desc}</p>\n\t\t\t</div>\n\t\t</div>\n\t\t{children && <div class=\"tool-body\">\n\t\t\t{children}\n\t\t</div>}\n\t</>\n\treturn link\n\t\t? <a class=\"tool-card\" href={link}>{content}</a>\n\t\t: <div class=\"tool-card\">{content}</div>\n}\n","import { useMemo, useState } from 'preact/hooks'\nimport { Octicon } from '.'\n\nconst SEPARATOR = '/'\n\ninterface Props {\n\tentries: string[],\n\tonSelect: (entry: string) => unknown,\n\tindent?: number,\n}\nexport function TreeView({ entries, onSelect, indent }: Props) {\n\tconst roots = useMemo(() => {\n\t\tconst groups: Record<string, string[]> = {}\n\t\tfor (const entry of entries) {\n\t\t\tconst i = entry.indexOf(SEPARATOR)\n\t\t\tif (i >= 0) {\n\t\t\t\tconst root = entry.slice(0, i)\n\t\t\t\t;(groups[root] ??= []).push(entry.slice(i + 1))\n\t\t\t}\n\t\t}\n\t\treturn Object.entries(groups)\n\t}, entries)\n\n\tconst leaves = useMemo(() => {\n\t\treturn entries.filter(e => !e.includes(SEPARATOR))\n\t}, entries)\n\n\tconst [hidden, setHidden] = useState(new Set<string>())\n\tconst toggle = (root: string) => {\n\t\tif (hidden.has(root)) {\n\t\t\thidden.delete(root)\n\t\t} else {\n\t\t\thidden.add(root)\n\t\t}\n\t\tsetHidden(new Set(hidden))\n\t}\n\n\treturn <div class=\"tree-view\" style={`--indent: ${indent ?? 0};`}>\n\t\t{roots.map(([r, entries]) => <div>\n\t\t\t<TreeViewEntry icon={hidden.has(r) ? 'chevron_right' : 'chevron_down'} key={r} label={r} onClick={() => toggle(r)}/>\n\t\t\t{!hidden.has(r) &&\n\t\t\t\t<TreeView entries={entries} onSelect={e => onSelect(`${r}/${e}`)} indent={(indent ?? 0) + 1} />}\n\t\t</div>)}\n\t\t{leaves.map(e => <TreeViewEntry icon=\"file\" key={e} label={e} onClick={() => onSelect(e)} />)}\n\t</div>\n}\n\ninterface TreeViewEntryProps {\n\ticon: keyof typeof Octicon,\n\tlabel: string,\n\tonClick?: () => unknown,\n}\nfunction TreeViewEntry({ icon, label, onClick }: TreeViewEntryProps) {\n\treturn <div class=\"entry\" onClick={onClick} >\n\t\t{Octicon[icon]}\n\t\t{label}\n\t</div>\n}\n","import { marked } from 'marked'\nimport { ChangelogTag } from '.'\nimport type { Change, ChangelogVersion } from '../../services'\n\ntype Props = {\n\tchange: Change,\n\tactiveTags?: string[],\n\ttoggleTag?: (tag: string) => unknown,\n}\nexport function ChangelogEntry({ change, activeTags, toggleTag }: Props) {\n\treturn <div class=\"changelog-entry\">\n\t\t<div class=\"changelog-version\">\n\t\t\t<ArticleLink {...change.version}/>\n\t\t\t<ArticleLink {...change.group}/>\n\t\t</div>\n\t\t<div class=\"changelog-tags\">\n\t\t\t{change.tags.map(tag => <ChangelogTag label={tag} onClick={toggleTag ? () => toggleTag(tag) : undefined} active={activeTags?.includes(tag)} />)}\n\t\t</div>\n\t\t<div class=\"changelog-content\" dangerouslySetInnerHTML={{ __html: marked(change.content) }} />\n\t</div>\n}\n\nfunction ArticleLink({ id, article }: ChangelogVersion) {\n\treturn article === null\n\t\t? <span>{id}</span>\n\t\t: <a href={`https://www.minecraft.net/en-us/article/${article}`} target=\"_blank\">{id}</a>\n}\n","import { Octicon } from '..'\nimport { hashString } from '../../Utils'\n\ntype TagProps = {\n\tlabel: string,\n\tactive?: boolean,\n\tonClick?: () => unknown,\n}\nexport function ChangelogTag({ label, active, onClick }: TagProps) {\n\tconst color = label === 'breaking' ? 5 : hashString(label) % 360\n\treturn <div class={`changelog-tag${active ? ' active' : ''}${onClick ? ' clickable' : ''}`} style={`--tint: ${color}`} onClick={onClick}>\n\t\t{label === 'breaking' && Octicon.alert}\n\t\t{label}\n\t</div>\n}\n","import { useMemo, useState } from 'preact/hooks'\nimport { Btn, TextInput } from '..'\nimport { useLocale } from '../../contexts'\nimport type { Change } from '../../services'\nimport { ChangelogEntry } from './ChangelogEntry'\nimport { ChangelogTag } from './ChangelogTag'\n\ninterface Props {\n\tchanges: Change[] | undefined,\n\tdefaultOrder: 'asc' | 'desc',\n}\nexport function ChangelogList({ changes, defaultOrder }: Props) {\n\tconst { locale } = useLocale()\n\t\n\tconst [search, setSearch] = useState('')\n\tconst [tags, setTags] = useState<string[]>([])\n\tconst toggleTag = (tag: string) => {\n\t\tif (!tags.includes(tag)) {\n\t\t\tsetTags([...tags, tag])\n\t\t} else {\n\t\t\tsetTags(tags.filter(t => t !== tag))\n\t\t}\n\t}\n\n\tconst filteredChangelogs = useMemo(() => {\n\t\tconst query = search.split(' ').map(q => q.trim().toLowerCase()).filter(q => q.length > 0)\n\t\tif (query.length === 0 && tags.length === 0) return changes\n\t\treturn changes?.filter(change => {\n\t\t\tif (!tags.every(tag => change.tags.includes(tag))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst content = change.tags.join(' ') + ' ' + change.content.toLowerCase()\n\t\t\treturn query.every(q => {\n\t\t\t\tif (q.startsWith('!')) {\n\t\t\t\t\treturn q.length === 1 || !content.includes(q.slice(1))\n\t\t\t\t}\n\t\t\t\treturn content.includes(q)\n\t\t\t})\n\t\t})\n\t}, [changes, search, tags])\n\n\tconst [sort, setSort] = useState(defaultOrder === 'desc')\n\n\tconst sortedChangelogs = useMemo(() => {\n\t\treturn filteredChangelogs?.sort((a, b) => sort ? b.order - a.order : a.order - b.order)\n\t}, [filteredChangelogs, sort])\n\n\treturn <>\n\t\t<div class=\"changelog-query\">\n\t\t\t<TextInput class=\"btn btn-input changelog-search\" list=\"sound-list\" placeholder={locale('changelog.search')}\n\t\t\t\tvalue={search} onChange={setSearch} />\n\t\t\t<Btn icon={sort ? 'sort_desc' : 'sort_asc'} label={sort ? 'Newest first' : 'Oldest first'} onClick={() => setSort(!sort)} />\n\t\t</div>\n\t\t{tags.length > 0 && <div class=\"changelog-tags\">\n\t\t\t{tags.map(tag => <ChangelogTag label={tag} onClick={() => setTags(tags.filter(t => t !== tag))} />)}\n\t\t</div>}\n\t\t<div class=\"changelog-list\">\n\t\t\t{sortedChangelogs === undefined\n\t\t\t\t? <span>{locale('loading')}</span>\n\t\t\t\t: sortedChangelogs.length === 0\n\t\t\t\t\t? <span>{locale('changelog.no_results')}</span>\n\t\t\t\t\t:\tsortedChangelogs.map(change =>\n\t\t\t\t\t\t<ChangelogEntry change={change} activeTags={tags} toggleTag={toggleTag} />)}\n\t\t</div>\n\t</>\n}\n","import { useEffect, useMemo, useState } from 'preact/hooks'\nimport { VersionMetaData } from '.'\nimport { useLocale } from '../../contexts'\nimport type { Change, VersionMeta } from '../../services'\nimport { getChangelogs } from '../../services'\nimport { Giscus } from '../Giscus'\nimport { ChangelogList } from './ChangelogList'\n\ntype Tab = 'changelog' | 'discussion' \n\ninterface Props {\n\tversion: VersionMeta\n}\nexport function VersionDetail({ version }: Props) {\n\tconst { locale } = useLocale()\n\n\tconst [tab, setTab] = useState<Tab>('changelog')\n\n\tconst [changelogs, setChangelogs] = useState<Change[] | undefined>(undefined)\n\tuseEffect(() => {\n\t\tgetChangelogs()\n\t\t\t.then(changelogs => setChangelogs(\n\t\t\t\tchangelogs.map(c => ({ ...c, tags: c.tags.filter(t => t !== c.group.id) }))\n\t\t\t))\n\t\t\t.catch(e => console.error(e))\n\t}, [])\n\n\tconst filteredChangelogs = useMemo(() =>\n\t\tchangelogs?.filter(c => c.version.id === version.id || c.group.id === version.id),\n\t[version.id, changelogs])\n\n\treturn <>\n\t\t<div class=\"version-detail\">\n\t\t\t<h2>{version.name}</h2>\n\t\t\t<div class=\"version-info\">\n\t\t\t\t<VersionMetaData label={locale('versions.released')} value={releaseDate(version)} />\n\t\t\t\t<VersionMetaData label={locale('versions.release_target')} value={version.release_target} link={version.id !== version.release_target ? `/versions/?id=${version.release_target}` : undefined} />\n\t\t\t\t<VersionMetaData label={locale('versions.data_version')} value={version.data_version} />\n\t\t\t\t<VersionMetaData label={locale('versions.protocol_version')} value={version.protocol_version} />\n\t\t\t\t<VersionMetaData label={locale('versions.data_pack_format')} value={version.data_pack_version} />\n\t\t\t\t<VersionMetaData label={locale('versions.resource_pack_format')} value={version.resource_pack_version} />\n\t\t\t</div>\n\t\t\t<div class=\"version-tabs\">\n\t\t\t\t<span class={tab === 'changelog' ? 'selected' : ''} onClick={() => setTab('changelog')}>{locale('versions.technical_changes')}</span>\n\t\t\t\t<span class={tab === 'discussion' ? 'selected' : ''} onClick={() => setTab('discussion')}>{locale('versions.discussion')}</span>\n\t\t\t</div>\n\t\t\t<div class=\"version-tab\">\n\t\t\t\t{tab === 'changelog' && <ChangelogList changes={filteredChangelogs} defaultOrder=\"asc\" />}\n\t\t\t\t{tab === 'discussion' && <Giscus term={`version/${version.id}`} />}\n\t\t\t</div>\n\t\t</div>\n\t</>\n}\n\nexport function releaseDate(version: VersionMeta) {\n\treturn new Date(version.release_time).toLocaleDateString(undefined, { day: 'numeric', month: 'short', year: 'numeric' })\n}\n","import { releaseDate, VersionMetaData } from '.'\nimport { useLocale } from '../../contexts'\nimport type { VersionMeta } from '../../services'\n\ninterface Props {\n\tversion: VersionMeta,\n\tlink?: string,\n}\nexport function VersionEntry({ version, link }: Props) {\n\tconst { locale } = useLocale()\n\n\treturn <a class=\"version-entry\" href={link}>\n\t\t<span class=\"version-id\">{version.id}</span>\n\t\t<VersionMetaData label={locale('versions.released')} value={releaseDate(version)} compact />\n\t\t<VersionMetaData label={locale('versions.data_version')} value={version.data_version} optional />\n\t\t<VersionMetaData label={locale('versions.pack_format')} value={version.data_pack_version} optional />\n\t</a>\n}\n","import { useMemo, useState } from 'preact/hooks'\nimport { Checkbox, TextInput } from '..'\nimport { useLocale } from '../../contexts'\nimport type { VersionMeta } from '../../services'\nimport { VersionEntry } from './VersionEntry'\n\ninterface Props {\n\tversions: VersionMeta[]\n\tlink?: (id: string) => string\n}\nexport function VersionList({ versions, link }: Props) {\n\tconst { locale } = useLocale()\n\t\n\tconst [snapshots, setSnapshots] = useState(true)\n\tconst [search, setSearch] = useState('')\n\n\tconst filteredVersions = useMemo(() => versions.filter(v => {\n\t\tif (v.type === 'snapshot' && !snapshots) return false\n\t\treturn v.id.includes(search)\n\t}), [versions, snapshots, search])\n\n\n\treturn <>\n\t\t<div class=\"versions-controls\">\n\t\t\t<TextInput class=\"btn btn-input version-search\" list=\"sound-list\" placeholder={locale('versions.search')}\n\t\t\t\tvalue={search} onChange={setSearch} />\n\t\t\t<Checkbox label=\"Include snapshots\" value={snapshots} onChange={setSnapshots} />\n\t\t</div>\n\t\t<div class=\"version-list\">\n\t\t\t{filteredVersions.map(v => <VersionEntry version={v} link={link?.(v.id)} />)}\n\t\t\t{filteredVersions.length === 0 && <span>\n\t\t\t\t{locale('versions.no_results')}\n\t\t\t</span>}\n\t\t</div>\n\t</>\n}\n","import { Octicon } from '..'\n\ninterface Props {\n\tlabel: string,\n\tvalue: string | number,\n\tlink?: string,\n\tcompact?: boolean,\n\toptional?: boolean,\n}\nexport function VersionMetaData({ label, value, link, compact, optional }: Props) {\n\treturn <div class={`version-metadata${optional ? ' version-metadata-hide' : ''}`}>\n\t\t<span class={compact ? 'version-metadata-hide' : undefined}>{label}: </span>\n\t\t<span class=\"version-metadata-value\">{value}</span>\n\t\t{link && <a href={link} class=\"version-metadata-link\">{Octicon.link_external}</a>}\n\t</div>\n}\n","import config from '../../config.json'\nimport { ToolCard } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport { cleanUrl } from '../Utils'\n\ninterface Props {\n\tcategory: string,\n\tpath?: string,\n}\nexport function Category({ category }: Props) {\n\tconst { locale } = useLocale()\n\tuseTitle(locale('title.generator_category', locale(category)))\n\treturn <main>\n\t\t<div class=\"category\">\n\t\t\t{config.generators.filter(g => g.category === category).map(g => \n\t\t\t\t<ToolCard title={locale(g.id)} link={cleanUrl(g.url)} />\n\t\t\t)}\n\t\t</div>\n\t</main>\n}\n","import { useEffect, useState } from 'preact/hooks'\nimport { Ad, ChangelogList, ErrorPanel } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport type { Change } from '../services'\nimport { getChangelogs } from '../services'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Changelog({}: Props) {\n\tconst { locale } = useLocale()\n\tconst [error, setError] = useState<Error | null>(null)\n\tuseTitle(locale('title.changelog'))\n\n\tconst [changelogs, setChangelogs] = useState<Change[]>([])\n\tuseEffect(() => {\n\t\tgetChangelogs()\n\t\t\t.then(changelogs => setChangelogs(changelogs))\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [])\n\n\n\treturn <main>\n\t\t<Ad type=\"text\" id=\"changelog\" />\n\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t<div class=\"changelog\">\n\t\t\t<ChangelogList changes={changelogs} defaultOrder=\"desc\" />\n\t\t</div>\n\t</main>\n}\n","import { DataModel, Path } from '@mcschema/core'\nimport { getCurrentUrl, route } from 'preact-router'\nimport { useEffect, useErrorBoundary, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Analytics } from '../Analytics'\nimport { Ad, Btn, BtnMenu, ErrorPanel, HasPreview, Octicon, PreviewPanel, SearchList, SourcePanel, TextInput, Tree } from '../components'\nimport { useLocale, useProject, useTitle, useVersion } from '../contexts'\nimport { useActiveTimeout, useModel } from '../hooks'\nimport { getOutput } from '../schema/transformOutput'\nimport type { BlockStateRegistry, VersionId } from '../services'\nimport { checkVersion, fetchPreset, getBlockStates, getCollections, getModel } from '../services'\nimport { getGenerator, getSearchParams, message, setSeachParams } from '../Utils'\n\ninterface Props {\n\tdefault?: true,\n}\nexport function Generator({}: Props) {\n\tconst { locale } = useLocale()\n\tconst { version, changeVersion } = useVersion()\n\tconst { project, file, updateFile, openFile, closeFile } = useProject()\n\tconst [error, setError] = useState<Error | string | null>(null)\n\tconst [errorBoundary, errorRetry] = useErrorBoundary()\n\tif (errorBoundary) {\n\t\terrorBoundary.message = `Something went wrong rendering the generator: ${errorBoundary.message}`\n\t\treturn <main><ErrorPanel error={errorBoundary} onDismiss={errorRetry} /></main>\n\t}\n\n\tconst gen = getGenerator(getCurrentUrl())\n\tif (!gen) {\n\t\treturn <main><ErrorPanel error={`Cannot find generator \"${getCurrentUrl()}\"`} /></main>\n\t}\n\n\tconst allowedVersions = config.versions\n\t\t.filter(v => checkVersion(v.id, gen.minVersion, gen.maxVersion))\n\t\t.map(v => v.id as VersionId)\n\n\tuseTitle(locale('title.generator', locale(gen.id)), allowedVersions)\n\n\tif (!checkVersion(version, gen.minVersion)) {\n\t\tsetError(`The minimum version for this generator is ${gen.minVersion}`)\n\t}\n\tif (!checkVersion(version, undefined, gen.maxVersion)) {\n\t\tsetError(`This generator is not available in versions above ${gen.maxVersion}`)\n\t}\n\n\tconst searchParams = getSearchParams(getCurrentUrl())\n\tconst currentPreset = searchParams.get('preset')\n\tuseEffect(() => {\n\t\tif (model && currentPreset) {\n\t\t\tloadPreset(currentPreset).then(preset => {\n\t\t\t\tmodel?.reset(DataModel.wrapLists(preset), false)\n\t\t\t\tsetSeachParams({ version, preset: currentPreset })\n\t\t\t})\n\t\t}\n\t}, [currentPreset])\n\n\tconst [model, setModel] = useState<DataModel | null>(null)\n\tconst [blockStates, setBlockStates] = useState<BlockStateRegistry | null>(null)\n\tuseEffect(() => {\n\t\tsetError(null)\n\t\tsetModel(null)\n\t\tgetBlockStates(version)\n\t\t\t.then(b => setBlockStates(b))\n\t\tgetModel(version, gen.id)\n\t\t\t.then(async m => {\n\t\t\t\tAnalytics.setGenerator(gen.id)\n\t\t\t\tif (currentPreset) {\n\t\t\t\t\tconst preset = await loadPreset(currentPreset)\n\t\t\t\t\tm.reset(DataModel.wrapLists(preset), false)\n\t\t\t\t}\n\t\t\t\tsetModel(m)\n\t\t\t})\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [version, gen.id])\n\n\tconst [dirty, setDirty] = useState(false)\n\tuseModel(model, () => {\n\t\tsetSeachParams({ version: undefined, preset: undefined })\n\t\tsetError(null)\n\t\tsetDirty(true)\n\t})\n\n\tconst [fileRename, setFileRename] = useState('')\n\tconst [fileSaved, doSave] = useActiveTimeout()\n\tconst [fileError, doFileError] = useActiveTimeout()\n\n\tconst doFileRename = () => {\n\t\tif (fileRename !== file?.id && fileRename && model && blockStates) {\n\t\t\tconst data = getOutput(model, blockStates)\n\t\t\tconst success = updateFile(gen.id, file?.id, { id: fileRename, data })\n\t\t\tif (success) {\n\t\t\t\tdoSave()\n\t\t\t} else {\n\t\t\t\tdoFileError()\n\t\t\t\tif (file) {\n\t\t\t\t\tsetFileRename(file?.id)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (file) {\n\t\t\tsetFileRename(file?.id)\n\t\t}\n\t}\n\n\tconst deleteFile = () => {\n\t\tif (file) {\n\t\t\tupdateFile(gen.id, file.id, {})\n\t\t}\n\t}\n\n\tuseEffect(() => {\n\t\tif (file) {\n\t\t\tsetFileRename(file.id)\n\t\t}\n\t}, [file])\n\n\tuseEffect(() => {\n\t\tif (model) {\n\t\t\tsetFileRename(file?.id ?? '')\n\t\t\tif (file && gen.id === file.type) {\n\t\t\t\tmodel.reset(DataModel.wrapLists(file.data))\n\t\t\t}\n\t\t\tsetDirty(false)\n\t\t}\n\t}, [file, model])\n\n\tconst reset = () => {\n\t\tAnalytics.generatorEvent('reset')\n\t\tmodel?.reset(DataModel.wrapLists(model.schema.default()), true)\n\t}\n\tconst undo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('undo', 'Menu')\n\t\tmodel?.undo()\n\t}\n\tconst redo = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tAnalytics.generatorEvent('redo', 'Menu')\n\t\tmodel?.redo()\n\t}\n\n\tconst onKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 'z') {\n\t\t\tAnalytics.generatorEvent('undo', 'Hotkey')\n\t\t\tmodel?.undo()\n\t\t} else if (e.ctrlKey && e.key === 'y') {\n\t\t\tAnalytics.generatorEvent('redo', 'Hotkey')\n\t\t\tmodel?.redo()\n\t\t}\n\t}\n\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\tif (e.ctrlKey && e.key === 's') {\n\t\t\te.preventDefault()\n\t\t\tif (model && blockStates && file) {\n\t\t\t\tAnalytics.generatorEvent('save', 'Hotkey')\n\t\t\t\tconst data = getOutput(model, blockStates)\n\t\t\t\tupdateFile(gen.id, file?.id, { id: file?.id, data })\n\t\t\t\tsetDirty(false)\n\t\t\t\tdoSave()\n\t\t\t}\n\t\t}\n\t}\n\tuseEffect(() => {\n\t\tdocument.addEventListener('keyup', onKeyUp)\n\t\tdocument.addEventListener('keydown', onKeyDown)\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keyup', onKeyUp)\n\t\t\tdocument.removeEventListener('keydown', onKeyDown)\n\t\t}\n\t}, [model, blockStates, file])\n\n\tconst [presets, setPresets] = useState<string[]>([])\n\tuseEffect(() => {\n\t\tgetCollections(version).then(collections => {\n\t\t\tsetPresets(collections.get(gen.id).map(p => p.slice(10)))\n\t\t})\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [version, gen.id])\n\n\tconst selectPreset = (id: string) => {\n\t\tAnalytics.generatorEvent('load-preset', id)\n\t\tsetSeachParams({ version, preset: id })\n\t}\n\n\tconst loadPreset = async (id: string) => {\n\t\ttry {\n\t\t\tconst preset = await fetchPreset(version, gen.path ?? gen.id, id)\n\t\t\tconst seed = model?.get(new Path(['generator', 'seed']))\n\t\t\tif (preset?.generator?.seed !== undefined && seed !== undefined) {\n\t\t\t\tpreset.generator.seed = seed\n\t\t\t\tif (preset.generator.biome_source?.seed !== undefined) {\n\t\t\t\t\tpreset.generator.biome_source.seed = seed\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn preset\n\t\t} catch (e) {\n\t\t\tsetError(e instanceof Error ? e : message(e))\n\t\t}\n\t}\n\n\tconst [sourceShown, setSourceShown] = useState(window.innerWidth > 820)\n\tconst [doCopy, setCopy] = useState(0)\n\tconst [doDownload, setDownload] = useState(0)\n\tconst [doImport, setImport] = useState(0)\n\n\tconst copySource = () => {\n\t\tAnalytics.generatorEvent('copy')\n\t\tsetCopy(doCopy + 1)\n\t}\n\tconst downloadSource = () => {\n\t\tAnalytics.generatorEvent('download')\n\t\tsetDownload(doDownload + 1)\n\t}\n\tconst importSource = () => {\n\t\tAnalytics.generatorEvent('import')\n\t\tsetSourceShown(true)\n\t\tsetImport(doImport + 1)\n\t}\n\tconst toggleSource = () => {\n\t\tAnalytics.generatorEvent('toggle-output', !sourceShown ? 'visible' : 'hidden')\n\t\tsetSourceShown(!sourceShown)\n\t\tsetCopy(0)\n\t\tsetDownload(0)\n\t\tsetImport(0)\n\t}\n\n\tconst [copyActive, copySuccess] = useActiveTimeout()\n\n\tconst [previewShown, setPreviewShown] = useState(false)\n\tconst hasPreview = HasPreview.includes(gen.id) && !(gen.id === 'worldgen/configured_feature' && checkVersion(version, '1.18'))\n\tif (previewShown && !hasPreview) setPreviewShown(false)\n\tlet actionsShown = 1\n\tif (hasPreview) actionsShown += 1\n\tif (sourceShown) actionsShown += 2\n\n\tconst togglePreview = () => {\n\t\tAnalytics.generatorEvent('toggle-preview', !previewShown ? 'visible' : 'hidden')\n\t\tsetPreviewShown(!previewShown)\n\t\tif (!previewShown && sourceShown) {\n\t\t\tsetSourceShown(false)\n\t\t}\n\t}\n\n\treturn <>\n\t\t<main class={previewShown ? 'has-preview' : ''}>\n\t\t\t<Ad id=\"data-pack-generator\" type=\"text\" />\n\t\t\t<div class=\"controls\">\n\t\t\t\t<div class={`project-controls ${file && 'has-file'}`}>\n\t\t\t\t\t<div class=\"btn-row\">\n\t\t\t\t\t\t<BtnMenu icon=\"repo\" label={project.name} relative={false}>\n\t\t\t\t\t\t\t<Btn icon=\"arrow_left\" label={locale('project.go_to')} onClick={() => route('/project')} />\n\t\t\t\t\t\t\t{file && <Btn icon=\"file\" label={locale('project.new_file')} onClick={closeFile} />}\n\t\t\t\t\t\t\t<SearchList searchPlaceholder={locale(project.name === 'Drafts' ? 'project.search_drafts' : 'project.search')} noResults={locale('project.no_files')} values={project.files.filter(f => f.type === gen.id).map(f => f.id)} onSelect={(id) => openFile(gen.id, id)} />\n\t\t\t\t\t\t</BtnMenu>\n\t\t\t\t\t\t<TextInput class=\"btn btn-input\" placeholder={locale('project.unsaved_file')} value={fileRename} onChange={setFileRename} onEnter={doFileRename} onBlur={doFileRename} />\n\t\t\t\t\t\t{file && <Btn icon=\"trashcan\" tooltip={locale('project.delete_file')} onClick={deleteFile} />}\n\t\t\t\t\t</div>\n\t\t\t\t\t{dirty ? <div class=\"status-icon\">{Octicon.dot_fill}</div>\n\t\t\t\t\t\t: fileSaved ? <div class=\"status-icon active\">{Octicon.check}</div>\n\t\t\t\t\t\t\t: fileError && <div class=\"status-icon danger\">{Octicon.x}</div> }\n\t\t\t\t</div>\n\t\t\t\t<div class=\"generator-controls\">\n\t\t\t\t\t<Btn icon=\"upload\" label={locale('import')} onClick={importSource} />\n\t\t\t\t\t<BtnMenu icon=\"archive\" label={locale('presets')} relative={false}>\n\t\t\t\t\t\t<SearchList searchPlaceholder={locale('search')} noResults={locale('no_presets')} values={presets} onSelect={selectPreset}/>\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t\t<BtnMenu icon=\"tag\" label={version} tooltip={locale('switch_version')} data-cy=\"version-switcher\">\n\t\t\t\t\t\t{allowedVersions.reverse().map(v =>\n\t\t\t\t\t\t\t<Btn label={v} active={v === version} onClick={() => changeVersion(v)} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t\t<BtnMenu icon=\"kebab_horizontal\" tooltip={locale('more')}>\n\t\t\t\t\t\t<Btn icon=\"history\" label={locale('reset')} onClick={reset} />\n\t\t\t\t\t\t<Btn icon=\"arrow_left\" label={locale('undo')} onClick={undo} />\n\t\t\t\t\t\t<Btn icon=\"arrow_right\" label={locale('redo')} onClick={redo} />\n\t\t\t\t\t</BtnMenu>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t\t<Tree {...{model, version, blockStates}} onError={setError} />\n\t\t</main>\n\t\t<div class=\"popup-actions\" style={`--offset: -${8 + actionsShown * 50}px;`}>\n\t\t\t<div class={`popup-action action-preview${hasPreview ? ' shown' : ''} tooltipped tip-nw`} aria-label={locale(previewShown ? 'hide_preview' : 'show_preview')} onClick={togglePreview}>\n\t\t\t\t{previewShown ? Octicon.x_circle : Octicon.play}\n\t\t\t</div>\n\t\t\t<div class={`popup-action action-download${sourceShown ? ' shown' : ''} tooltipped tip-nw`} aria-label={locale('download')} onClick={downloadSource}>\n\t\t\t\t{Octicon.download}\n\t\t\t</div>\n\t\t\t<div class={`popup-action action-copy${sourceShown ? ' shown' : ''}${copyActive ? ' active' : ''} tooltipped tip-nw`} aria-label={locale(copyActive ? 'copied' : 'copy')} onClick={copySource}>\n\t\t\t\t{copyActive ? Octicon.check : Octicon.clippy}\n\t\t\t</div>\n\t\t\t<div class={'popup-action action-code shown tooltipped tip-nw'} aria-label={locale(sourceShown ? 'hide_output' : 'show_output')} onClick={toggleSource}>\n\t\t\t\t{sourceShown ? Octicon.chevron_right : Octicon.code}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class={`popup-preview${previewShown ? ' shown' : ''}`}>\n\t\t\t<PreviewPanel {...{model, version, id: gen.id}} shown={previewShown} onError={setError} />\n\t\t</div>\n\t\t<div class={`popup-source${sourceShown ? ' shown' : ''}`}>\n\t\t\t<SourcePanel {...{model, blockStates, doCopy, doDownload, doImport}} name={gen.schema ?? 'data'} copySuccess={copySuccess} onError={setError} />\n\t\t</div>\n\t</>\n}\n","import config from '../../config.json'\nimport { Giscus, ToolCard } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport { cleanUrl } from '../Utils'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Home({}: Props) {\n\tconst { locale } = useLocale()\n\tuseTitle(locale('title.home'))\n\treturn <main>\n\t\t<div class=\"home\">\n\t\t\t<ToolCard title=\"Data packs\">\n\t\t\t\t{config.generators.filter(g => !g.category).map(g => \n\t\t\t\t\t<ToolCard title={locale(g.id)} link={cleanUrl(g.url)} />\n\t\t\t\t)}\n\t\t\t\t<ToolCard title={locale('worldgen')} link=\"/worldgen/\" />\n\t\t\t</ToolCard>\n\t\t\t<ToolCard title=\"Resource packs\">\n\t\t\t\t{config.generators.filter(g => g.category === 'assets').map(g =>\n\t\t\t\t\t<ToolCard title={locale(g.id)} link={cleanUrl(g.url)} />\n\t\t\t\t)}\n\t\t\t</ToolCard>\n\t\t\t<ToolCard title=\"Report Inspector\" icon=\"report\"\n\t\t\t\tlink=\"https://misode.github.io/report/\"\n\t\t\t\tdesc=\"Analyse your performance reports\" />\n\t\t\t<ToolCard title=\"Minecraft Sounds\" icon=\"sounds\"\n\t\t\t\tlink=\"/sounds/\"\n\t\t\t\tdesc=\"Browse through and mix all the vanilla sounds\" />\n\t\t\t<ToolCard title=\"Data Pack Upgrader\"\n\t\t\t\tlink=\"https://misode.github.io/upgrader/\"\n\t\t\t\tdesc=\"Convert your data packs from 1.16 to 1.17 to 1.18\" />\n\t\t\t<ToolCard title=\"Technical Changelog\" link=\"/changelog/\" />\n\t\t\t<ToolCard title=\"Minecraft Versions\" link=\"/versions/\" />\n\t\t\t<Giscus />\n\t\t</div>\n\t</main>\n}\n","import { useMemo } from 'preact/hooks'\nimport { Ad, TreeView } from '../components'\nimport { getFilePath, useLocale, useProject, useTitle } from '../contexts'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Project({}: Props) {\n\tconst { locale } = useLocale()\n\tconst { project, openFile } = useProject()\n\tuseTitle(locale('title.project', project.name))\n\tconst entries = useMemo(() => project.files.map(getFilePath), project.files)\n\n\tconst selectFile = (entry: string) => {\n\t\tconst [, namespace, type, ...id] = entry.split('/')\n\t\topenFile(type, `${namespace}:${id}`)\n\t}\n\n\treturn <main>\n\t\t<Ad id=\"data-pack-project\" type=\"text\" />\n\t\t<div class=\"project\">\n\t\t\t<h2>{project.name}</h2>\n\t\t\t<div class=\"file-view\">\n\t\t\t\t<TreeView entries={entries} onSelect={selectFile}/>\n\t\t\t</div>\n\t\t</div>\n\t</main>\n}\n","import { useEffect, useRef, useState } from 'preact/hooks'\nimport config from '../../config.json'\nimport { Btn, BtnMenu, ErrorPanel, SoundConfig, TextInput } from '../components'\nimport { useLocale, useTitle, useVersion } from '../contexts'\nimport type { SoundEvents, VersionId } from '../services'\nimport { fetchSounds } from '../services'\nimport { hexId } from '../Utils'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Sounds({}: Props) {\n\tconst { locale } = useLocale()\n\tconst { version, changeVersion } = useVersion()\n\tconst [error, setError] = useState<Error | null>(null)\n\tuseTitle(locale('title.sounds'))\n\n\tconst [sounds, setSounds] = useState<SoundEvents>({})\n\tconst soundKeys = Object.keys(sounds ?? {})\n\tuseEffect(() => {\n\t\tfetchSounds(version)\n\t\t\t.then(setSounds)\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [version])\n\n\tconst [search, setSearch] = useState('')\n\tconst [configs, setConfigs] = useState<SoundConfig[]>([])\n\tconst addConfig = () => {\n\t\tsetConfigs([{ id: hexId(), sound: search, delay: 0, pitch: 1, volume: 1 }, ...configs])\n\t}\n\tconst editConfig = (id: string) => (changes: Partial<SoundConfig>) => {\n\t\tsetConfigs(configs.map(c => c.id === id ? { ...c, ...changes } : c))\n\t}\n\tconst deleteConfig = (id: string) => () => {\n\t\tsetConfigs(configs.filter(c => c.id !== id))\n\t}\n\n\tconst [delayedPlay, setDelayedPlay] = useState(0)\n\tconst playAll = () => {\n\t\tsetDelayedPlay(delayedPlay + 1)\n\t}\n\n\tconst download = useRef<HTMLAnchorElement>(null)\n\tconst downloadFunction = () => {\n\t\tconst hasDelay = configs.some(c => c.delay > 0)\n\t\tconst content = configs\n\t\t\t.sort((a, b) => a.delay - b.delay)\n\t\t\t.map(c => `${hasDelay ? `execute if score @s delay matches ${c.delay} run ` : ''}playsound minecraft:${c.sound} master @s ~ ~ ~ ${c.volume} ${c.pitch}`)\n\t\t\t.join('\\n')\n\t\tdownload.current.setAttribute('href', 'data:text/plain;charset=utf-8,' + content + '%0A')\n\t\tdownload.current.setAttribute('download', 'sounds.mcfunction')\n\t\tdownload.current.click()\n\t}\n\n\treturn <main>\n\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t{soundKeys.length > 0 && <>\n\t\t\t<div class=\"controls sounds-controls\">\n\t\t\t\t<div class=\"sound-search-group\">\n\t\t\t\t\t<TextInput class=\"btn btn-input sound-search\" list=\"sound-list\" placeholder={locale('sounds.search')}\n\t\t\t\t\t\tvalue={search} onChange={setSearch} onEnter={addConfig} />\n\t\t\t\t\t<Btn icon=\"plus\" tooltip={locale('sounds.add_sound')} class=\"add-sound\" onClick={addConfig} />\n\t\t\t\t</div>\n\t\t\t\t{configs.length > 1 && <Btn icon=\"play\" label={ locale('sounds.play_all')} class=\"play-all-sounds\" onClick={playAll} />}\n\t\t\t\t<div class=\"spacer\"></div>\n\t\t\t\t<Btn icon=\"download\" label={locale('download')} tooltip={locale('sounds.download_function')} class=\"download-sounds\" onClick={downloadFunction} />\n\t\t\t\t<BtnMenu icon=\"tag\" label={version}>\n\t\t\t\t\t{config.versions.reverse().map(v =>\n\t\t\t\t\t\t<Btn label={v.id} active={v.id === version} onClick={() => changeVersion(v.id as VersionId)} />\n\t\t\t\t\t)}\n\t\t\t\t</BtnMenu>\n\t\t\t</div>\n\t\t\t<div class=\"sounds\">\n\t\t\t\t{configs.map(c => <SoundConfig key={c.id} {...c} {...{ sounds, delayedPlay }} onEdit={editConfig(c.id)} onDelete={deleteConfig(c.id)} />)}\n\t\t\t</div>\n\t\t\t<a ref={download} style=\"display: none;\"></a>\n\t\t</>}\n\t\t<datalist id=\"sound-list\">\n\t\t\t{soundKeys.map(s => <option key={s} value={s} />)}\n\t\t</datalist>\n\t</main>\n}\n","import { getCurrentUrl } from 'preact-router'\nimport { useEffect, useState } from 'preact/hooks'\nimport { Ad, ErrorPanel, Octicon, VersionDetail, VersionList } from '../components'\nimport { useLocale, useTitle } from '../contexts'\nimport type { VersionMeta } from '../services'\nimport { fetchVersions } from '../services'\nimport { getSearchParams } from '../Utils'\n\ninterface Props {\n\tpath?: string,\n}\nexport function Versions({}: Props) {\n\tconst { locale } = useLocale()\n\tconst [error, setError] = useState<Error | null>(null)\n\tuseTitle(locale('title.versions'))\n\n\tconst [versions, setVersions] = useState<VersionMeta[]>([])\n\tuseEffect(() => {\n\t\tfetchVersions()\n\t\t\t.then(versions => setVersions(versions))\n\t\t\t.catch(e => { console.error(e); setError(e) })\n\t}, [])\n\n\tconst selectedId = getSearchParams(getCurrentUrl()).get('id')\n\tconst selected = versions.find(v => v.id === selectedId)\n\n\tuseTitle(selected ? selected.name : 'Versions Explorer', selected ? [] : undefined)\n\n\tconst nextVersion = selected && getOffsetVersion(versions, selected, -1)\n\tconst previousVersion = selected && getOffsetVersion(versions, selected, 1)\n\n\treturn <main>\n\t\t<Ad type=\"text\" id=\"versions\" />\n\t\t{error && <ErrorPanel error={error} onDismiss={() => setError(null)} />}\n\t\t<div class=\"versions\">\n\t\t\t{selected ? <>\n\t\t\t\t<div class=\"version-navigation\">\n\t\t\t\t\t<a class=\"btn btn-link\" href=\"/versions/\">\n\t\t\t\t\t\t{Octicon.three_bars}\n\t\t\t\t\t\t{locale('versions.all')}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"btn btn-link\" {...previousVersion ? {href: `/versions/?id=${previousVersion.id}`} : {disabled: true}}>\n\t\t\t\t\t\t{Octicon.arrow_left}\n\t\t\t\t\t\t{locale('versions.previous')}\n\t\t\t\t\t</a>\n\t\t\t\t\t<a class=\"btn btn-link\" {...nextVersion ? {href: `/versions/?id=${nextVersion.id}`} : {disabled: true}}>\n\t\t\t\t\t\t{locale('versions.next')}\n\t\t\t\t\t\t{Octicon.arrow_right}\n\t\t\t\t\t</a>\n\t\t\t\t</div>\n\t\t\t\t<VersionDetail version={selected} />\n\t\t\t</> : <VersionList versions={versions} link={id => `/versions/?id=${id}`} />}\n\t\t</div>\n\t</main>\n}\n\nfunction getOffsetVersion(versions: VersionMeta[], current: VersionMeta, offset: number) {\n\tconst currentIndex = versions.findIndex(v => v.id === current.id)\n\tconst offsetIndex = currentIndex + offset\n\tif (offsetIndex < 0 || offsetIndex >= versions.length) {\n\t\treturn undefined\n\t}\n\treturn versions[offsetIndex]\n}\n","import type { RouterOnChangeArgs } from 'preact-router'\nimport { Router } from 'preact-router'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { Analytics } from './Analytics'\nimport { Header } from './components'\nimport { Category, Changelog, Generator, Home, Project, Sounds, Versions } from './pages'\nimport { cleanUrl } from './Utils'\n\nexport function App() {\n\tconst changeRoute = (e: RouterOnChangeArgs) => {\n\t\t// Needs a timeout to ensure the title is set correctly\n\t\tsetTimeout(() => Analytics.pageview(cleanUrl(e.url)))\n\t}\n\n\treturn <>\n\t\t<Header />\n\t\t<Router onChange={changeRoute}>\n\t\t\t<Home path=\"/\" />\n\t\t\t<Category path=\"/worldgen\" category=\"worldgen\" />\n\t\t\t<Category path=\"/assets\" category=\"assets\" />\n\t\t\t<Sounds path=\"/sounds\" />\n\t\t\t<Changelog path=\"/changelog\" />\n\t\t\t<Versions path=\"/versions\" />\n\t\t\t<Project path=\"/project\" />\n\t\t\t<Generator default />\n\t\t</Router>\n\t</>\n}\n","import { render } from 'preact'\nimport '../styles/global.css'\nimport '../styles/nodes.css'\nimport { App } from './App'\nimport { LocaleProvider, ProjectProvider, ThemeProvider, TitleProvider, VersionProvider } from './contexts'\n\nfunction Main() {\n\treturn <LocaleProvider>\n\t\t<ThemeProvider>\n\t\t\t<VersionProvider>\n\t\t\t\t<TitleProvider>\n\t\t\t\t\t<ProjectProvider>\n\t\t\t\t\t\t<App />\n\t\t\t\t\t</ProjectProvider>\n\t\t\t\t</TitleProvider>\n\t\t\t</VersionProvider>\n\t\t</ThemeProvider>\n\t</LocaleProvider>\n}\n\nrender(<Main />, document.body)\n"],"names":["Analytics","type","id","getElementById","remove","window","load","data-ea-publisher","data-ea-type","class","icon","label","active","clazz","tooltip","tooltipLoc","onClick","aria-label","Octicon","Analytics2","ID_SITE","ID_GENERATOR","category","action","index","value","pageview","page","setLanguage","language","setTheme","theme","setVersion","version","setPreview","preview","setGenerator","generator","setPrefersColorScheme","colorScheme","generatorEvent","obj","dec2hex","dec","toString","substr","length","arr","Uint8Array","crypto","getRandomValues","Array","from","join","BigInt","Math","floor","random","Number","MAX_SAFE_INTEGER","model","seed","dimensions","get","Path","set","keys","forEach","s2","h","i","imul","charCodeAt","url","replaceAll","searchIndex","indexOf","slice","cleanUrl","trimmedUrl","getPath","replace","config","generators","find","g2","Map","split","map","param","decodeURIComponent","modifications","newPath","getCurrentUrl","searchParams","getSearchParams","entries","key","delete","search","encodeURIComponent","str","abs","hashString","a2","b2","c","max","min","lerp","e","Error","message","deepClone","rfdc","constructor","isArray","deepEqual","valueOf","Object","prototype","hasOwnProperty","call","[object Object]","forward","backward","this","defaultValue","large","larger","doSelect","placeholder","dataList","onChange","onInput","value2","target","ref","useRef","current","select","dataListId","hexId","stopPropagation","list","cooldown","invert","initial","setActive","useState","timeout","setTimeout","size","draw","onDrag","onHover","onLeave","inputs","canvas","dragStart","dragRequest","dragPending","dragBusy","onMouseDown","offsetX","offsetY","onMouseMove","x","clientWidth","y2","clientHeight","dx","dy","requestAnimationFrame","async","dx2","dy2","onMouseUp","onMouseLeave","addEventListener","body","removeEventListener","redraw","redrawCount","ctx","getContext","width","height","img","getImageData","ownCount","putImageData","hider","query","prefers","setPrefers","matchMedia","matches","mediaQuery","invalidated","listener","addListener","removeListener","props","relative","children","useFocus","__spreadValues","Btn","__spreadProps","alert","xmlns","viewBox","fill-rule","d","archive","arrow_left","arrow_right","check","chevron_down","chevron_right","chevron_up","clippy","code","dash","device_desktop","dot_fill","download","duplicate","eye","eye_closed","file","file_directory","gear","globe","history","info","issue_opened","kebab_horizontal","link","link_external","mark_github","moon","play","plus","plus_circle","repo","sort_asc","sort_desc","square","square_fill","stack","sun","sync","tag","terminal","three_bars","trashcan","unfold","upload","x_circle","error","onDismiss","stackVisible","setStackVisible","setStack","stack2","line","mapped","mappedStack","useMemo","url2","name","href","checked","component","evt","fn","onKeyDown","onEnter","displayName","TextInput","BaseInput","v","NumberInput","RangeInput","values","onSelect","searchPlaceholder","noResults","setSearch","results","terms","trim","filter","every","includes","t","BtnInput","Changelogs","fetch","json","Promise","all","group","groupIndex","versionIndex","text","entry","tags","substring","content","parseChangelog","order","change","fetchChangelog","parseVersion","flat","fetchGroup","article","match","isObject","localStorage","removeItem","caches","mcmetaUrl","dynamic","getItem","cache","open","debug","promises","request","push","warn","deleteMatching","startsWith","setItem","data","getData","mcmeta","register","properties","default","versionId","registry","versions","cacheResponse","ok","fetchResponse","responseData","put","Response","JSON","stringify","VersionIds","Versions","Models","versionGetter","1.15","java15","1.16","java16","1.17","java17","1.18","java18","1.18.2","java182","1.19","java19","CachedDecorator","CachedFeature","CachedCollections","scriptRel","collections","getCollections","blockStates","collectionTarget","blockStateTarget","validateCache","fetchRegistries","fetchBlockStateMap","fetchData","schemas","getSchemas","minVersionId","maxVersionId","findIndex","minVersion","maxVersion","seen","__vitePreload","baseModule","deps","relList","document","createElement","supports","dep","isCss","endsWith","cssSelector","querySelector","rel","as","crossOrigin","head","appendChild","res","rej","then","Store","Store2","getLanguage","getTheme","getVersion","getIndent","getFormat","getHighlighting","getSoundsVersion","getProjects","projects","parse","DRAFT_PROJECT","setIndent","indent","setFormat","format","setHighlighting","highlighting","setSoundsVersion","setProjects","Locale","createContext","lang","locale","changeLanguage","Locales","fallback","English","params","parseInt","resolveLocaleParams","en","langConfig","languages","__variableDynamicImportRuntime0__","schema","__variableDynamicImportRuntime1__","useContext","useCallback","localize","lang2","loadLocale","Provider","namespace","files","Project","project","changeProject","updateProject","updateFile","openFile","closeFile","projectName","setProjectName","p","fileId","setFileId","f","changeProjects","projects2","edits","newId","exists","some","gen","path","Theme","actualTheme","changeTheme","prefersLight","useMediaQuery","prefersDark","documentElement","setAttribute","theme2","Title","title","changeTitle","context","useLocale","setTitle","title2","titleVersions","Version","changeVersion","targetVersion","version2","has","ready","LAYERS","temperature","humidity","continentalness","erosion","weirdness","offset","factor","jaggedness","cacheState","biomeSourceCache","state","options","newState","octaves","FixedBiome","Identifier","biome","shift","scale","numBiomes","biomes","_y","z","node","preset","checkVersion","NetherPreset18","NetherPreset","fetchPreset","biome_source","OverworldPreset18","DataModel","unwrapLists","init","wasm","loadWasm","BiomeIds","BiMap","t0","t1","h0","h1","c0","c1","e0","e1","w0","w1","d0","d1","o","depth","parameters","getOrPut","biome_parameters","Float64Array","Int32Array","sampler","climate_sampler","firstOctave","amplitudes","ids","multi_noise","getA","getBiomes","xFrom","xTo","xStep","yFrom","yTo","yStep","zFrom","zTo","zStep","climate","climate_noise","w","result","noise","config2","clamp","NormalNoise","LegacyRandom","n","n2","sample","minDist","Infinity","minBiome","dist","altitude","create","getBiomeSource","biomeSource","biomeColors","color","VanillaColors","stringToColor","minecraft:badlands","minecraft:badlands_plateau","minecraft:bamboo_jungle","minecraft:bamboo_jungle_hills","minecraft:basalt_deltas","minecraft:beach","minecraft:birch_forest","minecraft:birch_forest_hills","minecraft:cold_ocean","minecraft:crimson_forest","minecraft:dark_forest","minecraft:dark_forest_hills","minecraft:deep_cold_ocean","minecraft:deep_frozen_ocean","minecraft:deep_lukewarm_ocean","minecraft:deep_ocean","minecraft:deep_warm_ocean","minecraft:desert","minecraft:desert_hills","minecraft:desert_lakes","minecraft:end_barrens","minecraft:end_highlands","minecraft:end_midlands","minecraft:eroded_badlands","minecraft:flower_forest","minecraft:forest","minecraft:frozen_ocean","minecraft:frozen_river","minecraft:giant_spruce_taiga","minecraft:old_growth_spruce_taiga","minecraft:giant_spruce_taiga_hills","minecraft:giant_tree_taiga","minecraft:old_growth_pine_taiga","minecraft:giant_tree_taiga_hills","minecraft:gravelly_hills","minecraft:gravelly_mountains","minecraft:windswept_gravelly_hills","minecraft:ice_spikes","minecraft:jungle","minecraft:jungle_edge","minecraft:sparse_jungle","minecraft:jungle_hills","minecraft:lukewarm_ocean","minecraft:modified_badlands_plateau","minecraft:modified_gravelly_mountains","minecraft:modified_jungle","minecraft:modified_jungle_edge","minecraft:modified_wooded_badlands_plateau","minecraft:mountain_edge","minecraft:extreme_hills","minecraft:mountains","minecraft:windswept_hills","minecraft:mushroom_field_shore","minecraft:mushroom_fields","minecraft:nether_wastes","minecraft:ocean","minecraft:plains","minecraft:river","minecraft:savanna","minecraft:savanna_plateau","minecraft:shattered_savanna","minecraft:windswept_savanna","minecraft:shattered_savanna_plateau","minecraft:small_end_islands","minecraft:snowy_beach","minecraft:snowy_mountains","minecraft:snowy_taiga","minecraft:snowy_taiga_hills","minecraft:snowy_taiga_mountains","minecraft:snowy_tundra","minecraft:snowy_plains","minecraft:soul_sand_valley","minecraft:stone_shore","minecraft:stony_shore","minecraft:sunflower_plains","minecraft:swamp","minecraft:swamp_hills","minecraft:taiga","minecraft:taiga_hills","minecraft:taiga_mountains","minecraft:tall_birch_forest","minecraft:old_growth_birch_forest","minecraft:tall_birch_hills","minecraft:the_end","minecraft:the_void","minecraft:warm_ocean","minecraft:warped_forest","minecraft:wooded_badlands_plateau","minecraft:wooded_badlands","minecraft:wooded_hills","minecraft:wooded_mountains","minecraft:windswept_forest","minecraft:snowy_slopes","minecraft:lofty_peaks","minecraft:jagged_peaks","minecraft:snowcapped_peaks","minecraft:frozen_peaks","minecraft:stony_peaks","minecraft:grove","minecraft:meadow","minecraft:lush_caves","minecraft:dripstone_caves","altitude_noise","temperature_noise","humidity_noise","weirdness_noise","terrain","featureColors","placements","features","biomeInfoNoise","PerlinNoise","fork","seaLevel","nextFloat","nextInt","nextGaussian","sqrt","log","cos","PI","base","spread","normalize","min_inclusive","max_inclusive","sampleInt","source","normal","mean","deviation","totalWeight","distribution","reduce","sum","weight","placement","fill","pos","feature","j","anchor","_ctx","absolute","above_bottom","below_top","useFeature","featureFn","Features","decorator2","decoratorFn","Decorators","decorated","getPositions","decorator","getPlacements","random_boolean_selector","feature_true","feature_false","random_selector","chance","simple_random_selector","count","count_extra","extra_chance","extra_count","count_multilayer","count_noise","noise_level","below_noise","above_noise","count_noise_biased","noise_factor","ceil","noise_offset","noise_to_count_ratio","dark_oak_tree","_config","_","outer","flatMap","inner","depth_average","decorateY","baseline","emerald_ore","fire","glowstone","heightmap","heightmap_spread_double","heightmap_world_surface","iceberg","lava_lake","nope","range","maximum","top_offset","bottom_offset","range_biased","range_very_biased","spread_32_above","top_solid_heightmap","magma","surface_relative_threshold","water_lake","positions","modifier","PlacementModifiers","pos2","count_on_every_layer","environment_scan","height_range","resolveAnchor","n1","plateau","sampleHeight","in_square","noise_based_count","noise_threshold_count","random_offset","xz_spread","y_spread","rarity_filter","minLimitPerlinNoise","maxLimitPerlinNoise","mainPerlinNoise","depthNoise","settings","xOffset","chunkWidth","size_horizontal","chunkHeight","size_vertical","chunkCountY","amplified","biomeDepth","biomeScale","noiseColumnCache","cx","ox","noise1","fillNoiseColumn","noise2","yy","oy","d2","cachedColumn","xzScale","sampling","xz_scale","yScale","y_scale","xzFactor","xz_factor","yFactor","y_factor","randomDensity","random_density_offset","getRandomDensity","sampleAndClampNoise","getOctaveNoise","zo","falloff","density_factor","density_offset","top_slide","clampedLerp","bottom_slide","x2","wrap","y22","z2","minLimitNoise","maxLimitNoise","mainNoise","colors","minecraft:air","minecraft:water","minecraft:lava","minecraft:stone","minecraft:deepslate","minecraft:bedrock","minecraft:grass_block","minecraft:dirt","minecraft:gravel","minecraft:sand","minecraft:sandstone","minecraft:netherrack","minecraft:crimson_nylium","minecraft:warped_nylium","minecraft:basalt","minecraft:end_stone","generatorCache","chunkCache","registryCache","initRegistries","NoiseGeneratorSettings","fromJson","NoiseChunkGenerator","deepslate18.FixedBiome","deepslate18.NoiseChunkGenerator","getCached","LevelSlice","minY","generate","generator2","data2","state2","getBlockState","getName","OldNoiseChunkGenerator","reset","row","iterateNoiseColumn","reverse","getColor","XoroshiroRandom","forkPositional","NoiseSettings","min_y","terrain_shaper","originalFn","DensityFunction","mapAll","NoiseRouter","Visitor","createDensityFunction","density","compute","clampedMap","Registries","NoiseParameters","rootRegistries","Registry","root","fetchAllPresets","fetchRegistry","DENSITY_FUNCTION","clear","assign","getOrThrow","NOISE","minX","done","chunks","cached","Chunk","ChunkPos","Z","forcedBiome","chunk","buildSurface","chunkIndex","BiomeSourcePreview","shown","setScale","focused","setFocused","layers","setLayers","Set","refineTimeout","legacyRandomSource","getOctaves","calculateState","useCanvas","round","oz","col","xRange","zRange","l2","getClimates","worldX","worldZ","getBiomeColor","getBiome","brightness","biomeMap","xx","zz","toWorld","getClimate","changeScale","newScale","BtnMenu","enabled","newSeed","k","toUpperCase","toFixed","DecoratorPreview","setSeed","randomSeed","DensityFunctionPreview","autoScroll","setAutoScroll","scrollInterval","densityFunction","worldY","setInterval","NoisePreview","NoiseSettingsPreview","setBiome","setBiomeScale","setBiomeDepth","noiseSettings","block","minBlockX","maxBlockX","BlockPos","getNoiseBlock","allBiomes","HasPreview","setCount","hook","transformOutput","ModelPath","switchNode","getOwnPropertySymbols","blockState","validation","validator","relativePath","getActiveFields","activeFields","out","INDENT","2_spaces","4_spaces","tabs","minified","FORMATS","yaml","dump","flowLevel","doCopy","doDownload","doImport","copySuccess","onError","retransform","onImport","textarea","editor","getSerializedOutput","model2","blockStates2","getOutput","output","setValue","getValue","wrapLists","braceEditor","brace","edit","setOptions","fontSize","showFoldWidgets","highlightSelectedWord","$blockScrolling","on","getSession","setMode","indent2","format2","setOption","selectAll","configure","clipboard","writeText","click","data-cy","changeIndent","changeFormat","changeHighlighting","spellcheck","autocorrect","onBlur","style","mapper","getter","setter","silent","selectRegistries","hiddenFields","flattenedFields","inlineFields","nbtFields","fixedLists","collapsedFields","collapsableFields","keysModel","MapNode","StringNode","historyMax","prefix","suffix","renderHtml","data-category","boolean","states","BooleanSuffix","choices","choice","activeCase","contextPath","getModel","getArray","choiceContextPath","choiceContext","inject","c2","def","newValue","pathLocale","contextPush","expand","collapse","isToggled","useToggles","maxShown","setMaxShown","maxLength","ErrorPopup","modelPush","cValue","cId","cPath","canToggle","toggle","nested","Collapsed","MemoedTreeNode","actions","splice","disabled","keyPath","keysSchema","enum","last","errors","add","ObjectNode","fromEntries","cSchema","number","NumberSuffix","getChildModelPath","isDecorated","wrapper","fields","originalFields","decorators","iterateNestedDecorators","ListNode","featurePath","decoratorsPath","ModelWrapper","path2","modelArr","equals","newDecorators","feature2","produceNestedDecorators","createDecoratorsWrapper","optional","onExpand","onCollapse","toggled","expanded","newCtx","pools","loot","child","context2","cPrefix","cSuffix","cBody","isFlattened","isInlined","HelpPopup","string","StringSuffix","toggleState","setToggleState","toggleAll","setToggleAll","ctrlKey","integer","parsed","parseFloat","padStart","getValues","isEnum","pool","additional","datalistId","findGenerator","values2","memo","onContextMenu","preventDefault","a","description","navigator","prev","next","hash","withModel","getAll","e2","message2","popupIcon","popup","useErrorBoundary","setState","FullNode","term","useTheme","themeSuffix","themeUrl","location","host","GiscusReact","repoId","categoryId","mapping","reactionsEnabled","emitMetadata","inputPosition","Themes","system","dark","light","useVersion","useTitle","getGenerator","Link","Icons","home","route","th","rx","y","report","sounds","cy","r","clip-rule","sound","delay","pitch","volume","onEdit","onDelete","delayedPlay","loading","setLoading","playing","setPlaying","invalid","setInvalid","howls","command","soundEvent","h2","stop","soundPath","howl","Howl","src","rate","completed","copyActive","setCopyActive","copyTimeout","step","desc","roots","groups","leaves","hidden","setHidden","entries2","TreeViewEntry","TreeView","activeTags","toggleTag","ArticleLink","ChangelogTag","dangerouslySetInnerHTML","__html","marked","changes","defaultOrder","setTags","filteredChangelogs","q2","toLowerCase","sort","setSort","sortedChangelogs","ChangelogEntry","tab","setTab","changelogs","setChangelogs","changelogs2","catch","console","VersionMetaData","releaseDate","release_target","data_version","protocol_version","data_pack_version","resource_pack_version","ChangelogList","Giscus","Date","release_time","toLocaleDateString","day","month","year","compact","snapshots","setSnapshots","filteredVersions","Checkbox","VersionEntry","ToolCard","setError","Ad","ErrorPanel","useProject","errorBoundary","errorRetry","allowedVersions","currentPreset","setModel","setBlockStates","versionData","Reference","ChoiceNode","schemaName","validate","err","m","loadPreset","dirty","setDirty","fileRename","setFileRename","fileSaved","doSave","useActiveTimeout","fileError","doFileError","doFileRename","onKeyUp","undo","redo","presets","setPresets","sourceShown","setSourceShown","innerWidth","setCopy","setDownload","setImport","previewShown","setPreviewShown","hasPreview","actionsShown","SearchList","Tree","PreviewPanel","SourcePanel","getFilePath","setSounds","soundKeys","configs","setConfigs","addConfig","deleteConfig","setDelayedPlay","hasDelay","SoundConfig","setVersions","versions2","selectedId","selected","nextVersion","getOffsetVersion","previousVersion","VersionDetail","VersionList","offsetIndex","Header","Router","Home","Category","Sounds","Changelog","Generator","LocaleProvider","ThemeProvider","VersionProvider","TitleProvider","ProjectProvider","App","render","Main"],"mappings":"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"} \ No newline at end of file diff --git a/assets/index.html b/assets/index.html index e091821e..c01649c8 100644 --- a/assets/index.html +++ b/assets/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/assets/model/index.html b/assets/model/index.html index 5e9a2261..203d001f 100644 --- a/assets/model/index.html +++ b/assets/model/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/assets/ru.1298edc9.js b/assets/ru.1298edc9.js new file mode 100644 index 00000000..fc548d45 --- /dev/null +++ b/assets/ru.1298edc9.js @@ -0,0 +1,2 @@ +var e=JSON.parse('{"advancement.criteria":"Условие","advancement.display":"Отображение","advancement.display.announce_to_chat":"Сообщить в чат","advancement.display.background":"Фон","advancement.display.description":"Описание","advancement.display.frame":"Рамка","advancement.display.frame.challenge":"Испытание","advancement.display.frame.goal":"Цель","advancement.display.frame.task":"Обычная","advancement.display.help":"Если указано, достижение будет отображаться в интерфейсе достижений.","advancement.display.hidden":"Скрыто","advancement.display.icon":"Значок","advancement.display.icon.item":"Иконка предмета","advancement.display.icon.nbt":"NBT значка","advancement.display.show_toast":"Показать достижение","advancement.display.title":"Заголовок","advancement.parent":"Предыдущее достижение","advancement.rewards":"Награды","advancement.rewards.experience":"Опыт","advancement.rewards.function":"Функция","advancement.rewards.loot":"Таблицы достижений","advancement.rewards.recipes":"Рецепты","advancement_trigger.bee_nest_destroyed":"Разрушил пчелиное гнездо","advancement_trigger.bred_animals":"Свёл животных","advancement_trigger.brewed_potion":"Сварил зелье","advancement_trigger.changed_dimension":"Перешёл в другое измерение","advancement_trigger.channeled_lightning":"Попал «Громовержцем»","advancement_trigger.construct_beacon":"Cоорудил маяк","advancement_trigger.consume_item":"Употребил предмет","advancement_trigger.cured_zombie_villager":"Излечил зомби-жителя","advancement_trigger.effects_changed":"Эффекты изменены","advancement_trigger.enchanted_item":"Зачаровал предмет","advancement_trigger.enter_block":"Находится в блоке","advancement_trigger.entity_hurt_player":"Получил урон","advancement_trigger.entity_killed_player":"Убит сущностью","advancement_trigger.fall_from_height":"Упасть с высоты","advancement_trigger.filled_bucket":"Наполнил ведро","advancement_trigger.fishing_rod_hooked":"Зацепил удочкой","advancement_trigger.hero_of_the_village":"Герой Деревни","advancement_trigger.impossible":"Невозможный","advancement_trigger.inventory_changed":"Изменение инвентаря","advancement_trigger.item_durability_changed":"Прочность предмета изменена","advancement_trigger.item_used_on_block":"Использовал предмет на блоке","advancement_trigger.killed_by_crossbow":"Убит из арбалета","advancement_trigger.levitation":"Левитация","advancement_trigger.location":"Местоположение","advancement_trigger.nether_travel":"Попал в Незер","advancement_trigger.placed_block":"Поставил блок","advancement_trigger.player_generates_container_loot":"Игрок генерирует лут в контейнере","advancement_trigger.player_hurt_entity":"Нанёс урон","advancement_trigger.player_killed_entity":"Убил сущность","advancement_trigger.recipe_unlocked":"Разблокировал рецепт","advancement_trigger.ride_entity_in_lava":"Оседлать сущность в лаве","advancement_trigger.safely_harvest_honey":"Безопасно собрал мёд","advancement_trigger.shot_crossbow":"Выстрелил из арбалета","advancement_trigger.slept_in_bed":"Лёг на кровать","advancement_trigger.slide_down_block":"Скользит вниз по блоку","advancement_trigger.summoned_entity":"Призвал сущность","advancement_trigger.tame_animal":"Приручил животное","advancement_trigger.target_hit":"Попадание","advancement_trigger.thrown_item_picked_up_by_entity":"Выкинутый предмет подобран сущностью","advancement_trigger.tick":"Такт","advancement_trigger.used_ender_eye":"Использовал око Эндера","advancement_trigger.used_totem":"Использовал тотем","advancement_trigger.villager_trade":"Поторговал с крестьянином","advancement_trigger.voluntary_exile":"Вызвал рейд","attribute.generic_armor":"Броня","attribute.generic_armor_toughness":"Твёрдость брони","attribute.generic_attack_damage":"Урон","attribute.generic_attack_knockback":"Отбрасывание","attribute.generic_attack_speed":"Скорость атаки","attribute.generic_flying_speed":"Скорость полёта","attribute.generic_follow_range":"Диапазон преследования моба","attribute.generic_knockback_resistance":"Сопротивление отбрасыванию","attribute.generic_luck":"Удача","attribute.generic_max_health":"Максимальное здоровье","attribute.generic_movement_speed":"Скорость движения","attribute.horse.jump_strength":"Сила прыжка лошади","attribute.zombie.spawn_reinforcements":"Подкрепление зомби","attribute_modifier.amount":"Количество","attribute_modifier.attribute":"Атрибут","attribute_modifier.name":"Название","attribute_modifier.operation":"Действие","attribute_modifier.operation.addition":"Прибавление","attribute_modifier.operation.multiply_base":"Множитель основы","attribute_modifier.operation.multiply_total":"Множитель","attribute_modifier.slot":"Ячейки","attribute_modifier.slot.list":"Несколько","attribute_modifier.slot.string":"Одна","axis.x":"X","axis.y":"Y","axis.z":"Z","badge.experimental":"Экспериментальный","badge.unstable":"Нестабильный","biome.carvers":"Полости","biome.carvers.air":"Воздух","biome.carvers.liquid":"Жидкость","biome.category":"Категория","biome.creature_spawn_probability":"Шанс появления не враждебных мобов","biome.depth":"Глубина","biome.depth.help":"Поднимает или опускает рельеф местности. Положительные значения считаются сушей, а отрицательные — океанами.","biome.downfall":"Влажность","biome.effects":"Эффекты","biome.effects.additions_sound":"Дополнительные звуки","biome.effects.additions_sound.sound":"Звук","biome.effects.additions_sound.tick_chance":"Возможность за тик","biome.effects.ambient_sound":"Эмбиент","biome.effects.fog_color":"Цвет тумана","biome.effects.foliage_color":"Цвет листвы","biome.effects.grass_color":"Цвет травы","biome.effects.grass_color_modifier":"Модификатор цвета травы","biome.effects.grass_color_modifier.dark_forest":"Тёмный лес","biome.effects.grass_color_modifier.none":"Нет","biome.effects.grass_color_modifier.swamp":"Болото","biome.effects.mood_sound":"Пещерный звук","biome.effects.mood_sound.block_search_extent":"Радиус поиска позиции","biome.effects.mood_sound.offset":"Смещение","biome.effects.mood_sound.sound":"Звук","biome.effects.mood_sound.tick_delay":"Задержка в тиках","biome.effects.music":"Музыка","biome.effects.music.max_delay":"Максимальная задержка","biome.effects.music.min_delay":"Минимальная задержка","biome.effects.music.replace_current_music":"Замена играющей музыки","biome.effects.music.sound":"Звук","biome.effects.particle":"Частица","biome.effects.particle.options":"Параметры","biome.effects.particle.options.type":"Тип частицы","biome.effects.particle.probability":"Шанс","biome.effects.sky_color":"Цвет неба","biome.effects.water_color":"Цвет воды","biome.effects.water_fog_color":"Цвет подводного тумана","biome.features":"Размещаемые объекты","biome.features.entry":"Шаг %0%","biome.features.entry.entry":"Объект","biome.player_spawn_friendly":"Подходит для спавна","biome.player_spawn_friendly.help":"Если «Да», точка появления в мире предпочтительно будет в этом биоме.","biome.precipitation":"Осадки","biome.precipitation.none":"Нет","biome.precipitation.rain":"Дождь","biome.precipitation.snow":"Снег","biome.scale":"Масштаб","biome.scale.help":"Растягивает местность по вертикали. Чем меньше значение, тем ровнее местность.","biome.spawn_costs":"Цена появления","biome.spawn_costs.charge":"Заряд","biome.spawn_costs.energy_budget":"Бюджет энергии","biome.spawners":"Появление мобов","biome.spawners.ambient":"Окружение","biome.spawners.creature":"Пассивные","biome.spawners.entry":"Появление","biome.spawners.entry.maxCount":"Максимальное количество","biome.spawners.entry.minCount":"Минимальное количество","biome.spawners.entry.type":"Тип","biome.spawners.entry.weight":"Вес","biome.spawners.misc":"Другие","biome.spawners.monster":"Монстр","biome.spawners.water_ambient":"Водное окружение","biome.spawners.water_creature":"Водные сущности","biome.starts":"Начало структуры","biome.starts.entry":"Строение","biome.starts.help":"Список настроенных строений.","biome.surface_builder":"Строитель поверхности","biome.temperature":"Температура","biome.temperature_modifier":"Модификатор температуры","biome.temperature_modifier.frozen":"Мороз","biome.temperature_modifier.none":"Нет","block.block":"ID блока","block.nbt":"NBT","block.state":"Константы блока","block.tag":"Тег","block_definition.multipart":"Множественные условия","block_definition.multipart.entry":"Часть","block_definition.multipart.entry.apply":"Применить","block_definition.multipart.entry.when":"Когда","block_definition.variants":"Варианты","block_placer.column_placer.extra_size":"Дополнительный размер","block_placer.column_placer.min_size":"Минимальный размер","block_placer.type":"Тип","block_predicate.all_of.predicates":"Предикаты","block_predicate.any_of.predicates":"Предикаты","block_predicate.inside_world_bounds.offset":"Смещение","block_predicate.matching_blocks.blocks":"Блоки","block_predicate.matching_blocks.blocks.entry":"Блок","block_predicate.matching_blocks.offset":"Смещение","block_predicate.matching_fluids.fluids":"Жидкости","block_predicate.matching_fluids.fluids.entry":"Жидкость","block_predicate.matching_fluids.offset":"Смещение","block_predicate.not.predicate":"Предикат","block_predicate.type":"Тип","block_predicate.would_survive.offset":"Смещение","block_predicate.would_survive.state":"Состояние","block_predicate_type.all_of":"Все из","block_predicate_type.any_of":"Любой из","block_predicate_type.inside_world_bounds":"Внутри границ мира","block_predicate_type.matching_blocks":"Подходящие блоки","block_predicate_type.matching_fluids":"Подходящие жидкости","block_predicate_type.not":"Не","block_predicate_type.replaceable":"Заменяемые","block_predicate_type.solid":"Твёрдый","block_predicate_type.true":"Верно","block_predicate_type.would_survive":"Смог бы выжить","block_state.Name":"Блок","block_state.Properties":"Свойства","block_state_provider.dual_noise_provider.noise":"Шум","block_state_provider.dual_noise_provider.scale":"Масштаб","block_state_provider.dual_noise_provider.seed":"Зерно","block_state_provider.dual_noise_provider.slow_noise":"«Медленный шум»","block_state_provider.dual_noise_provider.slow_scale":"Медленный рост","block_state_provider.dual_noise_provider.states":"Состояния","block_state_provider.dual_noise_provider.variety":"Разнообразие","block_state_provider.noise_provider.noise":"Шум","block_state_provider.noise_provider.scale":"Масштаб","block_state_provider.noise_provider.seed":"Зерно","block_state_provider.noise_provider.states":"Состояния","block_state_provider.noise_threshold_provider.default_state":"Состояние по умолчанию","block_state_provider.noise_threshold_provider.high_chance":"Высокий шанс","block_state_provider.noise_threshold_provider.high_states":"Высокие состояния","block_state_provider.noise_threshold_provider.low_states":"Низкие состояния","block_state_provider.noise_threshold_provider.noise":"Шум","block_state_provider.noise_threshold_provider.scale":"Масштаб","block_state_provider.noise_threshold_provider.seed":"Зерно","block_state_provider.noise_threshold_provider.threshold":"Порог","block_state_provider.randomized_int_state_provider.property":"Параметр","block_state_provider.randomized_int_state_provider.source":"Источник","block_state_provider.randomized_int_state_provider.values":"Значения","block_state_provider.rotated_block_provider.state":"Состояние","block_state_provider.simple_state_provider.state":"Состояние","block_state_provider.type":"Тип","block_state_provider.weighted_state_provider.entries":"Элементы","block_state_provider.weighted_state_provider.entries.entry.data":"Состояние","block_state_provider.weighted_state_provider.entries.entry.weight":"Вес","carver.config":"Параметры","carver.config.aquifers_enabled":"Включены аквиферы","carver.config.canyon.bottom_inclusive":"Дно включительно","carver.config.canyon.shape":"Форма","carver.config.canyon.shape.distance_factor":"Фактор расстояния","carver.config.canyon.shape.horizontal_radius_factor":"Фактор Горизонтального Радиуса","carver.config.canyon.shape.thickness":"Толщина","carver.config.canyon.shape.vertical_radius_center_factor":"Коэффициент Центра Вертикального Радиуса","carver.config.canyon.shape.vertical_radius_default_factor":"Фактор Вертикального Радиуса по Умолчанию","carver.config.canyon.shape.width_smoothness":"Гладкость по ширине","carver.config.canyon.top_inclusive":"Вершина включительно","carver.config.canyon.vertical_rotation":"Вертикальное вращение","carver.config.cave.floor_level":"Уровень Пола","carver.config.cave.horizontal_radius_multiplier":"Множитель Горизонтального Радиуса","carver.config.cave.vertical_radius_multiplier":"Множитель Вертикального Радиуса","carver.config.debug_settings":"Настройки Отладки","carver.config.debug_settings.air_state":"Состояние Воздуха","carver.config.debug_settings.barrier_state":"Состояние Барьера","carver.config.debug_settings.debug_mode":"Режим Отладки","carver.config.debug_settings.lava_state":"Состояние Лавы","carver.config.debug_settings.water_state":"Состояние Воды","carver.config.lava_level":"Уровень Лавы","carver.config.probability":"Шанс","carver.config.y":"Y","carver.config.yScale":"Размер по Y","carver.config.y_scale":"Шакала Y","carver.type":"Тип","cave_surface.ceiling":"Потолок","cave_surface.floor":"Пол","children":"Потомки","children.entry":"Элемент","condition.alternative.terms":"Условия","condition.block_state_property.block":"Блок","condition.block_state_property.properties":"Состояние блока","condition.condition":"Условие","condition.damage_source":"Повреждение","condition.entity_properties.entity":"Сущность","condition.entity_scores.entity":"Сущность","condition.entity_scores.scores":"Счёты","condition.entry":"Предикат","condition.inverted.term":"Выражение","condition.item":"Предмет","condition.killed_by_player.inverse":"Инвертировать","condition.list":"Несколько","condition.location":"Местоположение","condition.location_check.offsetX":"Смещение по X","condition.location_check.offsetY":"Смещение по Y","condition.location_check.offsetZ":"Смещение по Z","condition.object":"Простой","condition.random_chance.chance":"Шанс","condition.random_chance_with_looting.chance":"Шанс","condition.random_chance_with_looting.looting_multiplier":"Множитель «Добычи»","condition.reference.name":"ID предиката","condition.table_bonus.chances":"Шансы","condition.table_bonus.chances.entry":"Шанс","condition.table_bonus.enchantment":"Чары","condition.time_check.period":"Период","condition.time_check.period.help":"Если задан, время будет получено взятием остатка от деления времени на заданный период.","condition.time_check.value":"Значение","condition.value_check.range":"Диапазон","condition.value_check.value":"Значение","condition.weather_check.raining":"Дождь","condition.weather_check.thundering":"Гроза","conditions":"Условия","conditions.entry":"Условие","conditions.list":"Условия","conditions.object":"Устаревший","copy_source.block_entity":"Блок-сущность","copy_source.direct_killer":"Убийца-причина урона","copy_source.killer":"Убийца","copy_source.killer_player":"Игрок-убийца","copy_source.this":"Текущая сущность","criterion.bee_nest_destroyed.block":"Блок","criterion.bee_nest_destroyed.num_bees_inside":"Пчёл внутри","criterion.bred_animals.child":"Потомок","criterion.bred_animals.parent":"Предок","criterion.bred_animals.partner":"Партнёр","criterion.brewed_potion.potion":"Зелье","criterion.changed_dimension.from":"Откуда","criterion.changed_dimension.to":"Куда","criterion.channeled_lightning.victims":"Жертвы","criterion.channeled_lightning.victims.entry":"Сущность","criterion.conditions":"Условия","criterion.construct_beacon.beacon_level":"Уровень конструкции","criterion.consume_item.item":"Предмет","criterion.cured_zombie_villager.villager":"Крестьянин","criterion.cured_zombie_villager.zombie":"Зомби","criterion.effects_changed.effects":"Эффект","criterion.enchanted_item.item":"Предмет","criterion.enchanted_item.levels":"Уровень","criterion.enter_block.block":"Блок","criterion.enter_block.state":"Состояние","criterion.entity_hurt_player.damage":"Урон","criterion.entity_killed_player.entity":"Сущность-источник","criterion.entity_killed_player.killing_blow":"Смертельный удар","criterion.fall_from_height.distance":"Дистанция","criterion.fall_from_height.start_position":"Стартовая Позиция","criterion.filled_bucket.item":"Предмет","criterion.fishing_rod_hooked.entity":"Подтянутая сущность","criterion.fishing_rod_hooked.item":"Предмет","criterion.hero_of_the_village.location":"Местоположение","criterion.inventory_changed.items":"Предметы","criterion.inventory_changed.items.entry":"Предмет","criterion.inventory_changed.slots":"Ячейки","criterion.inventory_changed.slots.empty":"Пустых ячеек","criterion.inventory_changed.slots.full":"Полных ячеек","criterion.inventory_changed.slots.occupied":"Занятых ячеек","criterion.item_durability_changed.delta":"Разница","criterion.item_durability_changed.durability":"Прочность","criterion.item_durability_changed.item":"Предмет","criterion.item_used_on_block.item":"Предмет","criterion.item_used_on_block.location":"Местоположение","criterion.killed_by_crossbow.unique_entity_types":"Уникальных типов сущностей","criterion.killed_by_crossbow.victims":"Жертвы","criterion.killed_by_crossbow.victims.entry":"Сущность","criterion.levitation.distance":"Расстояние","criterion.levitation.duration":"Длительность","criterion.location.location":"Местоположение","criterion.nether_travel.distance":"Расстояние","criterion.nether_travel.entered":"Местоположение входа","criterion.nether_travel.exited":"Местоположение выхода","criterion.nether_travel.start_position":"Стартовая позиция","criterion.placed_block.block":"Блок","criterion.placed_block.item":"Предмет","criterion.placed_block.location":"Местоположение","criterion.placed_block.state":"Состояние","criterion.player":"Игрок","criterion.player_generates_container_loot.loot_table":"Таблица добычи","criterion.player_hurt_entity.damage":"Урон","criterion.player_hurt_entity.entity":"Сущность-жертва","criterion.player_killed_entity.entity":"Сущность-жертва","criterion.player_killed_entity.killing_blow":"Смертельный удар","criterion.recipe_unlocked.recipe":"Рецепт","criterion.ride_entity_in_lava.distance":"Дистанция","criterion.ride_entity_in_lava.start_position":"Стартовая позиция","criterion.rod":"Удочка","criterion.safely_harvest_honey.block":"Блок","criterion.safely_harvest_honey.item":"Предмет","criterion.shot_crossbow.item":"Предмет","criterion.slept_in_bed.location":"Местоположение","criterion.slide_down_block.block":"Блок","criterion.summoned_entity.entity":"Сущность","criterion.tame_animal.entity":"Животное","criterion.target_hit.projectile":"Снаряд","criterion.target_hit.shooter":"Стрелок","criterion.target_hit.signal_strength":"Мощность сигнала","criterion.thrown_item_picked_up_by_entity.entity":"Сущность","criterion.thrown_item_picked_up_by_entity.item":"Предмет","criterion.trigger":"Триггер","criterion.used_ender_eye.distance":"Расстояние","criterion.used_totem.item":"Предмет тотема","criterion.villager_trade.item":"Купленный предмет","criterion.villager_trade.villager":"Крестьянин","criterion.voluntary_exile.location":"Местоположение","damage.blocked":"Заблокирован","damage.dealt":"Нанесённый урон","damage.source_entity":"Сущность-источник","damage.taken":"Полученный урон","damage.type":"Тип урона","damage_source.bypasses_armor":"Игнорирование брони","damage_source.bypasses_invulnerability":"Пустота","damage_source.bypasses_magic":"Голод","damage_source.direct_entity":"Сущность-причина урона","damage_source.is_explosion":"Взрыв","damage_source.is_fire":"Огонь","damage_source.is_lightning":"Молния","damage_source.is_magic":"Магия","damage_source.is_projectile":"Снаряд","damage_source.source_entity":"Сущность-источник урона","decorator.block_predicate_filter.predicate":"Предикат","decorator.carving_mask.step":"Этап генерации","decorator.cave_surface.allow_water":"Разрешить воду","decorator.cave_surface.floor_to_ceiling_search_range":"Радиус поиска","decorator.cave_surface.floor_to_ceiling_search_range.help":"Радиус поиска от низа до вершины.","decorator.cave_surface.surface":"Поверхность","decorator.chance.chance":"Шанс","decorator.config":"Параметры","decorator.count.count":"Количество","decorator.count_extra.count":"Количество","decorator.count_extra.extra_chance":"Вероятность дополнительного","decorator.count_extra.extra_count":"Дополнительное количество","decorator.count_multilayer.count":"Количество","decorator.count_noise.above_noise":"Количество выше шума","decorator.count_noise.below_noise":"Количество ниже шума","decorator.count_noise.noise_level":"Уровень шума","decorator.count_noise_biased.noise_factor":"Множитель шума","decorator.count_noise_biased.noise_offset":"Смещение шума","decorator.count_noise_biased.noise_to_count_ratio":"Соотношение шума к количеству","decorator.count_on_every_layer.count":"Количество","decorator.decorated.inner":"Внутреннее","decorator.decorated.outer":"Внешнее","decorator.depth_average.baseline":"Начальное значение","decorator.depth_average.spread":"Распространение","decorator.environment_scan.direction_of_search":"Направление","decorator.environment_scan.max_steps":"Максимум шагов","decorator.environment_scan.target_condition":"Условия цели","decorator.glowstone.count":"Количество","decorator.height_range.height":"Высота","decorator.heightmap.heightmap":"Карта высот","decorator.heightmap_spread_double.heightmap":"Карта высот","decorator.lava_lake.chance":"Шанс","decorator.noise_based_count.noise_factor":"Фактор шума","decorator.noise_based_count.noise_offset":"Смещение шума","decorator.noise_based_count.noise_to_count_ratio":"Отношение шума к количеству отсчетов","decorator.noise_threshold_count.above_noise":"Выше шума","decorator.noise_threshold_count.below_noise":"Ниже шума","decorator.noise_threshold_count.noise_level":"Уровень шума","decorator.random_offset.xz_spread":"Разброс по XZ","decorator.random_offset.y_spread":"Разброс по Y","decorator.range.bottom_inclusive":"Дно Включительно","decorator.range.height":"Высота","decorator.range.top_inclusive":"Потолок Включительно","decorator.range_biased_to_bottom.bottom_inclusive":"Дно Включительно","decorator.range_biased_to_bottom.cutoff":"Осечка","decorator.range_biased_to_bottom.top_inclusive":"Потолок Включительно","decorator.range_very_biased_to_bottom.bottom_inclusive":"Дно Включительно","decorator.range_very_biased_to_bottom.cutoff":"Осечка","decorator.range_very_biased_to_bottom.top_inclusive":"Потолок Включительно","decorator.surface_relative_threshold_filter.heightmap":"Карта высот","decorator.surface_relative_threshold_filter.max_inclusive":"Макс. включительно","decorator.surface_relative_threshold_filter.min_inclusive":"Мин. включительно","decorator.surface_water_depth_filter.max_water_depth":"Максимальная глубина воды","decorator.type":"Тип","decorator.water_depth_threshold.max_water_depth":"Максимальная глубина воды","density_function.argument":"Аргумент","density_function.argument1":"Первый аргумент","density_function.argument2":"Второй аргумент","density_function.input":"Ввод","density_function.max":"Максимум","density_function.min":"Минимум","density_function.number":"Константа","density_function.object":"В очереди","density_function.string":"Ссылка","density_function.type":"Тип","density_function.xz_scale":"Размер по XZ","dimension":"Измерение","dimension.generator":"Генератор","dimension.generator.biome_source":"Источник биомов","dimension.overworld":"Обычный мир","dimension.the_end":"Энд","dimension.the_nether":"Незер","dimension.type":"Параметры измерения","dimension.type.object":"Произвольно","dimension.type.string":"Предустановка","dimension_type.ambient_light":"Свет окружения","dimension_type.ambient_light.help":"Значение от 0 до 1.","dimension_type.bed_works":"Работает Кровать","dimension_type.bed_works.help":"Если значение установлено в true, игроки могут использовать кровати для того, чтобы устанавливать свою точку возрождения и продвинуться во времени. Если значение установлено в false, кровать будут взрываться при использовании.","dimension_type.coordinate_scale":"Масштаб координат","dimension_type.coordinate_scale.help":"Множитель, который применяется к координатам при перемезении между измерениями через портал или при помощи команды /execute.","dimension_type.effects":"Эффекты","dimension_type.effects.help":"Эффекты неба","dimension_type.effects.overworld":"Верхний Мир","dimension_type.effects.the_end":"Край","dimension_type.effects.the_nether":"Ад","dimension_type.fixed_time":"Фиксированное время","dimension_type.fixed_time.help":"При указании значения солнце будет находится в фиксированном положении.","dimension_type.has_ceiling":"Есть крыша из бедрока","dimension_type.has_ceiling.help":"Влияет на погоду, элементы карты и правила возрождения.","dimension_type.has_raids":"Имеет Рейды","dimension_type.has_raids.help":"Если включено, игроки с эффектом Дурного Знамения могут вызвать рейд.","dimension_type.has_skylight":"Есть свет неба","dimension_type.has_skylight.help":"Влияет на погоду, принцип освещения и правила возрождения.","dimension_type.height":"Высота","dimension_type.height.help":"Общая высота, в которой существуют блоки. Макс Y = Мин Y + Высота.","dimension_type.infiniburn":"Вечногорящие блоки","dimension_type.infiniburn.help":"Тег блоков, определяющий, какие блоки будут гореть вечно.","dimension_type.logical_height":"Логическая Высота","dimension_type.logical_height.help":"Порталы не могут появляться, а хорус не может телепортировать игроков выше этой высоты.","dimension_type.min_y":"Мин Y","dimension_type.min_y.help":"Минимальная высота, в которой могут существовать блоки.","dimension_type.name":"ID","dimension_type.natural":"Земное","dimension_type.natural.help":"Если «Да», из порталов будут появляться зомбифицированные пиглины. Если «Нет», компас и часы будут крутиться случайным образом.","dimension_type.piglin_safe":"Пиглины не превращаются в зомби","dimension_type.piglin_safe.help":"Если выключено, пиглины будут трястись и преврашаться в зомбифицированных пиглинов.","dimension_type.respawn_anchor_works":"Якорь Возрождения Работает","dimension_type.respawn_anchor_works.help":"Если включено, игроки могут заряжать и использовать якори возрождения, для установки спавнпоинтов. Если выключено, якори возрождения взрываются при использовании.","dimension_type.ultrawarm":"Горячее","dimension_type.ultrawarm.help":"Определяет, испаряется ли вода и высыхают ли губки.","direction.down":"Низ","direction.east":"Восток","direction.north":"Север","direction.south":"Юг","direction.up":"Верх","direction.west":"Запад","distance.absolute":"Абсолютное","distance.horizontal":"Горизонтальное","distance.x":"X","distance.y":"Y","distance.z":"Z","enchantment.aqua_affinity":"Подводник","enchantment.bane_of_arthropods":"Бич членистоногих","enchantment.binding_curse":"Проклятие несъёмности","enchantment.blast_protection":"Взрывоустойчивость","enchantment.channeling":"Громовержец","enchantment.depth_strider":"Подводная ходьба","enchantment.efficiency":"Эффективность","enchantment.enchantment":"Чары","enchantment.feather_falling":"Невесомость","enchantment.fire_aspect":"Заговор огня","enchantment.fire_protection":"Огнеупорность","enchantment.flame":"Горящая стрела","enchantment.fortune":"Удача","enchantment.frost_walker":"Ледоход","enchantment.impaling":"Пронзатель","enchantment.infinity":"Бесконечность","enchantment.knockback":"Отдача","enchantment.levels":"Уровень","enchantment.looting":"Добыча","enchantment.loyalty":"Верность","enchantment.luck_of_the_sea":"Везучий рыбак","enchantment.lure":"Приманка","enchantment.mending":"Починка","enchantment.multishot":"Тройной выстрел","enchantment.piercing":"Пронзающая стрела","enchantment.power":"Сила","enchantment.projectile_protection":"Защита от снарядов","enchantment.protection":"Защита","enchantment.punch":"Откидывание","enchantment.quick_charge":"Быстрая перезарядка","enchantment.respiration":"Подводное дыхание","enchantment.riptide":"Тягун","enchantment.sharpness":"Острота","enchantment.silk_touch":"Шёлковое касание","enchantment.smite":"Небесная кара","enchantment.sweeping":"Разящий клинок","enchantment.thorns":"Шипы","enchantment.unbreaking":"Прочность","enchantment.vanishing_curse":"Проклятие утраты","entity.distance":"Расстояние","entity.effects":"Эффекты","entity.equipment":"Снаряжение","entity.fishing_hook":"Поплавок","entity.fishing_hook.in_open_water":"В открытой воде","entity.flags":"Состояние","entity.isBaby":"Ребёнок","entity.isOnFire":"Горит","entity.isSneaking":"Крадётся","entity.isSprinting":"Бежит","entity.isSwimming":"Плывёт","entity.location":"Местоположение","entity.nbt":"NBT","entity.player":"Игрок","entity.targeted_entity":"Целевая сущность","entity.team":"Команда","entity.type":"Сущность","entity.vehicle":"Транспорт","entity_source.direct_killer":"Убийца-причина урона","entity_source.killer":"Убийца","entity_source.killer_player":"Игрок-убийца","entity_source.this":"Текущая","entry":"Элемент","error":"Ошибка","error.expected_boolean":"Ожидался логический тип данных (Boolean)","error.expected_integer":"Ожидалось целое число (Integer)","error.expected_json":"Ожидался JSON","error.expected_list":"Ожидался массив (Array)","error.expected_number":"Ожидалось число","error.expected_object":"Ожидался объект","error.expected_range":"Ожидался диапазон","error.expected_string":"Ожидалась строка","error.expected_uniform_int":"Ожидалось целое число (Uniform integer)","error.height_multiple":"Высота должна быть кратна %0%","error.invalid_binomial":"Диапазон не может быть биноминального типа","error.invalid_empty_list":"Массив не может быть пустым","error.invalid_empty_string":"Строка не может быть пустой","error.invalid_enum_option":"Неверное значение \\"%0%\\"","error.invalid_exact":"Диапазон не может быть константой","error.invalid_list_range.larger":"Длина списка %0% больше максимальной %1%","error.invalid_list_range.smaller":"Длина списка %0% меньше минимальной %1%","error.invalid_number_range.between":"Ожидалось число в промежутке от %1% до %2%","error.invalid_pattern":"Неверная строка: %0%","error.min_y_multiple":"Минимальная Высота должна быть кратна %0%","error.min_y_plus_height":"Минимальная Высота + высота не могут быть больше чем %0%","error.recipe.invalid_key":"только один символ разрешён как ключ","false":"Нет","feature.bamboo.probability":"Вероятность","feature.basalt_columns.height":"Высота","feature.block_pile.state_provider":"Состояние","feature.config":"Настройки","feature.decorated.decorator":"Декоратор","feature.decorated.feature":"Объект","feature.disk.radius":"Радиус","feature.disk.state":"Состояние","feature.disk.targets":"Цели","feature.disk.targets.entry":"Состояние","feature.dripstone_cluster.height":"","feature.dripstone_cluster.height_deviation":"","feature.dripstone_cluster.max_distance_from_edge_affecting_chance_of_dripstone_column.help":"Максимальное расстояние от края, меняющее шанс появления колонн капельников.","feature.dripstone_cluster.max_stalagmite_stalactite_height_diff.help":"Максимальная разница в высоте между сталагмитами и сталактитами.","feature.dripstone_cluster.radius":"Радиус","feature.emerald_ore.state":"Состояние","feature.emerald_ore.target":"Цель","feature.end_gateway.exact":"Точный телепорт","feature.end_gateway.exit":"Выход","feature.fill_layer.height":"Высота","feature.fill_layer.state":"Состояние","feature.flower.blacklist":"Чёрный список","feature.flower.block_placer":"Размещение блоков","feature.flower.can_replace":"Может заменить","feature.flower.feature":"Размещаемый объект","feature.flower.need_water":"Требуется вода","feature.flower.project":"Проекция","feature.flower.state_provider":"Источник состояния","feature.flower.tries":"Попыток","feature.flower.whitelist":"Белый список","feature.flower.xspread":"Распространение по X","feature.flower.xz_spread":"Распространение по XZ","feature.flower.y_spread":"Распространение по Y","feature.flower.yspread":"Распространение по Y","feature.flower.zspread":"Распространение по Z","feature.forest_rock.state":"Состояние","feature.fossil.max_empty_corners_allowed.help":"Если больше углов контактируют с воздухом, размещение структуры отменяется.","feature.geode.blocks.invalid_blocks.help":"Когда встречается неподходящий блок, размещение структуры отменяется.","feature.glow_lichen.can_be_placed_on.entry":"Состояние","feature.glow_lichen.chance_of_spreading":"Вероятность распространения","feature.glow_lichen.search_range":"Радиус поиска","feature.huge_brown_mushroom.cap_provider":"Источник шляпки","feature.huge_brown_mushroom.foliage_radius":"Радиус шляпки","feature.huge_brown_mushroom.stem_provider":"Источник ножки","feature.huge_fungus.decor_state":"Декорация","feature.huge_fungus.hat_state":"Шляпка","feature.huge_fungus.stem_state":"Ножка","feature.huge_red_mushroom.cap_provider":"Источник шляпки","feature.huge_red_mushroom.foliage_radius":"Радиус шляпки","feature.huge_red_mushroom.stem_provider":"Источник ножки","feature.ice_patch.radius":"Радиус","feature.ice_patch.state":"Состояние","feature.ice_patch.targets":"Цели","feature.ice_patch.targets.entry":"Состояние","feature.iceberg.state":"Состояние","feature.lake.state":"Состояние","feature.netherrack_replace_blobs.radius":"Радиус","feature.netherrack_replace_blobs.state":"Состояние","feature.netherrack_replace_blobs.target":"Цель","feature.no_bonemeal_flower.feature":"Размещаемый объект","feature.no_surface_ore.size":"Размер","feature.no_surface_ore.state":"Состояние","feature.no_surface_ore.target":"Цель","feature.object":"Произвольно","feature.ore.discard_chance_on_air_exposure":"Вероятность сброса при контакте с воздухом","feature.ore.size":"Размер","feature.ore.targets":"Цели","feature.ore.targets.entry.state":"Состояние","feature.ore.targets.entry.target":"Цель","feature.random_boolean_selector.feature_false":"Размещаемый объект 1","feature.random_boolean_selector.feature_true":"Размещаемый объект 2","feature.random_patch.blacklist":"Чёрный список","feature.random_patch.block_placer":"Размещение блоков","feature.random_patch.can_replace":"Может заменить","feature.random_patch.feature":"Размещаемый объект","feature.random_patch.need_water":"Требуется вода","feature.random_patch.project":"Проекция","feature.random_patch.state_provider":"Состояние","feature.random_patch.tries":"Попыток","feature.random_patch.whitelist":"Белый список","feature.random_patch.xspread":"Распространение по X","feature.random_patch.yspread":"Распространение по Y","feature.random_patch.zspread":"Распространение по Z","feature.random_selector.default":"По умолчанию","feature.random_selector.features":"Объекты","feature.random_selector.features.entry":"Объект","feature.random_selector.features.entry.chance":"Вероятность","feature.random_selector.features.entry.feature":"Размещаемый объект","feature.scattered_ore.discard_chance_on_air_exposure":"Вероятность сброса при контакте с воздухом","feature.scattered_ore.size":"Размер","feature.scattered_ore.targets":"Цели","feature.scattered_ore.targets.entry.state":"Состояние","feature.scattered_ore.targets.entry.target":"Цель","feature.sea_pickle.count":"Количество","feature.seagrass.probability":"Вероятность","feature.simple_block.place_in":"Разместить в","feature.simple_block.place_in.entry":"Состояние","feature.simple_block.place_on":"Разместить на","feature.simple_block.place_on.entry":"Состояние","feature.simple_block.place_under":"Разместить под","feature.simple_block.place_under.entry":"Состояние","feature.simple_block.to_place":"Состояние","feature.simple_random_selector.features":"Объекты","feature.simple_random_selector.features.entry":"Размещаемый объект","feature.spring_feature.state":"Состояние","feature.string":"Ссылка","feature.tree.decorators":"Декораторы","feature.tree.decorators.entry":"Декоратор дерева","feature.tree.foliage_placer":"Распределение листьев","feature.tree.heightmap":"Карта Высоты","feature.tree.ignore_vines":"Игнорировать лианы","feature.tree.leaves_provider":"Источник листвы","feature.tree.max_water_depth":"Максимальная Глубина Воды","feature.tree.minimum_size":"Минимальный размер","feature.tree.minimum_size.limit":"Лимит","feature.tree.minimum_size.lower_size":"Низкий Размер","feature.tree.minimum_size.middle_size":"Средний Размер","feature.tree.minimum_size.type":"Минимальный размер","feature.tree.minimum_size.upper_limit":"Верхняя Граница","feature.tree.minimum_size.upper_size":"Высокий Размер","feature.tree.trunk_placer":"Распределение Обрезки","feature.tree.trunk_provider":"Обрезание Деревьев","feature.type":"Тип","fluid.fluid":"ID жидкости","fluid.state":"Состояние жидкости","fluid.tag":"Тег жидкостей","fluid_state.Name":"Жидкость","function.apply_bonus.enchantment":"Чары","function.apply_bonus.formula":"Формула","function.apply_bonus.formula.binomial_with_bonus_count":"Биноминальное распределение с бонусным количеством","function.apply_bonus.formula.ore_drops":"Дроп руд","function.apply_bonus.formula.uniform_bonus_count":"Равномерное распределение с бонусным количеством","function.apply_bonus.parameters":"Параметры","function.apply_bonus.parameters.bonusMultiplier":"Множитель","function.apply_bonus.parameters.extra":"Дополнительное значение","function.apply_bonus.parameters.probability":"Вероятность","function.copy_name.source":"Источник","function.copy_nbt.ops":"Операции с NBT","function.copy_nbt.ops.entry":"Операция","function.copy_nbt.source":"Источник","function.copy_state.block":"Блок","function.copy_state.properties":"Свойства","function.copy_state.properties.entry":"Свойство","function.enchant_randomly.enchantments":"Необязательные чары","function.enchant_randomly.enchantments.entry":"Чары","function.enchant_with_levels.levels":"Уровень","function.enchant_with_levels.treasure":"Чары-сокровища","function.exploration_map.decoration":"Значок","function.exploration_map.destination":"Назначение","function.exploration_map.search_radius":"Радиус поиска (в чанках)","function.exploration_map.skip_existing_chunks":"Не искать в существующих чанках","function.exploration_map.zoom":"Уровень приближения","function.fill_player_head.entity":"Сущность","function.function":"Функция","function.limit_count.limit":"Лимит","function.looting_enchant.count":"Количество","function.looting_enchant.limit":"Лимит","function.set_attributes.modifiers":"Модификаторы","function.set_attributes.modifiers.entry":"Модификатор","function.set_banner_pattern.append":"Добавить","function.set_banner_pattern.patterns":"Узоры","function.set_contents.entries":"Содержимое","function.set_contents.entries.entry":"Элемент","function.set_count.add":"Прибавить","function.set_count.add.help":"Если «Да», изменение будет относительно текущего количества","function.set_count.count":"Количество","function.set_damage.add":"Прибавить","function.set_damage.add.help":"Если «Да», изменение будет относительно текущего повреждения","function.set_damage.damage":"Повреждение","function.set_data.data":"Данные","function.set_enchantments.add":"Прибавить","function.set_enchantments.add.help":"Если «Да», изменение будет относительно текущего уровня","function.set_enchantments.enchantments":"Чары","function.set_loot_table.name":"ID таблицы добычи","function.set_loot_table.seed":"Ключ генератора","function.set_lore.entity":"Сущность","function.set_lore.lore":"Описание","function.set_lore.lore.entry":"Строка","function.set_lore.replace":"Заменить","function.set_name.entity":"Сущность","function.set_name.name":"Название","function.set_nbt.tag":"NBT","function.set_stew_effect.effects":"Эффекты","function.set_stew_effect.effects.entry":"Эффект","function.set_stew_effect.effects.entry.duration":"Длительность","function.set_stew_effect.effects.entry.type":"Эффект","functions":"Функции","functions.entry":"Функция","gamemode.adventure":"Приключение","gamemode.creative":"Творческий","gamemode.spectator":"Наблюдатель","gamemode.survival":"Выживание","generation_step.air":"Воздух","generation_step.liquid":"Жидкость","generator.biome_source.altitude_noise":"Шум альтитуды","generator.biome_source.biome":"Биом","generator.biome_source.biomes":"Биомы","generator.biome_source.humidity_noise":"Шум влажности","generator.biome_source.large_biomes":"Большие биомы","generator.biome_source.legacy_biome_init_layer":"Старый слой инициализации биомов","generator.biome_source.preset":"Шаблон биомов","generator.biome_source.preset.nether":"Незер","generator.biome_source.scale":"Масштаб","generator.biome_source.seed":"Ключ генератора биомов","generator.biome_source.temperature_noise":"Шум температуры","generator.biome_source.type":"Источник биомов","generator.biome_source.weirdness_noise":"Шум странности","generator.seed":"Ключ генератора измерения","generator.settings":"Настройки генератора","generator.settings.biome":"Биом","generator.settings.lakes":"Озёра","generator.settings.layers":"Слои","generator.settings.layers.entry":"Слой","generator.settings.layers.entry.block":"ID блока","generator.settings.layers.entry.height":"Высота","generator.settings.object":"Произвольно","generator.settings.presets.amplified":"Расширенный","generator.settings.presets.caves":"Пещеры","generator.settings.presets.end":"Край","generator.settings.presets.floating_islands":"Парящие острова","generator.settings.presets.nether":"Ад","generator.settings.presets.overworld":"Верхний мир","generator.settings.string":"Шаблон","generator.settings.structures":"Структуры","generator.settings.structures.stronghold":"Крепость (Портал в Край)","generator.settings.structures.stronghold.count":"Количество","generator.settings.structures.stronghold.distance":"Расстояние","generator.settings.structures.stronghold.spread":"Распределение","generator.settings.structures.structures":"Структуры","generator.type":"Тип генератора","generator_biome.biome":"Биом","generator_biome.parameters":"Параметры","generator_biome.parameters.altitude":"Альтитуда","generator_biome.parameters.help":"Эти параметры определяют расположение биома. Каждый биом должен иметь уникальную комбинацию параметров. Биомы с похожими значениями будут генерироваться рядом.","generator_biome.parameters.humidity":"Влажность","generator_biome.parameters.offset":"Смещение","generator_biome.parameters.temperature":"Температура","generator_biome.parameters.weirdness":"Странность","generator_biome_noise.amplitudes":"Амплитуды","generator_biome_noise.amplitudes.entry":"Октава %0%","generator_biome_noise.firstOctave":"Первая октава","generator_structure.salt":"Соль","generator_structure.separation":"Изоляция","generator_structure.separation.help":"Минимальное расстояние в чанках между двумя структурами этого типа. Должно быть меньше чем интервал.","generator_structure.spacing":"Интервал","generator_structure.spacing.help":"Среднее расстояние в чанках между двумя структурами этого типа.","hide_source":"Скрыть источник","item.count":"Количество","item.durability":"Прочность","item.enchantments":"Чары","item.enchantments.entry":"Чары","item.item":"ID предмета","item.nbt":"NBT","item.potion":"Зелье","item.tag":"Тег предметов","item_transform.rotation":"Поворот","item_transform.scale":"Масштаб","item_transform.translation":"Смещение","key.advancements":"Достижения","key.attack":"Атаковать/Разрушить","key.back":"Идти назад","key.chat":"Открыть чат","key.command":"Открыть команды","key.drop":"Выбросить выбранный предмет","key.forward":"Идти вперёд","key.fullscreen":"Включить полноэкранный режим","key.hotbar.1":"Слот быстрого доступа 1","key.hotbar.2":"Слот быстрого доступа 2","key.hotbar.3":"Слот быстрого доступа 3","key.hotbar.4":"Слот быстрого доступа 4","key.hotbar.5":"Слот быстрого доступа 5","key.hotbar.6":"Слот быстрого доступа 6","key.hotbar.7":"Слот быстрого доступа 7","key.hotbar.8":"Слот быстрого доступа 8","key.hotbar.9":"Слот быстрого доступа 9","key.inventory":"Открыть/Закрыть инвентарь","key.jump":"Прыжок","key.left":"Идти влево","key.loadToolbarActivator":"Клавиша загрузки панели быстрого доступа","key.pickItem":"Выбрать блок","key.playerlist":"Список игроков","key.right":"Идти вправо","key.saveToolbarActivator":"Клавиша сохранения панели быстрого доступа","key.screenshot":"Сделать снимок экрана","key.smoothCamera":"Включить плавную камеру","key.sneak":"Присесть","key.spectatorOutlines":"Подсветить игроков (Режим наблюдателя)","key.sprint":"Бег","key.swapOffhand":"Переложить предмет в руках","key.togglePerspective":"Сменить перспективу","key.use":"Использовать предмет/Поставить блок","location.biome":"Биом","location.block":"Блок","location.dimension":"Измерение","location.feature":"Строение","location.fluid":"Жидкость","location.light":"Освещённость","location.light.light":"Уровень освещённости","location.position":"Позиция","location.position.x":"X","location.position.y":"Y","location.position.z":"Z","location.smokey":"Задымлённое","loot_condition_type.alternative":"Альтернатива (ИЛИ)","loot_condition_type.block_state_property":"Свойства блока","loot_condition_type.damage_source_properties":"Источник урона","loot_condition_type.entity_properties":"Свойства сущности","loot_condition_type.entity_scores":"Счёты сущности","loot_condition_type.inverted":"Инвертирование (НЕ)","loot_condition_type.killed_by_player":"Убит игроком","loot_condition_type.location_check":"Местоположение","loot_condition_type.match_tool":"Свойства инструмента","loot_condition_type.random_chance":"Случайность","loot_condition_type.random_chance_with_looting":"Случайность с «Добычей»","loot_condition_type.reference":"Предикат","loot_condition_type.survives_explosion":"Переживает взрыв","loot_condition_type.table_bonus":"Бонус таблицы","loot_condition_type.time_check":"Время","loot_condition_type.value_check":"Значение","loot_condition_type.weather_check":"Погода","loot_entry.dynamic.name":"Название","loot_entry.item.name":"ID","loot_entry.loot_table.name":"ID таблицы добычи","loot_entry.quality":"Качество","loot_entry.tag.expand":"Отдельно","loot_entry.tag.expand.help":"Если отдельно, то действует как множество записей каждого предмета из тега, иначе возвращает всё содержимое тега.","loot_entry.tag.name":"ID тега предметов","loot_entry.type":"Тип","loot_entry.weight":"Вес","loot_function_type.apply_bonus":"Применить бонус","loot_function_type.copy_name":"Скопировать название","loot_function_type.copy_nbt":"Скопировать NBT","loot_function_type.copy_state":"Скопировать состояния блока","loot_function_type.enchant_randomly":"Наложить случайные чары","loot_function_type.enchant_with_levels":"Наложить чары за уровни","loot_function_type.exploration_map":"Задать свойства карты исследователя","loot_function_type.explosion_decay":"Разрушить взрывом","loot_function_type.fill_player_head":"Задать скин голове игрока","loot_function_type.furnace_smelt":"Расплавить в печи","loot_function_type.limit_count":"Ограничить количество","loot_function_type.looting_enchant":"Применить «Добычу»","loot_function_type.set_attributes":"Задать атрибуты","loot_function_type.set_banner_pattern":"Задать узор флага","loot_function_type.set_contents":"Задать содержимое","loot_function_type.set_count":"Задать количество","loot_function_type.set_damage":"Задать повреждение","loot_function_type.set_data":"Задать данные","loot_function_type.set_enchantments":"Задать чары","loot_function_type.set_loot_table":"Задать таблицу добычи","loot_function_type.set_lore":"Задать описание","loot_function_type.set_name":"Задать название","loot_function_type.set_nbt":"Задать NBT","loot_function_type.set_stew_effect":"Задать эффект загадочного рагу","loot_pool.bonus_rolls":"Бонусных бросков","loot_pool.entries":"Элементы","loot_pool.entries.entry":"Элемент","loot_pool.rolls":"Бросков","loot_pool.rolls.help":"Количество раз выбора случайной записи.","loot_pool_entry_type.alternatives":"Альтернатива","loot_pool_entry_type.alternatives.help":"Выбирает первую дочернюю запись, у которой выполняется условие.","loot_pool_entry_type.dynamic":"Динамический","loot_pool_entry_type.dynamic.help":"Возвращает особое содержимое блока.","loot_pool_entry_type.empty":"Ничего","loot_pool_entry_type.empty.help":"Возвращает пустую запись.","loot_pool_entry_type.group":"Группа","loot_pool_entry_type.group.help":"Выбирает все дочерние записи, у которых выполняются условия.","loot_pool_entry_type.item":"Предмет","loot_pool_entry_type.item.help":"Возвращает один предмет.","loot_pool_entry_type.loot_table":"Таблица добычи","loot_pool_entry_type.loot_table.help":"Возвращает содержимое другой таблицы добычи.","loot_pool_entry_type.sequence":"Последовательность","loot_pool_entry_type.sequence.help":"Выбирает все дочерние записи до первой записи, у которой условия не выполняются.","loot_pool_entry_type.tag":"Тег предметов","loot_pool_entry_type.tag.help":"Возвращает содержимое тега предметов.","loot_table.pools":"Пулы","loot_table.pools.entry":"Пул","luck_based":"Основано на удаче","model.ambientocclusion":"Ambient Occlusion","model.display":"Отображение","model.elements":"Элементы","model.elements.entry":"Элемент","model.gui_light":"Освещение в GUI","model.overrides":"Переопределения","model.overrides.entry":"Переопределение","model.parent":"Предок","model.textures":"Текстуры","model_element.faces":"Грани","model_element.faces.cullface":"Выбраковка","model_element.faces.rotation":"Поворот","model_element.faces.texture":"Текстура","model_element.faces.tintindex":"Индекс оттенка","model_element.faces.uv":"UV","model_element.from":"Начало","model_element.rotation":"Поворот","model_element.rotation.angle":"Угол","model_element.rotation.axis":"Ось","model_element.rotation.origin":"Центр","model_element.rotation.rescale":"Масштабирование","model_element.shade":"Тень","model_element.to":"Конец","model_override.model":"Модель","model_override.predicate":"Предикат","nbt_operation.op":"Действие","nbt_operation.op.append":"Добавление","nbt_operation.op.merge":"Объединение","nbt_operation.op.replace":"Замена","nbt_operation.source":"Источник","nbt_operation.target":"Цель","nbt_provider.source":"Источник","nbt_provider.target":"Цель","nbt_provider.type":"Тип","nbt_provider.type.context":"Контекст+","nbt_provider.type.storage":"Хранилище","nbt_provider.type.string":"Контекст","noise_settings.aquifers_enabled":"Аквиферы","noise_settings.bedrock_floor_position":"Высота нижнего слоя коренной породы","noise_settings.bedrock_floor_position.help":"Положение нижнего уровня бедрока. Чем больше число, тем выше уровень.","noise_settings.bedrock_roof_position":"Высота верхнего слоя коренной породы","noise_settings.bedrock_roof_position.help":"Положение верхнего уровня бедрока относительно верха мира. Чем больше число, тем ниже уровень.","noise_settings.default_block":"Стандартный блок","noise_settings.default_fluid":"Стандартная жидкость","noise_settings.disable_mob_generation":"Отключить генерацию мобов","noise_settings.disable_mob_generation.help":"Определяет, появляются ли мобы во время генерации.","noise_settings.name":"ID","noise_settings.noise":"Параметры шума","noise_settings.noise.amplified":"Расширенный","noise_settings.noise.bottom_slide":"Низ кривой","noise_settings.noise.bottom_slide.help":"Добавляет или убирает рельеф в нижней части мира. Ничего не делает, когда размер равен 0.","noise_settings.noise.bottom_slide.offset":"Смещение низа кривой","noise_settings.noise.bottom_slide.offset.help":"Определяет диапазон в \'Смещение * Вертикальный размер * 4\' блоков от низа мира где плотность устанавливается до целевого значения.","noise_settings.noise.bottom_slide.size":"Размер низа кривой","noise_settings.noise.bottom_slide.size.help":"Определяет диапазон \'Размер * Вертикальный размер * 4\' блоков, где прежняя и целевая плотности интерполируются.","noise_settings.noise.bottom_slide.target":"Значение низа кривой","noise_settings.noise.bottom_slide.target.help":"Целевая плотность. Положительные значения добавляют рельеф, а отрицательные убирают.","noise_settings.noise.density_factor":"Множитель плотности","noise_settings.noise.density_factor.help":"Определяет какое высота оказывает влияние на рельеф. На положительных значениях рельеф генерируется внизу. Значения, близкие к нулю, производят равномерный пещеро-подобный рельеф.","noise_settings.noise.density_offset":"Смещение плотности","noise_settings.noise.density_offset.help":"Влияет на среднюю высоту рельефа. При значении в 0 высота равна половине альтитуды мира. Положительные значения увеличивают высоту.","noise_settings.noise.height":"Высота","noise_settings.noise.height.help":"Полная высота, где блоки могут генерироваться. Максимальная Высота = Минимальная Высота + Высота.","noise_settings.noise.island_noise_override":"Переопределение островным шумом","noise_settings.noise.island_noise_override.help":"Если «Да», ландшафт будет генерироваться в форме островов, похожую на ту, что в Энде.","noise_settings.noise.min_y.help":"Минимальная высота, где блоки начинают генерироваться.","noise_settings.noise.random_density_offset":"Случайное смещение плотности","noise_settings.noise.sampling":"Координатный масштаб","noise_settings.noise.sampling.xz_factor":"Множитель шума по X, Z","noise_settings.noise.sampling.xz_scale":"Уровень шума по X, Z","noise_settings.noise.sampling.y_factor":"Множитель шума по Y","noise_settings.noise.sampling.y_scale":"Уровень шума по Y","noise_settings.noise.simplex_surface_noise":"Симплекс-шум поверхности","noise_settings.noise.size_horizontal":"Размер по горизонтали","noise_settings.noise.size_vertical":"Размер по вертикали","noise_settings.noise.top_slide":"Верх кривой","noise_settings.noise.top_slide.help":"Добавляет или убирает рельеф в верхней части мира. Ничего не делает, когда размер равен 0.","noise_settings.noise.top_slide.offset":"Смещение верха кривой","noise_settings.noise.top_slide.offset.help":"Определяет диапазон в \'Смещение * Вертикальный Размер * 4\' блоков от верха мира где плотность устанавливается до целевого значения.","noise_settings.noise.top_slide.size":"Размер верха кривой","noise_settings.noise.top_slide.size.help":"Определяет диапазон \'Размер * Вертикальный размер * 4\' блоков, где прежняя и целевая плотности интерполируются.","noise_settings.noise.top_slide.target":"Значение верха кривой","noise_settings.noise.top_slide.target.help":"Целевая плотность. Положительные значения добавляют рельеф, а отрицательные убирают.","noise_settings.sea_level":"Уровень моря","number_provider.max":"Макс.","number_provider.min":"Мин.","number_provider.n":"N","number_provider.p":"P","number_provider.scale":"Множитель","number_provider.score":"Задача","number_provider.target":"Цель","number_provider.type":"Тип","number_provider.type.binomial":"Биномиально","number_provider.type.constant":"Константа+","number_provider.type.number":"Константа","number_provider.type.object":"Равномерно","number_provider.type.score":"Счёт","number_provider.type.uniform":"Равномерно+","number_provider.value":"Число","placed_feature.feature":"Настраиваемый объект","player.advancements":"Достижение","player.advancements.entry":"Достижение","player.gamemode":"Игровой режим","player.level":"Уровень опыта","player.recipes":"Рецепты","player.stats":"Статистика","player.stats.entry":"Статистика","processors.object":"Произвольно","processors.string":"Ссылка","range.binomial":"Биномиально","range.max":"Макс.","range.min":"Мин.","range.n":"N","range.number":"Число","range.object":"Диапазон","range.p":"P","range.type":"Тип","range.uniform":"Равномерно","recipe.group.help":"Идентификатор для группировки нескольких рецептов в книге рецептов.","requirements":"Требуются","score_provider.target":"Цель","score_provider.type":"Тип","score_provider.type.context":"Контекст+","score_provider.type.fixed":"Заданная","score_provider.type.string":"Контекст","slot.chest":"Тело","slot.feet":"Стопы","slot.head":"Голова","slot.legs":"Ноги","slot.mainhand":"Ведущая рука","slot.offhand":"Вторая рука","statistic.stat":"Статистика","statistic.type":"Тип","statistic.type.broken":"Сломано","statistic.type.crafted":"Создано","statistic.type.custom":"Пользовательский","statistic.type.dropped":"Выброшено","statistic.type.killed":"Убито","statistic.type.killedByTeam":"Был убит командой","statistic.type.killed_by":"Был убит","statistic.type.mined":"Вскопано","statistic.type.picked_up":"Подобрано","statistic.type.teamkill":"Убито из команды","statistic.type.used":"Использовано","statistic.value":"Значение","status_effect.ambient":"Из окружения","status_effect.amplifier":"Уровень","status_effect.duration":"Длительность","status_effect.visible":"Видимый","table.type":"Тип","table.type.block":"Блок","table.type.chest":"Сундук","table.type.empty":"Ничего","table.type.entity":"Сущность","table.type.fishing":"Рыбалка","table.type.generic":"Общий","tag.replace":"Заменить","tag.values":"Значения","template_element.feature":"Размещаемый объект","terrain_shaper.jaggedness":"Зубчатость","text_component":"Текстовый компонент","text_component.boolean":"Логический тип","text_component.list":"Список","text_component.number":"Число","text_component.object":"Объект","text_component.string":"Строка","text_component_object.block":"Блок","text_component_object.bold":"Жирный","text_component_object.clickEvent":"Действие по нажатию","text_component_object.clickEvent.action":"Действие","text_component_object.clickEvent.action.change_page":"Сменить страницу","text_component_object.clickEvent.action.copy_to_clipboard":"Скопировать в буфер обмена","text_component_object.clickEvent.action.open_file":"Открыть файл","text_component_object.clickEvent.action.open_url":"Открыть ссылку","text_component_object.clickEvent.action.run_command":"Выполнить команду","text_component_object.clickEvent.action.suggest_command":"Предложить команду","text_component_object.clickEvent.value":"Значение","text_component_object.color":"Цвет","text_component_object.entity":"Сущность","text_component_object.extra":"Дополнительно","text_component_object.font":"Шрифт","text_component_object.hoverEvent":"Действие по наведению","text_component_object.hoverEvent.action":"Действие","text_component_object.hoverEvent.action.show_entity":"Показать сущность","text_component_object.hoverEvent.action.show_item":"Показать предмет","text_component_object.hoverEvent.action.show_text":"Показать текст","text_component_object.hoverEvent.contents":"Содержимое","text_component_object.hoverEvent.value":"Значение","text_component_object.insertion":"Вставка","text_component_object.interpret":"Интерпретировать","text_component_object.italic":"Курсив","text_component_object.keybind":"Назначенная клавиша","text_component_object.nbt":"Данные сущности (NBT)","text_component_object.obfuscated":"Обфусцированный","text_component_object.score":"Счёт","text_component_object.score.name":"Имя","text_component_object.score.objective":"Счёт","text_component_object.score.value":"Значение","text_component_object.selector":"Селектор","text_component_object.storage":"Хранилище","text_component_object.strikethrough":"Зачёркнутый","text_component_object.text":"Простой текст","text_component_object.translate":"Переводимый текст","text_component_object.underlined":"Подчёркнутый","text_component_object.with":"Перевести с","texture.alias":"Псевдоним","texture.reference":"Ссылка","true":"Да","uniform_int.base":"Начальное значение","uniform_int.number":"Точное","uniform_int.object":"Случайное число в промежутке","uniform_int.spread":"Распределение","unset":"Не задано","vertical_anchor.above_bottom":"Над нижней границей","vertical_anchor.absolute":"Абсолютная величина","vertical_anchor.below_top":"Под верхней границей","world.bonus_chest":"Бонусный сундук","world.generate_features":"Генерация строений","world.seed":"Ключ генератора мира","world_settings.generate_features":"Генерация строений","worldgen.warning":"Эта функция экспериментальная и крайне нестабильная. Она может измениться в будущих версиях. Есть вероятность, что произойдёт сбой игры при создании мира.","worldgen/biome_source.checkerboard":"Шахматный","worldgen/biome_source.checkerboard.help":"Биомы генерируются в шахматном порядке чанков.","worldgen/biome_source.fixed":"Один биом","worldgen/biome_source.fixed.help":"Один биом на весь мир.","worldgen/biome_source.multi_noise":"Множественный шум","worldgen/biome_source.multi_noise.help":"Произвольное распределение биомов с настраиваемыми параметрами.","worldgen/biome_source.the_end":"Энд","worldgen/biome_source.the_end.help":"Распределение биомов в Краю.","worldgen/biome_source.vanilla_layered":"Стандартный","worldgen/biome_source.vanilla_layered.help":"Распределение биомов в Верхнем мире.","worldgen/chunk_generator.debug":"Режим отладки","worldgen/chunk_generator.flat":"Суперплоскость","worldgen/chunk_generator.noise":"По умолчанию","worldgen/feature_size_type.three_layers_feature_size":"Три слоя","worldgen/feature_size_type.two_layers_feature_size":"Два слоя","worldgen/structure_pool_element.feature_pool_element":"Объект"}');export default e; +//# sourceMappingURL=ru.1298edc9.js.map diff --git a/assets/ru.1298edc9.js.map b/assets/ru.1298edc9.js.map new file mode 100644 index 00000000..ce2b05ad --- /dev/null +++ b/assets/ru.1298edc9.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ru.1298edc9.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/assets/ru.cc3bc989.js b/assets/ru.cc3bc989.js deleted file mode 100644 index acfe89bd..00000000 --- a/assets/ru.cc3bc989.js +++ /dev/null @@ -1,2 +0,0 @@ -var e=JSON.parse('{"advancement.criteria":"Условие","advancement.display":"Отображение","advancement.display.announce_to_chat":"Сообщение в чате","advancement.display.background":"Фон","advancement.display.description":"Описание","advancement.display.frame":"Рамка","advancement.display.frame.challenge":"Испытание","advancement.display.frame.goal":"Цель","advancement.display.frame.task":"Обычная","advancement.display.help":"Если указано, достижение будет отображаться в интерфейсе достижений.","advancement.display.hidden":"Скрыто","advancement.display.icon":"Значок","advancement.display.icon.item":"Предмет значка","advancement.display.icon.nbt":"NBT значка","advancement.display.show_toast":"Всплывающее уведомление","advancement.display.title":"Заголовок","advancement.parent":"Предок","advancement.rewards":"Награды","advancement.rewards.experience":"Опыт","advancement.rewards.function":"Функция","advancement.rewards.loot":"Таблицы достижений","advancement.rewards.recipes":"Рецепты","advancement_trigger.bee_nest_destroyed":"Разрушил пчелиное гнездо","advancement_trigger.bred_animals":"Свёл животных","advancement_trigger.brewed_potion":"Сварил зелье","advancement_trigger.changed_dimension":"Сменил измерение","advancement_trigger.channeled_lightning":"Поразил «Громовержцем»","advancement_trigger.construct_beacon":"Построил маяк","advancement_trigger.consume_item":"Съел/Выпил предмет","advancement_trigger.cured_zombie_villager":"Излечил зомби-крестьянина","advancement_trigger.effects_changed":"Эффекты изменены","advancement_trigger.enchanted_item":"Зачаровал предмет","advancement_trigger.enter_block":"Находится в блоке","advancement_trigger.entity_hurt_player":"Получил урон","advancement_trigger.entity_killed_player":"Убит сущностью","advancement_trigger.fall_from_height":"Упасть с высоты","advancement_trigger.filled_bucket":"Наполнил ведро","advancement_trigger.fishing_rod_hooked":"Подцепил крючком","advancement_trigger.hero_of_the_village":"Герой деревни","advancement_trigger.impossible":"Невозможный","advancement_trigger.inventory_changed":"Инвентарь изменён","advancement_trigger.item_durability_changed":"Прочность предмета изменена","advancement_trigger.item_used_on_block":"Использовал предмет на блоке","advancement_trigger.killed_by_crossbow":"Убил арбалетом","advancement_trigger.levitation":"Левитация","advancement_trigger.location":"Местоположение","advancement_trigger.nether_travel":"Переместился через Незер","advancement_trigger.placed_block":"Поставил блок","advancement_trigger.player_generates_container_loot":"Сгенерировал содержимое блока","advancement_trigger.player_hurt_entity":"Нанёс урон","advancement_trigger.player_killed_entity":"Убил сущность","advancement_trigger.recipe_unlocked":"Разблокировал рецепт","advancement_trigger.ride_entity_in_lava":"Оседлать сущность в лаве","advancement_trigger.safely_harvest_honey":"Безопасно собрал мёд","advancement_trigger.shot_crossbow":"Выстрелил из арбалета","advancement_trigger.slept_in_bed":"Лёг на кровать","advancement_trigger.slide_down_block":"Скользит вниз по блоку","advancement_trigger.summoned_entity":"Призвал сущность","advancement_trigger.tame_animal":"Приручил животное","advancement_trigger.target_hit":"Попадание","advancement_trigger.thrown_item_picked_up_by_entity":"Выкинутый предмет подобран сущностью","advancement_trigger.tick":"Такт","advancement_trigger.used_ender_eye":"Использовал око Эндера","advancement_trigger.used_totem":"Использовал тотем","advancement_trigger.villager_trade":"Поторговал с крестьянином","advancement_trigger.voluntary_exile":"Вызвал рейд","attribute.generic_armor":"Броня","attribute.generic_armor_toughness":"Твёрдость брони","attribute.generic_attack_damage":"Урон","attribute.generic_attack_knockback":"Отбрасывание","attribute.generic_attack_speed":"Скорость атаки","attribute.generic_flying_speed":"Скорость полёта","attribute.generic_follow_range":"Диапазон преследования моба","attribute.generic_knockback_resistance":"Сопротивление отбрасыванию","attribute.generic_luck":"Удача","attribute.generic_max_health":"Максимальное здоровье","attribute.generic_movement_speed":"Скорость","attribute.horse.jump_strength":"Сила прыжка лошади","attribute.zombie.spawn_reinforcements":"Подкрепление зомби","attribute_modifier.amount":"Количество","attribute_modifier.attribute":"Атрибут","attribute_modifier.name":"Название","attribute_modifier.operation":"Действие","attribute_modifier.operation.addition":"Прибавление","attribute_modifier.operation.multiply_base":"Умножение базового","attribute_modifier.operation.multiply_total":"Умножение общего","attribute_modifier.slot":"Ячейки","attribute_modifier.slot.list":"Несколько","attribute_modifier.slot.string":"Одна","badge.experimental":"Экспериментальный","badge.unstable":"Нестабильный","biome.carvers":"Полости","biome.carvers.air":"Воздух","biome.carvers.liquid":"Жидкость","biome.category":"Категория","biome.creature_spawn_probability":"Шанс появления пассивных мобов","biome.depth":"Глубина","biome.depth.help":"Поднимает или опускает рельеф местности. Положительные значения считаются сушей, а отрицательные — океанами.","biome.downfall":"Влажность","biome.effects":"Эффекты","biome.effects.additions_sound":"Дополнительные звуки","biome.effects.additions_sound.sound":"Звук","biome.effects.additions_sound.tick_chance":"Шанс за такт","biome.effects.ambient_sound":"Звук окружения","biome.effects.fog_color":"Цвет тумана","biome.effects.foliage_color":"Цвет листьев","biome.effects.grass_color":"Цвет травы","biome.effects.grass_color_modifier":"Модификатор цвета травы","biome.effects.grass_color_modifier.dark_forest":"Тёмный лес","biome.effects.grass_color_modifier.none":"Нет","biome.effects.grass_color_modifier.swamp":"Болото","biome.effects.mood_sound":"Пещерный звук","biome.effects.mood_sound.block_search_extent":"Радиус поиска позиции","biome.effects.mood_sound.offset":"Смещение","biome.effects.mood_sound.sound":"Звук","biome.effects.mood_sound.tick_delay":"Задержка в тактах","biome.effects.music":"Музыка","biome.effects.music.max_delay":"Максимальная задержка","biome.effects.music.min_delay":"Минимальная задержка","biome.effects.music.replace_current_music":"Замена играющей музыки","biome.effects.music.sound":"Звук","biome.effects.particle":"Частица","biome.effects.particle.options":"Параметры","biome.effects.particle.options.type":"Тип частицы","biome.effects.particle.probability":"Шанс","biome.effects.sky_color":"Цвет неба","biome.effects.water_color":"Цвет воды","biome.effects.water_fog_color":"Цвет подводного тумана","biome.features":"Размещаемые объекты","biome.features.entry":"Шаг %0%","biome.features.entry.entry":"Объект","biome.player_spawn_friendly":"Дружественное появление игрока","biome.player_spawn_friendly.help":"Если «Да», точка появления в мире предпочтительно будет в этом биоме.","biome.precipitation":"Осадки","biome.precipitation.none":"Нет","biome.precipitation.rain":"Дождь","biome.precipitation.snow":"Снег","biome.scale":"Масштаб","biome.scale.help":"Растягивает местность по вертикали. Чем меньше значение, тем ровнее местность.","biome.spawn_costs":"Цена Появления","biome.spawn_costs.charge":"Заряд","biome.spawn_costs.energy_budget":"Бюджет Энергии","biome.spawners":"Появление мобов","biome.spawners.ambient":"Окружение","biome.spawners.creature":"Пассивные","biome.spawners.entry":"Появление","biome.spawners.entry.maxCount":"Максимальное количество","biome.spawners.entry.minCount":"Минимальное количество","biome.spawners.entry.type":"Тип","biome.spawners.entry.weight":"Вес","biome.spawners.misc":"Другие","biome.spawners.monster":"Монстр","biome.spawners.water_ambient":"Водное окружение","biome.spawners.water_creature":"Водные пассивные","biome.starts":"Начала строений","biome.starts.entry":"Строение","biome.starts.help":"Список настроенных строений.","biome.surface_builder":"Построитель поверхности","biome.temperature":"Температура","biome.temperature_modifier":"Модификатор температуры","biome.temperature_modifier.frozen":"Мороз","biome.temperature_modifier.none":"Нет","block.block":"ID блока","block.nbt":"NBT","block.state":"Состояние блока","block.tag":"Тег блоков","block_definition.multipart.entry":"Часть","block_definition.multipart.entry.apply":"Применить","block_definition.multipart.entry.when":"Когда","block_definition.variants":"Варианты","block_placer.column_placer.extra_size":"Дополнительный размер","block_placer.column_placer.min_size":"Минимальный размер","block_placer.type":"Тип","block_predicate.all_of.predicates":"Предикаты","block_predicate.any_of.predicates":"Предикаты","block_predicate.inside_world_bounds.offset":"Смещение","block_predicate.matching_blocks.blocks":"Блоки","block_predicate.matching_blocks.blocks.entry":"Блок","block_predicate.matching_blocks.offset":"Смещение","block_predicate.matching_fluids.fluids":"Жидкости","block_predicate.matching_fluids.fluids.entry":"Жидкость","block_predicate.matching_fluids.offset":"Смещение","block_predicate.not.predicate":"Предикат","block_predicate.type":"Тип","block_predicate.would_survive.offset":"Смещение","block_predicate.would_survive.state":"Состояние","block_predicate_type.all_of":"Все из","block_predicate_type.any_of":"Любой из","block_predicate_type.inside_world_bounds":"Внутри границ мира","block_predicate_type.matching_blocks":"Подходящие блоки","block_predicate_type.matching_fluids":"Подходящие жидкости","block_predicate_type.not":"Не","block_predicate_type.replaceable":"Заменяемые","block_predicate_type.solid":"Твёрдый","block_predicate_type.true":"Верно","block_predicate_type.would_survive":"Смог бы выжить","block_state.Name":"Блок","block_state.Properties":"Свойства","block_state_provider.dual_noise_provider.noise":"Шум","block_state_provider.dual_noise_provider.scale":"Масштаб","block_state_provider.dual_noise_provider.seed":"Зерно","block_state_provider.dual_noise_provider.slow_noise":"","block_state_provider.dual_noise_provider.states":"Состояния","block_state_provider.noise_provider.noise":"Шум","block_state_provider.noise_provider.scale":"Масштаб","block_state_provider.noise_provider.seed":"Зерно","block_state_provider.noise_provider.states":"Состояния","block_state_provider.noise_threshold_provider.default_state":"Состояние по умолчанию","block_state_provider.noise_threshold_provider.high_chance":"Высокий шанс","block_state_provider.noise_threshold_provider.high_states":"Высокие состояния","block_state_provider.noise_threshold_provider.low_states":"Низкие состояния","block_state_provider.noise_threshold_provider.noise":"Шум","block_state_provider.noise_threshold_provider.scale":"Масштаб","block_state_provider.noise_threshold_provider.seed":"Зерно","block_state_provider.noise_threshold_provider.threshold":"Порог","block_state_provider.randomized_int_state_provider.property":"Параметр","block_state_provider.randomized_int_state_provider.source":"Источник","block_state_provider.randomized_int_state_provider.values":"Значения","block_state_provider.rotated_block_provider.state":"Состояние","block_state_provider.simple_state_provider.state":"Состояние","block_state_provider.type":"Тип","block_state_provider.weighted_state_provider.entries":"Элементы","block_state_provider.weighted_state_provider.entries.entry.data":"Состояние","block_state_provider.weighted_state_provider.entries.entry.weight":"Вес","carver.config":"Параметры","carver.config.aquifers_enabled":"Включены аквиферы","carver.config.canyon.bottom_inclusive":"Дно Включительно","carver.config.canyon.shape":"Форма","carver.config.canyon.shape.distance_factor":"Фактор Расстояния","carver.config.canyon.shape.horizontal_radius_factor":"Фактор Горизонтального Радиуса","carver.config.canyon.shape.thickness":"Толщина","carver.config.canyon.shape.vertical_radius_center_factor":"Коэффициент Центра Вертикального Радиуса","carver.config.canyon.shape.vertical_radius_default_factor":"Фактор Вертикального Радиуса по Умолчанию","carver.config.canyon.shape.width_smoothness":"Гладкость по Ширине","carver.config.canyon.top_inclusive":"Потолок Включительно","carver.config.canyon.vertical_rotation":"Вертикальное Вращение","carver.config.cave.floor_level":"Уровень Пола","carver.config.cave.horizontal_radius_multiplier":"Множитель Горизонтального Радиуса","carver.config.cave.vertical_radius_multiplier":"Множитель Вертикального Радиуса","carver.config.debug_settings":"Настройки Отладки","carver.config.debug_settings.air_state":"Состояние Воздуха","carver.config.debug_settings.barrier_state":"Состояние Барьера","carver.config.debug_settings.debug_mode":"Режим Отладки","carver.config.debug_settings.lava_state":"Состояние Лавы","carver.config.debug_settings.water_state":"Состояние Воды","carver.config.lava_level":"Уровень Лавы","carver.config.probability":"Шанс","carver.config.y_scale":"Шакала Y","carver.type":"Тип","cave_surface.ceiling":"Потолок","cave_surface.floor":"Пол","children":"Потомки","children.entry":"Элемент","condition.alternative.terms":"Условия","condition.block_state_property.block":"Блок","condition.block_state_property.properties":"Состояние блока","condition.condition":"Условие","condition.damage_source":"Повреждение","condition.entity_properties.entity":"Сущность","condition.entity_scores.entity":"Сущность","condition.entity_scores.scores":"Счёты","condition.entry":"Предикат","condition.inverted.term":"Выражение","condition.item":"Предмет","condition.killed_by_player.inverse":"Инвертировать","condition.list":"Несколько","condition.location":"Местоположение","condition.location_check.offsetX":"Смещение по X","condition.location_check.offsetY":"Смещение по Y","condition.location_check.offsetZ":"Смещение по Z","condition.object":"Простой","condition.random_chance.chance":"Шанс","condition.random_chance_with_looting.chance":"Шанс","condition.random_chance_with_looting.looting_multiplier":"Множитель «Добычи»","condition.reference.name":"ID предиката","condition.table_bonus.chances":"Шансы","condition.table_bonus.chances.entry":"Шанс","condition.table_bonus.enchantment":"Чары","condition.time_check.period":"Период","condition.time_check.period.help":"Если задан, время будет получено взятием остатка от деления времени на заданный период.","condition.time_check.value":"Значение","condition.value_check.range":"Диапазон","condition.value_check.value":"Значение","condition.weather_check.raining":"Дождь","condition.weather_check.thundering":"Гроза","conditions":"Условия","conditions.entry":"Условие","conditions.list":"Условия","conditions.object":"Устаревший","copy_source.block_entity":"Блок-сущность","copy_source.direct_killer":"Убийца-причина урона","copy_source.killer":"Убийца","copy_source.killer_player":"Игрок-убийца","copy_source.this":"Текущая сущность","criterion.bee_nest_destroyed.block":"Блок","criterion.bee_nest_destroyed.num_bees_inside":"Пчёл внутри","criterion.bred_animals.child":"Потомок","criterion.bred_animals.parent":"Предок","criterion.bred_animals.partner":"Партнёр","criterion.brewed_potion.potion":"Зелье","criterion.changed_dimension.from":"Откуда","criterion.changed_dimension.to":"Куда","criterion.channeled_lightning.victims":"Жертвы","criterion.channeled_lightning.victims.entry":"Сущность","criterion.conditions":"Условия","criterion.construct_beacon.beacon_level":"Уровень конструкции","criterion.consume_item.item":"Предмет","criterion.cured_zombie_villager.villager":"Крестьянин","criterion.cured_zombie_villager.zombie":"Зомби","criterion.effects_changed.effects":"Эффект","criterion.enchanted_item.item":"Предмет","criterion.enchanted_item.levels":"Уровень","criterion.enter_block.block":"Блок","criterion.enter_block.state":"Состояние","criterion.entity_hurt_player.damage":"Урон","criterion.entity_killed_player.entity":"Сущность-источник","criterion.entity_killed_player.killing_blow":"Смертельный удар","criterion.fall_from_height.distance":"Дистанция","criterion.fall_from_height.start_position":"Стартовая Позиция","criterion.filled_bucket.item":"Предмет","criterion.fishing_rod_hooked.entity":"Подтянутая сущность","criterion.fishing_rod_hooked.item":"Предмет","criterion.hero_of_the_village.location":"Местоположение","criterion.inventory_changed.items":"Предметы","criterion.inventory_changed.items.entry":"Предмет","criterion.inventory_changed.slots":"Ячейки","criterion.inventory_changed.slots.empty":"Пустых ячеек","criterion.inventory_changed.slots.full":"Полных ячеек","criterion.inventory_changed.slots.occupied":"Занятых ячеек","criterion.item_durability_changed.delta":"Разница","criterion.item_durability_changed.durability":"Прочность","criterion.item_durability_changed.item":"Предмет","criterion.item_used_on_block.item":"Предмет","criterion.item_used_on_block.location":"Местоположение","criterion.killed_by_crossbow.unique_entity_types":"Уникальных типов сущностей","criterion.killed_by_crossbow.victims":"Жертвы","criterion.killed_by_crossbow.victims.entry":"Сущность","criterion.levitation.distance":"Расстояние","criterion.levitation.duration":"Длительность","criterion.location.location":"Местоположение","criterion.nether_travel.distance":"Расстояние","criterion.nether_travel.entered":"Местоположение входа","criterion.nether_travel.exited":"Местоположение выхода","criterion.placed_block.block":"Блок","criterion.placed_block.item":"Предмет","criterion.placed_block.location":"Местоположение","criterion.placed_block.state":"Состояние","criterion.player":"Игрок","criterion.player_generates_container_loot.loot_table":"Таблица добычи","criterion.player_hurt_entity.damage":"Урон","criterion.player_hurt_entity.entity":"Сущность-жертва","criterion.player_killed_entity.entity":"Сущность-жертва","criterion.player_killed_entity.killing_blow":"Смертельный удар","criterion.recipe_unlocked.recipe":"Рецепт","criterion.rod":"Удочка","criterion.safely_harvest_honey.block":"Блок","criterion.safely_harvest_honey.item":"Предмет","criterion.shot_crossbow.item":"Предмет","criterion.slept_in_bed.location":"Местоположение","criterion.slide_down_block.block":"Блок","criterion.summoned_entity.entity":"Сущность","criterion.tame_animal.entity":"Животное","criterion.target_hit.projectile":"Снаряд","criterion.target_hit.shooter":"Стрелок","criterion.target_hit.signal_strength":"Мощность сигнала","criterion.thrown_item_picked_up_by_entity.entity":"Сущность","criterion.thrown_item_picked_up_by_entity.item":"Предмет","criterion.trigger":"Триггер","criterion.used_ender_eye.distance":"Расстояние","criterion.used_totem.item":"Предмет тотема","criterion.villager_trade.item":"Купленный предмет","criterion.villager_trade.villager":"Крестьянин","criterion.voluntary_exile.location":"Местоположение","damage.blocked":"Заблокирован","damage.dealt":"Нанесённый урон","damage.source_entity":"Сущность-источник","damage.taken":"Полученный урон","damage.type":"Тип урона","damage_source.bypasses_armor":"Игнорирование брони","damage_source.bypasses_invulnerability":"Пустота","damage_source.bypasses_magic":"Голод","damage_source.direct_entity":"Сущность-причина урона","damage_source.is_explosion":"Взрыв","damage_source.is_fire":"Огонь","damage_source.is_lightning":"Молния","damage_source.is_magic":"Магия","damage_source.is_projectile":"Снаряд","damage_source.source_entity":"Сущность-источник урона","decorator.carving_mask.step":"Этап генерации","decorator.config":"Параметры","decorator.count.count":"Количество","decorator.count_extra.count":"Количество","decorator.count_extra.extra_chance":"Вероятность дополнительного","decorator.count_extra.extra_count":"Дополнительное количество","decorator.count_multilayer.count":"Количество","decorator.count_noise.above_noise":"Количество выше шума","decorator.count_noise.below_noise":"Количество ниже шума","decorator.count_noise.noise_level":"Уровень шума","decorator.count_noise_biased.noise_factor":"Множитель шума","decorator.count_noise_biased.noise_offset":"Смещение шума","decorator.count_noise_biased.noise_to_count_ratio":"Соотношение шума к количеству","decorator.decorated.inner":"Внутреннее","decorator.decorated.outer":"Внешнее","decorator.depth_average.baseline":"Начальное значение","decorator.depth_average.spread":"Распространение","decorator.glowstone.count":"Количество","decorator.range.bottom_inclusive":"Дно Включительно","decorator.range.top_inclusive":"Потолок Включительно","decorator.range_biased_to_bottom.bottom_inclusive":"Дно Включительно","decorator.range_biased_to_bottom.top_inclusive":"Потолок Включительно","decorator.range_very_biased_to_bottom.bottom_inclusive":"Дно Включительно","decorator.range_very_biased_to_bottom.top_inclusive":"Потолок Включительно","decorator.type":"Тип","dimension":"Измерение","dimension.generator":"Генератор","dimension.generator.biome_source":"Источник биомов","dimension.overworld":"Обычный мир","dimension.the_end":"Энд","dimension.the_nether":"Незер","dimension.type":"Параметры измерения","dimension.type.object":"Произвольно","dimension.type.string":"Предустановка","dimension_type.ambient_light":"Свет окружения","dimension_type.ambient_light.help":"Значение от 0 до 1.","dimension_type.bed_works":"Работает Кровать","dimension_type.bed_works.help":"Если значение установлено в true, игроки могут использовать кровати для того, чтобы устанавливать свою точку возрождения и продвинуться во времени. Если значение установлено в false, кровать будут взрываться при использовании.","dimension_type.coordinate_scale":"Масштаб координат","dimension_type.coordinate_scale.help":"Множитель, который применяется к координатам при перемезении между измерениями через портал или при помощи команды /execute.","dimension_type.effects":"Эффекты","dimension_type.effects.help":"Эффекты неба","dimension_type.effects.overworld":"Верхний Мир","dimension_type.effects.the_end":"Край","dimension_type.effects.the_nether":"Ад","dimension_type.fixed_time":"Фиксированное время","dimension_type.fixed_time.help":"При указании значения солнце будет находится в фиксированном положении.","dimension_type.has_ceiling":"Есть крыша из бедрока","dimension_type.has_ceiling.help":"Влияет на погоду, элементы карты и правила возрождения.","dimension_type.has_raids":"Имеет Рейды","dimension_type.has_raids.help":"Если включено, игроки с эффектом Дурного Знамения могут вызвать рейд.","dimension_type.has_skylight":"Есть свет неба","dimension_type.has_skylight.help":"Влияет на погоду, принцип освещения и правила возрождения.","dimension_type.height":"Высота","dimension_type.height.help":"Общая высота, в которой существуют блоки. Макс Y = Мин Y + Высота.","dimension_type.infiniburn":"Вечногорящие блоки","dimension_type.infiniburn.help":"Тег блоков, определяющий, какие блоки будут гореть вечно.","dimension_type.logical_height":"Логическая Высота","dimension_type.logical_height.help":"Порталы не могут появляться, а хорус не может телепортировать игроков выше этой высоты.","dimension_type.min_y":"Мин Y","dimension_type.min_y.help":"Минимальная высота, в которой могут существовать блоки.","dimension_type.name":"ID","dimension_type.natural":"Земное","dimension_type.natural.help":"Если «Да», из порталов будут появляться зомбифицированные пиглины. Если «Нет», компас и часы будут крутиться случайным образом.","dimension_type.piglin_safe":"Пиглины не превращаются в зомби","dimension_type.piglin_safe.help":"Если выключено, пиглины будут трястись и преврашаться в зомбифицированных пиглинов.","dimension_type.respawn_anchor_works":"Якорь Возрождения Работает","dimension_type.respawn_anchor_works.help":"Если включено, игроки могут заряжать и использовать якори возрождения, для установки спавнпоинтов. Если выключено, якори возрождения взрываются при использовании.","dimension_type.ultrawarm":"Горячее","dimension_type.ultrawarm.help":"Определяет, испаряется ли вода и высыхают ли губки.","direction.down":"Низ","direction.east":"Восток","direction.north":"Север","direction.south":"Юг","direction.up":"Верх","direction.west":"Запад","distance.absolute":"Абсолютное","distance.horizontal":"Горизонтальное","distance.x":"X","distance.y":"Y","distance.z":"Z","enchantment.aqua_affinity":"Подводник","enchantment.bane_of_arthropods":"Бич членистоногих","enchantment.binding_curse":"Проклятие несъёмности","enchantment.blast_protection":"Взрывоустойчивость","enchantment.channeling":"Громовержец","enchantment.depth_strider":"Подводная ходьба","enchantment.efficiency":"Эффективность","enchantment.enchantment":"Чары","enchantment.feather_falling":"Невесомость","enchantment.fire_aspect":"Заговор огня","enchantment.fire_protection":"Огнеупорность","enchantment.flame":"Горящая стрела","enchantment.fortune":"Удача","enchantment.frost_walker":"Ледоход","enchantment.impaling":"Пронзатель","enchantment.infinity":"Бесконечность","enchantment.knockback":"Отдача","enchantment.levels":"Уровень","enchantment.looting":"Добыча","enchantment.loyalty":"Верность","enchantment.luck_of_the_sea":"Везучий рыбак","enchantment.lure":"Приманка","enchantment.mending":"Починка","enchantment.multishot":"Тройной выстрел","enchantment.piercing":"Пронзающая стрела","enchantment.power":"Сила","enchantment.projectile_protection":"Защита от снарядов","enchantment.protection":"Защита","enchantment.punch":"Откидывание","enchantment.quick_charge":"Быстрая перезарядка","enchantment.respiration":"Подводное дыхание","enchantment.riptide":"Тягун","enchantment.sharpness":"Острота","enchantment.silk_touch":"Шёлковое касание","enchantment.smite":"Небесная кара","enchantment.sweeping":"Разящий клинок","enchantment.thorns":"Шипы","enchantment.unbreaking":"Прочность","enchantment.vanishing_curse":"Проклятие утраты","entity.distance":"Расстояние","entity.effects":"Эффекты","entity.equipment":"Снаряжение","entity.fishing_hook":"Поплавок","entity.fishing_hook.in_open_water":"В открытой воде","entity.flags":"Состояние","entity.isBaby":"Ребёнок","entity.isOnFire":"Горит","entity.isSneaking":"Крадётся","entity.isSprinting":"Бежит","entity.isSwimming":"Плывёт","entity.location":"Местоположение","entity.nbt":"NBT","entity.player":"Игрок","entity.targeted_entity":"Целевая сущность","entity.team":"Команда","entity.type":"Сущность","entity.vehicle":"Транспорт","entity_source.direct_killer":"Убийца-причина урона","entity_source.killer":"Убийца","entity_source.killer_player":"Игрок-убийца","entity_source.this":"Текущая","entry":"Элемент","error":"Ошибка","error.expected_boolean":"Ожидался логический тип данных (Boolean)","error.expected_integer":"Ожидалось целое число (Integer)","error.expected_json":"Ожидался JSON","error.expected_list":"Ожидался массив (Array)","error.expected_number":"Ожидалось число","error.expected_object":"Ожидался объект","error.expected_range":"Ожидался диапазон","error.expected_string":"Ожидалась строка","error.expected_uniform_int":"Ожидалось целое число (Uniform integer)","error.height_multiple":"Высота должна быть кратна %0%","error.invalid_binomial":"Диапазон не может быть биноминального типа","error.invalid_empty_list":"Массив не может быть пустым","error.invalid_empty_string":"Строка не может быть пустой","error.invalid_enum_option":"Неверное значение \\"%0%\\"","error.invalid_exact":"Диапазон не может быть константой","error.invalid_list_range.larger":"Длина списка %0% больше максимальной %1%","error.invalid_list_range.smaller":"Длина списка %0% меньше минимальной %1%","error.invalid_number_range.between":"Ожидалось число в промежутке от %1% до %2%","error.invalid_pattern":"Неверная строка: %0%","error.min_y_multiple":"Минимальная Высота должна быть кратна %0%","error.min_y_plus_height":"Минимальная Высота + высота не могут быть больше чем %0%","error.recipe.invalid_key":"только один символ разрешён как ключ","false":"Нет","feature.bamboo.probability":"Вероятность","feature.basalt_columns.height":"Высота","feature.block_pile.state_provider":"Состояние","feature.config":"Настройки","feature.decorated.decorator":"Декоратор","feature.decorated.feature":"Объект","feature.disk.radius":"Радиус","feature.disk.state":"Состояние","feature.disk.targets":"Цели","feature.disk.targets.entry":"Состояние","feature.dripstone_cluster.height":"","feature.dripstone_cluster.height_deviation":"","feature.dripstone_cluster.max_distance_from_edge_affecting_chance_of_dripstone_column.help":"Максимальное расстояние от края, меняющее шанс появления колонн капельников.","feature.dripstone_cluster.max_stalagmite_stalactite_height_diff.help":"Максимальная разница в высоте между сталагмитами и сталактитами.","feature.dripstone_cluster.radius":"Радиус","feature.emerald_ore.state":"Состояние","feature.emerald_ore.target":"Цель","feature.end_gateway.exact":"Точный телепорт","feature.end_gateway.exit":"Выход","feature.fill_layer.height":"Высота","feature.fill_layer.state":"Состояние","feature.flower.blacklist":"Чёрный список","feature.flower.block_placer":"Размещение блоков","feature.flower.can_replace":"Может заменить","feature.flower.feature":"Размещаемый объект","feature.flower.need_water":"Требуется вода","feature.flower.project":"Проекция","feature.flower.state_provider":"Источник состояния","feature.flower.tries":"Попыток","feature.flower.whitelist":"Белый список","feature.flower.xspread":"Распространение по X","feature.flower.xz_spread":"Распространение по XZ","feature.flower.y_spread":"Распространение по Y","feature.flower.yspread":"Распространение по Y","feature.flower.zspread":"Распространение по Z","feature.forest_rock.state":"Состояние","feature.fossil.max_empty_corners_allowed.help":"Если больше углов контактируют с воздухом, размещение структуры отменяется.","feature.geode.blocks.invalid_blocks.help":"Когда встречается неподходящий блок, размещение структуры отменяется.","feature.glow_lichen.can_be_placed_on.entry":"Состояние","feature.glow_lichen.chance_of_spreading":"Вероятность распространения","feature.glow_lichen.search_range":"Радиус поиска","feature.huge_brown_mushroom.cap_provider":"Источник шляпки","feature.huge_brown_mushroom.foliage_radius":"Радиус шляпки","feature.huge_brown_mushroom.stem_provider":"Источник ножки","feature.huge_fungus.decor_state":"Декорация","feature.huge_fungus.hat_state":"Шляпка","feature.huge_fungus.stem_state":"Ножка","feature.huge_red_mushroom.cap_provider":"Источник шляпки","feature.huge_red_mushroom.foliage_radius":"Радиус шляпки","feature.huge_red_mushroom.stem_provider":"Источник ножки","feature.ice_patch.radius":"Радиус","feature.ice_patch.state":"Состояние","feature.ice_patch.targets":"Цели","feature.ice_patch.targets.entry":"Состояние","feature.iceberg.state":"Состояние","feature.lake.state":"Состояние","feature.netherrack_replace_blobs.radius":"Радиус","feature.netherrack_replace_blobs.state":"Состояние","feature.netherrack_replace_blobs.target":"Цель","feature.no_bonemeal_flower.feature":"Размещаемый объект","feature.no_surface_ore.size":"Размер","feature.no_surface_ore.state":"Состояние","feature.no_surface_ore.target":"Цель","feature.object":"Произвольно","feature.ore.discard_chance_on_air_exposure":"Вероятность сброса при контакте с воздухом","feature.ore.size":"Размер","feature.ore.targets":"Цели","feature.ore.targets.entry.state":"Состояние","feature.ore.targets.entry.target":"Цель","feature.random_boolean_selector.feature_false":"Размещаемый объект 1","feature.random_boolean_selector.feature_true":"Размещаемый объект 2","feature.random_patch.blacklist":"Чёрный список","feature.random_patch.block_placer":"Размещение блоков","feature.random_patch.can_replace":"Может заменить","feature.random_patch.feature":"Размещаемый объект","feature.random_patch.need_water":"Требуется вода","feature.random_patch.project":"Проекция","feature.random_patch.state_provider":"Состояние","feature.random_patch.tries":"Попыток","feature.random_patch.whitelist":"Белый список","feature.random_patch.xspread":"Распространение по X","feature.random_patch.yspread":"Распространение по Y","feature.random_patch.zspread":"Распространение по Z","feature.random_selector.default":"По умолчанию","feature.random_selector.features":"Объекты","feature.random_selector.features.entry":"Объект","feature.random_selector.features.entry.chance":"Вероятность","feature.random_selector.features.entry.feature":"Размещаемый объект","feature.scattered_ore.discard_chance_on_air_exposure":"Вероятность сброса при контакте с воздухом","feature.scattered_ore.size":"Размер","feature.scattered_ore.targets":"Цели","feature.scattered_ore.targets.entry.state":"Состояние","feature.scattered_ore.targets.entry.target":"Цель","feature.sea_pickle.count":"Количество","feature.seagrass.probability":"Вероятность","feature.simple_block.place_in":"Разместить в","feature.simple_block.place_in.entry":"Состояние","feature.simple_block.place_on":"Разместить на","feature.simple_block.place_on.entry":"Состояние","feature.simple_block.place_under":"Разместить под","feature.simple_block.place_under.entry":"Состояние","feature.simple_block.to_place":"Состояние","feature.simple_random_selector.features":"Объекты","feature.simple_random_selector.features.entry":"Размещаемый объект","feature.spring_feature.state":"Состояние","feature.string":"Ссылка","feature.tree.decorators":"Декораторы","feature.tree.decorators.entry":"Декоратор дерева","feature.tree.foliage_placer":"Распределение листьев","feature.tree.heightmap":"Карта Высоты","feature.tree.ignore_vines":"Игнорировать лианы","feature.tree.leaves_provider":"Источник листвы","feature.tree.max_water_depth":"Максимальная Глубина Воды","feature.tree.minimum_size":"Минимальный размер","feature.tree.minimum_size.limit":"Лимит","feature.tree.minimum_size.lower_size":"Низкий Размер","feature.tree.minimum_size.middle_size":"Средний Размер","feature.tree.minimum_size.type":"Минимальный размер","feature.tree.minimum_size.upper_limit":"Верхняя Граница","feature.tree.minimum_size.upper_size":"Высокий Размер","feature.tree.trunk_placer":"Распределение Обрезки","feature.tree.trunk_provider":"Обрезание Деревьев","feature.type":"Тип","fluid.fluid":"ID жидкости","fluid.state":"Состояние жидкости","fluid.tag":"Тег жидкостей","fluid_state.Name":"Жидкость","function.apply_bonus.enchantment":"Чары","function.apply_bonus.formula":"Формула","function.apply_bonus.formula.binomial_with_bonus_count":"Биноминальное распределение с бонусным количеством","function.apply_bonus.formula.ore_drops":"Дроп руд","function.apply_bonus.formula.uniform_bonus_count":"Равномерное распределение с бонусным количеством","function.apply_bonus.parameters":"Параметры","function.apply_bonus.parameters.bonusMultiplier":"Множитель","function.apply_bonus.parameters.extra":"Дополнительное значение","function.apply_bonus.parameters.probability":"Вероятность","function.copy_name.source":"Источник","function.copy_nbt.ops":"Операции с NBT","function.copy_nbt.ops.entry":"Операция","function.copy_nbt.source":"Источник","function.copy_state.block":"Блок","function.copy_state.properties":"Свойства","function.copy_state.properties.entry":"Свойство","function.enchant_randomly.enchantments":"Необязательные чары","function.enchant_randomly.enchantments.entry":"Чары","function.enchant_with_levels.levels":"Уровень","function.enchant_with_levels.treasure":"Чары-сокровища","function.exploration_map.decoration":"Значок","function.exploration_map.destination":"Назначение","function.exploration_map.search_radius":"Радиус поиска (в чанках)","function.exploration_map.skip_existing_chunks":"Не искать в существующих чанках","function.exploration_map.zoom":"Уровень приближения","function.fill_player_head.entity":"Сущность","function.function":"Функция","function.limit_count.limit":"Лимит","function.looting_enchant.count":"Количество","function.looting_enchant.limit":"Лимит","function.set_attributes.modifiers":"Модификаторы","function.set_attributes.modifiers.entry":"Модификатор","function.set_banner_pattern.append":"Добавить","function.set_banner_pattern.patterns":"Узоры","function.set_contents.entries":"Содержимое","function.set_contents.entries.entry":"Элемент","function.set_count.add":"Прибавить","function.set_count.add.help":"Если «Да», изменение будет относительно текущего количества","function.set_count.count":"Количество","function.set_damage.add":"Прибавить","function.set_damage.add.help":"Если «Да», изменение будет относительно текущего повреждения","function.set_damage.damage":"Повреждение","function.set_data.data":"Данные","function.set_enchantments.add":"Прибавить","function.set_enchantments.add.help":"Если «Да», изменение будет относительно текущего уровня","function.set_enchantments.enchantments":"Чары","function.set_loot_table.name":"ID таблицы добычи","function.set_loot_table.seed":"Ключ генератора","function.set_lore.entity":"Сущность","function.set_lore.lore":"Описание","function.set_lore.lore.entry":"Строка","function.set_lore.replace":"Заменить","function.set_name.entity":"Сущность","function.set_name.name":"Название","function.set_nbt.tag":"NBT","function.set_stew_effect.effects":"Эффекты","function.set_stew_effect.effects.entry":"Эффект","function.set_stew_effect.effects.entry.duration":"Длительность","function.set_stew_effect.effects.entry.type":"Эффект","functions":"Функции","functions.entry":"Функция","gamemode.adventure":"Приключение","gamemode.creative":"Творческий","gamemode.spectator":"Наблюдатель","gamemode.survival":"Выживание","generation_step.air":"Воздух","generation_step.liquid":"Жидкость","generator.biome_source.altitude_noise":"Шум альтитуды","generator.biome_source.biome":"Биом","generator.biome_source.biomes":"Биомы","generator.biome_source.humidity_noise":"Шум влажности","generator.biome_source.large_biomes":"Большие биомы","generator.biome_source.legacy_biome_init_layer":"Старый слой инициализации биомов","generator.biome_source.preset":"Шаблон биомов","generator.biome_source.preset.nether":"Незер","generator.biome_source.scale":"Масштаб","generator.biome_source.seed":"Ключ генератора биомов","generator.biome_source.temperature_noise":"Шум температуры","generator.biome_source.type":"Источник биомов","generator.biome_source.weirdness_noise":"Шум странности","generator.seed":"Ключ генератора измерения","generator.settings":"Настройки генератора","generator.settings.biome":"Биом","generator.settings.lakes":"Озёра","generator.settings.layers":"Слои","generator.settings.layers.entry":"Слой","generator.settings.layers.entry.block":"ID блока","generator.settings.layers.entry.height":"Высота","generator.settings.object":"Произвольно","generator.settings.presets.amplified":"Расширенный","generator.settings.presets.caves":"Пещеры","generator.settings.presets.end":"Край","generator.settings.presets.floating_islands":"Парящие острова","generator.settings.presets.nether":"Ад","generator.settings.presets.overworld":"Верхний мир","generator.settings.string":"Шаблон","generator.settings.structures":"Структуры","generator.settings.structures.stronghold":"Крепость (Портал в Край)","generator.settings.structures.stronghold.count":"Количество","generator.settings.structures.stronghold.distance":"Расстояние","generator.settings.structures.stronghold.spread":"Распределение","generator.settings.structures.structures":"Структуры","generator.type":"Тип генератора","generator_biome.biome":"Биом","generator_biome.parameters":"Параметры","generator_biome.parameters.altitude":"Альтитуда","generator_biome.parameters.help":"Эти параметры определяют расположение биома. Каждый биом должен иметь уникальную комбинацию параметров. Биомы с похожими значениями будут генерироваться рядом.","generator_biome.parameters.humidity":"Влажность","generator_biome.parameters.offset":"Смещение","generator_biome.parameters.temperature":"Температура","generator_biome.parameters.weirdness":"Странность","generator_biome_noise.amplitudes":"Амплитуды","generator_biome_noise.amplitudes.entry":"Октава %0%","generator_biome_noise.firstOctave":"Первая октава","generator_structure.salt":"Соль","generator_structure.separation":"Изоляция","generator_structure.separation.help":"Минимальное расстояние в чанках между двумя структурами этого типа. Должно быть меньше чем интервал.","generator_structure.spacing":"Интервал","generator_structure.spacing.help":"Среднее расстояние в чанках между двумя структурами этого типа.","hide_source":"Скрыть источник","item.count":"Количество","item.durability":"Прочность","item.enchantments":"Чары","item.enchantments.entry":"Чары","item.item":"ID предмета","item.nbt":"NBT","item.potion":"Зелье","item.tag":"Тег предметов","item_transform.rotation":"Поворот","item_transform.scale":"Масштаб","item_transform.translation":"Смещение","key.advancements":"Достижения","key.attack":"Атаковать/Разрушить","key.back":"Идти назад","key.chat":"Открыть чат","key.command":"Открыть команды","key.drop":"Выбросить выбранный предмет","key.forward":"Идти вперёд","key.fullscreen":"Включить полноэкранный режим","key.hotbar.1":"Слот быстрого доступа 1","key.hotbar.2":"Слот быстрого доступа 2","key.hotbar.3":"Слот быстрого доступа 3","key.hotbar.4":"Слот быстрого доступа 4","key.hotbar.5":"Слот быстрого доступа 5","key.hotbar.6":"Слот быстрого доступа 6","key.hotbar.7":"Слот быстрого доступа 7","key.hotbar.8":"Слот быстрого доступа 8","key.hotbar.9":"Слот быстрого доступа 9","key.inventory":"Открыть/Закрыть инвентарь","key.jump":"Прыжок","key.left":"Идти влево","key.loadToolbarActivator":"Клавиша загрузки панели быстрого доступа","key.pickItem":"Выбрать блок","key.playerlist":"Список игроков","key.right":"Идти вправо","key.saveToolbarActivator":"Клавиша сохранения панели быстрого доступа","key.screenshot":"Сделать снимок экрана","key.smoothCamera":"Включить плавную камеру","key.sneak":"Присесть","key.spectatorOutlines":"Подсветить игроков (Режим наблюдателя)","key.sprint":"Бег","key.swapOffhand":"Переложить предмет в руках","key.togglePerspective":"Сменить перспективу","key.use":"Использовать предмет/Поставить блок","location.biome":"Биом","location.block":"Блок","location.dimension":"Измерение","location.feature":"Строение","location.fluid":"Жидкость","location.light":"Освещённость","location.light.light":"Уровень освещённости","location.position":"Позиция","location.position.x":"X","location.position.y":"Y","location.position.z":"Z","location.smokey":"Задымлённое","loot_condition_type.alternative":"Альтернатива (ИЛИ)","loot_condition_type.block_state_property":"Свойства блока","loot_condition_type.damage_source_properties":"Источник урона","loot_condition_type.entity_properties":"Свойства сущности","loot_condition_type.entity_scores":"Счёты сущности","loot_condition_type.inverted":"Инвертирование (НЕ)","loot_condition_type.killed_by_player":"Убит игроком","loot_condition_type.location_check":"Местоположение","loot_condition_type.match_tool":"Свойства инструмента","loot_condition_type.random_chance":"Случайность","loot_condition_type.random_chance_with_looting":"Случайность с «Добычей»","loot_condition_type.reference":"Предикат","loot_condition_type.survives_explosion":"Переживает взрыв","loot_condition_type.table_bonus":"Бонус таблицы","loot_condition_type.time_check":"Время","loot_condition_type.value_check":"Значение","loot_condition_type.weather_check":"Погода","loot_entry.dynamic.name":"Название","loot_entry.item.name":"ID","loot_entry.loot_table.name":"ID таблицы добычи","loot_entry.quality":"Качество","loot_entry.tag.expand":"Отдельно","loot_entry.tag.expand.help":"Если отдельно, то действует как множество записей каждого предмета из тега, иначе возвращает всё содержимое тега.","loot_entry.tag.name":"ID тега предметов","loot_entry.type":"Тип","loot_entry.weight":"Вес","loot_function_type.apply_bonus":"Применить бонус","loot_function_type.copy_name":"Скопировать название","loot_function_type.copy_nbt":"Скопировать NBT","loot_function_type.copy_state":"Скопировать состояния блока","loot_function_type.enchant_randomly":"Наложить случайные чары","loot_function_type.enchant_with_levels":"Наложить чары за уровни","loot_function_type.exploration_map":"Задать свойства карты исследователя","loot_function_type.explosion_decay":"Разрушить взрывом","loot_function_type.fill_player_head":"Задать скин голове игрока","loot_function_type.furnace_smelt":"Расплавить в печи","loot_function_type.limit_count":"Ограничить количество","loot_function_type.looting_enchant":"Применить «Добычу»","loot_function_type.set_attributes":"Задать атрибуты","loot_function_type.set_banner_pattern":"Задать узор флага","loot_function_type.set_contents":"Задать содержимое","loot_function_type.set_count":"Задать количество","loot_function_type.set_damage":"Задать повреждение","loot_function_type.set_data":"Задать данные","loot_function_type.set_enchantments":"Задать чары","loot_function_type.set_loot_table":"Задать таблицу добычи","loot_function_type.set_lore":"Задать описание","loot_function_type.set_name":"Задать название","loot_function_type.set_nbt":"Задать NBT","loot_function_type.set_stew_effect":"Задать эффект загадочного рагу","loot_pool.bonus_rolls":"Бонусных бросков","loot_pool.entries":"Элементы","loot_pool.entries.entry":"Элемент","loot_pool.rolls":"Бросков","loot_pool.rolls.help":"Количество раз выбора случайной записи.","loot_pool_entry_type.alternatives":"Альтернатива","loot_pool_entry_type.alternatives.help":"Выбирает первую дочернюю запись, у которой выполняется условие.","loot_pool_entry_type.dynamic":"Динамический","loot_pool_entry_type.dynamic.help":"Возвращает особое содержимое блока.","loot_pool_entry_type.empty":"Ничего","loot_pool_entry_type.empty.help":"Возвращает пустую запись.","loot_pool_entry_type.group":"Группа","loot_pool_entry_type.group.help":"Выбирает все дочерние записи, у которых выполняются условия.","loot_pool_entry_type.item":"Предмет","loot_pool_entry_type.item.help":"Возвращает один предмет.","loot_pool_entry_type.loot_table":"Таблица добычи","loot_pool_entry_type.loot_table.help":"Возвращает содержимое другой таблицы добычи.","loot_pool_entry_type.sequence":"Последовательность","loot_pool_entry_type.sequence.help":"Выбирает все дочерние записи до первой записи, у которой условия не выполняются.","loot_pool_entry_type.tag":"Тег предметов","loot_pool_entry_type.tag.help":"Возвращает содержимое тега предметов.","loot_table.pools":"Пулы","loot_table.pools.entry":"Пул","luck_based":"Основано на удаче","model.ambientocclusion":"Ambient Occlusion","model.display":"Отображение","model.elements":"Элементы","model.elements.entry":"Элемент","model.gui_light":"Освещение в GUI","model.overrides":"Переопределения","model.overrides.entry":"Переопределение","model.parent":"Предок","model.textures":"Текстуры","model_element.faces":"Грани","model_element.faces.cullface":"Выбраковка","model_element.faces.rotation":"Поворот","model_element.faces.texture":"Текстура","model_element.faces.tintindex":"Индекс оттенка","model_element.faces.uv":"UV","model_element.from":"Начало","model_element.rotation":"Поворот","model_element.rotation.angle":"Угол","model_element.rotation.axis":"Ось","model_element.rotation.origin":"Центр","model_element.rotation.rescale":"Масштабирование","model_element.shade":"Тень","model_element.to":"Конец","model_override.model":"Модель","model_override.predicate":"Предикат","nbt_operation.op":"Действие","nbt_operation.op.append":"Добавление","nbt_operation.op.merge":"Объединение","nbt_operation.op.replace":"Замена","nbt_operation.source":"Источник","nbt_operation.target":"Цель","nbt_provider.source":"Источник","nbt_provider.target":"Цель","nbt_provider.type":"Тип","nbt_provider.type.context":"Контекст+","nbt_provider.type.storage":"Хранилище","nbt_provider.type.string":"Контекст","noise_settings.aquifers_enabled":"Аквиферы","noise_settings.bedrock_floor_position":"Высота нижнего слоя коренной породы","noise_settings.bedrock_floor_position.help":"Положение нижнего уровня бедрока. Чем больше число, тем выше уровень.","noise_settings.bedrock_roof_position":"Высота верхнего слоя коренной породы","noise_settings.bedrock_roof_position.help":"Положение верхнего уровня бедрока относительно верха мира. Чем больше число, тем ниже уровень.","noise_settings.default_block":"Стандартный блок","noise_settings.default_fluid":"Стандартная жидкость","noise_settings.disable_mob_generation":"Отключить генерацию мобов","noise_settings.disable_mob_generation.help":"Определяет, появляются ли мобы во время генерации.","noise_settings.name":"ID","noise_settings.noise":"Параметры шума","noise_settings.noise.amplified":"Расширенный","noise_settings.noise.bottom_slide":"Низ кривой","noise_settings.noise.bottom_slide.help":"Добавляет или убирает рельеф в нижней части мира. Ничего не делает, когда размер равен 0.","noise_settings.noise.bottom_slide.offset":"Смещение низа кривой","noise_settings.noise.bottom_slide.offset.help":"Определяет диапазон в \'Смещение * Вертикальный размер * 4\' блоков от низа мира где плотность устанавливается до целевого значения.","noise_settings.noise.bottom_slide.size":"Размер низа кривой","noise_settings.noise.bottom_slide.size.help":"Определяет диапазон \'Размер * Вертикальный размер * 4\' блоков, где прежняя и целевая плотности интерполируются.","noise_settings.noise.bottom_slide.target":"Значение низа кривой","noise_settings.noise.bottom_slide.target.help":"Целевая плотность. Положительные значения добавляют рельеф, а отрицательные убирают.","noise_settings.noise.density_factor":"Множитель плотности","noise_settings.noise.density_factor.help":"Определяет какое высота оказывает влияние на рельеф. На положительных значениях рельеф генерируется внизу. Значения, близкие к нулю, производят равномерный пещеро-подобный рельеф.","noise_settings.noise.density_offset":"Смещение плотности","noise_settings.noise.density_offset.help":"Влияет на среднюю высоту рельефа. При значении в 0 высота равна половине альтитуды мира. Положительные значения увеличивают высоту.","noise_settings.noise.height":"Высота","noise_settings.noise.height.help":"Полная высота, где блоки могут генерироваться. Максимальная Высота = Минимальная Высота + Высота.","noise_settings.noise.island_noise_override":"Переопределение островным шумом","noise_settings.noise.island_noise_override.help":"Если «Да», ландшафт будет генерироваться в форме островов, похожую на ту, что в Энде.","noise_settings.noise.min_y.help":"Минимальная высота, где блоки начинают генерироваться.","noise_settings.noise.random_density_offset":"Случайное смещение плотности","noise_settings.noise.sampling":"Координатный масштаб","noise_settings.noise.sampling.xz_factor":"Множитель шума по X, Z","noise_settings.noise.sampling.xz_scale":"Уровень шума по X, Z","noise_settings.noise.sampling.y_factor":"Множитель шума по Y","noise_settings.noise.sampling.y_scale":"Уровень шума по Y","noise_settings.noise.simplex_surface_noise":"Симплекс-шум поверхности","noise_settings.noise.size_horizontal":"Размер по горизонтали","noise_settings.noise.size_vertical":"Размер по вертикали","noise_settings.noise.top_slide":"Верх кривой","noise_settings.noise.top_slide.help":"Добавляет или убирает рельеф в верхней части мира. Ничего не делает, когда размер равен 0.","noise_settings.noise.top_slide.offset":"Смещение верха кривой","noise_settings.noise.top_slide.offset.help":"Определяет диапазон в \'Смещение * Вертикальный Размер * 4\' блоков от верха мира где плотность устанавливается до целевого значения.","noise_settings.noise.top_slide.size":"Размер верха кривой","noise_settings.noise.top_slide.size.help":"Определяет диапазон \'Размер * Вертикальный размер * 4\' блоков, где прежняя и целевая плотности интерполируются.","noise_settings.noise.top_slide.target":"Значение верха кривой","noise_settings.noise.top_slide.target.help":"Целевая плотность. Положительные значения добавляют рельеф, а отрицательные убирают.","noise_settings.sea_level":"Уровень моря","number_provider.max":"Макс.","number_provider.min":"Мин.","number_provider.n":"N","number_provider.p":"P","number_provider.scale":"Множитель","number_provider.score":"Задача","number_provider.target":"Цель","number_provider.type":"Тип","number_provider.type.binomial":"Биномиально","number_provider.type.constant":"Константа+","number_provider.type.number":"Константа","number_provider.type.object":"Равномерно","number_provider.type.score":"Счёт","number_provider.type.uniform":"Равномерно+","number_provider.value":"Число","placed_feature.feature":"Настраиваемый объект","player.advancements":"Достижение","player.advancements.entry":"Достижение","player.gamemode":"Игровой режим","player.level":"Уровень опыта","player.recipes":"Рецепты","player.stats":"Статистика","player.stats.entry":"Статистика","processors.object":"Произвольно","processors.string":"Ссылка","range.binomial":"Биномиально","range.max":"Макс.","range.min":"Мин.","range.n":"N","range.number":"Число","range.object":"Диапазон","range.p":"P","range.type":"Тип","range.uniform":"Равномерно","recipe.group.help":"Идентификатор для группировки нескольких рецептов в книге рецептов.","requirements":"Требуются","score_provider.target":"Цель","score_provider.type":"Тип","score_provider.type.context":"Контекст+","score_provider.type.fixed":"Заданная","score_provider.type.string":"Контекст","slot.chest":"Тело","slot.feet":"Стопы","slot.head":"Голова","slot.legs":"Ноги","slot.mainhand":"Ведущая рука","slot.offhand":"Вторая рука","statistic.stat":"Статистика","statistic.type":"Тип","statistic.type.broken":"Сломано","statistic.type.crafted":"Создано","statistic.type.custom":"Пользовательский","statistic.type.dropped":"Выброшено","statistic.type.killed":"Убито","statistic.type.killedByTeam":"Был убит командой","statistic.type.killed_by":"Был убит","statistic.type.mined":"Вскопано","statistic.type.picked_up":"Подобрано","statistic.type.teamkill":"Убито из команды","statistic.type.used":"Использовано","statistic.value":"Значение","status_effect.ambient":"Из окружения","status_effect.amplifier":"Уровень","status_effect.duration":"Длительность","status_effect.visible":"Видимый","table.type":"Тип","table.type.block":"Блок","table.type.chest":"Сундук","table.type.empty":"Ничего","table.type.entity":"Сущность","table.type.fishing":"Рыбалка","table.type.generic":"Общий","tag.replace":"Заменить","tag.values":"Значения","template_element.feature":"Размещаемый объект","terrain_shaper.jaggedness":"Зубчатость","text_component":"Текстовый компонент","text_component.boolean":"Логический тип","text_component.list":"Список","text_component.number":"Число","text_component.object":"Объект","text_component.string":"Строка","text_component_object.block":"Блок","text_component_object.bold":"Жирный","text_component_object.clickEvent":"Действие по нажатию","text_component_object.clickEvent.action":"Действие","text_component_object.clickEvent.action.change_page":"Сменить страницу","text_component_object.clickEvent.action.copy_to_clipboard":"Скопировать в буфер обмена","text_component_object.clickEvent.action.open_file":"Открыть файл","text_component_object.clickEvent.action.open_url":"Открыть ссылку","text_component_object.clickEvent.action.run_command":"Выполнить команду","text_component_object.clickEvent.action.suggest_command":"Предложить команду","text_component_object.clickEvent.value":"Значение","text_component_object.color":"Цвет","text_component_object.entity":"Сущность","text_component_object.extra":"Дополнительно","text_component_object.font":"Шрифт","text_component_object.hoverEvent":"Действие по наведению","text_component_object.hoverEvent.action":"Действие","text_component_object.hoverEvent.action.show_entity":"Показать сущность","text_component_object.hoverEvent.action.show_item":"Показать предмет","text_component_object.hoverEvent.action.show_text":"Показать текст","text_component_object.hoverEvent.contents":"Содержимое","text_component_object.hoverEvent.value":"Значение","text_component_object.insertion":"Вставка","text_component_object.interpret":"Интерпретировать","text_component_object.italic":"Курсив","text_component_object.keybind":"Назначенная клавиша","text_component_object.nbt":"Данные сущности (NBT)","text_component_object.obfuscated":"Обфусцированный","text_component_object.score":"Счёт","text_component_object.score.name":"Имя","text_component_object.score.objective":"Счёт","text_component_object.score.value":"Значение","text_component_object.selector":"Селектор","text_component_object.storage":"Хранилище","text_component_object.strikethrough":"Зачёркнутый","text_component_object.text":"Простой текст","text_component_object.translate":"Переводимый текст","text_component_object.underlined":"Подчёркнутый","text_component_object.with":"Перевести с","texture.alias":"Псевдоним","texture.reference":"Ссылка","true":"Да","uniform_int.base":"Начальное значение","uniform_int.number":"Точное","uniform_int.object":"Случайное число в промежутке","uniform_int.spread":"Распределение","unset":"Не задано","vertical_anchor.above_bottom":"Над нижней границей","vertical_anchor.absolute":"Абсолютная величина","vertical_anchor.below_top":"Под верхней границей","world.bonus_chest":"Бонусный сундук","world.generate_features":"Генерация строений","world.seed":"Ключ генератора мира","world_settings.generate_features":"Генерация строений","worldgen.warning":"Эта функция экспериментальная и крайне нестабильная. Она может измениться в будущих версиях. Есть вероятность, что произойдёт сбой игры при создании мира.","worldgen/biome_source.checkerboard":"Шахматный","worldgen/biome_source.checkerboard.help":"Биомы генерируются в шахматном порядке чанков.","worldgen/biome_source.fixed":"Один биом","worldgen/biome_source.fixed.help":"Один биом на весь мир.","worldgen/biome_source.multi_noise":"Множественный шум","worldgen/biome_source.multi_noise.help":"Произвольное распределение биомов с настраиваемыми параметрами.","worldgen/biome_source.the_end":"Энд","worldgen/biome_source.the_end.help":"Распределение биомов в Краю.","worldgen/biome_source.vanilla_layered":"Стандартный","worldgen/biome_source.vanilla_layered.help":"Распределение биомов в Верхнем мире.","worldgen/chunk_generator.debug":"Режим отладки","worldgen/chunk_generator.flat":"Суперплоскость","worldgen/chunk_generator.noise":"По умолчанию","worldgen/feature_size_type.three_layers_feature_size":"Три слоя","worldgen/feature_size_type.two_layers_feature_size":"Два слоя","worldgen/structure_pool_element.feature_pool_element":"Объект"}');export default e; -//# sourceMappingURL=ru.cc3bc989.js.map diff --git a/assets/ru.cc3bc989.js.map b/assets/ru.cc3bc989.js.map deleted file mode 100644 index af469791..00000000 --- a/assets/ru.cc3bc989.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ru.cc3bc989.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/changelog/index.html b/changelog/index.html index 202b98fb..8171695a 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/dimension-type/index.html b/dimension-type/index.html index 71e00b97..31831a69 100644 --- a/dimension-type/index.html +++ b/dimension-type/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/dimension/index.html b/dimension/index.html index e75bc937..6e6fb682 100644 --- a/dimension/index.html +++ b/dimension/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/index.html b/index.html index 9ada0cb8..756a4eb4 100644 --- a/index.html +++ b/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/item-modifier/index.html b/item-modifier/index.html index 332cc7f8..b865aabe 100644 --- a/item-modifier/index.html +++ b/item-modifier/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/loot-table/index.html b/loot-table/index.html index 9632cfdf..cfcf3811 100644 --- a/loot-table/index.html +++ b/loot-table/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/predicate/index.html b/predicate/index.html index 5e805a77..f1373296 100644 --- a/predicate/index.html +++ b/predicate/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/recipe/index.html b/recipe/index.html index 95eb80ba..3a456433 100644 --- a/recipe/index.html +++ b/recipe/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/sounds/index.html b/sounds/index.html index 94ec3506..1d6dab9a 100644 --- a/sounds/index.html +++ b/sounds/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/versions/index.html b/versions/index.html index e1a4e5ba..a2c320c8 100644 --- a/versions/index.html +++ b/versions/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/world/index.html b/world/index.html index ae0b6386..a0c60686 100644 --- a/world/index.html +++ b/world/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/biome/index.html b/worldgen/biome/index.html index 8a3b0b47..f3075868 100644 --- a/worldgen/biome/index.html +++ b/worldgen/biome/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/carver/index.html b/worldgen/carver/index.html index 9032380f..7a7c58ea 100644 --- a/worldgen/carver/index.html +++ b/worldgen/carver/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/density-function/index.html b/worldgen/density-function/index.html index fcef4db9..332bddf2 100644 --- a/worldgen/density-function/index.html +++ b/worldgen/density-function/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/feature/index.html b/worldgen/feature/index.html index a76ebc68..3959b1a6 100644 --- a/worldgen/feature/index.html +++ b/worldgen/feature/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/flat-world-preset/index.html b/worldgen/flat-world-preset/index.html index a5cb93bd..3fdebc6c 100644 --- a/worldgen/flat-world-preset/index.html +++ b/worldgen/flat-world-preset/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/index.html b/worldgen/index.html index 09821777..7248dda1 100644 --- a/worldgen/index.html +++ b/worldgen/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/noise-settings/index.html b/worldgen/noise-settings/index.html index 58f4983d..0a80b683 100644 --- a/worldgen/noise-settings/index.html +++ b/worldgen/noise-settings/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/noise/index.html b/worldgen/noise/index.html index 5f4233cf..0f738328 100644 --- a/worldgen/noise/index.html +++ b/worldgen/noise/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/placed-feature/index.html b/worldgen/placed-feature/index.html index 2670dc8f..aa1f5c2a 100644 --- a/worldgen/placed-feature/index.html +++ b/worldgen/placed-feature/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/processor-list/index.html b/worldgen/processor-list/index.html index 6873781b..82641dda 100644 --- a/worldgen/processor-list/index.html +++ b/worldgen/processor-list/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/structure-feature/index.html b/worldgen/structure-feature/index.html index 6496689c..3c469540 100644 --- a/worldgen/structure-feature/index.html +++ b/worldgen/structure-feature/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/structure-set/index.html b/worldgen/structure-set/index.html index 25b0f56c..9a562c74 100644 --- a/worldgen/structure-set/index.html +++ b/worldgen/structure-set/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/structure/index.html b/worldgen/structure/index.html index bb1a2cb7..c419b063 100644 --- a/worldgen/structure/index.html +++ b/worldgen/structure/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/surface-builder/index.html b/worldgen/surface-builder/index.html index 32aed1ec..dc55bcf0 100644 --- a/worldgen/surface-builder/index.html +++ b/worldgen/surface-builder/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/template-pool/index.html b/worldgen/template-pool/index.html index c163087d..071a5c7c 100644 --- a/worldgen/template-pool/index.html +++ b/worldgen/template-pool/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head> diff --git a/worldgen/world-preset/index.html b/worldgen/world-preset/index.html index cab70a42..d042768c 100644 --- a/worldgen/world-preset/index.html +++ b/worldgen/world-preset/index.html @@ -29,7 +29,7 @@ BigInt64Array = function() { } } </script> -<script type="module" crossorigin src="/assets/index.1a21c031.js"></script> +<script type="module" crossorigin src="/assets/index.301407da.js"></script> <link rel="modulepreload" href="/assets/vendor.fcb8aee9.js"> <link rel="stylesheet" href="/assets/index.472bbc32.css"> </head>