From 3939000190372dacc06055ede03918728b5f0133 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Tue, 19 Nov 2013 12:29:50 -0500 Subject: [PATCH] More work! --- .../client/gui/GuiDigitalMinerConfig.java | 3 +- .../container/ContainerDigitalMiner.java | 145 ++++++++++++++++++ .../common/miner/MItemStackFilter.java | 4 +- .../mekanism/common/miner/MOreDictFilter.java | 4 +- common/mekanism/common/miner/MinerFilter.java | 2 +- .../common/miner/ThreadMinerSearch.java | 21 ++- .../tileentity/TileEntityDigitalMiner.java | 77 ++++++++-- 7 files changed, 241 insertions(+), 15 deletions(-) create mode 100644 common/mekanism/common/inventory/container/ContainerDigitalMiner.java diff --git a/common/mekanism/client/gui/GuiDigitalMinerConfig.java b/common/mekanism/client/gui/GuiDigitalMinerConfig.java index f3c2a0095..b589ef078 100644 --- a/common/mekanism/client/gui/GuiDigitalMinerConfig.java +++ b/common/mekanism/client/gui/GuiDigitalMinerConfig.java @@ -1,5 +1,6 @@ package mekanism.client.gui; -public class GuiDigitalMinerConfig { +public class GuiDigitalMinerConfig +{ } diff --git a/common/mekanism/common/inventory/container/ContainerDigitalMiner.java b/common/mekanism/common/inventory/container/ContainerDigitalMiner.java new file mode 100644 index 000000000..53d1e6865 --- /dev/null +++ b/common/mekanism/common/inventory/container/ContainerDigitalMiner.java @@ -0,0 +1,145 @@ +package mekanism.common.inventory.container; + +import mekanism.common.inventory.slot.SlotElectricChest; +import mekanism.common.inventory.slot.SlotEnergy.SlotDischarge; +import mekanism.common.tileentity.TileEntityDigitalMiner; +import mekanism.common.util.ChargeUtils; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerDigitalMiner extends Container +{ + private TileEntityDigitalMiner tileEntity; + + public ContainerDigitalMiner(InventoryPlayer inventory, TileEntityDigitalMiner tentity, IInventory inv, boolean b) + { + tileEntity = tentity; + + for(int slotY = 0; slotY < 6; slotY++) + { + for(int slotX = 0; slotX < 9; slotX++) + { + addSlotToContainer(new SlotElectricChest(getInv(), slotX + slotY * 9, 8 + slotX * 18, 26 + slotY * 18)); + } + } + + addSlotToContainer(new SlotDischarge(getInv(), 54, 180, 11)); + + int slotX; + + for(slotX = 0; slotX < 3; ++slotX) + { + for(int slotY = 0; slotY < 9; ++slotY) + { + addSlotToContainer(new SlotElectricChest(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 148 + slotX * 18)); + } + } + + for(slotX = 0; slotX < 9; ++slotX) + { + addSlotToContainer(new SlotElectricChest(inventory, slotX, 8 + slotX * 18, 206)); + } + } + + public IInventory getInv() + { + if(isBlock) + { + return tileEntity; + } + else { + return itemInventory; + } + } + + @Override + public void onContainerClosed(EntityPlayer entityplayer) + { + super.onContainerClosed(entityplayer); + + if(isBlock) + { + tileEntity.closeChest(); + tileEntity.playersUsing.remove(entityplayer); + } + else { + itemInventory.closeChest(); + } + } + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + if(isBlock) + { + return tileEntity.isUseableByPlayer(entityplayer); + } + + return true; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slotID) + { + ItemStack stack = null; + Slot currentSlot = (Slot)inventorySlots.get(slotID); + + if(currentSlot != null && currentSlot.getHasStack()) + { + ItemStack slotStack = currentSlot.getStack(); + stack = slotStack.copy(); + + if(ChargeUtils.canBeDischarged(slotStack)) + { + if(slotID != 54) + { + if(!mergeItemStack(slotStack, 54, 55, false)) + { + return null; + } + } + else if(slotID == 54) + { + if(!mergeItemStack(slotStack, 55, inventorySlots.size(), true)) + { + return null; + } + } + } + else { + if(slotID < 54) + { + if(!mergeItemStack(slotStack, 55, inventorySlots.size(), true)) + { + return null; + } + } + else if(!mergeItemStack(slotStack, 0, 54, false)) + { + return null; + } + } + + if(slotStack.stackSize == 0) + { + currentSlot.putStack((ItemStack)null); + } + else { + currentSlot.onSlotChanged(); + } + + if(slotStack.stackSize == stack.stackSize) + { + return null; + } + + currentSlot.onPickupFromSlot(player, slotStack); + } + + return stack; + } +} diff --git a/common/mekanism/common/miner/MItemStackFilter.java b/common/mekanism/common/miner/MItemStackFilter.java index 17cebdfd5..1c2f376f4 100644 --- a/common/mekanism/common/miner/MItemStackFilter.java +++ b/common/mekanism/common/miner/MItemStackFilter.java @@ -23,10 +23,12 @@ public class MItemStackFilter extends MinerFilter } @Override - public void write(NBTTagCompound nbtTags) + public NBTTagCompound write(NBTTagCompound nbtTags) { nbtTags.setInteger("type", 0); itemType.writeToNBT(nbtTags); + + return nbtTags; } @Override diff --git a/common/mekanism/common/miner/MOreDictFilter.java b/common/mekanism/common/miner/MOreDictFilter.java index 3a7f147f3..f430ba563 100644 --- a/common/mekanism/common/miner/MOreDictFilter.java +++ b/common/mekanism/common/miner/MOreDictFilter.java @@ -52,10 +52,12 @@ public class MOreDictFilter extends MinerFilter } @Override - public void write(NBTTagCompound nbtTags) + public NBTTagCompound write(NBTTagCompound nbtTags) { nbtTags.setInteger("type", 1); nbtTags.setString("oreDictName", oreDictName); + + return nbtTags; } @Override diff --git a/common/mekanism/common/miner/MinerFilter.java b/common/mekanism/common/miner/MinerFilter.java index ff4bed622..4f1e7f9d8 100644 --- a/common/mekanism/common/miner/MinerFilter.java +++ b/common/mekanism/common/miner/MinerFilter.java @@ -11,7 +11,7 @@ public abstract class MinerFilter { public abstract boolean canFilter(ItemStack itemStack); - public abstract void write(NBTTagCompound nbtTags); + public abstract NBTTagCompound write(NBTTagCompound nbtTags); protected abstract void read(NBTTagCompound nbtTags); diff --git a/common/mekanism/common/miner/ThreadMinerSearch.java b/common/mekanism/common/miner/ThreadMinerSearch.java index 20707c955..02fc3d455 100644 --- a/common/mekanism/common/miner/ThreadMinerSearch.java +++ b/common/mekanism/common/miner/ThreadMinerSearch.java @@ -1,10 +1,29 @@ package mekanism.common.miner; +import mekanism.common.tileentity.TileEntityDigitalMiner; + public class ThreadMinerSearch extends Thread { + public TileEntityDigitalMiner tileEntity; + + public boolean finished = false; + + public ThreadMinerSearch(TileEntityDigitalMiner tile) + { + tileEntity = tile; + } + @Override public void run() { - + if(tileEntity.isInvalid()) + { + return; + } + } + + public void reset() + { + finished = false; } } diff --git a/common/mekanism/common/tileentity/TileEntityDigitalMiner.java b/common/mekanism/common/tileentity/TileEntityDigitalMiner.java index 6b173d165..d3247c411 100644 --- a/common/mekanism/common/tileentity/TileEntityDigitalMiner.java +++ b/common/mekanism/common/tileentity/TileEntityDigitalMiner.java @@ -21,6 +21,7 @@ import mekanism.common.miner.ThreadMinerSearch; import mekanism.common.network.PacketTileEntity; import mekanism.common.util.ChargeUtils; import mekanism.common.util.MekanismUtils; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -35,6 +36,8 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I public HashList filters = new HashList(); + public ThreadMinerSearch searcher = new ThreadMinerSearch(this); + public int radius; public int minY; @@ -42,8 +45,6 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I public boolean doEject = false; public boolean doPull = false; - - public ThreadMinerSearch searcher; public int clientToMine; @@ -67,6 +68,14 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I if(!worldObj.isRemote) { ChargeUtils.discharge(27, this); + + if(playersUsing.size() > 0) + { + for(EntityPlayer player : playersUsing) + { + PacketHandler.sendPacket(Transmission.SINGLE_CLIENT, new PacketTileEntity().setParams(Object3D.get(this), getGenericPacket(new ArrayList())), player); + } + } } } @@ -91,6 +100,16 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I filters.add(MinerFilter.readFromNBT((NBTTagCompound)tagList.tagAt(i))); } } + + if(nbtTags.hasKey("oresToMine")) + { + NBTTagList tagList = nbtTags.getTagList("oresToMine"); + + for(int i = 0; i < tagList.tagCount(); i++) + { + oresToMine.add(Object3D.read((NBTTagCompound)tagList.tagAt(i))); + } + } } @Override @@ -109,9 +128,7 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I for(MinerFilter filter : filters) { - NBTTagCompound tagCompound = new NBTTagCompound(); - filter.write(new NBTTagCompound()); - filterTags.appendTag(tagCompound); + filterTags.appendTag(filter.write(new NBTTagCompound())); } if(filterTags.tagCount() != 0) @@ -119,16 +136,16 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I nbtTags.setTag("filters", filterTags); } - NBTTagList miningOres = new NBTTagList(); + NBTTagList miningOreTags = new NBTTagList(); for(Object3D obj : oresToMine) { - miningOres.appendTag(obj.write(new NBTTagCompound())); + miningOreTags.appendTag(obj.write(new NBTTagCompound())); } - if(miningOres.tagCount() != 0) + if(miningOreTags.tagCount() != 0) { - nbtTags.setTag("oresToMine", miningOres); + nbtTags.setTag("oresToMine", miningOreTags); } } @@ -148,8 +165,27 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I doPull = dataStream.readBoolean(); clientToMine = dataStream.readInt(); controlType = RedstoneControl.values()[dataStream.readInt()]; + + filters.clear(); + + int amount = dataStream.readInt(); + + for(int i = 0; i < amount; i++) + { + filters.add(MinerFilter.readFromPacket(dataStream)); + } } else if(type == 1) + { + radius = dataStream.readInt(); + minY = dataStream.readInt(); + maxY = dataStream.readInt(); + doEject = dataStream.readBoolean(); + doPull = dataStream.readBoolean(); + clientToMine = dataStream.readInt(); + controlType = RedstoneControl.values()[dataStream.readInt()]; + } + else if(type == 2) { filters.clear(); @@ -188,11 +224,32 @@ public class TileEntityDigitalMiner extends TileEntityElectricBlock implements I } } - public ArrayList getFilterPacket(ArrayList data) + public ArrayList getGenericPacket(ArrayList data) { super.getNetworkedData(data); data.add(1); + data.add(radius); + data.add(minY); + data.add(maxY); + data.add(doEject); + data.add(doPull); + data.add(oresToMine.size()); + data.add(controlType.ordinal()); + + for(MinerFilter filter : filters) + { + filter.write(data); + } + + return data; + } + + public ArrayList getFilterPacket(ArrayList data) + { + super.getNetworkedData(data); + + data.add(2); data.add(filters.size());