From 50b53aee3594f9f0f4988f75f38817d940b97033 Mon Sep 17 00:00:00 2001 From: Richard Freimer Date: Mon, 22 Jul 2019 09:16:39 -0400 Subject: [PATCH] Improve implementation of opening various Guis (#5566) * Pass selected hotbar slot when opening personal chest. Should fix #5557 * Remove telling the server to open a personal chest. Only the server should tell the client to open it * Don't bother even registering the client to server packet for opening personal chest * Use openGui for block variant of personal chest * Make it so openGui can be used for Items as well as blocks * Use new item openGui system for portable teleporter and seismic reader * Add wrapper for opening Gui's of by Entity * Only clear sounds on client * Minor clean --- .../java/mekanism/client/ClientProxy.java | 156 ++++++++++-------- .../mekanism/client/gui/GuiPersonalChest.java | 4 +- .../mekanism/client/gui/robit/GuiRobit.java | 22 +-- .../client/gui/robit/GuiRobitCrafting.java | 2 +- .../client/gui/robit/GuiRobitInventory.java | 2 +- .../client/gui/robit/GuiRobitMain.java | 20 +-- .../client/gui/robit/GuiRobitRepair.java | 2 +- .../client/gui/robit/GuiRobitSmelting.java | 2 +- .../java/mekanism/common/CommonProxy.java | 143 ++++++++++------ .../java/mekanism/common/PacketHandler.java | 10 +- .../java/mekanism/common/PlayerState.java | 9 +- .../mekanism/common/block/BlockBasic.java | 8 - .../mekanism/common/block/BlockMachine.java | 4 +- .../block/states/BlockStateMachine.java | 2 +- .../mekanism/common/entity/EntityRobit.java | 3 +- .../inventory/InventoryPersonalChest.java | 8 +- .../container/ContainerPersonalChest.java | 14 +- .../common/item/ItemBlockMachine.java | 5 +- .../mekanism/common/item/ItemDictionary.java | 3 +- .../common/item/ItemPortableTeleporter.java | 3 +- .../common/item/ItemSeismicReader.java | 2 +- .../network/PacketLogisticalSorterGui.java | 3 +- .../common/network/PacketPersonalChest.java | 149 ----------------- .../mekanism/common/network/PacketRobit.java | 107 +++--------- .../mekanism/common/util/MekanismUtils.java | 37 ++--- 25 files changed, 277 insertions(+), 443 deletions(-) delete mode 100644 src/main/java/mekanism/common/network/PacketPersonalChest.java diff --git a/src/main/java/mekanism/client/ClientProxy.java b/src/main/java/mekanism/client/ClientProxy.java index 3cd00046f0f..e33abad74c8 100644 --- a/src/main/java/mekanism/client/ClientProxy.java +++ b/src/main/java/mekanism/client/ClientProxy.java @@ -139,6 +139,7 @@ import mekanism.common.item.ItemBlockMachine; import mekanism.common.item.ItemBlockTransmitter; import mekanism.common.item.ItemCraftingFormula; +import mekanism.common.item.ItemDictionary; import mekanism.common.item.ItemPortableTeleporter; import mekanism.common.item.ItemSeismicReader; import mekanism.common.item.ItemWalkieTalkie; @@ -220,6 +221,7 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.IStateMapper; import net.minecraft.client.renderer.entity.RenderSkeleton; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.Item; @@ -276,24 +278,6 @@ public void loadConfiguration() { } } - @Override - public void openPersonalChest(EntityPlayer entityplayer, int id, int windowId, boolean isBlock, BlockPos pos, EnumHand hand) { - if (id == 0) { - if (isBlock) { - TileEntityPersonalChest tileEntity = (TileEntityPersonalChest) entityplayer.world.getTileEntity(pos); - FMLClientHandler.instance().displayGuiScreen(entityplayer, new GuiPersonalChest(entityplayer.inventory, tileEntity)); - entityplayer.openContainer.windowId = windowId; - } else { - ItemStack stack = entityplayer.getHeldItem(hand); - if (MachineType.get(stack) == MachineType.PERSONAL_CHEST) { - InventoryPersonalChest inventory = new InventoryPersonalChest(stack, hand); - FMLClientHandler.instance().displayGuiScreen(entityplayer, new GuiPersonalChest(entityplayer.inventory, inventory)); - entityplayer.openContainer.windowId = windowId; - } - } - } - } - @Override public void registerTESRs() { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAdvancedFactory.class, new RenderConfigurableMachine<>()); @@ -684,16 +668,94 @@ private String getProperties(List entries) { return properties.toString(); } + private GuiScreen getClientItemGui(EntityPlayer player, BlockPos pos) { + int currentItem = pos.getX(); + int handOrdinal = pos.getY(); + if (currentItem < 0 || currentItem >= player.inventory.mainInventory.size() || handOrdinal < 0 || handOrdinal >= EnumHand.values().length) { + //If it is out of bounds don't do anything + return null; + } + ItemStack stack = player.inventory.getStackInSlot(currentItem); + if (stack.isEmpty()) { + return null; + } + EnumHand hand = EnumHand.values()[handOrdinal]; + int guiID = pos.getZ(); + switch (guiID) { + case 0: + if (stack.getItem() instanceof ItemDictionary) { + return new GuiDictionary(player.inventory); + } + break; + case 14: + if (stack.getItem() instanceof ItemPortableTeleporter) { + return new GuiTeleporter(player, hand, stack); + } + break; + case 19: + if (MachineType.get(stack) == MachineType.PERSONAL_CHEST) { + //Ensure the item didn't change. From testing even if it did things still seemed to work properly but better safe than sorry + return new GuiPersonalChest(player.inventory, new InventoryPersonalChest(stack, hand)); + } + break; + case 38: + if (stack.getItem() instanceof ItemSeismicReader) { + return new GuiSeismicReader(player.world, new Coord4D(player), stack.copy()); + } + break; + } + return null; + } + + private GuiScreen getClientEntityGui(EntityPlayer player, World world, BlockPos pos) { + int entityID = pos.getX(); + Entity entity = world.getEntityByID(entityID); + if (entity == null) { + return null; + } + int guiID = pos.getY(); + switch (guiID) { + case 21: + if (entity instanceof EntityRobit) { + return new GuiRobitMain(player.inventory, (EntityRobit) entity); + } + break; + case 22: + if (entity instanceof EntityRobit) { + return new GuiRobitCrafting(player.inventory, (EntityRobit) entity); + } + break; + case 23: + if (entity instanceof EntityRobit) { + return new GuiRobitInventory(player.inventory, (EntityRobit) entity); + } + break; + case 24: + if (entity instanceof EntityRobit) { + return new GuiRobitSmelting(player.inventory, (EntityRobit) entity); + } + break; + case 25: + if (entity instanceof EntityRobit) { + return new GuiRobitRepair(player.inventory, (EntityRobit) entity); + } + break; + } + return null; + } + @Override @SuppressWarnings("unchecked") public GuiScreen getClientGui(int ID, EntityPlayer player, World world, BlockPos pos) { + //TODO: Replace magic numbers here and in sub methods with static lookup ints + if (ID == 0) { + return getClientItemGui(player, pos); + } else if (ID == 1) { + return getClientEntityGui(player, world, pos); + } TileEntity tileEntity = world.getTileEntity(pos); - switch (ID) { - case 0: - return new GuiDictionary(player.inventory); - case 1: - break; // Used to be credits UI + //0, 1 USED BEFORE SWITCH case 2: return new GuiDigitalMiner(player.inventory, (TileEntityDigitalMiner) tileEntity); case 3: @@ -718,12 +780,7 @@ public GuiScreen getClientGui(int ID, EntityPlayer player, World world, BlockPos return new GuiMetallurgicInfuser(player.inventory, (TileEntityMetallurgicInfuser) tileEntity); case 13: return new GuiTeleporter(player.inventory, (TileEntityTeleporter) tileEntity); - case 14: - ItemStack itemStack = player.getHeldItem(EnumHand.values()[pos.getX()]); - if (!itemStack.isEmpty() && itemStack.getItem() instanceof ItemPortableTeleporter) { - return new GuiTeleporter(player, EnumHand.values()[pos.getX()], itemStack); - } - return null; + //EMPTY 14 case 15: return new GuiPurificationChamber(player.inventory, (TileEntityAdvancedElectricMachine) tileEntity); case 16: @@ -732,37 +789,9 @@ public GuiScreen getClientGui(int ID, EntityPlayer player, World world, BlockPos return new GuiElectricPump(player.inventory, (TileEntityElectricPump) tileEntity); case 18: return new GuiDynamicTank(player.inventory, (TileEntityDynamicTank) tileEntity); - //EMPTY 19, 20 - case 21: - EntityRobit robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new GuiRobitMain(player.inventory, robit); - } - return null; - case 22: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new GuiRobitCrafting(player.inventory, robit); - } - return null; - case 23: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new GuiRobitInventory(player.inventory, robit); - } - return null; - case 24: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new GuiRobitSmelting(player.inventory, robit); - } - return null; - case 25: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new GuiRobitRepair(player.inventory, robit); - } - return null; + case 19: + return new GuiPersonalChest(player.inventory, (TileEntityPersonalChest) tileEntity); + //EMPTY 20, 21, 22, 23, 24, 25 case 29: return new GuiChemicalOxidizer(player.inventory, (TileEntityChemicalOxidizer) tileEntity); case 30: @@ -781,12 +810,7 @@ public GuiScreen getClientGui(int ID, EntityPlayer player, World world, BlockPos return new GuiChemicalWasher(player.inventory, (TileEntityChemicalWasher) tileEntity); case 37: return new GuiChemicalCrystallizer(player.inventory, (TileEntityChemicalCrystallizer) tileEntity); - case 38: - ItemStack itemStack1 = player.getHeldItem(EnumHand.values()[pos.getX()]); - if (!itemStack1.isEmpty() && itemStack1.getItem() instanceof ItemSeismicReader) { - return new GuiSeismicReader(world, new Coord4D(player), itemStack1.copy()); - } - return null; + //EMPTY 38 case 39: return new GuiSeismicVibrator(player.inventory, (TileEntitySeismicVibrator) tileEntity); case 40: diff --git a/src/main/java/mekanism/client/gui/GuiPersonalChest.java b/src/main/java/mekanism/client/gui/GuiPersonalChest.java index 456edb9cb82..b288fcc2c5c 100644 --- a/src/main/java/mekanism/client/gui/GuiPersonalChest.java +++ b/src/main/java/mekanism/client/gui/GuiPersonalChest.java @@ -16,14 +16,14 @@ public class GuiPersonalChest extends GuiMekanismTile { public GuiPersonalChest(InventoryPlayer inventory, TileEntityPersonalChest tile) { - super(tile, new ContainerPersonalChest(inventory, tile, null, true)); + super(tile, new ContainerPersonalChest(inventory, tile)); xSize += 26; ySize += 64; addGuiElement(new GuiSecurityTab(this, tileEntity, getGuiLocation())); } public GuiPersonalChest(InventoryPlayer inventory, InventoryPersonalChest inv) { - super(null, new ContainerPersonalChest(inventory, null, inv, false)); + super(null, new ContainerPersonalChest(inventory, inv)); xSize += 26; ySize += 64; addGuiElement(new GuiSecurityTab(this, getGuiLocation(), inv.currentHand)); diff --git a/src/main/java/mekanism/client/gui/robit/GuiRobit.java b/src/main/java/mekanism/client/gui/robit/GuiRobit.java index 9209dbb1d7e..ec22b39e0ed 100644 --- a/src/main/java/mekanism/client/gui/robit/GuiRobit.java +++ b/src/main/java/mekanism/client/gui/robit/GuiRobit.java @@ -3,10 +3,7 @@ import java.io.IOException; import mekanism.client.gui.GuiMekanism; import mekanism.client.gui.button.GuiButtonDisableableImage; -import mekanism.common.Mekanism; import mekanism.common.entity.EntityRobit; -import mekanism.common.network.PacketRobit; -import mekanism.common.network.PacketRobit.RobitMessage; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.client.gui.GuiButton; @@ -45,25 +42,20 @@ public void initGui() { @Override protected void actionPerformed(GuiButton guibutton) throws IOException { super.actionPerformed(guibutton); - if (!openGui(guibutton.id)) { + if (!shouldOpenGui(guibutton.id)) { //Don't do anything when the button is the same one as the one we are on return; } if (guibutton.id == mainButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(PacketRobit.RobitPacketType.GUI, 0, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 21, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 21); } else if (guibutton.id == craftingButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(PacketRobit.RobitPacketType.GUI, 1, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 22, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 22); } else if (guibutton.id == inventoryButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(PacketRobit.RobitPacketType.GUI, 2, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 23, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 23); } else if (guibutton.id == smeltingButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(PacketRobit.RobitPacketType.GUI, 3, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 24, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 24); } else if (guibutton.id == repairButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(PacketRobit.RobitPacketType.GUI, 4, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 25, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 25); } } @@ -74,5 +66,5 @@ protected ResourceLocation getGuiLocation() { protected abstract String getBackgroundImage(); - protected abstract boolean openGui(int id); + protected abstract boolean shouldOpenGui(int id); } \ No newline at end of file diff --git a/src/main/java/mekanism/client/gui/robit/GuiRobitCrafting.java b/src/main/java/mekanism/client/gui/robit/GuiRobitCrafting.java index bbc56053aa1..0321cfa7272 100644 --- a/src/main/java/mekanism/client/gui/robit/GuiRobitCrafting.java +++ b/src/main/java/mekanism/client/gui/robit/GuiRobitCrafting.java @@ -27,7 +27,7 @@ protected String getBackgroundImage() { } @Override - protected boolean openGui(int id) { + protected boolean shouldOpenGui(int id) { return id != 1; } } \ No newline at end of file diff --git a/src/main/java/mekanism/client/gui/robit/GuiRobitInventory.java b/src/main/java/mekanism/client/gui/robit/GuiRobitInventory.java index d8297c058da..9bb9abe740e 100644 --- a/src/main/java/mekanism/client/gui/robit/GuiRobitInventory.java +++ b/src/main/java/mekanism/client/gui/robit/GuiRobitInventory.java @@ -27,7 +27,7 @@ protected String getBackgroundImage() { } @Override - protected boolean openGui(int id) { + protected boolean shouldOpenGui(int id) { return id != 2; } } \ No newline at end of file diff --git a/src/main/java/mekanism/client/gui/robit/GuiRobitMain.java b/src/main/java/mekanism/client/gui/robit/GuiRobitMain.java index 0c634c74e27..18b731c11e0 100644 --- a/src/main/java/mekanism/client/gui/robit/GuiRobitMain.java +++ b/src/main/java/mekanism/client/gui/robit/GuiRobitMain.java @@ -52,7 +52,7 @@ private void toggleNameChange() { private void changeName() { if (!nameChangeField.getText().isEmpty()) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.NAME, robit.getEntityId(), 0, nameChangeField.getText())); + Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.NAME, robit.getEntityId(), nameChangeField.getText())); toggleNameChange(); nameChangeField.setText(""); } @@ -63,28 +63,24 @@ protected void actionPerformed(GuiButton guibutton) { if (guibutton.id == confirmName.id) { changeName(); } else if (guibutton.id == teleportHomeButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.GO_HOME, robit.getEntityId(), 0, null)); + Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.GO_HOME, robit.getEntityId(), null)); mc.displayGuiScreen(null); } else if (guibutton.id == pickupButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.DROP_PICKUP, robit.getEntityId(), 0, null)); + Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.DROP_PICKUP, robit.getEntityId(), null)); } else if (guibutton.id == renameButton.id) { toggleNameChange(); } else if (guibutton.id == followButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.FOLLOW, robit.getEntityId(), 0, null)); + Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.FOLLOW, robit.getEntityId(), null)); } else if (guibutton.id == mainButton.id) { //Clicking main button doesn't do anything while already on the main GUI } else if (guibutton.id == craftingButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.GUI, 1, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 22, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 22); } else if (guibutton.id == inventoryButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.GUI, 2, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 23, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 23); } else if (guibutton.id == smeltingButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.GUI, 3, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 24, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 24); } else if (guibutton.id == repairButton.id) { - Mekanism.packetHandler.sendToServer(new RobitMessage(RobitPacketType.GUI, 4, robit.getEntityId(), null)); - mc.player.openGui(Mekanism.instance, 25, mc.world, robit.getEntityId(), 0, 0); + MekanismUtils.openEntityGui(mc.player, robit, 25); } } diff --git a/src/main/java/mekanism/client/gui/robit/GuiRobitRepair.java b/src/main/java/mekanism/client/gui/robit/GuiRobitRepair.java index 6f073f1d801..226346f296e 100644 --- a/src/main/java/mekanism/client/gui/robit/GuiRobitRepair.java +++ b/src/main/java/mekanism/client/gui/robit/GuiRobitRepair.java @@ -112,7 +112,7 @@ protected void mouseClicked(int mouseX, int mouseY, int button) throws IOExcepti } @Override - protected boolean openGui(int id) { + protected boolean shouldOpenGui(int id) { return id != 4; } diff --git a/src/main/java/mekanism/client/gui/robit/GuiRobitSmelting.java b/src/main/java/mekanism/client/gui/robit/GuiRobitSmelting.java index 17b9fec8a21..a1186bd071b 100644 --- a/src/main/java/mekanism/client/gui/robit/GuiRobitSmelting.java +++ b/src/main/java/mekanism/client/gui/robit/GuiRobitSmelting.java @@ -39,7 +39,7 @@ protected void drawGuiContainerBackgroundLayer(int xAxis, int yAxis) { } @Override - protected boolean openGui(int id) { + protected boolean shouldOpenGui(int id) { return id != 3; } diff --git a/src/main/java/mekanism/common/CommonProxy.java b/src/main/java/mekanism/common/CommonProxy.java index 33382e8dffd..51ea803b989 100644 --- a/src/main/java/mekanism/common/CommonProxy.java +++ b/src/main/java/mekanism/common/CommonProxy.java @@ -11,6 +11,7 @@ import mekanism.common.block.states.BlockStateMachine.MachineType; import mekanism.common.config.MekanismConfig; import mekanism.common.entity.EntityRobit; +import mekanism.common.inventory.InventoryPersonalChest; import mekanism.common.inventory.container.ContainerAdvancedElectricMachine; import mekanism.common.inventory.container.ContainerChanceMachine; import mekanism.common.inventory.container.ContainerChemicalCrystallizer; @@ -40,6 +41,7 @@ import mekanism.common.inventory.container.ContainerNull; import mekanism.common.inventory.container.ContainerOredictionificator; import mekanism.common.inventory.container.ContainerPRC; +import mekanism.common.inventory.container.ContainerPersonalChest; import mekanism.common.inventory.container.ContainerQuantumEntangloporter; import mekanism.common.inventory.container.ContainerResistiveHeater; import mekanism.common.inventory.container.ContainerRotaryCondensentrator; @@ -54,7 +56,9 @@ import mekanism.common.inventory.container.robit.ContainerRobitMain; import mekanism.common.inventory.container.robit.ContainerRobitRepair; import mekanism.common.inventory.container.robit.ContainerRobitSmelting; +import mekanism.common.item.ItemDictionary; import mekanism.common.item.ItemPortableTeleporter; +import mekanism.common.item.ItemSeismicReader; import mekanism.common.network.PacketPortableTeleporter.PortableTeleporterMessage; import mekanism.common.tile.TileEntityChanceMachine; import mekanism.common.tile.TileEntityChemicalCrystallizer; @@ -79,6 +83,7 @@ import mekanism.common.tile.TileEntityMetallurgicInfuser; import mekanism.common.tile.TileEntityOredictionificator; import mekanism.common.tile.TileEntityPRC; +import mekanism.common.tile.TileEntityPersonalChest; import mekanism.common.tile.TileEntityQuantumEntangloporter; import mekanism.common.tile.TileEntityResistiveHeater; import mekanism.common.tile.TileEntityRotaryCondensentrator; @@ -93,6 +98,7 @@ import mekanism.common.tile.prefab.TileEntityElectricMachine; import mekanism.common.voice.VoiceServerManager; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; @@ -129,18 +135,6 @@ public void registerTESRs() { public void handleTeleporterUpdate(PortableTeleporterMessage message) { } - /** - * Handles an PERSONAL_CHEST_CLIENT_OPEN packet via the proxy, not handled on the server-side. - * - * @param entityplayer - player the packet was sent from - * @param id - the gui ID to open - * @param windowId - the container-specific window ID - * @param isBlock - if the chest is a block - * @param pos - coordinates - */ - public void openPersonalChest(EntityPlayer entityplayer, int id, int windowId, boolean isBlock, BlockPos pos, EnumHand hand) { - } - /** * Register and load client-only item render information. */ @@ -202,13 +196,93 @@ public Object getClientGui(int ID, EntityPlayer player, World world, BlockPos po return null; } + private Container getServerItemGui(EntityPlayer player, BlockPos pos) { + int currentItem = pos.getX(); + int handOrdinal = pos.getY(); + if (currentItem < 0 || currentItem >= player.inventory.mainInventory.size() || handOrdinal < 0 || handOrdinal >= EnumHand.values().length) { + //If it is out of bounds don't do anything + return null; + } + ItemStack stack = player.inventory.getStackInSlot(currentItem); + if (stack.isEmpty()) { + return null; + } + EnumHand hand = EnumHand.values()[handOrdinal]; + int guiID = pos.getZ(); + switch (guiID) { + case 0: + if (stack.getItem() instanceof ItemDictionary) { + return new ContainerDictionary(player.inventory); + } + break; + case 14: + if (stack.getItem() instanceof ItemPortableTeleporter) { + return new ContainerNull(); + } + case 19: + if (MachineType.get(stack) == MachineType.PERSONAL_CHEST) { + //Ensure the item didn't change. From testing even if it did things still seemed to work properly but better safe than sorry + return new ContainerPersonalChest(player.inventory, new InventoryPersonalChest(stack, hand)); + } + break; + case 38: + if (stack.getItem() instanceof ItemSeismicReader) { + return new ContainerNull(); + } + break; + } + return null; + } + + private Container getServerEntityGui(EntityPlayer player, World world, BlockPos pos) { + int entityID = pos.getX(); + Entity entity = world.getEntityByID(entityID); + if (entity == null) { + return null; + } + int guiID = pos.getY(); + switch (guiID) { + case 21: + if (entity instanceof EntityRobit) { + return new ContainerRobitMain(player.inventory, (EntityRobit) entity); + } + break; + case 22: + if (entity instanceof EntityRobit) { + return new ContainerRobitCrafting(player.inventory, (EntityRobit) entity); + } + break; + case 23: + if (entity instanceof EntityRobit) { + return new ContainerRobitInventory(player.inventory, (EntityRobit) entity); + } + break; + case 24: + if (entity instanceof EntityRobit) { + return new ContainerRobitSmelting(player.inventory, (EntityRobit) entity); + } + break; + case 25: + if (entity instanceof EntityRobit) { + return new ContainerRobitRepair(player.inventory, (EntityRobit) entity); + } + break; + } + return null; + } + @Override @SuppressWarnings("unchecked") public Container getServerGui(int ID, EntityPlayer player, World world, BlockPos pos) { + //TODO: Replace magic numbers here and in sub methods with static lookup ints + if (ID == 0) { + return getServerItemGui(player, pos); + } else if (ID == 1) { + return getServerEntityGui(player, world, pos); + } TileEntity tileEntity = world.getTileEntity(pos); switch (ID) { - case 0: - return new ContainerDictionary(player.inventory); + //0, 1 USED BEFORE SWITCH case 2: return new ContainerDigitalMiner(player.inventory, (TileEntityDigitalMiner) tileEntity); case 3: @@ -233,12 +307,7 @@ public Container getServerGui(int ID, EntityPlayer player, World world, BlockPos return new ContainerMetallurgicInfuser(player.inventory, (TileEntityMetallurgicInfuser) tileEntity); case 13: return new ContainerTeleporter(player.inventory, (TileEntityTeleporter) tileEntity); - case 14: - ItemStack itemStack = player.getHeldItem(EnumHand.values()[pos.getX()]); - if (!itemStack.isEmpty() && itemStack.getItem() instanceof ItemPortableTeleporter) { - return new ContainerNull(); - } - return null; + //EMPTY 14 case 15: return new ContainerAdvancedElectricMachine<>(player.inventory, (TileEntityAdvancedElectricMachine) tileEntity); case 16: @@ -247,36 +316,9 @@ public Container getServerGui(int ID, EntityPlayer player, World world, BlockPos return new ContainerElectricPump(player.inventory, (TileEntityElectricPump) tileEntity); case 18: return new ContainerDynamicTank(player.inventory, (TileEntityDynamicTank) tileEntity); - case 21: - EntityRobit robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new ContainerRobitMain(player.inventory, robit); - } - return null; - case 22: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new ContainerRobitCrafting(player.inventory, robit); - } - return null; - case 23: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new ContainerRobitInventory(player.inventory, robit); - } - return null; - case 24: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new ContainerRobitSmelting(player.inventory, robit); - } - return null; - case 25: - robit = (EntityRobit) world.getEntityByID(pos.getX()); - if (robit != null) { - return new ContainerRobitRepair(player.inventory, robit); - } - return null; + case 19: + return new ContainerPersonalChest(player.inventory, (TileEntityPersonalChest) tileEntity); + //EMPTY 20, 21, 22, 23, 24, 25 case 26: return new ContainerNull(player, (TileEntityContainerBlock) tileEntity); case 27: @@ -301,6 +343,7 @@ public Container getServerGui(int ID, EntityPlayer player, World world, BlockPos return new ContainerChemicalWasher(player.inventory, (TileEntityChemicalWasher) tileEntity); case 37: return new ContainerChemicalCrystallizer(player.inventory, (TileEntityChemicalCrystallizer) tileEntity); + //EMPTY 38 case 39: return new ContainerSeismicVibrator(player.inventory, (TileEntitySeismicVibrator) tileEntity); case 40: diff --git a/src/main/java/mekanism/common/PacketHandler.java b/src/main/java/mekanism/common/PacketHandler.java index 768bdfcb2f9..1881c571c8d 100644 --- a/src/main/java/mekanism/common/PacketHandler.java +++ b/src/main/java/mekanism/common/PacketHandler.java @@ -30,6 +30,7 @@ import mekanism.common.network.PacketFlamethrowerData; import mekanism.common.network.PacketFlamethrowerData.FlamethrowerDataMessage; import mekanism.common.network.PacketFreeRunnerData; +import mekanism.common.network.PacketFreeRunnerData.FreeRunnerDataMessage; import mekanism.common.network.PacketItemStack; import mekanism.common.network.PacketItemStack.ItemStackMessage; import mekanism.common.network.PacketJetpackData; @@ -42,8 +43,6 @@ import mekanism.common.network.PacketNewFilter.NewFilterMessage; import mekanism.common.network.PacketOredictionificatorGui; import mekanism.common.network.PacketOredictionificatorGui.OredictionificatorGuiMessage; -import mekanism.common.network.PacketPersonalChest; -import mekanism.common.network.PacketPersonalChest.PersonalChestMessage; import mekanism.common.network.PacketPortableTeleporter; import mekanism.common.network.PacketPortableTeleporter.PortableTeleporterMessage; import mekanism.common.network.PacketPortalFX; @@ -184,8 +183,7 @@ public static void handlePacket(Runnable runnable, EntityPlayer player) { public void initialize() { netHandler.registerMessage(PacketRobit.class, RobitMessage.class, 0, Side.SERVER); netHandler.registerMessage(PacketTransmitterUpdate.class, TransmitterUpdateMessage.class, 1, Side.CLIENT); - netHandler.registerMessage(PacketPersonalChest.class, PersonalChestMessage.class, 2, Side.CLIENT); - netHandler.registerMessage(PacketPersonalChest.class, PersonalChestMessage.class, 2, Side.SERVER); + //FREE ID 2 //FREE ID 3 netHandler.registerMessage(PacketItemStack.class, ItemStackMessage.class, 4, Side.SERVER); netHandler.registerMessage(PacketTileEntity.class, TileEntityMessage.class, 5, Side.CLIENT); @@ -223,8 +221,8 @@ public void initialize() { netHandler.registerMessage(PacketDropperUse.class, DropperUseMessage.class, 28, Side.SERVER); netHandler.registerMessage(PacketEntityMove.class, EntityMoveMessage.class, 29, Side.CLIENT); netHandler.registerMessage(PacketSecurityUpdate.class, SecurityUpdateMessage.class, 30, Side.CLIENT); - netHandler.registerMessage(PacketFreeRunnerData.class, PacketFreeRunnerData.FreeRunnerDataMessage.class, 31, Side.CLIENT); - netHandler.registerMessage(PacketFreeRunnerData.class, PacketFreeRunnerData.FreeRunnerDataMessage.class, 31, Side.SERVER); + netHandler.registerMessage(PacketFreeRunnerData.class, FreeRunnerDataMessage.class, 31, Side.CLIENT); + netHandler.registerMessage(PacketFreeRunnerData.class, FreeRunnerDataMessage.class, 31, Side.SERVER); } /** diff --git a/src/main/java/mekanism/common/PlayerState.java b/src/main/java/mekanism/common/PlayerState.java index 4e71fe6f475..c9bffc83a3a 100644 --- a/src/main/java/mekanism/common/PlayerState.java +++ b/src/main/java/mekanism/common/PlayerState.java @@ -11,6 +11,7 @@ import mekanism.common.network.PacketScubaTankData.ScubaTankDataMessage; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; +import net.minecraftforge.fml.common.FMLCommonHandler; public class PlayerState { @@ -24,14 +25,18 @@ public void clear() { activeJetpacks.clear(); activeGasmasks.clear(); activeFlamethrowers.clear(); - SoundHandler.clearPlayerSounds(); + if (FMLCommonHandler.instance().getSide().isClient()) { + SoundHandler.clearPlayerSounds(); + } } public void clearPlayer(UUID uuid) { activeJetpacks.remove(uuid); activeGasmasks.remove(uuid); activeFlamethrowers.remove(uuid); - SoundHandler.clearPlayerSounds(uuid); + if (FMLCommonHandler.instance().getSide().isClient()) { + SoundHandler.clearPlayerSounds(uuid); + } } public void init(World world) { diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index 10a465034f0..618ff74d9df 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -409,17 +409,9 @@ public void onBlockClicked(World world, BlockPos pos, EntityPlayer player) { @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer entityplayer, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - BasicBlockType type = BasicBlockType.get(state); TileEntity tile = world.getTileEntity(pos); ItemStack stack = entityplayer.getHeldItem(hand); - if (type == BasicBlockType.REFINED_OBSIDIAN) { - if (entityplayer.isSneaking()) { - entityplayer.openGui(Mekanism.instance, 1, world, pos.getX(), pos.getY(), pos.getZ()); - return true; - } - } - if (tile instanceof TileEntityThermalEvaporationController) { if (!entityplayer.isSneaking()) { if (!world.isRemote) { diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index 8e838b14c1c..47c344ac297 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -39,7 +39,6 @@ import mekanism.common.tile.TileEntityLaserAmplifier; import mekanism.common.tile.TileEntityLogisticalSorter; import mekanism.common.tile.TileEntityMetallurgicInfuser; -import mekanism.common.tile.TileEntityPersonalChest; import mekanism.common.tile.TileEntityQuantumEntangloporter; import mekanism.common.tile.prefab.TileEntityBasicBlock; import mekanism.common.tile.prefab.TileEntityContainerBlock; @@ -365,9 +364,8 @@ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, En switch (type) { case PERSONAL_CHEST: if (!entityplayer.isSneaking() && !world.isSideSolid(pos.up(), EnumFacing.DOWN)) { - TileEntityPersonalChest chest = (TileEntityPersonalChest) tileEntity; if (SecurityUtils.canAccess(entityplayer, tileEntity)) { - MekanismUtils.openPersonalChestGui((EntityPlayerMP) entityplayer, chest, null, true); + entityplayer.openGui(Mekanism.instance, type.guiId, world, pos.getX(), pos.getY(), pos.getZ()); } else { SecurityUtils.displayNoAccess(entityplayer); } diff --git a/src/main/java/mekanism/common/block/states/BlockStateMachine.java b/src/main/java/mekanism/common/block/states/BlockStateMachine.java index f295c327ee5..919b4e691de 100644 --- a/src/main/java/mekanism/common/block/states/BlockStateMachine.java +++ b/src/main/java/mekanism/common/block/states/BlockStateMachine.java @@ -123,7 +123,7 @@ public enum MachineType implements IStringSerializable, IBlockType { ENERGIZED_SMELTER(MachineBlock.MACHINE_BLOCK_1, 10, "EnergizedSmelter", 16, TileEntityEnergizedSmelter::new, true, false, true, Plane.HORIZONTAL, true), TELEPORTER(MachineBlock.MACHINE_BLOCK_1, 11, "Teleporter", 13, TileEntityTeleporter::new, true, false, false, BlockStateUtils.NO_ROTATION, false), ELECTRIC_PUMP(MachineBlock.MACHINE_BLOCK_1, 12, "ElectricPump", 17, TileEntityElectricPump::new, true, true, false, Plane.HORIZONTAL, false), - PERSONAL_CHEST(MachineBlock.MACHINE_BLOCK_1, 13, "PersonalChest", -1, TileEntityPersonalChest::new, true, true, false, Plane.HORIZONTAL, false), + PERSONAL_CHEST(MachineBlock.MACHINE_BLOCK_1, 13, "PersonalChest", 19, TileEntityPersonalChest::new, true, true, false, Plane.HORIZONTAL, false), CHARGEPAD(MachineBlock.MACHINE_BLOCK_1, 14, "Chargepad", -1, TileEntityChargepad::new, true, true, false, Plane.HORIZONTAL, false), LOGISTICAL_SORTER(MachineBlock.MACHINE_BLOCK_1, 15, "LogisticalSorter", 59, TileEntityLogisticalSorter::new, false, true, false, BlockStateUtils.ALL_FACINGS, true), ROTARY_CONDENSENTRATOR(MachineBlock.MACHINE_BLOCK_2, 0, "RotaryCondensentrator", 7, TileEntityRotaryCondensentrator::new, true, true, false, Plane.HORIZONTAL, false), diff --git a/src/main/java/mekanism/common/entity/EntityRobit.java b/src/main/java/mekanism/common/entity/EntityRobit.java index a88419dc977..6feb11ae35a 100644 --- a/src/main/java/mekanism/common/entity/EntityRobit.java +++ b/src/main/java/mekanism/common/entity/EntityRobit.java @@ -11,7 +11,6 @@ import mekanism.api.Coord4D; import mekanism.api.energy.EnergizedItemManager; import mekanism.api.energy.IEnergizedItem; -import mekanism.common.Mekanism; import mekanism.common.MekanismItems; import mekanism.common.base.ISustainedInventory; import mekanism.common.capabilities.Capabilities; @@ -325,7 +324,7 @@ public EnumActionResult applyPlayerInteraction(EntityPlayer entityplayer, Vec3d return EnumActionResult.SUCCESS; } } else { - entityplayer.openGui(Mekanism.instance, 21, world, getEntityId(), 0, 0); + MekanismUtils.openEntityGui(entityplayer, this, 21); return EnumActionResult.SUCCESS; } diff --git a/src/main/java/mekanism/common/inventory/InventoryPersonalChest.java b/src/main/java/mekanism/common/inventory/InventoryPersonalChest.java index d04092b2a57..bba51fade13 100644 --- a/src/main/java/mekanism/common/inventory/InventoryPersonalChest.java +++ b/src/main/java/mekanism/common/inventory/InventoryPersonalChest.java @@ -12,7 +12,7 @@ public class InventoryPersonalChest extends InventoryBasic { private final ItemStack itemStack; private boolean reading; - public EnumHand currentHand = EnumHand.MAIN_HAND; + public EnumHand currentHand; public InventoryPersonalChest(ItemStack stack, EnumHand hand) { super("PersonalChest", false, 55); @@ -21,12 +21,6 @@ public InventoryPersonalChest(ItemStack stack, EnumHand hand) { read(); } - public InventoryPersonalChest(ItemStack stack) { - super("PersonalChest", false, 55); - itemStack = stack; - read(); - } - @Override public void markDirty() { super.markDirty(); diff --git a/src/main/java/mekanism/common/inventory/container/ContainerPersonalChest.java b/src/main/java/mekanism/common/inventory/container/ContainerPersonalChest.java index 4ce525da7e9..dbfd8f031f7 100644 --- a/src/main/java/mekanism/common/inventory/container/ContainerPersonalChest.java +++ b/src/main/java/mekanism/common/inventory/container/ContainerPersonalChest.java @@ -18,11 +18,21 @@ public class ContainerPersonalChest extends ContainerMekanism onItemRightClick(World world, EntityPlayer entity setOwnerUUID(itemstack, entityplayer.getUniqueID()); } if (SecurityUtils.canAccess(entityplayer, itemstack)) { - InventoryPersonalChest inventory = new InventoryPersonalChest(itemstack, hand); - MekanismUtils.openPersonalChestGui((EntityPlayerMP) entityplayer, null, inventory, false); + MekanismUtils.openItemGui(entityplayer, hand, 19); } else { SecurityUtils.displayNoAccess(entityplayer); } diff --git a/src/main/java/mekanism/common/item/ItemDictionary.java b/src/main/java/mekanism/common/item/ItemDictionary.java index 3c6314ade05..477a7e1a36b 100644 --- a/src/main/java/mekanism/common/item/ItemDictionary.java +++ b/src/main/java/mekanism/common/item/ItemDictionary.java @@ -6,6 +6,7 @@ import mekanism.common.Mekanism; import mekanism.common.OreDictCache; import mekanism.common.util.LangUtils; +import mekanism.common.util.MekanismUtils; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -55,7 +56,7 @@ public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPo public ActionResult onItemRightClick(World world, EntityPlayer entityplayer, @Nonnull EnumHand hand) { ItemStack itemstack = entityplayer.getHeldItem(hand); if (entityplayer.isSneaking()) { - entityplayer.openGui(Mekanism.instance, 0, world, 0, 0, 0); + MekanismUtils.openItemGui(entityplayer, hand, 0); return new ActionResult<>(EnumActionResult.SUCCESS, itemstack); } return new ActionResult<>(EnumActionResult.PASS, itemstack); diff --git a/src/main/java/mekanism/common/item/ItemPortableTeleporter.java b/src/main/java/mekanism/common/item/ItemPortableTeleporter.java index 86dc6321a2c..ab395f2a7dd 100644 --- a/src/main/java/mekanism/common/item/ItemPortableTeleporter.java +++ b/src/main/java/mekanism/common/item/ItemPortableTeleporter.java @@ -14,6 +14,7 @@ import mekanism.common.security.IOwnerItem; import mekanism.common.util.ItemDataUtils; import mekanism.common.util.LangUtils; +import mekanism.common.util.MekanismUtils; import mekanism.common.util.SecurityUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.util.ITooltipFlag; @@ -70,7 +71,7 @@ public ActionResult onItemRightClick(World world, EntityPlayer entity Mekanism.packetHandler.sendToAll(new SecurityUpdateMessage(SecurityPacket.UPDATE, entityplayer.getUniqueID(), null)); entityplayer.sendMessage(new TextComponentString(EnumColor.DARK_BLUE + Mekanism.LOG_TAG + " " + EnumColor.GREY + LangUtils.localize("gui.nowOwn"))); } else if (SecurityUtils.canAccess(entityplayer, itemstack)) { - entityplayer.openGui(Mekanism.instance, 14, world, hand.ordinal(), 0, 0); + MekanismUtils.openItemGui(entityplayer, hand, 14); } else { SecurityUtils.displayNoAccess(entityplayer); } diff --git a/src/main/java/mekanism/common/item/ItemSeismicReader.java b/src/main/java/mekanism/common/item/ItemSeismicReader.java index 59738e32ad3..5153b6c33bd 100644 --- a/src/main/java/mekanism/common/item/ItemSeismicReader.java +++ b/src/main/java/mekanism/common/item/ItemSeismicReader.java @@ -70,7 +70,7 @@ public ActionResult onItemRightClick(World world, EntityPlayer entity if (!entityplayer.capabilities.isCreativeMode) { setEnergy(itemstack, getEnergy(itemstack) - ENERGY_USAGE); } - entityplayer.openGui(Mekanism.instance, 38, world, hand.ordinal(), 0, 0); + MekanismUtils.openItemGui(entityplayer, hand, 38); return new ActionResult<>(EnumActionResult.PASS, itemstack); } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/network/PacketLogisticalSorterGui.java b/src/main/java/mekanism/common/network/PacketLogisticalSorterGui.java index c14dc8b25bd..3f3451fdef2 100644 --- a/src/main/java/mekanism/common/network/PacketLogisticalSorterGui.java +++ b/src/main/java/mekanism/common/network/PacketLogisticalSorterGui.java @@ -95,8 +95,7 @@ public LogisticalSorterGuiMessage(SorterGuiPacket type, Coord4D coord, int guiId } } - public static void openServerGui(SorterGuiPacket t, int guiType, World world, EntityPlayerMP playerMP, - Coord4D obj, int i) { + public static void openServerGui(SorterGuiPacket t, int guiType, World world, EntityPlayerMP playerMP, Coord4D obj, int i) { Container container = null; playerMP.closeContainer(); diff --git a/src/main/java/mekanism/common/network/PacketPersonalChest.java b/src/main/java/mekanism/common/network/PacketPersonalChest.java deleted file mode 100644 index 8e252ce8458..00000000000 --- a/src/main/java/mekanism/common/network/PacketPersonalChest.java +++ /dev/null @@ -1,149 +0,0 @@ -package mekanism.common.network; - -import io.netty.buffer.ByteBuf; -import mekanism.api.Coord4D; -import mekanism.common.Mekanism; -import mekanism.common.PacketHandler; -import mekanism.common.block.states.BlockStateMachine.MachineType; -import mekanism.common.inventory.InventoryPersonalChest; -import mekanism.common.network.PacketPersonalChest.PersonalChestMessage; -import mekanism.common.tile.TileEntityPersonalChest; -import mekanism.common.util.MekanismUtils; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; - -public class PacketPersonalChest implements IMessageHandler { - - @Override - public IMessage onMessage(PersonalChestMessage message, MessageContext context) { - EntityPlayer player = PacketHandler.getPlayer(context); - PacketHandler.handlePacket(() -> { - if (message.packetType == PersonalChestPacketType.SERVER_OPEN) { - try { - if (message.isBlock) { - TileEntityPersonalChest tileEntity = (TileEntityPersonalChest) message.coord4D.getTileEntity(player.world); - MekanismUtils.openPersonalChestGui((EntityPlayerMP) player, tileEntity, null, true); - } else { - ItemStack stack = player.getHeldItem(message.currentHand); - if (MachineType.get(stack) == MachineType.PERSONAL_CHEST) { - InventoryPersonalChest inventory = new InventoryPersonalChest(stack, message.currentHand); - MekanismUtils.openPersonalChestGui((EntityPlayerMP) player, null, inventory, false); - } - } - } catch (Exception e) { - Mekanism.logger.error("Error while handling electric chest open packet.", e); - } - } else if (message.packetType == PersonalChestPacketType.CLIENT_OPEN) { - try { - Mekanism.proxy.openPersonalChest(player, message.guiType, message.windowId, message.isBlock, - message.coord4D == null ? BlockPos.ORIGIN : message.coord4D.getPos(), message.currentHand); - } catch (Exception e) { - Mekanism.logger.error("Error while handling electric chest open packet.", e); - } - } - }, player); - return null; - } - - public enum PersonalChestPacketType { - CLIENT_OPEN, - SERVER_OPEN - } - - public static class PersonalChestMessage implements IMessage { - - public PersonalChestPacketType packetType; - - public boolean isBlock; - - public int guiType; - public int windowId; - - public Coord4D coord4D; - - public EnumHand currentHand; - - public PersonalChestMessage() { - } - - //This is a really messy implementation... - public PersonalChestMessage(PersonalChestPacketType type, boolean b1, int i1, int i2, Coord4D c1, - EnumHand hand) { - packetType = type; - - switch (packetType) { - case CLIENT_OPEN: - guiType = i1; - windowId = i2; - isBlock = b1; - if (isBlock) { - coord4D = c1; - } else { - currentHand = hand; - } - break; - case SERVER_OPEN: - isBlock = b1; - if (isBlock) { - coord4D = c1; - } else { - currentHand = hand; - } - break; - } - } - - @Override - public void toBytes(ByteBuf dataStream) { - dataStream.writeInt(packetType.ordinal()); - switch (packetType) { - case CLIENT_OPEN: - dataStream.writeInt(guiType); - dataStream.writeInt(windowId); - dataStream.writeBoolean(isBlock); - if (isBlock) { - coord4D.write(dataStream); - } else { - dataStream.writeInt(currentHand.ordinal()); - } - break; - case SERVER_OPEN: - dataStream.writeBoolean(isBlock); - if (isBlock) { - coord4D.write(dataStream); - } else { - dataStream.writeInt(currentHand.ordinal()); - } - break; - } - } - - @Override - public void fromBytes(ByteBuf dataStream) { - packetType = PersonalChestPacketType.values()[dataStream.readInt()]; - if (packetType == PersonalChestPacketType.SERVER_OPEN) { - isBlock = dataStream.readBoolean(); - if (isBlock) { - coord4D = new Coord4D(dataStream.readInt(), dataStream.readInt(), dataStream.readInt(), dataStream.readInt()); - } else { - currentHand = EnumHand.values()[dataStream.readInt()]; - } - } else if (packetType == PersonalChestPacketType.CLIENT_OPEN) { - guiType = dataStream.readInt(); - windowId = dataStream.readInt(); - isBlock = dataStream.readBoolean(); - if (isBlock) { - coord4D = new Coord4D(dataStream.readInt(), dataStream.readInt(), dataStream.readInt(), dataStream.readInt()); - } else { - currentHand = EnumHand.values()[dataStream.readInt()]; - } - } - } - } -} \ No newline at end of file diff --git a/src/main/java/mekanism/common/network/PacketRobit.java b/src/main/java/mekanism/common/network/PacketRobit.java index 99b6c238c95..15b1bf38085 100644 --- a/src/main/java/mekanism/common/network/PacketRobit.java +++ b/src/main/java/mekanism/common/network/PacketRobit.java @@ -1,7 +1,7 @@ package mekanism.common.network; import io.netty.buffer.ByteBuf; -import mekanism.common.Mekanism; +import javax.annotation.Nullable; import mekanism.common.PacketHandler; import mekanism.common.entity.EntityRobit; import mekanism.common.network.PacketRobit.RobitMessage; @@ -16,37 +16,21 @@ public class PacketRobit implements IMessageHandler { public IMessage onMessage(RobitMessage message, MessageContext context) { EntityPlayer player = PacketHandler.getPlayer(context); PacketHandler.handlePacket(() -> { - if (message.activeType == RobitPacketType.GUI) { - if (message.guiType == 0) { - player.openGui(Mekanism.instance, 21, player.world, message.entityId, 0, 0); - } else if (message.guiType == 1) { - player.openGui(Mekanism.instance, 22, player.world, message.entityId, 0, 0); - } else if (message.guiType == 2) { - player.openGui(Mekanism.instance, 23, player.world, message.entityId, 0, 0); - } else if (message.guiType == 3) { - player.openGui(Mekanism.instance, 24, player.world, message.entityId, 0, 0); - } else if (message.guiType == 4) { - player.openGui(Mekanism.instance, 25, player.world, message.entityId, 0, 0); - } - } else if (message.activeType == RobitPacketType.FOLLOW) { - EntityRobit robit = (EntityRobit) player.world.getEntityByID(message.entityId); - if (robit != null) { - robit.setFollowing(!robit.getFollowing()); - } - } else if (message.activeType == RobitPacketType.NAME) { - EntityRobit robit = (EntityRobit) player.world.getEntityByID(message.entityId); - if (robit != null) { - robit.setCustomNameTag(message.name); - } - } else if (message.activeType == RobitPacketType.GO_HOME) { - EntityRobit robit = (EntityRobit) player.world.getEntityByID(message.entityId); - if (robit != null) { - robit.goHome(); - } - } else if (message.activeType == RobitPacketType.DROP_PICKUP) { - EntityRobit robit = (EntityRobit) player.world.getEntityByID(message.entityId); - if (robit != null) { - robit.setDropPickup(!robit.getDropPickup()); + EntityRobit robit = (EntityRobit) player.world.getEntityByID(message.entityId); + if (robit != null) { + switch (message.activeType) { + case FOLLOW: + robit.setFollowing(!robit.getFollowing()); + break; + case NAME: + robit.setCustomNameTag(message.name); + break; + case GO_HOME: + robit.goHome(); + break; + case DROP_PICKUP: + robit.setDropPickup(!robit.getDropPickup()); + break; } } }, player); @@ -54,7 +38,6 @@ public IMessage onMessage(RobitMessage message, MessageContext context) { } public enum RobitPacketType { - GUI, FOLLOW, NAME, GO_HOME, @@ -65,7 +48,6 @@ public static class RobitMessage implements IMessage { public RobitPacketType activeType; - public int guiType; public int entityId; public String name; @@ -73,68 +55,29 @@ public static class RobitMessage implements IMessage { public RobitMessage() { } - public RobitMessage(RobitPacketType type, int i1, int i2, String s) { + public RobitMessage(RobitPacketType type, int entityId, @Nullable String name) { activeType = type; - switch (activeType) { - case GUI: - guiType = i1; - entityId = i2; - break; - case FOLLOW: - entityId = i1; - break; - case NAME: - name = s; - entityId = i1; - break; - case GO_HOME: - entityId = i1; - break; - case DROP_PICKUP: - entityId = i1; - break; + this.entityId = entityId; + if (activeType == RobitPacketType.NAME) { + this.name = name; } } @Override public void toBytes(ByteBuf dataStream) { dataStream.writeInt(activeType.ordinal()); - switch (activeType) { - case GUI: - dataStream.writeInt(guiType); - dataStream.writeInt(entityId); - break; - case FOLLOW: - dataStream.writeInt(entityId); - break; - case NAME: - PacketHandler.writeString(dataStream, name); - dataStream.writeInt(entityId); - break; - case GO_HOME: - dataStream.writeInt(entityId); - break; - case DROP_PICKUP: - dataStream.writeInt(entityId); - break; + dataStream.writeInt(entityId); + if (activeType == RobitPacketType.NAME) { + PacketHandler.writeString(dataStream, name); } } @Override public void fromBytes(ByteBuf dataStream) { activeType = RobitPacketType.values()[dataStream.readInt()]; - if (activeType == RobitPacketType.GUI) { - guiType = dataStream.readInt(); - entityId = dataStream.readInt(); - } else if (activeType == RobitPacketType.FOLLOW) { - entityId = dataStream.readInt(); - } else if (activeType == RobitPacketType.NAME) { + entityId = dataStream.readInt(); + if (activeType == RobitPacketType.NAME) { name = PacketHandler.readString(dataStream); - entityId = dataStream.readInt(); - } else if (activeType == RobitPacketType.GO_HOME) { - entityId = dataStream.readInt(); - } else if (activeType == RobitPacketType.DROP_PICKUP) { - entityId = dataStream.readInt(); } } } diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index e81b111d58a..80f9329bb5a 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -31,18 +31,13 @@ import mekanism.common.block.states.BlockStateTransmitter.TransmitterType; import mekanism.common.config.MekanismConfig; import mekanism.common.integration.tesla.TeslaIntegration; -import mekanism.common.inventory.InventoryPersonalChest; -import mekanism.common.inventory.container.ContainerPersonalChest; import mekanism.common.item.ItemBlockGasTank; import mekanism.common.item.ItemBlockTransmitter; -import mekanism.common.network.PacketPersonalChest.PersonalChestMessage; -import mekanism.common.network.PacketPersonalChest.PersonalChestPacketType; import mekanism.common.tier.BaseTier; import mekanism.common.tier.FactoryTier; import mekanism.common.tier.GasTankTier; import mekanism.common.tile.TileEntityAdvancedBoundingBlock; import mekanism.common.tile.TileEntityBoundingBlock; -import mekanism.common.tile.TileEntityPersonalChest; import mekanism.common.tile.component.SideConfig; import mekanism.common.util.UnitDisplayUtils.ElectricUnit; import mekanism.common.util.UnitDisplayUtils.TemperatureUnit; @@ -50,6 +45,7 @@ import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.client.gui.FontRenderer; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; @@ -60,6 +56,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing.Axis; +import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; @@ -613,28 +610,22 @@ public static Block getFlowingBlock(Fluid fluid) { } /** - * FML doesn't really do GUIs the way it's supposed to -- opens Electric Chest GUI on client and server. Call this method server-side only! - * - * @param player - player to open GUI - * @param tileEntity - TileEntity of the chest, if it's not an item - * @param inventory - IInventory of the item, if it's not a block - * @param isBlock - whether or not this electric chest is in it's block form + * Encodes current item info as a gui, and opens it. */ - public static void openPersonalChestGui(EntityPlayerMP player, TileEntityPersonalChest tileEntity, InventoryPersonalChest inventory, boolean isBlock) { - player.getNextWindowId(); - player.closeContainer(); - int id = player.currentWindowId; + public static void openItemGui(EntityPlayer player, EnumHand hand, int guiID) { + //current item, hand, gui type + player.openGui(Mekanism.instance, 0, player.world, player.inventory.currentItem, hand.ordinal(), guiID); + } - if (isBlock) { - Mekanism.packetHandler.sendTo(new PersonalChestMessage(PersonalChestPacketType.CLIENT_OPEN, true, 0, id, Coord4D.get(tileEntity), null), player); - } else { - Mekanism.packetHandler.sendTo(new PersonalChestMessage(PersonalChestPacketType.CLIENT_OPEN, false, 0, id, null, inventory.currentHand), player); - } - player.openContainer = new ContainerPersonalChest(player.inventory, tileEntity, inventory, isBlock); - player.openContainer.windowId = id; - player.openContainer.addListener(player); + /** + * Encodes entity info as a gui, and opens it. + */ + public static void openEntityGui(EntityPlayer player, Entity entity, int guiID) { + //entity id, gui type + player.openGui(Mekanism.instance, 1, player.world, entity.getEntityId(), guiID, 0); } + /** * Gets a ResourceLocation with a defined resource type and name. *