From cae72b2db602789a909532002b79ac089acebbf6 Mon Sep 17 00:00:00 2001 From: Arseny Spiridonov Date: Mon, 21 Sep 2020 22:50:59 +0700 Subject: [PATCH] Fix possible packet hacking (https://github.com/N1nt4nd0/Xenobyte/tree/master/src/main/java/forgefuck/team/xenobyte/modules) --- .../network/AccessoryInventoryPacket.java | 10 +++- .../util/network/PatternTablePacket.java | 40 +++++++++++---- .../util/network/SignDataPacket.java | 9 +++- .../util/network/SmelteryPacket.java | 51 +++++++++---------- .../util/network/ToolStationPacket.java | 21 ++++---- 5 files changed, 81 insertions(+), 50 deletions(-) diff --git a/src/main/java/tconstruct/util/network/AccessoryInventoryPacket.java b/src/main/java/tconstruct/util/network/AccessoryInventoryPacket.java index c9ebb549..f2324895 100644 --- a/src/main/java/tconstruct/util/network/AccessoryInventoryPacket.java +++ b/src/main/java/tconstruct/util/network/AccessoryInventoryPacket.java @@ -4,8 +4,11 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import mantle.common.network.AbstractPacket; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import tconstruct.TConstruct; import tconstruct.armor.ArmorProxyCommon; +import tconstruct.armor.TinkerArmor; +import tconstruct.armor.player.TPlayerStats; public class AccessoryInventoryPacket extends AbstractPacket { @@ -52,7 +55,12 @@ public class AccessoryInventoryPacket extends AbstractPacket player.openGui(TConstruct.instance, ArmorProxyCommon.armorGuiID, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ); break; case ArmorProxyCommon.knapsackGuiID: - player.openGui(TConstruct.instance, ArmorProxyCommon.knapsackGuiID, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ); + TPlayerStats stats = TPlayerStats.get(player); + ItemStack itemStack = stats.armor.getStackInSlot(2); + if (itemStack != null && itemStack.getItem() == TinkerArmor.knapsack && itemStack.stackSize > 0) + { + player.openGui(TConstruct.instance, ArmorProxyCommon.knapsackGuiID, player.worldObj, (int) player.posX, (int) player.posY, (int) player.posZ); + } break; } } diff --git a/src/main/java/tconstruct/util/network/PatternTablePacket.java b/src/main/java/tconstruct/util/network/PatternTablePacket.java index 60b83b61..715eddcd 100644 --- a/src/main/java/tconstruct/util/network/PatternTablePacket.java +++ b/src/main/java/tconstruct/util/network/PatternTablePacket.java @@ -3,12 +3,13 @@ package tconstruct.util.network; import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import mantle.blocks.abstracts.InventoryLogic; import mantle.common.network.AbstractPacket; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; +import tconstruct.TConstruct; +import tconstruct.library.crafting.StencilBuilder; +import tconstruct.tools.inventory.PatternShaperContainer; +import tconstruct.tools.logic.StencilTableLogic; public class PatternTablePacket extends AbstractPacket { @@ -56,13 +57,34 @@ public class PatternTablePacket extends AbstractPacket @Override public void handleServerSide (EntityPlayer player) { - World world = player.worldObj; - TileEntity te = world.getTileEntity(x, y, z); - - if (te instanceof InventoryLogic) + if (player.openContainer instanceof PatternShaperContainer) { - ((InventoryLogic) te).setInventorySlotContents(1, contents); + PatternShaperContainer container = (PatternShaperContainer) player.openContainer; + StencilTableLogic logic = container.logic; + if (logic != null && logic.xCoord == this.x && logic.yCoord == this.y && logic.zCoord == this.z) + if (this.contents == null) + logic.setSelectedPattern(null); + else + { + ItemStack stackBlank = logic.getStackInSlot(0); + if (stackBlank != null && stackBlank.stackSize > 0 && StencilBuilder.isBlank(stackBlank)) + { + boolean warning = true; + for (ItemStack stack : StencilBuilder.instance.stencils.values()) + { + if (stack != null && this.contents.isItemEqual(stack)) + { + this.contents = stack.copy(); + warning = false; + break; + } + } + if (warning) + TConstruct.logger.warn("Possible packet-cheating with PatternTable for player " + player.getCommandSenderName()); + else + logic.setSelectedPattern(this.contents); + } + } } } - } diff --git a/src/main/java/tconstruct/util/network/SignDataPacket.java b/src/main/java/tconstruct/util/network/SignDataPacket.java index bd608f01..329f3e23 100644 --- a/src/main/java/tconstruct/util/network/SignDataPacket.java +++ b/src/main/java/tconstruct/util/network/SignDataPacket.java @@ -62,7 +62,7 @@ public class SignDataPacket extends AbstractPacket { TileEntity te = player.worldObj.getTileEntity(x, y, z); - if (te != null && te instanceof BattlesignLogic) + if (te instanceof BattlesignLogic) { BattlesignLogic logic = (BattlesignLogic) te; @@ -73,9 +73,14 @@ public class SignDataPacket extends AbstractPacket @Override public void handleServerSide (EntityPlayer player) { + if (player.worldObj.blockExists(x, y, z)) + { + return; + } + TileEntity te = player.worldObj.getTileEntity(x, y, z); - if (te != null && te instanceof BattlesignLogic) + if (te instanceof BattlesignLogic) { BattlesignLogic logic = (BattlesignLogic) te; diff --git a/src/main/java/tconstruct/util/network/SmelteryPacket.java b/src/main/java/tconstruct/util/network/SmelteryPacket.java index 7f9e68f9..40132898 100644 --- a/src/main/java/tconstruct/util/network/SmelteryPacket.java +++ b/src/main/java/tconstruct/util/network/SmelteryPacket.java @@ -2,13 +2,13 @@ package tconstruct.util.network; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; -import mantle.common.network.*; +import mantle.common.network.AbstractPacket; +import mantle.common.network.PacketUpdateTE; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import tconstruct.TConstruct; +import tconstruct.smeltery.inventory.SmelteryContainer; import tconstruct.smeltery.logic.SmelteryLogic; public class SmelteryPacket extends AbstractPacket @@ -64,34 +64,33 @@ public class SmelteryPacket extends AbstractPacket @Override public void handleServerSide (EntityPlayer player) { - World world = player.worldObj; - - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof SmelteryLogic) + if (player.openContainer instanceof SmelteryContainer) { - FluidStack temp = null; - - for (FluidStack liquid : ((SmelteryLogic) te).moltenMetal) + SmelteryContainer container = (SmelteryContainer) player.openContainer; + SmelteryLogic logic = container.logic; + if (logic != null && logic.hasWorldObj() && logic.getWorldObj().provider.dimensionId == this.dimension && logic.xCoord == this.x && logic.yCoord == this.y && logic.zCoord == this.z) { - if (liquid.getFluidID() == fluidID) + FluidStack temp = null; + + for (FluidStack liquid : logic.moltenMetal) { - temp = liquid; + if (liquid.getFluidID() == this.fluidID) + temp = liquid; } - } - if (temp != null) - { - ((SmelteryLogic) te).moltenMetal.remove(temp); - if (isShiftPressed) - ((SmelteryLogic) te).moltenMetal.add(temp); - else - ((SmelteryLogic) te).moltenMetal.add(0, temp); - } + if (temp != null) + { + logic.moltenMetal.remove(temp); + if (this.isShiftPressed) + logic.moltenMetal.add(temp); + else + logic.moltenMetal.add(0, temp); + } - NBTTagCompound data = new NBTTagCompound(); - te.writeToNBT(data); - TConstruct.packetPipeline.sendToDimension(new PacketUpdateTE(x, y, z, data), dimension); + NBTTagCompound data = new NBTTagCompound(); + logic.writeToNBT(data); + TConstruct.packetPipeline.sendToDimension(new PacketUpdateTE(this.x, this.y, this.z, data), this.dimension); + } } } - -} +} \ No newline at end of file diff --git a/src/main/java/tconstruct/util/network/ToolStationPacket.java b/src/main/java/tconstruct/util/network/ToolStationPacket.java index a10225f3..f27a1e71 100644 --- a/src/main/java/tconstruct/util/network/ToolStationPacket.java +++ b/src/main/java/tconstruct/util/network/ToolStationPacket.java @@ -5,9 +5,8 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import mantle.common.network.AbstractPacket; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import tconstruct.tools.logic.*; +import tconstruct.tools.inventory.ToolStationContainer; +import tconstruct.tools.logic.ToolStationLogic; public class ToolStationPacket extends AbstractPacket { @@ -53,16 +52,14 @@ public class ToolStationPacket extends AbstractPacket @Override public void handleServerSide (EntityPlayer player) { - World world = player.worldObj; - TileEntity te = world.getTileEntity(x, y, z); - - if (te instanceof ToolStationLogic) + if (player.openContainer instanceof ToolStationContainer) { - ((ToolStationLogic) te).setToolname(toolName); - } - if (te instanceof ToolForgeLogic) - { - ((ToolForgeLogic) te).setToolname(toolName); + ToolStationContainer container = (ToolStationContainer) player.openContainer; + ToolStationLogic logic = container.logic; + if (logic != null && logic.xCoord == x && logic.yCoord == y && logic.zCoord == z) + { + logic.setToolname(toolName); + } } }