mirror of
https://github.com/misode/misode.github.io.git
synced 2026-04-28 17:18:46 +00:00
Add 1.14 functions and abstract field updating
This commit is contained in:
18
custom.css
18
custom.css
@@ -1,25 +1,43 @@
|
||||
.card.bg-info {
|
||||
background-color: #91cdd6 !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.card.bg-success {
|
||||
background-color: #91d8a1 !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.card.bg-secondary {
|
||||
background-color: #adb5bd !important;
|
||||
color: black !important;
|
||||
}
|
||||
|
||||
.card.bg-dark {
|
||||
background-color: #646b72 !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.dropdown-item {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.code {
|
||||
font-family: Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, monospace;
|
||||
tab-size: 4;
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
-webkit-tab-size: 4;
|
||||
}
|
||||
|
||||
textarea.invalid {
|
||||
border-color: red !important;
|
||||
}
|
||||
|
||||
textarea.invalid:focus {
|
||||
box-shadow: 0 0 0 .2rem rgba(255,0,0,.25) !important;
|
||||
}
|
||||
|
||||
.scrollable-menu {
|
||||
height: auto;
|
||||
max-height: 300px;
|
||||
|
||||
280
index.html
280
index.html
@@ -47,10 +47,10 @@
|
||||
<option value="4">4 Spaces</option>
|
||||
<option value="tab">Tabs</option>
|
||||
</select>
|
||||
<button type="button" class="btn ml-3 btn-secondary" onclick="copySource(this)">Copy</button>
|
||||
<button type="button" class="btn btn-secondary ml-3" onclick="copySource(this)">Copy</button>
|
||||
</div>
|
||||
</div>
|
||||
<textarea id="source" class="form-control" onchange="updateSouce()" rows="20"></textarea>
|
||||
<textarea id="source" class="form-control code" onchange="updateSouce()" rows="20" spellcheck="false"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -68,40 +68,40 @@
|
||||
<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" onclick="switchRollsType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchRollsType(this, 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="switchRollsType(this, 'binomial')">Binomial</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'rolls', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'rolls', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'rolls', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'rolls')" 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="updateRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'rolls')" 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="updateRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'rolls')" 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="updateRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'rolls')" 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="updateRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateRangeField(this, 'rolls')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 bonus-rolls" data-type="exact">
|
||||
<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" onclick="switchBonusRollsType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchBonusRollsType(this, 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="switchBonusRollsType(this, 'binomial')">Binomial</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'bonus_rolls', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'bonus_rolls', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'bonus_rolls', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateBonusRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'bonus_rolls')" 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="updateBonusRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'bonus_rolls')" 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="updateBonusRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'bonus_rolls')" 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="updateBonusRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'bonus_rolls')" 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="updateBonusRollsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateRangeField(this, 'bonus_rolls')" onclick="this.select()">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -109,41 +109,41 @@
|
||||
<div class="card-header pb-1">
|
||||
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeEntry(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>``
|
||||
<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">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Type</span>
|
||||
</div>
|
||||
<select class="form-control entry-type" onchange="updateEntryType(this)">
|
||||
<select class="form-control entry-type" onchange="updateField(this, 'type')">
|
||||
<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:dynamic">Dynamic</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">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Name</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateEntryName(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control" onchange="updateField(this, 'name')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 entry-weight d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Weight</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateEntryWeight(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control" onchange="updateIntField(this, 'weight')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 entry-quality d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Quality</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateEntryQuality(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control" onchange="updateIntField(this, 'quality')" 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>
|
||||
@@ -160,15 +160,24 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Function</span>
|
||||
</div>
|
||||
<select class="form-control function-type" onchange="updateFunctionType(this)">
|
||||
<select class="form-control function-type" onchange="updateField(this, 'function')">
|
||||
<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="exact">
|
||||
@@ -176,46 +185,46 @@
|
||||
<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" onclick="switchCountType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchCountType(this, 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="switchCountType(this, 'binomial')">Binomial</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'count', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'count', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'count', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateCountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'count')" 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="updateCountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'count')" 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="updateCountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'count')" 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="updateCountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'count')" 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="updateCountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateRangeField(this, 'count')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group function-damage mt-3 d-none" data-type="exact">
|
||||
<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" onclick="switchDamageType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchDamageType(this, 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="switchDamageType(this, 'binomial')">Binomial</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'damage', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'damage', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'damage', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateDamageField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'damage')" 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="updateDamageField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'damage')" 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="updateDamageField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'damage')" 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="updateDamageField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'damage')" 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="updateDamageField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateRangeField(this, 'damage')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 function-nbt d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Tag</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateTagField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control code" onchange="updateField(this, 'tag')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="mt-3 function-ench-rand d-none">
|
||||
<div class="input-group">
|
||||
@@ -273,24 +282,24 @@
|
||||
<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" onclick="switchLevelsType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchLevelsType(this, 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="switchLevelsType(this, 'binomial')">Binomial</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'levels', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'levels', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'levels', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateLevelsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'levels')" 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="updateLevelsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'levels')" 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="updateLevelsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'levels')" 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="updateLevelsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'levels')" 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="updateLevelsField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateRangeField(this, 'levels')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 function-ench-treasure d-none">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="treasureCheckbox" onchange="updateTreasureField(this)">
|
||||
<input type="checkbox" class="custom-control-input" id="treasureCheckbox" onchange="updateCheckedField(this, 'treasure')">
|
||||
<label class="custom-control-label" for="treasureCheckbox">Treasure</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -298,11 +307,107 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Limit</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateLimitField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control" onchange="updateField(this, 'limit')" 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">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Source</span>
|
||||
</div>
|
||||
<select class="form-control" onchange="updateField(this, 'source')">
|
||||
<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">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Name</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateField(this, 'name')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group function-limit-range mt-3 d-none" data-type="exact">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">limit</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="updateRangeType(this, 'limit', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'limit', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'limit', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'limit')" 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="updateRangeField(this, 'limit')" 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="updateRangeField(this, 'limit')" 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="updateRangeField(this, 'limit')" 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="updateRangeField(this, 'limit')" 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">
|
||||
<textarea class="form-control code" onchange="updateLoreField(this)" rows=3 placeholder="JSON text component on each line"></textarea>
|
||||
</div>
|
||||
<div class="input-group mt-3 function-lore-replace d-none">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="loreReplaceCheckbox" onchange="updateCheckedField(this, 'replace')">
|
||||
<label class="custom-control-label" for="loreReplaceCheckbox">Replace</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mt-3 function-entity d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Entity</span>
|
||||
</div>
|
||||
<select class="form-control" onchange="updateField(this, 'entity')">
|
||||
<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">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Enchantment</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateField(this, 'enchantment')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 function-formula d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Formula</span>
|
||||
</div>
|
||||
<select class="form-control function-type" onchange="updateField(this, 'formula')">
|
||||
<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">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Multiplier</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateParameterIntField(this, 'bonusMultiplier')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 function-bonus-extra d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Extra</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateParameterIntField(this, 'extra')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 function-bonus-probability d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Propability</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateParameterFloatField(this, 'probability')" onclick="this.select()">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modifierTemplate" class="card bg-dark mt-3 modifier">
|
||||
@@ -314,7 +419,7 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Attribute</span>
|
||||
</div>
|
||||
<select class="form-control modifier-attribute" onchange="updateModifierAttribute(this)">
|
||||
<select class="form-control modifier-attribute" onchange="updateField(this, 'attribute')">
|
||||
<option value="generic.maxHealth">Max Health</option>
|
||||
<option value="generic.followRange">Follow Range</option>
|
||||
<option value="generic.knockbackResistance">Knockback Resistance</option>
|
||||
@@ -334,33 +439,33 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Name</span>
|
||||
</div>
|
||||
<input type="text" class="form-control modifier-name" onchange="updateModifierName(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control modifier-name" onchange="updateField(this, 'name')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 modifier-amount" data-type="exact">
|
||||
<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" onclick="switchModifierAmountType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchModifierAmountType(this, 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="switchModifierAmountType(this, 'binomial')">Binomial</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'amount', 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'amount', 'range')">Range</a>
|
||||
<a class="dropdown-item" onclick="updateRangeType(this, 'amount', 'binomial')">Binomial</a>
|
||||
</div>
|
||||
</div>
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateModifierAmountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control exact d-none rounded-right" value="1" onchange="updateRangeField(this, 'amount')" 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="updateModifierAmountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range min d-none" value="1" onchange="updateRangeField(this, 'amount')" 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="updateModifierAmountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control range max d-none rounded-right" value="2" onchange="updateRangeField(this, 'amount')" 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="updateModifierAmountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial n d-none" value="1" onchange="updateRangeField(this, 'amount')" 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="updateModifierAmountField(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control binomial p d-none rounded-right" value="0.5" onchange="updateRangeField(this, 'amount')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Operation</span>
|
||||
</div>
|
||||
<select class="form-control modifier-operation" onchange="updateModifierOperation(this)">
|
||||
<select class="form-control modifier-operation" onchange="updateField(this, 'operation')">
|
||||
<option value="addition">Addition</option>
|
||||
<option value="multiply_base">Multiply Base</option>
|
||||
<option value="multiply_total">Multiply Total</option>
|
||||
@@ -388,6 +493,35 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="operationTemplate" class="card bg-dark mt-3 operation">
|
||||
<div class="card-header pb-1">
|
||||
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeOperation(this)">Remove Operation</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="input-group">
|
||||
<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, 'source')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3">
|
||||
<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, 'target')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Operation</span>
|
||||
</div>
|
||||
<select class="form-control operation-type" onchange="updateField(this, 'op')">
|
||||
<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">
|
||||
<div class="card-header pb-1">
|
||||
<button type="button" class="btn btn-danger mb-2 float-right" onclick="removeCondition(this)">Remove Condition</button>
|
||||
@@ -397,7 +531,7 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Condition</span>
|
||||
</div>
|
||||
<select class="form-control condition-type" onchange="updateConditionType(this)">
|
||||
<select class="form-control condition-type" onchange="updateField(this, 'condition')">
|
||||
<option value="minecraft:random_chance">Random Chance</option>
|
||||
<option value="minecraft:random_chance_with_looting">Random Chance with Looting</option>
|
||||
<option value="minecraft:killed_by_player">Killed by Player</option>
|
||||
@@ -409,17 +543,17 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Chance</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateConditionChance(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control" onchange="updateFloatField(this, 'chance')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-looting-multiplier d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Looting Multiplier</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateConditionLootingMultiplier(this)" onclick="this.select()">
|
||||
<input type="text" class="form-control" onchange="updateFloatField(this, 'looting_multiplier')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-killed-inverted d-none">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="invertedCheckbox" onchange="updateInvertedField(this)">
|
||||
<input type="checkbox" class="custom-control-input" id="invertedCheckbox" onchange="updateCheckedField(this, 'inverted')">
|
||||
<label class="custom-control-label" for="invertedCheckbox">Inverted</label>
|
||||
</div>
|
||||
</div>
|
||||
@@ -427,7 +561,7 @@
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Entity</span>
|
||||
</div>
|
||||
<select class="form-control" onchange="updateConditionEntity(this)">
|
||||
<select class="form-control" onchange="updateField(this, 'entity')">
|
||||
<option value="this">This</option>
|
||||
<option value="killer">Killer</option>
|
||||
<option value="killer_player">Killer Player</option>
|
||||
@@ -456,15 +590,15 @@
|
||||
<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="switchConditionScoreType(this, 'exact')">Exact</a>
|
||||
<a class="dropdown-item" onclick="switchConditionScoreType(this, 'range')">Range</a>
|
||||
<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="updateConditionScoreField(this)" onclick="this.select()">
|
||||
<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="updateConditionScoreField(this)" onclick="this.select()">
|
||||
<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="updateConditionScoreField(this)" onclick="this.select()">
|
||||
<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>
|
||||
|
||||
333
model.js
333
model.js
@@ -5,6 +5,7 @@ $('#tableType').val("minecraft:generic");
|
||||
$('#indentationSelect').val("2");
|
||||
let indentation = 2;
|
||||
let luck_based = false;
|
||||
let nodes = '.table, .pool, .entry, .child, .term, .terms, .function, .condition, .modifier, .operation';
|
||||
let table = {
|
||||
type: "minecraft:generic",
|
||||
pools: []
|
||||
@@ -48,7 +49,7 @@ function copySource(el) {
|
||||
}
|
||||
|
||||
function getParent(el) {
|
||||
let $parent = $(el).closest('.table, .pool, .entry, .child, .term, .function, .condition, .modifier');
|
||||
let $parent = $(el).closest(nodes);
|
||||
let index = $parent.attr('data-index');
|
||||
if ($parent.hasClass('table')) {
|
||||
return table;
|
||||
@@ -60,22 +61,26 @@ function getParent(el) {
|
||||
return getParent($parent.parent()).children[index];
|
||||
} else if ($parent.hasClass('term')) {
|
||||
return getParent($parent.parent()).term;
|
||||
} else if ($parent.hasClass('terms')) {
|
||||
return getParent($parent.parent()).terms[index];
|
||||
} else if ($parent.hasClass('function')) {
|
||||
return getParent($parent.parent()).functions[index];
|
||||
} else if ($parent.hasClass('condition')) {
|
||||
return getParent($parent.parent()).conditions[index];
|
||||
} else if ($parent.hasClass('modifier')) {
|
||||
return getParent($parent.parent()).modifiers[index];
|
||||
} else if ($parent.hasClass('operation')) {
|
||||
return getParent($parent.parent()).ops[index];
|
||||
}
|
||||
}
|
||||
|
||||
function getSuperParent(el) {
|
||||
let $parent = $(el).closest('.table, .pool, .entry, .child, .term, .function, .condition, .modifier .score');
|
||||
let $parent = $(el).closest(nodes);
|
||||
return getParent($parent.parent());
|
||||
}
|
||||
|
||||
function getIndex(el) {
|
||||
let $parent = $(el).closest('.table, .pool, .entry, .child, .term, .function, .condition, .modifier');
|
||||
let $parent = $(el).closest(nodes);
|
||||
return parseInt($parent.attr('data-index'));
|
||||
}
|
||||
|
||||
@@ -94,7 +99,11 @@ function removePool(el) {
|
||||
}
|
||||
|
||||
function addEntry(el) {
|
||||
getParent(el).entries.push({
|
||||
let pool = getParent(el);
|
||||
if (!pool.entries) {
|
||||
pool.entries = [];
|
||||
}
|
||||
pool.entries.push({
|
||||
type: "minecraft:item",
|
||||
name: "minecraft:stone"
|
||||
});
|
||||
@@ -108,7 +117,11 @@ function removeEntry(el) {
|
||||
}
|
||||
|
||||
function addChild(el) {
|
||||
getParent(el).children.push({
|
||||
let entry = getParent(el);
|
||||
if (!entry.children) {
|
||||
entry.children = [];
|
||||
}
|
||||
entry.children.push({
|
||||
type: "minecraft:item",
|
||||
name: "minecraft:stone"
|
||||
});
|
||||
@@ -116,8 +129,12 @@ function addChild(el) {
|
||||
}
|
||||
|
||||
function removeChild(el) {
|
||||
let parent = getSuperParent(el);
|
||||
let index = getIndex(el);
|
||||
getSuperParent(el).children.splice(index, 1);
|
||||
parent.children.splice(index, 1);
|
||||
if (parent.children.length === 0) {
|
||||
delete parent.children;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
@@ -162,6 +179,48 @@ function removeCondition(el) {
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateField(el, field) {
|
||||
getParent(el)[field] = $(el).val();
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateIntField(el, field) {
|
||||
let value = parseInt($(el).val());
|
||||
if (isNaN(value)) {
|
||||
delete getParent(el)[field];
|
||||
} else {
|
||||
getParent(el)[field] = value;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateFloatField(el, field) {
|
||||
let value = parseFloat($(el).val());
|
||||
if (isNaN(value)) {
|
||||
delete getParent(el)[field];
|
||||
} else {
|
||||
getParent(el)[field] = value;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateCheckedField(el, field) {
|
||||
getParent(el)[field] = $(el).prop('checked');
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateRangeField(el, field) {
|
||||
let type = $(el).closest('[data-type]').attr('data-type');
|
||||
let data = getRangeField($(el).closest('[data-type]'), type);
|
||||
getParent(el)[field] = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateRangeType(el, field, type) {
|
||||
$(el).closest('[data-type]').attr('data-type', type);
|
||||
updateRangeField(el, field);
|
||||
}
|
||||
|
||||
function getRangeField($el, type) {
|
||||
if (type === 'exact') {
|
||||
return parseInt($el.find('.exact').val());
|
||||
@@ -182,114 +241,6 @@ function getRangeField($el, type) {
|
||||
}
|
||||
}
|
||||
|
||||
function switchRollsType(el, type) {
|
||||
$(el).closest('.rolls').attr('data-type', type);
|
||||
updateRollsField(el);
|
||||
}
|
||||
|
||||
function updateRollsField(el) {
|
||||
let type = $(el).closest('.rolls').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.rolls'), type);
|
||||
getParent(el).rolls = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function switchBonusRollsType(el, type) {
|
||||
$(el).closest('.bonus-rolls').attr('data-type', type);
|
||||
updateBonusRollsField(el);
|
||||
}
|
||||
|
||||
function updateBonusRollsField(el) {
|
||||
let type = $(el).closest('.bonus-rolls').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.bonus-rolls'), type);
|
||||
if (type ==='exact' && isNaN(data)) {
|
||||
delete getParent(el).bonus_rolls;
|
||||
} else {
|
||||
getParent(el).bonus_rolls = data;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateEntryType(el) {
|
||||
let entry = getParent(el);
|
||||
entry.type = $(el).val();
|
||||
if (entry.type === 'minecraft:dynamic') {
|
||||
entry.name = 'minecraft:contents';
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateEntryName(el) {
|
||||
let entry = getParent(el);
|
||||
if (entry.type === 'minecraft:dynamic') {
|
||||
entry.name = 'minecraft:contents';
|
||||
} else {
|
||||
entry.name = $(el).val();
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateEntryWeight(el) {
|
||||
let weight = parseInt($(el).val());
|
||||
if (isNaN(weight)) {
|
||||
delete getParent(el).weight;
|
||||
} else {
|
||||
getParent(el).weight = weight;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateEntryQuality(el) {
|
||||
let quality = parseInt($(el).val());
|
||||
if (isNaN(quality)) {
|
||||
delete getParent(el).quality;
|
||||
} else {
|
||||
getParent(el).quality = quality;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateFunctionType(el) {
|
||||
getParent(el).function = $(el).val();
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function switchCountType(el, type) {
|
||||
$(el).closest('.function-count').attr('data-type', type);
|
||||
updateCountField(el);
|
||||
}
|
||||
|
||||
function updateCountField(el) {
|
||||
let type = $(el).closest('.function-count').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.function-count'), type);
|
||||
getParent(el).count = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function switchDamageType(el, type) {
|
||||
$(el).closest('.function-damage').attr('data-type', type);
|
||||
updateDamageField(el);
|
||||
}
|
||||
|
||||
function updateDamageField(el) {
|
||||
let type = $(el).closest('.function-damage').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.function-damage'), type);
|
||||
getParent(el).damage = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateTagField(el) {
|
||||
let nbt = $(el).val();
|
||||
if (!nbt.startsWith('{')) {
|
||||
nbt = '{' + nbt;
|
||||
}
|
||||
if (!nbt.endsWith('}')) {
|
||||
nbt = nbt + '}';
|
||||
}
|
||||
getParent(el).tag = nbt;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function addEnchantment(el) {
|
||||
let func = getParent(el);
|
||||
let enchantment = $(el).attr('data-ench');
|
||||
@@ -313,38 +264,6 @@ function removeEnchantment(el) {
|
||||
}
|
||||
}
|
||||
|
||||
function switchLevelsType(el, type) {
|
||||
$(el).closest('.function-ench-levels').attr('data-type', type);
|
||||
updateLevelsField(el);
|
||||
}
|
||||
|
||||
function updateLevelsField(el) {
|
||||
let type = $(el).closest('.function-ench-levels').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.function-ench-levels'), type);
|
||||
getParent(el).levels = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateTreasureField(el) {
|
||||
let treasure = $(el).prop('checked');
|
||||
if (treasure) {
|
||||
getParent(el).treasure = true;
|
||||
} else {
|
||||
delete getParent(el).treasure;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateLimitField(el) {
|
||||
let limit = parseInt($(el).val());
|
||||
if (isNaN(limit)) {
|
||||
delete getParent(el).limit;
|
||||
} else {
|
||||
getParent(el).limit = limit;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function addModifier(el) {
|
||||
let func = getParent(el);
|
||||
if (!func.modifiers) {
|
||||
@@ -362,34 +281,7 @@ function addModifier(el) {
|
||||
|
||||
function removeModifier(el) {
|
||||
let index = parseInt($(el).closest('.modifier').attr('data-index'));
|
||||
getParent(el).modifiers.splice(index, 1);
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateModifierAttribute(el) {
|
||||
getParent(el).attribute = $(el).val();
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateModifierName(el) {
|
||||
getParent(el).name = $(el).val();
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function switchModifierAmountType(el, type) {
|
||||
$(el).closest('.modifier-amount').attr('data-type', type);
|
||||
updateModifierAmountField(el);
|
||||
}
|
||||
|
||||
function updateModifierAmountField(el) {
|
||||
let type = $(el).closest('.modifier-amount').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.modifier-amount'), type);
|
||||
getParent(el).amount = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateModifierOperation(el) {
|
||||
getParent(el).operation = $(el).val();
|
||||
getSuperParent(el).modifiers.splice(index, 1);
|
||||
invalidated();
|
||||
}
|
||||
|
||||
@@ -415,52 +307,6 @@ function removeModifierSlot(el) {
|
||||
}
|
||||
}
|
||||
|
||||
function updateConditionType(el) {
|
||||
let condition = $(el).val();
|
||||
let $condition = getParent(el);
|
||||
if (condition === 'minecraft:random_chance_with_looting') {
|
||||
$condition.looting_multiplier = 1;
|
||||
} else if (condition === 'minecraft:entity_properties' || condition === 'minecraft:entity_scores'){
|
||||
$condition.entity = 'this';
|
||||
}
|
||||
$condition.condition = condition;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateConditionChance(el) {
|
||||
let chance = parseFloat($(el).val());
|
||||
if (isNaN(chance)) {
|
||||
delete getParent(el).chance;
|
||||
} else {
|
||||
getParent(el).chance = chance;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateConditionLootingMultiplier(el) {
|
||||
let multiplier = parseFloat($(el).val());
|
||||
if (isNaN(multiplier)) {
|
||||
multiplier = 1;
|
||||
}
|
||||
getParent(el).looting_multiplier = multiplier;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateInvertedField(el) {
|
||||
let inverted = $(el).prop('checked');
|
||||
if (inverted) {
|
||||
getParent(el).inverted = true;
|
||||
} else {
|
||||
delete getParent(el).inverted;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateConditionEntity(el) {
|
||||
getParent(el).entity = $(el).val();
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function addScore(el) {
|
||||
let condition = getParent(el);
|
||||
let objective = $(el).closest('.condition-entity-scores').find('input').val();
|
||||
@@ -477,15 +323,58 @@ function removeScore(el) {
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function switchConditionScoreType(el, type) {
|
||||
function updateScoreType(el, type) {
|
||||
$(el).closest('.score').attr('data-type', type);
|
||||
updateConditionScoreField(el);
|
||||
}
|
||||
|
||||
function updateConditionScoreField(el) {
|
||||
function updateScoreField(el) {
|
||||
let type = $(el).closest('.score').attr('data-type');
|
||||
let data = getRangeField($(el).closest('.score'), type);
|
||||
let objective = $(el).closest('.score').attr('data-objective');
|
||||
getParent(el).scores[objective] = data;
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateLoreField(el) {
|
||||
console.log($(el).val());
|
||||
}
|
||||
|
||||
function addOperation(el) {
|
||||
let func = getParent(el);
|
||||
if (!func.ops) {
|
||||
func.ops = [];
|
||||
}
|
||||
func.ops.push({
|
||||
source: '',
|
||||
target: '',
|
||||
op: 'replace'
|
||||
});
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function removeOperation(el) {
|
||||
let index = parseInt($(el).closest('.operation').attr('data-index'));
|
||||
getSuperParent(el).ops.splice(index, 1);
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateIntField(el, field) {
|
||||
let value = parseInt($(el).val());
|
||||
if (isNaN(value)) {
|
||||
delete getParent(el).parameters[field];
|
||||
} else {
|
||||
getParent(el).parameters[field] = value;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateFloatField(el, field) {
|
||||
let value = parseFloat($(el).val());
|
||||
if (isNaN(value)) {
|
||||
delete getParent(el).parameters[field];
|
||||
} else {
|
||||
getParent(el).parameters[field] = value;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
181
view.js
181
view.js
@@ -39,14 +39,12 @@ function generatePool(pool, i) {
|
||||
let $pool = $('#poolTemplate').clone();
|
||||
$pool.removeAttr('id').attr('data-index', i);
|
||||
|
||||
// Rolls
|
||||
if (!pool.rolls) {
|
||||
pool.rolls = 1;
|
||||
}
|
||||
let $rolls = $pool.find('.rolls');
|
||||
generateRange($rolls, pool.rolls);
|
||||
|
||||
// Bonus Rolls
|
||||
let $bonus_rolls = $pool.find('.bonus-rolls');
|
||||
if (pool.bonus_rolls) {
|
||||
luck_based = true;
|
||||
@@ -59,7 +57,7 @@ function generatePool(pool, i) {
|
||||
}
|
||||
|
||||
for (let j = 0; j < pool.entries.length; j += 1) {
|
||||
let $entry = generateEntry(pool.entries[j], j);
|
||||
let $entry = generateEntry(pool.entries[j], j, pool.entries.length);
|
||||
$pool.children('.card-body').append($entry);
|
||||
}
|
||||
|
||||
@@ -73,7 +71,7 @@ function generatePool(pool, i) {
|
||||
return $pool;
|
||||
}
|
||||
|
||||
function generateEntry(entry, i) {
|
||||
function generateEntry(entry, i, size) {
|
||||
let $entry = $('#entryTemplate').clone();
|
||||
$entry.removeAttr('id').attr('data-index', i);
|
||||
|
||||
@@ -85,13 +83,15 @@ function generateEntry(entry, i) {
|
||||
}
|
||||
$entry.find('.entry-name input').val(entry.name);
|
||||
}
|
||||
$entry.find('.entry-weight').removeClass('d-none');
|
||||
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) {
|
||||
if (entry.weight ) {
|
||||
$entry.find('.entry-weight input').val(entry.weight);
|
||||
}
|
||||
if (entry.quality) {
|
||||
@@ -105,7 +105,7 @@ function generateEntry(entry, i) {
|
||||
|
||||
if (entry.children) {
|
||||
for (let j = 0; j < entry.children.length; j += 1) {
|
||||
let $child = generateEntry(entry.children[j], j);
|
||||
let $child = generateEntry(entry.children[j], j, entry.children.length);
|
||||
$child.removeClass('entry').addClass('child');
|
||||
$entry.children('.card-body').append($child);
|
||||
}
|
||||
@@ -133,24 +133,36 @@ function generateFunction(func, i) {
|
||||
$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 input').val(func.tag);
|
||||
} else {
|
||||
delete func.tag;
|
||||
}
|
||||
|
||||
if (func.function === 'minecraft:enchant_randomly') {
|
||||
$function.find('.function-ench-rand').removeClass('d-none');
|
||||
if (func.enchantments) {
|
||||
@@ -164,6 +176,7 @@ function generateFunction(func, i) {
|
||||
} 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);
|
||||
@@ -171,6 +184,8 @@ function generateFunction(func, i) {
|
||||
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);
|
||||
@@ -179,12 +194,19 @@ function generateFunction(func, i) {
|
||||
delete func.levels;
|
||||
delete func.treasure;
|
||||
}
|
||||
if (func.function === 'minecraft:looting_enchant') {
|
||||
$function.find('.function-limit').removeClass('d-none');
|
||||
$function.find('.function-limit input').val(func.limit);
|
||||
|
||||
if (func.function === 'minecraft:looting_enchant' || func.function === 'minecraft:looting_enchant' || func.function === 'minecraft:limit_count') {
|
||||
if (func.function === 'minecraft:looting_enchant' || func.function === 'minecraft:limit_count') {
|
||||
$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) {
|
||||
@@ -197,6 +219,132 @@ function generateFunction(func, i) {
|
||||
delete func.modifiers;
|
||||
}
|
||||
|
||||
if (func.function === 'minecraft:set_name') {
|
||||
$function.find('.function-name').removeClass('d-none');
|
||||
$function.find('.function-name input').val(func.name);
|
||||
} 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) {
|
||||
lore += func.lore[j];
|
||||
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-entity 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;
|
||||
console.log(func);
|
||||
$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);
|
||||
@@ -228,6 +376,19 @@ function generateModifier(modifier, i) {
|
||||
return $modifier
|
||||
}
|
||||
|
||||
function generateOperation(operation, i) {
|
||||
console.log(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);
|
||||
|
||||
Reference in New Issue
Block a user