diff --git a/src/main/java/com/hbm/blocks/network/BlockCraneBase.java b/src/main/java/com/hbm/blocks/network/BlockCraneBase.java index 932381c24..3cdd1f8e5 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCraneBase.java +++ b/src/main/java/com/hbm/blocks/network/BlockCraneBase.java @@ -1,11 +1,12 @@ package com.hbm.blocks.network; -import java.util.Random; - +import api.hbm.block.IToolable; import com.hbm.blocks.IBlockSideRotation; +import com.hbm.items.tool.ItemTooling; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; - +import com.hbm.tileentity.network.TileEntityCraneBase; +import com.hbm.util.ChatBuilder; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; @@ -21,11 +22,16 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public abstract class BlockCraneBase extends BlockContainer implements IBlockSideRotation { +import java.util.Random; + +public abstract class BlockCraneBase extends BlockContainer implements IBlockSideRotation, IToolable { @SideOnly(Side.CLIENT) protected IIcon iconSide; @SideOnly(Side.CLIENT) protected IIcon iconIn; @@ -37,10 +43,24 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid @SideOnly(Side.CLIENT) protected IIcon iconDirectionalUp; @SideOnly(Side.CLIENT) protected IIcon iconDirectionalDown; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalTurnLeft; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalTurnRight; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideLeftTurnUp; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideRightTurnUp; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideLeftTurnDown; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideRightTurnDown; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideUpTurnLeft; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideUpTurnRight; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideDownTurnLeft; + @SideOnly(Side.CLIENT) protected IIcon iconDirectionalSideDownTurnRight; + public BlockCraneBase(Material mat) { super(mat); } - + + @Override + public abstract TileEntityCraneBase createNewTileEntity(World p_149915_1_, int p_149915_2_); + @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { @@ -54,7 +74,9 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) { + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTooling) { + return false; + } else if(world.isRemote) { return true; } else if(!player.isSneaking()) { FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); @@ -70,9 +92,149 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid world.setBlockMetadataWithNotify(x, y, z, l, 2); } + protected boolean hasReversedIO() { + return false; + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if (tool != ToolType.SCREWDRIVER) return false; + + TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof TileEntityCraneBase)) return false; + + TileEntityCraneBase craneTileEntity = (TileEntityCraneBase) te; + + // some cranes like the ejector have reversed input and output sides + // so this bit of logic is to hide that away from the player + boolean actuallyCycleInput = player.isSneaking() != hasReversedIO(); + ForgeDirection newDirection; + + if (actuallyCycleInput) { // cycle input + // it's in reverse because players are more likely to want to turn the output from DOWN to UP + int newValue = Math.floorMod(world.getBlockMetadata(x, y, z) - 1, 6); + newDirection = ForgeDirection.getOrientation(newValue); + + world.setBlockMetadataWithNotify(x, y, z, newValue, 3); + craneTileEntity.ensureOutputOverrideValid(); + } else { // cycle output + newDirection = craneTileEntity.cycleOutputOverride(); + } + + if (!world.isRemote) { + ChatBuilder message = player.isSneaking() + ? ChatBuilder.start("Input: ").color(EnumChatFormatting.GREEN) + : ChatBuilder.start("Output: ").color(EnumChatFormatting.RED); + message.next(newDirection.name()).color(EnumChatFormatting.WHITE); + player.addChatComponentMessage(message.flush()); + } + + return true; + } + + public ForgeDirection getInputSide(IBlockAccess world, int x, int y, int z) { + return ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); + } + + /** + * Returns the player-overridden output direction, or {@link ForgeDirection#UNKNOWN} if unset. + * A return value of {@link ForgeDirection#UNKNOWN} suggests use of default meta behavior. + * Should never return the current input direction. + */ + protected final ForgeDirection getOutputSideOverride(IBlockAccess world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof TileEntityCraneBase)) return ForgeDirection.UNKNOWN; + TileEntityCraneBase craneTileEntity = (TileEntityCraneBase) te; + + return craneTileEntity.getOutputOverride(); + } + + public ForgeDirection getOutputSide(IBlockAccess world, int x, int y, int z) { + TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof TileEntityCraneBase)) return ForgeDirection.UNKNOWN; + TileEntityCraneBase craneTileEntity = (TileEntityCraneBase) te; + + return craneTileEntity.getOutputSide(); + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + ForgeDirection inputSide = getInputSide(world, x, y, z); + ForgeDirection outputOverride = getOutputSideOverride(world, x, y, z); + boolean outputSideOverridden = outputOverride != ForgeDirection.UNKNOWN && outputOverride.getOpposite() != inputSide; + ForgeDirection outputSide = outputSideOverridden ? outputOverride : inputSide.getOpposite(); + + // take your left hand, make your thumb the input side and the index finger the output side + // angle your middle finger to make your hand look like coordinate axes + // the direction your middle finger is pointing towards will be the direction returned from this function + ForgeDirection leftHandRotation = outputSide.getRotation(inputSide); + + if(side == 0 || side == 1) { + if(side == outputSide.ordinal()) { + return this.iconOut; + } + if(side == inputSide.ordinal()) { + return this.iconIn; + } + + if (side == 1) { + if (outputSideOverridden) { + if (leftHandRotation == ForgeDirection.UP) { + return this.iconDirectionalTurnLeft; + } + if (leftHandRotation == ForgeDirection.DOWN) { + return this.iconDirectionalTurnRight; + } + } else return iconDirectional; + } + + return this.blockIcon; + } + + if(side == outputSide.ordinal()) { + return this.iconSideOut; + } + if(side == inputSide.ordinal()) { + return this.iconSideIn; + } + + if (outputSideOverridden) { + if (leftHandRotation.ordinal() == side) { + if (outputSide == ForgeDirection.UP) + return this.iconDirectionalSideLeftTurnUp; + if (outputSide == ForgeDirection.DOWN) + return this.iconDirectionalSideRightTurnDown; + if (inputSide == ForgeDirection.UP) + return this.iconDirectionalSideUpTurnRight; + if (inputSide == ForgeDirection.DOWN) + return this.iconDirectionalSideDownTurnLeft; + } + if (leftHandRotation.getOpposite().ordinal() == side) { + if (outputSide == ForgeDirection.UP) + return this.iconDirectionalSideRightTurnUp; + if (outputSide == ForgeDirection.DOWN) + return this.iconDirectionalSideLeftTurnDown; + if (inputSide == ForgeDirection.UP) + return this.iconDirectionalSideUpTurnLeft; + if (inputSide == ForgeDirection.DOWN) + return this.iconDirectionalSideDownTurnRight; + } + } else { + if(outputSide == ForgeDirection.UP) { + return this.iconDirectionalUp; + } + if(outputSide == ForgeDirection.DOWN) { + return this.iconDirectionalDown; + } + } + + return this.iconSide; + } + + // kept for inventory rendering @Override public IIcon getIcon(int side, int metadata) { - + if(side == 0 || side == 1) { if(side == metadata) { return this.iconOut; @@ -80,10 +242,10 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid if(side == ForgeDirection.getOrientation(metadata).getOpposite().ordinal()) { return this.iconIn; } - + return side == 1 ? this.iconDirectional : this.blockIcon; } - + if(side == metadata) { return this.iconSideOut; } @@ -97,9 +259,23 @@ public abstract class BlockCraneBase extends BlockContainer implements IBlockSid if(metadata == 1) { return this.iconDirectionalDown; } - + return this.iconSide; } + + @Override + public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { + int meta = world.getBlockMetadata(x, y, z); + + if(meta > 1 && side == 1) { + if(meta == 2) return 3; + if(meta == 3) return 0; + if(meta == 4) return 1; + if(meta == 5) return 2; + } + + return 0; + } public static int renderIDClassic = RenderingRegistry.getNextAvailableRenderId(); diff --git a/src/main/java/com/hbm/blocks/network/CraneBoxer.java b/src/main/java/com/hbm/blocks/network/CraneBoxer.java index b884bd62f..2498e734c 100644 --- a/src/main/java/com/hbm/blocks/network/CraneBoxer.java +++ b/src/main/java/com/hbm/blocks/network/CraneBoxer.java @@ -1,11 +1,11 @@ package com.hbm.blocks.network; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.network.TileEntityCraneBoxer; - import api.hbm.conveyor.IConveyorItem; import api.hbm.conveyor.IConveyorPackage; import api.hbm.conveyor.IEnterableBlock; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneBase; +import com.hbm.tileentity.network.TileEntityCraneBoxer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -14,8 +14,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -26,7 +24,7 @@ public class CraneBoxer extends BlockCraneBase implements IEnterableBlock { } @Override - public TileEntity createNewTileEntity(World world, int meta) { + public TileEntityCraneBase createNewTileEntity(World world, int meta) { return new TileEntityCraneBoxer(); } @@ -34,31 +32,26 @@ public class CraneBoxer extends BlockCraneBase implements IEnterableBlock { @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); - this.iconIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_box"); - this.iconSideIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_box"); + this.iconOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_box"); + this.iconSideOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_box"); this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_top"); this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_up"); this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_down"); + this.iconDirectionalTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_top_left"); + this.iconDirectionalTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_top_right"); + this.iconDirectionalSideLeftTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_left_turn_up"); + this.iconDirectionalSideRightTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_right_turn_up"); + this.iconDirectionalSideLeftTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_left_turn_down"); + this.iconDirectionalSideRightTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_right_turn_down"); + this.iconDirectionalSideUpTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_up_turn_left"); + this.iconDirectionalSideUpTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_up_turn_right"); + this.iconDirectionalSideDownTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_down_turn_left"); + this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_boxer_side_down_turn_right"); } - @Override - public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { - int meta = world.getBlockMetadata(x, y, z); - - if(meta > 1 && side == 1) { - if(meta == 2) return 3; - if(meta == 3) return 0; - if(meta == 4) return 1; - if(meta == 5) return 2; - } - - return 0; - } - - @Override + @Override public boolean canItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) { - ForgeDirection orientation = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); - return orientation == dir; + return getInputSide(world, x, y, z) == dir; } @Override diff --git a/src/main/java/com/hbm/blocks/network/CraneExtractor.java b/src/main/java/com/hbm/blocks/network/CraneExtractor.java index 51d754aa4..7b142bb70 100644 --- a/src/main/java/com/hbm/blocks/network/CraneExtractor.java +++ b/src/main/java/com/hbm/blocks/network/CraneExtractor.java @@ -1,16 +1,16 @@ package com.hbm.blocks.network; import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneBase; import com.hbm.tileentity.network.TileEntityCraneExtractor; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class CraneExtractor extends BlockCraneBase { @@ -19,7 +19,7 @@ public class CraneExtractor extends BlockCraneBase { } @Override - public TileEntity createNewTileEntity(World world, int meta) { + public TileEntityCraneBase createNewTileEntity(World world, int meta) { return new TileEntityCraneExtractor(); } @@ -30,19 +30,53 @@ public class CraneExtractor extends BlockCraneBase { this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_top"); this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_down"); this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_up"); + this.iconDirectionalTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_top_right"); + this.iconDirectionalTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_top_left"); + this.iconDirectionalSideLeftTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_up_turn_left"); + this.iconDirectionalSideRightTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_up_turn_right"); + this.iconDirectionalSideLeftTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_down_turn_left"); + this.iconDirectionalSideRightTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_down_turn_right"); + this.iconDirectionalSideUpTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_left_turn_up"); + this.iconDirectionalSideUpTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_right_turn_up"); + this.iconDirectionalSideDownTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_left_turn_down"); + this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_out_side_right_turn_down"); + } + + @Override + protected boolean hasReversedIO() { + return true; } @Override public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { int meta = world.getBlockMetadata(x, y, z); - + if(meta > 1 && side == 1) { + // ok so i've been sitting around for 4-5 hours trying to come up with a + // more elegant way to implement this and i have seriously no clue what + // the guys at mojang did, but the uv rotation makes absolutely no sense + // it's 2:30 am, please just accept this + // - martin + ForgeDirection leftHandDirection = getOutputSide(world, x, y, z).getRotation(getInputSide(world, x, y, z)); + if (leftHandDirection == ForgeDirection.UP) { + if (meta == 2) return 2; + if (meta == 3) return 1; + if (meta == 4) return 3; + if (meta == 5) return 0; + } + if (leftHandDirection == ForgeDirection.DOWN) { + if (meta == 2) return 1; + if (meta == 3) return 2; + if (meta == 4) return 0; + if (meta == 5) return 3; + } + if(meta == 2) return 0; if(meta == 3) return 3; if(meta == 4) return 2; if(meta == 5) return 1; } - + return 0; } diff --git a/src/main/java/com/hbm/blocks/network/CraneGrabber.java b/src/main/java/com/hbm/blocks/network/CraneGrabber.java index 5c0ee4bb1..fcda1d05a 100644 --- a/src/main/java/com/hbm/blocks/network/CraneGrabber.java +++ b/src/main/java/com/hbm/blocks/network/CraneGrabber.java @@ -1,15 +1,13 @@ package com.hbm.blocks.network; import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneBase; import com.hbm.tileentity.network.TileEntityCraneGrabber; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class CraneGrabber extends BlockCraneBase { @@ -19,7 +17,7 @@ public class CraneGrabber extends BlockCraneBase { } @Override - public TileEntity createNewTileEntity(World world, int meta) { + public TileEntityCraneBase createNewTileEntity(World world, int meta) { return new TileEntityCraneGrabber(); } @@ -27,28 +25,24 @@ public class CraneGrabber extends BlockCraneBase { @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); + this.iconIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_pull"); + this.iconSideIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_pull"); this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_top"); this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_up"); this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_down"); - this.iconOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_pull"); - this.iconSideOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_pull"); + this.iconDirectionalTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_top_left"); + this.iconDirectionalTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_top_right"); + this.iconDirectionalSideLeftTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_left_turn_up"); + this.iconDirectionalSideRightTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_right_turn_up"); + this.iconDirectionalSideLeftTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_left_turn_down"); + this.iconDirectionalSideRightTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_right_turn_down"); + this.iconDirectionalSideUpTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_up_turn_left"); + this.iconDirectionalSideUpTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_up_turn_right"); + this.iconDirectionalSideDownTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_down_turn_left"); + this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_down_turn_right"); } - @Override - public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { - int meta = world.getBlockMetadata(x, y, z); - - if(meta > 1 && side == 1) { - if(meta == 2) return 3; - if(meta == 3) return 0; - if(meta == 4) return 1; - if(meta == 5) return 2; - } - - return 0; - } - - @Override + @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { this.dropContents(world, x, y, z, block, meta, 9, 11); super.breakBlock(world, x, y, z, block, meta); diff --git a/src/main/java/com/hbm/blocks/network/CraneInserter.java b/src/main/java/com/hbm/blocks/network/CraneInserter.java index cf3917af4..97347dc3c 100644 --- a/src/main/java/com/hbm/blocks/network/CraneInserter.java +++ b/src/main/java/com/hbm/blocks/network/CraneInserter.java @@ -1,11 +1,11 @@ package com.hbm.blocks.network; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.network.TileEntityCraneInserter; - import api.hbm.conveyor.IConveyorItem; import api.hbm.conveyor.IConveyorPackage; import api.hbm.conveyor.IEnterableBlock; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneBase; +import com.hbm.tileentity.network.TileEntityCraneInserter; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -18,7 +18,6 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -29,7 +28,7 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { } @Override - public TileEntity createNewTileEntity(World world, int meta) { + public TileEntityCraneBase createNewTileEntity(World world, int meta) { return new TileEntityCraneInserter(); } @@ -40,6 +39,16 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_top"); this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_up"); this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_down"); + this.iconDirectionalTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_top_left"); + this.iconDirectionalTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_top_right"); + this.iconDirectionalSideLeftTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_left_turn_up"); + this.iconDirectionalSideRightTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_right_turn_up"); + this.iconDirectionalSideLeftTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_left_turn_down"); + this.iconDirectionalSideRightTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_right_turn_down"); + this.iconDirectionalSideUpTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_up_turn_left"); + this.iconDirectionalSideUpTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_up_turn_right"); + this.iconDirectionalSideDownTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_down_turn_left"); + this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_in_side_down_turn_right"); } @Override @@ -50,7 +59,8 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { @Override public void onItemEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorItem entity) { - TileEntity te = world.getTileEntity(x - dir.offsetX, y - dir.offsetY, z - dir.offsetZ); + ForgeDirection outputDirection = getOutputSide(world, x, y, z); + TileEntity te = world.getTileEntity(x + outputDirection.offsetX, y + outputDirection.offsetY, z + outputDirection.offsetZ); if(entity == null || entity.getItemStack() == null || entity.getItemStack().stackSize <= 0) { return; @@ -62,19 +72,19 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { if(te instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) te; - access = masquerade(sided, dir.ordinal()); + access = masquerade(sided, outputDirection.getOpposite().ordinal()); } if(te instanceof IInventory) { IInventory inv = (IInventory) te; - addToInventory(inv, access, toAdd, dir.ordinal()); + addToInventory(inv, access, toAdd, outputDirection.getOpposite().ordinal()); } - if(toAdd != null && toAdd.stackSize > 0) { - addToInventory((TileEntityCraneInserter) world.getTileEntity(x, y, z), null, toAdd, dir.ordinal()); + if(toAdd.stackSize > 0) { + addToInventory((TileEntityCraneInserter) world.getTileEntity(x, y, z), null, toAdd, outputDirection.getOpposite().ordinal()); } - if(toAdd != null && toAdd.stackSize > 0) { + if(toAdd.stackSize > 0) { EntityItem drop = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, toAdd.copy()); world.spawnEntityInWorld(drop); } @@ -147,21 +157,7 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock { @Override public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { } - @Override - public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { - int meta = world.getBlockMetadata(x, y, z); - - if(meta > 1 && side == 1) { - if(meta == 2) return 3; - if(meta == 3) return 0; - if(meta == 4) return 1; - if(meta == 5) return 2; - } - - return 0; - } - - @Override + @Override public boolean hasComparatorInputOverride() { return true; } diff --git a/src/main/java/com/hbm/blocks/network/CraneUnboxer.java b/src/main/java/com/hbm/blocks/network/CraneUnboxer.java index 558de5654..109be9ac7 100644 --- a/src/main/java/com/hbm/blocks/network/CraneUnboxer.java +++ b/src/main/java/com/hbm/blocks/network/CraneUnboxer.java @@ -1,11 +1,11 @@ package com.hbm.blocks.network; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.network.TileEntityCraneUnboxer; - import api.hbm.conveyor.IConveyorItem; import api.hbm.conveyor.IConveyorPackage; import api.hbm.conveyor.IEnterableBlock; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneBase; +import com.hbm.tileentity.network.TileEntityCraneUnboxer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -14,7 +14,6 @@ import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -26,7 +25,7 @@ public class CraneUnboxer extends BlockCraneBase implements IEnterableBlock { } @Override - public TileEntity createNewTileEntity(World world, int meta) { + public TileEntityCraneBase createNewTileEntity(World world, int meta) { return new TileEntityCraneUnboxer(); } @@ -34,24 +33,58 @@ public class CraneUnboxer extends BlockCraneBase implements IEnterableBlock { @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); - this.iconIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_box"); - this.iconSideIn = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_box"); + this.iconOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_box"); + this.iconSideOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_box"); this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_top"); this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_down"); this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_up"); + this.iconDirectionalTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_top_right"); + this.iconDirectionalTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_top_left"); + this.iconDirectionalSideLeftTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_up_turn_left"); + this.iconDirectionalSideRightTurnUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_up_turn_right"); + this.iconDirectionalSideLeftTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_down_turn_left"); + this.iconDirectionalSideRightTurnDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_down_turn_right"); + this.iconDirectionalSideUpTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_left_turn_up"); + this.iconDirectionalSideUpTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_right_turn_up"); + this.iconDirectionalSideDownTurnLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_left_turn_down"); + this.iconDirectionalSideDownTurnRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_unboxer_side_right_turn_down"); + } + + @Override + protected boolean hasReversedIO() { + return true; } @Override public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { int meta = world.getBlockMetadata(x, y, z); - + if(meta > 1 && side == 1) { + // ok so i've been sitting around for 4-5 hours trying to come up with a + // more elegant way to implement this and i have seriously no clue what + // the guys at mojang did, but the uv rotation makes absolutely no sense + // it's 2:30 am, please just accept this + // - martin + ForgeDirection leftHandDirection = getOutputSide(world, x, y, z).getRotation(getInputSide(world, x, y, z)); + if (leftHandDirection == ForgeDirection.UP) { + if (meta == 2) return 2; + if (meta == 3) return 1; + if (meta == 4) return 3; + if (meta == 5) return 0; + } + if (leftHandDirection == ForgeDirection.DOWN) { + if (meta == 2) return 1; + if (meta == 3) return 2; + if (meta == 4) return 0; + if (meta == 5) return 3; + } + if(meta == 2) return 0; if(meta == 3) return 3; if(meta == 4) return 2; if(meta == 5) return 1; } - + return 0; } @@ -71,15 +104,16 @@ public class CraneUnboxer extends BlockCraneBase implements IEnterableBlock { @Override public boolean canPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { - return true; + return getOutputSide(world, x, y, z) == dir; } @Override public void onPackageEnter(World world, int x, int y, int z, ForgeDirection dir, IConveyorPackage entity) { TileEntityCraneUnboxer unboxer = (TileEntityCraneUnboxer) world.getTileEntity(x, y, z); - + ForgeDirection accessedSide = getOutputSide(world, x, y, z).getOpposite(); + for(ItemStack stack : entity.getItemStacks()) { - ItemStack remainder = CraneInserter.addToInventory(unboxer, unboxer.getAccessibleSlotsFromSide(dir.ordinal()), stack, dir.ordinal()); + ItemStack remainder = CraneInserter.addToInventory(unboxer, unboxer.getAccessibleSlotsFromSide(accessedSide.ordinal()), stack, accessedSide.ordinal()); if(remainder != null && remainder.stackSize > 0) { EntityItem drop = new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, remainder.copy()); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java new file mode 100644 index 000000000..28daa73f7 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBase.java @@ -0,0 +1,94 @@ +package com.hbm.tileentity.network; + +import com.hbm.tileentity.TileEntityMachineBase; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; + +public abstract class TileEntityCraneBase extends TileEntityMachineBase { + public TileEntityCraneBase(int scount) { + super(scount); + } + + // extension to the meta system + // for compatibility purposes, normal meta values are still used by default + private ForgeDirection outputOverride = ForgeDirection.UNKNOWN; + + // for extra stability in case the screwdriver action doesn't get synced to other clients + @SideOnly(Side.CLIENT) + private ForgeDirection cachedOutputOverride = ForgeDirection.UNKNOWN; + + @Override + public void updateEntity() { + if (hasWorldObj() && worldObj.isRemote) { + if (cachedOutputOverride != outputOverride) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + cachedOutputOverride = outputOverride; + } + } + } + + public ForgeDirection getInputSide() { + return ForgeDirection.getOrientation(getBlockMetadata()); + } + + public ForgeDirection getOutputSide() { + ForgeDirection override = getOutputOverride(); + return override != ForgeDirection.UNKNOWN ? override : ForgeDirection.getOrientation(getBlockMetadata()).getOpposite(); + } + + public ForgeDirection getOutputOverride() { + return outputOverride; + } + + public ForgeDirection cycleOutputOverride() { + do { + outputOverride = ForgeDirection.getOrientation(Math.floorMod(outputOverride.ordinal() - 1, 7)); + } while (outputOverride.ordinal() == getBlockMetadata()); + + onBlockChanged(); + return outputOverride; + } + + public void ensureOutputOverrideValid() { + if (outputOverride.ordinal() == getBlockMetadata()) + cycleOutputOverride(); + } + + protected void onBlockChanged() { + if (!hasWorldObj()) return; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + worldObj.notifyBlockChange(xCoord, yCoord, zCoord, getBlockType()); + markDirty(); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + if (nbt.hasKey("CraneOutputOverride", Constants.NBT.TAG_BYTE)) + outputOverride = ForgeDirection.getOrientation(nbt.getByte("CraneOutputOverride")); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setByte("CraneOutputOverride", (byte) outputOverride.ordinal()); + } +} diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java index bca0a3f22..2996d102a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneBoxer.java @@ -1,13 +1,11 @@ package com.hbm.tileentity.network; +import api.hbm.conveyor.IConveyorBelt; import com.hbm.entity.item.EntityMovingPackage; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerCraneBoxer; import com.hbm.inventory.gui.GUICraneBoxer; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; - -import api.hbm.conveyor.IConveyorBelt; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -20,7 +18,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneBoxer extends TileEntityMachineBase implements IGUIProvider, IControlReceiver { +public class TileEntityCraneBoxer extends TileEntityCraneBase implements IGUIProvider, IControlReceiver { public byte mode = 0; public static final byte MODE_4 = 0; @@ -42,15 +40,15 @@ public class TileEntityCraneBoxer extends TileEntityMachineBase implements IGUIP @Override public void updateEntity() { - + super.updateEntity(); if(!worldObj.isRemote) { boolean redstone = worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord); if(mode == MODE_REDSTONE && redstone && !lastRedstone) { - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite(); - Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + ForgeDirection outputSide = getOutputSide(); + Block b = worldObj.getBlock(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); IConveyorBelt belt = null; if(b instanceof IConveyorBelt) { @@ -58,7 +56,7 @@ public class TileEntityCraneBoxer extends TileEntityMachineBase implements IGUIP } int pack = 0; - + for(int i = 0; i < slots.length; i++) { if(slots[i] != null) { pack++; @@ -79,8 +77,8 @@ public class TileEntityCraneBoxer extends TileEntityMachineBase implements IGUIP } EntityMovingPackage moving = new EntityMovingPackage(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStacks(box); worldObj.spawnEntityInWorld(moving); @@ -116,8 +114,8 @@ public class TileEntityCraneBoxer extends TileEntityMachineBase implements IGUIP } } - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()).getOpposite(); - Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + ForgeDirection outputSide = getOutputSide(); + Block b = worldObj.getBlock(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); IConveyorBelt belt = null; if(b instanceof IConveyorBelt) { @@ -138,8 +136,8 @@ public class TileEntityCraneBoxer extends TileEntityMachineBase implements IGUIP } EntityMovingPackage moving = new EntityMovingPackage(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStacks(box); worldObj.spawnEntityInWorld(moving); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java index 1da88ce44..d947f9922 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneExtractor.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.network; +import api.hbm.conveyor.IConveyorBelt; import com.hbm.entity.item.EntityMovingItem; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerCraneExtractor; @@ -7,9 +8,6 @@ import com.hbm.inventory.gui.GUICraneExtractor; import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; - -import api.hbm.conveyor.IConveyorBelt; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -26,7 +24,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneExtractor extends TileEntityMachineBase implements IGUIProvider, IControlReceiver { +public class TileEntityCraneExtractor extends TileEntityCraneBase implements IGUIProvider, IControlReceiver { public boolean isWhitelist = false; public ModulePatternMatcher matcher; @@ -55,7 +53,7 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I @Override public void updateEntity() { - + super.updateEntity(); if(!worldObj.isRemote) { int delay = 20; @@ -78,10 +76,11 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I case 2: amount = 64; break; } } - - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); - TileEntity te = worldObj.getTileEntity(xCoord - dir.offsetX, yCoord - dir.offsetY, zCoord - dir.offsetZ); - Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + + ForgeDirection inputSide = getOutputSide(); // note the switcheroo! + ForgeDirection outputSide = getInputSide(); + TileEntity te = worldObj.getTileEntity(xCoord + inputSide.offsetX, yCoord + inputSide.offsetY, zCoord + inputSide.offsetZ); + Block b = worldObj.getBlock(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); int[] access = null; ISidedInventory sided = null; @@ -89,7 +88,7 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I if(te instanceof ISidedInventory) { sided = (ISidedInventory) te; //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); - access = masquerade(sided, dir.ordinal()); + access = masquerade(sided, inputSide.getOpposite().ordinal()); } boolean hasSent = false; @@ -108,7 +107,7 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I int index = access == null ? i : access[i]; ItemStack stack = inv.getStackInSlot(index); - if(stack != null && (sided == null || sided.canExtractItem(index, stack, dir.ordinal()))){ + if(stack != null && (sided == null || sided.canExtractItem(index, stack, inputSide.getOpposite().ordinal()))){ boolean match = this.matchesFilter(stack); @@ -119,8 +118,8 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I stack.stackSize = toSend; EntityMovingItem moving = new EntityMovingItem(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStack(stack); worldObj.spawnEntityInWorld(moving); @@ -144,8 +143,8 @@ public class TileEntityCraneExtractor extends TileEntityMachineBase implements I stack.stackSize = toSend; EntityMovingItem moving = new EntityMovingItem(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStack(stack); worldObj.spawnEntityInWorld(moving); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java index ba50abcea..e6dc6b48b 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -1,7 +1,5 @@ package com.hbm.tileentity.network; -import java.util.List; - import com.hbm.blocks.ModBlocks; import com.hbm.blocks.network.CraneInserter; import com.hbm.entity.item.EntityMovingItem; @@ -11,8 +9,6 @@ import com.hbm.inventory.gui.GUICraneGrabber; import com.hbm.items.ModItems; import com.hbm.module.ModulePatternMatcher; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -29,7 +25,9 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneGrabber extends TileEntityMachineBase implements IGUIProvider, IControlReceiver { +import java.util.List; + +public class TileEntityCraneGrabber extends TileEntityCraneBase implements IGUIProvider, IControlReceiver { public boolean isWhitelist = false; public ModulePatternMatcher matcher; @@ -50,7 +48,7 @@ public class TileEntityCraneGrabber extends TileEntityMachineBase implements IGU @Override public void updateEntity() { - + super.updateEntity(); if(!worldObj.isRemote) { int delay = 20; @@ -74,15 +72,16 @@ public class TileEntityCraneGrabber extends TileEntityMachineBase implements IGU } } - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); - TileEntity te = worldObj.getTileEntity(xCoord - dir.offsetX, yCoord - dir.offsetY, zCoord - dir.offsetZ); + ForgeDirection inputSide = getInputSide(); + ForgeDirection outputSide = getOutputSide(); + TileEntity te = worldObj.getTileEntity(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); int[] access = null; ISidedInventory sided = null; if(te instanceof ISidedInventory) { sided = (ISidedInventory) te; - access = CraneInserter.masquerade(sided, dir.ordinal()); + access = CraneInserter.masquerade(sided, outputSide.getOpposite().ordinal()); } if(te instanceof IInventory) { @@ -95,14 +94,14 @@ public class TileEntityCraneGrabber extends TileEntityMachineBase implements IGU */ double reach = 1D; if(this.getBlockMetadata() > 1) { //ignore if pointing up or down - Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + Block b = worldObj.getBlock(xCoord + inputSide.offsetX, yCoord + inputSide.offsetY, zCoord + inputSide.offsetZ); if(b == ModBlocks.conveyor_double) reach = 0.5D; if(b == ModBlocks.conveyor_triple) reach = 0.33D; } - double x = xCoord + dir.offsetX * reach; - double y = yCoord + dir.offsetY * reach; - double z = zCoord + dir.offsetZ * reach; + double x = xCoord + inputSide.offsetX * reach; + double y = yCoord + inputSide.offsetY * reach; + double z = zCoord + inputSide.offsetZ * reach; List items = worldObj.getEntitiesWithinAABB(EntityMovingItem.class, AxisAlignedBB.getBoundingBox(x + 0.1875D, y + 0.1875D, z + 0.1875D, x + 0.8125D, y + 0.8125D, z + 0.8125D)); for(EntityMovingItem item : items) { @@ -113,7 +112,7 @@ public class TileEntityCraneGrabber extends TileEntityMachineBase implements IGU ItemStack copy = stack.copy(); int toAdd = Math.min(stack.stackSize, amount); copy.stackSize = toAdd; - ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, copy, dir.ordinal()); + ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, copy, outputSide.getOpposite().ordinal()); int didAdd = toAdd - (ret != null ? ret.stackSize : 0); stack.stackSize -= didAdd; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java index 205fe3115..9de4fb7fc 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneInserter.java @@ -4,8 +4,6 @@ import com.hbm.blocks.network.CraneInserter; import com.hbm.inventory.container.ContainerCraneInserter; import com.hbm.inventory.gui.GUICraneInserter; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; - import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; @@ -18,7 +16,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneInserter extends TileEntityMachineBase implements IGUIProvider { +public class TileEntityCraneInserter extends TileEntityCraneBase implements IGUIProvider { public static final int[] access = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; @@ -33,18 +31,18 @@ public class TileEntityCraneInserter extends TileEntityMachineBase implements IG @Override public void updateEntity() { - + super.updateEntity(); if(!worldObj.isRemote) { - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); - TileEntity te = worldObj.getTileEntity(xCoord - dir.offsetX, yCoord - dir.offsetY, zCoord - dir.offsetZ); + ForgeDirection outputSide = getOutputSide(); + TileEntity te = worldObj.getTileEntity(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); int[] access = null; if(te instanceof ISidedInventory) { ISidedInventory sided = (ISidedInventory) te; //access = sided.getAccessibleSlotsFromSide(dir.ordinal()); - access = CraneInserter.masquerade(sided, dir.ordinal()); + access = CraneInserter.masquerade(sided, outputSide.getOpposite().ordinal()); } if(te instanceof IInventory) { @@ -53,7 +51,7 @@ public class TileEntityCraneInserter extends TileEntityMachineBase implements IG ItemStack stack = slots[i]; if(stack != null) { - ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), dir.ordinal()); + ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal()); if(ret == null || ret.stackSize != stack.stackSize) { slots[i] = ret; @@ -72,7 +70,7 @@ public class TileEntityCraneInserter extends TileEntityMachineBase implements IG if(stack != null) { stack = stack.copy(); stack.stackSize = 1; - ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), dir.ordinal()); + ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal()); if(ret == null || ret.stackSize != stack.stackSize) { this.decrStackSize(i, 1); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java index 3cd1aa7da..31dd46c1e 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneUnboxer.java @@ -1,13 +1,11 @@ package com.hbm.tileentity.network; +import api.hbm.conveyor.IConveyorBelt; import com.hbm.entity.item.EntityMovingItem; import com.hbm.inventory.container.ContainerCraneUnboxer; import com.hbm.inventory.gui.GUICraneUnboxer; import com.hbm.items.ModItems; import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.TileEntityMachineBase; - -import api.hbm.conveyor.IConveyorBelt; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -19,7 +17,7 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityCraneUnboxer extends TileEntityMachineBase implements IGUIProvider { +public class TileEntityCraneUnboxer extends TileEntityCraneBase implements IGUIProvider { public TileEntityCraneUnboxer() { super(23); @@ -32,7 +30,7 @@ public class TileEntityCraneUnboxer extends TileEntityMachineBase implements IGU @Override public void updateEntity() { - + super.updateEntity(); if(!worldObj.isRemote) { int delay = 20; @@ -65,8 +63,8 @@ public class TileEntityCraneUnboxer extends TileEntityMachineBase implements IGU } } - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); - Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + ForgeDirection outputSide = getInputSide(); // note the switcheroo! + Block b = worldObj.getBlock(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ); if(b instanceof IConveyorBelt) { @@ -82,8 +80,8 @@ public class TileEntityCraneUnboxer extends TileEntityMachineBase implements IGU stack.stackSize = toSend; EntityMovingItem moving = new EntityMovingItem(worldObj); - Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + dir.offsetX * 0.55, yCoord + 0.5 + dir.offsetY * 0.55, zCoord + 0.5 + dir.offsetZ * 0.55); - Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, pos); + Vec3 pos = Vec3.createVectorHelper(xCoord + 0.5 + outputSide.offsetX * 0.55, yCoord + 0.5 + outputSide.offsetY * 0.55, zCoord + 0.5 + outputSide.offsetZ * 0.55); + Vec3 snap = belt.getClosestSnappingPosition(worldObj, xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ, pos); moving.setPosition(snap.xCoord, snap.yCoord, snap.zCoord); moving.setItemStack(stack); worldObj.spawnEntityInWorld(moving); diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_down_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_down_turn_left.png new file mode 100644 index 000000000..5bdc5d132 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_down_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_down_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_down_turn_right.png new file mode 100644 index 000000000..0c3c43bd9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_down_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_left_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_left_turn_down.png new file mode 100644 index 000000000..e2590058d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_left_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_left_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_left_turn_up.png new file mode 100644 index 000000000..3c3f8f469 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_left_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_right_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_right_turn_down.png new file mode 100644 index 000000000..3e47bb1b0 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_right_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_right_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_right_turn_up.png new file mode 100644 index 000000000..7aaa43bc3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_right_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_up_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_up_turn_left.png new file mode 100644 index 000000000..fc5c0762a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_up_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_up_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_up_turn_right.png new file mode 100644 index 000000000..072ada276 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_side_up_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_top_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_top_left.png new file mode 100644 index 000000000..f848301dd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_top_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_boxer_top_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_top_right.png new file mode 100644 index 000000000..05881e595 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_boxer_top_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down_turn_left.png new file mode 100644 index 000000000..03f312b40 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down_turn_right.png new file mode 100644 index 000000000..f1f7fb7d3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_left_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_left_turn_down.png new file mode 100644 index 000000000..c8ed570b8 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_left_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_left_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_left_turn_up.png new file mode 100644 index 000000000..959d1982b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_left_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_right_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_right_turn_down.png new file mode 100644 index 000000000..5345e832c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_right_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_right_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_right_turn_up.png new file mode 100644 index 000000000..e0214f3d4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_right_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up_turn_left.png new file mode 100644 index 000000000..7c0e16cb9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up_turn_right.png new file mode 100644 index 000000000..cda6ec687 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top_left.png new file mode 100644 index 000000000..8877112aa Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top_right.png new file mode 100644 index 000000000..2348ad43b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in.png b/src/main/resources/assets/hbm/textures/blocks/crane_in.png index 8eb25f502..98f5652c1 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/crane_in.png and b/src/main/resources/assets/hbm/textures/blocks/crane_in.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_down_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_down_turn_left.png new file mode 100644 index 000000000..ecbed86c1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_down_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_down_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_down_turn_right.png new file mode 100644 index 000000000..3f29dca63 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_down_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_left_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_left_turn_down.png new file mode 100644 index 000000000..bd2e18f64 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_left_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_left_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_left_turn_up.png new file mode 100644 index 000000000..34acf0577 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_left_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_right_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_right_turn_down.png new file mode 100644 index 000000000..fb2fca3ff Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_right_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_right_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_right_turn_up.png new file mode 100644 index 000000000..059b922fb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_right_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_up_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_up_turn_left.png new file mode 100644 index 000000000..763c68afc Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_up_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_side_up_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_up_turn_right.png new file mode 100644 index 000000000..0d062f8c7 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_side_up_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_top_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_top_left.png new file mode 100644 index 000000000..23721ae91 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_top_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_in_top_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_in_top_right.png new file mode 100644 index 000000000..1f9c63552 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_in_top_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out.png b/src/main/resources/assets/hbm/textures/blocks/crane_out.png index 98f5652c1..8eb25f502 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/crane_out.png and b/src/main/resources/assets/hbm/textures/blocks/crane_out.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_down_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_down_turn_left.png new file mode 100644 index 000000000..760f1c1f3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_down_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_down_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_down_turn_right.png new file mode 100644 index 000000000..e9bd8e352 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_down_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_left_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_left_turn_down.png new file mode 100644 index 000000000..d99bde01f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_left_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_left_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_left_turn_up.png new file mode 100644 index 000000000..7e7dcd0be Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_left_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_right_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_right_turn_down.png new file mode 100644 index 000000000..7ac3cae11 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_right_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_right_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_right_turn_up.png new file mode 100644 index 000000000..ed3d586a8 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_right_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_up_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_up_turn_left.png new file mode 100644 index 000000000..3a5c6636e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_up_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_side_up_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_up_turn_right.png new file mode 100644 index 000000000..18271a72f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_side_up_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_top_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_top_left.png new file mode 100644 index 000000000..d2ffff31e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_top_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_out_top_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_out_top_right.png new file mode 100644 index 000000000..78f357645 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_out_top_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_side_in.png b/src/main/resources/assets/hbm/textures/blocks/crane_side_in.png index ead7f5c56..47f4406f4 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/crane_side_in.png and b/src/main/resources/assets/hbm/textures/blocks/crane_side_in.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_side_out.png b/src/main/resources/assets/hbm/textures/blocks/crane_side_out.png index 47f4406f4..ead7f5c56 100644 Binary files a/src/main/resources/assets/hbm/textures/blocks/crane_side_out.png and b/src/main/resources/assets/hbm/textures/blocks/crane_side_out.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_down_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_down_turn_left.png new file mode 100644 index 000000000..1d6cfc0b0 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_down_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_down_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_down_turn_right.png new file mode 100644 index 000000000..7601fddfc Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_down_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_left_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_left_turn_down.png new file mode 100644 index 000000000..99d98ea56 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_left_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_left_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_left_turn_up.png new file mode 100644 index 000000000..bbf523a73 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_left_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_right_turn_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_right_turn_down.png new file mode 100644 index 000000000..01d6712ed Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_right_turn_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_right_turn_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_right_turn_up.png new file mode 100644 index 000000000..ccc53b86e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_right_turn_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_up_turn_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_up_turn_left.png new file mode 100644 index 000000000..33e53a5e9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_up_turn_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_up_turn_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_up_turn_right.png new file mode 100644 index 000000000..51827914c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_side_up_turn_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_top_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_top_left.png new file mode 100644 index 000000000..4d042062a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_top_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_top_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_top_right.png new file mode 100644 index 000000000..5f1aeb266 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_unboxer_top_right.png differ