diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageAccess.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageAccess.java index 9b449e957..0f11494e2 100644 --- a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageAccess.java +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageAccess.java @@ -54,10 +54,8 @@ public class PneumoStorageAccess extends BlockContainer { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if(world.isRemote) return true; - if(!player.isSneaking()) { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - return true; - } - return false; + if(player.isSneaking()) return false; + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java new file mode 100644 index 000000000..ad9d1a58d --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageAccess.java @@ -0,0 +1,95 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageAccess; + +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.item.ItemStack; + +public class ContainerPneumoStorageAccess extends Container { + + protected TileEntityPneumoStorageAccess access; + protected InventoryPneumoStorageAccess inventory; + + public ContainerPneumoStorageAccess(InventoryPlayer invPlayer, TileEntityPneumoStorageAccess access) { + this.access = access; + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new SlotNonRetarded(invPlayer, j + i * 9 + 9, 8 + j * 18, 169 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new SlotNonRetarded(invPlayer, i, 8 + i * 18, 227)); + } + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return access.getDistanceFrom(player.posX, player.posY, player.posZ) <= 15 * 15; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + return null; + } + + public static class InventoryPneumoStorageAccess implements IInventory { + + public ItemStack[] slots; + + public InventoryPneumoStorageAccess() { + slots = new ItemStack[getSizeInventory()]; + } + + @Override public int getSizeInventory() { return 6 * 9; } + @Override public ItemStack getStackInSlot(int slot) { return slots[slot]; } + + @Override + public ItemStack decrStackSize(int slot, int amount) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(int slot) { + if(slots[slot] != null) { + ItemStack stack = slots[slot]; + slots[slot] = null; + return stack; + } + return null; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + this.slots[slot] = stack; + } + + @Override public String getInventoryName() { return "null"; } + @Override public boolean hasCustomInventoryName() { return false; } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public void markDirty() { + + } + + @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } + + @Override public void openInventory() { } + @Override public void closeInventory() { } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + return false; + } + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java new file mode 100644 index 000000000..aefc41f94 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageAccess.java @@ -0,0 +1,51 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPneumoStorageAccess; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageAccess; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIPneumoStorageAccess extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_pneumatic_access.png"); + protected TileEntityPneumoStorageAccess access; + + public GUIPneumoStorageAccess(InventoryPlayer invPlayer, TileEntityPneumoStorageAccess access) { + super(new ContainerPneumoStorageAccess(invPlayer, access)); + this.access = access; + + this.xSize = 176; + this.ySize = 251; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = "container.pneumpStorageAccess"; + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index 0fbdaaba4..293cb104e 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -33,13 +33,12 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme @Override public ItemStack getStackInSlotOnClosing(int i) { - if(slots[i] != null) - { + if(slots[i] != null) { ItemStack itemStack = slots[i]; slots[i] = null; return itemStack; } else { - return null; + return null; } } diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java index f5c4eaca4..3cb5e2969 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java @@ -1,14 +1,68 @@ package com.hbm.tileentity.network.pneumatic; +import com.hbm.inventory.container.ContainerPneumoStorageAccess; +import com.hbm.inventory.gui.GUIPneumoStorageAccess; +import com.hbm.lib.Library; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube.PneumaticNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.PneumaticNetworkProvider; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + import api.hbm.ntl.IPneumaticConnector; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityPneumoStorageAccess extends TileEntity implements IPneumaticConnector { +// throwing the towel - for now. there's a test i could run, but it's a lot of work and will likely just confirm my suspicions about performance +// this demands another sidequest: fucking multi threading +public class TileEntityPneumoStorageAccess extends TileEntity implements IPneumaticConnector, IGUIProvider { + + protected PneumaticNode node; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) new PneumaticNode(new BlockPos(xCoord, yCoord, zCoord)).setConnections( + new DirPos(xCoord + 1, yCoord, zCoord, Library.POS_X), + new DirPos(xCoord - 1, yCoord, zCoord, Library.NEG_X), + new DirPos(xCoord, yCoord + 1, zCoord, Library.POS_Y), + new DirPos(xCoord, yCoord - 1, zCoord, Library.NEG_Y), + new DirPos(xCoord, yCoord, zCoord + 1, Library.POS_Z), + new DirPos(xCoord, yCoord, zCoord - 1, Library.NEG_Z) + ); + UniNodespace.createNode(worldObj, this.node); + } + } + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + } + } @Override public boolean canConnectPneumatic(ForgeDirection dir) { ForgeDirection selfdir = ForgeDirection.getOrientation(getBlockMetadata()); return dir == selfdir.getOpposite(); } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPneumoStorageAccess(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPneumoStorageAccess(player.inventory, this); } } diff --git a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java index 0018ee74b..854fe86b8 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageClutter.java @@ -4,8 +4,14 @@ import com.hbm.inventory.container.ContainerPneumoStorageClutter; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIPneumoStorageClutter; +import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoTube.PneumaticNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.PneumaticNetworkProvider; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluidmk2.IFluidStandardReceiverMK2; import api.hbm.ntl.ISlotMonitorProvider; @@ -19,6 +25,8 @@ public class TileEntityPneumoStorageClutter extends TileEntityMachineBase implem public FluidTank compair; public SlotMonitor[] monitors; + + protected PneumaticNode node; public TileEntityPneumoStorageClutter() { super(6 * 9); @@ -36,6 +44,49 @@ public class TileEntityPneumoStorageClutter extends TileEntityMachineBase implem @Override public void updateEntity() { + if(!worldObj.isRemote) { + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) UniNodespace.getNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + + if(this.node == null || this.node.expired) { + this.node = (PneumaticNode) new PneumaticNode(new BlockPos(xCoord, yCoord, zCoord)).setConnections( + new DirPos(xCoord + 1, yCoord, zCoord, Library.POS_X), + new DirPos(xCoord - 1, yCoord, zCoord, Library.NEG_X), + new DirPos(xCoord, yCoord + 1, zCoord, Library.POS_Y), + new DirPos(xCoord, yCoord - 1, zCoord, Library.NEG_Y), + new DirPos(xCoord, yCoord, zCoord + 1, Library.POS_Z), + new DirPos(xCoord, yCoord, zCoord - 1, Library.NEG_Z) + ); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(node != null && !node.expired && node.hasValidNet()) { + this.node.net.storages.put(this, worldObj.getTotalWorldTime()); + } + + this.networkPackNT(15); + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + } + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + if(node != null && !node.expired && node.hasValidNet()) { + this.node.net.storages.remove(this); + } } @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java index 66e0e4561..80c6a47ed 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java @@ -16,6 +16,7 @@ import com.hbm.util.BobMathUtil; import com.hbm.util.ItemStackUtil; import com.hbm.util.Tuple.Triplet; +import api.hbm.ntl.ISlotMonitorProvider; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -39,6 +40,8 @@ public class PneumaticNetwork extends NodeNet { // while the system has parts that expects IInventires to be TileEntities to work properly (mostly range checks), // it can actually handle non-TileEntities just fine. public HashMap> receivers = new HashMap(); + + public HashMap storages = new HashMap(); public void addReceiver(IInventory inventory, ForgeDirection pipeDir, TileEntityPneumoTube endpoint) { receivers.put(inventory, new Triplet(pipeDir, System.currentTimeMillis(), endpoint)); diff --git a/src/main/java/com/hbm/util/Clock.java b/src/main/java/com/hbm/util/Clock.java index 562e17062..0e92b6078 100644 --- a/src/main/java/com/hbm/util/Clock.java +++ b/src/main/java/com/hbm/util/Clock.java @@ -1,11 +1,13 @@ package com.hbm.util; public class Clock { - private static long time_ms; - public static void update(){ - time_ms = System.currentTimeMillis(); - } - public static long get_ms(){ - return time_ms; - } + private static long time_ms; + + public static void update() { + time_ms = System.currentTimeMillis(); + } + + public static long get_ms() { + return time_ms; + } }