From fad9b46b4d97ab1d1c76e7788e63a0d6c9141058 Mon Sep 17 00:00:00 2001 From: DarkGuardsman Date: Sat, 30 Nov 2013 05:47:27 -0500 Subject: [PATCH] Got encoder working Well not fully but it can send the program to the client. The client can remove and edit parts of the program. Though some changes don't save due to the task not being fully setup yet. --- src/dark/api/al/coding/TaskRegistry.java | 20 ++-- src/dark/assembly/AssemblyLine.java | 49 ++++++++-- src/dark/assembly/armbot/Program.java | 46 +++++---- .../armbot/command/TaskGrabEntity.java | 2 +- .../assembly/armbot/command/TaskIdle.java | 18 +++- .../assembly/armbot/command/TaskRotateTo.java | 4 +- .../assembly/armbot/command/TaskTake.java | 4 +- src/dark/assembly/armbot/command/TaskUse.java | 4 +- src/dark/assembly/client/gui/GuiEditTask.java | 29 ++++-- .../assembly/client/gui/GuiEncoderCoder.java | 87 ++++++++++------- src/dark/assembly/client/gui/GuiTaskList.java | 29 ++++-- .../machine/encoder/TileEntityEncoder.java | 97 +++++++++++++------ 12 files changed, 258 insertions(+), 131 deletions(-) diff --git a/src/dark/api/al/coding/TaskRegistry.java b/src/dark/api/al/coding/TaskRegistry.java index 38a42654..0264fe91 100644 --- a/src/dark/api/al/coding/TaskRegistry.java +++ b/src/dark/api/al/coding/TaskRegistry.java @@ -6,19 +6,19 @@ import java.util.List; import java.util.Map.Entry; /** Used to both register task and fake machines for the encoder to use to create new programs. - * + * * @author DarkGuardsman */ public class TaskRegistry { /** A class of all available commands. - * + * * String - Command name. Command - The actual command class. */ - private static final HashMap COMMANDS = new HashMap(); + private static final HashMap COMMANDS = new HashMap(); private static final HashMap SUDO_BOTS = new HashMap(); /** Registers a command and tells armbots that it exists */ - public static void registerCommand(IProcessTask task) + public static void registerCommand(ITask task) { if (!COMMANDS.containsKey(task.getMethodName())) { @@ -35,9 +35,9 @@ public class TaskRegistry } /** returns the first command with the same name */ - public static IProcessTask getCommand(String name) + public static ITask getCommand(String name) { - for (Entry command : COMMANDS.entrySet()) + for (Entry command : COMMANDS.entrySet()) { if (command.getKey().equalsIgnoreCase(name)) { @@ -48,10 +48,10 @@ public class TaskRegistry } /** Gets all commands with the given name though there should only be one */ - public static List getCommands(String name) + public static List getCommands(String name) { - List tasks = new ArrayList(); - for (Entry command : COMMANDS.entrySet()) + List tasks = new ArrayList(); + for (Entry command : COMMANDS.entrySet()) { if (command.getValue().getMethodName().equalsIgnoreCase(name)) { @@ -72,7 +72,7 @@ public class TaskRegistry } /** Do not edit the return or you will change the behavior of all machine that use this list - * + * * @return The list of registered sudo machines for the encoder to check against */ public static HashMap getSudoMachines() { diff --git a/src/dark/assembly/AssemblyLine.java b/src/dark/assembly/AssemblyLine.java index 537ef930..cfb75e33 100644 --- a/src/dark/assembly/AssemblyLine.java +++ b/src/dark/assembly/AssemblyLine.java @@ -23,12 +23,28 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; +import dark.api.al.coding.TaskRegistry; import dark.assembly.armbot.BlockArmbot; -import dark.assembly.armbot.TileEntityArmbot; +import dark.assembly.armbot.command.TaskBreak; +import dark.assembly.armbot.command.TaskDrop; +import dark.assembly.armbot.command.TaskEnd; +import dark.assembly.armbot.command.TaskFire; +import dark.assembly.armbot.command.TaskGOTO; +import dark.assembly.armbot.command.TaskGive; +import dark.assembly.armbot.command.TaskGrabEntity; +import dark.assembly.armbot.command.TaskGrabItem; +import dark.assembly.armbot.command.TaskHarvest; +import dark.assembly.armbot.command.TaskIF; +import dark.assembly.armbot.command.TaskIdle; +import dark.assembly.armbot.command.TaskPlace; +import dark.assembly.armbot.command.TaskReturn; +import dark.assembly.armbot.command.TaskRotateBy; +import dark.assembly.armbot.command.TaskRotateTo; +import dark.assembly.armbot.command.TaskStart; +import dark.assembly.armbot.command.TaskTake; +import dark.assembly.armbot.command.TaskUse; import dark.assembly.imprinter.BlockImprinter; import dark.assembly.imprinter.ItemImprinter; -import dark.assembly.imprinter.TileEntityImprinter; import dark.assembly.machine.BlockCrate; import dark.assembly.machine.BlockDetector; import dark.assembly.machine.BlockManipulator; @@ -36,15 +52,9 @@ import dark.assembly.machine.BlockRejector; import dark.assembly.machine.BlockTurntable; import dark.assembly.machine.ItemBlockCrate; import dark.assembly.machine.TileEntityAssembly; -import dark.assembly.machine.TileEntityCrate; -import dark.assembly.machine.TileEntityDetector; -import dark.assembly.machine.TileEntityManipulator; -import dark.assembly.machine.TileEntityRejector; import dark.assembly.machine.belt.BlockConveyorBelt; -import dark.assembly.machine.belt.TileEntityConveyorBelt; import dark.assembly.machine.encoder.BlockEncoder; import dark.assembly.machine.encoder.ItemDisk; -import dark.assembly.machine.encoder.TileEntityEncoder; import dark.assembly.machine.processor.BlockProcessor; import dark.assembly.machine.red.BlockAdvancedHopper; import dark.core.common.DMCreativeTab; @@ -100,6 +110,25 @@ public class AssemblyLine extends ModPrefab NetworkRegistry.instance().registerGuiHandler(this, proxy); proxy.preInit(); + + TaskRegistry.registerCommand(new TaskDrop()); + TaskRegistry.registerCommand(new TaskGive()); + TaskRegistry.registerCommand(new TaskTake()); + TaskRegistry.registerCommand(new TaskGrabItem()); + TaskRegistry.registerCommand(new TaskGrabEntity()); + TaskRegistry.registerCommand(new TaskRotateBy()); + TaskRegistry.registerCommand(new TaskRotateTo()); + TaskRegistry.registerCommand(new TaskUse()); + TaskRegistry.registerCommand(new TaskIF()); + TaskRegistry.registerCommand(new TaskGOTO()); + TaskRegistry.registerCommand(new TaskReturn()); + TaskRegistry.registerCommand(new TaskEnd()); + TaskRegistry.registerCommand(new TaskFire()); + TaskRegistry.registerCommand(new TaskHarvest()); + TaskRegistry.registerCommand(new TaskPlace()); + TaskRegistry.registerCommand(new TaskBreak()); + TaskRegistry.registerCommand(new TaskStart()); + TaskRegistry.registerCommand(new TaskIdle()); } @Override @@ -112,7 +141,7 @@ public class AssemblyLine extends ModPrefab FMLog.info("Loaded: " + TranslationHelper.loadLanguages(LANGUAGE_PATH, LANGUAGES_SUPPORTED) + " languages."); DMCreativeTab.tabAutomation.setIconItemStack(new ItemStack(ALRecipeLoader.blockConveyorBelt)); } - + @Override @EventHandler public void postInit(FMLPostInitializationEvent event) diff --git a/src/dark/assembly/armbot/Program.java b/src/dark/assembly/armbot/Program.java index 3bd329e9..72604130 100644 --- a/src/dark/assembly/armbot/Program.java +++ b/src/dark/assembly/armbot/Program.java @@ -248,14 +248,12 @@ public class Program implements IProgram { entry.getValue().setPosition(entry.getKey().intX(), entry.getKey().intY()); NBTTagCompound task = entry.getValue().save(new NBTTagCompound()); - if (entry.getKey().equals(new Vector2(this.currentTask.getCol(), this.currentTask.getRow()))) + if (this.currentTask != null && entry.getKey().equals(new Vector2(this.currentTask.getCol(), this.currentTask.getRow()))) { task.setBoolean("currentTask", true); entry.getValue().saveProgress(task); } task.setString("methodName", entry.getValue().getMethodName()); - task.setInteger("positionX", entry.getKey().intX()); - task.setInteger("positionY", entry.getKey().intY()); taskList.appendTag(task); } nbt.setTag("tasks", taskList); @@ -277,30 +275,36 @@ public class Program implements IProgram for (int s = 0; s < taskList.tagCount(); ++s) { NBTTagCompound tag = (NBTTagCompound) taskList.tagAt(s); - ITask task = TaskRegistry.getCommand(tag.getString("methodName")); - if (task != null) + if (tag.hasKey("methodName")) { - task = task.clone(); + ITask task = TaskRegistry.getCommand(tag.getString("methodName")); if (task != null) { - task.load(tag); - task.setPosition(nbt.getInteger("positionX"), nbt.getInteger("positionY")); - this.tasks.put(new Vector2(task.getCol(), task.getRow()), task); - if (tag.getBoolean("currentTask")) + task = task.clone(); + if (task != null) { - this.currentTask = task; - task.loadProgress(tag); - this.currentPos = new Vector2(task.getCol(), task.getRow()); - } - if (task.getCol() > this.width) - { - this.width = task.getCol(); - } - if (task.getRow() > this.hight) - { - this.hight = task.getRow(); + task.load(tag); + if (tag.getBoolean("currentTask")) + { + this.currentTask = task; + task.loadProgress(tag); + this.currentPos = new Vector2(task.getCol(), task.getRow()); + } + this.tasks.put(new Vector2(task.getCol(), task.getRow()), task); + if (task.getCol() > this.width) + { + this.width = task.getCol(); + } + if (task.getRow() > this.hight) + { + this.hight = task.getRow(); + } } } + else + { + System.out.println("[CoreMachine]Error: failed to load task " + tag.getString("methodName")); + } } } taskList = nbt.getTagList("vars"); diff --git a/src/dark/assembly/armbot/command/TaskGrabEntity.java b/src/dark/assembly/armbot/command/TaskGrabEntity.java index e3424018..2f6cf39a 100644 --- a/src/dark/assembly/armbot/command/TaskGrabEntity.java +++ b/src/dark/assembly/armbot/command/TaskGrabEntity.java @@ -27,7 +27,7 @@ public class TaskGrabEntity extends TaskGrabPrefab { super("Grab-Entity"); this.defautlArguments.add(new ArgumentData("child", false)); - this.defautlArguments.add(new ArgumentListData>("Entity", Entity.class, (Class[]) EntityDictionary.getList().toArray(new Object[1]))); + //this.defautlArguments.add(new ArgumentListData>("Entity", Entity.class, (Class[]) EntityDictionary.getList().toArray(new Object[1]))); } @Override diff --git a/src/dark/assembly/armbot/command/TaskIdle.java b/src/dark/assembly/armbot/command/TaskIdle.java index f9ad8008..3bde17f1 100644 --- a/src/dark/assembly/armbot/command/TaskIdle.java +++ b/src/dark/assembly/armbot/command/TaskIdle.java @@ -51,12 +51,27 @@ public class TaskIdle extends TaskBaseProcess return ProcessReturn.DONE; } + @Override + public TaskBaseProcess load(NBTTagCompound taskCompound) + { + super.load(taskCompound); + this.totalIdleTime = taskCompound.getInteger("idleTotal"); + return this; + } + + @Override + public NBTTagCompound save(NBTTagCompound taskCompound) + { + super.save(taskCompound); + taskCompound.setInteger("idleTotal", this.totalIdleTime); + return taskCompound; + } + @Override public TaskBaseProcess loadProgress(NBTTagCompound taskCompound) { super.loadProgress(taskCompound); this.idleTime = taskCompound.getInteger("idleTime"); - this.totalIdleTime = taskCompound.getInteger("idleTotal"); return this; } @@ -65,7 +80,6 @@ public class TaskIdle extends TaskBaseProcess { super.saveProgress(taskCompound); taskCompound.setInteger("idleTime", this.idleTime); - taskCompound.setInteger("idleTotal", this.totalIdleTime); return taskCompound; } diff --git a/src/dark/assembly/armbot/command/TaskRotateTo.java b/src/dark/assembly/armbot/command/TaskRotateTo.java index b9eaaa8f..df2c61c9 100644 --- a/src/dark/assembly/armbot/command/TaskRotateTo.java +++ b/src/dark/assembly/armbot/command/TaskRotateTo.java @@ -72,7 +72,7 @@ public class TaskRotateTo extends TaskBaseArmbot @Override public TaskRotateTo load(NBTTagCompound taskCompound) { - super.loadProgress(taskCompound); + super.load(taskCompound); this.targetRotationPitch = taskCompound.getInteger("rotPitch"); this.targetRotationYaw = taskCompound.getInteger("rotYaw"); return this; @@ -81,7 +81,7 @@ public class TaskRotateTo extends TaskBaseArmbot @Override public NBTTagCompound save(NBTTagCompound taskCompound) { - super.saveProgress(taskCompound); + super.save(taskCompound); taskCompound.setInteger("rotPitch", this.targetRotationPitch); taskCompound.setInteger("rotYaw", this.targetRotationYaw); return taskCompound; diff --git a/src/dark/assembly/armbot/command/TaskTake.java b/src/dark/assembly/armbot/command/TaskTake.java index 86f2b781..b9cd7d7b 100644 --- a/src/dark/assembly/armbot/command/TaskTake.java +++ b/src/dark/assembly/armbot/command/TaskTake.java @@ -88,7 +88,7 @@ public class TaskTake extends TaskBaseArmbot @Override public TaskTake load(NBTTagCompound taskCompound) { - super.loadProgress(taskCompound); + super.load(taskCompound); this.stack = ItemStack.loadItemStackFromNBT(taskCompound.getCompoundTag("item")); return this; } @@ -96,7 +96,7 @@ public class TaskTake extends TaskBaseArmbot @Override public NBTTagCompound save(NBTTagCompound taskCompound) { - super.saveProgress(taskCompound); + super.save(taskCompound); if (stack != null) { NBTTagCompound tag = new NBTTagCompound(); diff --git a/src/dark/assembly/armbot/command/TaskUse.java b/src/dark/assembly/armbot/command/TaskUse.java index b2de72d8..08f82125 100644 --- a/src/dark/assembly/armbot/command/TaskUse.java +++ b/src/dark/assembly/armbot/command/TaskUse.java @@ -89,7 +89,7 @@ public class TaskUse extends TaskBaseArmbot @Override public TaskUse load(NBTTagCompound taskCompound) { - super.loadProgress(taskCompound); + super.load(taskCompound); this.times = taskCompound.getInteger("useTimes"); return this; @@ -98,7 +98,7 @@ public class TaskUse extends TaskBaseArmbot @Override public NBTTagCompound save(NBTTagCompound taskCompound) { - super.saveProgress(taskCompound); + super.save(taskCompound); taskCompound.setInteger("useTimes", this.times); return taskCompound; diff --git a/src/dark/assembly/client/gui/GuiEditTask.java b/src/dark/assembly/client/gui/GuiEditTask.java index e4387fd8..5e5ddb78 100644 --- a/src/dark/assembly/client/gui/GuiEditTask.java +++ b/src/dark/assembly/client/gui/GuiEditTask.java @@ -11,14 +11,17 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; +import universalelectricity.core.vector.Vector2; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; import dark.api.al.coding.ITask; import dark.api.al.coding.args.ArgumentData; import dark.assembly.AssemblyLine; import dark.core.prefab.invgui.GuiBase; +import dark.core.prefab.invgui.GuiMessageBox; +import dark.core.prefab.invgui.IMessageBoxDialog; -public class GuiEditTask extends GuiBase +public class GuiEditTask extends GuiBase implements IMessageBoxDialog { public static final ResourceLocation TEXTURE = new ResourceLocation(AssemblyLine.instance.DOMAIN, AssemblyLine.GUI_DIRECTORY + "gui_task_edit.png"); @@ -38,7 +41,6 @@ public class GuiEditTask extends GuiBase this.editTask.load(task.save(new NBTTagCompound())); } - @SuppressWarnings("unchecked") @Override public void initGui() { @@ -47,6 +49,7 @@ public class GuiEditTask extends GuiBase Keyboard.enableRepeatEvents(true); } + @SuppressWarnings("unchecked") public void drawButtons() { this.buttonList.clear(); @@ -151,17 +154,16 @@ public class GuiEditTask extends GuiBase { case 0: case 1: - case 2: + if (button.id == 0) { - //TODO save task - } - else if (button.id == 2) - { - //TODO del task, first open a yes/no gui + this.gui.getTile().updateTask(this.editTask); } FMLCommonHandler.instance().showGuiScreen(this.gui); break; + case 2: + new GuiMessageBox(this, 0, "Remove Task", "Are you sure?").show(); + break; } } @@ -169,7 +171,6 @@ public class GuiEditTask extends GuiBase @Override protected void drawBackgroundLayer(int x, int y, float var1) { - this.drawButtons(); FMLClientHandler.instance().getClient().renderEngine.bindTexture(TEXTURE); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -217,4 +218,14 @@ public class GuiEditTask extends GuiBase } } + + @Override + public void onMessageBoxClosed(int id, boolean yes) + { + if (id == 0 && yes) + { + this.gui.getTile().removeTask(new Vector2(this.editTask.getCol(), this.editTask.getRow())); + FMLCommonHandler.instance().showGuiScreen(this.gui); + } + } } diff --git a/src/dark/assembly/client/gui/GuiEncoderCoder.java b/src/dark/assembly/client/gui/GuiEncoderCoder.java index 13b628a1..6ae9b17d 100644 --- a/src/dark/assembly/client/gui/GuiEncoderCoder.java +++ b/src/dark/assembly/client/gui/GuiEncoderCoder.java @@ -5,6 +5,7 @@ import org.lwjgl.input.Mouse; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import dark.assembly.AssemblyLine; import dark.assembly.machine.encoder.TileEntityEncoder; @@ -42,20 +43,23 @@ public class GuiEncoderCoder extends GuiEncoderBase protected void actionPerformed(GuiButton button) { super.actionPerformed(button); - switch (button.id) + if (((TileEntityEncoder) tileEntity).getProgram() != null) { - case 3: - getTaskListElement().scrollSide(-1); - break; - case 4: - getTaskListElement().scrollSide(1); - break; - case 5: - getTaskListElement().scroll(-1); - break; - case 6: - getTaskListElement().scroll(1); - break; + switch (button.id) + { + case 3: + getTaskListElement().scrollSide(-1); + break; + case 4: + getTaskListElement().scrollSide(1); + break; + case 5: + getTaskListElement().scroll(-1); + break; + case 6: + getTaskListElement().scroll(1); + break; + } } } @@ -81,13 +85,16 @@ public class GuiEncoderCoder extends GuiEncoderBase { super.handleMouseInput(); int wheel = Mouse.getEventDWheel(); - if (wheel > 0) + if (((TileEntityEncoder) tileEntity).getProgram() != null) { - this.getTaskListElement().scroll(-2); - } - else if (wheel < 0) - { - this.getTaskListElement().scroll(2); + if (wheel > 0) + { + this.getTaskListElement().scroll(-2); + } + else if (wheel < 0) + { + this.getTaskListElement().scroll(2); + } } } @@ -98,23 +105,27 @@ public class GuiEncoderCoder extends GuiEncoderBase { this.mc.thePlayer.closeScreen(); } - else if (keycode == Keyboard.KEY_UP) // PAGE UP (no constant) + else if (((TileEntityEncoder) tileEntity).getProgram() != null) { - this.getTaskListElement().scroll(-1); - } - else if (keycode == Keyboard.KEY_DOWN) // PAGE DOWN (no constant) - { - this.getTaskListElement().scroll(1); - } - else if (keycode == Keyboard.KEY_LEFT) // PAGE LEFT (no constant) - { - if (this.getTaskListElement().scrollX > -5) - this.getTaskListElement().scrollSide(-1); - } - else if (keycode == Keyboard.KEY_RIGHT) // PAGE RIGHT (no constant) - { - if (this.getTaskListElement().scrollX < ((TileEntityEncoder) tileEntity).getProgram().getSize().intX()) - this.getTaskListElement().scrollSide(1); + + if (keycode == Keyboard.KEY_UP) // PAGE UP (no constant) + { + this.getTaskListElement().scroll(-1); + } + else if (keycode == Keyboard.KEY_DOWN) // PAGE DOWN (no constant) + { + this.getTaskListElement().scroll(1); + } + else if (keycode == Keyboard.KEY_LEFT) // PAGE LEFT (no constant) + { + if (this.getTaskListElement().scrollX > -5) + this.getTaskListElement().scrollSide(-1); + } + else if (keycode == Keyboard.KEY_RIGHT) // PAGE RIGHT (no constant) + { + if (this.getTaskListElement().scrollX < ((TileEntityEncoder) tileEntity).getProgram().getSize().intX()) + this.getTaskListElement().scrollSide(1); + } } } @@ -147,4 +158,10 @@ public class GuiEncoderCoder extends GuiEncoderBase } } + @Override + public TileEntityEncoder getTile() + { + return (TileEntityEncoder) this.tileEntity; + } + } diff --git a/src/dark/assembly/client/gui/GuiTaskList.java b/src/dark/assembly/client/gui/GuiTaskList.java index 0e8fe1fc..e19d830e 100644 --- a/src/dark/assembly/client/gui/GuiTaskList.java +++ b/src/dark/assembly/client/gui/GuiTaskList.java @@ -37,10 +37,11 @@ public class GuiTaskList extends Gui implements IScroll this.xPos = x; this.yPos = y; this.coder = coder; + this.entity = entity; - if (entity instanceof TileEntityEncoder && ((TileEntityEncoder) entity).getProgram() != null) + if (this.getProgram() != null) { - if (((TileEntityEncoder) entity).getProgram().getSize().intX() < (this.countX / 2)) + if (this.getProgram().getSize().intX() < (this.countX / 2)) { this.scrollX = -2; } @@ -49,6 +50,11 @@ public class GuiTaskList extends Gui implements IScroll this.scrollX = 0; } } + else + { + this.scrollX = 0; + this.scrollY = 0; + } } @@ -93,27 +99,30 @@ public class GuiTaskList extends Gui implements IScroll for (int row = 0; row < countY; row++) { int actualRow = row + this.scrollY - 1; - if (actualRow <= this.getProgram().getSize().intY() + 1 && actualRow >= -1) + boolean drawnButton = false; + + if (this.getProgram() != null) { ITask task = this.getProgram().getTaskAt(actualCol, actualRow); if (actualRow == -1 && colume + this.scrollX - 1 == -1) { - task = new TaskStart(); + task = new TaskStart(); } - if (actualRow == this.getProgram().getSize().intY() + 1 && colume + this.scrollX - 1 == -1) + else if (actualRow == this.getProgram().getSize().intY() + 1 && colume + this.scrollX - 1 == -1) { task = new TaskEnd(); } if (task != null && (!(task instanceof IRedirectTask) || task instanceof IRedirectTask && ((IRedirectTask) task).render())) { + drawnButton = true; FMLClientHandler.instance().getClient().renderEngine.bindTexture(task.getTextureSheet()); this.drawTexturedModalRect(xPos + (20 * colume), yPos + (20 * row), task.getTextureUV().intX(), task.getTextureUV().intY(), 20, 20); } - else - { - FMLClientHandler.instance().getClient().renderEngine.bindTexture(ITask.TaskType.TEXTURE); - this.drawTexturedModalRect(xPos + (20 * colume), yPos + (20 * row), 0, 40, 20, 20); - } + } + if (!drawnButton) + { + FMLClientHandler.instance().getClient().renderEngine.bindTexture(ITask.TaskType.TEXTURE); + this.drawTexturedModalRect(xPos + (20 * colume), yPos + (20 * row), 0, 40, 20, 20); } } diff --git a/src/dark/assembly/machine/encoder/TileEntityEncoder.java b/src/dark/assembly/machine/encoder/TileEntityEncoder.java index c9dc00f1..f6122160 100644 --- a/src/dark/assembly/machine/encoder/TileEntityEncoder.java +++ b/src/dark/assembly/machine/encoder/TileEntityEncoder.java @@ -3,9 +3,11 @@ package dark.assembly.machine.encoder; import java.io.IOException; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.packet.Packet; import universalelectricity.core.vector.Vector2; import universalelectricity.prefab.network.PacketManager; @@ -15,6 +17,7 @@ import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.Player; import dark.api.al.coding.IProcessTask; import dark.api.al.coding.IProgram; +import dark.api.al.coding.ITask; import dark.api.al.coding.TaskRegistry; import dark.assembly.armbot.Program; import dark.assembly.armbot.command.TaskDrop; @@ -26,29 +29,40 @@ import dark.assembly.armbot.command.TaskRotateTo; import dark.core.common.DarkMain; import dark.core.network.PacketHandler; import dark.core.prefab.machine.TileEntityMachine; +import dark.core.prefab.machine.TileEntityMachine.SimplePacketTypes; public class TileEntityEncoder extends TileEntityMachine implements ISidedInventory { private ItemStack disk; private IInventoryWatcher watcher; - public static final String PROGRAM_ID = "program", PROGRAM_CHANGE = "programChange", REMOVE_TASK = "removeTask"; + public static final String PROGRAM_PACKET_ID = "program", PROGRAM_CHANGE_PACKET_ID = "programChange", REMOVE_TASK_PACKET_ID = "removeTask"; protected IProgram program; public TileEntityEncoder() { super(); - program = new Program(); - program.setTaskAt(0, 0, new TaskRotateTo()); - program.setTaskAt(0, 1, new TaskDrop()); - program.setTaskAt(0, 2, new TaskRotateTo()); - program.setTaskAt(0, 3, new TaskGrabItem()); - program.setTaskAt(0, 4, new TaskIF()); - program.setTaskAt(0, 5, new TaskRotateTo()); - program.setTaskAt(0, 6, new TaskGive()); + this.hasGUI = true; + } - program.setTaskAt(1, 4, new TaskRotateTo()); - program.setTaskAt(1, 5, new TaskGive()); - program.setTaskAt(1, 6, new TaskGOTO(0, 6)); + @Override + public void initiate() + { + super.initiate(); + if (!this.worldObj.isRemote) + { + program = new Program(); + program.setTaskAt(0, 0, new TaskRotateTo()); + program.setTaskAt(0, 1, new TaskDrop()); + program.setTaskAt(0, 2, new TaskRotateTo()); + program.setTaskAt(0, 3, new TaskGrabItem()); + program.setTaskAt(0, 4, new TaskIF()); + program.setTaskAt(0, 5, new TaskRotateTo()); + program.setTaskAt(0, 6, new TaskGive()); + + program.setTaskAt(1, 4, new TaskRotateTo()); + program.setTaskAt(1, 5, new TaskGive()); + program.setTaskAt(1, 6, new TaskGOTO(0, 6)); + } } @Override @@ -120,8 +134,9 @@ public class TileEntityEncoder extends TileEntityMachine implements ISidedInvent { if (this.worldObj.isRemote) { - if (id.equalsIgnoreCase(TileEntityEncoder.PROGRAM_ID)) + if (id.equalsIgnoreCase(TileEntityEncoder.PROGRAM_PACKET_ID)) { + if (dis.readBoolean()) { Program program = new Program(); @@ -137,10 +152,10 @@ public class TileEntityEncoder extends TileEntityMachine implements ISidedInvent } else { - if (id.equalsIgnoreCase(TileEntityEncoder.PROGRAM_CHANGE)) + if (id.equalsIgnoreCase(TileEntityEncoder.PROGRAM_CHANGE_PACKET_ID)) { - IProcessTask task = TaskRegistry.getCommand(dis.readUTF()); + ITask task = TaskRegistry.getCommand(dis.readUTF()); task.setPosition(dis.readInt(), dis.readInt()); task.load(PacketManager.readNBTTagCompound(dis)); this.program.setTaskAt(task.getCol(), task.getRow(), task); @@ -148,7 +163,7 @@ public class TileEntityEncoder extends TileEntityMachine implements ISidedInvent return true; } - else if (id.equalsIgnoreCase(TileEntityEncoder.REMOVE_TASK)) + else if (id.equalsIgnoreCase(TileEntityEncoder.REMOVE_TASK_PACKET_ID)) { this.program.setTaskAt(dis.readInt(), dis.readInt(), null); this.sendGUIPacket(); @@ -171,30 +186,52 @@ public class TileEntityEncoder extends TileEntityMachine implements ISidedInvent { if (entity != null) { - NBTTagCompound tag = new NBTTagCompound(); - boolean exists = this.program != null; - if (exists) - { - this.program.save(tag); - } - PacketDispatcher.sendPacketToPlayer(PacketHandler.instance().getTilePacket(DarkMain.CHANNEL, this, this.program, exists, tag), (Player) entity); + PacketDispatcher.sendPacketToPlayer(this.getDescriptionPacket(), (Player) entity); } } + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound tag = new NBTTagCompound(); + boolean exists = this.program != null; + if (exists) + { + this.program.save(tag); + } + return PacketHandler.instance().getTilePacket(DarkMain.CHANNEL, this, TileEntityEncoder.PROGRAM_PACKET_ID, exists, tag); + + } + public void removeTask(Vector2 vec) { if (vec != null) { - PacketDispatcher.sendPacketToServer(PacketHandler.instance().getTilePacket(DarkMain.CHANNEL, this, vec.intX(), vec.intY())); + if (this.worldObj.isRemote) + { + PacketDispatcher.sendPacketToServer(PacketHandler.instance().getTilePacket(DarkMain.CHANNEL, this, TileEntityEncoder.REMOVE_TASK_PACKET_ID, vec.intX(), vec.intY())); + } + else + { + this.program.setTaskAt(vec.intX(), vec.intY(), null); + } } } - public void updateTask(IProcessTask task) + public void updateTask(ITask editTask) { - if (task != null) + if (editTask != null) { - PacketDispatcher.sendPacketToServer(PacketHandler.instance().getTilePacket(DarkMain.CHANNEL, this, task.getCol(), task.getRow(), task.save(new NBTTagCompound()))); + if (this.worldObj.isRemote) + { + PacketDispatcher.sendPacketToServer(PacketHandler.instance().getTilePacket(DarkMain.CHANNEL, this, TileEntityEncoder.PROGRAM_CHANGE_PACKET_ID, editTask.getMethodName(), editTask.getCol(), editTask.getRow(), editTask.save(new NBTTagCompound()))); + } + else + { + this.program.setTaskAt(editTask.getCol(), editTask.getRow(), editTask); + } } + } @Override @@ -208,4 +245,10 @@ public class TileEntityEncoder extends TileEntityMachine implements ISidedInvent { return this.program; } + + @Override + public Class getContainer() + { + return ContainerEncoder.class; + } }