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);
for (int i = 0; i < rollCount+bonusRollCount; i++) {
Entry entry = weightedRandom.get(rng);
boolean shouldGenerate = true;
for(Condition c : entry.getConditions()) {
if(!c.test(arguments)) {
shouldGenerate = false;
break;
}
}
if(shouldGenerate) {
entry.generateStacks(output, arguments);
}
entry.generateStacks(output, arguments);
}
}
}
@ -130,6 +121,14 @@ public class LootTable {
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
public void generateStacks(List<ItemStack> output, Data arguments) {
public void generate(List<ItemStack> output, Data arguments) {
for(LootTable.Entry c : children) {
int previousSize = output.size();
c.generateStacks(output, arguments);

View File

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

View File

@ -20,7 +20,7 @@ public class DynamicEntry extends LootTable.Entry {
}
@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());
output.addAll(toDrop);
}

View File

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

View File

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

View File

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

View File

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