From bf9316d06b1c9672f9a2bb40cfaf7800fb0de36f Mon Sep 17 00:00:00 2001 From: jglrxavpok Date: Thu, 21 May 2020 19:30:43 +0200 Subject: [PATCH] Automatically check conditions when generating --- .../server/gamedata/loottables/LootTable.java | 21 +++++++++---------- .../loottables/entries/AlternativesEntry.java | 2 +- .../entries/AnotherLootTableEntry.java | 2 +- .../loottables/entries/DynamicEntry.java | 2 +- .../loottables/entries/GroupEntry.java | 2 +- .../loottables/entries/ItemEntry.java | 2 +- .../loottables/entries/SequenceEntry.java | 2 +- .../gamedata/loottables/entries/TagEntry.java | 2 +- 8 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/java/net/minestom/server/gamedata/loottables/LootTable.java b/src/main/java/net/minestom/server/gamedata/loottables/LootTable.java index e63aa344f..2e9bbf0e5 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/LootTable.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/LootTable.java @@ -87,16 +87,7 @@ public class LootTable { WeightedRandom 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 output, Data arguments); + public final void generateStacks(List output, Data arguments) { + for(Condition c : conditions) { + if(!c.test(arguments)) + return; + } + generate(output, arguments); + } + + protected abstract void generate(List output, Data arguments); } } diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/AlternativesEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/AlternativesEntry.java index c6436070d..47ba1fe79 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/AlternativesEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/AlternativesEntry.java @@ -16,7 +16,7 @@ public class AlternativesEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { for(LootTable.Entry c : children) { int previousSize = output.size(); c.generateStacks(output, arguments); diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/AnotherLootTableEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/AnotherLootTableEntry.java index cec5bd45e..131ae71ed 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/AnotherLootTableEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/AnotherLootTableEntry.java @@ -16,7 +16,7 @@ public class AnotherLootTableEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { output.addAll(table.generate(arguments)); } } diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/DynamicEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/DynamicEntry.java index adac740ff..885189d8d 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/DynamicEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/DynamicEntry.java @@ -20,7 +20,7 @@ public class DynamicEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { List toDrop = arguments.getOrDefault(DROP_LIST_KEY, Collections.emptyList()); output.addAll(toDrop); } diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/GroupEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/GroupEntry.java index 6507e1d8c..6ae72c5c5 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/GroupEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/GroupEntry.java @@ -16,7 +16,7 @@ public class GroupEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { for (LootTable.Entry child : children) { child.generateStacks(output, arguments); } diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/ItemEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/ItemEntry.java index 87b19bf43..c49eb11bf 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/ItemEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/ItemEntry.java @@ -22,7 +22,7 @@ public class ItemEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { ItemStack stack = new ItemStack(item, (byte)1); for (LootTableFunction function : functions) { stack = function.apply(stack, arguments); diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/SequenceEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/SequenceEntry.java index 265c37f84..48beb921c 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/SequenceEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/SequenceEntry.java @@ -16,7 +16,7 @@ public class SequenceEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { for(LootTable.Entry c : children) { int previousSize = output.size(); c.generateStacks(output, arguments); diff --git a/src/main/java/net/minestom/server/gamedata/loottables/entries/TagEntry.java b/src/main/java/net/minestom/server/gamedata/loottables/entries/TagEntry.java index 0261e1c81..1102b7158 100644 --- a/src/main/java/net/minestom/server/gamedata/loottables/entries/TagEntry.java +++ b/src/main/java/net/minestom/server/gamedata/loottables/entries/TagEntry.java @@ -19,7 +19,7 @@ public class TagEntry extends LootTable.Entry { } @Override - public void generateStacks(List output, Data arguments) { + public void generate(List output, Data arguments) { // TODO: load tags if(expand) { // TODO: choose a single random item from the tag