Remove old code

This commit is contained in:
Misode
2019-09-24 22:12:24 +02:00
parent 75ba5cc033
commit 98d7355e0d
3 changed files with 0 additions and 1800 deletions

View File

@@ -184,925 +184,6 @@
</div>
</div>
</div>
<!--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)" data-i18n="remove_pool"></button>
<button type="button" class="btn btn-light mr-3 mb-2 float-left" onclick="addEntry(this)" data-i18n="add_entry"></button>
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)" data-i18n="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" data-i18n="$pool.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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)" data-i18n="$range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onfocus="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" data-i18n="$pool.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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)" data-i18n="$range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onfocus="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)" data-i18n="remove_entry"></button>
<button type="button" class="btn btn-secondary mr-3 mb-2 float-left" onclick="addFunction(this)" data-i18n="add_function"></button>
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)" data-i18n="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" data-i18n="$entry.type"></span>
</div>
<select class="form-control entry-type" onchange="updateField(this)">
<option value="minecraft:empty" data-i18n="$entry.$type.empty"></option>
<option value="minecraft:item" data-i18n="$entry.$type.item"></option>
<option value="minecraft:tag" data-i18n="$entry.$type.tag"></option>
<option value="minecraft:loot_table" data-i18n="$entry.$type.loot_table"></option>
<option value="minecraft:alternatives" data-i18n="$entry.$type.alternatives"></option>
<option value="minecraft:sequence" data-i18n="$entry.$type.sequence"></option>
<option value="minecraft:group" data-i18n="$entry.$type.group"></option>
<option value="minecraft:dynamic" data-i18n="$entry.$type.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" data-i18n="$entry.name"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="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" data-i18n="$entry.weight"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="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" data-i18n="$entry.quality"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="this.select()">
</div>
<div class="input-group mt-3 entry-children d-none">
<button type="button" class="btn btn-outline-success" onclick="addChild(this)" data-i18n="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)" data-i18n="remove_function"></button>
<button type="button" class="btn btn-info mr-3 mb-2 float-left" onclick="addCondition(this)" data-i18n="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" data-i18n="function"></span>
</div>
<select class="form-control function-type" onchange="updateField(this)">
<option value="minecraft:set_count" data-i18n="$function.set_count"></option>
<option value="minecraft:set_damage" data-i18n="$function.set_damage"></option>
<option value="minecraft:set_name" data-i18n="$function.set_name"></option>
<option value="minecraft:set_lore" data-i18n="$function.set_lore"></option>
<option value="minecraft:set_nbt" data-i18n="$function.set_nbt"></option>
<option value="minecraft:set_attributes" data-i18n="$function.set_attributes"></option>
<option value="minecraft:set_contents" data-i18n="$function.set_contents"></option>
<option value="minecraft:enchant_randomly" data-i18n="$function.enchant_randomly"></option>
<option value="minecraft:enchant_with_levels" data-i18n="$function.enchant_with_levels"></option>
<option value="minecraft:looting_enchant" data-i18n="$function.looting_enchant"></option>
<option value="minecraft:limit_count" data-i18n="$function.limit_count"></option>
<option value="minecraft:furnace_smelt" data-i18n="$function.furnace_smelt"></option>
<option value="minecraft:explosion_decay" data-i18n="$function.explosion_decay"></option>
<option value="minecraft:fill_player_head" data-i18n="$function.fill_player_head"></option>
<option value="minecraft:copy_name" data-i18n="$function.copy_name"></option>
<option value="minecraft:copy_nbt" data-i18n="$function.copy_nbt"></option>
<option value="minecraft:apply_bonus" data-i18n="$function.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" data-i18n="count">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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)" data-i18n="$range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onfocus="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" data-i18n="$function.$damage.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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)" data-i18n="$range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="0" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onfocus="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" data-i18n="nbt"></span>
</div>
<textarea type="text" class="form-control code" onchange="updateField(this)" onfocus="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" data-i18n="$function.$ench_rand.ench"></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)" data-i18n="$enchantment.aqua_affinity"></a>
<a class="dropdown-item" data-ench="minecraft:bane_of_arthropods" onclick="addEnchantment(this)" data-i18n="$enchantment.bane_of_arthropods"></a>
<a class="dropdown-item" data-ench="minecraft:blast_protection" onclick="addEnchantment(this)" data-i18n="$enchantment.blast_protection"></a>
<a class="dropdown-item" data-ench="minecraft:channeling" onclick="addEnchantment(this)" data-i18n="$enchantment.channeling"></a>
<a class="dropdown-item" data-ench="minecraft:binding_curse" onclick="addEnchantment(this)" data-i18n="$enchantment.binding_curse"></a>
<a class="dropdown-item" data-ench="minecraft:vanishing_curse" onclick="addEnchantment(this)" data-i18n="$enchantment.vanishing_curse"></a>
<a class="dropdown-item" data-ench="minecraft:depth_strider" onclick="addEnchantment(this)" data-i18n="$enchantment.depth_strider"></a>
<a class="dropdown-item" data-ench="minecraft:efficiency" onclick="addEnchantment(this)" data-i18n="$enchantment.efficiency"></a>
<a class="dropdown-item" data-ench="minecraft:feather_falling" onclick="addEnchantment(this)" data-i18n="$enchantment.feather_falling"></a>
<a class="dropdown-item" data-ench="minecraft:fire_aspect" onclick="addEnchantment(this)" data-i18n="$enchantment.fire_aspect"></a>
<a class="dropdown-item" data-ench="minecraft:fire_protection" onclick="addEnchantment(this)" data-i18n="$enchantment.fire_protection"></a>
<a class="dropdown-item" data-ench="minecraft:flame" onclick="addEnchantment(this)" data-i18n="$enchantment.flame"></a>
<a class="dropdown-item" data-ench="minecraft:fortune" onclick="addEnchantment(this)" data-i18n="$enchantment.fortune"></a>
<a class="dropdown-item" data-ench="minecraft:frost_walker" onclick="addEnchantment(this)" data-i18n="$enchantment.frost_walker"></a>
<a class="dropdown-item" data-ench="minecraft:impaling" onclick="addEnchantment(this)" data-i18n="$enchantment.impaling"></a>
<a class="dropdown-item" data-ench="minecraft:infinity" onclick="addEnchantment(this)" data-i18n="$enchantment.infinity"></a>
<a class="dropdown-item" data-ench="minecraft:knockback" onclick="addEnchantment(this)" data-i18n="$enchantment.knockback"></a>
<a class="dropdown-item" data-ench="minecraft:looting" onclick="addEnchantment(this)" data-i18n="$enchantment.looting"></a>
<a class="dropdown-item" data-ench="minecraft:loyalty" onclick="addEnchantment(this)" data-i18n="$enchantment.loyalty"></a>
<a class="dropdown-item" data-ench="minecraft:luck_of_the_sea" onclick="addEnchantment(this)" data-i18n="$enchantment.luck_of_the_sea"></a>
<a class="dropdown-item" data-ench="minecraft:lure" onclick="addEnchantment(this)" data-i18n="$enchantment.lure"></a>
<a class="dropdown-item" data-ench="minecraft:mending" onclick="addEnchantment(this)" data-i18n="$enchantment.mending"></a>
<a class="dropdown-item" data-ench="minecraft:multishot" onclick="addEnchantment(this)" data-i18n="$enchantment.multishot"></a>
<a class="dropdown-item" data-ench="minecraft:piercing" onclick="addEnchantment(this)" data-i18n="$enchantment.piercing"></a>
<a class="dropdown-item" data-ench="minecraft:power" onclick="addEnchantment(this)" data-i18n="$enchantment.power"></a>
<a class="dropdown-item" data-ench="minecraft:projectile_protection" onclick="addEnchantment(this)" data-i18n="$enchantment.projectile_protection"></a>
<a class="dropdown-item" data-ench="minecraft:protection" onclick="addEnchantment(this)" data-i18n="$enchantment.protection"></a>
<a class="dropdown-item" data-ench="minecraft:punch" onclick="addEnchantment(this)" data-i18n="$enchantment.punch"></a>
<a class="dropdown-item" data-ench="minecraft:quick_charge" onclick="addEnchantment(this)" data-i18n="$enchantment.quick_charge"></a>
<a class="dropdown-item" data-ench="minecraft:respiration" onclick="addEnchantment(this)" data-i18n="$enchantment.respiration"></a>
<a class="dropdown-item" data-ench="minecraft:riptide" onclick="addEnchantment(this)" data-i18n="$enchantment.riptide"></a>
<a class="dropdown-item" data-ench="minecraft:sharpness" onclick="addEnchantment(this)" data-i18n="$enchantment.sharpness"></a>
<a class="dropdown-item" data-ench="minecraft:silk_touch" onclick="addEnchantment(this)" data-i18n="$enchantment.silk_touch"></a>
<a class="dropdown-item" data-ench="minecraft:smite" onclick="addEnchantment(this)" data-i18n="$enchantment.smite"></a>
<a class="dropdown-item" data-ench="minecraft:sweeping" onclick="addEnchantment(this)" data-i18n="$enchantment.sweeping"></a>
<a class="dropdown-item" data-ench="minecraft:thorns" onclick="addEnchantment(this)" data-i18n="$enchantment.thorns"></a>
<a class="dropdown-item" data-ench="minecraft:unbreaking" onclick="addEnchantment(this)" data-i18n="$enchantment.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" data-i18n="level_plural"></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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)" data-i18n="$range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.$binomial.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onfocus="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" data-i18n="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" data-i18n="$function.$limit.limit"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="this.select()">
</div>
<div class="input-group mt-3 function-attributes d-none">
<button type="button" class="btn btn-dark" onclick="addModifier(this)" data-i18n="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" data-i18n="source"></span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="block_entity" data-i18n="$source.block_entity"></option>
<option value="this" data-i18n="$source.this"></option>
<option value="killer" data-i18n="$source.killer"></option>
<option value="killer_player" data-i18n="$source.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" data-i18n="$function.$name.name"></span>
</div>
<textarea type="text" class="form-control code" onchange="updateField(this)" onfocus="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" data-i18n="$function.$limit.limit"></span>
</div>
<span class="input-group-text rounded-0 range" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
</div>
<div class="input-group mt-3 function-entries d-none">
<button type="button" class="btn btn-light" onclick="addEntry(this)" data-i18n="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" data-i18n="$function.$lore_replace.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" data-i18n="$function.$entity.entity"></span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="this" data-i18n="$source.this"></option>
<option value="killer" data-i18n="$source.killer"></option>
<option value="killer_player" data-i18n="$source.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)" data-i18n="$function.$operations.add_op"></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" data-i18n="enchantment"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="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" data-i18n="$function.$formula.formula"></span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="minecraft:uniform_bonus_count" data-i18n="$function.$formula.uniform_bonus_count"></option>
<option value="minecraft:binomial_with_bonus_count" data-i18n="$function.$formula.binomial_with_bonus_count"></option>
<option value="minecraft:ore_drops" data-i18n="$function.$formula.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" data-i18n="$function.$bonus_multiplier.multiplier"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'parameters.bonusMultiplier')" onfocus="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" data-i18n="$function.$bonus_extra.extra"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'parameters.extra')" onfocus="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" data-i18n="$function.$bonus_probability.probability"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this, 'parameters.probability')" onfocus="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)" data-i18n="remove_modifier"></button>
<div class="input-group" data-type="enum" data-field="attribute">
<div class="input-group-prepend">
<span class="input-group-text" data-i18n="$modifier.attribute"></span>
</div>
<select class="form-control modifier-attribute" onchange="updateField(this)">
<option value="generic.maxHealth" data-i18n="$modifier.generic_maxHealth"></option>
<option value="generic.followRange" data-i18n="$modifier.generic_followRange"></option>
<option value="generic.knockbackResistance" data-i18n="$modifier.generic_knockbackResistance"></option>
<option value="generic.movementSpeed" data-i18n="$modifier.generic_movementSpeed"></option>
<option value="generic.attackDamage" data-i18n="$modifier.generic_attackDamage"></option>
<option value="generic.armor" data-i18n="$modifier.generic_armor"></option>
<option value="generic.armorToughness" data-i18n="$modifier.generic_armorToughness"></option>
<option value="generic.attackSpeed" data-i18n="$modifier.generic_attackSpeed"></option>
<option value="generic.luck" data-i18n="$modifier.generic_luck"></option>
<option value="horse.jumpStrength" data-i18n="$modifier.horse_jumpStrength"></option>
<option value="generic.attackKnockback" data-i18n="$modifier.generic_attackKnockback"></option>
<option value="generic.flyingSpeed" data-i18n="$modifier.generic_flyingSpeed"></option>
<option value="zombie.spawnReinforcements" data-i18n="$modifier.zombie_spawnReinforcements"></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" data-i18n="$modifier.name"></span>
</div>
<input type="text" class="form-control modifier-name" onchange="updateField(this)" onfocus="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" data-i18n="$modifier.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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
<a class="dropdown-item" value="binomial" onclick="updateRangeType(this)" data-i18n="$range.binomial"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.binimial.n"></span>
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 binomial d-none" data-i18n="$range.binimial.p"></span>
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateField(this)" onfocus="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" data-i18n="$modifier.operation"></span>
</div>
<select class="form-control modifier-operation" onchange="updateField(this)">
<option value="addition" data-i18n="$modifier.$operation.addition"></option>
<option value="multiply_base" data-i18n="$modifier.$operation.multiply_base"></option>
<option value="multiply_total" data-i18n="$modifier.$operation.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" data-i18n="$modifier.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)" data-i18n="$slot.mainhand"></a>
<a class="dropdown-item" data-slot="offhand" onclick="addModifierSlot(this)" data-i18n="$slot.offhand"></a>
<a class="dropdown-item" data-slot="head" onclick="addModifierSlot(this)" data-i18n="$slot.head"></a>
<a class="dropdown-item" data-slot="chest" onclick="addModifierSlot(this)" data-i18n="$slot.chest"></a>
<a class="dropdown-item" data-slot="legs" onclick="addModifierSlot(this)" data-i18n="$slot.legs"></a>
<a class="dropdown-item" data-slot="feet" onclick="addModifierSlot(this)" data-i18n="$slot.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)" data-i18n="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" data-i18n="$operation.source"></span>
</div>
<input type="text" class="form-control code operation-source" onchange="updateField(this)" onfocus="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" data-i18n="$operation.target"></span>
</div>
<input type="text" class="form-control code operation-target" onchange="updateField(this)" onfocus="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" data-i18n="$operation.operation"></span>
</div>
<select class="form-control operation-type" onchange="updateField(this)">
<option value="replace" data-i18n="$operation.$operation.replace"></option>
<option value="append" data-i18n="$operation.$operation.append"></option>
<option value="merge" data-i18n="$operation.$operation.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)" data-i18n="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" data-i18n="condition"></span>
</div>
<select class="form-control condition-type" onchange="updateField(this)">
<option value="minecraft:alternative" data-i18n="$condition.alternative"></option>
<option value="minecraft:inverted" data-i18n="$condition.inverted"></option>
<option value="minecraft:entity_properties" data-i18n="$condition.entity_properties"></option>
<option value="minecraft:block_state_propery" data-i18n="$condition.block_state_propery"></option>
<option value="minecraft:match_tool" data-i18n="$condition.match_tool"></option>
<option value="minecraft:damage_source_properties" data-i18n="$condition.damage_source_properties"></option>
<option value="minecraft:location_check" data-i18n="$condition.location_check"></option>
<option value="minecraft:weather_check" data-i18n="$condition.weather_check"></option>
<option value="minecraft:entity_scores" data-i18n="$condition.entity_scores"></option>
<option value="minecraft:random_chance" data-i18n="$condition.random_chance"></option>
<option value="minecraft:random_chance_with_looting" data-i18n="$condition.random_chance_with_looting"></option>
<option value="minecraft:table_bonus" data-i18n="$condition.table_bonus"></option>
<option value="minecraft:killed_by_player" data-i18n="$condition.killed_by_player"></option>
<option value="minecraft:survives_explosion" data-i18n="$condition.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" data-i18n="chance"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="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" data-i18n="looting_multiplier"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="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" data-i18n="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" data-i18n="entity"></span>
</div>
<select class="form-control" onchange="updateField(this)">
<option value="this" data-i18n="$source.this"></option>
<option value="killer" data-i18n="$source.killer"></option>
<option value="killer_player" data-i18n="$source.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" data-i18n="objective"></label>
</div>
<input type="text" class="form-control">
<div class="input-group-append">
<button class="btn btn-dark" type="button" onclick="addScore(this)" data-i18n="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)" data-i18n="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" data-i18n="block"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="this.select()">
</div>
<div class="input-group mt-3 condition-block-properties d-none">
<div class="input-group-prepend">
<label class="input-group-text" data-i18n="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)" data-i18n="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" data-i18n="raining"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)" data-i18n="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" data-i18n="thundering"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)" data-i18n="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" data-i18n="enchantment"></span>
</div>
<input type="text" class="form-control" onchange="updateField(this)" onfocus="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" data-i18n="chance_plural"></span>
</div>
<input type="text" class="form-control code" onchange="updateChancesField(this)" onfocus="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')" data-i18n="$range.exact"></a>
<a class="dropdown-item" onclick="updateScoreType(this, 'range')" data-i18n="$range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateScoreField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateScoreField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateScoreField(this)" onfocus="this.select()">
<div class="input-group-append">
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeScore(this)" data-i18n="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)" onfocus="this.select()">
<div class="input-group-append">
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeBlockProperty(this)" data-i18n="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)" data-i18n="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" data-i18n="x"></span>
</div>
<span class="input-group-text rounded-0" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max" onchange="updateField(this)" onfocus="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" data-i18n="y">Y</span>
</div>
<span class="input-group-text rounded-0" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min" onchange="updateField(this, 'position.y.min')" onfocus="this.select()">
<span class="input-group-text rounded-0" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max" onchange="updateField(this, 'position.y.max')" onfocus="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" data-i18n="z">Z</span>
</div>
<span class="input-group-text rounded-0" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min" onchange="updateField(this, 'position.z.min')" onfocus="this.select()">
<span class="input-group-text rounded-0" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max" onchange="updateField(this, 'position.z.max')" onfocus="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" data-i18n="biome"></span>
</div>
<input type="text" class="form-control biome" onchange="updateField(this)" onfocus="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" data-i18n="feature"></span>
</div>
<input type="text" class="form-control feature" onchange="updateField(this)" onfocus="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" data-i18n="dimension"></span>
</div>
<select class="form-control dimension" onchange="updateField(this)">
<option value="" data-i18n="unset"></option>
<option value="minecraft:overworld" data-i18n="$dimension.overworld"></option>
<option value="minecraft:the_nether" data-i18n="$dimension.the_nether"></option>
<option value="minecraft:the_end" data-i18n="$dimension.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" data-i18n="type"></span>
</div>
<input type="text" class="form-control type" onchange="updateField(this)" onfocus="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" data-i18n="nbt"></span>
</div>
<textarea type="text" class="form-control nbt code" onchange="updateField(this)" onfocus="this.select()"></textarea>
</div>
<button class="btn btn-light mt-3 dropdown-toggle" type="button" onclick="toggleEntityLocation(this)" data-i18n="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" data-i18n="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, 'item')" data-i18n="name"></a>
<a class="dropdown-item" onclick="updateItemType(this, 'tag')" data-i18n="tag"></a>
</div>
</div>
<span class="input-group-text rounded-0 item d-none" data-i18n="name"></span>
<input type="text" class="form-control item d-none" onchange="updateItemField(this, 'item')" onfocus="this.select()">
<span class="input-group-text rounded-0 tag d-none" data-i18n="tag"></span>
<input type="text" class="form-control tag d-none" onchange="updateItemField(this, 'tag')" onfocus="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" data-i18n="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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onfocus="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" data-i18n="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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onfocus="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" data-i18n="potion"></span>
</div>
<input type="text" class="form-control potion" onchange="updateField(this)" onfocus="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" data-i18n="nbt"></span>
</div>
<textarea type="text" class="form-control nbt code" onchange="updateField(this)" onfocus="this.select()"></textarea>
</div>
<div class="input-group mt-3">
<button class="btn btn-dark" type="button" onclick="addConditionEnchantment(this)" data-i18n="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)" data-i18n="$damage.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" data-i18n="$damage.projectile"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_projectile')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_projectile')" data-i18n="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" data-i18n="$damage.explosion"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_explosion')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_explosion')" data-i18n="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" data-i18n="$damage.fire"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_fire')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_fire')" data-i18n="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" data-i18n="$damage.magic"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.is_magic')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.is_magic')" data-i18n="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" data-i18n="$damage.lightning"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)" data-i18n="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" data-i18n="$damage.starvation"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.bypasses_magic')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.bypasses_magic')" data-i18n="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" data-i18n="$damage.void"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this, 'type.bypasses_invulnerability')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.bypasses_invulnerability')" data-i18n="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" data-i18n="$damage.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')" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this, 'type.bypasses_armor')" data-i18n="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" data-i18n="$damage.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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onfocus="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" data-i18n="$damage.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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none" value="2" onchange="updateField(this)" onfocus="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" data-i18n="$damage.blocked"></span>
</div>
<div class="btn-group">
<button type="button" value="false" class="btn btn-secondary rounded-0" onclick="updateField(this)" data-i18n="false"></button>
<button type="button" value="true" class="btn btn-secondary" onclick="updateField(this)" data-i18n="true"></button>
</div>
</div>
<button class="btn btn-light dropdown-toggle mt-3" type="button" data-shows="false" onclick="toggleSourceEntity(this)" data-i18n="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)" data-i18n="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)" data-i18n="remove_enchantment"></button>
<div class="input-group" data-type="enum" data-field="enchantment">
<div class="input-group-prepend">
<span class="input-group-text" data-i18n="enchantment"></span>
</div>
<select class="form-control enchantment-id" onchange="updateField(this)">
<option value="minecraft:aqua_affinity" data-i18n="$enchantment.aqua_affinity"></option>
<option value="minecraft:bane_of_arthropods" data-i18n="$enchantment.bane_of_arthropods"></option>
<option value="minecraft:blast_protection" data-i18n="$enchantment.blast_protection"></option>
<option value="minecraft:channeling" data-i18n="$enchantment.channeling"></option>
<option value="minecraft:binding_curse" data-i18n="$enchantment.binding_curse"></option>
<option value="minecraft:vanishing_curse" data-i18n="$enchantment.vanishing_curse"></option>
<option value="minecraft:depth_strider" data-i18n="$enchantment.depth_strider"></option>
<option value="minecraft:efficiency" data-i18n="$enchantment.efficiency"></option>
<option value="minecraft:feather_falling" data-i18n="$enchantment.feather_falling"></option>
<option value="minecraft:fire_aspect" data-i18n="$enchantment.fire_aspect"></option>
<option value="minecraft:fire_protection" data-i18n="$enchantment.fire_protection"></option>
<option value="minecraft:flame" data-i18n="$enchantment.flame"></option>
<option value="minecraft:fortune" data-i18n="$enchantment.fortune"></option>
<option value="minecraft:frost_walker" data-i18n="$enchantment.frost_walker"></option>
<option value="minecraft:impaling" data-i18n="$enchantment.impaling"></option>
<option value="minecraft:infinity" data-i18n="$enchantment.infinity"></option>
<option value="minecraft:knockback" data-i18n="$enchantment.knockback"></option>
<option value="minecraft:looting" data-i18n="$enchantment.looting"></option>
<option value="minecraft:loyalty" data-i18n="$enchantment.loyalty"></option>
<option value="minecraft:luck_of_the_sea" data-i18n="$enchantment.luck_of_the_sea"></option>
<option value="minecraft:lure" data-i18n="$enchantment.lure"></option>
<option value="minecraft:mending" data-i18n="$enchantment.mending"></option>
<option value="minecraft:multishot" data-i18n="$enchantment.multishot"></option>
<option value="minecraft:piercing" data-i18n="$enchantment.piercing"></option>
<option value="minecraft:power" data-i18n="$enchantment.power"></option>
<option value="minecraft:projectile_protection" data-i18n="$enchantment.projectile_protection"></option>
<option value="minecraft:protection" data-i18n="$enchantment.protection"></option>
<option value="minecraft:punch" data-i18n="$enchantment.punch"></option>
<option value="minecraft:quick_charge" data-i18n="$enchantment.quick_charge"></option>
<option value="minecraft:respiration" data-i18n="$enchantment.respiration"></option>
<option value="minecraft:riptide" data-i18n="$enchantment.riptide"></option>
<option value="minecraft:sharpness" data-i18n="$enchantment.sharpness"></option>
<option value="minecraft:silk_touch" data-i18n="$enchantment.silk_touch"></option>
<option value="minecraft:smite" data-i18n="$enchantment.smite"></option>
<option value="minecraft:sweeping" data-i18n="$enchantment.sweeping"></option>
<option value="minecraft:thorns" data-i18n="$enchantment.thorns"></option>
<option value="minecraft:unbreaking" data-i18n="$enchantment.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" data-i18n="level_plural"></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)" data-i18n="$range.exact"></a>
<a class="dropdown-item" value="range" onclick="updateRangeType(this)" data-i18n="$range.range"></a>
</div>
</div>
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.min"></span>
<input type="text" class="form-control range min d-none" value="1" onchange="updateField(this)" onfocus="this.select()">
<span class="input-group-text rounded-0 range d-none" data-i18n="$range.$range.max"></span>
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateField(this)" onfocus="this.select()">
</div>
</div>
</div-->
</div>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>

View File

@@ -346,62 +346,6 @@ function getBooleanValue(oldvalue, newvalue) {
}
}
function addScore(el) {
let condition = getParent(el);
let objective = $(el).closest('.condition-entity-scores').find('input').val();
if (!objective.length) {
return;
}
if (!condition.scores) {
condition.scores = {};
}
condition.scores[objective] = 1;
invalidated();
}
function removeScore(el) {
let objective = $(el).closest('.score').attr('data-objective');
delete getParent(el).scores[objective];
invalidated();
}
function updateScoreType(el, type) {
let objective = $(el).closest('.score').attr('data-objective');
if (type === 'range') {
getParent(el).scores[objective] = {};
} else if (type === 'binomial') {
getParent(el).scores[objective] = {type: "minecraft:binomial"};
} else {
getParent(el).scores[objective] = 0;
}
updateScoreField(el);
}
function updateScoreField(el) {
let parent = getParent(el);
let objective = $(el).closest('.score').attr('data-objective');
let data = parent.scores[objective];
let $range = $(el).closest('[data-type="range"]');
if (typeof data === 'object') {
let min = $range.find('.range.min').val();
let max = $range.find('.range.max').val();
if (min) {
data.min = parseInt(min);
} else {
delete data.min;
}
if (max) {
data.max = parseInt(max);
} else {
delete data.max;
}
} else {
data = parseInt($range.find('.exact').val());
}
parent.scores[objective] = data;
invalidated();
}
function parseJSONValue(value) {
if (value.startsWith('"') || value.startsWith('{') || value.startsWith('[')) {
try {
@@ -412,41 +356,3 @@ function parseJSONValue(value) {
}
return value;
}
function addBlockProperty(el) {
let func = getParent(el);
let blockstate = $(el).closest('.condition-block-properties').find('input').val();
if (!func.properties) {
func.properties = {};
}
func.properties[blockstate] = '';
invalidated();
}
function removeBlockProperty(el) {
let blockstate = $(el).closest('.block-property').attr('data-blockstate');
delete getParent(el).properties[blockstate];
invalidated();
}
function updateBlockPropertyField(el) {
let blockstate = $(el).closest('.block-property').attr('data-blockstate');
getParent(el).properties[blockstate] = $(el).val();
invalidated();
}
function updateChancesField(el) {
let parent = getParent(el);
let chances = '[' + $(el).val() + ']';
try {
parent.chances = JSON.parse(chances);
for (let i = 0; i < parent.chances.length; i += 1) {
if (parent.chances[i] > 1) {
parent.chances[i] = 1;
}
}
} catch(e) {
parent.chances = [];
}
invalidated();
}

787
view.js
View File

@@ -372,790 +372,3 @@ function preventNewline(e) {
e.preventDefault();
}
}
/*
function generatePool(pool, i) {
let $pool = $('#poolTemplate').clone();
$pool.removeAttr('id').attr('data-index', i);
if (!pool.rolls) {
pool.rolls = 1;
}
let $rolls = $pool.find('.rolls');
generateRange($rolls, pool.rolls);
let $bonus_rolls = $pool.find('.bonus-rolls');
if (pool.bonus_rolls) {
luck_based = true;
generateRange($bonus_rolls, pool.bonus_rolls);
} else {
$bonus_rolls.find('.exact').removeClass('d-none');
}
if (!luck_based) {
$pool.find('.bonus-rolls').addClass('d-none');
}
if (pool.entries) {
for (let j = 0; j < pool.entries.length; j += 1) {
let $entry = generateEntry(pool.entries[j], j, pool.entries.length);
$pool.children('.card-body').append($entry);
}
}
if (pool.conditions) {
for (let j = 0; j < pool.conditions.length; j += 1) {
let $condition = generateCondition(pool.conditions[j], j);
$pool.children('.card-body').append($condition);
}
}
return $pool;
}
function generateEntry(entry, i, size) {
let $entry = $('#entryTemplate').clone();
$entry.removeAttr('id').attr('data-index', i);
$entry.find('.entry-type').val(entry.type);
if (entry.type === 'minecraft:item' || entry.type === 'minecraft:tag' || entry.type === 'minecraft:loot_table' || entry.type === 'minecraft:dynamic') {
$entry.find('.entry-name').removeClass('d-none');
if (entry.type === 'minecraft:dynamic') {
entry.name = 'minecraft:contents';
}
$entry.find('.entry-name input').val(entry.name);
}
if (size > 1) {
$entry.find('.entry-weight').removeClass('d-none');
}
if (luck_based) {
$entry.find('.entry-quality').removeClass('d-none');
} else {
$entry.find('.entry-quality').addClass('d-none');
}
if (entry.weight ) {
$entry.find('.entry-weight input').val(entry.weight);
}
if (entry.quality) {
luck_based = true;
$entry.find('.entry-quality input').val(entry.quality);
}
if (entry.type === 'minecraft:alternatives' || entry.type === 'minecraft:sequence' || entry.type === 'minecraft:group') {
delete entry.name;
$entry.find('.entry-children').removeClass('d-none');
}
if (entry.children) {
for (let j = 0; j < entry.children.length; j += 1) {
let $child = generateEntry(entry.children[j], j, entry.children.length);
$child.attr('data-field', 'children[]');
$entry.children('.card-body').append($child);
}
}
if (entry.functions) {
for (let j = 0; j < entry.functions.length; j += 1) {
let $function = generateFunction(entry.functions[j], j);
$entry.children('.card-body').append($function);
}
}
if (entry.conditions) {
for (let j = 0; j < entry.conditions.length; j += 1) {
let $condition = generateCondition(entry.conditions[j], j);
$entry.children('.card-body').append($condition);
}
}
return $entry;
}
function generateFunction(func, i) {
let $function = $('#functionTemplate').clone();
$function.removeAttr('id').attr('data-index', i);
$function.find('.function-type').val(func.function);
if (func.function === 'minecraft:set_count' || func.function === 'minecraft:looting_enchant') {
$function.find('.function-count').removeClass('d-none');
generateRange($function.find('.function-count'), func.count);
} else {
delete func.count;
}
if (func.function === 'minecraft:set_damage') {
$function.find('.function-damage').removeClass('d-none');
generateRange($function.find('.function-damage'), func.damage);
} else {
delete func.damage;
}
if (func.function === 'minecraft:set_nbt') {
if (func.tag) {
if (!func.tag.startsWith('{')) {
func.tag = '{' + func.tag;
}
if (!func.tag.endsWith('}')) {
func.tag = func.tag + '}';
}
}
$function.find('.function-nbt').removeClass('d-none');
$function.find('.function-nbt textarea').val(func.tag).keydown(e => preventNewline(e));
} else {
delete func.tag;
}
if (func.function === 'minecraft:enchant_randomly') {
$function.find('.function-ench-rand').removeClass('d-none');
if (func.enchantments) {
for (let e of func.enchantments) {
let item = $function.find('.dropdown-item[data-ench="' + e + '"]');
item.addClass('d-none');
let html = '<button type="button" class="btn btn-outline-danger bg-light btn-sm mr-2 mt-2" data-ench="' + e + '" onclick="removeEnchantment(this)">' + item.text() + '</button>';
$function.find('.enchantment-list').append(html);
}
}
} else {
delete func.enchantments;
}
if (func.function === 'minecraft:enchant_with_levels') {
$function.find('.function-ench-levels').removeClass('d-none');
generateRange($function.find('.function-ench-levels'), func.levels);
$function.find('.function-ench-treasure').removeClass('d-none');
let treasure = false;
if (func.treasure) {
treasure = true;
} else {
delete func.treasure;
}
let id = 'treasureCheckbox' + Math.floor(1000000*Math.random());
$function.find('.function-ench-treasure label').attr('for', id);
$function.find('.function-ench-treasure input').prop('checked', treasure).attr('id', id);
} else {
delete func.levels;
delete func.treasure;
}
if (func.function === 'minecraft:looting_enchant' || func.function === 'minecraft:limit_count') {
if (func.function === 'minecraft:looting_enchant') {
$function.find('.function-limit').removeClass('d-none');
$function.find('.function-limit input').val(func.limit);
} else {
$function.find('.function-limit-range').removeClass('d-none');
generateRange($function.find('.function-limit-range'), func.limit);
}
} else {
delete func.limit;
}
if (func.function === 'minecraft:set_attributes') {
$function.find('.function-attributes').removeClass('d-none');
if (func.modifiers) {
for (let j = 0; j < func.modifiers.length; j += 1) {
let $modifier = generateModifier(func.modifiers[j], j);
$function.children('.card-body').append($modifier);
}
}
} else {
delete func.modifiers;
}
if (func.function === 'minecraft:set_name') {
$function.find('.function-name').removeClass('d-none');
let value = func.name;
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
$function.find('.function-name textarea').val(value).keydown(e => preventNewline(e));
} else {
delete func.name;
}
if (func.function === 'minecraft:set_lore') {
let lore = "";
if (func.lore) {
for (let j = 0; j < func.lore.length; j += 1) {
let value = func.lore[j];
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
lore += value;
if (j < func.lore.length - 1) {
lore += "\n";
}
}
}
$function.find('.function-lore').removeClass('d-none');
$function.find('.function-lore textarea').val(lore);
if(!func.replace) {
delete func.replace;
}
$function.find('.function-lore-replace').removeClass('d-none');
$function.find('.function-lore-replace input').prop('checked', func.replace);
} else {
delete func.lore;
delete func.replace;
}
if (func.function === 'minecraft:copy_name' || func.function === 'minecraft:copy_nbt') {
if (func.function === 'minecraft:copy_name') {
func.source = 'block_entity';
}
if (!func.source) {
func.source = 'this';
}
$function.find('.function-source').removeClass('d-none');
$function.find('.function-source select').val(func.source);
} else {
delete func.source;
}
if (func.function === 'minecraft:set_name' || func.function === 'minecraft:fill_player_head') {
if (!func.entity) {
func.entity = 'this';
}
$function.find('.function-entity').removeClass('d-none');
$function.find('.function-entity select').val(func.entity);
} else {
delete func.entity;
}
if (func.function === 'minecraft:set_contents') {
$function.find('.function-entries').removeClass('d-none');
} else {
delete func.entries;
}
if (func.function === 'minecraft:copy_nbt') {
$function.find('.function-operations').removeClass('d-none');
} else {
delete func.ops;
}
if (func.function === 'minecraft:apply_bonus') {
$function.find('.function-enchantment').removeClass('d-none');
$function.find('.function-enchantment input').val(func.enchantment);
} else {
delete func.enchantment;
}
if (func.function === 'minecraft:apply_bonus') {
if (!func.formula) {
func.formula = 'minecraft:uniform_bonus_count';
}
$function.find('.function-formula').removeClass('d-none');
$function.find('.function-formula select').val(func.formula);
if (!func.parameters){
func.parameters = {};
}
if (func.formula === 'minecraft:uniform_bonus_count') {
if (!func.parameters.bonusMultiplier) {
func.parameters.bonusMultiplier = 1;
}
delete func.parameters.extra;
delete func.parameters.probability;
$function.find('.function-bonus-multiplier').removeClass('d-none');
$function.find('.function-bonus-multiplier input').val(func.parameters.bonusMultiplier);
} else if (func.formula === 'minecraft:binomial_with_bonus_count') {
if (!func.parameters.extra) {
func.parameters.extra = 0;
}
if (!func.parameters.probability) {
func.parameters.probability = 0.5;
}
delete func.parameters.multiplier;
$function.find('.function-bonus-extra').removeClass('d-none');
$function.find('.function-bonus-extra input').val(func.parameters.extra);
$function.find('.function-bonus-probability').removeClass('d-none');
$function.find('.function-bonus-probability input').val(func.parameters.probability);
} else {
delete func.parameters;
}
} else {
delete func.formula;
}
if (func.ops) {
for (let j = 0; j < func.ops.length; j += 1) {
let $operation = generateOperation(func.ops[j], j);
$function.children('.card-body').append($operation);
}
}
if (func.entries) {
for (let j = 0; j < func.entries.length; j += 1) {
let $entry = generateEntry(func.entries[j], j, func.entries.length);
$function.children('.card-body').append($entry);
}
}
if (func.conditions) {
for (let j = 0; j < func.conditions.length; j += 1) {
let $condition = generateCondition(func.conditions[j], j);
$function.children('.card-body').append($condition);
}
}
return $function;
}
function generateModifier(modifier, i) {
let $modifier = $('#modifierTemplate').clone();
$modifier.removeAttr('id').attr('data-index', i);
$modifier.find('.modifier-attribute').val(modifier.attribute);
$modifier.find('.modifier-name').val(modifier.name);
generateRange($modifier.find('.modifier-amount'), modifier.amount);
$modifier.find('.modifier-operation').val(modifier.operation);
if (modifier.slot) {
for (let s of modifier.slot) {
let item = $modifier.find('.dropdown-item[data-slot="' + s + '"]');
item.addClass('d-none');
let html = '<button type="button" class="btn btn-outline-danger bg-light btn-sm mr-2 mt-2" data-slot="' + s + '" onclick="removeModifierSlot(this)">' + item.text() + '</button>';
$modifier.find('.modifier-slots-list').append(html);
}
}
return $modifier
}
function generateOperation(operation, i) {
let $operation = $('#operationTemplate').clone();
$operation.removeAttr('id').attr('data-index', i);
$operation.find('.operation-source').val(operation.source);
$operation.find('.operation-target').val(operation.target);
$operation.find('.operation-type').val(operation.op);
return $operation
}
function generateCondition(condition, i) {
let $condition = $('#conditionTemplate').clone();
$condition.removeAttr('id').attr('data-index', i);
$condition.find('.condition-type').val(condition.condition);
if (table.type === 'minecraft:generic') {
$condition.find('option[value="minecraft:block_state_propery"]').addClass('d-none');
$condition.find('option[value="minecraft:match_tool"]').addClass('d-none');
$condition.find('option[value="minecraft:damage_source_properties"]').addClass('d-none');
$condition.find('option[value="minecraft:survives_explosion"]').addClass('d-none');
$condition.find('option[value="minecraft:table_bonus"]').addClass('d-none');
} else if (table.type === 'minecraft:block') {
$condition.find('option[value="minecraft:damage_source_properties"]').addClass('d-none');
} else if (table.type === 'minecraft:fishing') {
$condition.find('option[value="minecraft:block_state_propery"]').addClass('d-none');
$condition.find('option[value="minecraft:damage_source_properties"]').addClass('d-none');
$condition.find('option[value="minecraft:survives_explosion"]').addClass('d-none');
$condition.find('option[value="minecraft:table_bonus"]').addClass('d-none');
} else if (table.type === 'minecraft:entity') {
$condition.find('option[value="minecraft:block_state_propery"]').addClass('d-none');
$condition.find('option[value="minecraft:survives_explosion"]').addClass('d-none');
$condition.find('option[value="minecraft:table_bonus"]').addClass('d-none');
$condition.find('option[value="minecraft:match_tool"]').addClass('d-none');
} else if (table.type === 'minecraft:chest') {
$condition.find('option[value="minecraft:block_state_propery"]').addClass('d-none');
$condition.find('option[value="minecraft:damage_source_properties"]').addClass('d-none');
$condition.find('option[value="minecraft:survives_explosion"]').addClass('d-none');
$condition.find('option[value="minecraft:table_bonus"]').addClass('d-none');
$condition.find('option[value="minecraft:match_tool"]').addClass('d-none');
}
if (condition.condition === 'minecraft:random_chance' || condition.condition === 'minecraft:random_chance_with_looting') {
$condition.find('.condition-chance').removeClass('d-none');
$condition.find('.condition-chance input').val(condition.chance);
} else {
delete condition.chance;
}
if (condition.condition === 'minecraft:random_chance_with_looting') {
$condition.find('.condition-looting-multiplier').removeClass('d-none');
$condition.find('.condition-looting-multiplier input').val(condition.looting_multiplier);
} else {
delete condition.looting_multiplier;
}
if (condition.condition === 'minecraft:killed_by_player') {
$condition.find('.condition-killed-inverted').removeClass('d-none');
let inverted = false;
if (condition.inverted) {
inverted = true;
} else {
delete condition.inverted;
}
let id = 'invertedCheckbox' + Math.floor(1000000*Math.random());
$condition.find('.condition-killed-inverted').attr('for', id);
$condition.find('.condition-killed-inverted label').attr('for', id);
$condition.find('.condition-killed-inverted input').prop('checked', inverted).attr('id', id);
} else {
delete condition.inverted;
}
if (condition.condition === 'minecraft:entity_properties' || condition.condition === 'minecraft:entity_scores') {
if (!condition.entity) {
condition.entity = 'this';
}
$condition.find('.condition-entity').removeClass('d-none');
$condition.find('.condition-entity select').val(condition.entity);
} else {
delete condition.entity;
}
if (condition.condition === 'minecraft:block_state_propery') {
$condition.find('.condition-block').removeClass('d-none');
$condition.find('.condition-block input').val(condition.block);
$condition.find('.condition-block-properties').removeClass('d-none');
} else {
delete condition.block;
delete condition.properties;
}
if (condition.condition === 'minecraft:entity_properties' || condition.condition === 'minecraft:location_check' || condition.condition === 'minecraft:match_tool' || condition.condition === 'minecraft:damage_source_properties') {
if(!condition.predicate) {
condition.predicate = {};
}
if (condition.condition === 'minecraft:entity_properties') {
let $entity = generateEntity(condition.predicate);
$condition.children('.card-body').append($entity);
} else {
delete condition.predicate.entity;
delete condition.predicate.location;
}
if (condition.condition === 'minecraft:location_check') {
let $location = generateLocation(condition.predicate);
$condition.children('.card-body').append($location);
if (condition.predicate) {
delete condition.nbt;
}
} else {
if (condition.predicate) {
delete condition.predicate.biome;
delete condition.predicate.feature;
delete condition.predicate.position;
delete condition.predicate.dimension;
}
}
if (condition.condition === 'minecraft:damage_source_properties') {
let $damage = generateDamage(condition.predicate);
$condition.children('.card-body').append($damage);
if (condition.predicate) {
delete condition.nbt;
}
}
if (condition.condition === 'minecraft:match_tool') {
let $item = generateItem(condition.predicate);
$condition.children('.card-body').append($item);
}
} else {
delete condition.predicate;
}
if (condition.condition === 'minecraft:entity_scores') {
$condition.find('.condition-entity-scores').removeClass('d-none');
} else {
delete condition.scores;
}
if (condition.condition === 'minecraft:alternative') {
$condition.find('.condition-terms').removeClass('d-none');
} else {
delete condition.terms;
}
if (condition.condition === 'minecraft:inverted') {
if (!condition.term) {
condition.term = {
condition: "minecraft:random_chance",
chance: 0.5
};
}
} else {
delete condition.term;
}
if (condition.condition === 'minecraft:weather_check') {
$condition.find('.condition-raining').removeClass('d-none');
$condition.find('.condition-thundering').removeClass('d-none');
generateRadio($condition.find('.condition-raining'), condition.raining);
generateRadio($condition.find('.condition-thundering'), condition.thundering);
} else {
delete condition.raining;
delete condition.thundering;
}
if (condition.condition === 'minecraft:table_bonus') {
$condition.find('.condition-enchantment').removeClass('d-none');
$condition.find('.condition-enchantment input').val(condition.enchantment);
let chances = JSON.stringify(condition.chances);
if (chances) {
chances = chances.split(',').join(', ').slice(1, -1);
}
$condition.find('.condition-chances').removeClass('d-none');
$condition.find('.condition-chances input').val(chances);
if (condition.enchantment === '') {
delete condition.enchantment;
}
} else {
delete condition.enchantment;
delete condition.chances;
}
if (condition.scores) {
$condition.find('.scores-list').removeClass('d-none');
for (let objective in condition.scores) {
let score = condition.scores[objective];
delete score.type;
let $score = $('#scoreTemplate').clone();
$score.removeAttr('id').attr('data-objective', objective);
$score.find('.objective').text(objective);
generateRange($score, score);
$condition.find('.scores-list').append($score);
}
}
if (condition.properties) {
$condition.find('.property-list').removeClass('d-none');
for (let blockstate in condition.properties) {
let $property = $('#blockPropertyTemplate').clone();
$property.removeAttr('id').attr('data-blockstate', blockstate);
$property.find('input').val(condition.properties[blockstate]);
$property.find('.blockstate').text(blockstate);
$condition.find('.property-list').append($property);
}
}
if (condition.term) {
let $term = generateCondition(condition.term, 0);
$term.attr('data-field', 'term');
$term.find('.card-header').remove();
$condition.children('.card-body').append($term);
}
if (condition.terms) {
for (let j = 0; j < condition.terms.length; j += 1) {
let $term = generateCondition(condition.terms[j], j);
$term.attr('data-field', 'terms[]');
$condition.children('.card-body').append($term);
}
}
return $condition;
}
function generateLocation(location) {
let $location = $('#locationTemplate').clone().removeAttr('id').addClass('predicate');
if (!location) {
location = {};
}
if (location.position) {
$location.find('.position-collapse').removeClass('d-none');
if (location.position.x) {
$location.find('.position-x .min').val(location.position.x.min);
$location.find('.position-x .max').val(location.position.x.max);
if ($.isEmptyObject(location.position.x)) {
delete location.position.x;
}
}
if (location.position.y) {
$location.find('.position-y .min').val(location.position.y.min);
$location.find('.position-y .max').val(location.position.y.max);
if ($.isEmptyObject(location.position.y)) {
delete location.position.y;
}
}
if (location.position.z) {
$location.find('.position-z .min').val(location.position.z.min);
$location.find('.position-z .max').val(location.position.z.max);
if ($.isEmptyObject(location.position.z)) {
delete location.position.z;
}
}
}
$location.find('.biome').val(location.biome);
$location.find('.feature').val(location.feature);
$location.find('.dimension').val(location.dimension);
if (location.biome === '') {
delete location.biome;
}
if (location.feature === '') {
delete location.feature;
}
if (location.dimension === '') {
delete location.dimension;
}
return $location;
}
function generateEntity(entity) {
let $entity = $('#entityTemplate').clone().removeAttr('id').addClass('predicate');
if (!entity) {
entity = {};
}
if (entity.location) {
let $location = generateLocation(entity.location);
$location.attr('data-field', 'location');
$entity.children('.card-body').append($location);
}
if (entity.nbt) {
if (!entity.nbt.startsWith('{')) {
entity.nbt = '{' + entity.nbt;
}
if (!entity.nbt.endsWith('}')) {
entity.nbt = entity.nbt + '}';
}
}
$entity.find('.type').val(entity.type);
$entity.find('.nbt').val(entity.nbt).keydown(e => preventNewline(e));
if (entity.type === '') {
delete entity.type;
}
if (entity.nbt === '') {
delete entity.nbt;
}
return $entity;
}
function generateItem(item) {
let $item = $('#itemTemplate').clone().removeAttr('id').addClass('predicate');
if (!item) {
item = {};
}
if (item.nbt) {
if (!item.nbt.startsWith('{')) {
item.nbt = '{' + item.nbt;
}
if (!item.nbt.endsWith('}')) {
item.nbt = item.nbt + '}';
}
}
if (item.tag) {
$item.find('.tag').removeClass('d-none').val(item.tag);
} else {
$item.find('.item').removeClass('d-none').val(item.item);
}
generateRange($item.find('.item-count'), item.count);
generateRange($item.find('.item-durability'), item.durability);
$item.find('.nbt').val(item.nbt).keydown(e => preventNewline(e));
$item.find('.potion').val(item.potion);
if (item.item === '') {
delete item.item;
}
if (item.tag === '') {
delete item.tag;
}
if (item.nbt === '') {
delete item.nbt;
}
if (item.nbt === '') {
delete item.nbt;
}
if (item.enchantments) {
for (let j = 0; j < item.enchantments.length; j += 1) {
let $enchantment = generateEnchantment(item.enchantments[j], j);
$item.children('.card-body').append($enchantment);
}
}
return $item;
}
function generateDamage(damage) {
let $damage = $('#damageTemplate').clone().removeAttr('id');
if (!damage) {
damage = {};
}
if (damage.type) {
$damage.find('.damage-flag').removeClass('d-none');
generateRadio($damage.find('.damage-projectile'), damage.type.is_projectile);
generateRadio($damage.find('.damage-explosion'), damage.type.is_explosion);
generateRadio($damage.find('.damage-fire'), damage.type.is_fire);
generateRadio($damage.find('.damage-magic'), damage.type.is_magic);
generateRadio($damage.find('.damage-lightning'), damage.is_lightning);
generateRadio($damage.find('.damage-starvation'), damage.type.bypasses_magic);
generateRadio($damage.find('.damage-void'), damage.type.bypasses_invulnerability);
generateRadio($damage.find('.damage-armor'), damage.type.bypasses_armor);
}
if (damage.source_entity) {
let $entity = generateEntity(damage.source_entity);
$entity.attr('data-field', 'source_entity');
$damage.find('.source-entity').append($entity);
}
if (damage.direct_entity) {
let $entity = generateEntity(damage.direct_entity);
$entity.attr('data-field', 'direct_entity');
$damage.find('.direct-entity').append($entity);
}
if (typeof damage.dealt !== 'object' && isNaN(damage.dealt)) {
delete damage.dealt;
}
if (typeof damage.dealt !== 'object' && isNaN(damage.taken)) {
delete damage.taken;
}
generateRange($damage.find('.damage-dealt'), damage.dealt);
generateRange($damage.find('.damage-taken'), damage.taken);
generateRadio($damage.find('.damage-blocked'), damage.blocked);
return $damage;
}
function generateEnchantment(enchantment, i) {
let $enchantment = $('#enchantmentTemplate').clone();
$enchantment.removeAttr('id').attr('data-index', i);
$enchantment.find('.enchantment-id').val(enchantment.enchantment);
generateRange($enchantment.find('.enchantment-levels'), enchantment.levels);
return $enchantment;
}
function generateRange($el, data) {
if (typeof data === 'object') {
if (data.type && data.type.match(/(minecraft:)?binomial/)) {
$el.find('.binomial').removeClass('d-none');
$el.find('.binomial.n').val(data.n);
$el.find('.binomial.p').val(data.p);
} else {
$el.find('.range').removeClass('d-none');
$el.find('.range.min').val(data.min);
$el.find('.range.max').val(data.max);
}
} else {
$el.find('.exact').removeClass('d-none');
$el.find('.exact').val(data);
}
}
function generateRadio($el, data) {
if (data === true) {
$el.find('[value="true"]').addClass('active');
} else if (data === false) {
$el.find('[value="false"]').addClass('active');
}
}
*/