From d890443150ecd65263cf52554e433dcae4bbf1d4 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 1 Jun 2025 18:09:57 +0300 Subject: [PATCH 01/33] Make wooden scaffold climbable --- .../blocks/generic/BlockWoodStructure.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java b/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java index b094874ac..74fdb220a 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java +++ b/src/main/java/com/hbm/blocks/generic/BlockWoodStructure.java @@ -5,6 +5,7 @@ import java.util.List; import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockEnumMulti; +import com.hbm.extprop.HbmPlayerProps; import com.hbm.render.block.ISBRHUniversal; import com.hbm.render.util.RenderBlocksNT; import com.hbm.util.EnumUtil; @@ -16,6 +17,7 @@ import net.minecraft.block.material.Material; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -53,7 +55,7 @@ public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, world.getBlockMetadata(x, y, z)); setBlockBounds(0, 0, 0, 1, 1, 1); if(type == type.ROOF) setBlockBounds(0F, 0F, 0F, 1F, 0.1875F, 1F); - if(type == type.SCAFFOLD) setBlockBounds(0F, 0F, 0F, 1F, 1F, 1F); + if(type == type.SCAFFOLD) setBlockBounds(0.0625F, 0F, 0.0625F, 1F - 0.0625F, 1F, 1F - 0.0625F); if(type == type.CEILING) setBlockBounds(0F, 0.875F, 0F, 1F, 1F, 1F); } @@ -62,6 +64,21 @@ public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal setBlockBoundsBasedOnState(world, x, y, z); super.addCollisionBoxesToList(world, x, y, z, aabb, list, collider); } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + setBlockBoundsBasedOnState(world, x, y, z); + return super.getCollisionBoundingBoxFromPool(world, x, y, z); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k) { + int meta = world.getBlockMetadata(i, j, k); + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class, meta); + + if (type == type.SCAFFOLD) return AxisAlignedBB.getBoundingBox(i, j, k, i + 1, j + 1, k + 1); + + return super.getSelectedBoundingBoxFromPool(world, i, j, k); + } @Override public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) { @@ -149,4 +166,18 @@ public class BlockWoodStructure extends BlockEnumMulti implements ISBRHUniversal return true; } + + @Override + public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { + if (entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + + int meta = world.getBlockMetadata(x, y, z); + EnumWoodStructure type = EnumUtil.grabEnumSafely(EnumWoodStructure.class,meta); + if (type != type.SCAFFOLD) return; + + HbmPlayerProps props = HbmPlayerProps.getData(player); + props.isOnLadder = true; + } + } } From 8d7664f728f9101e7c0bfaddd13db3bdb8b422c6 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sun, 1 Jun 2025 19:29:01 +0300 Subject: [PATCH 02/33] Integrate stack size logic directly into SlotPattern --- src/main/java/com/hbm/inventory/SlotPattern.java | 10 ++++++++++ .../hbm/inventory/container/ContainerAutocrafter.java | 8 +------- .../inventory/container/ContainerCartDestroyer.java | 8 +------- .../hbm/inventory/container/ContainerCounterTorch.java | 8 +------- .../inventory/container/ContainerCraneExtractor.java | 8 +------- .../hbm/inventory/container/ContainerCraneGrabber.java | 8 +------- .../hbm/inventory/container/ContainerCraneRouter.java | 8 +------- .../inventory/container/ContainerDroneRequester.java | 8 +------- .../inventory/container/ContainerMachineCustom.java | 8 +------- .../hbm/inventory/container/ContainerMassStorage.java | 8 +------- .../hbm/inventory/container/ContainerPneumoTube.java | 4 +--- 11 files changed, 20 insertions(+), 66 deletions(-) diff --git a/src/main/java/com/hbm/inventory/SlotPattern.java b/src/main/java/com/hbm/inventory/SlotPattern.java index c40b92091..550fae5b6 100644 --- a/src/main/java/com/hbm/inventory/SlotPattern.java +++ b/src/main/java/com/hbm/inventory/SlotPattern.java @@ -5,6 +5,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; public class SlotPattern extends Slot { @@ -24,6 +25,15 @@ public class SlotPattern extends Slot { return 1; } + @Override + public void putStack(ItemStack stack) { + if (stack != null) { + stack = stack.copy(); + stack.stackSize = 1; + } + super.putStack(stack); + } + public SlotPattern disableHover() { this.canHover = false; return this; diff --git a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java index 0c5c3ff51..f18f83c9f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java @@ -74,13 +74,7 @@ public class ContainerAutocrafter extends ContainerBase { } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); autocrafter.matcher.initPatternSmart(autocrafter.getWorldObj(), slot.getStack(), index); autocrafter.updateTemplateGrid(); diff --git a/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java b/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java index 356a97d92..cff9ae430 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCartDestroyer.java @@ -66,13 +66,7 @@ public class ContainerCartDestroyer extends Container { if(slot.getHasStack()) ret = slot.getStack().copy(); - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); return ret; } diff --git a/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java b/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java index 925b3d7e1..c50c6014f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCounterTorch.java @@ -48,13 +48,7 @@ public class ContainerCounterTorch extends ContainerBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); radio.matcher.initPatternStandard(radio.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java b/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java index 9c0abe3a6..1da5825e1 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java @@ -105,13 +105,7 @@ public class ContainerCraneExtractor extends ContainerBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); extractor.matcher.initPatternStandard(extractor.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java b/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java index 7b35961ee..17de36f86 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java @@ -100,13 +100,7 @@ public class ContainerCraneGrabber extends ContainerBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); grabber.matcher.initPatternStandard(grabber.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java b/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java index d30d8c8ae..79de2466f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneRouter.java @@ -52,13 +52,7 @@ public class ContainerCraneRouter extends ContainerBase { } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); router.initPattern(slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java b/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java index bdc788c44..13a8bbb0e 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java +++ b/src/main/java/com/hbm/inventory/container/ContainerDroneRequester.java @@ -85,13 +85,7 @@ public class ContainerDroneRequester extends ContainerCrateBase { return ret; } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); requester.matcher.initPatternStandard(requester.getWorldObj(), slot.getStack(), index); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java b/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java index d85a2953f..2e988f28a 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineCustom.java @@ -94,13 +94,7 @@ public class ContainerMachineCustom extends Container { } else { - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); custom.matcher.initPatternSmart(player.worldObj, slot.getStack(), index - 10); return ret; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java index 899cbc3f2..f8a760816 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java @@ -79,13 +79,7 @@ public class ContainerMassStorage extends ContainerBase { if(storage.getStockpile() > 0) return ret; - slot.putStack(held != null ? held.copy() : null); - - if(slot.getHasStack()) { - slot.getStack().stackSize = 1; - } - - slot.onSlotChanged(); + slot.putStack(held); return ret; } diff --git a/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java b/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java index 9796028ea..91eaab7f3 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java +++ b/src/main/java/com/hbm/inventory/container/ContainerPneumoTube.java @@ -39,9 +39,7 @@ public class ContainerPneumoTube extends ContainerBase { tube.nextMode(index); return ret; } else { - slot.putStack(held != null ? held.copy() : null); - if(slot.getHasStack()) slot.getStack().stackSize = 1; - slot.onSlotChanged(); + slot.putStack(held); tube.initPattern(slot.getStack(), index); return ret; } From afa0418104e817e972f8062f80410a7bfb1c573a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 00:11:28 +0300 Subject: [PATCH 03/33] Make strand caster timeout refresh on pour Previously, if a caster has been idle for a while, the first time something is poured into it, it would spew out a partial load almost immediately. The original intention behind the timeout was instead to make the strand caster perform incomplete operations if no new material has been poured for a while. This change makes the behaviour closer to intended. Most of the time, persistent use of the caster would consistently reach full fill, and incomplete fill will only be processed at the end. --- .../machine/TileEntityMachineStrandCaster.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index 9ca467285..a3a8b3ded 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -32,7 +32,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase public FluidTank water; public FluidTank steam; - private long lastCastTick = 0; + private long lastProgressTick = 0; public String getName() { return "container.machineStrandCaster"; @@ -77,7 +77,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase int moldsToCast = maxProcessable(); // Makes it flush the buffers after 10 seconds of inactivity, or when they're full - if (moldsToCast > 0 && (moldsToCast >= 9 || worldObj.getWorldTime() >= lastCastTick + 200)) { + if (moldsToCast > 0 && (moldsToCast >= 9 || worldObj.getWorldTime() >= lastProgressTick + 200)) { ItemMold.Mold mold = this.getInstalledMold(); @@ -108,7 +108,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase water.setFill(water.getFill() - getWaterRequired() * moldsToCast); steam.setFill(steam.getFill() + getWaterRequired() * moldsToCast); - lastCastTick = worldObj.getWorldTime(); + lastProgressTick = worldObj.getWorldTime(); } networkPackNT(150); @@ -226,6 +226,8 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase stack.amount -= required; + lastProgressTick = world.getWorldTime(); + return stack; } @@ -272,7 +274,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase super.writeToNBT(nbt); water.writeToNBT(nbt, "w"); steam.writeToNBT(nbt, "s"); - nbt.setLong("t", lastCastTick); + nbt.setLong("t", lastProgressTick); } @Override @@ -280,7 +282,7 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase super.readFromNBT(nbt); water.readFromNBT(nbt, "w"); steam.readFromNBT(nbt, "s"); - lastCastTick = nbt.getLong("t"); + lastProgressTick = nbt.getLong("t"); } @Override From 2d33e90f931770c218cf833b28d93a236e213389 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 00:59:22 +0300 Subject: [PATCH 04/33] Allow climbing freestanding chains and vines using spacebar --- .../com/hbm/main/ModEventHandlerClient.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index a2ee8b962..fc9d0041f 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -68,6 +68,7 @@ import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; +import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; @@ -86,6 +87,7 @@ import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.client.settings.GameSettings; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -1098,6 +1100,28 @@ public class ModEventHandlerClient { } } + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onPlayerTick(TickEvent.PlayerTickEvent event) { + EntityPlayer player = event.player; + + int x = MathHelper.floor_double(player.posX); + int y = MathHelper.floor_double(player.posY); + int z = MathHelper.floor_double(player.posZ); + Block b = player.worldObj.getBlock(x, y, z); + + // Support climbing freestanding vines and chains using spacebar + if ( + b.isLadder(player.worldObj, x, y, z, player) && + b.getCollisionBoundingBoxFromPool(player.worldObj, x, y, z) == null && + !player.capabilities.isFlying && + GameSettings.isKeyDown(Minecraft.getMinecraft().gameSettings.keyBindJump) && + player.motionY < 0.15 + ) { + player.motionY = 0.15; + } + } + @SideOnly(Side.CLIENT) @SubscribeEvent(priority = EventPriority.LOW) public void onMouseClicked(InputEvent.MouseInputEvent event) { From 4a931a4be1799750deae585bbe877a1f1021bc78 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 01:04:21 +0300 Subject: [PATCH 05/33] Remove angry metal drop Considerting it is no longer used anywhere (Eye of Harmony doesn't count since the AMS is long deprecated), it felt weird to still get it 10% of the time --- src/main/java/com/hbm/blocks/generic/BlockOre.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index 36cd4e00c..eda698874 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -68,9 +68,6 @@ public class BlockOre extends Block { if(this == ModBlocks.ore_nether_fire) { return rand.nextInt(10) == 0 ? ModItems.ingot_phosphorus : ModItems.powder_fire; } - if(this == ModBlocks.block_meteor) { - return rand.nextInt(10) == 0 ? ModItems.plate_dalekanium : Item.getItemFromBlock(ModBlocks.block_meteor); - } if(this == ModBlocks.block_meteor_cobble) { return ModItems.fragment_meteorite; } From 5d7fc996e591a313d22d16991bea01d7ce23d80e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 14:32:00 +0300 Subject: [PATCH 06/33] Make autosaw replant crops It doesn't seem too far-fetched to suggest the seeds that fall to the ground are replanted in a natural way. I had to replace the old ray-tracing approach with a more straightforward iteration over all possibly affected blocks (under 400, most of them skipped). In terms of performance this seems on par with the original solution (the raytrace function alone did 200 iterations). --- .../machine/TileEntityMachineAutosaw.java | 106 ++++++++++++++---- 1 file changed, 85 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index af5d11cf7..d7bddd3a1 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -22,14 +23,20 @@ import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockLeaves; +import net.minecraft.block.IGrowable; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IBufPacketReceiver, IFluidStandardReceiver, IFluidCopiable { @@ -119,29 +126,40 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.rotationYaw -= 360; } - Vec3 grace = Vec3.createVectorHelper(0, 0, -3.5); - grace.rotateAroundY(-(float) Math.toRadians(rotationYaw)); - grace.xCoord += pivot.xCoord; - grace.yCoord += pivot.yCoord; - grace.zCoord += pivot.zCoord; + final double CUT_ANGLE = Math.toRadians(5); + double rotationYawRads = Math.toRadians((rotationYaw + 270) % 360); - Vec3 detector = Vec3.createVectorHelper(0, 0, -9); - detector.rotateAroundY(-(float) Math.toRadians(rotationYaw)); - detector.xCoord += pivot.xCoord; - detector.yCoord += pivot.yCoord; - detector.zCoord += pivot.zCoord; - MovingObjectPosition pos = worldObj.func_147447_a(grace, detector, false, false, false); + outer: + for(int dx = -9; dx <= 9; dx++) { + for(int dz = -9; dz <= 9; dz++) { + int sqrDst = dx * dx + dz * dz; - if(pos != null && pos.typeOfHit == pos.typeOfHit.BLOCK) { + if(sqrDst <= 4 || sqrDst > 81) + continue; + + double angle = Math.atan2(dz, dx); + double relAngle = Math.abs(angle - rotationYawRads); + relAngle = Math.abs((relAngle + Math.PI) % (2 * Math.PI) - Math.PI); - Block b = worldObj.getBlock(pos.blockX, pos.blockY, pos.blockZ); + if(relAngle > CUT_ANGLE) + continue; - if(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { + int x = xCoord + dx; + int y = yCoord + 1; + int z = zCoord + dz; - int meta = worldObj.getBlockMetadata(pos.blockX, pos.blockY, pos.blockZ); - if(!shouldIgnore(b, meta)) { - state = 1; - } + Block b = worldObj.getBlock(x, y, z); + if(!(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants)) + continue; + + int meta = worldObj.getBlockMetadata(x, y, z); + if(shouldIgnore(worldObj, x, y, z, b, meta)) + continue; + + // com.hbm.main.MainRegistry.logger.info("[Abel] found target at " + x + ", " + y + ", " + z + ", angle=" + rotationYaw); + + state = 1; + break outer; } } } @@ -212,11 +230,15 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB } /** Anything additionally that the detector nor the blades should pick up on, like non-mature willows */ - public static boolean shouldIgnore(Block b, int meta) { + public static boolean shouldIgnore(World world, int x, int y, int z, Block b, int meta) { if(b == ModBlocks.plant_tall) { return meta == EnumTallFlower.CD2.ordinal() + 8 || meta == EnumTallFlower.CD3.ordinal() + 8; } + if((b instanceof IGrowable)) { + return ((IGrowable) b).func_149851_a(world, x, y, z, world.isRemote); + } + return false; } @@ -225,12 +247,12 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB Block b = worldObj.getBlock(x, y, z); int meta = worldObj.getBlockMetadata(x, y, z); - if(shouldIgnore(b, meta)) { + if(shouldIgnore(worldObj, x, y, z, b, meta)) { return; } if(b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { - worldObj.func_147480_a(x, y, z, true); + cutCrop(x, y, z); return; } @@ -242,6 +264,48 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB } } + protected void cutCrop(int x, int y, int z) { + + Block soil = worldObj.getBlock(x, y - 1, z); + + Block b = worldObj.getBlock(x, y, z); + int meta = worldObj.getBlockMetadata(x, y, z); + + worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(b) + (meta << 12)); + + Block replacementBlock = Blocks.air; + int replacementMeta = 0; + + if (!worldObj.isRemote && !worldObj.restoringBlockSnapshots) { + ArrayList drops = b.getDrops(worldObj, x, y, z, meta, 0); + boolean replanted = false; + + for (ItemStack drop : drops) { + if (!replanted && drop.getItem() instanceof IPlantable) { + IPlantable seed = (IPlantable) drop.getItem(); + + if(soil.canSustainPlant(worldObj, x, y - 1, z, ForgeDirection.UP, seed)) { + replacementBlock = seed.getPlant(worldObj, x, y, z); + replacementMeta = seed.getPlantMetadata(worldObj, x, y, z); + replanted = true; + drop.stackSize -= 1; + } + } + + float delta = 0.7F; + double dx = (double)(worldObj.rand.nextFloat() * delta) + (double)(1.0F - delta) * 0.5D; + double dy = (double)(worldObj.rand.nextFloat() * delta) + (double)(1.0F - delta) * 0.5D; + double dz = (double)(worldObj.rand.nextFloat() * delta) + (double)(1.0F - delta) * 0.5D; + + EntityItem entityItem = new EntityItem(worldObj, x + dx, y + dy, z + dz, drop); + entityItem.delayBeforeCanPickup = 10; + worldObj.spawnEntityInWorld(entityItem); + } + } + + worldObj.setBlock(x, y, z, replacementBlock, replacementMeta, 3); + } + protected void fellTree(int x, int y, int z) { if(worldObj.getBlock(x, y - 1, z).getMaterial() == Material.wood) { From 4ae675aebc3cab064b0d83db78fcca683910e834 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 18:30:35 +0300 Subject: [PATCH 07/33] Fix autocrafter output slot This is the only case I found where a SlotPattern was supposed to support a stack size different from 1, but if there's any more, just add a `, true` to the end of the corresponsing slot constructor --- src/main/java/com/hbm/inventory/SlotPattern.java | 11 ++++++++++- .../hbm/inventory/container/ContainerAutocrafter.java | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/SlotPattern.java b/src/main/java/com/hbm/inventory/SlotPattern.java index 550fae5b6..a6957c7ac 100644 --- a/src/main/java/com/hbm/inventory/SlotPattern.java +++ b/src/main/java/com/hbm/inventory/SlotPattern.java @@ -10,10 +10,17 @@ import net.minecraft.item.ItemStack; public class SlotPattern extends Slot { protected boolean canHover = true; + + protected boolean allowStackSize = false; public SlotPattern(IInventory inv, int index, int x, int y) { super(inv, index, x, y); } + + public SlotPattern(IInventory inv, int index, int x, int y, boolean allowStackSize) { + super(inv, index, x, y); + this.allowStackSize = allowStackSize; + } @Override public boolean canTakeStack(EntityPlayer player) { @@ -29,7 +36,9 @@ public class SlotPattern extends Slot { public void putStack(ItemStack stack) { if (stack != null) { stack = stack.copy(); - stack.stackSize = 1; + + if (!allowStackSize) + stack.stackSize = 1; } super.putStack(stack); } diff --git a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java index f18f83c9f..2c8b0438b 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java +++ b/src/main/java/com/hbm/inventory/container/ContainerAutocrafter.java @@ -24,7 +24,7 @@ public class ContainerAutocrafter extends ContainerBase { this.addSlotToContainer(new SlotPattern(tedf, j + i * 3, 44 + j * 18, 22 + i * 18)); } } - this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40)); + this.addSlotToContainer(new SlotPattern(tedf, 9, 116, 40, true)); /* RECIPE */ addSlots(tedf,10, 44, 86, 3, 3); From 4b3430f9b188d3cf5fe74d975796e54449a78e3a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 18:49:49 +0300 Subject: [PATCH 08/33] Scrollwheel support for template folder --- .../gui/GUIScreenTemplateFolder.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java index a91652ef0..398f4e1fb 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenTemplateFolder.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Locale; import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -153,6 +154,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { return (int) Math.ceil((stacks.size() - 1) / (5 * 7)); } + @Override public void updateScreen() { if(currentPage < 0) currentPage = 0; @@ -160,6 +162,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { currentPage = getPageCount(); } + @Override public void drawScreen(int mouseX, int mouseY, float f) { this.drawDefaultBackground(); this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY); @@ -168,6 +171,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { GL11.glEnable(GL11.GL_LIGHTING); } + @Override public void initGui() { super.initGui(); this.guiLeft = (this.width - this.xSize) / 2; @@ -204,6 +208,26 @@ public class GUIScreenTemplateFolder extends GuiScreen { buttons.add(new FolderButton(guiLeft + 25 + (27 * 4) + 18, guiTop + 26 + (27 * 3), 2, "Next")); } + @Override + public void handleMouseInput() { + super.handleMouseInput(); + + if(Mouse.getEventButton() == -1) { + int scroll = Mouse.getEventDWheel(); + + if(scroll < 0) { + if(currentPage > 0) + currentPage--; + updateButtons(); + } else if(scroll > 0) { + if(currentPage < getPageCount()) + currentPage++; + updateButtons(); + } + } + } + + @Override protected void mouseClicked(int i, int j, int k) { if(i >= guiLeft + 45 && i < guiLeft + 117 && j >= guiTop + 211 && j < guiTop + 223) { @@ -251,6 +275,7 @@ public class GUIScreenTemplateFolder extends GuiScreen { search.drawTextBox(); } + @Override protected void keyTyped(char p_73869_1_, int p_73869_2_) { if (this.search.textboxKeyTyped(p_73869_1_, p_73869_2_)) { From a6740a35e9cd6b2c1d87e1fd6449e75560b8cd70 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 19:35:06 +0300 Subject: [PATCH 09/33] Make mass storage process input instantly This allows to shift-click an entire inventory-load into a mass storage. Previously this was bottlenecked by the network latency and the tile entity tickrate. Taking stuff out is unaffected for now, I'll see what I can do --- .../container/ContainerMassStorage.java | 37 ++++++++++--------- .../storage/TileEntityMassStorage.java | 24 +++++++++++- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java index f8a760816..d0ffae2ee 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java @@ -27,32 +27,35 @@ public class ContainerMassStorage extends ContainerBase { } @Override - public ItemStack transferStackInSlot(EntityPlayer player, int par2) { - ItemStack var3 = null; - Slot var4 = (Slot) this.inventorySlots.get(par2); + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack result = null; + Slot slot = (Slot) this.inventorySlots.get(index); - if(var4 != null && var4.getHasStack()) { - ItemStack var5 = var4.getStack(); - var3 = var5.copy(); + if(slot != null && slot.getHasStack()) { + ItemStack initial = slot.getStack(); + result = initial.copy(); - if(par2 == 0 || par2 == 2) { - if(!this.mergeItemStack(var5, storage.getSizeInventory(), this.inventorySlots.size(), true)) { + if(index == 0 || index == 2) { + if(!this.mergeItemStack(initial, storage.getSizeInventory(), this.inventorySlots.size(), true)) { return null; } - } else if(!this.mergeItemStack(var5, 0, 1, false)) { - return null; - } - - if(var5.stackSize == 0) { - var4.putStack((ItemStack) null); } else { - var4.onSlotChanged(); + // Try to insert instantly, then fall back to regular slot behavior + if(!storage.insert(initial) && !this.mergeItemStack(initial, 0, 1, false)) { + return null; + } } - var4.onPickupFromSlot(player, var5); + if(initial.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + + slot.onPickupFromSlot(player, initial); } - return var3; + return result; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index d283b8269..fe6f15414 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -62,7 +62,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa if(this.getType() == null) this.stack = 0; - if(getType() != null && getStockpile() < getCapacity() && slots[0] != null && slots[0].isItemEqual(getType()) && ItemStack.areItemStackTagsEqual(slots[0], getType())) { + if(canInsert(slots[0])) { int remaining = getCapacity() - getStockpile(); int toRemove = Math.min(remaining, slots[0].stackSize); @@ -95,6 +95,26 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa } } + public boolean canInsert(ItemStack stack) { + return getType() != null && getStockpile() < getCapacity() && stack != null && stack.isItemEqual(getType()) && ItemStack.areItemStackTagsEqual(stack, getType()); + } + + public boolean insert(ItemStack stack) { + if (!canInsert(stack)) + return false; + + int remaining = getCapacity() - getStockpile(); + + if (remaining < stack.stackSize) + return false; + + this.stack += stack.stackSize; + stack.stackSize = 0; + this.markDirty(); + + return true; + } + @Override public void serialize(ByteBuf buf) { buf.writeInt(this.stack); @@ -196,9 +216,9 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa if(data.hasKey("toggle")) { this.output = !output; } + if(data.hasKey("slot") && this.getStockpile() <= 0){ setFilterContents(data); - if(slots[1] != null) slots[1].stackSize = 1; } } From 7ef016ccced5897d680009977334df7eac41f57b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 20:09:13 +0300 Subject: [PATCH 10/33] Make mass storage process output instantly Same deal as previously, this bypasses the bottleneck of tile entity ticking and network latency. This change is less relevant than the previous one, because there shift-dragging or shift-double-clicking were possible with mods, while here it only really affects autoclickers. Still, it can't hurt --- .../container/ContainerMassStorage.java | 7 ++++++- .../storage/TileEntityMassStorage.java | 20 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java index d0ffae2ee..fae68ad3a 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMassStorage.java @@ -31,6 +31,11 @@ public class ContainerMassStorage extends ContainerBase { ItemStack result = null; Slot slot = (Slot) this.inventorySlots.get(index); + // Refill instantly if needed, then do regular slot behavior + if(index == 2 && slot != null && !slot.getHasStack()) { + slot.putStack(storage.quickExtract()); + } + if(slot != null && slot.getHasStack()) { ItemStack initial = slot.getStack(); result = initial.copy(); @@ -41,7 +46,7 @@ public class ContainerMassStorage extends ContainerBase { } } else { // Try to insert instantly, then fall back to regular slot behavior - if(!storage.insert(initial) && !this.mergeItemStack(initial, 0, 1, false)) { + if(!storage.quickInsert(initial) && !this.mergeItemStack(initial, 0, 1, false)) { return null; } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index fe6f15414..0618a1643 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -99,7 +99,7 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa return getType() != null && getStockpile() < getCapacity() && stack != null && stack.isItemEqual(getType()) && ItemStack.areItemStackTagsEqual(stack, getType()); } - public boolean insert(ItemStack stack) { + public boolean quickInsert(ItemStack stack) { if (!canInsert(stack)) return false; @@ -115,6 +115,24 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa return true; } + public ItemStack quickExtract() { + if (!output) { + return null; + } + + int amount = getType().getMaxStackSize(); + + if (getStockpile() < amount) + return null; + + ItemStack result = slots[1].copy(); + result.stackSize = amount; + this.stack -= amount; + this.markDirty(); + + return result; + } + @Override public void serialize(ByteBuf buf) { buf.writeInt(this.stack); From 169f1666e733f48e69277f3c28181274b288b83e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 20:39:44 +0300 Subject: [PATCH 11/33] Retain names for storage crates --- .../hbm/blocks/generic/BlockStorageCrate.java | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index 5e4a5937f..fa0258417 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -157,19 +157,26 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT if(!nbt.hasNoTags()) { drop.stackTagCompound = nbt; - - try { - byte[] abyte = CompressedStreamTools.compress(nbt); - - if(abyte.length > 6000) { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); - return world.setBlockToAir(x, y, z); - } - - } catch(IOException e) { } } + if(inv instanceof TileEntityCrateBase) { + TileEntityCrateBase crate = (TileEntityCrateBase) inv; + if (crate.hasCustomInventoryName()) { + drop.setStackDisplayName(crate.getInventoryName()); + } + } + + try { + byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); + + if(abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + return world.setBlockToAir(x, y, z); + } + + } catch(IOException e) { } + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); } @@ -220,8 +227,14 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT lockable.lock(); } } + if(inv instanceof TileEntityCrateBase) { - ((TileEntityCrateBase) inv).hasSpiders = stack.stackTagCompound.getBoolean("spiders"); + TileEntityCrateBase crate = (TileEntityCrateBase) inv; + crate.hasSpiders = stack.stackTagCompound.getBoolean("spiders"); + + if (stack.hasDisplayName()) { + crate.setCustomName(stack.getDisplayName()); + } } } From 0f7c8b49f311739f91923a0672b1ca4210e7427b Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 20:54:14 +0300 Subject: [PATCH 12/33] Fix crate NBT inconsistency in crates Apparently, a mined crate used to differ from a freshly crafted one because the former didn't have any spiders in it. The latter? Neither. --- .../java/com/hbm/blocks/generic/BlockStorageCrate.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index fa0258417..cd088bd22 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -152,8 +152,13 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT } } - if(inv instanceof TileEntityCrateBase) - nbt.setBoolean("spiders", ((TileEntityCrateBase) inv).hasSpiders); + if(inv instanceof TileEntityCrateBase) { + TileEntityCrateBase crate = (TileEntityCrateBase) inv; + // Saves memory and ensures consistency between crafted crates and mined ones + if (crate.hasSpiders) { + nbt.setBoolean("spiders", true); + } + } if(!nbt.hasNoTags()) { drop.stackTagCompound = nbt; From 4bc07d9cbf16e31e3da762ec01a80461ff5f2fe9 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 21:05:15 +0300 Subject: [PATCH 13/33] Add missing check --- .../hbm/blocks/generic/BlockStorageCrate.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index cd088bd22..02784843f 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -171,16 +171,18 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT } } - try { - byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); + if (drop.hasTagCompound()) { + try { + byte[] abyte = CompressedStreamTools.compress(drop.stackTagCompound); - if(abyte.length > 6000) { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); - return world.setBlockToAir(x, y, z); - } + if(abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(this))); + return world.setBlockToAir(x, y, z); + } - } catch(IOException e) { } + } catch(IOException e) { } + } world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, drop)); } From 6fb0b647fd02cce5f3385416263cb3a93270de3d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 21:34:48 +0300 Subject: [PATCH 14/33] Disable repair cost increment on rename Effectively a backport of a 1.8 feature. Relevant because otherwise a renamed crate is nbt-incompatible with itself after being placed and broken --- src/main/java/com/hbm/main/ModEventHandler.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index d587ebe4b..e9c5b35f8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -107,6 +107,7 @@ import net.minecraftforge.event.entity.item.ItemTossEvent; import net.minecraftforge.event.entity.living.*; import net.minecraftforge.event.entity.living.LivingEvent.LivingJumpEvent; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.event.entity.player.AnvilRepairEvent; import net.minecraftforge.event.entity.player.AttackEntityEvent; import net.minecraftforge.event.entity.player.PlayerFlyableFallEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -1248,6 +1249,15 @@ public class ModEventHandler { } } + @SubscribeEvent + public void onAnvilRepair(AnvilRepairEvent event) { + + // Anvil renaming no longer increments the repair cost + if(event.left != null && event.right == null && event.output != null) { + event.output.setRepairCost(event.left.getRepairCost()); + } + } + @SubscribeEvent public void onClickSign(PlayerInteractEvent event) { From 8970878e6b9cd59e13ae35271ca18c3a2682b78a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 21:47:16 +0300 Subject: [PATCH 15/33] Add look overlay to named crates I think this is better than signs for a crate-based stockpile. Only shows the name for now, but a contents summary might be included too. --- .../hbm/blocks/generic/BlockStorageCrate.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index 02784843f..5f0261791 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Random; import com.hbm.blocks.IBlockMulti; +import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ModBlocks; import com.hbm.config.ServerConfig; @@ -39,8 +40,9 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; -public class BlockStorageCrate extends BlockContainer implements IBlockMulti, ITooltipProvider { +public class BlockStorageCrate extends BlockContainer implements IBlockMulti, ILookOverlay, ITooltipProvider { @SideOnly(Side.CLIENT) private IIcon iconTop; @@ -374,4 +376,20 @@ public class BlockStorageCrate extends BlockContainer implements IBlockMulti, IT } } } + + @Override + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + + TileEntity te = world.getTileEntity(x, y, z); + + if (!(te instanceof IInventory)) + return; + + IInventory inv = (IInventory) te; + + if (!inv.hasCustomInventoryName()) + return; + + ILookOverlay.printGeneric(event, inv.getInventoryName(), 0xffff00, 0x404000, new ArrayList(0)); + } } From cf26eac2c999a22deff1a64bae257c63efc134fd Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 22:41:58 +0300 Subject: [PATCH 16/33] Fix renaming hook --- src/main/java/com/hbm/main/ModEventHandler.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index e9c5b35f8..f1be76394 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -98,6 +98,7 @@ import net.minecraft.util.*; import net.minecraft.world.World; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.CommandEvent; import net.minecraftforge.event.ServerChatEvent; import net.minecraftforge.event.entity.EntityEvent; @@ -1251,10 +1252,10 @@ public class ModEventHandler { @SubscribeEvent public void onAnvilRepair(AnvilRepairEvent event) { - + // Anvil renaming no longer increments the repair cost - if(event.left != null && event.right == null && event.output != null) { - event.output.setRepairCost(event.left.getRepairCost()); + if(event.left == null && event.right != null && event.output != null) { + event.output.setRepairCost(event.right.getRepairCost()); } } From 5fe26d5647106ab5843c8c4c1e32fe1eab10f588 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 23:12:38 +0300 Subject: [PATCH 17/33] Fix renaming hook again Turns out, there's a bug in Forge and the stacks are misassigned for that particular event --- src/main/java/com/hbm/main/ModEventHandler.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index f1be76394..ce0d124cb 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -1252,10 +1252,11 @@ public class ModEventHandler { @SubscribeEvent public void onAnvilRepair(AnvilRepairEvent event) { - + // Anvil renaming no longer increments the repair cost + // Note: Forge has a bug, the names are wrong. Right is output, output is left, left is right if(event.left == null && event.right != null && event.output != null) { - event.output.setRepairCost(event.right.getRepairCost()); + event.right.setRepairCost(event.output.getRepairCost()); } } From 997fb201297c35c7adfddea7791baed4daf4d7dc Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 23:34:49 +0300 Subject: [PATCH 18/33] This time for sure --- src/main/java/com/hbm/main/ModEventHandler.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index ce0d124cb..29682d1b8 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -1256,7 +1256,17 @@ public class ModEventHandler { // Anvil renaming no longer increments the repair cost // Note: Forge has a bug, the names are wrong. Right is output, output is left, left is right if(event.left == null && event.right != null && event.output != null) { - event.right.setRepairCost(event.output.getRepairCost()); + int oldRepairCost = event.output.getRepairCost(); + + if (oldRepairCost > 0) { + event.right.setRepairCost(oldRepairCost); + } else if (event.right.hasTagCompound()) { + NBTTagCompound nbt = event.right.getTagCompound(); + nbt.removeTag("RepairCost"); + if (nbt.hasNoTags()) { + event.right.setTagCompound(null); + } + } } } From 8a7934d2743c8342bfca589b7915cfce4f577410 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Mon, 2 Jun 2025 23:41:13 +0300 Subject: [PATCH 19/33] Fix custom name for crates opened from hand --- .../java/com/hbm/items/block/ItemBlockStorageCrate.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index cf24e36c3..620ca918c 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -122,7 +122,11 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider @Override public String getInventoryName() { - return findCrateType(target.getItem()).getInventoryName(); + TileEntityCrateBase tile = findCrateType(target.getItem()); + if (hasCustomInventoryName()) { + tile.setCustomName(target.getDisplayName()); + } + return tile.getInventoryName(); } @Override From 3733a8bee9a5ad536104ac2efc4186d15a22157e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 15:52:29 +0300 Subject: [PATCH 20/33] Fan force falloff Previously, with two fans facing into each other, either one of them would completely overpower the other, or they'd cancel each other out. Now the force is inversely proportional to the distance, so the items end up in the middle --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 37a96e5f8..121044d44 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -18,6 +18,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -103,10 +104,13 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro List affected = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(xCoord + 0.5 + Math.min(x, 0), yCoord + 0.5 + Math.min(y, 0), zCoord + 0.5 + Math.min(z, 0), xCoord + 0.5 + Math.max(x, 0), yCoord + 0.5 + Math.max(y, 0), zCoord + 0.5 + Math.max(z, 0)).expand(0.5, 0.5, 0.5)); for(Entity e : affected) { + + double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); + double coeff = push * (1 - dist / range / 2); - e.motionX += dir.offsetX * push; - e.motionY += dir.offsetY * push; - e.motionZ += dir.offsetZ * push; + e.motionX += dir.offsetX * coeff; + e.motionY += dir.offsetY * coeff; + e.motionZ += dir.offsetZ * coeff; } if(worldObj.isRemote && worldObj.rand.nextInt(30) == 0) { From 79d510aefb2238df57e278f9963362ad8716f98e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 16:32:48 +0300 Subject: [PATCH 21/33] Increase base fan force --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 121044d44..e4079cfbc 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -81,7 +81,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro int range = 10; int effRange = 0; - double push = 0.1; + double push = 0.15; for(int i = 1; i <= range; i++) { Block block = worldObj.getBlock(xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i); From f8d827d6cdfa9b907812d3373918afd6d1f379a8 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 19:03:19 +0300 Subject: [PATCH 22/33] Make autosaw respect walls Previously the blade always phased through solid walls. Now, if colliding with one, it will retract forcibly. In case there are valid targets behind a wall, it will ignore them for the next 5 degrees of rotation --- .../machine/TileEntityMachineAutosaw.java | 86 ++++++++++--------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index d7bddd3a1..122697ca6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -63,6 +63,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB private int state = 0; private int turnProgress; + private int forceSkip = 0; public float spin; public float lastSpin; @@ -126,40 +127,42 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.rotationYaw -= 360; } - final double CUT_ANGLE = Math.toRadians(5); - double rotationYawRads = Math.toRadians((rotationYaw + 270) % 360); + if(forceSkip > 0) { + forceSkip--; + } else { + final double CUT_ANGLE = Math.toRadians(5); + double rotationYawRads = Math.toRadians((rotationYaw + 270) % 360); - outer: - for(int dx = -9; dx <= 9; dx++) { - for(int dz = -9; dz <= 9; dz++) { - int sqrDst = dx * dx + dz * dz; + outer: + for(int dx = -9; dx <= 9; dx++) { + for(int dz = -9; dz <= 9; dz++) { + int sqrDst = dx * dx + dz * dz; - if(sqrDst <= 4 || sqrDst > 81) - continue; - - double angle = Math.atan2(dz, dx); - double relAngle = Math.abs(angle - rotationYawRads); - relAngle = Math.abs((relAngle + Math.PI) % (2 * Math.PI) - Math.PI); + if(sqrDst <= 4 || sqrDst > 81) + continue; + + double angle = Math.atan2(dz, dx); + double relAngle = Math.abs(angle - rotationYawRads); + relAngle = Math.abs((relAngle + Math.PI) % (2 * Math.PI) - Math.PI); - if(relAngle > CUT_ANGLE) - continue; + if(relAngle > CUT_ANGLE) + continue; - int x = xCoord + dx; - int y = yCoord + 1; - int z = zCoord + dz; + int x = xCoord + dx; + int y = yCoord + 1; + int z = zCoord + dz; - Block b = worldObj.getBlock(x, y, z); - if(!(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants)) - continue; + Block b = worldObj.getBlock(x, y, z); + if(!(b.getMaterial() == Material.wood || b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants)) + continue; - int meta = worldObj.getBlockMetadata(x, y, z); - if(shouldIgnore(worldObj, x, y, z, b, meta)) - continue; - - // com.hbm.main.MainRegistry.logger.info("[Abel] found target at " + x + ", " + y + ", " + z + ", angle=" + rotationYaw); - - state = 1; - break outer; + int meta = worldObj.getBlockMetadata(x, y, z); + if(shouldIgnore(worldObj, x, y, z, b, meta)) + continue; + + state = 1; + break outer; + } } } } @@ -247,21 +250,22 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB Block b = worldObj.getBlock(x, y, z); int meta = worldObj.getBlockMetadata(x, y, z); - if(shouldIgnore(worldObj, x, y, z, b, meta)) { - return; - } - - if(b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { - cutCrop(x, y, z); - return; - } - - if(b.getMaterial() == Material.wood) { - fellTree(x, y, z); - if(state == 1) { - state = 2; + if(!shouldIgnore(worldObj, x, y, z, b, meta)) { + if(b.getMaterial() == Material.leaves || b.getMaterial() == Material.plants) { + cutCrop(x, y, z); + } else if(b.getMaterial() == Material.wood) { + fellTree(x, y, z); + if(state == 1) { + state = 2; + } } } + + // Return when hitting a wall + if(state == 1 && worldObj.getBlock(x, y, z).isNormalCube(worldObj, x, y, z)) { + state = 2; + forceSkip = 5; + } } protected void cutCrop(int x, int y, int z) { From 8c196f05ca619d9282bbe73e3cf3e5b75af7ca49 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 20:08:02 +0300 Subject: [PATCH 23/33] Save forseSkip to NBT Not included in `serialize()` and `deserialize()` because it is server-side-only --- .../com/hbm/tileentity/machine/TileEntityMachineAutosaw.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 122697ca6..6cfcafa54 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -52,6 +52,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public FluidTank tank; public boolean isOn; + private int forceSkip; public float syncYaw; public float rotationYaw; public float prevRotationYaw; @@ -63,7 +64,6 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB private int state = 0; private int turnProgress; - private int forceSkip = 0; public float spin; public float lastSpin; @@ -365,6 +365,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.isOn = nbt.getBoolean("isOn"); + this.forceSkip = nbt.getInteger("skip"); this.rotationYaw = nbt.getFloat("yaw"); this.rotationPitch = nbt.getFloat("pitch"); this.state = nbt.getInteger("state"); @@ -375,6 +376,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setBoolean("isOn", this.isOn); + nbt.setInteger("skip", this.forceSkip); nbt.setFloat("yaw", this.rotationYaw); nbt.setFloat("pitch", this.rotationPitch); nbt.setInteger("state", this.state); From df8d456a907bb5edfe557904c1eca07ca336f4bb Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 20:22:25 +0300 Subject: [PATCH 24/33] Allow suspending autosaw with a screwdriver Localized, though I'm not sure if it really needs to be --- .../hbm/blocks/machine/MachineAutosaw.java | 25 ++++++++++++++++++- .../machine/TileEntityMachineAutosaw.java | 9 +++++-- src/main/resources/assets/hbm/lang/de_DE.lang | 1 + src/main/resources/assets/hbm/lang/en_US.lang | 1 + src/main/resources/assets/hbm/lang/it_IT.lang | 1 + src/main/resources/assets/hbm/lang/pl_PL.lang | 1 + src/main/resources/assets/hbm/lang/ru_RU.lang | 1 + src/main/resources/assets/hbm/lang/uk_UA.lang | 1 + src/main/resources/assets/hbm/lang/zh_CN.lang | 1 + 9 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java b/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java index f8fb34a2c..67e58f18f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java +++ b/src/main/java/com/hbm/blocks/machine/MachineAutosaw.java @@ -10,6 +10,7 @@ import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.tileentity.machine.TileEntityMachineAutosaw; import com.hbm.util.i18n.I18nUtil; +import api.hbm.block.IToolable; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -22,7 +23,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -public class MachineAutosaw extends BlockContainer implements ILookOverlay, ITooltipProvider { +public class MachineAutosaw extends BlockContainer implements ILookOverlay, ITooltipProvider, IToolable { public MachineAutosaw() { super(Material.iron); @@ -72,6 +73,24 @@ public class MachineAutosaw extends BlockContainer implements ILookOverlay, IToo return true; } + @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.SCREWDRIVER) + return false; + + TileEntity te = world.getTileEntity(x, y, z); + + if(!(te instanceof TileEntityMachineAutosaw)) + return false; + + TileEntityMachineAutosaw saw = (TileEntityMachineAutosaw) te; + + saw.isSuspended = !saw.isSuspended; + saw.markDirty(); + + return true; + } + @Override public void printHook(Pre event, World world, int x, int y, int z) { @@ -84,6 +103,10 @@ public class MachineAutosaw extends BlockContainer implements ILookOverlay, IToo List text = new ArrayList(); text.add(saw.tank.getTankType().getLocalizedName() + ": " + saw.tank.getFill() + "/" + saw.tank.getMaxFill() + "mB"); + + if (saw.isSuspended) { + text.add(EnumChatFormatting.RED + "! " + I18nUtil.resolveKey(getUnlocalizedName() + ".suspended") + " !"); + } ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 6cfcafa54..72a3e9b8c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -52,6 +52,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public FluidTank tank; public boolean isOn; + public boolean isSuspended; private int forceSkip; public float syncYaw; public float rotationYaw; @@ -88,7 +89,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.subscribeToAllAround(tank.getTankType(), this); } - if(isOn) { + if(isOn && !isSuspended) { Vec3 pivot = Vec3.createVectorHelper(xCoord + 0.5, yCoord + 1.75, zCoord + 0.5); Vec3 upperArm = Vec3.createVectorHelper(0, 0, -4); upperArm.rotateAroundX((float) Math.toRadians(80 - rotationPitch)); @@ -202,7 +203,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB this.lastSpin = this.spin; - if(isOn) { + if(isOn && !isSuspended) { this.spin += 15F; Vec3 vec = Vec3.createVectorHelper(0.625, 0, 1.625); @@ -347,6 +348,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB @Override public void serialize(ByteBuf buf) { buf.writeBoolean(this.isOn); + buf.writeBoolean(this.isSuspended); buf.writeFloat(this.rotationYaw); buf.writeFloat(this.rotationPitch); this.tank.serialize(buf); @@ -355,6 +357,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB @Override public void deserialize(ByteBuf buf) { this.isOn = buf.readBoolean(); + this.isSuspended = buf.readBoolean(); this.syncYaw = buf.readFloat(); this.syncPitch = buf.readFloat(); this.turnProgress = 3; //use 3-ply for extra smoothness @@ -365,6 +368,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); this.isOn = nbt.getBoolean("isOn"); + this.isSuspended = nbt.getBoolean("isSuspended"); this.forceSkip = nbt.getInteger("skip"); this.rotationYaw = nbt.getFloat("yaw"); this.rotationPitch = nbt.getFloat("pitch"); @@ -376,6 +380,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); nbt.setBoolean("isOn", this.isOn); + nbt.setBoolean("isSuspended", this.isSuspended); nbt.setInteger("skip", this.forceSkip); nbt.setFloat("yaw", this.rotationYaw); nbt.setFloat("pitch", this.rotationPitch); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 984ab6040..0d4393362 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4324,6 +4324,7 @@ tile.machine_assemfac.name=Fertigungsfabrik tile.machine_autocrafter.name=Automatische Werkbank tile.machine_autosaw.name=Automatische Kreissäge tile.machine_autosaw.desc=Schneidet Pflanzen nieder, pflanzt Bäume nach$Akzeptiert:$-Holzöl$-Ethanol$-Fischöl$-Schweröl +tile.machine_autosaw.suspended=Angehalten tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energiespeicherblock tile.machine_battery_potato.name=Kartoffelbatterieblock diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index df2d909a3..f0e82f906 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5458,6 +5458,7 @@ tile.machine_assemfac.name=Assembly Factory tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil +tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index c3d83825d..4ce24e6b5 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -5537,6 +5537,7 @@ tile.machine_assemfac.name=Assembly Factory tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw tile.machine_autosaw.desc=Cuts down nearby plants, re-plants trees$Accepts:$-Wood oil$-Ethanol$-Fish oil$-Heavy oil +tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 3e5e63745..497d759fc 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -4873,6 +4873,7 @@ tile.machine_assembler.name=Assembly Machine tile.machine_assemfac.name=Assembly Factory tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw +tile.machine_autosaw.suspended=Suspended tile.machine_bat9000.name=Big-Ass Tank 9000 tile.machine_battery.name=Energy Storage Block tile.machine_battery_potato.name=Potato Battery Block diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 9208e7f21..a2217d3a1 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5720,6 +5720,7 @@ tile.machine_assemfac.name=Сборочный завод tile.machine_autocrafter.name=Автоматический верстак tile.machine_autosaw.name=Автоматическая пила tile.machine_autosaw.desc=Срубает ближайшие растения, пересаживает деревья$Принимает:$-Древесное масло$-Этанол$-Рыбное масло$-Тяжелую нефть +tile.machine_autosaw.suspended=Приостановлена tile.machine_bat9000.name=Охереть-большая цистерна 9000 tile.machine_battery.name=Энергохранилище tile.machine_battery_potato.name=Картофельная батарея diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 38cc3b361..0f9dfa371 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5458,6 +5458,7 @@ tile.machine_assemfac.name=Збиральна фабрика tile.machine_autocrafter.name=Автоматичний верстак tile.machine_autosaw.name=Автоматична пила tile.machine_autosaw.desc=Вирубує рослини поруч, заново висажує дерева$Приймає:$-Деревну смолу$-Етанол$-Риб'ячий жир$-Важку нафту +tile.machine_autosaw.suspended=Припинено tile.machine_bat9000.name=Big-Ass цистерна 9000 tile.machine_battery.name=Блок накопичувач енергії tile.machine_battery_potato.name=Блок картопляних батарейок diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index e7727585b..6a85a4901 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5188,6 +5188,7 @@ tile.machine_assemfac.name=装配厂 tile.machine_autocrafter.name=自动工作台 tile.machine_autosaw.name=自动嗡嗡锯 tile.machine_autosaw.desc=砍伐附近的植物,重新种植树木$接受:$-木油$-乙醇$-鱼油$-重油 +tile.machine_autosaw.suspended=暂停 tile.machine_bat9000.name=巨尻-9000 储罐 tile.machine_battery.name=蓄电池 tile.machine_battery_potato.name=马铃薯电池组 From c19e867bfd76755a402a6e4b5fb805448fbebf0e Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 20:31:17 +0300 Subject: [PATCH 25/33] Don't consume oil when suspended --- .../com/hbm/tileentity/machine/TileEntityMachineAutosaw.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java index 72a3e9b8c..ad554d93a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAutosaw.java @@ -78,7 +78,7 @@ public class TileEntityMachineAutosaw extends TileEntityLoadedBase implements IB if(!worldObj.isRemote) { - if(worldObj.getTotalWorldTime() % 20 == 0) { + if(!isSuspended && worldObj.getTotalWorldTime() % 20 == 0) { if(tank.getFill() > 0) { tank.setFill(tank.getFill() - 1); this.isOn = true; From c9110aaa330a980c5110992c33afc894199bdc28 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Tue, 3 Jun 2025 23:57:04 +0300 Subject: [PATCH 26/33] NBT consistency for crates opened from inventory --- src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java index 620ca918c..97d2cb7e8 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java +++ b/src/main/java/com/hbm/items/block/ItemBlockStorageCrate.java @@ -154,6 +154,10 @@ public class ItemBlockStorageCrate extends ItemBlockBase implements IGUIProvider nbt.setTag("slot" + i, slot); } + if (nbt.hasNoTags()) { + nbt = null; + } + target.setTagCompound(nbt); } From 84d3722c0457cd3f5b91be5d169c024130d08ebb Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 16:32:30 +0300 Subject: [PATCH 27/33] Save customName to NBT --- .../tileentity/TileEntityInventoryBase.java | 6 ++++++ .../hbm/tileentity/TileEntityMachineBase.java | 6 ++++++ .../tileentity/bomb/TileEntityBombMulti.java | 6 ++++++ .../bomb/TileEntityCompactLauncher.java | 6 ++++++ .../bomb/TileEntityLaunchTable.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeBoy.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeCustom.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeFleija.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeGadget.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeMan.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeMike.java | 6 ++++++ .../hbm/tileentity/bomb/TileEntityNukeN2.java | 6 ++++++ .../bomb/TileEntityNukePrototype.java | 6 ++++++ .../bomb/TileEntityNukeSolinium.java | 6 ++++++ .../tileentity/bomb/TileEntityNukeTsar.java | 6 ++++++ .../machine/TileEntityForceField.java | 6 ++++++ .../machine/TileEntityLockableBase.java | 19 +++++++++++++++++++ .../machine/TileEntityMachineArcFurnace.java | 6 ++++++ .../machine/TileEntityMachineKeyForge.java | 6 ++++++ .../TileEntityMachineMissileAssembly.java | 6 ++++++ .../machine/TileEntityMachineRTG.java | 6 ++++++ .../machine/TileEntityMachineSatDock.java | 6 ++++++ .../machine/TileEntityMachineSatLinker.java | 6 ++++++ .../machine/TileEntityMachineShredder.java | 6 ++++++ .../machine/TileEntityMachineSiren.java | 6 ++++++ .../machine/TileEntityMachineTurbine.java | 6 ++++++ .../machine/TileEntityRtgFurnace.java | 6 ++++++ .../machine/TileEntityWasteDrum.java | 6 ++++++ .../rbmk/TileEntityRBMKSlottedBase.java | 6 ++++++ .../machine/storage/TileEntityCrateBase.java | 6 ++++++ .../storage/TileEntityMachineBattery.java | 6 ++++++ .../TileEntityRequestNetworkContainer.java | 6 ++++++ 32 files changed, 205 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java index 4278443fe..8bc34400e 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java @@ -145,6 +145,8 @@ public abstract class TileEntityInventoryBase extends TileEntity implements ISid slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -163,5 +165,9 @@ public abstract class TileEntityInventoryBase extends TileEntity implements ISid } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } } diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index e38bf2f63..b125d03be 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -161,6 +161,8 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -179,6 +181,10 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public void updateRedstoneConnection(DirPos pos) { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java index 2955f12f4..b7e3139a5 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java @@ -156,6 +156,8 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -174,6 +176,10 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isLoaded(){ diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index 12dd8bab2..ac4208263 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -523,6 +523,8 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -545,6 +547,10 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index a5e49a870..483bc8554 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -520,6 +520,8 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -543,6 +545,10 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java index 5fdaa194d..95dadcd89 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java @@ -154,6 +154,8 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java index e245c8669..2dff6eb94 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java @@ -161,6 +161,8 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -180,6 +182,10 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public static HashMap entries = new HashMap(); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java index b843bdb3e..f8b36b80d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java @@ -154,6 +154,8 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java index 8eb136372..267972caa 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java @@ -154,6 +154,8 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } /*public int getNukeTier() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java index 021789895..66bb62190 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java @@ -154,6 +154,8 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean exp1() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java index 1d924acd1..a3e0eac1f 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java @@ -154,6 +154,8 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java index 099807c3a..2241a58da 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java @@ -154,6 +154,8 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java index b3fa2dd11..449fdecb5 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java @@ -155,6 +155,8 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -173,6 +175,10 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java index 45f5ccbf1..6339670ed 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java @@ -154,6 +154,8 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java index f01665074..8388ff0e0 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java @@ -154,6 +154,8 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -172,6 +174,10 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } public boolean isReady() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 7ddaaca52..90500e399 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -224,6 +224,8 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -250,6 +252,10 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 2f8bb86d2..163f78141 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -6,6 +6,7 @@ import com.hbm.main.MainRegistry; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.ArmorUtil; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -50,6 +51,24 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { nbt.setDouble("lockMod", lockMod); } + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + buf.writeInt(lock); + buf.writeBoolean(isLocked); + buf.writeDouble(lockMod); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + lock = buf.readInt(); + isLocked = buf.readBoolean(); + lockMod = buf.readDouble(); + } + public boolean canAccess(EntityPlayer player) { if(!isLocked) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index 15a099436..d251b683a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -166,6 +166,8 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -186,6 +188,10 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java index 59d6f43bf..96bd0fdbd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -138,6 +138,8 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -156,6 +158,10 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index c7e49bdfc..72a83af9a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -142,6 +142,8 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -159,6 +161,10 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index e5a502f0c..12df36055 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -151,6 +151,8 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -169,6 +171,10 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index 527e24803..bafe5adf6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -111,6 +111,8 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -127,6 +129,10 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override public int[] getAccessibleSlotsFromSide(int p_94128_1_) { return access; } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 7e95c91ad..0934bfc9c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -132,6 +132,8 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -148,6 +150,10 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index f948a67f4..ef5453335 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -154,6 +154,8 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -173,6 +175,10 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index 7c10537d6..913838561 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -149,6 +149,8 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -168,6 +170,10 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 3180fbefa..9e84c64b4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -211,6 +211,8 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -233,6 +235,10 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 1b2c61d5b..80f68d6d5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -150,6 +150,8 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -169,6 +171,10 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java index 238a68c28..2a463a06b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java @@ -141,6 +141,8 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -160,6 +162,10 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java index 0ebc3d3dc..3d359e9ac 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -134,6 +134,8 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } } @@ -153,6 +155,10 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index 1dac5081a..dfb194d21 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -127,6 +127,8 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme } } this.hasSpiders = nbt.getBoolean("spiders"); + + customName = nbt.getString("name"); } @Override @@ -145,6 +147,10 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme } nbt.setTag("items", list); nbt.setBoolean("spiders", hasSpiders); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 423e99f8f..978f59fba 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -115,6 +115,8 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I this.redHigh = nbt.getShort("redHigh"); this.lastRedstone = nbt.getByte("lastRedstone"); this.priority = ConnectionPriority.values()[nbt.getByte("priority")]; + + customName = nbt.getString("name"); } @Override @@ -126,6 +128,10 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I nbt.setShort("redHigh", redHigh); nbt.setByte("lastRedstone", lastRedstone); nbt.setByte("priority", (byte)this.priority.ordinal()); + + if (customName != null) { + nbt.setString("name", customName); + } } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java index 73e07b745..209e677dd 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java @@ -117,6 +117,8 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } + + customName = nbt.getString("name"); } @Override @@ -135,5 +137,9 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques } } nbt.setTag("items", list); + + if (customName != null) { + nbt.setString("name", customName); + } } } From d27bda1f748d51f0408f3445b79f11f217e64234 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 18:56:22 +0300 Subject: [PATCH 28/33] Add proper markDirty calls to tile entities --- .../java/com/hbm/tileentity/TileEntityInventoryBase.java | 1 + src/main/java/com/hbm/tileentity/TileEntityMachineBase.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityBombMulti.java | 1 + .../com/hbm/tileentity/bomb/TileEntityCompactLauncher.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java | 1 + src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java | 1 + src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeMike.java | 1 + src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java | 1 + .../com/hbm/tileentity/bomb/TileEntityNukePrototype.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java | 1 + .../java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java | 1 + .../com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java | 1 + .../com/hbm/tileentity/machine/TileEntityForceField.java | 1 + .../com/hbm/tileentity/machine/TileEntityLockableBase.java | 5 +++-- .../hbm/tileentity/machine/TileEntityMachineArcFurnace.java | 1 + .../hbm/tileentity/machine/TileEntityMachineKeyForge.java | 1 + .../tileentity/machine/TileEntityMachineMissileAssembly.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineRTG.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineSatDock.java | 2 +- .../hbm/tileentity/machine/TileEntityMachineSatLinker.java | 1 + .../hbm/tileentity/machine/TileEntityMachineShredder.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineSiren.java | 1 + .../com/hbm/tileentity/machine/TileEntityMachineTurbine.java | 1 + .../com/hbm/tileentity/machine/TileEntityRtgFurnace.java | 1 + .../java/com/hbm/tileentity/machine/TileEntityWasteDrum.java | 1 + .../tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java | 1 + .../hbm/tileentity/machine/storage/TileEntityCrateBase.java | 1 + .../tileentity/machine/storage/TileEntityMachineBattery.java | 1 + .../network/TileEntityRequestNetworkContainer.java | 2 +- 33 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java index 8bc34400e..4e0c4177e 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityInventoryBase.java @@ -62,6 +62,7 @@ public abstract class TileEntityInventoryBase extends TileEntity implements ISid public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index b125d03be..7d0805030 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -71,6 +71,7 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java index b7e3139a5..3c24c9e4d 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityBombMulti.java @@ -94,6 +94,7 @@ public class TileEntityBombMulti extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index ac4208263..55c08edce 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -109,6 +109,7 @@ public class TileEntityCompactLauncher extends TileEntityLoadedBase implements I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 483bc8554..cbee47c97 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -118,6 +118,7 @@ public class TileEntityLaunchTable extends TileEntityLoadedBase implements ISide public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java index 95dadcd89..2cd516e6e 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeBoy.java @@ -92,6 +92,7 @@ public class TileEntityNukeBoy extends TileEntity implements ISidedInventory, IG public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java index 2dff6eb94..625c1c3ce 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeCustom.java @@ -98,6 +98,7 @@ public class TileEntityNukeCustom extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java index f8b36b80d..21c781c93 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeFleija.java @@ -92,6 +92,7 @@ public class TileEntityNukeFleija extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java index 267972caa..d2586b225 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeGadget.java @@ -92,6 +92,7 @@ public class TileEntityNukeGadget extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java index 66bb62190..148a21a57 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMan.java @@ -92,6 +92,7 @@ public class TileEntityNukeMan extends TileEntity implements ISidedInventory, IG public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java index a3e0eac1f..b9ebadf0c 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeMike.java @@ -92,6 +92,7 @@ public class TileEntityNukeMike extends TileEntity implements ISidedInventory, I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java index 2241a58da..d10c60aba 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeN2.java @@ -92,6 +92,7 @@ public class TileEntityNukeN2 extends TileEntity implements ISidedInventory, IGU public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java index 449fdecb5..b9aaa4f71 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukePrototype.java @@ -93,6 +93,7 @@ public class TileEntityNukePrototype extends TileEntity implements ISidedInvento public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java index 6339670ed..6c214e607 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeSolinium.java @@ -92,6 +92,7 @@ public class TileEntityNukeSolinium extends TileEntity implements ISidedInventor public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java index 8388ff0e0..86ee45beb 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityNukeTsar.java @@ -92,6 +92,7 @@ public class TileEntityNukeTsar extends TileEntity implements ISidedInventory, I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java index 8481f713a..5776fa53a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityDiFurnaceRTG.java @@ -149,6 +149,7 @@ public class TileEntityDiFurnaceRTG extends TileEntityMachineBase implements IGU @Override public void setCustomName(String name) { this.name = name; + markDirty(); } public boolean hasPower() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 90500e399..26e1cbc47 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -143,6 +143,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java index 163f78141..466072d46 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityLockableBase.java @@ -26,11 +26,12 @@ public abstract class TileEntityLockableBase extends TileEntityLoadedBase { MainRegistry.logger.error("A block has been set to locked state before setting pins, this should not happen and may cause errors! " + this.toString()); } isLocked = true; + markDirty(); } - public void setPins(int pins) { lock = pins; } + public void setPins(int pins) { lock = pins; markDirty(); } public int getPins() { return lock; } - public void setMod(double mod) { lockMod = mod; } + public void setMod(double mod) { lockMod = mod; markDirty(); } public double getMod() { return lockMod; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java index d251b683a..7c6df467c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnace.java @@ -91,6 +91,7 @@ public class TileEntityMachineArcFurnace extends TileEntityLoadedBase implements public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java index 96bd0fdbd..0881ffd57 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineKeyForge.java @@ -73,6 +73,7 @@ public class TileEntityMachineKeyForge extends TileEntity implements ISidedInven public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java index 72a83af9a..c4c0d2699 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMissileAssembly.java @@ -79,6 +79,7 @@ public class TileEntityMachineMissileAssembly extends TileEntity implements ISid public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java index 12df36055..79223e5c5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineRTG.java @@ -83,6 +83,7 @@ public class TileEntityMachineRTG extends TileEntityLoadedBase implements ISided public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java index bafe5adf6..85b71dd0a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatDock.java @@ -60,7 +60,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent @Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.customName : "container.satDock"; } @Override public boolean hasCustomInventoryName() { return this.customName != null && this.customName.length() > 0; } - public void setCustomName(String name) { this.customName = name; } + public void setCustomName(String name) { this.customName = name; markDirty(); } @Override public int getInventoryStackLimit() { return 64; } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java index 0934bfc9c..2ffadacba 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSatLinker.java @@ -73,6 +73,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java index ef5453335..5fe3ae5ca 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineShredder.java @@ -83,6 +83,7 @@ public class TileEntityMachineShredder extends TileEntityLoadedBase implements I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java index 913838561..4ed07f066 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSiren.java @@ -82,6 +82,7 @@ public class TileEntityMachineSiren extends TileEntity implements ISidedInventor public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java index 9e84c64b4..85e982856 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineTurbine.java @@ -136,6 +136,7 @@ public class TileEntityMachineTurbine extends TileEntityLoadedBase implements IS public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java index 80f68d6d5..72882cabd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityRtgFurnace.java @@ -79,6 +79,7 @@ public class TileEntityRtgFurnace extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java index 2a463a06b..5371416dd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWasteDrum.java @@ -75,6 +75,7 @@ public class TileEntityWasteDrum extends TileEntity implements ISidedInventory, public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java index 3d359e9ac..27702f37a 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKSlottedBase.java @@ -66,6 +66,7 @@ public abstract class TileEntityRBMKSlottedBase extends TileEntityRBMKActiveBase public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index dfb194d21..a52e8aaf9 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -61,6 +61,7 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 978f59fba..a2984cb93 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -91,6 +91,7 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I public void setCustomName(String name) { this.customName = name; + markDirty(); } @Override diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java index 209e677dd..5ccb78658 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetworkContainer.java @@ -70,7 +70,7 @@ public abstract class TileEntityRequestNetworkContainer extends TileEntityReques @Override public String getInventoryName() { return this.hasCustomInventoryName() ? this.customName : getName(); } public abstract String getName(); @Override public boolean hasCustomInventoryName() { return this.customName != null && this.customName.length() > 0; } - public void setCustomName(String name) { this.customName = name; } + public void setCustomName(String name) { this.customName = name; markDirty(); } @Override public int getInventoryStackLimit() { return 64; } @Override From 4d0ce8b6d9e3e95c42a54ea5b100f2a9777542d8 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 19:51:10 +0300 Subject: [PATCH 29/33] Add update packet to crates --- .../machine/storage/TileEntityCrateBase.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index a52e8aaf9..dca8dec9c 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -9,6 +9,9 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.world.World; import java.util.Random; @@ -154,6 +157,18 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme } } + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) { + readFromNBT(packet.func_148857_g()); + } + @Override public int[] getAccessibleSlotsFromSide(int side) { int[] slots = new int[this.slots.length]; From 88713946dde5f0a0651d768d12a7f1ce2491115a Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 20:11:27 +0300 Subject: [PATCH 30/33] Allow cycling the fan force falloff with a handdrill --- .../com/hbm/blocks/machine/MachineFan.java | 81 +++++++++++++++---- 1 file changed, 66 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index e4079cfbc..662aba705 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -3,11 +3,13 @@ package com.hbm.blocks.machine; import java.util.List; import com.hbm.blocks.ITooltipProvider; +import com.hbm.tileentity.TileEntityLoadedBase; import api.hbm.block.IBlowable; import api.hbm.block.IToolable; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.BlockPistonBase; @@ -16,9 +18,9 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -66,10 +68,11 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro return false; } - public static class TileEntityFan extends TileEntity { + public static class TileEntityFan extends TileEntityLoadedBase { public float spin; public float prevSpin; + public boolean falloff = true; @Override public void updateEntity() { @@ -81,7 +84,7 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro int range = 10; int effRange = 0; - double push = 0.15; + double push = 0.1; for(int i = 1; i <= range; i++) { Block block = worldObj.getBlock(xCoord + dir.offsetX * i, yCoord + dir.offsetY * i, zCoord + dir.offsetZ * i); @@ -105,8 +108,12 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro for(Entity e : affected) { - double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); - double coeff = push * (1 - dist / range / 2); + double coeff = push; + + if(!falloff) { + double dist = e.getDistance(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); + coeff *= 1.5 * (1 - dist / range / 2); + } e.motionX += dir.offsetX * coeff; e.motionY += dir.offsetY * coeff; @@ -125,6 +132,10 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro this.prevSpin -= 360; this.spin -= 360; } + + if(!worldObj.isRemote) { + networkPackNT(150); + } } @Override @@ -132,21 +143,61 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.falloff = nbt.getBoolean("falloff"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setBoolean("falloff", falloff); + } + + @Override + public void serialize(ByteBuf buf) { + buf.writeBoolean(falloff); + } + + @Override + public void deserialize(ByteBuf buf) { + falloff = buf.readBoolean(); + } } @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.SCREWDRIVER) return false; - int meta = world.getBlockMetadata(x, y, z); + if(tool == ToolType.SCREWDRIVER) { + int meta = world.getBlockMetadata(x, y, z); - if(meta == 0) world.setBlockMetadataWithNotify(x, y, z, 1, 3); - if(meta == 1) world.setBlockMetadataWithNotify(x, y, z, 0, 3); - if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 3); - if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 3); - if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 5, 3); - if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 4, 3); - - return true; + if(meta == 0) world.setBlockMetadataWithNotify(x, y, z, 1, 3); + if(meta == 1) world.setBlockMetadataWithNotify(x, y, z, 0, 3); + if(meta == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 3); + if(meta == 3) world.setBlockMetadataWithNotify(x, y, z, 2, 3); + if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 5, 3); + if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 4, 3); + + return true; + } + + if(tool == ToolType.HAND_DRILL) { + TileEntityFan tile = (TileEntityFan) world.getTileEntity(x, y, z); + + if(tile != null) { + tile.falloff = !tile.falloff; + tile.markDirty(); + + if(!world.isRemote) { + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "random.click", 0.5F, 0.5F); + } + } + + return true; + } + + return false; } @Override From 51ad12d51aa1f3cafb10620cdf6abad994738297 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 5 Jun 2025 20:39:26 +0300 Subject: [PATCH 31/33] Add a notification for fan mode toggle --- src/main/java/com/hbm/blocks/machine/MachineFan.java | 8 ++++++++ src/main/java/com/hbm/main/ServerProxy.java | 7 ++++--- src/main/resources/assets/hbm/lang/de_DE.lang | 4 +++- src/main/resources/assets/hbm/lang/en_US.lang | 4 +++- src/main/resources/assets/hbm/lang/it_IT.lang | 4 +++- src/main/resources/assets/hbm/lang/pl_PL.lang | 3 +++ src/main/resources/assets/hbm/lang/ru_RU.lang | 4 +++- src/main/resources/assets/hbm/lang/uk_UA.lang | 4 +++- src/main/resources/assets/hbm/lang/zh_CN.lang | 4 +++- 9 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 662aba705..333f7323f 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -3,7 +3,11 @@ package com.hbm.blocks.machine; import java.util.List; import com.hbm.blocks.ITooltipProvider; +import com.hbm.main.MainRegistry; +import com.hbm.packet.PacketDispatcher; +import com.hbm.packet.toclient.PlayerInformPacket; import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.util.ChatBuilder; import api.hbm.block.IBlowable; import api.hbm.block.IToolable; @@ -17,10 +21,12 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -190,6 +196,8 @@ public class MachineFan extends BlockContainer implements IToolable, ITooltipPro tile.markDirty(); if(!world.isRemote) { + PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("").nextTranslation(this.getUnlocalizedName() + (tile.falloff ? ".falloffOn" : ".falloffOff")).color(EnumChatFormatting.GOLD).flush(), MainRegistry.proxy.ID_FAN_MODE), (EntityPlayerMP) player); + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "random.click", 0.5F, 0.5F); } } diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index 4e9d7704d..fdbe22529 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -30,9 +30,10 @@ public class ServerProxy { public static final int ID_HUD = 7; public static final int ID_DETONATOR = 8; public static final int ID_FLUID_ID = 9; - public static final int ID_TOOLABILITY = 10; - public static final int ID_GUN_MODE = 11; - public static final int ID_GAS_HAZARD = 12; + public static final int ID_FAN_MODE = 10; + public static final int ID_TOOLABILITY = 11; + public static final int ID_GUN_MODE = 12; + public static final int ID_GAS_HAZARD = 13; public ITranslate getI18n() { return I18N; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 0d4393362..2b9298a99 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4144,7 +4144,9 @@ tile.factory_titanium_furnace.name=Einfache Fabrikzugriffsluke tile.factory_titanium_hull.name=Fabrikblock tile.fallout.name=Fallout tile.fan.name=Ventilator -tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen +tile.fan.desc=Kann mit Redstone aktiviert werden$Bewegt Entities bis zu 10 Blöcke$Rechtsclick mit Schraubenzieher um den Ventilator umzudrehen$Klicken Sie mit der rechten Maustaste mit der Handbohrmaschine um den Modus zu wechseln +tile.fan.falloffOn=Die Lüfterleistung nimmt mit der Entfernung ab +tile.fan.falloffOff=Konstante Lüfterleistung tile.fence_metal.name=Maschendrahtzaun tile.fence_metal_post.name=Maschendrahtzaun-Pfahl tile.field_disturber.name=Hochenergiefeld-Jammer diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f0e82f906..2b64f5ef9 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -5267,7 +5267,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan -tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode +tile.fan.falloffOn=Fan power decreases with distance +tile.fan.falloffOff=Consistent fan power tile.fence_metal.name=Chainlink Fence tile.fence_metal_post.name=Chainlink Fence Post tile.field_disturber.name=High Energy Field Jammer diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 4ce24e6b5..691badc0e 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -5356,7 +5356,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan -tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode +tile.fan.falloffOn=Fan power decreases with distance +tile.fan.falloffOff=Consistent fan power tile.fence_metal.name=Chainlink Fence tile.fence_metal_post.name=Chainlink Fence Post tile.field_disturber.name=High Energy Field Jammer diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 497d759fc..99732c2fd 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -4720,6 +4720,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Factory Block tile.fallout.name=Fallout tile.fan.name=Fan +tile.fan.desc=Activates using redstone$Will push entities up to 10 blocks$Right-click with screwdriver to flip$Right-click with hand drill to switch mode +tile.fan.falloffOn=Fan power decreases with distance +tile.fan.falloffOff=Consistent fan power tile.fence_metal.name=Chainlink Fence tile.field_disturber.name=High Energy Field Jammer tile.filing_cabinet.green.name=Dusty Filing Cabinet diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index a2217d3a1..5c3efa442 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -5530,7 +5530,9 @@ tile.factory_titanium_furnace.name=Люк доступа базовой фабр tile.factory_titanium_hull.name=Корпус базовой фабрики tile.fallout.name=Радиоактивный осадок tile.fan.name=Вентилятор -tile.fan.desc=Активируется редстоуном$Толкает существ до 10 блоков$ПКМ отвёрткой чтобы повернуть +tile.fan.desc=Активируется редстоуном$Толкает существ до 10 блоков$ПКМ отвёрткой чтобы повернуть$ПКМ ручным сверлом чтобы переключить режим +tile.fan.falloffOn=Сила вентилятора уменьшается с расстоянием +tile.fan.falloffOff=Постоянная сила вентилорая tile.fence_metal.name=Проволочная сетка tile.fence_metal_post.name=Столб проволочной сетки tile.field_disturber.name=Подавитель высокоэнергитических полей diff --git a/src/main/resources/assets/hbm/lang/uk_UA.lang b/src/main/resources/assets/hbm/lang/uk_UA.lang index 0f9dfa371..44855c038 100644 --- a/src/main/resources/assets/hbm/lang/uk_UA.lang +++ b/src/main/resources/assets/hbm/lang/uk_UA.lang @@ -5267,7 +5267,9 @@ tile.factory_titanium_furnace.name=Basic Factory Access Hatch tile.factory_titanium_hull.name=Заводський блок tile.fallout.name=Радіоактивні опади tile.fan.name=Вентилятор -tile.fan.desc=Активується за допомогою редстоуну$Піднімає об'єкти на 10 блоків$Клацніть правою кнопкою миші викруткою, щоб перевернути +tile.fan.desc=Активується за допомогою редстоуну$Піднімає об'єкти на 10 блоків$Клацніть правою кнопкою миші викруткою, щоб перевернути$ПКМ ручним свердлом, щоб переключити режим +tile.fan.falloffOn=Сила вентилятора зменшується з відстанню +tile.fan.falloffOff=Постійна сила вентилятора tile.fence_metal.name=Огорожа рабиця tile.fence_metal_post.name=Огорожа рабиця стовп tile.field_disturber.name=Заглушник високоенергетичного поля diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 6a85a4901..20b27d397 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -5005,7 +5005,9 @@ tile.factory_titanium_furnace.name=工厂端口 tile.factory_titanium_hull.name=工厂外壳 tile.fallout.name=辐射尘 tile.fan.name=风扇 -tile.fan.desc=使用红石激活$将实体推至最多10个方块外$用螺丝刀右键点击即可翻转 +tile.fan.desc=使用红石激活$将实体推至最多10个方块外$用螺丝刀右键点击即可翻转$使用手钻右键切换模式 +tile.fan.falloffOn=风扇功率随距离增加而减小 +tile.fan.falloffOff=风扇功率恒定 tile.fence_metal.name=铁丝网围栏 tile.fence_metal_post.name=铁丝网围栏立柱 tile.field_disturber.name=高能场干扰机 From e9888a8634fbac66669546c385a59676a3ca03b6 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 7 Jun 2025 00:26:59 +0300 Subject: [PATCH 32/33] More NBT consistency Normalize empty NBT to null NBT. Fixes stackability for empty inventories, as usual. --- .../java/com/hbm/items/ItemInventory.java | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/hbm/items/ItemInventory.java b/src/main/java/com/hbm/items/ItemInventory.java index dd897a66e..7c1aa0c47 100644 --- a/src/main/java/com/hbm/items/ItemInventory.java +++ b/src/main/java/com/hbm/items/ItemInventory.java @@ -38,49 +38,52 @@ public abstract class ItemInventory implements IInventory { } public NBTTagCompound checkNBT(NBTTagCompound nbt) { - if(nbt != null && !nbt.hasNoTags()) { - Random random = new Random(); + + if(nbt == null || nbt.hasNoTags()) + return null; - try { - byte[] abyte = CompressedStreamTools.compress(nbt); + Random random = new Random(); - if (abyte.length > 6000) { - player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); - for (int i1 = 0; i1 < this.getSizeInventory(); ++i1) { - ItemStack itemstack = this.getStackInSlot(i1); + try { + byte[] abyte = CompressedStreamTools.compress(nbt); - if (itemstack != null) { - float f = random.nextFloat() * 0.8F + 0.1F; - float f1 = random.nextFloat() * 0.8F + 0.1F; - float f2 = random.nextFloat() * 0.8F + 0.1F; + if (abyte.length > 6000) { + player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED + "Warning: Container NBT exceeds 6kB, contents will be ejected!")); + for (int i1 = 0; i1 < this.getSizeInventory(); ++i1) { + ItemStack itemstack = this.getStackInSlot(i1); - while (itemstack.stackSize > 0) { - int j1 = random.nextInt(21) + 10; + if (itemstack != null) { + float f = random.nextFloat() * 0.8F + 0.1F; + float f1 = random.nextFloat() * 0.8F + 0.1F; + float f2 = random.nextFloat() * 0.8F + 0.1F; - if (j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } + while (itemstack.stackSize > 0) { + int j1 = random.nextInt(21) + 10; - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(player.worldObj, player.posX + f, player.posY + f1, player.posZ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if (itemstack.hasTagCompound()) { - entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float) random.nextGaussian() * f3 + player.motionX; - entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F + player.motionY; - entityitem.motionZ = (float) random.nextGaussian() * f3 + player.motionZ; - player.worldObj.spawnEntityInWorld(entityitem); + if (j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(player.worldObj, player.posX + f, player.posY + f1, player.posZ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + + if (itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } + + float f3 = 0.05F; + entityitem.motionX = (float) random.nextGaussian() * f3 + player.motionX; + entityitem.motionY = (float) random.nextGaussian() * f3 + 0.2F + player.motionY; + entityitem.motionZ = (float) random.nextGaussian() * f3 + player.motionZ; + player.worldObj.spawnEntityInWorld(entityitem); } } - - return new NBTTagCompound(); // Reset. } - } catch (IOException ignored) {} - } + + return null; // Reset. + } + } catch (IOException ignored) {} + return nbt; } From d185a5ea227b379e7f3e570a7a6d10ef5fe28e6c Mon Sep 17 00:00:00 2001 From: abel1502 Date: Thu, 29 May 2025 23:02:26 +0300 Subject: [PATCH 33/33] Turn down mass storage sfx volume --- .../hbm/tileentity/machine/storage/TileEntityMassStorage.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java index 0618a1643..8d939f523 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMassStorage.java @@ -170,12 +170,12 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa @Override public void openInventory() { - this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageOpen", 1.0F, 1.0F); + this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageOpen", 0.5F, 1.0F); } @Override public void closeInventory() { - this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageClose", 1.0F, 1.0F); + this.worldObj.playSoundEffect(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, "hbm:block.storageClose", 0.5F, 1.0F); } @Override