From 0fcb0d05c49b48fa8f8da54182d0f705ee4f05f8 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Mon, 22 Jun 2026 22:29:29 +0200 Subject: [PATCH] bueff strokinoff --- .../pneumatic/PneumoStorageImporter.java | 3 +- .../ContainerPneumoStorageImporter.java | 15 +++ .../gui/GUIPneumoStorageImporter.java | 42 +++++++ .../TileEntityPneumoStorageAccess.java | 7 -- .../TileEntityPneumoStorageImporter.java | 112 ++++++++++++++++++ .../networkproviders/PneumaticNetwork.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../blocks/pneumatic_storage_importer.png | Bin 0 -> 417 bytes .../gui/storage/gui_pneumatic_importer.png | Bin 0 -> 1317 bytes 10 files changed, 180 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java create mode 100644 src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageImporter.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_importer.png create mode 100644 src/main/resources/assets/hbm/textures/gui/storage/gui_pneumatic_importer.png diff --git a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java index a2e410b84..5df23cec8 100644 --- a/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java +++ b/src/main/java/com/hbm/blocks/network/pneumatic/PneumoStorageImporter.java @@ -1,6 +1,7 @@ package com.hbm.blocks.network.pneumatic; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageImporter; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.BlockContainer; @@ -17,7 +18,7 @@ public class PneumoStorageImporter extends BlockContainer { @Override public TileEntity createNewTileEntity(World world, int meta) { - return null; + return new TileEntityPneumoStorageImporter(); } @Override diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java new file mode 100644 index 000000000..4260b87d2 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoStorageImporter.java @@ -0,0 +1,15 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageImporter; + +import net.minecraft.entity.player.InventoryPlayer; + +public class ContainerPneumoStorageImporter extends ContainerBase { + + public ContainerPneumoStorageImporter(InventoryPlayer invPlayer, TileEntityPneumoStorageImporter importer) { + super(invPlayer, importer); + + addSlots(importer, 0, 62, 17, 3, 3); + playerInv(invPlayer, 103); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java new file mode 100644 index 000000000..b55b30e4f --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIPneumoStorageImporter.java @@ -0,0 +1,42 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerPneumoStorageImporter; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.pneumatic.TileEntityPneumoStorageImporter; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIPneumoStorageImporter extends GuiContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_pneumatic_importer.png"); + private TileEntityPneumoStorageImporter importer; + + public GUIPneumoStorageImporter(InventoryPlayer invPlayer, TileEntityPneumoStorageImporter importer) { + super(new ContainerPneumoStorageImporter(invPlayer, importer)); + this.importer = importer; + + this.xSize = 176; + this.ySize = 186; + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.importer.hasCustomInventoryName() ? this.importer.getInventoryName() : I18n.format(this.importer.getInventoryName()); + + 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/network/pneumatic/TileEntityPneumoStorageAccess.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java index 140b396de..f138d180d 100644 --- a/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageAccess.java @@ -14,7 +14,6 @@ import api.hbm.ntl.StackCache; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; public class TileEntityPneumoStorageAccess extends TileEntityLoadedBase implements IPneumaticConnector, IGUIProvider { @@ -69,12 +68,6 @@ public class TileEntityPneumoStorageAccess extends TileEntityLoadedBase implemen if(this.cache != null) this.cache.dissolveCache(); } - @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/TileEntityPneumoStorageImporter.java b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageImporter.java new file mode 100644 index 000000000..131486f71 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/pneumatic/TileEntityPneumoStorageImporter.java @@ -0,0 +1,112 @@ +package com.hbm.tileentity.network.pneumatic; + +import com.hbm.inventory.container.ContainerPneumoStorageImporter; +import com.hbm.inventory.gui.GUIPneumoStorageImporter; +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 api.hbm.ntl.IPneumaticConnector; +import api.hbm.ntl.StackCache; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class TileEntityPneumoStorageImporter extends TileEntityMachineBase implements IPneumaticConnector, IGUIProvider { + + protected PneumaticNode node; + public StackCache cache; + + public int[] delay = new int[9]; + public int[] SLOT_ACCESS = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8}; + + public TileEntityPneumoStorageImporter() { + super(9); + } + + @Override + public String getName() { + return "container.pneumoStorageImporter"; + } + + @Override + public void setInventorySlotContents(int i, ItemStack stack) { + super.setInventorySlotContents(i, stack); + + if(stack != null) this.delay[i] = Math.max(this.delay[i], 1); + } + + @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { return true; } + @Override public int[] getAccessibleSlotsFromSide(int side) { return SLOT_ACCESS; } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(this.node == null || this.node.expired) { + if(this.cache != null) this.cache.dissolveCache(); + + 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)).setStandardConnections(xCoord, yCoord, zCoord); + UniNodespace.createNode(worldObj, this.node); + } + } + + if(this.cache == null || this.cache.hasExpired) { + this.cache = new StackCache(xCoord, yCoord, zCoord); + } + + if(this.node != null && this.node.hasValidNet()) { + this.node.net.addStackCache(cache); + } + + if(this.cache != null && !this.cache.hasExpired) for(int i = 0; i < 9; i++) { + if(this.delay[i] > 0) { + this.delay[i]--; + continue; + } + ItemStack stack = slots[i]; + if(stack == null) continue; + + int leftover = (int) this.cache.addItemsAndReturnQuantity(stack, stack.stackSize); + if(leftover == stack.stackSize) { + this.delay[i] = 100; + } else { + this.decrStackSize(i, stack.stackSize - leftover); + } + } + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote && this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + + if(this.cache != null) this.cache.dissolveCache(); + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + if(!worldObj.isRemote && this.node != null) { + UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, PneumaticNetworkProvider.THE_PROVIDER); + } + + if(this.cache != null) this.cache.dissolveCache(); + } + + @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerPneumoStorageImporter(player.inventory, this); } + @Override public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIPneumoStorageImporter(player.inventory, this); } +} diff --git a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java index bbe0dc575..b2f63b026 100644 --- a/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java +++ b/src/main/java/com/hbm/uninos/networkproviders/PneumaticNetwork.java @@ -134,7 +134,7 @@ public class PneumaticNetwork extends NodeNet { TileEntity tile1 = source instanceof TileEntity ? (TileEntity) source : null; int attempts = 0; - int maxAttempts = receiverList.size(); + int maxAttempts = Math.min(receiverList.size(), 5); // try all receivers for both modes, in an attempts based system. // instead of bailing out of trying after the first failure (which means you have to wait 0.25 seconds), we just try the next one. diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 5fadd08b5..cf50d61fe 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -359,6 +359,8 @@ container.paSource=Teilchenquelle container.plasmaHeater=Plasmaerhitzer container.pneumoStorageAccess=PLS Zugangsterminal container.pneumoStorageClutter=PLS Gerümpelkiste +container.pneumoStorageImporter=PSN Importer +container.pneumoStorageMono=PLS Massenspeicher container.pneumoTube=Rohrpost container.press=Befeuerte Presse container.puf6_tank=PuF6 Tank @@ -4740,6 +4742,8 @@ tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur tile.pneumatic_storage_access.name=Pneumatisches Lagersystem - Zugangsterminal tile.pneumatic_storage_clutter.name=Pneumatisches Lagersystem - Gerümpelkiste +tile.pneumatic_storage_importer.name=Pneumatisches Lagersystem - Importer +tile.pneumatic_storage_mono.name=Pneumatisches Lagersystem - Massenspeicher tile.pneumatic_tube.name=Rohrpost tile.pneumatic_tube.desc=Sendted Items mit Druckluft.$Rechtsklick mit Schraubenzieher aktiviert den Eingang.$Shift-Rechtskick mit Schrabuenzieher aktiviert den Ausgang.$Eingänge können konfiguriert und mit Druckluft verbunden werden.$Sendet bis zu einem Stack, vier Mal pro Sekunde. tile.pneumatic_tube_paintable.name=Geschirmte Rohrpost (Färbbar) diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index be081a936..7c164eab5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -761,6 +761,8 @@ container.paSource=Particle Source container.plasmaHeater=Plasma Heater container.pneumoStorageAccess=PSN Access Terminal container.pneumoStorageClutter=PSN Clutter Storage +container.pneumoStorageImporter=PSN Importer +container.pneumoStorageMono=PSN Bulk Storage container.pneumoTube=Pneumatic Tube container.press=Burner Press container.puf6_tank=PuF6 Tank @@ -6000,6 +6002,8 @@ tile.plasma_heater.name=Plasma Heater tile.plushie.name=%s Plushie tile.pneumatic_storage_access.name=Pneumatic Storage Network - Access Terminal tile.pneumatic_storage_clutter.name=Pneumatic Storage Network - Clutter Storage +tile.pneumatic_storage_importer.name=Pneumatic Storage Network - Importer +tile.pneumatic_storage_mono.name=Pneumatic Storage Network - Bulk Storage tile.pneumatic_tube.name=Pneumatic Tube tile.pneumatic_tube.desc=Sends items using compressed air.$Right-click with screwdriver to toggle an input.$Shift right-click with screwdriver to toggle an output.$Inputs can be configured, and connected to compressed air.$Sends up to one stack, four times per second. tile.pneumatic_tube_paintable.name=Paintable Pneumatic Tube diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_importer.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_storage_importer.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c89f32363be438fbb5ee1e5ba6ac8b1a31ca3a GIT binary patch literal 417 zcmV;S0bc%zP)>)7Xv~TB>}OAbkihiq2Fm?=KHg=vk!~K;vyo52$64i8o%%tj`4T>NFdaQfRFa5oWRnysKIlwSYSw z{ls1~lRYBRYSdcuR<7?0K=njbY_E=N-ER#P;PFcGpQsabmAlTiCrJx}VgFhH8c%g& zU?Rdi^H8B8@=a~n60nWkft}(l^USMjG-{3=T#^>3u zkcv5P@7m@`r;D^*wEh>_&Rw2)W9NijCRsc?7Ebi57FckoReXXU_rg^nNslKnU7EOo z*L2;^u7n^CuB4+AeJ4K7Kku~-oG7r6;sUY^zFhz zuioa5U&Z%(>$8b`KlvWWcZ%Ep=>WR-z8Zso4}-!C1_uMih6E;tgDeb9oD3|&3>@Fq zd}XX#_EdlWR=YzFrkzfmYqvkMmgk#G2*avX>(;G{l1~g+eRY*z{QeA(Xbi)uJpD>4Id zo;=G(joqBxOjNSrXU)E^V)J(U+9l6op54XcFtyhq;He~o3(&;`j6(QP={sXj?&SVn zhb=;q4I6VmZ4~SXQ(_KCRTc=TWMjAp4+6plZa7iPkbL_|va-Nh7q*1Gaqn{~kKK57 zKy4Azh8VrS9QI< z>i@B$4F4Br*EY;wF#qqbOrHat^5a$@<-~hG!hXP)gSVi=gpm)`W)xLL{P7C)Dfm(RCt z&;R{So_((0^60+}pFe-zwP%mX@j342Kkg4{f2<5nM1(^Sn(XB6up7+vd;RB6&1?Cj zKFglq@X*@(-$TFNx987Oo?w|gqqtuA!qKCyp`mBfHm|z<-Jm}OD7<)nvhsxj8)np$ zOUTk*hi5%?e1|s*o|tp-{6@hH3p1vf#=k7hn0SvHlaPvl$>b(S%DETM4d$?$GaZz; z$+5-SjtQ2J`m7G@a_i(G>cY0 zefMqt-HNc#*z2W#lQw=h-D*%?&T#kQ#lXwW2h?mB?)3iNe_-E9&4gmTI!Lmil$1Dj YpMl-wP8I*;ry!#|UHx3vIVCg!047D*l>h($ literal 0 HcmV?d00001