mirror of
https://github.com/misode/misode.github.io.git
synced 2026-04-29 17:32:43 +00:00
Add some 1.14 conditions
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
.card.child {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
.card.bg-info {
|
||||
background-color: #91cdd6 !important;
|
||||
color: black !important;
|
||||
|
||||
66
index.html
66
index.html
@@ -33,7 +33,7 @@
|
||||
<label class="custom-control-label" for="luckBased">Luck-based</label>
|
||||
</div>
|
||||
</div>
|
||||
<div id="structure" class="table">
|
||||
<div id="structure" class="loot-table">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-5">
|
||||
@@ -532,11 +532,20 @@
|
||||
<span class="input-group-text">Condition</span>
|
||||
</div>
|
||||
<select class="form-control condition-type" onchange="updateField(this, 'condition')">
|
||||
<option value="minecraft:entity_properties">Entity Properties</option>
|
||||
<option value="minecraft:blockstate_propery">Block Properties</option>
|
||||
<option value="minecraft:damage_source_properties">Damage Source Properties</option>
|
||||
<option value="minecraft:location_check">Location Check</option>
|
||||
<option value="minecraft:weather_check">Weather Check</option>
|
||||
<option value="minecraft:match_tool">Tool Check</option>
|
||||
<option value="minecraft:alternative">Alternative</option>
|
||||
<option value="minecraft:inverted">Inverted</option>
|
||||
<option value="minecraft:entity_scores">Entity Scores</option>
|
||||
<option value="minecraft:random_chance">Random Chance</option>
|
||||
<option value="minecraft:random_chance_with_looting">Random Chance with Looting</option>
|
||||
<option value="minecraft:table_bonus">Table Bonus</option>
|
||||
<option value="minecraft:killed_by_player">Killed by Player</option>
|
||||
<option value="minecraft:entity_properties">Entity Properties</option>
|
||||
<option value="minecraft:entity_scores">Entity Scores</option>
|
||||
<option value="minecraft:survives_explosion">Survives Explosion</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-chance d-none">
|
||||
@@ -567,11 +576,6 @@
|
||||
<option value="killer_player">Killer Player</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="card bg-dark mt-3 condition-predicate d-none">
|
||||
<div class="card-body">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-entity-scores d-none">
|
||||
<div class="input-group-prepend">
|
||||
<label class="input-group-text">Objective</label>
|
||||
@@ -583,6 +587,43 @@
|
||||
</div>
|
||||
<div class="mt-3 scores-list d-none">
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-terms d-none">
|
||||
<button type="button" class="btn btn-light" onclick="addTerm(this)">Add Term</button>
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-block d-none">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text">Block</span>
|
||||
</div>
|
||||
<input type="text" class="form-control" onchange="updateField(this, 'block')" onclick="this.select()">
|
||||
</div>
|
||||
<div class="card bg-dark mt-3 condition-predicate d-none">
|
||||
<div class="card-body">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-block-properties d-none">
|
||||
<div class="input-group-prepend">
|
||||
<label class="input-group-text">Block State</label>
|
||||
</div>
|
||||
<input type="text" class="form-control">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-dark" type="button" onclick="addBlockProperty(this)">Add Block State</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-3 property-list d-none">
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-raining d-none">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="rainingCheckbox" onchange="updateCheckedField(this, 'raining')">
|
||||
<label class="custom-control-label" for="rainingCheckbox">Treasure</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group mt-3 condition-thundering d-none">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input type="checkbox" class="custom-control-input" id="thunderingCheckbox" onchange="updateCheckedField(this, 'thundering')">
|
||||
<label class="custom-control-label" for="thunderingCheckbox">Treasure</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="scoreTemplate" class="input-group mt-3 score">
|
||||
@@ -603,6 +644,15 @@
|
||||
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeScore(this)">Remove</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="blockPropertyTemplate" class="input-group mt-3 block-property">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text blockstate"></span>
|
||||
</div>
|
||||
<input type="text" class="form-control exact" onchange="updateBlockPropertyField(this)" onclick="this.select()">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-outline-danger bg-light" type="button" onclick="removeBlockProperty(this)">Remove</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
||||
|
||||
55
model.js
55
model.js
@@ -5,7 +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 nodes = '.loot-table, .pool, .entry, .child, .term, .terms, .function, .condition, .modifier, .operation';
|
||||
let table = {
|
||||
type: "minecraft:generic",
|
||||
pools: []
|
||||
@@ -28,8 +28,11 @@ function updateSouce() {
|
||||
try {
|
||||
table = JSON.parse($('#source').val());
|
||||
} catch {
|
||||
$('#source').addClass('invalid');
|
||||
return;
|
||||
if ($('#source').val().length > 0) {
|
||||
$('#source').addClass('invalid');
|
||||
return;
|
||||
}
|
||||
table = {};
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
@@ -51,7 +54,7 @@ function copySource(el) {
|
||||
function getParent(el) {
|
||||
let $parent = $(el).closest(nodes);
|
||||
let index = $parent.attr('data-index');
|
||||
if ($parent.hasClass('table')) {
|
||||
if ($parent.hasClass('loot-table')) {
|
||||
return table;
|
||||
} else if ($parent.hasClass('pool')) {
|
||||
return getParent($parent.parent()).pools[index];
|
||||
@@ -85,16 +88,22 @@ function getIndex(el) {
|
||||
}
|
||||
|
||||
function addPool(el) {
|
||||
if (!table.pools) {
|
||||
table.pools = [];
|
||||
}
|
||||
table.pools.push({
|
||||
rolls: 1,
|
||||
entries: []
|
||||
rolls: 1
|
||||
});
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function removePool(el) {
|
||||
let parent = getSuperParent(el);
|
||||
let index = getIndex(el);
|
||||
getSuperParent(el).pools.splice(index, 1);
|
||||
parent.pools.splice(index, 1);
|
||||
if (parent.pools.length === 0) {
|
||||
delete parent.pools;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
@@ -111,8 +120,12 @@ function addEntry(el) {
|
||||
}
|
||||
|
||||
function removeEntry(el) {
|
||||
let parent = getSuperParent(el);
|
||||
let index = getIndex(el);
|
||||
getSuperParent(el).entries.splice(index, 1);
|
||||
parent.entries.splice(index, 1);
|
||||
if (parent.entries.length === 0) {
|
||||
delete parent.entries;
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
@@ -359,7 +372,7 @@ function removeOperation(el) {
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateIntField(el, field) {
|
||||
function updateParameterIntField(el, field) {
|
||||
let value = parseInt($(el).val());
|
||||
if (isNaN(value)) {
|
||||
delete getParent(el).parameters[field];
|
||||
@@ -369,7 +382,7 @@ function updateIntField(el, field) {
|
||||
invalidated();
|
||||
}
|
||||
|
||||
function updateFloatField(el, field) {
|
||||
function updateParameterFloatField(el, field) {
|
||||
let value = parseFloat($(el).val());
|
||||
if (isNaN(value)) {
|
||||
delete getParent(el).parameters[field];
|
||||
@@ -378,3 +391,25 @@ function updateFloatField(el, field) {
|
||||
}
|
||||
invalidated();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
100
view.js
100
view.js
@@ -27,11 +27,18 @@ function generateRange($el, data) {
|
||||
function generateStructure() {
|
||||
$('#structure').html('');
|
||||
|
||||
for (let i = 0; i < table.pools.length; i += 1) {
|
||||
let $pool = generatePool(table.pools[i], i);
|
||||
$('#structure').append($pool);
|
||||
if (!table.type) {
|
||||
table.type = 'minecraft:empty';
|
||||
}
|
||||
$('#tableType').val(table.type);
|
||||
|
||||
$('#luck-based').attr('checked', luck_based);
|
||||
if (table.pools) {
|
||||
for (let i = 0; i < table.pools.length; i += 1) {
|
||||
let $pool = generatePool(table.pools[i], i);
|
||||
$('#structure').append($pool);
|
||||
|
||||
$('#luck-based').attr('checked', luck_based);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,9 +63,11 @@ function generatePool(pool, i) {
|
||||
$pool.find('.bonus-rolls').addClass('d-none');
|
||||
}
|
||||
|
||||
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.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) {
|
||||
@@ -394,18 +403,21 @@ function generateCondition(condition, i) {
|
||||
$condition.removeAttr('id').attr('data-index', i);
|
||||
|
||||
$condition.find('.condition-type').val(condition.condition);
|
||||
|
||||
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;
|
||||
@@ -419,36 +431,80 @@ function generateCondition(condition, i) {
|
||||
} else {
|
||||
delete condition.inverted;
|
||||
}
|
||||
|
||||
if (condition.condition === 'minecraft:entity_properties' || condition.condition === 'minecraft:entity_scores') {
|
||||
$condition.find('.condition-entity').removeClass('d-none');
|
||||
$condition.find('.condition-entity select').val(condition.entity);
|
||||
} else {
|
||||
delete condition.entity;
|
||||
}
|
||||
if (condition.condition === 'minecraft:entity_properties') {
|
||||
|
||||
if (condition.condition === 'minecraft:blockstate_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_predicate' || condition.condition === 'minecraft:match_tool') {
|
||||
$condition.find('.condition-predicate').removeClass('d-none');
|
||||
} else {
|
||||
delete condition.predicate;
|
||||
}
|
||||
|
||||
if (condition.condition === 'minecraft:entity_scores') {
|
||||
$condition.find('.condition-entity-scores').removeClass('d-none');
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
delete condition.scores;
|
||||
}
|
||||
|
||||
if (condition.condition === 'minecraft:alternatives') {
|
||||
$condition.find('.condition-terms').removeCLass('d-none');
|
||||
} else {
|
||||
delete condition.terms;
|
||||
}
|
||||
|
||||
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.removeClass('condition').addClass('term');
|
||||
$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.removeClass('condition').addClass('terms');
|
||||
$condition.children('.card-body').append($term);
|
||||
}
|
||||
}
|
||||
|
||||
return $condition;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user