From e225bcfb96011fbf08b3e0d402a9f51d7b97b1cc Mon Sep 17 00:00:00 2001 From: Vatuu <21113232+Vatuu@users.noreply.github.com> Date: Sat, 14 May 2022 19:45:44 +0200 Subject: [PATCH] To make brian shut up. --- .../iris/core/link/BlockDataProvider.java | 5 ++++- .../volmit/iris/core/link/ItemAdderLink.java | 12 ++++++++++- .../iris/core/link/OraxenDataProvider.java | 11 +++++++++- .../iris/core/service/CustomBlockDataSVC.java | 20 ++++++++++++++++--- .../volmit/iris/engine/object/IrisLoot.java | 17 ++++++++++++++-- 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java index 0af0b6274..74f8946e3 100644 --- a/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/BlockDataProvider.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; import java.util.MissingResourceException; @@ -27,7 +28,9 @@ public abstract class BlockDataProvider { public abstract BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException; + public abstract ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException; + public abstract NamespacedKey[] getBlockTypes(); - public abstract boolean isProviderBlock(NamespacedKey namespace); + public abstract boolean isValidProvider(NamespacedKey namespace); } diff --git a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java index d601196ac..b12c2f204 100644 --- a/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java +++ b/src/main/java/com/volmit/iris/core/link/ItemAdderLink.java @@ -2,9 +2,11 @@ package com.volmit.iris.core.link; import com.volmit.iris.util.collection.KList; import dev.lone.itemsadder.api.CustomBlock; +import dev.lone.itemsadder.api.CustomStack; import dev.lone.itemsadder.api.ItemsAdder; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; import java.util.MissingResourceException; @@ -22,6 +24,14 @@ public class ItemAdderLink extends BlockDataProvider { return CustomBlock.getBaseBlockData(blockId.toString()); } + @Override + public ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException { + CustomStack stack = CustomStack.getInstance(itemId.toString()); + if(stack == null) + throw new MissingResourceException("Failed to find ItemData!", itemId.getNamespace(), itemId.getKey()); + return stack.getItemStack(); + } + @Override public NamespacedKey[] getBlockTypes() { KList keys = new KList<>(); @@ -31,7 +41,7 @@ public class ItemAdderLink extends BlockDataProvider { } @Override - public boolean isProviderBlock(NamespacedKey blockId) { + public boolean isValidProvider(NamespacedKey blockId) { for(NamespacedKey k : getBlockTypes()) if(k.equals(blockId)) { return true; diff --git a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java index 7b7a110d2..973cc0eb6 100644 --- a/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java +++ b/src/main/java/com/volmit/iris/core/link/OraxenDataProvider.java @@ -20,6 +20,7 @@ package com.volmit.iris.core.link; import com.volmit.iris.Iris; import com.volmit.iris.util.collection.KList; +import io.th0rgal.oraxen.items.ItemBuilder; import io.th0rgal.oraxen.items.OraxenItems; import io.th0rgal.oraxen.mechanics.MechanicFactory; import io.th0rgal.oraxen.mechanics.MechanicsManager; @@ -32,10 +33,12 @@ import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.MultipleFacing; +import org.bukkit.inventory.ItemStack; import java.lang.reflect.Field; import java.util.Map; import java.util.MissingResourceException; +import java.util.Optional; public class OraxenDataProvider extends BlockDataProvider { @@ -70,6 +73,12 @@ public class OraxenDataProvider extends BlockDataProvider { throw new MissingResourceException("Failed to find BlockData!", blockId.getNamespace(), blockId.getKey()); } + @Override + public ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException { + Optional opt = OraxenItems.getOptionalItemById(itemId.getKey()); + return opt.orElseThrow(() -> new MissingResourceException("Failed to find ItemData!", itemId.getNamespace(), itemId.getKey())).build(); + } + @Override public NamespacedKey[] getBlockTypes() { KList names = new KList<>(); @@ -90,7 +99,7 @@ public class OraxenDataProvider extends BlockDataProvider { } @Override - public boolean isProviderBlock(NamespacedKey key) { + public boolean isValidProvider(NamespacedKey key) { return key.getNamespace().equalsIgnoreCase("oraxen"); } diff --git a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java index aa06c0787..b252ec0f1 100644 --- a/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java +++ b/src/main/java/com/volmit/iris/core/service/CustomBlockDataSVC.java @@ -27,6 +27,7 @@ import com.volmit.iris.util.plugin.IrisService; import lombok.Data; import org.bukkit.NamespacedKey; import org.bukkit.block.data.BlockData; +import org.bukkit.inventory.ItemStack; import java.util.MissingResourceException; import java.util.Optional; @@ -46,14 +47,15 @@ public class CustomBlockDataSVC implements IrisService { public void addProvider(BlockDataProvider... provider) { for(BlockDataProvider p : provider) { - if(p.getPlugin() != null) + if(p.getPlugin() != null) { providers.add(p); - p.init(); + p.init(); + } } } public Optional getBlockData(NamespacedKey key) { - Optional provider = providers.stream().filter(p -> p.isPresent() && p.isProviderBlock(key)).findFirst(); + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); if(provider.isEmpty()) return Optional.empty(); try { @@ -64,6 +66,18 @@ public class CustomBlockDataSVC implements IrisService { } } + public Optional getItemStack(NamespacedKey key) { + Optional provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst(); + if(provider.isEmpty()) + return Optional.empty(); + try { + return Optional.of(provider.get().getItemStack(key)); + } catch(MissingResourceException e) { + Iris.error(e.getMessage() + " - [" + e.getClassName() + ":" + e.getKey() + "]"); + return Optional.empty(); + } + } + public NamespacedKey[] getAllIdentifiers() { KList names = new KList<>(); providers.stream().filter(BlockDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); 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 a697171a6..ac67242a4 100644 --- a/src/main/java/com/volmit/iris/engine/object/IrisLoot.java +++ b/src/main/java/com/volmit/iris/engine/object/IrisLoot.java @@ -20,6 +20,7 @@ package com.volmit.iris.engine.object; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.volmit.iris.Iris; +import com.volmit.iris.core.service.CustomBlockDataSVC; import com.volmit.iris.engine.data.cache.AtomicCache; import com.volmit.iris.engine.object.annotations.ArrayType; import com.volmit.iris.engine.object.annotations.Desc; @@ -36,6 +37,7 @@ import com.volmit.iris.util.format.Form; import com.volmit.iris.util.json.JSONObject; import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.noise.CNG; +import com.volmit.iris.util.plugin.IrisService; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -44,6 +46,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.TagParser; import org.bukkit.DyeColor; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; @@ -52,7 +55,9 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.material.Colorable; +import javax.xml.stream.events.Namespace; import java.awt.Color; +import java.util.Optional; @Snippet("loot") @Accessors(chain = true) @@ -117,7 +122,16 @@ public class IrisLoot { public ItemStack get(boolean debug, RNG rng) { try { - ItemStack is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + 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())); + is.setAmount(Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + } else { + is = new ItemStack(getType(), Math.max(1, rng.i(getMinAmount(), getMaxAmount()))); + } + ItemMeta m = is.getItemMeta(); if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { @@ -184,7 +198,6 @@ public class IrisLoot { return applyCustomNbt(is); } catch(Throwable e) { Iris.reportError(e); - } return new ItemStack(Material.AIR);