From e02142d255fe947d709e8ae6c9dfdda3b15fac67 Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 31 Mar 2025 18:19:34 +1100 Subject: [PATCH 1/3] new conveyor wand item that masquerades as a conveyor block, performing autoplacement! (from downstream spacefork) --- src/main/java/com/hbm/blocks/ModBlocks.java | 12 +- .../com/hbm/blocks/network/BlockConveyor.java | 50 +- .../hbm/blocks/network/BlockConveyorBase.java | 10 +- .../blocks/network/BlockConveyorBendable.java | 64 ++- .../blocks/network/BlockConveyorChute.java | 50 +- .../blocks/network/BlockConveyorDouble.java | 24 +- .../blocks/network/BlockConveyorExpress.java | 18 +- .../hbm/blocks/network/BlockConveyorLift.java | 48 +- .../blocks/network/BlockConveyorTriple.java | 24 +- .../hbm/blocks/network/BlockCraneBase.java | 13 +- src/main/java/com/hbm/items/ModItems.java | 5 + .../com/hbm/items/tool/ItemConveyorWand.java | 495 ++++++++++++++++++ src/main/java/com/hbm/main/ClientProxy.java | 4 +- .../java/com/hbm/main/CraftingManager.java | 29 +- .../com/hbm/main/ModEventHandlerClient.java | 19 +- src/main/java/com/hbm/main/NEIConfig.java | 7 + .../render/item/block/ItemRenderBlock.java | 42 ++ .../com/hbm/render/util/RenderOverhead.java | 149 ++++-- src/main/resources/assets/hbm/lang/de_DE.lang | 6 +- src/main/resources/assets/hbm/lang/en_US.lang | 6 + src/main/resources/assets/hbm/lang/ru_RU.lang | 60 ++- src/main/resources/assets/hbm/lang/zh_CN.lang | 4 + 22 files changed, 989 insertions(+), 150 deletions(-) create mode 100644 src/main/java/com/hbm/items/tool/ItemConveyorWand.java create mode 100644 src/main/java/com/hbm/render/item/block/ItemRenderBlock.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index ef65fc1c4..bf6821881 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1921,12 +1921,12 @@ public class ModBlocks { radio_torch_logic = new RadioTorchLogic().setBlockName("radio_torch_logic").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); radio_telex = new RadioTelex().setBlockName("radio_telex").setHardness(3F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":radio_telex"); - conveyor = new BlockConveyor().setBlockName("conveyor").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor"); - conveyor_express = new BlockConveyorExpress().setBlockName("conveyor_express").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor_express"); - conveyor_double = new BlockConveyorDouble().setBlockName("conveyor_double").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor_double"); - conveyor_triple = new BlockConveyorTriple().setBlockName("conveyor_triple").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor_triple"); - conveyor_chute = new BlockConveyorChute().setBlockName("conveyor_chute").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor"); - conveyor_lift = new BlockConveyorLift().setBlockName("conveyor_lift").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor"); + conveyor = new BlockConveyor().setBlockName("conveyor").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor"); + conveyor_express = new BlockConveyorExpress().setBlockName("conveyor_express").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor_express"); + conveyor_double = new BlockConveyorDouble().setBlockName("conveyor_double").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor_double"); + conveyor_triple = new BlockConveyorTriple().setBlockName("conveyor_triple").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor_triple"); + conveyor_chute = new BlockConveyorChute().setBlockName("conveyor_chute").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor"); + conveyor_lift = new BlockConveyorLift().setBlockName("conveyor_lift").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor"); crane_extractor = new CraneExtractor().setBlockName("crane_extractor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_inserter = new CraneInserter().setBlockName("crane_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_grabber = new CraneGrabber().setBlockName("crane_grabber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyor.java b/src/main/java/com/hbm/blocks/network/BlockConveyor.java index eb22da046..74e592400 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyor.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyor.java @@ -1,8 +1,56 @@ package com.hbm.blocks.network; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + public class BlockConveyor extends BlockConveyorBendable { public BlockConveyor() { super(); } -} + + @Override + public Item getItemDropped(int meta, Random rand, int fortune) { + return ModItems.conveyor_wand; + } + + @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); + int newMeta = meta; + + int dir = getPathDirection(meta); + + if(!player.isSneaking()) { + if(meta > 9) meta -= 8; + if(meta > 5) meta -= 4; + newMeta = ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP).ordinal() + dir * 4; + } else { + + if(dir < 2) { + newMeta += 4; + } else { + newMeta -= 8; + + // switcheroo + world.setBlock(x, y, z, ModBlocks.conveyor_lift, newMeta, 3); + return true; + } + } + + world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); + + return true; + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java b/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java index bf816eef1..9b2b9055b 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorBase.java @@ -74,6 +74,14 @@ public abstract class BlockConveyorBase extends Block implements IConveyorBelt, return ret; } + public ForgeDirection getInputDirection(World world, int x, int y, int z) { + return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); + } + + public ForgeDirection getOutputDirection(World world, int x, int y, int z) { + return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)).getOpposite(); + } + public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); } @@ -167,4 +175,4 @@ public abstract class BlockConveyorBase extends Block implements IConveyorBelt, public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { this.addStandardInfo(stack, player, list, ext); } -} +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorBendable.java b/src/main/java/com/hbm/blocks/network/BlockConveyorBendable.java index 201a6432a..f2ae3bf66 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorBendable.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorBendable.java @@ -14,7 +14,7 @@ public abstract class BlockConveyorBendable extends BlockConveyorBase implements @SideOnly(Side.CLIENT) protected IIcon curveLeft; @SideOnly(Side.CLIENT) protected IIcon curveRight; - + @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { @@ -22,20 +22,20 @@ public abstract class BlockConveyorBendable extends BlockConveyorBase implements this.curveLeft = iconRegister.registerIcon(this.getTextureName() + "_curve_left"); this.curveRight = iconRegister.registerIcon(this.getTextureName() + "_curve_right"); } - + protected int getPathDirection(int meta) { - + if(meta >= 6 && meta <= 9) return 1; if(meta >= 10 && meta <= 13) return 2; return 0; } - + @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int metadata) { - + int dir = getPathDirection(metadata); - + if(dir > 0 && side > 1) return this.sideIcon; @@ -43,22 +43,42 @@ public abstract class BlockConveyorBendable extends BlockConveyorBase implements return this.sideIcon; if((metadata == 4 || metadata == 5) && (side == 2 || side == 3)) return this.sideIcon; - + if(dir == 1) return this.curveLeft; if(dir == 2) return this.curveRight; - + return super.getIcon(side, metadata); } @Override - public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { - + public ForgeDirection getInputDirection(World world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + int dir = getPathDirection(meta); + return ForgeDirection.getOrientation(meta - dir * 4); + } + + @Override + public ForgeDirection getOutputDirection(World world, int x, int y, int z) { int meta = world.getBlockMetadata(x, y, z); int dir = getPathDirection(meta); meta -= dir * 4; - + + ForgeDirection primary = ForgeDirection.getOrientation(meta).getOpposite(); + + if(dir == 2) return primary.getRotation(ForgeDirection.UP); + if(dir == 1) return primary.getRotation(ForgeDirection.DOWN); + return primary; + } + + @Override + public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { + + int meta = world.getBlockMetadata(x, y, z); + int dir = getPathDirection(meta); + meta -= dir * 4; + ForgeDirection primary = ForgeDirection.getOrientation(meta); - + if(dir > 0) { dir--; double ix = x + 0.5; @@ -70,43 +90,43 @@ public abstract class BlockConveyorBendable extends BlockConveyorBase implements double dX = Math.abs(itemPos.xCoord - ix); double dZ = Math.abs(itemPos.zCoord - iz); - + if(dX + dZ >= 1) { - + if(dir == 0) return secondary.getOpposite(); else return secondary; } } - + return primary; } @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); int newMeta = meta; - + int dir = getPathDirection(meta); - + if(!player.isSneaking()) { if(meta > 9) meta -= 8; if(meta > 5) meta -= 4; newMeta = ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP).ordinal() + dir * 4; } else { - + if(dir < 2) newMeta += 4; else newMeta -= 8; } - + world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); - + return true; } -} +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java b/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java index e61ff37f0..89d5a15d7 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorChute.java @@ -1,32 +1,40 @@ package com.hbm.blocks.network; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; + +import api.hbm.block.IToolable; import api.hbm.conveyor.IConveyorBelt; import api.hbm.conveyor.IEnterableBlock; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockConveyorChute extends BlockConveyorBase { +public class BlockConveyorChute extends BlockConveyorBase implements IToolable { @Override public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed) { - + Block below = world.getBlock(x, y - 1, z); if(below instanceof IConveyorBelt || below instanceof IEnterableBlock) { speed *= 5; } else if(itemPos.yCoord > y + 0.25) { speed *= 3; } - + return super.getTravelLocation(world, x, y, z, itemPos, speed); } - + @Override public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { @@ -34,13 +42,13 @@ public class BlockConveyorChute extends BlockConveyorBase { if(below instanceof IConveyorBelt || below instanceof IEnterableBlock || itemPos.yCoord > y + 0.25) { return ForgeDirection.UP; } - + return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); } @Override public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) { - + Block below = world.getBlock(x, y - 1, z); if(below instanceof IConveyorBelt || below instanceof IEnterableBlock || itemPos.yCoord > y + 0.25) { return Vec3.createVectorHelper(x + 0.5, itemPos.yCoord, z + 0.5); @@ -63,10 +71,36 @@ public class BlockConveyorChute extends BlockConveyorBase { public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { return AxisAlignedBB.getBoundingBox(x, y, z, x + 1, y + 1, z + 1); } - + @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) { return true; } -} + + @Override + public Item getItemDropped(int meta, Random rand, int fortune) { + return ModItems.conveyor_wand; + } + + @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); + int newMeta = meta; + + if(!player.isSneaking()) { + if(meta > 9) meta -= 8; + if(meta > 5) meta -= 4; + newMeta = ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP).ordinal(); + + world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); + } else { + world.setBlock(x, y, z, ModBlocks.conveyor, newMeta, 3); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorDouble.java b/src/main/java/com/hbm/blocks/network/BlockConveyorDouble.java index b81e237b6..e5e5942a8 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorDouble.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorDouble.java @@ -1,5 +1,10 @@ package com.hbm.blocks.network; +import java.util.Random; + +import com.hbm.items.ModItems; + +import net.minecraft.item.Item; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -11,10 +16,10 @@ public class BlockConveyorDouble extends BlockConveyorBendable { public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) { ForgeDirection dir = this.getTravelDirection(world, x, y, z, itemPos); - + itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1); itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1); - + double posX = x + 0.5; double posZ = z + 0.5; @@ -26,7 +31,18 @@ public class BlockConveyorDouble extends BlockConveyorBendable { posZ = itemPos.zCoord; posX += itemPos.xCoord > posX ? 0.25 : -0.25; } - + return Vec3.createVectorHelper(posX, y + 0.25, posZ); } -} + + @Override + public Item getItemDropped(int meta, Random rand, int fortune) { + return ModItems.conveyor_wand; + } + + @Override + public int damageDropped(int meta) { + return 2; + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorExpress.java b/src/main/java/com/hbm/blocks/network/BlockConveyorExpress.java index 0041da992..b883243f2 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorExpress.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorExpress.java @@ -1,5 +1,10 @@ package com.hbm.blocks.network; +import java.util.Random; + +import com.hbm.items.ModItems; + +import net.minecraft.item.Item; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -9,4 +14,15 @@ public class BlockConveyorExpress extends BlockConveyorBendable { public Vec3 getTravelLocation(World world, int x, int y, int z, Vec3 itemPos, double speed) { return super.getTravelLocation(world, x, y, z, itemPos, speed * 3); } -} + + @Override + public Item getItemDropped(int meta, Random rand, int fortune) { + return ModItems.conveyor_wand; + } + + @Override + public int damageDropped(int meta) { + return 1; + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java b/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java index a2dfa5de1..b40fd4d92 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorLift.java @@ -1,28 +1,36 @@ package com.hbm.blocks.network; +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; + +import api.hbm.block.IToolable; import api.hbm.conveyor.IConveyorBelt; import api.hbm.conveyor.IEnterableBlock; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class BlockConveyorLift extends BlockConveyorBase { - +public class BlockConveyorLift extends BlockConveyorBase implements IToolable { + @Override public ForgeDirection getTravelDirection(World world, int x, int y, int z, Vec3 itemPos) { boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt); boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); - + if(!top) { return ForgeDirection.DOWN; } - + return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); } @@ -44,7 +52,7 @@ public class BlockConveyorLift extends BlockConveyorBase { boolean bottom = !(world.getBlock(x, y - 1, z) instanceof IConveyorBelt); boolean top = !(world.getBlock(x, y + 1, z) instanceof IConveyorBelt) && !bottom && !(world.getBlock(x, y + 1, z) instanceof IEnterableBlock); - + if(top) this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); else @@ -69,10 +77,36 @@ public class BlockConveyorLift extends BlockConveyorBase { public int getRenderType() { return renderID; } - + @Override @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) { return true; } -} + + @Override + public Item getItemDropped(int meta, Random rand, int fortune) { + return ModItems.conveyor_wand; + } + + @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); + int newMeta = meta; + + if(!player.isSneaking()) { + if(meta > 9) meta -= 8; + if(meta > 5) meta -= 4; + newMeta = ForgeDirection.getOrientation(meta).getRotation(ForgeDirection.UP).ordinal(); + + world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); + } else { + world.setBlock(x, y, z, ModBlocks.conveyor_chute, newMeta, 3); + } + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockConveyorTriple.java b/src/main/java/com/hbm/blocks/network/BlockConveyorTriple.java index 69ed40980..8bf3d2603 100644 --- a/src/main/java/com/hbm/blocks/network/BlockConveyorTriple.java +++ b/src/main/java/com/hbm/blocks/network/BlockConveyorTriple.java @@ -1,5 +1,10 @@ package com.hbm.blocks.network; +import java.util.Random; + +import com.hbm.items.ModItems; + +import net.minecraft.item.Item; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -11,10 +16,10 @@ public class BlockConveyorTriple extends BlockConveyorBendable { public Vec3 getClosestSnappingPosition(World world, int x, int y, int z, Vec3 itemPos) { ForgeDirection dir = this.getTravelDirection(world, x, y, z, itemPos); - + itemPos.xCoord = MathHelper.clamp_double(itemPos.xCoord, x, x + 1); itemPos.zCoord = MathHelper.clamp_double(itemPos.zCoord, z, z + 1); - + double posX = x + 0.5; double posZ = z + 0.5; @@ -26,7 +31,18 @@ public class BlockConveyorTriple extends BlockConveyorBendable { posZ = itemPos.zCoord; posX += (itemPos.xCoord > posX + 0.15 ? 0.3125 : itemPos.xCoord < posX - 0.15 ? -0.3125 : 0); } - + return Vec3.createVectorHelper(posX, y + 0.25, posZ); } -} + + @Override + public Item getItemDropped(int meta, Random rand, int fortune) { + return ModItems.conveyor_wand; + } + + @Override + public int damageDropped(int meta) { + return 3; + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/network/BlockCraneBase.java b/src/main/java/com/hbm/blocks/network/BlockCraneBase.java index ef73c5f4f..2ae141b84 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCraneBase.java +++ b/src/main/java/com/hbm/blocks/network/BlockCraneBase.java @@ -3,6 +3,7 @@ package com.hbm.blocks.network; import api.hbm.block.IToolable; import com.hbm.blocks.IBlockSideRotation; import com.hbm.blocks.ITooltipProvider; +import com.hbm.items.tool.ItemConveyorWand; import com.hbm.items.tool.ItemTooling; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -71,11 +72,13 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid this.iconOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_out"); this.iconSideOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_out"); } - + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTooling) { return false; + } else if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemConveyorWand) { + return false; } else if(world.isRemote) { return true; } else if(!player.isSneaking()) { @@ -85,7 +88,7 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid return false; } } - + @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { int l = BlockPistonBase.determineOrientation(world, x, y, z, player); @@ -170,7 +173,7 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid return this.blockIcon; } - + if(side == outputSide.ordinal()) { return this.iconSideOut; } @@ -256,7 +259,7 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid return 0; } - + public static int renderIDClassic = RenderingRegistry.getNextAvailableRenderId(); @Override @@ -269,7 +272,7 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid ISidedInventory tileentityfurnace = (ISidedInventory) world.getTileEntity(x, y, z); if(tileentityfurnace != null) { - + for(int i1 = start; i1 < end; ++i1) { ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 38e67f3ea..a210bcb7b 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2250,6 +2250,8 @@ public class ModItems { public static Item mysteryshovel; public static Item memory; + public static Item conveyor_wand; + public static void initializeItem() { redstone_sword = new RedstoneSword(ToolMaterial.STONE).setUnlocalizedName("redstone_sword").setCreativeTab(CreativeTabs.tabCombat).setTextureName(RefStrings.MODID + ":redstone_sword"); @@ -5029,6 +5031,8 @@ public class ModItems { mysteryshovel = new ItemMS().setUnlocalizedName("mysteryshovel").setFull3D().setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cursed_shovel"); memory = new ItemBattery(Long.MAX_VALUE / 100L, 100000000000000L, 100000000000000L).setUnlocalizedName("memory").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mo8_anim"); + conveyor_wand = new ItemConveyorWand().setUnlocalizedName("conveyor_wand").setCreativeTab(MainRegistry.machineTab).setFull3D().setTextureName(RefStrings.MODID + ":wand_s"); + GunFactory.init(); FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.mud_fluid, 1000), new ItemStack(ModItems.bucket_mud), new ItemStack(Items.bucket)); @@ -7237,6 +7241,7 @@ public class ModItems { GameRegistry.registerItem(bob_nuclear, bob_nuclear.getUnlocalizedName()); GameRegistry.registerItem(mysteryshovel, mysteryshovel.getUnlocalizedName()); GameRegistry.registerItem(memory, memory.getUnlocalizedName()); + GameRegistry.registerItem(conveyor_wand, conveyor_wand.getUnlocalizedName()); } public static void addRemap(String unloc, Item item, Enum sub) { diff --git a/src/main/java/com/hbm/items/tool/ItemConveyorWand.java b/src/main/java/com/hbm/items/tool/ItemConveyorWand.java new file mode 100644 index 000000000..0cee2401a --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemConveyorWand.java @@ -0,0 +1,495 @@ +package com.hbm.items.tool; + +import java.util.List; +import java.util.Locale; + +import org.lwjgl.input.Keyboard; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.network.BlockConveyorBase; +import com.hbm.blocks.network.BlockConveyorBendable; +import com.hbm.blocks.network.BlockCraneBase; +import com.hbm.render.util.RenderOverhead; +import com.hbm.util.I18nUtil; +import com.hbm.wiaj.WorldInAJar; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.play.server.S23PacketBlockChange; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.world.BlockEvent; + +public class ItemConveyorWand extends Item { + + public ItemConveyorWand() { + setHasSubtypes(true); + } + + public static enum ConveyorType { + REGULAR, + EXPRESS, + DOUBLE, + TRIPLE + } + + public static ConveyorType getType(ItemStack stack) { + if(stack == null) return ConveyorType.REGULAR; + return ConveyorType.values()[stack.getItemDamage()]; + } + + public static Block getConveyorBlock(ConveyorType type) { + switch(type) { + case EXPRESS: return ModBlocks.conveyor_express; + case DOUBLE: return ModBlocks.conveyor_double; + case TRIPLE: return ModBlocks.conveyor_triple; + default: return ModBlocks.conveyor; + } + } + + public static boolean hasSnakesAndLadders(ConveyorType type) { + return type == ConveyorType.REGULAR; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tab, List list) { + for(ConveyorType type : ConveyorType.values()) { + list.add(new ItemStack(item, 1, type.ordinal())); + } + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + getType(stack).name().toLowerCase(Locale.US); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + + if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + for(String s : I18nUtil.resolveKeyArray(super.getUnlocalizedName(stack) + ".desc")) { + list.add(EnumChatFormatting.YELLOW + s); + } + if(hasSnakesAndLadders(getType(stack))) { + list.add(EnumChatFormatting.AQUA + I18nUtil.resolveKey(super.getUnlocalizedName(stack) + ".vertical.desc")); + } + } else { + list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC + "Hold <" + EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" + EnumChatFormatting.DARK_GRAY + + "" + EnumChatFormatting.ITALIC + "> to display more info"); + } + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fx, float fy, float fz) { + if(player.isSneaking() && !stack.hasTagCompound()) { + ForgeDirection dir = ForgeDirection.getOrientation(side); + Block onBlock = world.getBlock(x, y, z); + int onMeta = world.getBlockMetadata(x, y, z); + ConveyorType type = getType(stack); + + if(hasSnakesAndLadders(type) && onBlock == ModBlocks.conveyor && onMeta < 6) { + if(dir == ForgeDirection.UP) { + onBlock = ModBlocks.conveyor_lift; + world.setBlock(x, y, z, onBlock, onMeta, 3); + } else if(dir == ForgeDirection.DOWN) { + onBlock = ModBlocks.conveyor_chute; + world.setBlock(x, y, z, onBlock, onMeta, 3); + } + } + + Block toPlace = getConveyorBlock(type); + if(hasSnakesAndLadders(type)) { + if(onBlock == ModBlocks.conveyor_lift && dir == ForgeDirection.UP) toPlace = ModBlocks.conveyor_lift; + if(onBlock == ModBlocks.conveyor_chute && dir == ForgeDirection.DOWN) toPlace = ModBlocks.conveyor_chute; + } + + x += dir.offsetX; + y += dir.offsetY; + z += dir.offsetZ; + + if(world.getBlock(x, y, z).isReplaceable(world, x, y, z)) { + world.setBlock(x, y, z, toPlace); + toPlace.onBlockPlacedBy(world, x, y, z, player, stack); + stack.stackSize--; + } + + return true; + } + + // If placing on top of a conveyor block, auto-snap to edge if possible + // this makes it easier to connect without having to click the small edge of a conveyor + Block onBlock = world.getBlock(x, y, z); + if(onBlock instanceof BlockConveyorBendable) { + BlockConveyorBase bendable = (BlockConveyorBase) onBlock; + ForgeDirection moveDir = stack.hasTagCompound() ? bendable.getInputDirection(world, x, y, z) : bendable.getOutputDirection(world, x, y, z); + + int ox = x + moveDir.offsetX; + int oy = y + moveDir.offsetY; + int oz = z + moveDir.offsetZ; + + if(world.getBlock(ox, oy, oz).isReplaceable(world, ox, oy, oz)) { + side = moveDir.ordinal(); + } + } + + if(!stack.hasTagCompound()) { + // Starting placement + NBTTagCompound nbt = stack.stackTagCompound = new NBTTagCompound(); + + nbt.setInteger("x", x); + nbt.setInteger("y", y); + nbt.setInteger("z", z); + nbt.setInteger("side", side); + + int count = 0; + if(player.capabilities.isCreativeMode) { + count = 256; + } else { + for(ItemStack inventoryStack : player.inventory.mainInventory) { + if(inventoryStack != null && inventoryStack.getItem() == this && inventoryStack.getItemDamage() == stack.getItemDamage()) { + count += inventoryStack.stackSize; + } + } + } + + nbt.setInteger("count", count); + } else { + // Constructing conveyor + NBTTagCompound nbt = stack.stackTagCompound; + + int sx = nbt.getInteger("x"); + int sy = nbt.getInteger("y"); + int sz = nbt.getInteger("z"); + int sSide = nbt.getInteger("side"); + int count = nbt.getInteger("count"); + + if(!world.isRemote) { + ConveyorType type = getType(stack); + + // pretend to construct, if it doesn't fail, actually construct + int constructCount = construct(world, null, type, player, sx, sy, sz, sSide, x, y, z, side, 0, 0, 0, count); + if(constructCount > 0) { + int toRemove = construct(world, world, type, player, sx, sy, sz, sSide, x, y, z, side, 0, 0, 0, count); + + if(!player.capabilities.isCreativeMode) { + for(ItemStack inventoryStack : player.inventory.mainInventory) { + if(inventoryStack != null && inventoryStack.getItem() == this && inventoryStack.getItemDamage() == stack.getItemDamage()) { + int removing = Math.min(toRemove, inventoryStack.stackSize); + inventoryStack.stackSize -= removing; + toRemove -= removing; + } + + if(toRemove <= 0) break; + } + + player.inventoryContainer.detectAndSendChanges(); + } + + player.addChatMessage(new ChatComponentText("Conveyor built!")); + } else if(constructCount == 0) { + player.addChatMessage(new ChatComponentText("Not enough conveyors, build cancelled")); + } else { + player.addChatMessage(new ChatComponentText("Conveyor obstructed, build cancelled")); + } + } else { + RenderOverhead.clearActionPreview(); + lastMop = null; + } + + stack.stackTagCompound = null; + } + + return true; // always eat interactions + } + + private static MovingObjectPosition lastMop; + private static int lastSide; + private static float lastYaw; + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean inHand) { + if(!(entity instanceof EntityPlayer)) return; + EntityPlayer player = (EntityPlayer) entity; + + if(!inHand && stack.hasTagCompound()) { + ItemStack held = player.getHeldItem(); + if(held == null || held.getItem() != this || held.getItemDamage() != stack.getItemDamage()) { + stack.stackTagCompound = null; + if(!world.isRemote) { + RenderOverhead.clearActionPreview(); + lastMop = null; + } + } + } + + // clientside prediction only + if(!world.isRemote && inHand) { + if(!stack.hasTagCompound()) { + RenderOverhead.clearActionPreview(); + lastMop = null; + return; + } + + MovingObjectPosition mop = Minecraft.getMinecraft().objectMouseOver; + if(mop == null || mop.typeOfHit != MovingObjectType.BLOCK) { + RenderOverhead.clearActionPreview(); + lastMop = null; + return; + } + + int x = mop.blockX; + int y = mop.blockY; + int z = mop.blockZ; + int side = mop.sideHit; + + Block onBlock = world.getBlock(x, y, z); + if(onBlock instanceof BlockConveyorBendable) { + BlockConveyorBase bendable = (BlockConveyorBase) onBlock; + ForgeDirection moveDir = bendable.getInputDirection(world, x, y, z); + + int ox = x + moveDir.offsetX; + int oy = y + moveDir.offsetY; + int oz = z + moveDir.offsetZ; + + if(world.getBlock(ox, oy, oz).isReplaceable(world, ox, oy, oz)) { + side = moveDir.ordinal(); + } + } + + if(lastMop != null && mop.blockX == lastMop.blockX && mop.blockY == lastMop.blockY && mop.blockZ == lastMop.blockZ && side == lastSide && Math.abs(lastYaw - player.rotationYaw) < 15) return; + lastMop = mop; + lastYaw = player.rotationYaw; + lastSide = side; + + NBTTagCompound nbt = stack.stackTagCompound; + + int sx = nbt.getInteger("x"); + int sy = nbt.getInteger("y"); + int sz = nbt.getInteger("z"); + int sSide = nbt.getInteger("side"); + int count = nbt.getInteger("count"); + + // Size has a one block buffer on both sides, for overshooting conveyors + int sizeX = Math.abs(sx - x) + 3; + int sizeY = Math.abs(sy - y) + 3; + int sizeZ = Math.abs(sz - z) + 3; + + int minX = Math.min(sx, x) - 1; + int minY = Math.min(sy, y) - 1; + int minZ = Math.min(sz, z) - 1; + + WorldInAJar wiaj = new WorldInAJar(sizeX, sizeY, sizeZ); + boolean pathSuccess = construct(world, wiaj, getType(stack), player, sx, sy, sz, sSide, x, y, z, side, minX, minY, minZ, count) > 0; + + RenderOverhead.setActionPreview(wiaj, minX, minY, minZ, pathSuccess); + } + } + + // In creative, auto delete connected conveyors + @Override + public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer playerEntity) { + World world = playerEntity.worldObj; + Block block = world.getBlock(x, y, z); + + if(!playerEntity.capabilities.isCreativeMode) return false; + if(!(playerEntity instanceof EntityPlayerMP)) return false; + + EntityPlayerMP player = (EntityPlayerMP) playerEntity; + + if(!world.isRemote && block instanceof BlockConveyorBase) { + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + breakExtra(world, player, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, 32); + } + } + + return false; + } + + private void breakExtra(World world, EntityPlayerMP player, int x, int y, int z, int depth) { + depth--; + if(depth <= 0) return; + + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + if(!(block instanceof BlockConveyorBase)) return; + + BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z); + if(event.isCanceled()) + return; + + block.onBlockHarvested(world, x, y, z, meta, player); + if(block.removedByPlayer(world, player, x, y, z, false)) { + block.onBlockDestroyedByPlayer(world, x, y, z, meta); + } + + player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world)); + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + breakExtra(world, player, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, depth); + } + } + + // attempts to construct a conveyor between two points, including bends, lifts, and chutes + private static int construct(World routeWorld, IBlockAccess buildWorld, ConveyorType type, EntityPlayer player, int x1, int y1, int z1, int side1, int x2, int y2, int z2, int side2, int box, int boy, int boz, int max) { + ForgeDirection dir = ForgeDirection.getOrientation(side1); + ForgeDirection targetDir = ForgeDirection.getOrientation(side2); + + // if placing within a single block, we have to handle rotation specially, treating it like a manual placement with player facing + if(x1 == x2 && y1 == y2 && z1 == z2 && side1 == side2 && (dir == ForgeDirection.UP || dir == ForgeDirection.DOWN)) { + int meta = getFacingMeta(player); + + y1 += dir.offsetY; + + if(!routeWorld.getBlock(x1, y1, z1).isReplaceable(routeWorld, x1, y1, z1)) return -1; + + Block block = getConveyorBlock(type); + if(buildWorld instanceof World) { + ((World) buildWorld).setBlock(x1 - box, y1 - boy, z1 - boz, block, meta, 3); + } else if(buildWorld instanceof WorldInAJar) { + ((WorldInAJar) buildWorld).setBlock(x1 - box, y1 - boy, z1 - boz, block, meta); + } + + return 1; + } + + boolean hasVertical = hasSnakesAndLadders(type); + + int tx = x2 + targetDir.offsetX; + int ty = y2 + targetDir.offsetY; + int tz = z2 + targetDir.offsetZ; + + int x = x1 + dir.offsetX; + int y = y1 + dir.offsetY; + int z = z1 + dir.offsetZ; + + if(dir == ForgeDirection.UP || dir == ForgeDirection.DOWN) { + dir = getTargetDirection(x, y, z, x2, y2, z2, hasVertical); + } + + Block targetBlock = routeWorld.getBlock(x2, y2, z2); + boolean isTargetHorizontal = targetDir != ForgeDirection.UP && targetDir != ForgeDirection.DOWN; + boolean shouldTurnToTarget = isTargetHorizontal || targetBlock instanceof BlockCraneBase || targetBlock == ModBlocks.conveyor_lift || targetBlock == ModBlocks.conveyor_chute; + + ForgeDirection horDir = dir == ForgeDirection.UP || dir == ForgeDirection.DOWN ? ForgeDirection.getOrientation(getFacingMeta(player)).getOpposite() : dir; + + // Initial dropdown to floor level, if possible + if(y > ty) { + if(routeWorld.getBlock(x, y - 1, z).isReplaceable(routeWorld, x, y - 1, z)) { + dir = ForgeDirection.DOWN; + } + } + + for(int loopDepth = 1; loopDepth <= max; loopDepth++) { + if(!routeWorld.getBlock(x, y, z).isReplaceable(routeWorld, x, y, z)) return -1; + + Block block = getConveyorForDirection(type, dir); + int meta = getConveyorMetaForDirection(block, dir, targetDir, horDir); + + int ox = x + dir.offsetX; + int oy = y + dir.offsetY; + int oz = z + dir.offsetZ; + + // check if we should turn before continuing + int fromDistance = taxiDistance(x, y, z, tx, ty, tz); + int toDistance = taxiDistance(ox, oy, oz, tx, ty, tz); + int finalDistance = taxiDistance(ox, oy, oz, x2, y2, z2); + boolean notAtTarget = (shouldTurnToTarget ? finalDistance : fromDistance) > 0; + boolean willBeObstructed = notAtTarget && !routeWorld.getBlock(ox, oy, oz).isReplaceable(routeWorld, ox, oy, oz); + boolean shouldTurn = (toDistance >= fromDistance && notAtTarget) || willBeObstructed; + + if(shouldTurn) { + ForgeDirection newDir = getTargetDirection(x, y, z, shouldTurnToTarget ? x2 : tx, shouldTurnToTarget ? y2 : ty, shouldTurnToTarget ? z2 : tz, tx, ty, tz, dir, willBeObstructed, hasVertical); + + if(newDir == ForgeDirection.UP) { + block = ModBlocks.conveyor_lift; + } else if(newDir == ForgeDirection.DOWN) { + block = ModBlocks.conveyor_chute; + } else if(dir.getRotation(ForgeDirection.UP) == newDir) { + meta += 8; + } else if(dir.getRotation(ForgeDirection.DOWN) == newDir) { + meta += 4; + } + + dir = newDir; + if(dir != ForgeDirection.UP && dir != ForgeDirection.DOWN) horDir = dir; + } + + if(buildWorld instanceof World) { + ((World) buildWorld).setBlock(x - box, y - boy, z - boz, block, meta, 3); + } else if(buildWorld instanceof WorldInAJar) { + ((WorldInAJar) buildWorld).setBlock(x - box, y - boy, z - boz, block, meta); + } + + if(x == tx && y == ty && z == tz) return loopDepth; + + x += dir.offsetX; + y += dir.offsetY; + z += dir.offsetZ; + } + + return 0; + } + + private static int getFacingMeta(EntityPlayer player) { + int meta = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + switch(meta) { + case 0: return 2; + case 1: return 5; + case 2: return 3; + case 3: return 4; + } + return 2; + } + + private static int getConveyorMetaForDirection(Block block, ForgeDirection dir, ForgeDirection targetDir, ForgeDirection horDir) { + if(block != ModBlocks.conveyor_chute && block != ModBlocks.conveyor_lift) return dir.getOpposite().ordinal(); + if(targetDir == ForgeDirection.UP || targetDir == ForgeDirection.DOWN) return horDir.getOpposite().ordinal(); + return targetDir.ordinal(); + } + + private static Block getConveyorForDirection(ConveyorType type, ForgeDirection dir) { + if(dir == ForgeDirection.UP) return ModBlocks.conveyor_lift; + if(dir == ForgeDirection.DOWN) return ModBlocks.conveyor_chute; + return getConveyorBlock(type); + } + + private static ForgeDirection getTargetDirection(int x1, int y1, int z1, int x2, int y2, int z2, boolean hasVertical) { + return getTargetDirection(x1, y1, z1, x2, y2, z2, x2, y2, z2, null, false, hasVertical); + } + + private static ForgeDirection getTargetDirection(int x1, int y1, int z1, int x2, int y2, int z2, int tx, int ty, int tz, ForgeDirection heading, boolean willBeObstructed, boolean hasVertical) { + if(hasVertical && (y1 != y2 || y1 != ty) && (willBeObstructed || (x1 == x2 && z1 == z2) || (x1 == tx && z1 == tz))) return y1 > y2 ? ForgeDirection.DOWN : ForgeDirection.UP; + + if(Math.abs(x1 - x2) > Math.abs(z1 - z2)) { + if(heading == ForgeDirection.EAST || heading == ForgeDirection.WEST) return z1 > z2 ? ForgeDirection.NORTH : ForgeDirection.SOUTH; + return x1 > x2 ? ForgeDirection.WEST : ForgeDirection.EAST; + } else { + if(heading == ForgeDirection.NORTH || heading == ForgeDirection.SOUTH) return x1 > x2 ? ForgeDirection.WEST : ForgeDirection.EAST; + return z1 > z2 ? ForgeDirection.NORTH : ForgeDirection.SOUTH; + } + } + + private static int taxiDistance(int x1, int y1, int z1, int x2, int y2, int z2) { + return Math.abs(x1 - x2) + Math.abs(y1 - y2) + Math.abs(z1 - z2); + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index c85c4fefe..9d1dc9b8d 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -66,7 +66,8 @@ import com.hbm.render.anim.BusAnimation; import com.hbm.render.entity.rocket.*; import com.hbm.render.item.*; import com.hbm.render.item.ItemRenderMissileGeneric.RenderMissileType; - import com.hbm.render.item.block.ItemRenderDecoBlock; +import com.hbm.render.item.block.ItemRenderBlock; +import com.hbm.render.item.block.ItemRenderDecoBlock; import com.hbm.render.item.weapon.*; import com.hbm.render.loader.HmfModelLoader; import com.hbm.render.model.ModelPigeon; @@ -559,6 +560,7 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.multitool_decon, new ItemRenderMultitool()); //blocks MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.steel_roof), new ItemRenderDecoBlock()); + MinecraftForgeClient.registerItemRenderer(ModItems.conveyor_wand, new ItemRenderBlock(ModBlocks.conveyor, ModBlocks.conveyor_express, ModBlocks.conveyor_double, ModBlocks.conveyor_triple)); } @Override diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index c9c6a1eeb..b0b6b1405 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -31,6 +31,7 @@ import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.special.ItemCircuitStarComponent.CircuitComponentType; import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.items.special.ItemPlasticScrap.ScrapType; +import com.hbm.items.tool.ItemConveyorWand.ConveyorType; import com.hbm.items.tool.ItemDrone.EnumDroneType; import com.hbm.items.tool.ItemGuideBook.BookType; import cpw.mods.fml.common.Loader; @@ -220,14 +221,12 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.radio_torch_counter, 4), new Object[] { "G", "R", "I", 'G', "dustGlowstone", 'R', Blocks.redstone_torch, 'I', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); addRecipeAuto(new ItemStack(ModBlocks.radio_telex, 2), new Object[] { "SCR", "W#W", "WWW", 'S', ModBlocks.radio_torch_sender, 'C', ModItems.crt_display, 'R', ModBlocks.radio_torch_receiver, 'W', KEY_PLANKS, '#', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor, 16), new Object[] { "LLL", "I I", "LLL", 'L', Items.leather, 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor, 16), new Object[] { "RSR", "I I", "RSR", 'I', IRON.ingot(), 'R', DictFrame.fromOne(ModItems.plant_item, EnumPlantType.ROPE), 'S', IRON.plate() }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor, 64), new Object[] { "LLL", "I I", "LLL", 'L', ANY_RUBBER.ingot(), 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor_express, 8), new Object[] { "CCC", "CLC", "CCC", 'C', ModBlocks.conveyor, 'L', Fluids.LUBRICANT.getDict(1_000) }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor_double, 3), new Object[] { "CPC", "CPC", "CPC", 'C', ModBlocks.conveyor, 'P', IRON.plate() }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor_triple, 3), new Object[] { "CPC", "CPC", "CPC", 'C', ModBlocks.conveyor_double, 'P', STEEL.plate() }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor_chute, 3), new Object[] { "IGI", "IGI", "ICI" , 'I', IRON.ingot(), 'G', ModBlocks.steel_grate, 'C', ModBlocks.conveyor }); - addRecipeAuto(new ItemStack(ModBlocks.conveyor_lift, 3), new Object[] { "IGI", "IGI", "ICI" , 'I', IRON.ingot(), 'G', ModBlocks.chain, 'C', ModBlocks.conveyor }); + addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR, 16), new Object[] { "LLL", "I I", "LLL", 'L', Items.leather, 'I', IRON.ingot() }); + addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR, 16), new Object[] { "RSR", "I I", "RSR", 'I', IRON.ingot(), 'R', DictFrame.fromOne(ModItems.plant_item, EnumPlantType.ROPE), 'S', IRON.plate() }); + addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR, 64), new Object[] { "LLL", "I I", "LLL", 'L', ANY_RUBBER.ingot(), 'I', IRON.ingot() }); + addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.EXPRESS, 8), new Object[] { "CCC", "CLC", "CCC", 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'L', Fluids.LUBRICANT.getDict(1_000) }); + addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.DOUBLE), new Object[] { "CPC", 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', IRON.plate() }); + addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.TRIPLE), new Object[] { "DPC", 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'D', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.DOUBLE), 'P', STEEL.plate() }); //addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_difurnace_off), 1), new Object[] { "T T", "PHP", "TFT", 'T', W.ingot(), 'P', ModItems.board_copper, 'H', Blocks.hopper, 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(ModBlocks.machine_difurnace_extension, 1), new Object[] { " C ", "BGB", "BGB", 'C', CU.plate(), 'B', ModItems.ingot_firebrick, 'G', ModBlocks.steel_grate }); @@ -938,18 +937,18 @@ public class CraftingManager { for(int i = 0; i < craneCasing.length / 2; i++) { Object casing = craneCasing[i * 2]; int amount = (int) craneCasing[i * 2 + 1]; - addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', ModBlocks.conveyor }); - addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); - addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); } - addRecipeAuto(new ItemStack(ModBlocks.crane_boxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_PLANKS, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'C', ModBlocks.conveyor }); - addRecipeAuto(new ItemStack(ModBlocks.crane_unboxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_STICK, 'P', Items.shears, 'C', ModBlocks.conveyor }); + addRecipeAuto(new ItemStack(ModBlocks.crane_boxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_PLANKS, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_unboxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_STICK, 'P', Items.shears, 'C', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) }); addRecipeAuto(new ItemStack(ModBlocks.crane_router), new Object[] { "PIP", "ICI", "PIP", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', ModItems.plate_polymer, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC) }); addRecipeAuto(new ItemStack(ModBlocks.crane_splitter), new Object[] { "III", "PCP", "III", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', STEEL.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); - addRecipeAuto(new ItemStack(ModBlocks.crane_partitioner), new Object[] { " M ", "BCB", 'M', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'B', ModBlocks.conveyor, 'C', ModBlocks.crate_steel }); + addRecipeAuto(new ItemStack(ModBlocks.crane_partitioner), new Object[] { " M ", "BCB", 'M', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR), 'C', ModBlocks.crate_steel }); - addRecipeAuto(new ItemStack(ModBlocks.machine_conveyor_press), new Object[] { "CPC", "CBC", "CCC", 'C', CU.plate(), 'P', ModBlocks.machine_epress, 'B', ModBlocks.conveyor }); + addRecipeAuto(new ItemStack(ModBlocks.machine_conveyor_press), new Object[] { "CPC", "CBC", "CCC", 'C', CU.plate(), 'P', ModBlocks.machine_epress, 'B', DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR) }); addRecipeAuto(new ItemStack(ModBlocks.radar_screen), new Object[] { "PCP", "SRS", "PCP", 'P', ANY_PLASTIC.ingot(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'S', STEEL.plate(), 'R', ModItems.crt_display }); addRecipeAuto(new ItemStack(ModItems.radar_linker), new Object[] { "S", "C", "P", 'S', ModItems.crt_display, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'P', STEEL.plate() }); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 6f851c112..dd082814e 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -64,9 +64,6 @@ import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.cannery.CanneryBase; import com.hbm.wiaj.cannery.Jars; -import com.hbm.util.ArmorRegistry; -import com.hbm.util.ArmorUtil; -import com.hbm.util.DamageResistanceHandler; import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.FMLCommonHandler; @@ -160,7 +157,7 @@ public class ModEventHandlerClient { GL11.glDepthMask(true); return; } - + /*if(event.type == ElementType.CROSSHAIRS && player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.gun_aberrator) { int width = event.resolution.getScaledWidth(); int height = event.resolution.getScaledHeight(); @@ -367,7 +364,7 @@ public class ModEventHandlerClient { RenderScreenOverlay.renderScope(resolution, cfg.getScopeTexture(held)); } } - + //prevents NBT changes (read: every fucking tick) on guns from bringing up the item's name over the hotbar if(held != null && held.getItem() instanceof ItemGunBaseNT && Minecraft.getMinecraft().ingameGUI.highlightingItemStack != null && Minecraft.getMinecraft().ingameGUI.highlightingItemStack.getItem() == held.getItem()) { Minecraft.getMinecraft().ingameGUI.highlightingItemStack = held; @@ -1088,7 +1085,7 @@ public class ModEventHandlerClient { return null; } - + public static boolean renderLodeStar = false; // GENUINELY shut the fuck up i'm not kidding public static long lastStarCheck = 0L; @@ -1121,14 +1118,14 @@ public class ModEventHandlerClient { world.provider.setSkyRenderer(new RenderNTMSkyboxChainloader(sky)); } } - + EntityPlayer player = Minecraft.getMinecraft().thePlayer; long millis = System.currentTimeMillis(); - + if(lastStarCheck + 200 < millis) { renderLodeStar = false; // GENUINELY shut the fuck up i'm not kidding lastStarCheck = millis; - + if(player != null) { // GENUINELY shut the fuck up i'm not kidding Vec3NT pos = new Vec3NT(player.posX, player.posY, player.posZ); // GENUINELY shut the fuck up i'm not kidding Vec3NT lodestarHeading = new Vec3NT(0, 0, -1D).rotateAroundXDeg(-15).multiply(25); // GENUINELY shut the fuck up i'm not kidding @@ -1320,6 +1317,8 @@ public class ModEventHandlerClient { RenderOverhead.renderThermalSight(event.partialTicks); } } + + RenderOverhead.renderActionPreview(event.partialTicks); } @SubscribeEvent(priority = EventPriority.HIGHEST) @@ -1437,7 +1436,7 @@ public class ModEventHandlerClient { client.sendQueue.addToSendQueue(new C0CPacketInput(client.moveStrafing, client.moveForward, client.movementInput.jump, client.movementInput.sneak)); } } - + if(event.phase == event.phase.END) { ItemCustomLore.updateSystem(); } diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 2e94e548c..c09f2a33d 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -84,6 +84,13 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.spotlight_halogen_off)); API.hideItem(new ItemStack(ModBlocks.spotlight_beam)); + API.hideItem(new ItemStack(ModBlocks.conveyor)); + API.hideItem(new ItemStack(ModBlocks.conveyor_chute)); + API.hideItem(new ItemStack(ModBlocks.conveyor_lift)); + API.hideItem(new ItemStack(ModBlocks.conveyor_express)); + API.hideItem(new ItemStack(ModBlocks.conveyor_double)); + API.hideItem(new ItemStack(ModBlocks.conveyor_triple)); + API.registerHighlightIdentifier(ModBlocks.plushie, new IHighlightHandler() { @Override public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { int x = mop.blockX; diff --git a/src/main/java/com/hbm/render/item/block/ItemRenderBlock.java b/src/main/java/com/hbm/render/item/block/ItemRenderBlock.java new file mode 100644 index 000000000..9cc60d61d --- /dev/null +++ b/src/main/java/com/hbm/render/item/block/ItemRenderBlock.java @@ -0,0 +1,42 @@ +package com.hbm.render.item.block; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +public class ItemRenderBlock implements IItemRenderer { + + private final Block[] blocks; + private RenderBlocks renderBlocks = new RenderBlocks(); + + public ItemRenderBlock(Block... blocks) { + this.blocks = blocks; + } + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return true; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + if(type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + TextureManager textureManager = Minecraft.getMinecraft().getTextureManager(); + textureManager.bindTexture(textureManager.getResourceLocation(0)); + renderBlocks.renderBlockAsItem(blocks[item.getItemDamage()], 0, 1.0F); + } + +} \ No newline at end of file diff --git a/src/main/java/com/hbm/render/util/RenderOverhead.java b/src/main/java/com/hbm/render/util/RenderOverhead.java index 4c3759a32..0b7d354df 100644 --- a/src/main/java/com/hbm/render/util/RenderOverhead.java +++ b/src/main/java/com/hbm/render/util/RenderOverhead.java @@ -9,13 +9,17 @@ import java.util.Map.Entry; import org.lwjgl.opengl.GL11; import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.wiaj.WorldInAJar; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RendererLivingEntity; +import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; @@ -107,9 +111,9 @@ public class RenderOverhead { GL11.glPopMatrix(); } } - + public static void renderThermalSight(float partialTicks) { - + EntityPlayer player = Minecraft.getMinecraft().thePlayer; double x = player.prevPosX + (player.posX - player.prevPosX) * partialTicks; double y = player.prevPosY + (player.posY - player.prevPosY) * partialTicks; @@ -123,20 +127,20 @@ public class RenderOverhead { GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA); - + Tessellator tess = Tessellator.instance; tess.startDrawing(GL11.GL_LINES); for(Object o : player.worldObj.loadedEntityList) { - + Entity ent = (Entity) o; - + if(ent == player) continue; - + if(ent.getDistanceSqToEntity(player) > 4096) continue; - + if(ent instanceof IBossDisplayData) tess.setColorOpaque_F(1F, 0.5F, 0F); else if(ent instanceof IMob) @@ -154,7 +158,7 @@ public class RenderOverhead { tess.setColorOpaque_F(0.5F, 1F, 0.5F); } else continue; - + AxisAlignedBB bb = ent.boundingBox; tess.addVertex(bb.minX - x, bb.maxY - y, bb.minZ - z); tess.addVertex(bb.minX - x, bb.minY - y, bb.minZ - z); @@ -181,11 +185,11 @@ public class RenderOverhead { tess.addVertex(bb.minX - x, bb.minY - y, bb.minZ - z); tess.addVertex(bb.minX - x, bb.minY - y, bb.maxZ - z); } - + tess.draw(); - + tess.setColorOpaque_F(1F, 1F, 1F); - + GL11.glEnable(GL11.GL_COLOR_MATERIAL); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_POINT_SMOOTH); @@ -196,15 +200,15 @@ public class RenderOverhead { public static final HashMap queuedMarkers = new HashMap(); private static final HashMap markers = new HashMap(); - + public static void renderMarkers(float partialTicks) { - + markers.putAll(queuedMarkers); queuedMarkers.clear(); - + if(markers.isEmpty()) return; - + EntityPlayer player = Minecraft.getMinecraft().thePlayer; double x = player.prevPosX + (player.posX - player.prevPosX) * partialTicks; double y = player.prevPosY + (player.posY - player.prevPosY) * partialTicks; @@ -218,10 +222,10 @@ public class RenderOverhead { GL11.glEnable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA); - + Tessellator tess = Tessellator.instance; tess.startDrawing(GL11.GL_LINES); - + Iterator> it = markers.entrySet().iterator(); List> tagList = new ArrayList(); while(it.hasNext()) { @@ -232,14 +236,14 @@ public class RenderOverhead { int pX = pos.getX(); int pY = pos.getY(); int pZ = pos.getZ(); - + double minX = marker.minX; double minY = marker.minY; double minZ = marker.minZ; double maxX = marker.maxX; double maxY = marker.maxY; double maxZ = marker.maxZ; - + tess.setColorOpaque_I(marker.color); tess.addVertex(pX + minX - x, pY + maxY - y, pZ + minZ - z); tess.addVertex(pX + minX - x, pY + minY - y, pZ + minZ - z); @@ -265,9 +269,9 @@ public class RenderOverhead { tess.addVertex(pX + maxX - x, pY + minY - y, pZ + maxZ - z); tess.addVertex(pX + minX - x, pY + minY - y, pZ + minZ - z); tess.addVertex(pX + minX - x, pY + minY - y, pZ + maxZ - z); - + tagList.add(entry); - + if(marker.expire > 0 && System.currentTimeMillis() > marker.expire) { it.remove(); } else if(marker.maxDist > 0) { @@ -280,17 +284,17 @@ public class RenderOverhead { } } } - + tess.draw(); - + tess.setColorOpaque_F(1F, 1F, 1F); - + GL11.glEnable(GL11.GL_COLOR_MATERIAL); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_POINT_SMOOTH); GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_DEPTH_TEST); - + for(Entry entry : tagList) { BlockPos pos = entry.getKey(); @@ -299,14 +303,14 @@ public class RenderOverhead { int pX = pos.getX(); int pY = pos.getY(); int pZ = pos.getZ(); - + double minX = marker.minX; double minY = marker.minY; double minZ = marker.minZ; double maxX = marker.maxX; double maxY = marker.maxY; double maxZ = marker.maxZ; - + double aX = pX + (maxX - minX) / 2D; double aY = pY + (maxY - minY) / 2D; double aZ = pZ + (maxZ - minZ) / 2D; @@ -323,16 +327,16 @@ public class RenderOverhead { if(label == null) { label = ""; } - + if(Math.abs(look.xCoord - diff.xCoord) + Math.abs(look.yCoord - diff.yCoord) + Math.abs(look.zCoord - diff.zCoord) < 0.15) { label += (!label.isEmpty() ? " " : "") + ((int) sqrt) + "m"; } - + if(!label.isEmpty()) drawTag(1F, len, label, vec.xCoord, vec.yCoord, vec.zCoord, 100, true, marker.color, marker.color); } GL11.glPopMatrix(); } - + public static class Marker { double minX = 0; double minY = 0; @@ -340,30 +344,103 @@ public class RenderOverhead { double maxX = 1; double maxY = 1; double maxZ = 1; - + int color; String label; - + long expire; double maxDist; - + public Marker(int color) { this.color = color; } - + public Marker setExpire(long expire) { this.expire = expire; return this; } - + public Marker setDist(double maxDist) { this.maxDist = maxDist; return this; } - + public Marker withLabel(String label) { this.label = label; return this; } } + + private static WorldInAJar actionPreviewWorld; + private static int offsetX; + private static int offsetY; + private static int offsetZ; + private static boolean actionPreviewSuccess; + + private static boolean clearPreview; + + public static void setActionPreview(WorldInAJar wiaj, int x, int y, int z, boolean canAction) { + actionPreviewWorld = wiaj; + offsetX = x; + offsetY = y; + offsetZ = z; + actionPreviewSuccess = canAction; + } + + // Prevents thread unsafe null exception + public static void clearActionPreview() { + clearPreview = true; + } + + public static void renderActionPreview(float partialTicks) { + if(clearPreview) { + actionPreviewWorld = null; + clearPreview = false; + } + + if(actionPreviewWorld == null) return; + + RenderBlocks renderer = new RenderBlocks(actionPreviewWorld); + + renderer.enableAO = true; + actionPreviewWorld.lightlevel = 15; + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_BLEND); + + GL11.glPushMatrix(); + { + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + double x = player.prevPosX + (player.posX - player.prevPosX) * partialTicks; + double y = player.prevPosY + (player.posY - player.prevPosY) * partialTicks; + double z = player.prevPosZ + (player.posZ - player.prevPosZ) * partialTicks; + + GL11.glTranslated(offsetX - x, offsetY - y, offsetZ - z); + + Minecraft.getMinecraft().getTextureManager().bindTexture(TextureMap.locationBlocksTexture); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator.instance.startDrawingQuads(); + + Tessellator.instance.disableColor(); + if(actionPreviewSuccess) { + GL11.glColor3f(0, 1, 1); + } else { + GL11.glColor3f(1, 0, 0); + } + + for(int ix = 0; ix < actionPreviewWorld.sizeX; ix++) { + for(int iy = 0; iy < actionPreviewWorld.sizeY; iy++) { + for(int iz = 0; iz < actionPreviewWorld.sizeZ; iz++) { + try { renderer.renderBlockByRenderType(actionPreviewWorld.getBlock(ix, iy, iz), ix, iy, iz); } catch(Exception ex) { } + } + } + } + + Tessellator.instance.draw(); + GL11.glShadeModel(GL11.GL_FLAT); + + } + GL11.glPopMatrix(); + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index cf651f373..83194759e 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1897,6 +1897,10 @@ item.combine_scrap.name=CMB Schrott item.component_emitter.name=Emitterkomponente item.component_limiter.name=Stabilisatorkomponente item.containment_box.name=Sicherheitsbehälter +item.conveyor_wand.regular.name=Förderband +item.conveyor_wand.express.name=Expressförderband +item.conveyor_wand.double.name=Zweispuriges Förderband +item.conveyor_wand.triple.name=Dreispuriges Förderband item.cordite.name=Kordit item.cotton_candy.name=Radioaktive Zuckerwatte item.crackpipe.name=Gesundheitspfeife @@ -4119,7 +4123,7 @@ tile.concrete_colored.orange.name=Oranger Beton tile.concrete_colored.pink.name=Rosa Beton tile.concrete_colored.purple.name=Lila Beton tile.concrete_colored.red.name=Roter Beton -tile.concrete_colored.silver.name=Hellgrauer Beton +tile.concrete_colored.silver.name=Hellgrauer Beton tile.concrete_colored.white.name=Weißer Beton tile.concrete_colored.yellow.name=Gelber Beton tile.concrete_colored_ext.bronze.name=Builder's Choice Concrete - Bronzeplatten diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a10b635ca..def1974f6 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2672,6 +2672,12 @@ item.combine_scrap.name=CMB Scrap Metal item.component_emitter.name=Emitter Component item.component_limiter.name=Stabilizer Component item.containment_box.name=Containment Box +item.conveyor_wand.regular.name=Conveyor Belt +item.conveyor_wand.express.name=Express Conveyor Belt +item.conveyor_wand.double.name=Double-Lane Conveyor Belt +item.conveyor_wand.triple.name=Triple-Lane Conveyor Belt +item.conveyor_wand.desc=Moves items dropped on it$Click two points to create a conveyor$Crouch click to manually place$Click with a screwdriver to rotate$Crouch click with a screwdriver to change types +item.conveyor_wand.vertical.desc=Is capable of placing lifts & chutes to move items vertically item.cordite.name=Cordite item.cotton_candy.name=Radioactive Cotton Candy item.crackpipe.name=Health Pipe diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index 6d79db6c7..d16b74233 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -118,7 +118,7 @@ achievement.sulfuric.desc= achievement.sulfuric=я не должен был окунать свои яйца в серную кислоту. achievement.tantalum.desc=Неуловимый, но всегда необходимый элемент. achievement.tantalum="Тантал" -achievement.tasteofblood.desc=Это не было частью протокола тестирования. +achievement.tasteofblood.desc=Это не было частью протокола тестирования. achievement.tasteofblood=Вкус крови achievement.technetium.desc=Это целебно, это целебно! achievement.technetium=Большой Человек, Человек-Свинья @@ -833,7 +833,7 @@ container.reactorBreeding=Реактор-размножитель container.reactorControl=Блок удалённого доступа к реактору container.reactorLarge=Большой ядерный реактор container.reactorResearch=Исследовательский реактор -container.reix=Мэйнфрейм Rei-X +container.reix=Мэйнфрейм Rei-X container.rtg=РИТЭГ-генератор container.rtgFurnace=РИТЭГ-печь container.rttyCounter=Редстоун-радио счётчик предметов @@ -862,7 +862,7 @@ container.turretMaxwell=Максвелл container.turretRichard=Ричард container.turretSentry=Браун container.turretTauon=Тауон -container.uf6_tank=Бочка UF6 +container.uf6_tank=Бочка UF6 container.vacuumDistill=Вакуумный нефтеперерабатывающий завод container.wasteDrum=Бочка с отработанным топливом container.watzPowerplant=Реактор Ватцза @@ -1265,7 +1265,7 @@ gun.make.WGW=Wilhelm-Gustloff-Werke gun.make.WINCHESTER=Winchester Repeating Arms Company gun.make.WINCHESTER_BIGMT=Winchester Repeating Arms Company / Большая Гора -gun.name.ar15_50=Модификация AR-15 под .50 BMG +gun.name.ar15_50=Модификация AR-15 под .50 BMG gun.name.baeAR=Стандартная винтовка британнской армии gun.name.bel=Катапульта для жар-яиц gun.name.benelli=Benelli M4 Super 90 @@ -1327,7 +1327,7 @@ gun.name.spiw=H&R SPIW gun.name.stinger=FIM-92 Stinger man-portable air-defense system gun.name.stingerOneSky=The One Sky Stinger gun.name.supershotty=Двуствольный дробовик -gun.name.tau=Тау-пушка XVL1456 +gun.name.tau=Тау-пушка XVL1456 gun.name.tommy9=Модификация пистолета-пулемёта M1A1 под 9мм gun.name.tommy=Пистолет-пулемёт M1A1 gun.name.topaz=Тяжёлый огнемёт @@ -1489,7 +1489,7 @@ hbmfluid.naphtha=Нафта hbmfluid.naphtha_coker=Коксовая нафта hbmfluid.naphtha_crack=Крекированная нафта hbmfluid.naphtha_ds=Десульфуризованная нафта -hbmfluid.nitan=100-октановое сверхтопливо NITAN© +hbmfluid.nitan=100-октановое сверхтопливо NITAN© hbmfluid.nitric_acid=Азотная кислота hbmfluid.nitroglycerin=Нитроглицерин hbmfluid.none=Ничего @@ -2137,14 +2137,14 @@ item.battery_schrabidium_cell.name=Шрабидиевая энергоячейк item.battery_schrabidium_cell_2.name=Сдвоенная шрабидиевая энергоячейка item.battery_schrabidium_cell_4.name=Счетверённая шрабидиевая энергоячейка item.battery_spark.name=Спарк-батарея -item.battery_spark_cell_100.name=Спарк-Магический массив хранения энергии +item.battery_spark_cell_100.name=Спарк-Магический массив хранения энергии item.battery_spark_cell_1000.name=Спарк-Магическая масс-энергетическая пустота item.battery_spark_cell_10000.name=Устойчивый пространственно-временной спарк-кристалл item.battery_spark_cell_25.name=Спарк-Магический аккумулятор item.battery_spark_cell_2500.name=Спарк-Магическое море Дирака item.battery_spark_cell_6.name=Спарк-энергоячейка item.battery_spark_cell_power.name=Абсурдный физический спарк-блок накопления энергии -item.battery_steam.name=Паровой бак для хранения энергии +item.battery_steam.name=Паровой бак для хранения энергии item.battery_steam_large.name=Большой паровой бак для хранения энергии item.battery_su.name=Одноразовая батарейка item.battery_su_l.name=Большая одноразовая батарейка @@ -2333,9 +2333,9 @@ item.can_luna.name=Черная Меза Луна - Темная Кола item.can_mrsugar.name=Безалкогольный напиток 'Доктор Сахар' item.can_mug.name=MUG Root Beer item.can_overcharge.name=Перезарядка Delirium XT -item.can_redbomb.name=Энергетический напиток "Красная Бомба" +item.can_redbomb.name=Энергетический напиток "Красная Бомба" item.can_smart.name=Энергетический напиток “Смарт” -item.canister_NITAN.name=100-октановое сверхтопливо NITAN© (LEGACY) +item.canister_NITAN.name=100-октановое сверхтопливо NITAN© (LEGACY) item.canister_biofuel.name=Канистра с биотопливом (LEGACY) item.canister_bitumen.name=Канистра с битумом (LEGACY) item.canister_canola.name=Машинная смазка (LEGACY) @@ -2598,7 +2598,7 @@ item.clip_mirv.name=Три-в-одном пакет мини-МИРВов item.clip_mp.name=Британский военный стандарт магазина штурмовой винтовки item.clip_mp40.name=Обойма полуавтомата 9мм item.clip_osipr.name=Обойма AR2 -item.clip_revolver.name=Коробочка патронов калибра .357 +item.clip_revolver.name=Коробочка патронов калибра .357 item.clip_revolver_cursed.name=Британский военный стандарт пистолетной обоймы item.clip_revolver_gold.name=Маленький сундучок с золотыми пулями item.clip_revolver_iron.name=Коробка с железными патронами @@ -2611,7 +2611,7 @@ item.clip_revolver_schrabidium.name=Контейнер для шрабидиев item.clip_rpg.name=Контейнер с ракетами item.clip_spark.name=Большой Электромагнитный Картридж item.clip_stinger.name=Упаковка ракет "Стингер" -item.clip_uboinik.name=Коробка патронов картечи 12x70 +item.clip_uboinik.name=Коробка патронов картечи 12x70 item.clip_uzi.name=Обойма .22 LR Патронов item.clip_xvl1456.name=Большая Коробка с изотопами item.cmb_axe.name=Топор из стали Альянса @@ -2662,6 +2662,10 @@ item.combine_scrap.name=Металлолом Альянса item.component_emitter.name=Компонент излучателя item.component_limiter.name=Компонент стабилизатора item.containment_box.name=Защитная коробка +item.conveyor_wand.regular.name=Конвейер +item.conveyor_wand.express.name=Быстрый конвейер +item.conveyor_wand.double.name=Двухполосный конвейер +item.conveyor_wand.triple.name=Трёхполосный конвейер item.cordite.name=Кордит item.cotton_candy.name=Радиоактивная сахарная вата item.crackpipe.name=Оздоровительная трубка @@ -2693,7 +2697,7 @@ item.crystal_coal.name=Кристаллизованный уголь item.crystal_cobalt.name=Кристализованный кобальт item.crystal_copper.name=Кристаллизованная медь item.crystal_cinnebar.name=Кристаллизованная киноварь -item.crystal_diamond.name=Кристализованный алмаз +item.crystal_diamond.name=Кристализованный алмаз item.crystal_energy.name=Энергетический кристалл item.crystal_fluorite.name=Кристаллизованный флюорит item.crystal_gold.name=Кристаллизованное золото @@ -2874,7 +2878,7 @@ item.flame_politics.desc=Дональд Дак построит стену! item.flame_pony.name=Картинка цветной лошади item.flame_pony.desc=Желтая лошадь побеждает синюю лошадь, это доказанный факт! item.flask_infusion.shield.name=Эликсир защиты -item.fleija_core.name=Заряд Ф.Л.Е.И из урана 235 +item.fleija_core.name=Заряд Ф.Л.Е.И из урана 235 item.fleija_igniter.name=Импульсный воспламенитель item.fleija_kit.name=Комплект Ф.Л.Е.Я item.fleija_propellant.name=Шрабидиевая взрывчатка @@ -2921,7 +2925,7 @@ item.fuse.name=Предохранитель item.fusion_core.name=Ядерный блок item.fusion_core_infinite.name=Бесконечный ядерный блок item.fusion_shield_chlorophyte.name=Хлорофитовый защитный слой термоядерного реактора -item.fusion_shield_desh.name=Деш-Защитный слой термоядерного реактора +item.fusion_shield_desh.name=Деш-Защитный слой термоядерного реактора item.fusion_shield_tungsten.name=Вольфрамовый защитный слой термоядерного реактора item.fusion_shield_vaporwave.name=Вапорвейвный защитный слой термоядерного реактора item.gadget_core.name=Плутониевое ядро @@ -3304,7 +3308,7 @@ item.ingot_pvc.name=ПВХ item.ingot_ra226.name=Слиток радия-226 item.ingot_raw.name=%s Ingot item.ingot_red_copper.name=Слиток красной меди -item.ingot_reiium.name=Реиевый слиток +item.ingot_reiium.name=Реиевый слиток item.ingot_rubber.name=Резина item.ingot_saturnite.name=Сатурнитовый слиток item.ingot_schrabidate.name=Слиток шрабидата железа @@ -4108,7 +4112,7 @@ item.powder_verticium.name=Вертициевый порошок item.powder_weidanium.name=Вейдановый порошок item.powder_xe135.name=Порошок ксенона-135 item.powder_xe135_tiny.name=Кучка порошка ксенона-135 -item.powder_yellowcake.name=Йеллоукейк +item.powder_yellowcake.name=Йеллоукейк item.powder_zirconium.name=Циркониевый порошок item.power_net_tool.name=Анализатор энергосети item.pipette.name=Пипетка @@ -4206,7 +4210,7 @@ item.rbmk_fuel_pu238be.name=Плутоний-238-Бериллевый источ item.rbmk_fuel_ra226be.name=Радий-226-Бериллевый источник нейтронов РБМК item.rbmk_fuel_thmeu.name=Ториево-урановый среднеобогащённый топливный стержень РБМК item.rbmk_fuel_ueu.name=Необогащенный урановый топливный стержень РБМК -item.rbmk_fuel_zfb_am_mix.name=Америций реакторного качества ЦТС стержень РБМК +item.rbmk_fuel_zfb_am_mix.name=Америций реакторного качества ЦТС стержень РБМК item.rbmk_fuel_zfb_bismuth.name=Висмутовый ЦТС стержень РБМК item.rbmk_fuel_zfb_pu241.name=Плутоний-241 ЦТС стержень РБМК item.rbmk_lid.name=Покрывающая панель РБМК @@ -4359,7 +4363,7 @@ item.rod_euphemium.name=Euphemium Rod item.rod_lead.name=Lead Rod item.rod_lithium.name=Lithium Rod item.rod_mox_fuel.name=МОКС-топливный стержень -item.rod_mox_fuel_depleted.name=Обеднённый МОКС-топливный стержень +item.rod_mox_fuel_depleted.name=Обеднённый МОКС-топливный стержень item.rod_neptunium.name=Neptunium Rod item.rod_of_discord.name=Жезл раздора item.rod_plutonium.name=Plutonium Rod @@ -4662,7 +4666,7 @@ item.thermo_unit_endo.name=Устройство для распределени item.thermo_unit_exo.name=Устройство для распределения тепла item.thruster_large.name=Большой двигатель item.thruster_medium.name=Средний двигатель -item.thruster_nuclear.name=Ядерный ракетный двигатель LV-N +item.thruster_nuclear.name=Ядерный ракетный двигатель LV-N item.thruster_small.name=Малый двигатель item.titanium_axe.name=Титановый топор item.titanium_boots.name=Титановые ботинки @@ -4699,7 +4703,7 @@ item.turret_rocket_ammo.name=Боекомплект ракетной турел item.turret_spitfire_ammo.name=AA-Снаряд item.turret_tau_ammo.name=Урановые боеприпасы Тау-турели item.twinkie.name=Твинки -item.ullapool_caber.name=Аллапульское бревно +item.ullapool_caber.name=Аллапульское бревно item.undefined.name=Undefined item.upgrade_5g.name=Улучшение "5G излучение" item.upgrade_afterburn_1.name=Улучшение механизма "Форсаж" уровня I @@ -4762,7 +4766,7 @@ item.warhead_thermo_endo.name=Эндотермическая боеголовк item.warhead_thermo_exo.name=Экзотермическая боеголовка item.warhead_volcano.name=Тектоническая боеголовка item.waste_mox.name=Обедненное МОКС-топливо -item.waste_natural_uranium.name=Обедненное природное урановое топливо +item.waste_natural_uranium.name=Обедненное природное урановое топливо item.waste_plate_mox.name=Обеднённая МОКС-топливная пластина item.waste_plate_pu238be.name=Обеднённая плутоний-238-бериллевая топливная пластина item.waste_plate_pu239.name=Обеднённая высокообогащенная плутониевая-239 топливная пластина @@ -4803,7 +4807,7 @@ item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогаще item.watz_pellet_depleted.nqr.name=Ватцз-пеллета из наквадрии (Обедненная) item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащенного нептуния (Обедненная) item.watz_pellet_depleted.schrabidium.name=Ватцз-пеллета из чистого шрабидия (Обедненная) -item.weapon_bat.name=Любимица Ричарда +item.weapon_bat.name=Любимица Ричарда item.weapon_bat_nail.name=Клише item.weapon_golf_club.name=Клюшка русского бандита item.weapon_pipe_lead.name=Ручное управление @@ -5094,7 +5098,7 @@ tile.block_pu240.name=Блок плутония-240 tile.block_ra226.name=Блок радия-226 tile.block_red_copper.name=Блок красной меди tile.block_red_phosphorus.name=Блок красного фосфора -tile.block_reiium.name=Реиевый блок +tile.block_reiium.name=Реиевый блок tile.block_rubber.name=Блок резины tile.block_schrabidate.name=Блок шрабидата железа tile.block_schrabidium.name=Блок шрабидия @@ -5111,7 +5115,7 @@ tile.block_steel.name=Стальной блок tile.block_sulfur.name=Блок серы tile.block_tantalium.name=Блок тантала tile.block_tcalloy.name=Блок технециевой стали -tile.block_thorium.name=Ториевый блок +tile.block_thorium.name=Ториевый блок tile.block_thorium_fuel.name=Блок ториевого топлива tile.block_titanium.name=Титановый блок tile.block_trinitite.name=Тринититовый блок @@ -5413,7 +5417,7 @@ tile.dummy_port.name=Блок-пустышка (Розетка) tile.dungeon_chain.name=Металлическая цепь tile.dynamite.name=Динамит tile.emp_bomb.name=ЭМИ-бомба -tile.factory_advanced_conductor.name=Порт электричества усовершенствованной фабрики +tile.factory_advanced_conductor.name=Порт электричества усовершенствованной фабрики tile.factory_advanced_core.name=Ядро усовершенствованной фабрики tile.factory_advanced_furnace.name=Люк доступа усовершенствованной фабрики tile.factory_advanced_hull.name=Корпус усовершенствованной фабрики @@ -5783,7 +5787,7 @@ tile.nuke_fstbmb.name=Жар-бомба tile.nuke_gadget.name=Гаджет tile.nuke_man.name=Толстяк tile.nuke_mike.name=Иви Майк -tile.nuke_n2.name=N²-мина +tile.nuke_n2.name=N²-мина tile.nuke_n45.name=Морская мина N45 tile.nuke_prototype.name=Прототип tile.nuke_solinium.name=Синий Ополаскиватель @@ -5998,7 +6002,7 @@ tile.rbmk_steam_inlet.desc=Подает воду в колонны RBMK, есл tile.rbmk_steam_outlet.name=Порт вывода пара РБМК РеаСим tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам RBMK сбоку tile.rbmk_storage.name=Колонна-хранилище РБМК -tile.reactor_computer.name=Контроллер реактора +tile.reactor_computer.name=Контроллер реактора tile.reactor_conductor.name=Бойлер реактора tile.reactor_control.name=Регулирующие стержни tile.reactor_ejector.name=Выталкиватель отходов реактора diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index 200a8f1b0..94cf41862 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -2548,6 +2548,10 @@ item.combine_scrap.name=CMB钢废料 item.component_emitter.name=发射器组件 item.component_limiter.name=稳定器组件 item.containment_box.name=安全盒 +item.conveyor_wand.regular.name=输送带 +item.conveyor_wand.express.name=快速输送带 +item.conveyor_wand.double.name=双轨道输送带 +item.conveyor_wand.triple.name=三轨道输送带 item.cordite.name=无烟线状火药 item.cotton_candy.name=放射性棉花糖 item.crackpipe.name=健康烟壶 From 4a0ac6e95f17ee7443e4777481c2b5d9c9ce10b4 Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 31 Mar 2025 18:20:13 +1100 Subject: [PATCH 2/3] how the hell did this get indented like that --- src/main/java/com/hbm/main/ClientProxy.java | 250 ++++++++++---------- 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 9d1dc9b8d..f03f9289c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1,138 +1,138 @@ - package com.hbm.main; +package com.hbm.main; - import com.hbm.blocks.ModBlocks; - import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; - import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; - import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; - import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; - import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; +import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; +import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; +import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; +import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; import com.hbm.blocks.generic.BlockSkeletonHolder.TileEntitySkeletonHolder; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; - import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight; - import com.hbm.blocks.machine.MachineFan.TileEntityFan; - import com.hbm.blocks.machine.PistonInserter.TileEntityPistonInserter; - import com.hbm.blocks.machine.WatzPump.TileEntityWatzPump; - import com.hbm.config.GeneralConfig; - import com.hbm.entity.cart.EntityMinecartCrate; - import com.hbm.entity.cart.EntityMinecartNTM; - import com.hbm.entity.effect.*; - import com.hbm.entity.grenade.*; - import com.hbm.entity.item.*; - import com.hbm.entity.logic.*; - import com.hbm.entity.missile.*; - import com.hbm.entity.missile.EntityMissileTier0.*; - import com.hbm.entity.missile.EntityMissileTier1.*; - import com.hbm.entity.missile.EntityMissileTier2.*; - import com.hbm.entity.missile.EntityMissileTier3.EntityMissileBurst; - import com.hbm.entity.missile.EntityMissileTier3.EntityMissileDrill; - import com.hbm.entity.missile.EntityMissileTier3.EntityMissileInferno; - import com.hbm.entity.missile.EntityMissileTier3.EntityMissileRain; - import com.hbm.entity.missile.EntityMissileTier4.*; - import com.hbm.entity.mob.*; - import com.hbm.entity.mob.botprime.EntityBOTPrimeBody; - import com.hbm.entity.mob.botprime.EntityBOTPrimeHead; - import com.hbm.entity.mob.glyphid.*; - import com.hbm.entity.mob.siege.*; - import com.hbm.entity.particle.*; - import com.hbm.entity.projectile.*; - import com.hbm.entity.train.EntityRailCarBase.BoundingBoxDummyEntity; - import com.hbm.entity.train.EntityRailCarRidable.SeatDummyEntity; - import com.hbm.entity.train.TrainCargoTram; - import com.hbm.entity.train.TrainCargoTramTrailer; - import com.hbm.entity.train.TrainTunnelBore; - import com.hbm.handler.CasingEjector; - import com.hbm.handler.HbmKeybinds; - import com.hbm.handler.HbmKeybinds.EnumKeybind; - import com.hbm.handler.ImpactWorldHandler; - import com.hbm.handler.imc.IMCHandlerNHNEI; - import com.hbm.items.IAnimatedItem; - import com.hbm.items.ModItems; - import com.hbm.items.weapon.sedna.factory.GunFactoryClient; - import com.hbm.lib.RefStrings; - import com.hbm.particle.*; - import com.hbm.particle.helper.ParticleCreators; - import com.hbm.particle.psys.engine.EventHandlerParticleEngine; +import com.hbm.blocks.machine.Floodlight.TileEntityFloodlight; +import com.hbm.blocks.machine.MachineFan.TileEntityFan; +import com.hbm.blocks.machine.PistonInserter.TileEntityPistonInserter; +import com.hbm.blocks.machine.WatzPump.TileEntityWatzPump; +import com.hbm.config.GeneralConfig; +import com.hbm.entity.cart.EntityMinecartCrate; +import com.hbm.entity.cart.EntityMinecartNTM; +import com.hbm.entity.effect.*; +import com.hbm.entity.grenade.*; +import com.hbm.entity.item.*; +import com.hbm.entity.logic.*; +import com.hbm.entity.missile.*; +import com.hbm.entity.missile.EntityMissileTier0.*; +import com.hbm.entity.missile.EntityMissileTier1.*; +import com.hbm.entity.missile.EntityMissileTier2.*; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileBurst; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileDrill; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileInferno; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileRain; +import com.hbm.entity.missile.EntityMissileTier4.*; +import com.hbm.entity.mob.*; +import com.hbm.entity.mob.botprime.EntityBOTPrimeBody; +import com.hbm.entity.mob.botprime.EntityBOTPrimeHead; +import com.hbm.entity.mob.glyphid.*; +import com.hbm.entity.mob.siege.*; +import com.hbm.entity.particle.*; +import com.hbm.entity.projectile.*; +import com.hbm.entity.train.EntityRailCarBase.BoundingBoxDummyEntity; +import com.hbm.entity.train.EntityRailCarRidable.SeatDummyEntity; +import com.hbm.entity.train.TrainCargoTram; +import com.hbm.entity.train.TrainCargoTramTrailer; +import com.hbm.entity.train.TrainTunnelBore; +import com.hbm.handler.CasingEjector; +import com.hbm.handler.HbmKeybinds; +import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.handler.ImpactWorldHandler; +import com.hbm.handler.imc.IMCHandlerNHNEI; +import com.hbm.items.IAnimatedItem; +import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.factory.GunFactoryClient; +import com.hbm.lib.RefStrings; +import com.hbm.particle.*; +import com.hbm.particle.helper.ParticleCreators; +import com.hbm.particle.psys.engine.EventHandlerParticleEngine; import com.hbm.qmaw.QMAWLoader; import com.hbm.render.anim.BusAnimation; - import com.hbm.render.anim.BusAnimationSequence; - import com.hbm.render.anim.HbmAnimations; - import com.hbm.render.anim.HbmAnimations.Animation; - import com.hbm.render.block.*; - import com.hbm.render.entity.RenderEmpty; - import com.hbm.render.entity.effect.*; - import com.hbm.render.entity.item.*; - import com.hbm.render.entity.mob.*; - import com.hbm.render.entity.projectile.*; - import com.hbm.render.entity.rocket.*; - import com.hbm.render.item.*; - import com.hbm.render.item.ItemRenderMissileGeneric.RenderMissileType; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.HbmAnimations; +import com.hbm.render.anim.HbmAnimations.Animation; +import com.hbm.render.block.*; +import com.hbm.render.entity.RenderEmpty; +import com.hbm.render.entity.effect.*; +import com.hbm.render.entity.item.*; +import com.hbm.render.entity.mob.*; +import com.hbm.render.entity.projectile.*; +import com.hbm.render.entity.rocket.*; +import com.hbm.render.item.*; +import com.hbm.render.item.ItemRenderMissileGeneric.RenderMissileType; import com.hbm.render.item.block.ItemRenderBlock; import com.hbm.render.item.block.ItemRenderDecoBlock; - import com.hbm.render.item.weapon.*; - import com.hbm.render.loader.HmfModelLoader; - import com.hbm.render.model.ModelPigeon; - import com.hbm.render.tileentity.*; - import com.hbm.render.util.MissilePart; - import com.hbm.render.util.RenderInfoSystem; - import com.hbm.render.util.RenderInfoSystem.InfoEntry; - import com.hbm.render.util.RenderOverhead; - import com.hbm.render.util.RenderOverhead.Marker; - import com.hbm.sound.AudioWrapper; - import com.hbm.sound.AudioWrapperClient; - import com.hbm.tileentity.TileEntityDoorGeneric; - import com.hbm.tileentity.bomb.*; - import com.hbm.tileentity.deco.*; - import com.hbm.tileentity.machine.*; +import com.hbm.render.item.weapon.*; +import com.hbm.render.loader.HmfModelLoader; +import com.hbm.render.model.ModelPigeon; +import com.hbm.render.tileentity.*; +import com.hbm.render.util.MissilePart; +import com.hbm.render.util.RenderInfoSystem; +import com.hbm.render.util.RenderInfoSystem.InfoEntry; +import com.hbm.render.util.RenderOverhead; +import com.hbm.render.util.RenderOverhead.Marker; +import com.hbm.sound.AudioWrapper; +import com.hbm.sound.AudioWrapperClient; +import com.hbm.tileentity.TileEntityDoorGeneric; +import com.hbm.tileentity.bomb.*; +import com.hbm.tileentity.deco.*; +import com.hbm.tileentity.machine.*; import com.hbm.tileentity.machine.albion.*; import com.hbm.tileentity.machine.oil.*; - import com.hbm.tileentity.machine.rbmk.*; - import com.hbm.tileentity.machine.storage.*; - import com.hbm.tileentity.network.*; - import com.hbm.tileentity.turret.*; - import com.hbm.util.BobMathUtil; - import com.hbm.util.ColorUtil; - import com.hbm.util.fauxpointtwelve.BlockPos; - import com.hbm.wiaj.cannery.Jars; - import cpw.mods.fml.client.registry.ClientRegistry; - import cpw.mods.fml.client.registry.RenderingRegistry; - import cpw.mods.fml.common.FMLCommonHandler; - import cpw.mods.fml.relauncher.ReflectionHelper; - import net.minecraft.block.Block; - import net.minecraft.client.Minecraft; - import net.minecraft.client.audio.PositionedSoundRecord; - import net.minecraft.client.model.ModelChicken; - import net.minecraft.client.particle.EntityCloudFX; - import net.minecraft.client.particle.*; - import net.minecraft.client.renderer.entity.RenderMinecart; - import net.minecraft.client.renderer.entity.RenderSnowball; - import net.minecraft.client.renderer.texture.TextureManager; - import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; - import net.minecraft.client.resources.IReloadableResourceManager; - import net.minecraft.client.resources.Language; - import net.minecraft.entity.Entity; - import net.minecraft.entity.EntityLivingBase; - import net.minecraft.entity.player.EntityPlayer; - import net.minecraft.init.Blocks; - import net.minecraft.init.Items; - import net.minecraft.item.Item; - import net.minecraft.item.ItemBlock; - import net.minecraft.item.ItemStack; - import net.minecraft.nbt.NBTTagCompound; - import net.minecraft.util.MovingObjectPosition; - import net.minecraft.util.MovingObjectPosition.MovingObjectType; - import net.minecraft.util.ResourceLocation; - import net.minecraft.util.Vec3; - import net.minecraft.world.World; - import net.minecraftforge.client.MinecraftForgeClient; - import net.minecraftforge.client.model.AdvancedModelLoader; - import net.minecraftforge.common.MinecraftForge; - import paulscode.sound.SoundSystemConfig; +import com.hbm.tileentity.machine.rbmk.*; +import com.hbm.tileentity.machine.storage.*; +import com.hbm.tileentity.network.*; +import com.hbm.tileentity.turret.*; +import com.hbm.util.BobMathUtil; +import com.hbm.util.ColorUtil; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.wiaj.cannery.Jars; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.ReflectionHelper; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.model.ModelChicken; +import net.minecraft.client.particle.EntityCloudFX; +import net.minecraft.client.particle.*; +import net.minecraft.client.renderer.entity.RenderMinecart; +import net.minecraft.client.renderer.entity.RenderSnowball; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.Language; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.common.MinecraftForge; +import paulscode.sound.SoundSystemConfig; - import java.awt.*; - import java.net.URI; - import java.util.List; - import java.util.*; - import java.util.Map.Entry; +import java.awt.*; +import java.net.URI; +import java.util.List; +import java.util.*; +import java.util.Map.Entry; public class ClientProxy extends ServerProxy { From f465758bfd8b44d2256d24db2a9072ad9ea6eb67 Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 31 Mar 2025 18:27:25 +1100 Subject: [PATCH 3/3] whoops that was meant to be _client side_ --- src/main/java/com/hbm/items/tool/ItemConveyorWand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/hbm/items/tool/ItemConveyorWand.java b/src/main/java/com/hbm/items/tool/ItemConveyorWand.java index 0cee2401a..f2174c594 100644 --- a/src/main/java/com/hbm/items/tool/ItemConveyorWand.java +++ b/src/main/java/com/hbm/items/tool/ItemConveyorWand.java @@ -234,7 +234,7 @@ public class ItemConveyorWand extends Item { ItemStack held = player.getHeldItem(); if(held == null || held.getItem() != this || held.getItemDamage() != stack.getItemDamage()) { stack.stackTagCompound = null; - if(!world.isRemote) { + if(world.isRemote) { RenderOverhead.clearActionPreview(); lastMop = null; } @@ -242,7 +242,7 @@ public class ItemConveyorWand extends Item { } // clientside prediction only - if(!world.isRemote && inHand) { + if(world.isRemote && inHand) { if(!stack.hasTagCompound()) { RenderOverhead.clearActionPreview(); lastMop = null;