package openblocks.common.block; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.Set; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import openblocks.api.IElevatorBlock; import openmods.infobook.BookDocumentation; import openmods.utils.BlockNotifyFlags; import openmods.utils.CollectionUtils; import openmods.utils.ColorUtils; import openmods.utils.ColorUtils.ColorMeta; @BookDocumentation(hasVideo = true) public class BlockElevator extends OpenBlock implements IElevatorBlock { public BlockElevator() { super(Material.rock); } @Override public int colorMultiplier(IBlockAccess world, int x, int y, int z) { return ColorUtils.vanillaBlockToColor(world.getBlockMetadata(x, y, z)).rgb; } @Override @SideOnly(Side.CLIENT) public int getRenderColor(int damage) { return ColorUtils.vanillaBlockToColor(damage).rgb; } @Override public boolean recolourBlock(World world, int x, int y, int z, ForgeDirection side, int colour) { int meta = world.getBlockMetadata(x, y, z); if (meta != colour) { world.setBlockMetadataWithNotify(x, y, z, colour, BlockNotifyFlags.ALL); return true; } return false; } @Override public int damageDropped(int meta) { return meta; } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { ItemStack stack = player.getHeldItem(); if (stack != null) { Set<ColorMeta> metas = ColorUtils.stackToColor(stack); if (!metas.isEmpty()) { ColorMeta meta = CollectionUtils.getRandom(metas); world.setBlockMetadataWithNotify(x, y, z, meta.vanillaBlockId, BlockNotifyFlags.ALL); return true; } } return false; } @Override public int getColor(World world, int x, int y, int z) { return world.getBlockMetadata(x, y, z); } @Override public PlayerRotation getRotation(World world, int x, int y, int z) { return PlayerRotation.NONE; } }