Consolidate some stuff from controller in other classes. This will make implementing triple clicking easier.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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<TileController.ClientSideMachine> machines = controller.getClientSideMachines();
|
||||
List<ClientSideMachine> 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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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")));
|
||||
|
||||
@@ -47,7 +47,7 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer<M
|
||||
TileCraftingMonitor craftingMonitor = (TileCraftingMonitor) tile;
|
||||
|
||||
if (craftingMonitor.isConnected()) {
|
||||
craftingMonitor.getController().onCraftingTaskCancelRequested(message.id);
|
||||
craftingMonitor.getController().getStorageHandler().handleCraftingCancel(message.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer<Messa
|
||||
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.gridX, message.gridY, message.gridZ));
|
||||
|
||||
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
|
||||
((TileGrid) tile).getController().onCraftingRequested(message.id, message.quantity);
|
||||
((TileGrid) tile).getController().getStorageHandler().handleCraftingRequest(message.id, message.quantity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class MessageGridStoragePull extends MessageHandlerPlayerToServer<Message
|
||||
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.gridX, message.gridY, message.gridZ));
|
||||
|
||||
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
|
||||
((TileGrid) tile).getController().handleStoragePull(message.id, message.flags, player);
|
||||
((TileGrid) tile).getController().getStorageHandler().handlePull(message.id, message.flags, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class MessageGridStoragePush extends MessageHandlerPlayerToServer<Message
|
||||
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.gridX, message.gridY, message.gridZ));
|
||||
|
||||
if (tile instanceof TileGrid && ((TileGrid) tile).isConnected()) {
|
||||
((TileGrid) tile).getController().handleStoragePush(message.playerSlot, message.one, player);
|
||||
((TileGrid) tile).getController().getStorageHandler().handlePush(message.playerSlot, message.one, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 MessageWirelessGridCraftingStart extends MessageHandlerPlayerToServer<MessageWirelessGridCraftingStart> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Messa
|
||||
|
||||
@Override
|
||||
public void toBytes(ByteBuf buf) {
|
||||
controller.sendItemGroups(buf);
|
||||
controller.writeItemGroups(buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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 MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer<MessageWirelessGridStoragePull> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MessageWirelessGridStoragePush> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.*;
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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";
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
30
src/main/java/refinedstorage/tile/controller/ClientSideMachine.java
Executable file
30
src/main/java/refinedstorage/tile/controller/ClientSideMachine.java
Executable file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
137
src/main/java/refinedstorage/tile/controller/StorageHandler.java
Executable file
137
src/main/java/refinedstorage/tile/controller/StorageHandler.java
Executable file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<ItemGroup> itemGroups = new ArrayList<ItemGroup>();
|
||||
|
||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
||||
private List<WirelessGridConsumer> wirelessGridConsumers = new ArrayList<WirelessGridConsumer>();
|
||||
private List<WirelessGridConsumer> wirelessGridConsumersToRemove = new ArrayList<WirelessGridConsumer>();
|
||||
|
||||
private Set<Integer> combinedGroupsIndices = new HashSet<Integer>();
|
||||
private List<ItemGroup> combinedGroups = new ArrayList<ItemGroup>();
|
||||
@@ -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<WirelessGridConsumer> 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<ICraftingTask> 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<WirelessGridConsumer> 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<? extends Container> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
103
src/main/java/refinedstorage/tile/controller/WirelessGridHandler.java
Executable file
103
src/main/java/refinedstorage/tile/controller/WirelessGridHandler.java
Executable file
@@ -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<WirelessGridConsumer> consumers = new ArrayList<WirelessGridConsumer>();
|
||||
private List<WirelessGridConsumer> consumersToRemove = new ArrayList<WirelessGridConsumer>();
|
||||
|
||||
public WirelessGridHandler(TileController controller) {
|
||||
this.controller = controller;
|
||||
}
|
||||
|
||||
public void update() {
|
||||
consumers.removeAll(consumersToRemove);
|
||||
consumersToRemove.clear();
|
||||
|
||||
Iterator<WirelessGridConsumer> 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<WirelessGridConsumer> it = consumers.iterator();
|
||||
|
||||
while (it.hasNext()) {
|
||||
WirelessGridConsumer consumer = it.next();
|
||||
|
||||
if (consumer.getPlayer() == player) {
|
||||
return consumer;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user