From b36cf4213f2da82b8c3c265a9de7aaccd075cd7f Mon Sep 17 00:00:00 2001 From: George Paton Date: Thu, 19 Sep 2024 14:32:57 +1000 Subject: [PATCH] Horizontal scaffolding --- .../com/hbm/blocks/generic/BlockScaffold.java | 48 +++++++++++-------- .../hbm/render/block/RenderScaffoldBlock.java | 29 ++++++++--- 2 files changed, 52 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/BlockScaffold.java b/src/main/java/com/hbm/blocks/generic/BlockScaffold.java index 64a2eb919..1f34d1d84 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockScaffold.java +++ b/src/main/java/com/hbm/blocks/generic/BlockScaffold.java @@ -16,6 +16,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class BlockScaffold extends BlockMulti { @@ -59,22 +60,34 @@ public class BlockScaffold extends BlockMulti { public IIcon getIcon(int side, int meta) { return this.icons[this.damageDropped(meta)]; } + + @Override + public int onBlockPlaced(World world, int x, int y, int z, int side, float fx, float fy, float fz, int meta) { + return side; + } @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + ForgeDirection placed = ForgeDirection.getOrientation(world.getBlockMetadata(x, y, z)); int meta = stack.getItemDamage(); - - if(i % 2 == 0) { - world.setBlockMetadataWithNotify(x, y, z, meta, 2); + + if(placed == ForgeDirection.UP || placed == ForgeDirection.DOWN) { + int rot = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + if(rot % 2 == 0) { + world.setBlockMetadataWithNotify(x, y, z, meta, 2); + } else { + world.setBlockMetadataWithNotify(x, y, z, meta + 8, 2); + } + } else if(placed == ForgeDirection.NORTH || placed == ForgeDirection.SOUTH) { + world.setBlockMetadataWithNotify(x, y, z, meta + 4, 2); } else { - world.setBlockMetadataWithNotify(x, y, z, meta + 8, 2); + world.setBlockMetadataWithNotify(x, y, z, meta + 12, 2); } } @Override public int damageDropped(int meta) { - return rectify(meta) & 7; + return rectify(meta); } @Override @@ -83,27 +96,24 @@ public class BlockScaffold extends BlockMulti { } @Override - public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) { - int te = p_149719_1_.getBlockMetadata(p_149719_2_, p_149719_3_, p_149719_4_); + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); float f = 0.0625F; - if((te & 8) != 0) + if(meta >= 12) { + this.setBlockBounds(0.0F, 2 * f, 0.0F, 1.0F, 14 * f, 1.0F); + } else if(meta >= 8) { this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - else + } else if(meta >= 4) { + this.setBlockBounds(0.0F, 2 * f, 0.0F, 1.0F, 14 * f, 1.0F); + } else { this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); + } } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - - int te = world.getBlockMetadata(x, y, z); - float f = 0.0625F; - - if((te & 8) != 0) - this.setBlockBounds(2 * f, 0.0F, 0.0F, 14 * f, 1.0F, 1.0F); - else - this.setBlockBounds(0.0F, 0.0F, 2 * f, 1.0F, 1.0F, 14 * f); - + setBlockBoundsBasedOnState(world, x, y, z); return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); } } diff --git a/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java b/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java index 69be9500e..0298b24ad 100644 --- a/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java +++ b/src/main/java/com/hbm/render/block/RenderScaffoldBlock.java @@ -49,14 +49,31 @@ public class RenderScaffoldBlock implements ISimpleBlockRenderingHandler { iicon = renderer.overrideBlockTexture; } - float rotation = (float) -Math.PI; + float ox = x + 0.5F; + float oy = y; + float oz = z + 0.5F; - if((world.getBlockMetadata(x, y, z) & 8) == 0) - rotation = -90F / 180F * (float) Math.PI; + float rotation = (float) Math.PI * -0.5F; + float pitch = 0; - tessellator.addTranslation(x + 0.5F, y, z + 0.5F); - ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.scaffold, iicon, tessellator, rotation, true); - tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + int meta = world.getBlockMetadata(x, y, z); + + if(meta >= 12) { + pitch = (float) Math.PI * 0.5F; + rotation = (float) -Math.PI; + ox = x + 1.0F; + oy = y + 0.5F; + } else if(meta >= 8) { + rotation = (float) -Math.PI; + } else if(meta >= 4) { + pitch = (float) Math.PI * 0.5F; + oy = y + 0.5F; + oz = z; + } + + tessellator.addTranslation(ox, oy, oz); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.scaffold, iicon, tessellator, rotation, pitch, true); + tessellator.addTranslation(-ox, -oy, -oz); return true; }