From 5d762c6f6d1a208acfebb4f85a9af8fc877ff2b4 Mon Sep 17 00:00:00 2001 From: Anton Date: Sun, 6 Apr 2014 16:59:11 +0300 Subject: [PATCH] Raytrace check and proper collision boxes. --- common/buildcraft/energy/BlockEngine.java | 48 ++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/common/buildcraft/energy/BlockEngine.java b/common/buildcraft/energy/BlockEngine.java index b4d784ae..08926689 100644 --- a/common/buildcraft/energy/BlockEngine.java +++ b/common/buildcraft/energy/BlockEngine.java @@ -28,10 +28,23 @@ import buildcraft.core.BlockBuildCraft; import buildcraft.core.CreativeTabBuildCraft; import buildcraft.core.IItemPipe; import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import cpw.mods.fml.relauncher.SideOnly;import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; + +import static net.minecraft.util.AxisAlignedBB.getBoundingBox; public class BlockEngine extends BlockBuildCraft { + public static final AxisAlignedBB[][] boxes = { + {getBoundingBox(0.0, 0.5, 0.0, 1.0, 1.0, 1.0), getBoundingBox(0.25, 0.0, 0.25, 0.75, 0.5, 0.75)},// -Y + {getBoundingBox(0.0, 0.0, 0.0, 1.0, 0.5, 1.0), getBoundingBox(0.25, 0.5, 0.25, 0.75, 1.0, 0.75)},// +Y + {getBoundingBox(0.0, 0.0, 0.5, 1.0, 1.0, 1.0), getBoundingBox(0.25, 0.25, 0.0, 0.75, 0.75, 0.5)},// -Z + {getBoundingBox(0.0, 0.0, 0.0, 1.0, 1.0, 0.5), getBoundingBox(0.25, 0.25, 0.5, 0.75, 0.75, 1.0)},// +Z + {getBoundingBox(0.5, 0.0, 0.0, 1.0, 1.0, 1.0), getBoundingBox(0.0, 0.25, 0.25, 0.5, 0.75, 0.75)},// -X + {getBoundingBox(0.0, 0.0, 0.0, 0.5, 1.0, 1.0), getBoundingBox(0.5, 0.25, 0.25, 1.0, 0.75, 0.75)} // +X + }; + private static IIcon woodTexture; private static IIcon stoneTexture; private static IIcon ironTexture; @@ -121,6 +134,39 @@ public class BlockEngine extends BlockBuildCraft { return false; } + @Override + public void addCollisionBoxesToList(World wrd, int x, int y, int z, AxisAlignedBB full, List list, Entity ent) { + TileEntity tile = wrd.getTileEntity(x, y, z); + if (tile instanceof TileEngine){ + AxisAlignedBB[] aabbs = boxes[((TileEngine)tile).orientation.ordinal()]; + for (AxisAlignedBB aabb : aabbs) { + list.add(aabb); + } + } else { + super.addCollisionBoxesToList(wrd, x, y, z, full, list, ent); + } + } + + @Override + public MovingObjectPosition collisionRayTrace(World wrd, int x, int y, int z, Vec3 origin, Vec3 direction) { + TileEntity tile = wrd.getTileEntity(x, y, z); + if (tile instanceof TileEngine){ + AxisAlignedBB[] aabbs = boxes[((TileEngine)tile).orientation.ordinal()]; + for(AxisAlignedBB aabb : aabbs){ + MovingObjectPosition mop = aabb.getOffsetBoundingBox(x, y, z).calculateIntercept(origin, direction); + if(mop != null){ + mop.blockX = x; + mop.blockY = y; + mop.blockZ = z; + return mop; + } + } + return null; + } else { + return super.collisionRayTrace(wrd, x, y, z, origin, direction); + } + } + @Override public void onPostBlockPlaced(World world, int x, int y, int z, int par5) { TileEngine tile = (TileEngine) world.getTileEntity(x, y, z);