assemblyline/src/main/java/assemblyline/common/machine/crane/BlockCraneFrame.java
2023-02-10 17:51:10 +01:00

250 lines
8.4 KiB
Java

package assemblyline.common.machine.crane;
import assemblyline.client.render.BlockRenderingHandler;
import assemblyline.common.block.BlockALMachine;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import universalelectricity.core.UniversalElectricity;
public class BlockCraneFrame extends BlockALMachine {
public BlockCraneFrame() {
super(UniversalElectricity.machine);
this.setBlockName("craneFrame");
this.setBlockBounds(0.25f, 0.25f, 0.25f, 0.75f, 0.75f, 0.75f);
}
@Override
public AxisAlignedBB
getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
TileEntity tE = world.getTileEntity(x, y, z);
if (tE != null && tE instanceof TileEntityCraneRail) {
AxisAlignedBB middle = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.25,
(double) 0.25,
(double) 0.75,
(double) 0.75,
(double) 0.75
);
AxisAlignedBB up = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.75,
(double) 0.25,
(double) 0.75,
(double) 1.0,
(double) 0.75
);
AxisAlignedBB down = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.0,
(double) 0.25,
(double) 0.75,
(double) 0.25,
(double) 0.75
);
AxisAlignedBB left = AxisAlignedBB.getBoundingBox(
(double) 0.0,
(double) 0.25,
(double) 0.25,
(double) 0.25,
(double) 0.75,
(double) 0.75
);
AxisAlignedBB right = AxisAlignedBB.getBoundingBox(
(double) 0.75,
(double) 0.25,
(double) 0.25,
(double) 1.0,
(double) 0.75,
(double) 0.75
);
AxisAlignedBB front = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.25,
(double) 0.0,
(double) 0.75,
(double) 0.75,
(double) 0.25
);
AxisAlignedBB back = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.25,
(double) 0.75,
(double) 0.75,
(double) 0.75,
(double) 1.0
);
boolean connectUp
= CraneHelper.canFrameConnectTo(tE, x, y + 1, z, ForgeDirection.DOWN);
boolean connectDown
= CraneHelper.canFrameConnectTo(tE, x, y - 1, z, ForgeDirection.UP);
boolean connectLeft
= CraneHelper.canFrameConnectTo(tE, x - 1, y, z, ForgeDirection.EAST);
boolean connectRight
= CraneHelper.canFrameConnectTo(tE, x + 1, y, z, ForgeDirection.WEST);
boolean connectFront
= CraneHelper.canFrameConnectTo(tE, x, y, z - 1, ForgeDirection.SOUTH);
boolean connectBack
= CraneHelper.canFrameConnectTo(tE, x, y, z + 1, ForgeDirection.NORTH);
if (connectUp) {
middle.maxY = up.maxY;
}
if (connectDown) {
middle.minY = down.minY;
}
if (connectLeft) {
middle.minX = left.minX;
}
if (connectRight) {
middle.maxX = right.maxX;
}
if (connectFront) {
middle.minZ = front.minZ;
}
if (connectBack) {
middle.maxZ = back.maxZ;
}
this.setBlockBounds(
(float) middle.minX,
(float) middle.minY,
(float) middle.minZ,
(float) middle.maxX,
(float) middle.maxY,
(float) middle.maxZ
);
middle.offset((double) x, (double) y, (double) z);
return middle;
}
return super.getCollisionBoundingBoxFromPool(world, x, y, z);
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
TileEntity tE = world.getTileEntity(x, y, z);
if (tE != null && tE instanceof TileEntityCraneRail) {
AxisAlignedBB middle = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.25,
(double) 0.25,
(double) 0.75,
(double) 0.75,
(double) 0.75
);
AxisAlignedBB up = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.75,
(double) 0.25,
(double) 0.75,
(double) 1.0,
(double) 0.75
);
AxisAlignedBB down = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.0,
(double) 0.25,
(double) 0.75,
(double) 0.25,
(double) 0.75
);
AxisAlignedBB left = AxisAlignedBB.getBoundingBox(
(double) 0.0,
(double) 0.25,
(double) 0.25,
(double) 0.25,
(double) 0.75,
(double) 0.75
);
AxisAlignedBB right = AxisAlignedBB.getBoundingBox(
(double) 0.75,
(double) 0.25,
(double) 0.25,
(double) 1.0,
(double) 0.75,
(double) 0.75
);
AxisAlignedBB front = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.25,
(double) 0.0,
(double) 0.75,
(double) 0.75,
(double) 0.25
);
AxisAlignedBB back = AxisAlignedBB.getBoundingBox(
(double) 0.25,
(double) 0.25,
(double) 0.75,
(double) 0.75,
(double) 0.75,
(double) 1.0
);
boolean connectUp
= CraneHelper.canFrameConnectTo(tE, x, y + 1, z, ForgeDirection.DOWN);
boolean connectDown
= CraneHelper.canFrameConnectTo(tE, x, y - 1, z, ForgeDirection.UP);
boolean connectLeft
= CraneHelper.canFrameConnectTo(tE, x - 1, y, z, ForgeDirection.EAST);
boolean connectRight
= CraneHelper.canFrameConnectTo(tE, x + 1, y, z, ForgeDirection.WEST);
boolean connectFront
= CraneHelper.canFrameConnectTo(tE, x, y, z - 1, ForgeDirection.SOUTH);
boolean connectBack
= CraneHelper.canFrameConnectTo(tE, x, y, z + 1, ForgeDirection.NORTH);
if (connectUp) {
middle.maxY = up.maxY;
}
if (connectDown) {
middle.minY = down.minY;
}
if (connectLeft) {
middle.minX = left.minX;
}
if (connectRight) {
middle.maxX = right.maxX;
}
if (connectFront) {
middle.minZ = front.minZ;
}
if (connectBack) {
middle.maxZ = back.maxZ;
}
this.setBlockBounds(
(float) middle.minX,
(float) middle.minY,
(float) middle.minZ,
(float) middle.maxX,
(float) middle.maxY,
(float) middle.maxZ
);
return;
}
this.setBlockBounds(0.25f, 0.25f, 0.25f, 0.75f, 0.75f, 0.75f);
}
@Override
public TileEntity createNewTileEntity(World world, int metadata) {
return new TileEntityCraneRail();
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
@SideOnly(value = Side.CLIENT)
public int getRenderType() {
return BlockRenderingHandler.BLOCK_RENDER_ID;
}
}