package openblocks.common.block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import openblocks.common.tileentity.TileEntityBigButton;
import openmods.block.BlockRotationMode;
import openmods.geometry.BlockSpaceTransform;
import openmods.geometry.Orientation;
import openmods.infobook.BookDocumentation;
@BookDocumentation
public class BlockBigButton extends OpenBlock {
public BlockBigButton() {
super(Material.circuits);
setRotationMode(BlockRotationMode.FOUR_DIRECTIONS);
setPlacementMode(BlockPlacementMode.SURFACE);
}
@Override
public boolean canPlaceBlock(World world, EntityPlayer player, ItemStack stack, int x, int y, int z, ForgeDirection sideDir, Orientation blockDirection, float hitX, float hitY, float hitZ, int newMeta) {
return super.canPlaceBlock(world, player, stack, x, y, z, sideDir, blockDirection, hitX, hitY, hitZ, newMeta) && isNeighborBlockSolid(world, x, y, z, blockDirection.north());
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public boolean isBlockSolid(IBlockAccess world, int x, int y, int z, int side) {
return false;
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
TileEntityBigButton tile = getTileEntity(world, x, y, z, TileEntityBigButton.class);
if (tile == null) { return; }
boolean pressed = tile.isButtonActive();
final Orientation orientation = tile.getOrientation();
final AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox(0.0625, 0.0625, 0, 0.9375, 0.9375, pressed? 0.0625 : 0.125);
final AxisAlignedBB rotatedAabb = BlockSpaceTransform.instance.mapBlockToWorld(orientation, aabb);
setBlockBounds(rotatedAabb);
}
@Override
public void setBlockBoundsForItemRender() {
setBlockBounds(0.0625f, 0.0625f, 0.4f, 0.9375f, 0.9375f, 0.525f);
}
@Override
public boolean canProvidePower() {
return true;
}
@Override
public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) {
TileEntityBigButton te = getTileEntity(world, x, y, z, TileEntityBigButton.class);
return te != null && te.isButtonActive()? 15 : 0;
}
@Override
public int isProvidingStrongPower(IBlockAccess world, int x, int y, int z, int side) {
ForgeDirection direction = ForgeDirection.getOrientation(side).getOpposite();
TileEntityBigButton button = getTileEntity(world, x, y, z, TileEntityBigButton.class);
return (button != null && direction == button.getOrientation().north() && button.isButtonActive())? 15 : 0;
}
}