Raytrace check and proper collision boxes.

This commit is contained in:
Anton 2014-04-06 16:59:11 +03:00
parent 17e5e266cf
commit 5d762c6f6d

View file

@ -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);