From 97556e4c5a743449098cb4344ea1c50f20d9958a Mon Sep 17 00:00:00 2001 From: wiesenmann <175506894+wiesenmann@users.noreply.github.com> Date: Tue, 15 Jul 2025 19:50:53 +0200 Subject: [PATCH 1/2] add paintable pneumatic tube --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../network/PneumoTubePaintableBlock.java | 234 ++++++++++++++++++ .../java/com/hbm/main/CraftingManager.java | 3 +- .../java/com/hbm/tileentity/TileMappings.java | 4 +- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + .../blocks/pneumatic_tube_paintable.png | Bin 0 -> 673 bytes .../pneumatic_tube_paintable_overlay.png | Bin 0 -> 810 bytes .../pneumatic_tube_paintable_overlay_in.png | Bin 0 -> 843 bytes .../pneumatic_tube_paintable_overlay_out.png | Bin 0 -> 844 bytes 10 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_in.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_out.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index f6dcd2065..aa2189d46 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -828,6 +828,7 @@ public class ModBlocks { public static Block drone_crate_requester; public static Block pneumatic_tube; + public static Block pneumatic_tube_paintable; public static Block fan; @@ -1964,6 +1965,7 @@ public class ModBlocks { drone_crate_requester = new DroneDock().setBlockName("drone_crate_requester").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":drone_crate_requester"); pneumatic_tube = new PneumoTube().setBlockName("pneumatic_tube").setStepSound(ModSoundTypes.pipe).setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pneumatic_tube"); + pneumatic_tube_paintable = new PneumoTubePaintableBlock().setBlockName("pneumatic_tube_paintable").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -3231,6 +3233,7 @@ public class ModBlocks { register(drone_crate_provider); register(drone_crate_requester); register(pneumatic_tube); + register(pneumatic_tube_paintable); register(fan); register(piston_inserter); diff --git a/src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java b/src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java new file mode 100644 index 000000000..cb2d368aa --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/PneumoTubePaintableBlock.java @@ -0,0 +1,234 @@ +package com.hbm.blocks.network; + +import api.hbm.block.IToolable; +import com.hbm.blocks.IBlockMultiPass; +import com.hbm.interfaces.ICopiable; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.render.block.RenderBlockMultipass; +import com.hbm.tileentity.network.TileEntityPneumoTube; +import com.hbm.util.Compat; +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.ForgeDirection; + +public class PneumoTubePaintableBlock extends BlockContainer implements IToolable, IBlockMultiPass { + + @SideOnly(Side.CLIENT) public IIcon overlay; + @SideOnly(Side.CLIENT) public IIcon overlayIn; + @SideOnly(Side.CLIENT) public IIcon overlayOut; + + public PneumoTubePaintableBlock() {super(Material.iron);} + + @Override + public TileEntity createNewTileEntity(World world, int meta) {return new TileEntityPneumoTubePaintable();} + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + this.blockIcon = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable"); + this.overlay = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable_overlay"); + this.overlayIn = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable_overlay_in"); + this.overlayOut = reg.registerIcon(RefStrings.MODID + ":pneumatic_tube_paintable_overlay_out"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + TileEntity tile = world.getTileEntity(x, y, z); + + if (tile instanceof TileEntityPneumoTubePaintable) { + TileEntityPneumoTubePaintable tube = (TileEntityPneumoTubePaintable) tile; + + if (RenderBlockMultipass.currentPass == 0) { + if (tube.block != null) { + return tube.block.getIcon(side, tube.meta); + } else { + return this.blockIcon; + } + } else if (tube.ejectionDir.ordinal() == side) { + return this.overlayIn; + } else if (tube.insertionDir.ordinal() == side) { + return this.overlayOut; + } else { + return this.overlay; + } + } + return this.blockIcon; + } + + @Override + public int getPasses() {return 2;}; + + @Override + public int getRenderType() {return IBlockMultiPass.getRenderType();} + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + if (tool == ToolType.HAND_DRILL) { + + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityPneumoTubePaintable) { + TileEntityPneumoTubePaintable tube = (TileEntityPneumoTubePaintable) tile; + + if (tube.block != null) { + tube.block = null; + world.markBlockForUpdate(x, y, z); + tube.markDirty(); + } + } + } else if (tool == ToolType.SCREWDRIVER) { + + if (world.isRemote) return true; + TileEntityPneumoTube tube = (TileEntityPneumoTube) world.getTileEntity(x, y, z); + + ForgeDirection rot = player.isSneaking() ? tube.ejectionDir : tube.insertionDir; + ForgeDirection oth = player.isSneaking() ? tube.insertionDir : tube.ejectionDir; + + for (int i = 0; i < 7; i++) { + rot = ForgeDirection.getOrientation((rot.ordinal() + 1) % 7); + if (rot == ForgeDirection.UNKNOWN) break; //unknown is always valid, simply disables this part + if (rot == oth) continue; //skip if both positions collide + TileEntity tile = Compat.getTileStandard(world, x + rot.offsetX, y + rot.offsetY, z + rot.offsetZ); + if (tile instanceof TileEntityPneumoTube) continue; + if (tile instanceof IInventory) break; //valid if connected to an IInventory + } + + if(player.isSneaking()) tube.ejectionDir = rot; else tube.insertionDir = rot; + + tube.markDirty(); + if(world instanceof WorldServer) ((WorldServer) world).getPlayerManager().markBlockForUpdate(x, y, z); + + return true; + } + return false; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float fX, float fY, float fZ) { + + ItemStack stack = player.getHeldItem(); + if (stack != null && stack.getItem() instanceof ItemBlock) { + ItemBlock ib = (ItemBlock) stack.getItem(); + Block block = ib.field_150939_a; + + if (block.renderAsNormalBlock() && block != this) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityPneumoTubePaintable) { + TileEntityPneumoTubePaintable tube = (TileEntityPneumoTubePaintable) tile; + + if (tube.block == null) { + tube.block = block; + tube.meta = stack.getItemDamage() & 15; + world.markBlockForUpdate(x, y, z); + tube.markDirty(); + return true; + } + } + } + } else if (ToolType.getType(stack) == ToolType.SCREWDRIVER || ToolType.getType(stack) == ToolType.HAND_DRILL) return false; + if (!player.isSneaking()) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityPneumoTube) { + TileEntityPneumoTube tube = (TileEntityPneumoTube) tile; + if (tube.isCompressor()) { + FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); + return true; + } + } + } + return false; + } + + public static class TileEntityPneumoTubePaintable extends TileEntityPneumoTube implements ICopiable { + + private Block block; + private int meta; + private Block lastBlock; + private int lastMeta; + + @Override + public void updateEntity() { + super.updateEntity(); + + if (worldObj.isRemote && (lastMeta != meta || lastBlock != block )) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + lastBlock = block; + lastMeta = meta; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + NBTTagCompound nbt = pkt.func_148857_g(); + + int id = nbt.getInteger("block"); + this.block = id == 0 ? null : Block.getBlockById(id); + this.meta = nbt.getInteger("meta"); + super.onDataPacket(net, pkt); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + + if(block != null) nbt.setInteger("block", Block.getIdFromBlock(block)); + nbt.setInteger("meta", meta); + nbt.setByte("insertionDir", (byte) insertionDir.ordinal()); + nbt.setByte("ejectionDir", (byte) ejectionDir.ordinal()); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public NBTTagCompound getSettings(World world, int x, int y, int z) { + NBTTagCompound nbt = new NBTTagCompound(); + if(block != null) { + nbt.setInteger("paintblock", Block.getIdFromBlock(block)); + nbt.setInteger("paintmeta", meta); + } + return nbt; + } + + @Override + public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { + if(nbt.hasKey("paintblock")) { + this.block = Block.getBlockById(nbt.getInteger("paintblock")); + this.meta = nbt.getInteger("paintmeta"); + } + } + } +} diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 67b872581..70f14d039 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -610,7 +610,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.fluid_pump, 1), new Object[] { " S ", "PGP", "IMI", 'S', STEEL.shell(), 'P', STEEL.pipe(), 'G', GRAPHITE.ingot(), 'I', STEEL.ingot(), 'M', ModItems.motor }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 8), new Object[] { "CRC", 'C', CU.plateCast(), 'R', ANY_RUBBER.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube, 24), new Object[] { "CRC", 'C', CU.plateWelded(), 'R', ANY_RUBBER.ingot() }); - + addRecipeAuto(new ItemStack(ModBlocks.pneumatic_tube_paintable, 4), new Object[] { "SAS", "A A", "SAS", 'S', STEEL.plate(), 'A', ModBlocks.pneumatic_tube}); + addRecipeAuto(new ItemStack(ModItems.template_folder, 1), new Object[] { "LPL", "BPB", "LPL", 'P', Items.paper, 'L', "dye", 'B', "dye" }); addRecipeAuto(new ItemStack(ModItems.pellet_antimatter, 1), new Object[] { "###", "###", "###", '#', ModItems.cell_antimatter }); addRecipeAuto(new ItemStack(ModItems.fluid_tank_empty, 8), new Object[] { "121", "1G1", "121", '1', AL.plate(), '2', IRON.plate(), 'G', KEY_ANYPANE }); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index ca3281bd1..c26b87500 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -37,6 +37,7 @@ import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge; import com.hbm.blocks.network.FluidDuctPaintable.TileEntityPipePaintable; import com.hbm.blocks.network.FluidDuctPaintableBlockExhaust.TileEntityPipeExhaustPaintable; import com.hbm.blocks.network.FluidPump.TileEntityFluidPump; +import com.hbm.blocks.network.PneumoTubePaintableBlock.TileEntityPneumoTubePaintable; import com.hbm.blocks.rail.RailStandardSwitch.TileEntityRailSwitch; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.deco.*; @@ -428,8 +429,9 @@ public class TileMappings { put(TileEntityCranePartitioner.class, "tileentity_partitioner"); put(TileEntityFan.class, "tileentity_fan"); put(TileEntityPistonInserter.class, "tileentity_piston_inserter"); - + put(TileEntityPneumoTube.class, "tileentity_pneumatic_tube"); + put(TileEntityPneumoTubePaintable.class, "tileentity_pneumatic_tube_paintable"); put(TileEntityRadioTorchSender.class, "tileentity_rtty_sender"); put(TileEntityRadioTorchReceiver.class, "tileentity_rtty_rec"); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index a031be603..b28db0408 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4656,6 +4656,7 @@ tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur 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=Geschirmte Rohrpost (Färbbar) tile.pole_satellite_receiver.name=Satellitenschüssel tile.pole_top.name=Antennenspitze tile.press_preheater.name=Presse-Vorheizer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 74c5a343b..08a834b03 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5802,6 +5802,7 @@ tile.plasma_heater.name=Plasma Heater tile.plushie.name=%s Plushie 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 tile.pole_satellite_receiver.name=Satellite Dish tile.pole_top.name=Antenna Top tile.press_preheater.name=Burner Press Preheater diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7f15d129c5447b961527fce16d0760bfff1f86 GIT binary patch literal 673 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv=}#LT=BJwMkF1yemk zJqzi~S1W*OwxvdRrg?g5F>nAmtPE0&tPG4mmKP99L)jqLXfQH^#X;^dWMl%nE(*xb zY-a(BX93wDkO0IW{V*EMQU+$Aci0(NfGP}(j13qUKuiVcU|j$)X$p`H0!%=2n7}H7 zEG>X6s4hbT1CZ?M21ViEc@`Q#+X6gY978PpdxH+<9yZ{aqPo!4<(Bf6ew_=lxAG=2 zHl4fZ?)FlN_18IupVz0Quxywk=c}sm$;11DV^H~(xeL;E-0LaP_l-scSJ{6EW8&^EqQxgC~Eo)FR$s+T8=S7hu3Y}&wN2s^}?35Eb>u- zN7uZ)EEMG*dChsoHu1|2?Ckva7e%*AeV)K=5#I9jWVnKj{VBQk~F7KFc$)SI8_tksFwC&h5 zF10Y~O#r@OfX~f^UL)Z#LQ2Gcdnj zls|3j2|JVZhi|4v8gF}8!yF~gwQKS3ptWZlta#U}fAZaYp@_Hl^U`~D-z@hvFDWrC zWZhkTVd}&;ty=H%R=jz8-ng#*$UesVJw=!D4ypD6V}&QcC&YEZf&~T!20$JVh%IG( z1*BL?g8YL2|Nqb6ptbS~kk47*5n0T@pr-`FjH@2qodgt=C~=J_3C>R|DNig)We7;j z%q!9Ja}7~2)iczykj{Ly0;on3q{cZvH#aq}gu%HeHL)Z$MWH;iBtya7(>EZzkxv|` zXjN*2XPT#{76S*6!^$AV$jZP7WO)IxG?WcWOd5>LU~wiO+mMk7oVcQZ?96r+uy_`b z4FdNkvoO2>ra2gm<}wDL)C6`07NAN4BV&WMNlXkvK=u?MW?TTV0qAisz;G}_`QAN| zOP2+Lyr$;q;uxY4oSfjsd__2cftf?t$%u(@6@##_B4df}i#8?3Q>-&)GG@gytxU?a QF$Njv>FVdQ&MBb@0C+MOv;Y7A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_in.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_in.png new file mode 100644 index 0000000000000000000000000000000000000000..03dc6b483ca4f5d2278607420784d1927e2a58e3 GIT binary patch literal 843 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&fwO=eG*xah=qPwjlY+0b-#z`7o3luzA)*rgt+u8U=?TuTG4r}zmLyJFZ z<*eDdb%Q9&LFOZI8-lh7M*hFa!Rf@p-uAP?_`Tt0HYRq<%SEr-4s7c7tI=6@_RP7= zgXv8z87ULW?v`**?!2fHdi=PqY1ZD(RXYF7omQ$|Z;|q?IH6k~F7KFc$)SI8_tksFwC&h5 zF10Y~O#r@OfX~f^UL)Z#LQ2Gcdnj zls|3j2|JVZhi|4v8gF}8!yF~gwQKS3ptWZlta#U}fAZaYp@_Hl^U`~D-z@hvFDWrC zWZhkTVd}&;ty=H%R=jz8-ng#*$UesVJw=!D4ypD6V}(D!C&bm~Kf{6r3k(blfC4~p z=g50YAjMh|Qa0#5JNMI6tkVJh3R1 zAs{g`uSCz!HAKNw&rr`oI`h>Epc+Y#8t44n+|;}h2Ir#G#FEq$h4Rdj3-iXD}xjxD+42tU%NT%C6WAG8fGQ1)j1Af*F);`M*;9a+aRI~zpvS=g!@&&Y zd-p^xT^0!PnzN^iV~9p@XW6-gouSg0^Uy+Lx&-I&dv+5KhvVSQ8WTAkAG^ y!Gp_fW3|T_wKcUa(SfHfwhR2-_~x;f(k6!e@ywoQX4k2KZ1Z&Wb6Mw<&;$UsWi5&T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_out.png b/src/main/resources/assets/hbm/textures/blocks/pneumatic_tube_paintable_overlay_out.png new file mode 100644 index 0000000000000000000000000000000000000000..8e990e7760159d183250eb68c241438f585f7fa1 GIT binary patch literal 844 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47@ISlodZ0bofQI#^3yVNQh^fZ zr%tr=V0M&fwO=eG*xah=qPwjlY+0b-#z`7o3luzA)*rgt+u8U=?TuTG4r}zmLyJFZ z<*eDdb%Q9&LFOZI8-lh7M*hFa!Rf@p-uAP?_`Tt0HYRq<%SEr-4s7c7tI=6@_RP7= zgXv8z87ULW?v`**?!2fHdi=PqY1ZD(RXYF7omQ$|Z;|q?IH6k~F7KFc$)SI8_tksFwC&h5 zF10Y~O#r@OfX~f^UL)Z#LQ2Gcdnj zls|3j2|JVZhi|4v8gF}8!yF~gwQKS3ptWZlta#U}fAZaYp@_Hl^U`~D-z@hvFDWrC zWZhkTVd}&;ty=H%R=jz8-ng#*$UesVJw=!D4ypD6V}(D!C&cwX1H*y^3k(blfC4~J zAZSw!q*zOW{DS`j0mJWYe88w<;4JWnEM{QPQvzYeRgdmY0t!l$xJHx&=ckpFCl;kL z1SDqWmFW4ohA5co8R}U`XTDkiR3iyee zCk|A!DmB70&C^qhfdj~4WsqWIWncudynt95$_6DU4Mt|LI1`X<$jAgvU{OGJW;+X5 zJPXJMf%}tL7+wI=9gIeE83Ryi0y_f>P^E#9u|eA;CI%rOdkPRUE`Zno^f(w`IGCY) z@1Dq|%K|}ObMbU>4ABTK?PKI(P~bSS>CgY!(X*VwoIl8DnCbp;X`Z_$QR&UR9Ri1y znkMma%#WCE$Ce~p)wPT1`NhcsUpM~#x`g8@=l*zRPeY*-AdfS6y85}Sb4q9e0J*I$ AWB>pF literal 0 HcmV?d00001 From af6f3d76feb5d0bb8089dd68c0fcdcd3ef3d6735 Mon Sep 17 00:00:00 2001 From: wiesenmann <175506894+wiesenmann@users.noreply.github.com> Date: Wed, 16 Jul 2025 13:08:48 +0200 Subject: [PATCH 2/2] german localization fix --- src/main/resources/assets/hbm/lang/de_DE.lang | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b28db0408..913b513bf 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4656,7 +4656,7 @@ tile.plasma_heater.name=Plasmaerhitzer tile.plushie.name=%s Plüschfigur 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=Geschirmte Rohrpost (Färbbar) +tile.pneumatic_tube_paintable.name=Geschirmte Rohrpost (Färbbar) tile.pole_satellite_receiver.name=Satellitenschüssel tile.pole_top.name=Antennenspitze tile.press_preheater.name=Presse-Vorheizer @@ -5029,4 +5029,4 @@ weapon.ability.fire=Flammend weapon.ability.radiation=Radioaktive Schneide weapon.ability.phosphorus=Phosphorspitze weapon.ability.stun=Betäubend -weapon.ability.vampire=Vampir \ No newline at end of file +weapon.ability.vampire=Vampir