Add some 1.14 conditions

This commit is contained in:
Misode
2019-06-19 17:16:32 +02:00
parent 5926b1f077
commit 1e9b9a223a
4 changed files with 185 additions and 40 deletions

View File

@@ -1,3 +1,7 @@
.card.child {
background-color: #eee;
}
.card.bg-info {
background-color: #91cdd6 !important;
color: black !important;

View File

@@ -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>

View File

@@ -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
View File

@@ -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;
}