258 lines
12 KiB
Java
258 lines
12 KiB
Java
|
package assemblyline.common.machine.belt;
|
||
|
|
||
|
import assemblyline.client.render.BlockRenderingHandler;
|
||
|
import assemblyline.common.TabAssemblyLine;
|
||
|
import assemblyline.common.block.BlockALMachine;
|
||
|
import cpw.mods.fml.relauncher.Side;
|
||
|
import cpw.mods.fml.relauncher.SideOnly;
|
||
|
import java.util.List;
|
||
|
import net.minecraft.entity.Entity;
|
||
|
import net.minecraft.entity.EntityLiving;
|
||
|
import net.minecraft.entity.EntityLivingBase;
|
||
|
import net.minecraft.entity.item.EntityItem;
|
||
|
import net.minecraft.entity.player.EntityPlayer;
|
||
|
import net.minecraft.item.ItemStack;
|
||
|
import net.minecraft.tileentity.TileEntity;
|
||
|
import net.minecraft.util.AxisAlignedBB;
|
||
|
import net.minecraft.util.MathHelper;
|
||
|
import net.minecraft.world.IBlockAccess;
|
||
|
import net.minecraft.world.World;
|
||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||
|
import universalelectricity.core.UniversalElectricity;
|
||
|
|
||
|
public class BlockConveyorBelt
|
||
|
extends BlockALMachine {
|
||
|
public BlockConveyorBelt() {
|
||
|
super(UniversalElectricity.machine);
|
||
|
this.setBlockName("conveyorBelt");
|
||
|
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.3f, 1.0f);
|
||
|
this.setCreativeTab(TabAssemblyLine.INSTANCE);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
|
||
|
if (world.getTileEntity(x, y, z) instanceof TileEntityConveyorBelt) {
|
||
|
TileEntityConveyorBelt tileEntity = (TileEntityConveyorBelt)world.getTileEntity(x, y, z);
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.UP || tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.DOWN) {
|
||
|
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.96f, 1.0f);
|
||
|
return;
|
||
|
}
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.TOP) {
|
||
|
this.setBlockBounds(0.0f, 0.68f, 0.0f, 1.0f, 0.96f, 1.0f);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 0.3f, 1.0f);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
|
||
|
TileEntity t = world.getTileEntity(x, y, z);
|
||
|
if (t != null && t instanceof TileEntityConveyorBelt) {
|
||
|
TileEntityConveyorBelt tileEntity = (TileEntityConveyorBelt)t;
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.UP || tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.DOWN) {
|
||
|
return AxisAlignedBB.getBoundingBox((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 1.0, (double)y + 1.0, (double)z + 1.0);
|
||
|
}
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.TOP) {
|
||
|
return AxisAlignedBB.getBoundingBox((double)x + this.minX, (double)y + (double)0.68f, (double)z + this.minZ, (double)x + this.maxX, (double)y + (double)0.98f, (double)z + this.maxZ);
|
||
|
}
|
||
|
}
|
||
|
return AxisAlignedBB.getBoundingBox((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity) {
|
||
|
AxisAlignedBB newBounds;
|
||
|
TileEntity t = world.getTileEntity(x, y, z);
|
||
|
if (t != null && t instanceof TileEntityConveyorBelt) {
|
||
|
TileEntityConveyorBelt tileEntity = (TileEntityConveyorBelt)t;
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.UP || tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.DOWN) {
|
||
|
AxisAlignedBB boundBottom = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)z, (double)(x + 1), (double)y + 0.3, (double)(z + 1));
|
||
|
AxisAlignedBB boundTop = null;
|
||
|
ForgeDirection direction = tileEntity.getDirection();
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.UP) {
|
||
|
if (direction.offsetX > 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)((float)x + (float)direction.offsetX / 2.0f), (double)y, (double)z, (double)(x + 1), (double)y + 0.8, (double)(z + 1));
|
||
|
} else if (direction.offsetX < 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)z, (double)((float)x + (float)direction.offsetX / -2.0f), (double)y + 0.8, (double)(z + 1));
|
||
|
} else if (direction.offsetZ > 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)((float)z + (float)direction.offsetZ / 2.0f), (double)(x + 1), (double)y + 0.8, (double)(z + 1));
|
||
|
} else if (direction.offsetZ < 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)z, (double)(x + 1), (double)y + 0.8, (double)((float)z + (float)direction.offsetZ / -2.0f));
|
||
|
}
|
||
|
} else if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.DOWN) {
|
||
|
if (direction.offsetX > 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)z, (double)((float)x + (float)direction.offsetX / 2.0f), (double)y + 0.8, (double)(z + 1));
|
||
|
} else if (direction.offsetX < 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)((float)x + (float)direction.offsetX / -2.0f), (double)y, (double)z, (double)(x + 1), (double)y + 0.8, (double)(z + 1));
|
||
|
} else if (direction.offsetZ > 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)z, (double)(x + 1), (double)y + 0.8, (double)((float)z + (float)direction.offsetZ / 2.0f));
|
||
|
} else if (direction.offsetZ < 0) {
|
||
|
boundTop = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)((float)z + (float)direction.offsetZ / -2.0f), (double)(x + 1), (double)y + 0.8, (double)(z + 1));
|
||
|
}
|
||
|
}
|
||
|
if (par5AxisAlignedBB.intersectsWith(boundBottom)) {
|
||
|
par6List.add(boundBottom);
|
||
|
}
|
||
|
if (boundTop != null && par5AxisAlignedBB.intersectsWith(boundTop)) {
|
||
|
par6List.add(boundTop);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
if (tileEntity.getSlant() == TileEntityConveyorBelt.SlantType.TOP) {
|
||
|
AxisAlignedBB newBounds2 = AxisAlignedBB.getBoundingBox((double)x, (double)y + 0.68, (double)z, (double)(x + 1), (double)y + 0.98, (double)(z + 1));
|
||
|
if (newBounds2 != null && par5AxisAlignedBB.intersectsWith(newBounds2)) {
|
||
|
par6List.add(newBounds2);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if ((newBounds = AxisAlignedBB.getBoundingBox((double)x, (double)y, (double)z, (double)(x + 1), (double)y + 0.3, (double)(z + 1))) != null && par5AxisAlignedBB.intersectsWith(newBounds)) {
|
||
|
par6List.add(newBounds);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase par5EntityLiving, ItemStack stack) {
|
||
|
int angle = MathHelper.floor_double((double)((double)(par5EntityLiving.rotationYaw * 4.0f / 360.0f) + 0.5)) & 3;
|
||
|
int change = 2;
|
||
|
switch (angle) {
|
||
|
case 0: {
|
||
|
change = 3;
|
||
|
break;
|
||
|
}
|
||
|
case 1: {
|
||
|
change = 4;
|
||
|
break;
|
||
|
}
|
||
|
case 2: {
|
||
|
change = 2;
|
||
|
break;
|
||
|
}
|
||
|
case 3: {
|
||
|
change = 5;
|
||
|
}
|
||
|
}
|
||
|
world.setBlockMetadataWithNotify(x, y, z, change, 3);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean onUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) {
|
||
|
int original = world.getBlockMetadata(x, y, z);
|
||
|
int change = 2;
|
||
|
switch (original) {
|
||
|
case 2: {
|
||
|
change = 4;
|
||
|
break;
|
||
|
}
|
||
|
case 3: {
|
||
|
change = 5;
|
||
|
break;
|
||
|
}
|
||
|
case 4: {
|
||
|
change = 3;
|
||
|
break;
|
||
|
}
|
||
|
case 5: {
|
||
|
change = 2;
|
||
|
}
|
||
|
}
|
||
|
world.setBlockMetadataWithNotify(x, y, z, change, 3);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean onSneakUseWrench(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) {
|
||
|
TileEntityConveyorBelt tileEntity = (TileEntityConveyorBelt)world.getTileEntity(x, y, z);
|
||
|
int slantOrdinal = tileEntity.getSlant().ordinal() + 1;
|
||
|
if (slantOrdinal >= TileEntityConveyorBelt.SlantType.values().length) {
|
||
|
slantOrdinal = 0;
|
||
|
}
|
||
|
tileEntity.setSlant(TileEntityConveyorBelt.SlantType.values()[slantOrdinal]);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
|
||
|
TileEntityConveyorBelt tileEntity = (TileEntityConveyorBelt)world.getTileEntity(x, y, z);
|
||
|
tileEntity.updatePowerTransferRange();
|
||
|
if (tileEntity.IgnoreList.contains((Object)entity)) {
|
||
|
return;
|
||
|
}
|
||
|
if (tileEntity.isRunning() && !world.isBlockIndirectlyGettingPowered(x, y, z)) {
|
||
|
tileEntity.getClass();
|
||
|
float acceleration = 0.01f;
|
||
|
tileEntity.getClass();
|
||
|
float maxSpeed = 0.1f;
|
||
|
TileEntityConveyorBelt.SlantType slantType = tileEntity.getSlant();
|
||
|
ForgeDirection direction = tileEntity.getDirection();
|
||
|
if (entity instanceof EntityLiving) {
|
||
|
acceleration *= 5.0f;
|
||
|
maxSpeed *= 10.0f;
|
||
|
}
|
||
|
entity.addVelocity((double)((float)direction.offsetX * acceleration), 0.0, (double)((float)direction.offsetZ * acceleration));
|
||
|
if (direction.offsetX != 0 && Math.abs(entity.motionX) > (double)maxSpeed) {
|
||
|
entity.motionX = (float)direction.offsetX * maxSpeed;
|
||
|
entity.motionZ = 0.0;
|
||
|
}
|
||
|
if (direction.offsetZ != 0 && Math.abs(entity.motionZ) > (double)maxSpeed) {
|
||
|
entity.motionZ = (float)direction.offsetZ * maxSpeed;
|
||
|
entity.motionX = 0.0;
|
||
|
}
|
||
|
entity.motionY += (double)0.0125f;
|
||
|
if (entity instanceof EntityItem) {
|
||
|
double difference;
|
||
|
if (direction.offsetX != 0) {
|
||
|
difference = (double)z + 0.5 - entity.posZ;
|
||
|
entity.motionZ += difference * 0.1;
|
||
|
} else if (direction.offsetZ != 0) {
|
||
|
difference = (double)x + 0.5 - entity.posX;
|
||
|
entity.motionX += difference * 0.1;
|
||
|
}
|
||
|
++((EntityItem)entity).age;
|
||
|
boolean foundSneaking = false;
|
||
|
for (EntityPlayer player : (List<EntityPlayer>) world.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBox((double)(x - 1), (double)(y - 1), (double)(z - 1), (double)(x + 1), (double)(y + 1), (double)(z + 1)))) {
|
||
|
if (!player.isSneaking()) continue;
|
||
|
foundSneaking = true;
|
||
|
}
|
||
|
((EntityItem)entity).delayBeforeCanPickup = foundSneaking ? 0 : 20;
|
||
|
entity.onGround = false;
|
||
|
}
|
||
|
if (slantType == TileEntityConveyorBelt.SlantType.UP) {
|
||
|
if (entity.motionY < 0.4) {
|
||
|
entity.addVelocity(0.0, 0.4, 0.0);
|
||
|
}
|
||
|
} else if (slantType == TileEntityConveyorBelt.SlantType.DOWN && entity.motionY > -0.1) {
|
||
|
entity.addVelocity(0.0, -0.1, 0.0);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public TileEntity createNewTileEntity(World var1, int meta) {
|
||
|
return new TileEntityConveyorBelt();
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
@SideOnly(value=Side.CLIENT)
|
||
|
public int getRenderType() {
|
||
|
return BlockRenderingHandler.BLOCK_RENDER_ID;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean isOpaqueCube() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public boolean renderAsNormalBlock() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public int damageDropped(int par1) {
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|