package openblocks.common.block; import com.google.common.collect.Lists; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.List; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import openblocks.common.tileentity.TileEntityImaginary; import openblocks.common.tileentity.TileEntityImaginary.Property; public class BlockImaginary extends OpenBlock { public IIcon texturePencilBlock; public IIcon textureCrayonBlock; public IIcon texturePencilPanel; public IIcon textureCrayonPanel; public IIcon texturePencilHalfPanel; public IIcon textureCrayonHalfPanel; private static final Material imaginaryMaterial = new Material(MapColor.airColor); public static final SoundType drawingSounds = new SoundType("cloth", 0.5f, 1.0f) { @Override public String getBreakSound() { return "openblocks:crayon.place"; } @Override public String func_150496_b() { return "openblocks:crayon.place"; } }; public BlockImaginary() { super(imaginaryMaterial); setHardness(0.3f); stepSound = drawingSounds; setRenderMode(RenderMode.TESR_ONLY); } @Override public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { if (world.isRemote) { TileEntityImaginary te = getTileEntity(world, x, y, z, TileEntityImaginary.class); if (te != null && te.is(Property.SELECTABLE)) return te.getSelectionBox(); } return AxisAlignedBB.getBoundingBox(0, 0, 0, 0, 0, 0); } @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { return null; } @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB region, List result, Entity entity) { TileEntityImaginary te = getTileEntity(world, x, y, z, TileEntityImaginary.class); if (te != null && te.is(Property.SOLID, entity)) te.addCollisions(region, result); } @Override public void setBlockBoundsBasedOnState(IBlockAccess access, int x, int y, int z) { TileEntityImaginary te = getTileEntity(access, x, y, z, TileEntityImaginary.class); if (te != null && te.is(Property.SELECTABLE)) { AxisAlignedBB aabb = te.getBlockBounds(); minX = aabb.minX; minY = aabb.minY; minZ = aabb.minZ; maxX = aabb.maxX; maxY = aabb.maxY; maxZ = aabb.maxZ; } } @Override public MovingObjectPosition collisionRayTrace(World world, int x, int y, int z, Vec3 par5Vec3, Vec3 par6Vec3) { if (world.isRemote) { TileEntityImaginary te = getTileEntity(world, x, y, z, TileEntityImaginary.class); if (te == null || !te.is(Property.SELECTABLE)) return null; } return super.collisionRayTrace(world, x, y, z, par5Vec3, par6Vec3); } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister registry) { super.registerBlockIcons(registry); texturePencilBlock = registry.registerIcon("openblocks:pencilBlock"); textureCrayonBlock = registry.registerIcon("openblocks:crayonBlock"); texturePencilPanel = registry.registerIcon("openblocks:pencilPanel"); textureCrayonPanel = registry.registerIcon("openblocks:crayonPanel"); texturePencilHalfPanel = registry.registerIcon("openblocks:pencilHalfPanel"); textureCrayonHalfPanel = registry.registerIcon("openblocks:crayonHalfPanel"); } @Override public boolean renderAsNormalBlock() { return false; } @Override public boolean isOpaqueCube() { return false; } @Override public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) { return Lists.newArrayList(); } @Override protected boolean suppressPickBlock() { return true; } }