From 38e8105d867922d1514b97a856f7c7a89a6de931 Mon Sep 17 00:00:00 2001 From: Sam Kirby Date: Mon, 18 Nov 2019 11:09:48 +0000 Subject: [PATCH] Create MixinPacketBuffer As a result of this change, the integer item ID is sent (as variable length integer) instead of truncating to a short. Closes #106 --- src/main/java/org/dimdev/jeid/JEID.java | 2 - .../jeid/mixin/core/MixinPacketBuffer.java | 55 +++++++++++++++++++ src/main/resources/mixins.jeid.core.json | 3 +- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/dimdev/jeid/mixin/core/MixinPacketBuffer.java diff --git a/src/main/java/org/dimdev/jeid/JEID.java b/src/main/java/org/dimdev/jeid/JEID.java index 8f73556..05bbf1d 100644 --- a/src/main/java/org/dimdev/jeid/JEID.java +++ b/src/main/java/org/dimdev/jeid/JEID.java @@ -51,7 +51,6 @@ public void onPreInit(FMLPreInitializationEvent event) { for (int i = 0; i < 5000; i++) { Block block = new Block(Material.GROUND) .setCreativeTab(CreativeTabs.BUILDING_BLOCKS) - .setRegistryName("block_" + i) .setRegistryName(new ResourceLocation("jeid:block_" + i)); blockRegistry.register(block); @@ -64,7 +63,6 @@ public void onPreInit(FMLPreInitializationEvent event) { for (int i = 0; i < 40000; i++) { Item item = new Item() .setCreativeTab(CreativeTabs.FOOD) - .setRegistryName("item_" + i) .setRegistryName(new ResourceLocation("jeid:item_" + i)); itemRegistry.register(item); diff --git a/src/main/java/org/dimdev/jeid/mixin/core/MixinPacketBuffer.java b/src/main/java/org/dimdev/jeid/mixin/core/MixinPacketBuffer.java new file mode 100644 index 0000000..27332ff --- /dev/null +++ b/src/main/java/org/dimdev/jeid/mixin/core/MixinPacketBuffer.java @@ -0,0 +1,55 @@ +package org.dimdev.jeid.mixin.core; + +import io.netty.buffer.ByteBuf; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import javax.annotation.Nullable; +import java.io.IOException; + +@Mixin(PacketBuffer.class) +public abstract class MixinPacketBuffer { + @Shadow public abstract byte readByte(); + + @Shadow public abstract short readShort(); + + @Shadow public abstract int readVarInt(); + + @Shadow @Nullable public abstract NBTTagCompound readCompoundTag() throws IOException; + + @Shadow public abstract PacketBuffer writeVarInt(int input); + + @Redirect(method = "writeItemStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketBuffer;writeShort(I)Lio/netty/buffer/ByteBuf;", ordinal = 0)) + private ByteBuf writeIntItemId(PacketBuffer packetBuffer, int p_writeShort_1_) { + return this.writeVarInt(p_writeShort_1_); + } + + @Redirect(method = "writeItemStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/PacketBuffer;writeShort(I)Lio/netty/buffer/ByteBuf;", ordinal = 1)) + private ByteBuf writeIntItemId1(PacketBuffer packetBuffer, int p_writeShort_1_) { + return this.writeVarInt(p_writeShort_1_); + } + + + @Inject(method = "readItemStack", at = @At(value = "HEAD"), cancellable = true) + private void readIntItemId(CallbackInfoReturnable cir) throws IOException { + int i = this.readVarInt(); + + if (i < 0) { + cir.setReturnValue(ItemStack.EMPTY); + } else { + int j = this.readByte(); + int k = this.readShort(); + ItemStack itemstack = new ItemStack(Item.getItemById(i), j, k); + itemstack.getItem().readNBTShareTag(itemstack, this.readCompoundTag()); + cir.setReturnValue(itemstack); + } + } +} diff --git a/src/main/resources/mixins.jeid.core.json b/src/main/resources/mixins.jeid.core.json index 7c042d4..55eb89c 100644 --- a/src/main/resources/mixins.jeid.core.json +++ b/src/main/resources/mixins.jeid.core.json @@ -18,7 +18,8 @@ "MixinChunkProviderServer", "MixinWorldInfo", "MixinEnchantmentHelper", - "MixinItemEnchantedBook" + "MixinItemEnchantedBook", + "MixinPacketBuffer" ], "client": [ "client.MixinChunk",