You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
6.1 KiB
Java

package net.brokenmoon.afloydwiremod.api;
import net.minecraft.src.*;
import net.minecraft.src.helper.Direction;
public abstract class AbstractWireTileSided extends AbstractWireTile{
public AbstractWireTileSided(int i, Material material) {
super(i, material);
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
}
@Override
public void onBlockPlaced(World world, int x, int y, int z, Direction side, EntityLiving player, double sideHeight) {
int l = Direction.getLegacySide(side);
int i1 = 5;
if (l == 1 && this.canPlaceOnTop(world, x, y - 1, z)) {
i1 = 5;
} else if (l == 2 && world.isBlockNormalCube(x, y, z + 1)) {
i1 = 4;
} else if (l == 3 && world.isBlockNormalCube(x, y, z - 1)) {
i1 = 3;
} else if (l == 4 && world.isBlockNormalCube(x + 1, y, z)) {
i1 = 2;
} else if (l == 5 && world.isBlockNormalCube(x - 1, y, z)) {
i1 = 1;
} else if (l == 0 && world.isBlockNormalCube(x, y + 1, z)) {
i1 = 0;
}
world.setBlockMetadataWithNotify(x, y, z, i1);
}
@Override
public void onBlockAdded(World world, int i, int j, int k) {
super.onBlockAdded(world, i, j, k);
if (world.isBlockNormalCube(i - 1, j, k)) {
world.setBlockMetadataWithNotify(i, j, k, 1);
} else if (world.isBlockNormalCube(i + 1, j, k)) {
world.setBlockMetadataWithNotify(i, j, k, 2);
} else if (world.isBlockNormalCube(i, j, k - 1)) {
world.setBlockMetadataWithNotify(i, j, k, 3);
} else if (world.isBlockNormalCube(i, j, k + 1)) {
world.setBlockMetadataWithNotify(i, j, k, 4);
} else if (world.isBlockNormalCube(i, j + 1, k)) {
world.setBlockMetadataWithNotify(i, j, k, 0);
} else if (this.canPlaceOnTop(world, i, j - 1, k)) {
world.setBlockMetadataWithNotify(i, j, k, 5);
}
this.dropTileIfCantStay(world, i, j, k);
}
private boolean canPlaceOnTop(World world, int i, int j, int k) {
return world.isBlockNormalCube(i, j, k);
}
@Override
public boolean canPlaceBlockAt(World world, int i, int j, int k) {
if (world.isBlockNormalCube(i - 1, j, k)) {
return true;
}
if (world.isBlockNormalCube(i + 1, j, k)) {
return true;
}
if (world.isBlockNormalCube(i, j, k - 1)) {
return true;
}
if (world.isBlockNormalCube(i, j, k + 1)) {
return true;
}
if (world.isBlockNormalCube(i, j + 1, k)) {
return true;
}
return world.canPlaceOnSurfaceOfBlock(i, j - 1, k);
}
@Override
public void onNeighborBlockChange(World world, int i, int j, int k, int l) {
if (this.dropTileIfCantStay(world, i, j, k)) {
int i1 = world.getBlockMetadata(i, j, k);
boolean flag = true;
switch(i1){
case 0:
if(world.isBlockNormalCube(i, j + 1, k))
flag = false;
break;
case 1:
if(world.isBlockNormalCube(i - 1, j, k))
flag = false;
break;
case 2:
if(world.isBlockNormalCube(i + 1, j, k))
flag = false;
break;
case 3:
if(world.isBlockNormalCube(i, j, k - 1))
flag = false;
break;
case 4:
if(world.isBlockNormalCube(i, j, k + 1))
flag = false;
break;
case 5:
if(this.canPlaceOnTop(world, i, j - 1, k))
flag = false;
break;
}
if (flag) {
this.dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k));
world.setBlockWithNotify(i, j, k, 0);
}
}
}
private boolean dropTileIfCantStay(World world, int i, int j, int k) {
if (!this.canPlaceBlockAt(world, i, j, k)) {
this.dropBlockAsItem(world, i, j, k, world.getBlockMetadata(i, j, k));
world.setBlockWithNotify(i, j, k, 0);
return false;
}
return true;
}
@Override
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int i, int j, int k) {
this.setBlockBoundsBasedOnState(world, i, j, k);
return super.getSelectedBoundingBoxFromPool(world, i, j, k);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int i, int j, int k) {
this.setBlockBoundsBasedOnState(world, i, j, k);
return super.getCollisionBoundingBoxFromPool(world, i, j, k);
}
@Override
public void setBlockBoundsBasedOnState(World world, int i, int j, int k) {
this.setBlockBoundsForBlockRender(world.getBlockMetadata(i, j, k));
}
@Override
public void setBlockBoundsForItemRender() {
float f = 0.1875f;
this.setBlockBounds(0.0f, 0.5f - f / 2.0f, 0.0f, 1.0f, 0.5f + f / 2.0f, 1.0f);
}
public void setBlockBoundsForBlockRender(int i) {
float f = 0.1875f;
if (i == 4) {
this.setBlockBounds(0.0f, 0.0f, 1.0f - f, 1.0f, 1.0f, 1.0f);
}
if (i == 3) {
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, f);
}
if (i == 2) {
this.setBlockBounds(1.0f - f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
}
if (i == 1) {
this.setBlockBounds(0.0f, 0.0f, 0.0f, f, 1.0f, 1.0f);
}
if (i == 0) {
this.setBlockBounds(0.0f, 1.0f - f, 0.0f, 1.0f, 1.0f, 1.0f);
}
if (i == 5) {
this.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, f, 1.0f);
}
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public int getRenderType(){
return 28;
}
}