package openblocks.common.block;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import openmods.infobook.BookDocumentation;
import openmods.utils.BlockNotifyFlags;
import openmods.utils.render.RenderUtils;
@BookDocumentation(customName = "sky.normal")
public class BlockSky extends OpenBlock {
private static final int MASK_INVERTED = 1 << 0;
private static final int MASK_POWERED = 1 << 1;
public BlockSky() {
super(Material.iron);
}
public static boolean isInverted(int meta) {
return (meta & MASK_INVERTED) != 0;
}
@Override
public int damageDropped(int meta) {
return meta & MASK_INVERTED;
}
@Override
@SideOnly(Side.CLIENT)
public int getBlockColor() {
// randomness more or less intended
return RenderUtils.getFogColor().getColor();
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
if (!world.isRemote) {
final int isPowered = world.isBlockIndirectlyGettingPowered(x, y, z)? MASK_POWERED : 0;
final int isActive = world.getBlockMetadata(x, y, z) & MASK_POWERED;
if (isPowered != isActive) world.scheduleBlockUpdate(x, y, z, this, 1);
}
}
@Override
public void updateTick(World world, int x, int y, int z, Random random) {
final int isPowered = world.isBlockIndirectlyGettingPowered(x, y, z)? MASK_POWERED : 0;
final int isInverted = world.getBlockMetadata(x, y, z) & MASK_INVERTED;
world.setBlockMetadataWithNotify(x, y, z, isPowered | isInverted, BlockNotifyFlags.ALL);
}
public static boolean isActive(int meta) {
boolean isPowered = (meta & MASK_POWERED) != 0;
boolean isInverted = (meta & MASK_INVERTED) != 0;
return isPowered ^ isInverted;
}
@Override
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
int meta = world.getBlockMetadata(x, y, z);
return isActive(meta)? AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0) : super.getSelectedBoundingBoxFromPool(world, x, y, z);
}
}