From 65561cef3b073bf40fc018484e356edfe84df2ca Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 24 May 2016 21:39:22 +0200 Subject: [PATCH] Consolidate some stuff from controller in other classes. This will make implementing triple clicking easier. --- .../refinedstorage/block/BlockController.java | 2 +- .../refinedstorage/gui/GuiController.java | 9 +- .../gui/GuiCraftingSettings.java | 4 +- .../java/refinedstorage/gui/GuiHandler.java | 1 + .../item/ItemBlockController.java | 2 +- .../refinedstorage/item/ItemWirelessGrid.java | 4 +- .../network/MessageCraftingMonitorCancel.java | 2 +- .../network/MessageGridCraftingStart.java | 2 +- .../network/MessageGridStoragePull.java | 2 +- .../network/MessageGridStoragePush.java | 2 +- .../MessageWirelessGridCraftingStart.java | 4 +- .../network/MessageWirelessGridItems.java | 4 +- .../MessageWirelessGridStoragePull.java | 4 +- .../MessageWirelessGridStoragePush.java | 4 +- .../refinedstorage/proxy/CommonProxy.java | 1 + .../refinedstorage/tile/TileConstructor.java | 1 + .../refinedstorage/tile/TileExporter.java | 1 + .../java/refinedstorage/tile/TileMachine.java | 2 + .../autocrafting/task/BasicCraftingTask.java | 2 +- .../task}/CraftingTaskScheduler.java | 3 +- .../tile/autocrafting/task/ICraftingTask.java | 2 +- .../task/ProcessingCraftingTask.java | 2 +- .../tile/controller/ClientSideMachine.java | 30 ++ .../{ => controller}/ControllerSearcher.java | 4 +- .../tile/controller/StorageHandler.java | 137 +++++++++ .../tile/{ => controller}/TileController.java | 285 +++--------------- .../tile/controller/WirelessGridHandler.java | 103 +++++++ .../refinedstorage/tile/grid/TileGrid.java | 2 +- .../tile/grid/WirelessGrid.java | 4 +- 29 files changed, 349 insertions(+), 276 deletions(-) rename src/main/java/refinedstorage/tile/{ => autocrafting/task}/CraftingTaskScheduler.java (92%) create mode 100755 src/main/java/refinedstorage/tile/controller/ClientSideMachine.java rename src/main/java/refinedstorage/tile/{ => controller}/ControllerSearcher.java (90%) create mode 100755 src/main/java/refinedstorage/tile/controller/StorageHandler.java rename src/main/java/refinedstorage/tile/{ => controller}/TileController.java (68%) create mode 100755 src/main/java/refinedstorage/tile/controller/WirelessGridHandler.java diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index a78e3e467..9d32a195d 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -21,7 +21,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageGui; import refinedstorage.item.ItemBlockController; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.TileController; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index f7647f461..e366a28f7 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -4,7 +4,8 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import refinedstorage.container.ContainerController; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.ClientSideMachine; +import refinedstorage.tile.controller.TileController; import java.util.List; @@ -74,13 +75,13 @@ public class GuiController extends GuiBase { RenderHelper.enableGUIStandardItemLighting(); - List machines = controller.getClientSideMachines(); + List machines = controller.getClientSideMachines(); - TileController.ClientSideMachine machineHovering = null; + ClientSideMachine machineHovering = null; for (int i = 0; i < 4; ++i) { if (slot < machines.size()) { - TileController.ClientSideMachine machine = machines.get(slot); + ClientSideMachine machine = machines.get(slot); drawItem(x, y + 5, machine.stack); diff --git a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java index 39c8ffd54..ce7d80361 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingSettings.java @@ -6,7 +6,7 @@ import net.minecraft.client.gui.GuiTextField; import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.input.Keyboard; import refinedstorage.container.ContainerDummy; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.StorageHandler; import java.io.IOException; @@ -81,7 +81,7 @@ public class GuiCraftingSettings extends GuiBase { private void startRequest() { Integer quantity = Ints.tryParse(amountField.getText()); - if (quantity != null && quantity > 0 && quantity <= TileController.MAX_CRAFTING_QUANTITY_PER_REQUEST) { + if (quantity != null && quantity > 0 && quantity <= StorageHandler.MAX_CRAFTING_PER_REQUEST) { gridGui.getGrid().onCraftingRequested(id, quantity); close(); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 16a136d7b..5901ebc07 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -14,6 +14,7 @@ import refinedstorage.tile.*; import refinedstorage.tile.autocrafting.TileCrafter; import refinedstorage.tile.autocrafting.TileCraftingMonitor; import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder; +import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; import refinedstorage.tile.solderer.TileSolderer; diff --git a/src/main/java/refinedstorage/item/ItemBlockController.java b/src/main/java/refinedstorage/item/ItemBlockController.java index 4e0082a77..76eb8abe1 100755 --- a/src/main/java/refinedstorage/item/ItemBlockController.java +++ b/src/main/java/refinedstorage/item/ItemBlockController.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import refinedstorage.RefinedStorageBlocks; import refinedstorage.block.EnumControllerType; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.TileController; import java.util.List; diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index 33d1e58f2..4c0a7b80c 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -17,7 +17,7 @@ import net.minecraft.util.text.TextComponentString; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; import java.util.List; @@ -137,7 +137,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer { TileEntity tile = world.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack))); if (tile instanceof TileController) { - if (((TileController) tile).onOpenWirelessGrid(player, hand)) { + if (((TileController) tile).getWirelessGridHandler().handleOpen(player, hand)) { return new ActionResult(EnumActionResult.SUCCESS, stack); } else { player.addChatComponentMessage(new TextComponentString(I18n.format("misc.refinedstorage:wireless_grid.out_of_range"))); diff --git a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java index fb06d30a3..7c9d25850 100755 --- a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java +++ b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java @@ -47,7 +47,7 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer implements IMessage { private int controllerX; @@ -48,7 +48,7 @@ public class MessageWirelessGridCraftingStart extends MessageHandlerPlayerToServ TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); if (tile instanceof TileController && ((TileController) tile).mayRun()) { - ((TileController) tile).onCraftingRequested(message.id, message.quantity); + ((TileController) tile).getStorageHandler().handleCraftingRequest(message.id, message.quantity); } } } diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridItems.java b/src/main/java/refinedstorage/network/MessageWirelessGridItems.java index 3bf9e982c..a99ff7824 100755 --- a/src/main/java/refinedstorage/network/MessageWirelessGridItems.java +++ b/src/main/java/refinedstorage/network/MessageWirelessGridItems.java @@ -5,7 +5,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import refinedstorage.storage.ItemGroup; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.WirelessGrid; import java.util.ArrayList; @@ -37,7 +37,7 @@ public class MessageWirelessGridItems implements IMessage, IMessageHandler implements IMessage { private int controllerX; @@ -48,7 +48,7 @@ public class MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); if (tile instanceof TileController && ((TileController) tile).mayRun()) { - ((TileController) tile).handleStoragePull(message.id, message.flags, player); + ((TileController) tile).getStorageHandler().handlePull(message.id, message.flags, player); } } } diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridStoragePush.java b/src/main/java/refinedstorage/network/MessageWirelessGridStoragePush.java index 1254b2291..0aaaa8541 100755 --- a/src/main/java/refinedstorage/network/MessageWirelessGridStoragePush.java +++ b/src/main/java/refinedstorage/network/MessageWirelessGridStoragePush.java @@ -5,7 +5,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.TileController; +import refinedstorage.tile.controller.TileController; public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer implements IMessage { private int controllerX; @@ -48,7 +48,7 @@ public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.controllerX, message.controllerY, message.controllerZ)); if (tile instanceof TileController && ((TileController) tile).mayRun()) { - ((TileController) tile).handleStoragePush(message.playerSlot, message.one, player); + ((TileController) tile).getStorageHandler().handlePush(message.playerSlot, message.one, player); } } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 36c08941a..964fc7319 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -26,6 +26,7 @@ import refinedstorage.tile.*; import refinedstorage.tile.autocrafting.TileCrafter; import refinedstorage.tile.autocrafting.TileCraftingMonitor; import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder; +import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.solderer.*; diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 3093cf230..596daa29a 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -19,6 +19,7 @@ import refinedstorage.container.ContainerConstructor; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.autocrafting.task.CraftingTaskScheduler; import refinedstorage.tile.config.ICompareConfig; public class TileConstructor extends TileMachine implements ICompareConfig { diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index f08f14b0e..770d67410 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -15,6 +15,7 @@ import refinedstorage.container.ContainerExporter; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.autocrafting.task.CraftingTaskScheduler; import refinedstorage.tile.config.ICompareConfig; public class TileExporter extends TileMachine implements ICompareConfig { diff --git a/src/main/java/refinedstorage/tile/TileMachine.java b/src/main/java/refinedstorage/tile/TileMachine.java index 6abc25eee..4a45d8f1f 100755 --- a/src/main/java/refinedstorage/tile/TileMachine.java +++ b/src/main/java/refinedstorage/tile/TileMachine.java @@ -8,6 +8,8 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorageUtils; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; +import refinedstorage.tile.controller.ControllerSearcher; +import refinedstorage.tile.controller.TileController; import java.util.HashSet; import java.util.Set; diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java index c5f94c0ff..e4352ccb3 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/BasicCraftingTask.java @@ -6,8 +6,8 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.common.util.Constants; import refinedstorage.RefinedStorageUtils; -import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; +import refinedstorage.tile.controller.TileController; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/refinedstorage/tile/CraftingTaskScheduler.java b/src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java similarity index 92% rename from src/main/java/refinedstorage/tile/CraftingTaskScheduler.java rename to src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java index 69545b0a4..1fb346249 100755 --- a/src/main/java/refinedstorage/tile/CraftingTaskScheduler.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/CraftingTaskScheduler.java @@ -1,9 +1,10 @@ -package refinedstorage.tile; +package refinedstorage.tile.autocrafting.task; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import refinedstorage.RefinedStorageUtils; import refinedstorage.tile.autocrafting.CraftingPattern; +import refinedstorage.tile.controller.TileController; public class CraftingTaskScheduler { public static String NBT_SCHEDULED = "CraftingTaskScheduled"; diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java index 73f000fd6..aa8ffd06f 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ICraftingTask.java @@ -1,8 +1,8 @@ package refinedstorage.tile.autocrafting.task; import net.minecraft.nbt.NBTTagCompound; -import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; +import refinedstorage.tile.controller.TileController; public interface ICraftingTask { CraftingPattern getPattern(); diff --git a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java index 165f4b31c..836c2dc7a 100755 --- a/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/tile/autocrafting/task/ProcessingCraftingTask.java @@ -6,9 +6,9 @@ import net.minecraft.util.text.TextFormatting; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorageUtils; -import refinedstorage.tile.TileController; import refinedstorage.tile.autocrafting.CraftingPattern; import refinedstorage.tile.autocrafting.TileCrafter; +import refinedstorage.tile.controller.TileController; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; diff --git a/src/main/java/refinedstorage/tile/controller/ClientSideMachine.java b/src/main/java/refinedstorage/tile/controller/ClientSideMachine.java new file mode 100755 index 000000000..5387cccdc --- /dev/null +++ b/src/main/java/refinedstorage/tile/controller/ClientSideMachine.java @@ -0,0 +1,30 @@ +package refinedstorage.tile.controller; + +import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorageUtils; + +public class ClientSideMachine { + public ItemStack stack; + public int amount; + public int energyUsage; + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + + if (!(other instanceof ClientSideMachine)) { + return false; + } + + return energyUsage == ((ClientSideMachine) other).energyUsage && RefinedStorageUtils.compareStack(stack, ((ClientSideMachine) other).stack); + } + + @Override + public int hashCode() { + int result = stack.hashCode(); + result = 31 * result + energyUsage; + return result; + } +} diff --git a/src/main/java/refinedstorage/tile/ControllerSearcher.java b/src/main/java/refinedstorage/tile/controller/ControllerSearcher.java similarity index 90% rename from src/main/java/refinedstorage/tile/ControllerSearcher.java rename to src/main/java/refinedstorage/tile/controller/ControllerSearcher.java index 6f732725a..5c300478b 100755 --- a/src/main/java/refinedstorage/tile/ControllerSearcher.java +++ b/src/main/java/refinedstorage/tile/controller/ControllerSearcher.java @@ -1,9 +1,11 @@ -package refinedstorage.tile; +package refinedstorage.tile.controller; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import refinedstorage.tile.TileMachine; +import refinedstorage.tile.TileRelay; import java.util.Set; diff --git a/src/main/java/refinedstorage/tile/controller/StorageHandler.java b/src/main/java/refinedstorage/tile/controller/StorageHandler.java new file mode 100755 index 000000000..cc02f3b3f --- /dev/null +++ b/src/main/java/refinedstorage/tile/controller/StorageHandler.java @@ -0,0 +1,137 @@ +package refinedstorage.tile.controller; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorageUtils; +import refinedstorage.item.ItemWirelessGrid; +import refinedstorage.network.GridPullFlags; +import refinedstorage.storage.ItemGroup; +import refinedstorage.tile.autocrafting.CraftingPattern; +import refinedstorage.tile.autocrafting.task.ICraftingTask; + +public class StorageHandler { + public static final int MAX_CRAFTING_PER_REQUEST = 500; + + private TileController controller; + + public StorageHandler(TileController controller) { + this.controller = controller; + } + + public void handlePull(int id, int flags, EntityPlayerMP player) { + if (player.inventory.getItemStack() != null) { + return; + } + + if (id < 0 || id > controller.getItemGroups().size() - 1) { + return; + } + + ItemGroup group = controller.getItemGroups().get(id); + + int quantity = 64; + + if (GridPullFlags.isPullingHalf(flags) && group.getQuantity() > 1) { + quantity = group.getQuantity() / 2; + + if (quantity > 32) { + quantity = 32; + } + } else if (GridPullFlags.isPullingOne(flags)) { + quantity = 1; + } else if (GridPullFlags.isPullingWithShift(flags)) { + // NO OP, the quantity already set (64) is needed for shift + } + + if (quantity > group.getType().getItemStackLimit(group.toStack())) { + quantity = group.getType().getItemStackLimit(group.toStack()); + } + + ItemStack took = controller.take(group.copy(quantity).toStack()); + + if (took != null) { + if (GridPullFlags.isPullingWithShift(flags)) { + if (!player.inventory.addItemStackToInventory(took.copy())) { + controller.push(took); + } + } else { + player.inventory.setItemStack(took); + player.updateHeldItem(); + } + + controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PULL); + } + } + + public void handlePush(int playerSlot, boolean one, EntityPlayerMP player) { + ItemStack stack; + + if (playerSlot == -1) { + stack = player.inventory.getItemStack().copy(); + + if (one) { + stack.stackSize = 1; + } + } else { + stack = player.inventory.getStackInSlot(playerSlot); + } + + if (stack != null) { + boolean success = controller.push(stack); + + if (success) { + if (playerSlot == -1) { + if (one) { + player.inventory.getItemStack().stackSize--; + + if (player.inventory.getItemStack().stackSize == 0) { + player.inventory.setItemStack(null); + } + } else { + player.inventory.setItemStack(null); + } + + player.updateHeldItem(); + } else { + player.inventory.setInventorySlotContents(playerSlot, null); + } + } + + controller.getWirelessGridHandler().drainEnergy(player, ItemWirelessGrid.USAGE_PUSH); + } + } + + public void handleCraftingRequest(int id, int quantity) { + if (id >= 0 && id < controller.getItemGroups().size() && quantity > 0 && quantity <= MAX_CRAFTING_PER_REQUEST) { + ItemStack requested = controller.getItemGroups().get(id).toStack(); + int quantityPerRequest = 0; + CraftingPattern pattern = controller.getPattern(requested); + + if (pattern != null) { + for (ItemStack output : pattern.getOutputs()) { + if (RefinedStorageUtils.compareStackNoQuantity(requested, output)) { + quantityPerRequest = output.stackSize; + + break; + } + } + + while (quantity > 0) { + controller.addCraftingTask(pattern); + + quantity -= quantityPerRequest; + } + } + } + } + + public void handleCraftingCancel(int id) { + if (id >= 0 && id < controller.getCraftingTasks().size()) { + controller.cancelCraftingTask(controller.getCraftingTasks().get(id)); + } else if (id == -1) { + for (ICraftingTask task : controller.getCraftingTasks()) { + controller.cancelCraftingTask(task); + } + } + } +} diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java similarity index 68% rename from src/main/java/refinedstorage/tile/TileController.java rename to src/main/java/refinedstorage/tile/controller/TileController.java index 1c3a4127b..9adaa0471 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -1,31 +1,30 @@ -package refinedstorage.tile; +package refinedstorage.tile.controller; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import io.netty.buffer.ByteBuf; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.*; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.RefinedStorageUtils; import refinedstorage.block.BlockController; import refinedstorage.block.EnumControllerType; import refinedstorage.container.ContainerController; import refinedstorage.item.ItemPattern; -import refinedstorage.item.ItemWirelessGrid; -import refinedstorage.network.GridPullFlags; -import refinedstorage.network.MessageWirelessGridItems; import refinedstorage.storage.IStorage; import refinedstorage.storage.IStorageProvider; import refinedstorage.storage.ItemGroup; +import refinedstorage.tile.ISynchronizedContainer; +import refinedstorage.tile.TileBase; +import refinedstorage.tile.TileMachine; +import refinedstorage.tile.TileWirelessTransmitter; import refinedstorage.tile.autocrafting.CraftingPattern; import refinedstorage.tile.autocrafting.TileCrafter; import refinedstorage.tile.autocrafting.task.BasicCraftingTask; @@ -33,50 +32,23 @@ import refinedstorage.tile.autocrafting.task.ICraftingTask; import refinedstorage.tile.autocrafting.task.ProcessingCraftingTask; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; -import refinedstorage.tile.grid.WirelessGridConsumer; import java.util.*; public class TileController extends TileBase implements IEnergyReceiver, ISynchronizedContainer, IRedstoneModeConfig { - public class ClientSideMachine { - public ItemStack stack; - public int amount; - public int energyUsage; - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - - if (!(other instanceof ClientSideMachine)) { - return false; - } - - return energyUsage == ((ClientSideMachine) other).energyUsage && RefinedStorageUtils.compareStack(stack, ((ClientSideMachine) other).stack); - } - - @Override - public int hashCode() { - int result = stack.hashCode(); - result = 31 * result + energyUsage; - return result; - } - } - public static final int ENERGY_CAPACITY = 32000; public static final String NBT_CRAFTING_TASKS = "CraftingTasks"; public static final String NBT_ENERGY = "Energy"; - public static final int MAX_CRAFTING_QUANTITY_PER_REQUEST = 500; - private EnumControllerType type; + private StorageHandler storageHandler = new StorageHandler(this); + private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); + private List itemGroups = new ArrayList(); + private List storages = new ArrayList(); - private List wirelessGridConsumers = new ArrayList(); - private List wirelessGridConsumersToRemove = new ArrayList(); private Set combinedGroupsIndices = new HashSet(); private List combinedGroups = new ArrayList(); @@ -97,20 +69,12 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY); private int energyUsage; + private int wirelessGridRange; + private boolean couldRun; private long lastEnergyUpdate; - private int wirelessGridRange; - - public void addMachine(TileMachine machine) { - machinesToAdd.add(machine); - } - - public void removeMachine(TileMachine machine) { - machinesToRemove.add(machine); - } - @Override public void update() { super.update(); @@ -169,22 +133,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER); } - wirelessGridConsumers.removeAll(wirelessGridConsumersToRemove); - wirelessGridConsumersToRemove.clear(); - - Iterator gridConsumerIterator = wirelessGridConsumers.iterator(); - - while (gridConsumerIterator.hasNext()) { - WirelessGridConsumer consumer = gridConsumerIterator.next(); - - if (!RefinedStorageUtils.compareStack(consumer.getWirelessGrid(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { - consumer.getPlayer().closeScreen(); // This will call onContainerClosed on the Container and remove it from the list - } else { - if (mayRun()) { - RefinedStorage.NETWORK.sendTo(new MessageWirelessGridItems(this), (EntityPlayerMP) consumer.getPlayer()); - } - } - } + wirelessGridHandler.update(); if (getType() == EnumControllerType.NORMAL && energyUsage > 0) { if (energy.getEnergyStored() - energyUsage >= 0) { @@ -256,6 +205,15 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr syncItems(); } + + public void addMachine(TileMachine machine) { + machinesToAdd.add(machine); + } + + public void removeMachine(TileMachine machine) { + machinesToRemove.add(machine); + } + public EnumControllerType getType() { if (type == null && worldObj.getBlockState(pos).getBlock() == RefinedStorageBlocks.CONTROLLER) { this.type = (EnumControllerType) worldObj.getBlockState(pos).getValue(BlockController.TYPE); @@ -264,6 +222,14 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr return type == null ? EnumControllerType.NORMAL : type; } + public StorageHandler getStorageHandler() { + return storageHandler; + } + + public WirelessGridHandler getWirelessGridHandler() { + return wirelessGridHandler; + } + public int getWirelessGridRange() { return wirelessGridRange; } @@ -280,6 +246,14 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr return itemGroups; } + public void writeItemGroups(ByteBuf buf) { + buf.writeInt(itemGroups.size()); + + for (ItemGroup group : itemGroups) { + group.toBytes(buf, itemGroups.indexOf(group)); + } + } + public List getCraftingTasks() { return craftingTasks; } @@ -439,62 +413,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr energy.setEnergyStored(amount); } - public boolean onOpenWirelessGrid(EntityPlayer player, EnumHand hand) { - boolean inRange = (int) Math.sqrt(Math.pow(getPos().getX() - player.posX, 2) + Math.pow(getPos().getY() - player.posY, 2) + Math.pow(getPos().getZ() - player.posZ, 2)) < getWirelessGridRange(); - - if (!inRange) { - return false; - } - - wirelessGridConsumers.add(new WirelessGridConsumer(player, hand, player.getHeldItem(hand))); - - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, worldObj, RefinedStorageUtils.getIdFromHand(hand), 0, 0); - - drainEnergyFromWirelessGrid(player, ItemWirelessGrid.USAGE_OPEN); - - return true; - } - - public void onCloseWirelessGrid(EntityPlayer player) { - WirelessGridConsumer consumer = getWirelessGridConsumer(player); - - if (consumer != null) { - wirelessGridConsumersToRemove.add(consumer); - } - } - - public void drainEnergyFromWirelessGrid(EntityPlayer player, int energy) { - WirelessGridConsumer consumer = getWirelessGridConsumer(player); - - if (consumer != null) { - ItemWirelessGrid item = RefinedStorageItems.WIRELESS_GRID; - ItemStack held = consumer.getPlayer().getHeldItem(consumer.getHand()); - - if (held.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { - item.extractEnergy(held, energy, false); - - if (item.getEnergyStored(held) <= 0) { - onCloseWirelessGrid(player); - consumer.getPlayer().closeScreen(); - } - } - } - } - - public WirelessGridConsumer getWirelessGridConsumer(EntityPlayer player) { - Iterator it = wirelessGridConsumers.iterator(); - - while (it.hasNext()) { - WirelessGridConsumer consumer = it.next(); - - if (consumer.getPlayer() == player) { - return consumer; - } - } - - return null; - } - @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); @@ -688,129 +606,4 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr public Class getContainer() { return ContainerController.class; } - - public void handleStoragePull(int id, int flags, EntityPlayerMP player) { - if (player.inventory.getItemStack() != null) { - return; - } - - if (id < 0 || id > itemGroups.size() - 1) { - return; - } - - ItemGroup group = itemGroups.get(id); - - int quantity = 64; - - if (GridPullFlags.isPullingHalf(flags) && group.getQuantity() > 1) { - quantity = group.getQuantity() / 2; - - if (quantity > 32) { - quantity = 32; - } - } else if (GridPullFlags.isPullingOne(flags)) { - quantity = 1; - } else if (GridPullFlags.isPullingWithShift(flags)) { - // NO OP, the quantity already set (64) is needed for shift - } - - if (quantity > group.getType().getItemStackLimit(group.toStack())) { - quantity = group.getType().getItemStackLimit(group.toStack()); - } - - ItemStack took = take(group.copy(quantity).toStack()); - - if (took != null) { - if (GridPullFlags.isPullingWithShift(flags)) { - if (!player.inventory.addItemStackToInventory(took.copy())) { - push(took); - } - } else { - player.inventory.setItemStack(took); - player.updateHeldItem(); - } - - drainEnergyFromWirelessGrid(player, ItemWirelessGrid.USAGE_PULL); - } - } - - public void handleStoragePush(int playerSlot, boolean one, EntityPlayerMP player) { - ItemStack stack; - - if (playerSlot == -1) { - stack = player.inventory.getItemStack().copy(); - - if (one) { - stack.stackSize = 1; - } - } else { - stack = player.inventory.getStackInSlot(playerSlot); - } - - if (stack != null) { - boolean success = push(stack); - - if (success) { - if (playerSlot == -1) { - if (one) { - player.inventory.getItemStack().stackSize--; - - if (player.inventory.getItemStack().stackSize == 0) { - player.inventory.setItemStack(null); - } - } else { - player.inventory.setItemStack(null); - } - - player.updateHeldItem(); - } else { - player.inventory.setInventorySlotContents(playerSlot, null); - } - } - - drainEnergyFromWirelessGrid(player, ItemWirelessGrid.USAGE_PUSH); - } - } - - public void sendItemGroups(ByteBuf buf) { - buf.writeInt(getItemGroups().size()); - - for (ItemGroup group : getItemGroups()) { - group.toBytes(buf, getItemGroups().indexOf(group)); - } - } - - public void onCraftingRequested(int id, int quantity) { - if (id >= 0 && id < itemGroups.size() && quantity > 0 && quantity <= MAX_CRAFTING_QUANTITY_PER_REQUEST) { - ItemStack requested = itemGroups.get(id).toStack(); - int quantityPerRequest = 0; - CraftingPattern pattern = getPattern(requested); - - if (pattern != null) { - for (ItemStack output : pattern.getOutputs()) { - if (RefinedStorageUtils.compareStackNoQuantity(requested, output)) { - quantityPerRequest = output.stackSize; - - break; - } - } - - while (quantity > 0) { - addCraftingTask(pattern); - - quantity -= quantityPerRequest; - } - } - } - } - - public void onCraftingTaskCancelRequested(int id) { - if (id >= 0 && id < craftingTasks.size()) { - cancelCraftingTask(craftingTasks.get(id)); - } else if (id == -1) { - for (ICraftingTask task : craftingTasks) { - cancelCraftingTask(task); - } - } - } } diff --git a/src/main/java/refinedstorage/tile/controller/WirelessGridHandler.java b/src/main/java/refinedstorage/tile/controller/WirelessGridHandler.java new file mode 100755 index 000000000..194d5d349 --- /dev/null +++ b/src/main/java/refinedstorage/tile/controller/WirelessGridHandler.java @@ -0,0 +1,103 @@ +package refinedstorage.tile.controller; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.RefinedStorageItems; +import refinedstorage.RefinedStorageUtils; +import refinedstorage.item.ItemWirelessGrid; +import refinedstorage.network.MessageWirelessGridItems; +import refinedstorage.tile.grid.WirelessGridConsumer; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class WirelessGridHandler { + private TileController controller; + + private List consumers = new ArrayList(); + private List consumersToRemove = new ArrayList(); + + public WirelessGridHandler(TileController controller) { + this.controller = controller; + } + + public void update() { + consumers.removeAll(consumersToRemove); + consumersToRemove.clear(); + + Iterator it = consumers.iterator(); + + while (it.hasNext()) { + WirelessGridConsumer consumer = it.next(); + + if (!RefinedStorageUtils.compareStack(consumer.getWirelessGrid(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { + consumer.getPlayer().closeScreen(); // This will call onContainerClosed on the Container and remove it from the list + } else { + if (controller.mayRun()) { + RefinedStorage.NETWORK.sendTo(new MessageWirelessGridItems(controller), (EntityPlayerMP) consumer.getPlayer()); + } + } + } + } + + public boolean handleOpen(EntityPlayer player, EnumHand hand) { + int distance = (int) Math.sqrt(Math.pow(controller.getPos().getX() - player.posX, 2) + Math.pow(controller.getPos().getY() - player.posY, 2) + Math.pow(controller.getPos().getZ() - player.posZ, 2)); + + if (distance > controller.getWirelessGridRange()) { + return false; + } + + consumers.add(new WirelessGridConsumer(player, hand, player.getHeldItem(hand))); + + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, controller.getWorld(), RefinedStorageUtils.getIdFromHand(hand), 0, 0); + + drainEnergy(player, ItemWirelessGrid.USAGE_OPEN); + + return true; + } + + public void handleClose(EntityPlayer player) { + WirelessGridConsumer consumer = getConsumer(player); + + if (consumer != null) { + consumersToRemove.add(consumer); + } + } + + public void drainEnergy(EntityPlayer player, int energy) { + WirelessGridConsumer consumer = getConsumer(player); + + if (consumer != null) { + ItemWirelessGrid item = RefinedStorageItems.WIRELESS_GRID; + ItemStack held = consumer.getPlayer().getHeldItem(consumer.getHand()); + + if (held.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { + item.extractEnergy(held, energy, false); + + if (item.getEnergyStored(held) <= 0) { + handleClose(player); + consumer.getPlayer().closeScreen(); + } + } + } + } + + public WirelessGridConsumer getConsumer(EntityPlayer player) { + Iterator it = consumers.iterator(); + + while (it.hasNext()) { + WirelessGridConsumer consumer = it.next(); + + if (consumer.getPlayer() == player) { + return consumer; + } + } + + return null; + } +} diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 0be5b9942..2c29fb899 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -337,7 +337,7 @@ public class TileGrid extends TileMachine implements IGrid { buf.writeInt(searchBoxMode); if (connected) { - controller.sendItemGroups(buf); + controller.writeItemGroups(buf); } else { buf.writeInt(0); } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 08843539f..d0eeebd99 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -14,8 +14,8 @@ import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.network.MessageWirelessGridStoragePull; import refinedstorage.network.MessageWirelessGridStoragePush; import refinedstorage.storage.ItemGroup; -import refinedstorage.tile.TileController; import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.controller.TileController; import java.util.ArrayList; import java.util.List; @@ -62,7 +62,7 @@ public class WirelessGrid implements IGrid { TileEntity tile = player.worldObj.getTileEntity(new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack))); if (tile instanceof TileController) { - ((TileController) tile).onCloseWirelessGrid(player); + ((TileController) tile).getWirelessGridHandler().handleClose(player); } }