From 6500ed2075c238f3384006d696cd95374ef0fee9 Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 20:26:24 +0200 Subject: [PATCH] Made third party items work in loot tables. --- .../volmit/iris/engine/framework/Engine.java | 2 + .../volmit/iris/engine/object/IrisLoot.java | 38 ++++++++++++------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/volmit/iris/engine/framework/Engine.java b/src/main/java/com/volmit/iris/engine/framework/Engine.java index 7110824f1..6d7848092 100644 --- a/src/main/java/com/volmit/iris/engine/framework/Engine.java +++ b/src/main/java/com/volmit/iris/engine/framework/Engine.java @@ -472,6 +472,8 @@ public interface Engine extends DataProvider, Fallible, LootProvider, BlockUpdat int b = 4; for(IrisLootTable i : tables) { + if(i == null) + continue; b++; items.addAll(i.getLoot(debug, items.isEmpty(), rng, slot, x, y, z, b + b, mgf + b)); } diff --git a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java index ac67242a4..dc4cc9070 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java @@ -123,10 +123,13 @@ public class IrisLoot { public ItemStack get(boolean debug, RNG rng) { try { ItemStack is; - Iris.warn(type); if(!type.startsWith("minecraft:") && type.contains(":")) { Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); - is = opt.orElse(new ItemStack(getType())); + if(opt.isEmpty()) { + Iris.warn("Unknown Material: " + type); + return null; + } + is = opt.get(); is.setAmount(Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); } else { is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); @@ -134,8 +137,8 @@ public class IrisLoot { ItemMeta m = is.getItemMeta(); - if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { - int max = getType().getMaxDurability(); + if(is.getType().getMaxDurability() > 0 && m instanceof Damageable d) { + int max = is.getType().getMaxDurability(); d.setDamage((int) Math.round(Math.max(0, Math.min(max, (1D - rng.d(getMinDurability(), getMaxDurability())) * max)))); } @@ -209,17 +212,25 @@ public class IrisLoot { } if(giveSomething || chance.aquire(() -> NoiseStyle.STATIC.create(rng)).fit(1, rarity * table.getRarity(), x, y, z) == 1) { - if(getType() == null) { - Iris.warn("Cant find item type " + type); - return null; - } - try { - ItemStack is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + ItemStack is; + if(!type.startsWith("minecraft:") && type.contains(":")) { + Optional opt = Iris.service(CustomBlockDataSVC.class).getItemStack(NamespacedKey.fromString(type)); + if(opt.isEmpty()) { + Iris.warn("Unknown Material: " + type); + return null; + } + is = opt.get(); + is.setAmount(Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + return is; + } else { + is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + } + ItemMeta m = is.getItemMeta(); - if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { - int max = getType().getMaxDurability(); + if(is.getType().getMaxDurability() > 0 && m instanceof Damageable d) { + int max = is.getType().getMaxDurability(); d.setDamage((int) Math.round(Math.max(0, Math.min(max, (1D - rng.d(getMinDurability(), getMaxDurability())) * max)))); } @@ -273,7 +284,8 @@ public class IrisLoot { is.setItemMeta(m); return applyCustomNbt(is); } catch(Throwable e) { - Iris.reportError(e); + //Iris.reportError(e); + e.printStackTrace(); } }