diff options
author | Jakub <53441451+kuba6000@users.noreply.github.com> | 2022-08-23 00:17:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-23 00:17:48 +0200 |
commit | 5d1286092eac1545f819babbee27244504a212f0 (patch) | |
tree | a377af43657e1959a5a088a5e48dde0c2c2b9b22 /src/main/java/kubatech/api/ConstructableItemStack.java | |
parent | c31a00ff0259c6f1a2c8098aacb3afc14384aa4b (diff) | |
download | GT5-Unofficial-5d1286092eac1545f819babbee27244504a212f0.tar.gz GT5-Unofficial-5d1286092eac1545f819babbee27244504a212f0.tar.bz2 GT5-Unofficial-5d1286092eac1545f819babbee27244504a212f0.zip |
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
Diffstat (limited to 'src/main/java/kubatech/api/ConstructableItemStack.java')
-rw-r--r-- | src/main/java/kubatech/api/ConstructableItemStack.java | 97 |
1 files changed, 97 insertions, 0 deletions
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); + } +} |