To make brian shut up.

This commit is contained in:
Vatuu 2022-05-14 19:45:44 +02:00
parent c3de8b33de
commit e225bcfb96
No known key found for this signature in database
GPG Key ID: C6F07B79B2ED9150
5 changed files with 57 additions and 8 deletions

View File

@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import java.util.MissingResourceException; import java.util.MissingResourceException;
@ -27,7 +28,9 @@ public abstract class BlockDataProvider {
public abstract BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException; public abstract BlockData getBlockData(NamespacedKey blockId) throws MissingResourceException;
public abstract ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException;
public abstract NamespacedKey[] getBlockTypes(); public abstract NamespacedKey[] getBlockTypes();
public abstract boolean isProviderBlock(NamespacedKey namespace); public abstract boolean isValidProvider(NamespacedKey namespace);
} }

View File

@ -2,9 +2,11 @@ package com.volmit.iris.core.link;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import dev.lone.itemsadder.api.CustomBlock; import dev.lone.itemsadder.api.CustomBlock;
import dev.lone.itemsadder.api.CustomStack;
import dev.lone.itemsadder.api.ItemsAdder; import dev.lone.itemsadder.api.ItemsAdder;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack;
import java.util.MissingResourceException; import java.util.MissingResourceException;
@ -22,6 +24,14 @@ public class ItemAdderLink extends BlockDataProvider {
return CustomBlock.getBaseBlockData(blockId.toString()); 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 @Override
public NamespacedKey[] getBlockTypes() { public NamespacedKey[] getBlockTypes() {
KList<NamespacedKey> keys = new KList<>(); KList<NamespacedKey> keys = new KList<>();
@ -31,7 +41,7 @@ public class ItemAdderLink extends BlockDataProvider {
} }
@Override @Override
public boolean isProviderBlock(NamespacedKey blockId) { public boolean isValidProvider(NamespacedKey blockId) {
for(NamespacedKey k : getBlockTypes()) for(NamespacedKey k : getBlockTypes())
if(k.equals(blockId)) { if(k.equals(blockId)) {
return true; return true;

View File

@ -20,6 +20,7 @@ package com.volmit.iris.core.link;
import com.volmit.iris.Iris; import com.volmit.iris.Iris;
import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.collection.KList;
import io.th0rgal.oraxen.items.ItemBuilder;
import io.th0rgal.oraxen.items.OraxenItems; import io.th0rgal.oraxen.items.OraxenItems;
import io.th0rgal.oraxen.mechanics.MechanicFactory; import io.th0rgal.oraxen.mechanics.MechanicFactory;
import io.th0rgal.oraxen.mechanics.MechanicsManager; import io.th0rgal.oraxen.mechanics.MechanicsManager;
@ -32,10 +33,12 @@ import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.MultipleFacing; import org.bukkit.block.data.MultipleFacing;
import org.bukkit.inventory.ItemStack;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Map; import java.util.Map;
import java.util.MissingResourceException; import java.util.MissingResourceException;
import java.util.Optional;
public class OraxenDataProvider extends BlockDataProvider { 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()); throw new MissingResourceException("Failed to find BlockData!", blockId.getNamespace(), blockId.getKey());
} }
@Override
public ItemStack getItemStack(NamespacedKey itemId) throws MissingResourceException {
Optional<ItemBuilder> opt = OraxenItems.getOptionalItemById(itemId.getKey());
return opt.orElseThrow(() -> new MissingResourceException("Failed to find ItemData!", itemId.getNamespace(), itemId.getKey())).build();
}
@Override @Override
public NamespacedKey[] getBlockTypes() { public NamespacedKey[] getBlockTypes() {
KList<NamespacedKey> names = new KList<>(); KList<NamespacedKey> names = new KList<>();
@ -90,7 +99,7 @@ public class OraxenDataProvider extends BlockDataProvider {
} }
@Override @Override
public boolean isProviderBlock(NamespacedKey key) { public boolean isValidProvider(NamespacedKey key) {
return key.getNamespace().equalsIgnoreCase("oraxen"); return key.getNamespace().equalsIgnoreCase("oraxen");
} }

View File

@ -27,6 +27,7 @@ import com.volmit.iris.util.plugin.IrisService;
import lombok.Data; import lombok.Data;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.block.data.BlockData; import org.bukkit.block.data.BlockData;
import org.bukkit.inventory.ItemStack;
import java.util.MissingResourceException; import java.util.MissingResourceException;
import java.util.Optional; import java.util.Optional;
@ -46,14 +47,15 @@ public class CustomBlockDataSVC implements IrisService {
public void addProvider(BlockDataProvider... provider) { public void addProvider(BlockDataProvider... provider) {
for(BlockDataProvider p : provider) { for(BlockDataProvider p : provider) {
if(p.getPlugin() != null) if(p.getPlugin() != null) {
providers.add(p); providers.add(p);
p.init(); p.init();
}
} }
} }
public Optional<BlockData> getBlockData(NamespacedKey key) { public Optional<BlockData> getBlockData(NamespacedKey key) {
Optional<BlockDataProvider> provider = providers.stream().filter(p -> p.isPresent() && p.isProviderBlock(key)).findFirst(); Optional<BlockDataProvider> provider = providers.stream().filter(p -> p.isPresent() && p.isValidProvider(key)).findFirst();
if(provider.isEmpty()) if(provider.isEmpty())
return Optional.empty(); return Optional.empty();
try { try {
@ -64,6 +66,18 @@ public class CustomBlockDataSVC implements IrisService {
} }
} }
public Optional<ItemStack> getItemStack(NamespacedKey key) {
Optional<BlockDataProvider> 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() { public NamespacedKey[] getAllIdentifiers() {
KList<NamespacedKey> names = new KList<>(); KList<NamespacedKey> names = new KList<>();
providers.stream().filter(BlockDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes())); providers.stream().filter(BlockDataProvider::isPresent).forEach(p -> names.add(p.getBlockTypes()));

View File

@ -20,6 +20,7 @@ package com.volmit.iris.engine.object;
import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.volmit.iris.Iris; 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.data.cache.AtomicCache;
import com.volmit.iris.engine.object.annotations.ArrayType; import com.volmit.iris.engine.object.annotations.ArrayType;
import com.volmit.iris.engine.object.annotations.Desc; 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.json.JSONObject;
import com.volmit.iris.util.math.RNG; import com.volmit.iris.util.math.RNG;
import com.volmit.iris.util.noise.CNG; import com.volmit.iris.util.noise.CNG;
import com.volmit.iris.util.plugin.IrisService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -44,6 +46,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.TagParser; import net.minecraft.nbt.TagParser;
import org.bukkit.DyeColor; import org.bukkit.DyeColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack;
import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -52,7 +55,9 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.inventory.meta.LeatherArmorMeta;
import org.bukkit.material.Colorable; import org.bukkit.material.Colorable;
import javax.xml.stream.events.Namespace;
import java.awt.Color; import java.awt.Color;
import java.util.Optional;
@Snippet("loot") @Snippet("loot")
@Accessors(chain = true) @Accessors(chain = true)
@ -117,7 +122,16 @@ public class IrisLoot {
public ItemStack get(boolean debug, RNG rng) { public ItemStack get(boolean debug, RNG rng) {
try { 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<ItemStack> 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(); ItemMeta m = is.getItemMeta();
if(getType().getMaxDurability() > 0 && m instanceof Damageable d) { if(getType().getMaxDurability() > 0 && m instanceof Damageable d) {
@ -184,7 +198,6 @@ public class IrisLoot {
return applyCustomNbt(is); return applyCustomNbt(is);
} catch(Throwable e) { } catch(Throwable e) {
Iris.reportError(e); Iris.reportError(e);
} }
return new ItemStack(Material.AIR); return new ItemStack(Material.AIR);