Files
misode.github.io/index.html

993 lines
64 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Loot Table Generator</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
<link rel="stylesheet" href="custom.css">
</head>
<body>
<nav class="navbar navbar-dark bg-dark">
<span class="navbar-brand mb-0 h1">Loot Table Generator for Minecraft 1.14</span>
<span class="float-right"><a href="https://github.com/misode/loot-table" style="color: #ddd;">by Misode</a></span>
</nav>
<div class="container">
<div class="row my-4">
<div class="col-12 col-lg-7 mb-3 structure-container">
<div class="input-group">
<button type="button" class="btn btn-success d-block mr-3 float-left" onclick="addPool(this)">Add Pool</button>
<div class="input-group-prepend">
<span class="input-group-text rounded-left">Type</span>
</div>
<select id="tableType" class="form-control mr-3 rounded-right" style="max-width: 9em;" onchange="updateTableType(this)">
<option value="minecraft:empty">Empty</option>
<option value="minecraft:entity">Entity</option>
<option value="minecraft:block">Block</option>
<option value="minecraft:chest">Chest</option>
<option value="minecraft:fishing">Fishing</option>
<option value="minecraft:generic">Generic</option>
</select>
<div class="custom-control custom-checkbox mr-3" style="margin: auto 0">
<input type="checkbox" class="custom-control-input" id="luckBased" onchange="updateLuckBased(this)">
<label class="custom-control-label" for="luckBased">Luck-based</label>
</div>
<div id="showSourceButton" class="ml-auto d-none">
<button type="button" class="btn btn-secondary" onclick="showSource()">Show Source</button>
</div>
</div>
<div id="structure" class="loot-table" data-field="table">
</div>
</div>
<div class="col-12 col-lg-5 source-container">
<div class="mb-3 float-lg-right source-menu">
<div class="input-group">
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">More</button>
<div class="dropdown-menu">
<a class="dropdown-item" onclick="updateIndentation(2)">2 Spaces</a>
<a class="dropdown-item" onclick="updateIndentation(4)">4 Spaces</a>
<a class="dropdown-item" onclick="updateIndentation('\t')">Tabs</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" onclick="hideSource()">Hide Source</a>
</div>
</div>
<button id="linkSource" type="button" class="btn btn-secondary ml-3" onclick="linkSource()">Share</button>
<button type="button" class="btn btn-secondary ml-3" onclick="copySource()">Copy</button>
</div>
</div>
<textarea id="copyTextarea" rows="1" class="form-control mb-3 d-none"></textarea>
<textarea id="source" class="form-control code" onchange="updateSouce()" rows="19" spellcheck="false"></textarea>
</div>
</div>
</div>
<div class="d-none">
<div id="poolTemplate" class="card bg-success text-white mt-3 pool" data-field="pools[]">
<div class="card-header pb-1">
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeField(this)">Remove Pool</button>
<button type="button" class="btn btn-light mr-3 mb-2 float-left" onclick="addEntry(this)">Add Entry</button>
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)">Add Condition</button>
</div>
<div class="card-body">
<div class="input-group rolls" data-type="range" data-field="rolls">
<div class="input-group-prepend">
<span class="input-group-text">Rolls</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 bonus-rolls" data-type="range" data-field="bonus_rolls">
<div class="input-group-prepend">
<span class="input-group-text">Bonus Rolls</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onclick="this.select()">
</div>
</div>
</div>
<div id="entryTemplate" class="card mt-3 entry" data-field="entries[]">
<div class="card-header pb-1">
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeField(this)">Remove Entry</button>
<button type="button" class="btn btn-secondary mr-3 mb-2 float-left" onclick="addFunction(this)">Add Function</button>
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)">Add Condition</button>
</div>
<div class="card-body">
<div class="input-group" data-type="enum" data-field="type">
<div class="input-group-prepend">
<span class="input-group-text">Type</span>
</div>
<select class="form-control entry-type" onchange="updateField(this)">
<option value="minecraft:empty">Empty</option>
<option value="minecraft:item">Item</option>
<option value="minecraft:tag">Item Tag</option>
<option value="minecraft:loot_table">Loot Table</option>
<option value="minecraft:alternatives">Alternatives</option>
<option value="minecraft:sequence">Sequence</option>
<option value="minecraft:group">Group</option>
<option value="minecraft:dynamic">Dynamic</option>
</select>
</div>
<div class="input-group mt-3 entry-name d-none" data-type="string" data-field="name">
<div class="input-group-prepend">
<span class="input-group-text">Name</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 entry-weight d-none" data-type="int" data-field="weight">
<div class="input-group-prepend">
<span class="input-group-text">Weight</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 entry-quality d-none" data-type="int" data-field="quality">
<div class="input-group-prepend">
<span class="input-group-text">Quality</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 entry-children d-none">
<button type="button" class="btn btn-outline-success" onclick="addChild(this)">Add Child</button>
</div>
</div>
</div>
<div id="functionTemplate" class="card bg-secondary mt-3 function" data-field="functions[]">
<div class="card-header pb-1">
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeField(this)">Remove Function</button>
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)">Add Condition</button>
</div>
<div class="card-body">
<div class="input-group" data-type="enum" data-field="function">
<div class="input-group-prepend">
<span class="input-group-text">Function</span>
</div>
<select class="form-control function-type" onchange="updateField(this)">
<option value="minecraft:set_count">Set Count</option>
<option value="minecraft:set_damage">Set Damage</option>
<option value="minecraft:set_name">Set Name</option>
<option value="minecraft:set_lore">Set Lore</option>
<option value="minecraft:set_nbt">Set NBT</option>
<option value="minecraft:set_attributes">Set Attributes</option>
<option value="minecraft:set_contents">Set Contents</option>
<option value="minecraft:enchant_randomly">Enchant Randomly</option>
<option value="minecraft:enchant_with_levels">Enchant With Levels</option>
<option value="minecraft:looting_enchant">Looting Enchant</option>
<option value="minecraft:limit_count">Limit Count</option>
<option value="minecraft:furnace_smelt">Furnace Smelt</option>
<option value="minecraft:explosion_decay">Explosion Decay</option>
<option value="minecraft:fill_player_head">Fill Player Head</option>
<option value="minecraft:copy_name">Copy Name</option>
<option value="minecraft:copy_nbt">Copy NBT</option>
<option value="minecraft:apply_bonus">Apply Bonus</option>
</select>
</div>
<div class="input-group function-count mt-3 d-none" data-type="range" data-field="count">
<div class="input-group-prepend">
<span class="input-group-text">Count</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group function-damage mt-3 d-none" data-type="range" data-field="damage">
<div class="input-group-prepend">
<span class="input-group-text">Damage</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="0" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 function-nbt d-none" data-type="nbt" data-field="tag">
<div class="input-group-prepend">
<span class="input-group-text">NBT</span>
</div>
<textarea type="text" class="form-control code" onchange="updateField(this)" onclick="this.select()"></textarea>
</div>
<div class="mt-3 function-ench-rand d-none" data-type="set" data-field="enchantments">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Optional Enchantments</span>
</div>
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split rounded-right" data-toggle="dropdown"></button>
<div class="dropdown-menu scrollable-menu">
<a class="dropdown-item" data-ench="minecraft:aqua_affinity" onclick="addEnchantment(this)">Aqua Affinity</a>
<a class="dropdown-item" data-ench="minecraft:bane_of_arthropods" onclick="addEnchantment(this)">Bane of Arthropods</a>
<a class="dropdown-item" data-ench="minecraft:blast_protection" onclick="addEnchantment(this)">Blast Protection</a>
<a class="dropdown-item" data-ench="minecraft:channeling" onclick="addEnchantment(this)">Channeling</a>
<a class="dropdown-item" data-ench="minecraft:binding_curse" onclick="addEnchantment(this)">Curse of Binding</a>
<a class="dropdown-item" data-ench="minecraft:vanishing_curse" onclick="addEnchantment(this)">Curse of Vanishing</a>
<a class="dropdown-item" data-ench="minecraft:depth_strider" onclick="addEnchantment(this)">Depth Strider</a>
<a class="dropdown-item" data-ench="minecraft:efficiency" onclick="addEnchantment(this)">Efficiency</a>
<a class="dropdown-item" data-ench="minecraft:feather_falling" onclick="addEnchantment(this)">Feather Falling</a>
<a class="dropdown-item" data-ench="minecraft:fire_aspect" onclick="addEnchantment(this)">Fire Aspect</a>
<a class="dropdown-item" data-ench="minecraft:fire_protection" onclick="addEnchantment(this)">Fire Protection</a>
<a class="dropdown-item" data-ench="minecraft:flame" onclick="addEnchantment(this)">Flame</a>
<a class="dropdown-item" data-ench="minecraft:fortune" onclick="addEnchantment(this)">Fortune</a>
<a class="dropdown-item" data-ench="minecraft:frost_walker" onclick="addEnchantment(this)">Frost Walker</a>
<a class="dropdown-item" data-ench="minecraft:impaling" onclick="addEnchantment(this)">Impaling</a>
<a class="dropdown-item" data-ench="minecraft:infinity" onclick="addEnchantment(this)">Infinity</a>
<a class="dropdown-item" data-ench="minecraft:knockback" onclick="addEnchantment(this)">Knockback</a>
<a class="dropdown-item" data-ench="minecraft:looting" onclick="addEnchantment(this)">Looting</a>
<a class="dropdown-item" data-ench="minecraft:loyalty" onclick="addEnchantment(this)">Loyalty</a>
<a class="dropdown-item" data-ench="minecraft:luck_of_the_sea" onclick="addEnchantment(this)">Luck of the Sea</a>
<a class="dropdown-item" data-ench="minecraft:lure" onclick="addEnchantment(this)">Lure</a>
<a class="dropdown-item" data-ench="minecraft:mending" onclick="addEnchantment(this)">Mending</a>
<a class="dropdown-item" data-ench="minecraft:multishot" onclick="addEnchantment(this)">Multishot</a>
<a class="dropdown-item" data-ench="minecraft:piercing" onclick="addEnchantment(this)">Piercing</a>
<a class="dropdown-item" data-ench="minecraft:power" onclick="addEnchantment(this)">Power</a>
<a class="dropdown-item" data-ench="minecraft:projectile_protection" onclick="addEnchantment(this)">Projectile Protection</a>
<a class="dropdown-item" data-ench="minecraft:protection" onclick="addEnchantment(this)">Protection</a>
<a class="dropdown-item" data-ench="minecraft:punch" onclick="addEnchantment(this)">Punch</a>
<a class="dropdown-item" data-ench="minecraft:quick_charge" onclick="addEnchantment(this)">Quick Charge</a>
<a class="dropdown-item" data-ench="minecraft:respiration" onclick="addEnchantment(this)">Respiration</a>
<a class="dropdown-item" data-ench="minecraft:riptide" onclick="addEnchantment(this)">Riptide</a>
<a class="dropdown-item" data-ench="minecraft:sharpness" onclick="addEnchantment(this)">Sharpness</a>
<a class="dropdown-item" data-ench="minecraft:silk_touch" onclick="addEnchantment(this)">Silk Touch</a>
<a class="dropdown-item" data-ench="minecraft:smite" onclick="addEnchantment(this)">Smite</a>
<a class="dropdown-item" data-ench="minecraft:sweeping" onclick="addEnchantment(this)">Sweeping Edge</a>
<a class="dropdown-item" data-ench="minecraft:thorns" onclick="addEnchantment(this)">Thorns</a>
<a class="dropdown-item" data-ench="minecraft:unbreaking" onclick="addEnchantment(this)">Unbreaking</a>
</div>
</div>
</div>
<div class="enchantment-list">
</div>
</div>
<div class="input-group function-ench-levels mt-3 d-none" data-type="range" data-field="levels">
<div class="input-group-prepend">
<span class="input-group-text">Levels</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 function-ench-treasure d-none" data-type="checkbox" data-field="treasure">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="treasureCheckbox" onchange="updateField(this)">
<label class="custom-control-label" for="treasureCheckbox">Treasure</label>
</div>
</div>
<div class="input-group mt-3 function-limit d-none" data-type="int" data-field="limit">
<div class="input-group-prepend">
<span class="input-group-text">Limit</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 function-attributes d-none">
<button type="button" class="btn btn-dark" onclick="addModifier(this)">Add Modifier</button>
</div>
<div class="input-group mt-3 function-source d-none" data-type="enum" data-field="source">
<div class="input-group-prepend">
<span class="input-group-text">Source</span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="block_entity">Block Entity</option>
<option value="this">This</option>
<option value="killer">Killer</option>
<option value="killer_player">Killer Player</option>
</select>
</div>
<div class="input-group mt-3 function-name d-none" data-type="json" data-field="name">
<div class="input-group-prepend">
<span class="input-group-text">Name</span>
</div>
<textarea type="text" class="form-control code" onchange="updateField(this)" onclick="this.select()" style="height: 0px"></textarea>
</div>
<div class="input-group function-limit-range mt-3 d-none" data-type="range" data-field="limit">
<div class="input-group-prepend">
<span class="input-group-text">limit</span>
</div>
<span class="input-group-text rounded-0 range">Min</span>
<input type="text" class="form-control range min" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range">Max</span>
<input type="text" class="form-control range max rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 function-entries d-none">
<button type="button" class="btn btn-light" onclick="addEntry(this)">Add Entry</button>
</div>
<div class="input-group mt-3 function-lore d-none" data-type="json-list" data-field="lore">
<textarea class="form-control code" onchange="updateLoreField(this)" rows=3></textarea>
</div>
<div class="input-group mt-3 function-lore-replace d-none" data-type="checkbox" data-field="replace">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="loreReplaceCheckbox" onchange="updateField(this)">
<label class="custom-control-label" for="loreReplaceCheckbox">Replace</label>
</div>
</div>
<div class="input-group mt-3 function-entity d-none" data-type="enum" data-field="entity">
<div class="input-group-prepend">
<span class="input-group-text">Entity</span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="this">This</option>
<option value="killer">Killer</option>
<option value="killer_player">Killer Player</option>
</select>
</div>
<div class="input-group mt-3 function-operations d-none">
<button type="button" class="btn btn-dark" onclick="addOperation(this)">Add Operation</button>
</div>
<div class="input-group mt-3 function-enchantment d-none" data-type="string" data-field="enchantment">
<div class="input-group-prepend">
<span class="input-group-text">Enchantment</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 function-formula d-none" data-type="enum" data-field="formula">
<div class="input-group-prepend">
<span class="input-group-text">Formula</span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="minecraft:uniform_bonus_count">Uniform Bonus Count</option>
<option value="minecraft:binomial_with_bonus_count">Binomial with Bonus Count</option>
<option value="minecraft:ore_drops">Ore Drops</option>
</select>
</div>
<div class="input-group mt-3 function-bonus-multiplier d-none" data-type="float" data-field="parameters.bonusMultiplier">
<div class="input-group-prepend">
<span class="input-group-text">Multiplier</span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'parameters.bonusMultiplier')" onclick="this.select()">
</div>
<div class="input-group mt-3 function-bonus-extra d-none" data-type="int" data-field="parameters.extra">
<div class="input-group-prepend">
<span class="input-group-text">Extra</span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'parameters.extra')" onclick="this.select()">
</div>
<div class="input-group mt-3 function-bonus-probability d-none" data-type="float" data-field="parameters.probability">
<div class="input-group-prepend">
<span class="input-group-text">Propability</span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'parameters.probability')" onclick="this.select()">
</div>
</div>
</div>
<div id="modifierTemplate" class="card bg-dark mt-3 modifier" data-field="modifiers[]">
<div class="card-body">
<button type="button" class="btn btn-danger mb-3 float-right" onclick="removeField(this)">Remove Modifier</button>
<div class="input-group" data-type="enum" data-field="attribute">
<div class="input-group-prepend">
<span class="input-group-text">Attribute</span>
</div>
<select class="form-control modifier-attribute" onchange="updateField(this)">
<option value="generic.maxHealth">Max Health</option>
<option value="generic.followRange">Follow Range</option>
<option value="generic.knockbackResistance">Knockback Resistance</option>
<option value="generic.movementSpeed">Movement Speed</option>
<option value="generic.attackDamage">Attack Damage</option>
<option value="generic.armor">Armor</option>
<option value="generic.armorThoughness">Armor Toughness</option>
<option value="generic.attackSpeed">Attack Speed</option>
<option value="generic.luck">Luck</option>
<option value="horse.jumpStrength">Jump Strength</option>
<option value="generic.attackKnockback">Attack Knockback</option>
<option value="generic.flyingSpeed">Flying Speed</option>
<option value="zombie.spawnReinforcements">Spawn Reinforcements</option>
</select>
</div>
<div class="input-group mt-3" data-type="string" data-field="name">
<div class="input-group-prepend">
<span class="input-group-text">Name</span>
</div>
<input type="text" class="form-control modifier-name" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 modifier-amount" data-type="range" data-field="amount">
<div class="input-group-prepend">
<span class="input-group-text">Amount</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)">Binomial</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">n</span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 binomial d-none">p</span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="enum" data-field="operation">
<div class="input-group-prepend">
<span class="input-group-text">Operation</span>
</div>
<select class="form-control modifier-operation" onchange="updateField(this)">
<option value="addition">Addition</option>
<option value="multiply_base">Multiply Base</option>
<option value="multiply_total">Multiply Total</option>
</select>
</div>
<div class="mt-3 modifier-slots">
<div class="input-group" data-type="set" data-field="slot">
<div class="input-group-prepend">
<span class="input-group-text">Slots</span>
</div>
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split rounded-right" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" data-slot="mainhand" onclick="addModifierSlot(this)">Mainhand</a>
<a class="dropdown-item" data-slot="offhand" onclick="addModifierSlot(this)">Offhand</a>
<a class="dropdown-item" data-slot="head" onclick="addModifierSlot(this)">Head</a>
<a class="dropdown-item" data-slot="chest" onclick="addModifierSlot(this)">Chest</a>
<a class="dropdown-item" data-slot="legs" onclick="addModifierSlot(this)">Legs</a>
<a class="dropdown-item" data-slot="feet" onclick="addModifierSlot(this)">Feet</a>
</div>
</div>
</div>
<div class="modifier-slots-list">
</div>
</div>
</div>
</div>
<div id="operationTemplate" class="card bg-dark mt-3 operation" data-field="ops[]">
<div class="card-header pb-1">
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeField(this)">Remove Operation</button>
</div>
<div class="card-body">
<div class="input-group" data-type="string" data-field="source">
<div class="input-group-prepend">
<span class="input-group-text">Source</span>
</div>
<input type="text" class="form-control code operation-source" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="string" data-field="target">
<div class="input-group-prepend">
<span class="input-group-text">Target</span>
</div>
<input type="text" class="form-control code operation-target" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="enum" data-field="op">
<div class="input-group-prepend">
<span class="input-group-text">Operation</span>
</div>
<select class="form-control operation-type" onchange="updateField(this)">
<option value="replace">Replace</option>
<option value="append">Append</option>
<option value="merge">Merge</option>
</select>
</div>
</div>
</div>
<div id="conditionTemplate" class="card mt-3 bg-info condition" data-field="conditions[]">
<div class="card-header pb-1">
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeField(this)">Remove Condition</button>
</div>
<div class="card-body">
<div class="input-group" data-type="enum" data-field="condition">
<div class="input-group-prepend">
<span class="input-group-text">Condition</span>
</div>
<select class="form-control condition-type" onchange="updateField(this)">
<option value="minecraft:alternative">Alternative</option>
<option value="minecraft:inverted">Inverted</option>
<option value="minecraft:entity_properties">Entity Properties</option>
<option value="minecraft:blockstate_propery">Block Properties</option>
<option value="minecraft:match_tool">Tool Properties</option>
<option value="minecraft:damage_source_properties">Damage Source</option>
<option value="minecraft:location_check">Location</option>
<option value="minecraft:weather_check">Weather</option>
<option value="minecraft:entity_scores">Entity Scores</option>
<option value="minecraft:random_chance">Random Chance</option>
<option value="minecraft:random_chance_with_looting">Random Chance with Looting</option>
<option value="minecraft:table_bonus">Table Bonus</option>
<option value="minecraft:killed_by_player">Killed by Player</option>
<option value="minecraft:survives_explosion">Survives Explosion</option>
</select>
</div>
<div class="input-group mt-3 condition-chance d-none" data-type="float" data-field="chance">
<div class="input-group-prepend">
<span class="input-group-text">Chance</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 condition-looting-multiplier d-none" data-type="float" data-field="looting_multiplier">
<div class="input-group-prepend">
<span class="input-group-text">Looting Multiplier</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 condition-killed-inverted d-none" data-type="checkbox" data-field="inverted">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="invertedCheckbox" onchange="updateField(this)">
<label class="custom-control-label" for="invertedCheckbox">Inverted</label>
</div>
</div>
<div class="input-group mt-3 condition-entity d-none" data-type="enum" data-field="entity">
<div class="input-group-prepend">
<span class="input-group-text">Entity</span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="this">This</option>
<option value="killer">Killer</option>
<option value="killer_player">Killer Player</option>
</select>
</div>
<div class="input-group mt-3 condition-entity-scores d-none">
<div class="input-group-prepend">
<label class="input-group-text">Objective</label>
</div>
<input type="text" class="form-control">
<div class="input-group-append">
<button class="btn btn-dark" type="button" onclick="addScore(this)">Add Score</button>
</div>
</div>
<div class="mt-3 scores-list d-none">
</div>
<div class="input-group mt-3 condition-terms d-none">
<button type="button" class="btn btn-light" onclick="addTerm(this)">Add Term</button>
</div>
<div class="input-group mt-3 condition-block d-none" data-type="string" data-field="block">
<div class="input-group-prepend">
<span class="input-group-text">Block</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 condition-block-properties d-none">
<div class="input-group-prepend">
<label class="input-group-text">Block State</label>
</div>
<input type="text" class="form-control">
<div class="input-group-append">
<button class="btn btn-dark" type="button" onclick="addBlockProperty(this)">Add Block State</button>
</div>
</div>
<div class="mt-3 property-list d-none">
</div>
<div class="input-group mt-3 condition-raining d-none" data-type="boolean" data-field="raining">
<div class="input-group-prepend">
<span class="input-group-text">Raining</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)">True</button>
</div>
</div>
<div class="input-group mt-3 condition-thundering d-none" data-type="boolean" data-field="thundering">
<div class="input-group-prepend">
<span class="input-group-text">Thundering</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)">True</button>
</div>
</div>
<div class="input-group mt-3 condition-enchantment d-none" data-type="string" data-field="enchantment">
<div class="input-group-prepend">
<span class="input-group-text">Enchantment</span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 condition-chances d-none" data-type="list" data-field="chances">
<div class="input-group-prepend">
<span class="input-group-text">Chances</span>
</div>
<input type="text" class="form-control code" onchange="updateChancesField(this)" onclick="this.select()">
</div>
</div>
</div>
<div id="scoreTemplate" class="input-group mt-3 score" data-type="range" data-field="scores">
<div class="input-group-prepend">
<span class="input-group-text objective"></span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" onclick="updateScoreType(this, 'exact')">Exact</a>
<a class="dropdown-item" onclick="updateScoreType(this, 'range')">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateScoreField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateScoreField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateScoreField(this)" onclick="this.select()">
<div class="input-group-append">
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeScore(this)">Remove</button>
</div>
</div>
<div id="blockPropertyTemplate" class="input-group mt-3 block-property">
<div class="input-group-prepend">
<span class="input-group-text blockstate"></span>
</div>
<input type="text" class="form-control exact" onchange="updateBlockPropertyField(this)" onclick="this.select()">
<div class="input-group-append">
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeBlockProperty(this)">Remove</button>
</div>
</div>
<div id="locationTemplate" class="card bg-dark mt-3" data-field="predicate">
<div class="card-body">
<button class="btn btn-light dropdown-toggle" type="button" data-shows="false" onclick="togglePosition(this)">Position</button>
<div class="input-group mt-2 position-collapse position-x d-none" data-type="range" data-field="position.x">
<div class="input-group-prepend">
<span class="input-group-text">X</span>
</div>
<span class="input-group-text rounded-0">Min</span>
<input type="text" class="form-control range min" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0">Max</span>
<input type="text" class="form-control range max" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-2 position-collapse position-y d-none" data-type="range" data-field="position.y">
<div class="input-group-prepend">
<span class="input-group-text">Y</span>
</div>
<span class="input-group-text rounded-0">Min</span>
<input type="text" class="form-control range min" onchange="updateField(this, 'position.y.min')" onclick="this.select()">
<span class="input-group-text rounded-0">Max</span>
<input type="text" class="form-control range max" onchange="updateField(this, 'position.y.max')" onclick="this.select()">
</div>
<div class="input-group mt-2 position-collapse position-z d-none" data-type="range" data-field="position.z">
<div class="input-group-prepend">
<span class="input-group-text">Z</span>
</div>
<span class="input-group-text rounded-0">Min</span>
<input type="text" class="form-control range min" onchange="updateField(this, 'position.z.min')" onclick="this.select()">
<span class="input-group-text rounded-0">Max</span>
<input type="text" class="form-control range max" onchange="updateField(this, 'position.z.max')" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="string" data-field="biome">
<div class="input-group-prepend">
<span class="input-group-text">Biome</span>
</div>
<input type="text" class="form-control biome" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="string" data-field="feature">
<div class="input-group-prepend">
<span class="input-group-text">Feature</span>
</div>
<input type="text" class="form-control feature" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="enum" data-field="dimension">
<div class="input-group-prepend">
<span class="input-group-text">Dimension</span>
</div>
<select class="form-control dimension" onchange="updateField(this)">
<option value="">Unset</option>
<option value="minecraft:overworld">Overworld</option>
<option value="minecraft:the_nether">The Nether</option>
<option value="minecraft:the_end">The End</option>
</select>
</div>
</div>
</div>
<div id="entityTemplate" class="card bg-dark mt-3" data-field="predicate">
<div class="card-body">
<div class="input-group mt-3" data-type="string" data-field="type">
<div class="input-group-prepend">
<span class="input-group-text">Type</span>
</div>
<input type="text" class="form-control type" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="nbt" data-field="nbt">
<div class="input-group-prepend">
<span class="input-group-text">NBT</span>
</div>
<textarea type="text" class="form-control nbt code" onchange="updateField(this)" onclick="this.select()"></textarea>
</div>
<button class="btn btn-light mt-3 dropdown-toggle" type="button" onclick="toggleEntityLocation(this)">Location</button>
</div>
</div>
<div id="itemTemplate" class="card bg-dark mt-3" data-field="predicate">
<div class="card-body">
<div class="input-group mt-3 item-type">
<div class="input-group-prepend">
<span class="input-group-text">Item</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" onclick="updateItemType(this, 'name')">Name</a>
<a class="dropdown-item" onclick="updateItemType(this, 'tag')">Tag</a>
</div>
</div>
<span class="input-group-text rounded-0 name d-none">Name</span>
<input type="text" class="form-control name d-none" onchange="updateItemField(this, 'name')" onclick="this.select()">
<span class="input-group-text rounded-0 tag d-none">Tag</span>
<input type="text" class="form-control tag d-none" onchange="updateItemField(this, 'tag')" onclick="this.select()">
</div>
<div class="input-group mt-3 item-count" data-type="range" data-field="count">
<div class="input-group-prepend">
<span class="input-group-text">Count</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 item-durability" data-type="range" data-field="durability">
<div class="input-group-prepend">
<span class="input-group-text">Durability</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="string" data-field="potion">
<div class="input-group-prepend">
<span class="input-group-text">Potion</span>
</div>
<input type="text" class="form-control potion" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3" data-type="nbt" data-field="nbt">
<div class="input-group-prepend">
<span class="input-group-text">NBT</span>
</div>
<textarea type="text" class="form-control nbt code" onchange="updateField(this)" onclick="this.select()"></textarea>
</div>
<div class="input-group mt-3">
<button class="btn btn-dark" type="button" onclick="addConditionEnchantment(this)">Add Enchantment</button>
</div>
</div>
</div>
<div id="damageTemplate" class="card bg-dark mt-3 damage" data-field="predicate">
<div class="card-body">
<button class="btn btn-light dropdown-toggle" type="button" data-shows="false" onclick="toggleDamageFlags(this)">Damage Type</button>
<div class="input-group mt-3 damage-flag damage-projectile d-none" data-type="boolean" data-field="type.is_projectile">
<div class="input-group-prepend">
<span class="input-group-text">Projectile</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_projectile')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_projectile')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-explosion d-none" data-type="boolean" data-field="type.is_explosion">
<div class="input-group-prepend">
<span class="input-group-text">Explosion</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_explosion')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_explosion')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-fire d-none" data-type="boolean" data-field="type.is_fire">
<div class="input-group-prepend">
<span class="input-group-text">Fire</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_fire')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_fire')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-magic d-none" data-type="boolean" data-field="type.is_magic">
<div class="input-group-prepend">
<span class="input-group-text">Magic</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_magic')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_magic')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-lightning d-none" data-type="boolean" data-field="is_lightning">
<div class="input-group-prepend">
<span class="input-group-text">Lightning</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-starvation d-none" data-type="boolean" data-field="type.bypasses_magic">
<div class="input-group-prepend">
<span class="input-group-text">Starvation</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.bypasses_magic')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.bypasses_magic')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-void d-none" data-type="boolean" data-field="type.bypasses_invulnerability">
<div class="input-group-prepend">
<span class="input-group-text">Void</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.bypasses_invulnerability')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.bypasses_invulnerability')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-flag damage-armor d-none" data-type="boolean" data-field="type.bypasses_armor">
<div class="input-group-prepend">
<span class="input-group-text">Bypass Armor</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.bypasses_armor')">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.bypasses_armor')">True</button>
</div>
</div>
<div class="input-group mt-3 damage-dealt" data-type="range" data-field="dealt">
<div class="input-group-prepend">
<span class="input-group-text">Dealt</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 damage-taken" data-type="range" data-field="taken">
<div class="input-group-prepend">
<span class="input-group-text">Taken</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onclick="this.select()">
</div>
<div class="input-group mt-3 damage-blocked" data-type="boolean" data-field="blocked">
<div class="input-group-prepend">
<span class="input-group-text">Blocked</span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)">False</button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)">True</button>
</div>
</div>
<button class="btn btn-light dropdown-toggle mt-3" type="button" data-shows="false" onclick="toggleSourceEntity(this)">Source Entity</button>
<div class="source-entity">
</div>
<button class="btn btn-light dropdown-toggle mt-3" type="button" data-shows="false" onclick="toggleDirectEntity(this)">Direct Entity</button>
<div class="direct-entity">
</div>
</div>
</div>
<div id="enchantmentTemplate" class="card bg-dark mt-3 enchantment" data-field="enchantments[]">
<div class="card-body">
<button type="button" class="btn btn-danger mb-3 float-right" onclick="removeField(this)">Remove Enchantment</button>
<div class="input-group" data-type="enum" data-field="enchantment">
<div class="input-group-prepend">
<span class="input-group-text">Enchantment</span>
</div>
<select class="form-control enchantment-id" onchange="updateField(this)">
<option value="minecraft:aqua_affinity">Aqua Affinity</option>
<option value="minecraft:bane_of_arthropods">Bane of Arthropods</option>
<option value="minecraft:blast_protection">Blast Protection</option>
<option value="minecraft:channeling">Channeling</option>
<option value="minecraft:binding_curse">Curse of Binding</option>
<option value="minecraft:vanishing_curse">Curse of Vanishing</option>
<option value="minecraft:depth_strider">Depth Strider</option>
<option value="minecraft:efficiency">Efficiency</option>
<option value="minecraft:feather_falling">Feather Falling</option>
<option value="minecraft:fire_aspect">Fire Aspect</option>
<option value="minecraft:fire_protection">Fire Protection</option>
<option value="minecraft:flame">Flame</option>
<option value="minecraft:fortune">Fortune</option>
<option value="minecraft:frost_walker">Frost Walker</option>
<option value="minecraft:impaling">Impaling</option>
<option value="minecraft:infinity">Infinity</option>
<option value="minecraft:knockback">Knockback</option>
<option value="minecraft:looting">Looting</option>
<option value="minecraft:loyalty">Loyalty</option>
<option value="minecraft:luck_of_the_sea">Luck of the Sea</option>
<option value="minecraft:lure">Lure</option>
<option value="minecraft:mending">Mending</option>
<option value="minecraft:multishot">Multishot</option>
<option value="minecraft:piercing">Piercing</option>
<option value="minecraft:power">Power</option>
<option value="minecraft:projectile_protection">Projectile Protection</option>
<option value="minecraft:protection">Protection</option>
<option value="minecraft:punch">Punch</option>
<option value="minecraft:quick_charge">Quick Charge</option>
<option value="minecraft:respiration">Respiration</option>
<option value="minecraft:riptide">Riptide</option>
<option value="minecraft:sharpness">Sharpness</option>
<option value="minecraft:silk_touch">Silk Touch</option>
<option value="minecraft:smite">Smite</option>
<option value="minecraft:sweeping">Sweeping Edge</option>
<option value="minecraft:thorns">Thorns</option>
<option value="minecraft:unbreaking">Unbreaking</option>
</select>
</div>
<div class="input-group mt-3 enchantment-levels" data-type="range" data-field="levels">
<div class="input-group-prepend">
<span class="input-group-text">Levels</span>
<button type="button" class="btn btn-outline-secondary bg-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" value="exact" onclick="updateRangeType(this)">Exact</a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)">Range</a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Min</span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onclick="this.select()">
<span class="input-group-text rounded-0 range d-none">Max</span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onclick="this.select()">
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
<script src="view.js" charset="utf-8"></script>
<script src="model.js" charset="utf-8"></script>
</body>
</html>