ah fuck me

This commit is contained in:
HbmMods 2026-05-03 19:02:13 +02:00
parent 319519ad64
commit 0356277506
8 changed files with 269 additions and 16 deletions

View File

@ -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;
}
}

View File

@ -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;
}
}
}

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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); }
}

View File

@ -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; }

View File

@ -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<IInventory, Triplet<ForgeDirection, Long, TileEntityPneumoTube>> receivers = new HashMap();
public HashMap<ISlotMonitorProvider, Long> storages = new HashMap();
public void addReceiver(IInventory inventory, ForgeDirection pipeDir, TileEntityPneumoTube endpoint) {
receivers.put(inventory, new Triplet(pipeDir, System.currentTimeMillis(), endpoint));

View File

@ -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;
}
}