diff --git a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java index b6671a999..145fdd4e7 100644 --- a/core/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/core/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -468,7 +468,10 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat } @Override - default void injectTables(KList list, IrisLootReference r) { + default void injectTables(KList list, IrisLootReference r, boolean fallback) { + if (r.getMode().equals(IrisLootMode.FALLBACK) && !fallback) + return; + if (r.getMode().equals(IrisLootMode.CLEAR) || r.getMode().equals(IrisLootMode.REPLACE)) { list.clear(); } @@ -503,10 +506,11 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat IrisBiome biomeUnder = ry < he ? getComplex().getCaveBiomeStream().get(rx, rz) : biomeSurface; double multiplier = 1D * getDimension().getLoot().getMultiplier() * region.getLoot().getMultiplier() * biomeSurface.getLoot().getMultiplier() * biomeUnder.getLoot().getMultiplier(); - injectTables(tables, getDimension().getLoot()); - injectTables(tables, region.getLoot()); - injectTables(tables, biomeSurface.getLoot()); - injectTables(tables, biomeUnder.getLoot()); + boolean fallback = tables.isEmpty(); + injectTables(tables, getDimension().getLoot(), fallback); + injectTables(tables, region.getLoot(), fallback); + injectTables(tables, biomeSurface.getLoot(), fallback); + injectTables(tables, biomeUnder.getLoot(), fallback); if (tables.isNotEmpty()) { int target = (int) Math.round(tables.size() * multiplier); diff --git a/core/src/main/java/com/volmit/iris/engine/framework/LootProvider.java b/core/src/main/java/com/volmit/iris/engine/framework/LootProvider.java index c8d48e43b..3192748b4 100644 --- a/core/src/main/java/com/volmit/iris/engine/framework/LootProvider.java +++ b/core/src/main/java/com/volmit/iris/engine/framework/LootProvider.java @@ -30,7 +30,7 @@ import org.bukkit.inventory.Inventory; public interface LootProvider { void scramble(Inventory inventory, RNG rng); - void injectTables(KList list, IrisLootReference r); + void injectTables(KList list, IrisLootReference r, boolean fallback); KList getLootTables(RNG rng, Block b); diff --git a/core/src/main/java/com/volmit/iris/engine/object/IrisLootMode.java b/core/src/main/java/com/volmit/iris/engine/object/IrisLootMode.java index ae205e84e..b8d6b1341 100644 --- a/core/src/main/java/com/volmit/iris/engine/object/IrisLootMode.java +++ b/core/src/main/java/com/volmit/iris/engine/object/IrisLootMode.java @@ -27,5 +27,7 @@ public enum IrisLootMode { @Desc("Clear all loot tables then add this table") CLEAR, @Desc("Replace all loot tables with this table (same as clear)") - REPLACE + REPLACE, + @Desc("Only use when there was no loot table defined by an object") + FALLBACK }