Automatically check conditions when generating

This commit is contained in:
jglrxavpok 2020-05-21 19:30:43 +02:00
parent 556c6fd837
commit bf9316d06b
8 changed files with 17 additions and 18 deletions

View File

@ -87,16 +87,7 @@ public class LootTable {
WeightedRandom<Entry> weightedRandom = new WeightedRandom<>(entries); WeightedRandom<Entry> weightedRandom = new WeightedRandom<>(entries);
for (int i = 0; i < rollCount+bonusRollCount; i++) { for (int i = 0; i < rollCount+bonusRollCount; i++) {
Entry entry = weightedRandom.get(rng); Entry entry = weightedRandom.get(rng);
boolean shouldGenerate = true; entry.generateStacks(output, arguments);
for(Condition c : entry.getConditions()) {
if(!c.test(arguments)) {
shouldGenerate = false;
break;
}
}
if(shouldGenerate) {
entry.generateStacks(output, arguments);
}
} }
} }
} }
@ -130,6 +121,14 @@ public class LootTable {
return type; return type;
} }
public abstract void generateStacks(List<ItemStack> output, Data arguments); public final void generateStacks(List<ItemStack> output, Data arguments) {
for(Condition c : conditions) {
if(!c.test(arguments))
return;
}
generate(output, arguments);
}
protected abstract void generate(List<ItemStack> output, Data arguments);
} }
} }

View File

@ -16,7 +16,7 @@ public class AlternativesEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
for(LootTable.Entry c : children) { for(LootTable.Entry c : children) {
int previousSize = output.size(); int previousSize = output.size();
c.generateStacks(output, arguments); c.generateStacks(output, arguments);

View File

@ -16,7 +16,7 @@ public class AnotherLootTableEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
output.addAll(table.generate(arguments)); output.addAll(table.generate(arguments));
} }
} }

View File

@ -20,7 +20,7 @@ public class DynamicEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
List<ItemStack> toDrop = arguments.getOrDefault(DROP_LIST_KEY, Collections.emptyList()); List<ItemStack> toDrop = arguments.getOrDefault(DROP_LIST_KEY, Collections.emptyList());
output.addAll(toDrop); output.addAll(toDrop);
} }

View File

@ -16,7 +16,7 @@ public class GroupEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
for (LootTable.Entry child : children) { for (LootTable.Entry child : children) {
child.generateStacks(output, arguments); child.generateStacks(output, arguments);
} }

View File

@ -22,7 +22,7 @@ public class ItemEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
ItemStack stack = new ItemStack(item, (byte)1); ItemStack stack = new ItemStack(item, (byte)1);
for (LootTableFunction function : functions) { for (LootTableFunction function : functions) {
stack = function.apply(stack, arguments); stack = function.apply(stack, arguments);

View File

@ -16,7 +16,7 @@ public class SequenceEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
for(LootTable.Entry c : children) { for(LootTable.Entry c : children) {
int previousSize = output.size(); int previousSize = output.size();
c.generateStacks(output, arguments); c.generateStacks(output, arguments);

View File

@ -19,7 +19,7 @@ public class TagEntry extends LootTable.Entry {
} }
@Override @Override
public void generateStacks(List<ItemStack> output, Data arguments) { public void generate(List<ItemStack> output, Data arguments) {
// TODO: load tags // TODO: load tags
if(expand) { if(expand) {
// TODO: choose a single random item from the tag // TODO: choose a single random item from the tag