Raytrace check and proper collision boxes.
This commit is contained in:
parent
17e5e266cf
commit
5d762c6f6d
1 changed files with 47 additions and 1 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue