From 5d1286092eac1545f819babbee27244504a212f0 Mon Sep 17 00:00:00 2001 From: Jakub <53441451+kuba6000@users.noreply.github.com> Date: Tue, 23 Aug 2022 00:17:48 +0200 Subject: Add Config to override mob drops + some fixes (#8) * Add overrides * GTNHCoreMod custom drops integration * Update buildscript * Bump * EEC blacklist * NEI info * Loops optimization * Warn when 0% loots are detected * Detect looting drops * No * Super rare drops * Keep the same naming * Crash * Fix meta * maybe * Run at least twice * Fix stupid TF Lich boss * Comments * Fix EEC blacklist --- .../java/kubatech/api/ConstructableItemStack.java | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/main/java/kubatech/api/ConstructableItemStack.java (limited to 'src/main/java/kubatech/api/ConstructableItemStack.java') diff --git a/src/main/java/kubatech/api/ConstructableItemStack.java b/src/main/java/kubatech/api/ConstructableItemStack.java new file mode 100644 index 0000000000..668d21d803 --- /dev/null +++ b/src/main/java/kubatech/api/ConstructableItemStack.java @@ -0,0 +1,97 @@ +package kubatech.api; + +import cpw.mods.fml.common.registry.GameRegistry; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import java.nio.charset.StandardCharsets; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTSizeTracker; +import net.minecraft.nbt.NBTTagCompound; + +public class ConstructableItemStack { + public final GameRegistry.UniqueIdentifier itemIdentifier; + public final int meta; + public final int size; + public final NBTTagCompound tagCompound; + + private ConstructableItemStack( + GameRegistry.UniqueIdentifier itemIdentifier, int meta, int size, NBTTagCompound tagCompound) { + this.itemIdentifier = itemIdentifier; + this.meta = meta; + this.size = size; + this.tagCompound = tagCompound; + } + + public ConstructableItemStack(ItemStack stack) { + itemIdentifier = GameRegistry.findUniqueIdentifierFor(stack.getItem()); + meta = stack.getItemDamage(); + size = stack.stackSize; + tagCompound = stack.stackTagCompound; + } + + public ItemStack construct() { + if (itemIdentifier == null) return null; + Item it = GameRegistry.findItem(itemIdentifier.modId, itemIdentifier.name); + if (it == null) return null; + ItemStack stack = new ItemStack(it, size, meta); + stack.stackTagCompound = tagCompound; + return stack; + } + + public boolean isSame(ConstructableItemStack stack, boolean ignoreSize) { + if (!stack.itemIdentifier.modId.equals(itemIdentifier.modId)) return false; + if (!stack.itemIdentifier.name.equals(itemIdentifier.name)) return false; + return ignoreSize || stack.size == size; + } + + private static final ByteBuf BufHelper = Unpooled.buffer(); + + public void writeToByteBuf(ByteBuf byteBuf) { + BufHelper.clear(); + byte[] bytes = itemIdentifier.modId.getBytes(StandardCharsets.UTF_8); + BufHelper.writeInt(bytes.length); + BufHelper.writeBytes(bytes); + bytes = itemIdentifier.name.getBytes(StandardCharsets.UTF_8); + BufHelper.writeInt(bytes.length); + BufHelper.writeBytes(bytes); + BufHelper.writeInt(meta); + BufHelper.writeInt(size); + BufHelper.writeBoolean(tagCompound != null); + if (tagCompound != null) { + try { + bytes = CompressedStreamTools.compress(tagCompound); + } catch (Exception ignored) { + bytes = new byte[0]; + } + BufHelper.writeInt(bytes.length); + BufHelper.writeBytes(bytes); + } + byteBuf.writeInt(BufHelper.readableBytes()); + byteBuf.writeBytes(BufHelper); + } + + public static ConstructableItemStack readFromByteBuf(ByteBuf byteBuf) { + int size = byteBuf.readInt(); + byte[] bytes = new byte[byteBuf.readInt()]; + byteBuf.readBytes(bytes); + String modid = new String(bytes, StandardCharsets.UTF_8); + bytes = new byte[byteBuf.readInt()]; + byteBuf.readBytes(bytes); + String name = new String(bytes, StandardCharsets.UTF_8); + int meta = byteBuf.readInt(); + int stacksize = byteBuf.readInt(); + NBTTagCompound nbtTagCompound = null; + if (byteBuf.readBoolean()) { + bytes = new byte[byteBuf.readInt()]; + byteBuf.readBytes(bytes); + try { + nbtTagCompound = CompressedStreamTools.func_152457_a(bytes, new NBTSizeTracker(2097152L)); + } catch (Exception ignored) { + } + } + return new ConstructableItemStack( + new GameRegistry.UniqueIdentifier(modid + ":" + name), meta, stacksize, nbtTagCompound); + } +} -- cgit