/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.aesthetics.cube; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import mods.railcraft.client.render.RenderFakeBlock.RenderInfo; import mods.railcraft.client.sounds.RailcraftSound; import mods.railcraft.common.carts.EntityTunnelBore; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.plugins.forestry.ForestryPlugin; import mods.railcraft.common.plugins.forge.CreativePlugin; import mods.railcraft.common.plugins.forge.RailcraftRegistry; import mods.railcraft.common.plugins.misc.MicroBlockPlugin; import mods.railcraft.common.util.misc.MiscTools; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import java.util.List; import java.util.Random; public class BlockCube extends Block { private static BlockCube instance; @SideOnly(Side.CLIENT) private RenderInfo override; public static BlockCube getBlock() { return instance; } public static void registerBlock() { if (instance == null) if (RailcraftConfig.isBlockEnabled("cube")) { instance = new BlockCube(); RailcraftRegistry.register(instance, ItemCube.class); EntityTunnelBore.addMineableBlock(instance); ForestryPlugin.addBackpackItem("miner", EnumCube.COKE_BLOCK.getItem()); ForestryPlugin.addBackpackItem("miner", EnumCube.COPPER_BLOCK.getItem()); ForestryPlugin.addBackpackItem("miner", EnumCube.LEAD_BLOCK.getItem()); ForestryPlugin.addBackpackItem("miner", EnumCube.STEEL_BLOCK.getItem()); ForestryPlugin.addBackpackItem("miner", EnumCube.TIN_BLOCK.getItem()); ForestryPlugin.addBackpackItem("builder", EnumCube.CONCRETE_BLOCK.getItem()); ForestryPlugin.addBackpackItem("builder", EnumCube.CREOSOTE_BLOCK.getItem()); ForestryPlugin.addBackpackItem("digger", EnumCube.ABYSSAL_STONE.getItem()); ForestryPlugin.addBackpackItem("digger", EnumCube.QUARRIED_STONE.getItem()); MicroBlockPlugin.addMicroBlockCandidate(instance, EnumCube.CONCRETE_BLOCK.ordinal()); MicroBlockPlugin.addMicroBlockCandidate(instance, EnumCube.CREOSOTE_BLOCK.ordinal()); MicroBlockPlugin.addMicroBlockCandidate(instance, EnumCube.STEEL_BLOCK.ordinal()); MicroBlockPlugin.addMicroBlockCandidate(instance, EnumCube.ABYSSAL_STONE.ordinal()); MicroBlockPlugin.addMicroBlockCandidate(instance, EnumCube.QUARRIED_STONE.ordinal()); } } public BlockCube() { super(Material.rock); setBlockName("railcraft.cube"); setResistance(20); setHardness(5); setStepSound(RailcraftSound.getInstance()); setCreativeTab(CreativePlugin.RAILCRAFT_TAB); setHarvestLevel("pickaxe", 1, EnumCube.COKE_BLOCK.ordinal()); setHarvestLevel("pickaxe", 1, EnumCube.ABYSSAL_STONE.ordinal()); setHarvestLevel("pickaxe", 2, EnumCube.STEEL_BLOCK.ordinal()); setHarvestLevel("pickaxe", 1, EnumCube.CONCRETE_BLOCK.ordinal()); setHarvestLevel("axe", 0, EnumCube.CREOSOTE_BLOCK.ordinal()); setHarvestLevel("shovel", 3, EnumCube.CRUSHED_OBSIDIAN.ordinal()); } @Override public float getBlockHardness(World world, int i, int j, int k) { int meta = world.getBlockMetadata(i, j, k); return EnumCube.fromOrdinal(meta).getHardness(); } @Override public int damageDropped(int meta) { return meta; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { for (EnumCube cube : EnumCube.VALUES) { if (!cube.isEnabled() || cube == EnumCube.CONCRETE_BLOCK || cube == EnumCube.CREOSOTE_BLOCK) continue; cube.setIcon(iconRegister.registerIcon("railcraft:" + MiscTools.cleanTag(cube.getTag()))); } EnumCube.CONCRETE_BLOCK.setIcon(iconRegister.registerIcon("railcraft:concrete")); EnumCube.CREOSOTE_BLOCK.setIcon(iconRegister.registerIcon("railcraft:post.wood")); } @SideOnly(Side.CLIENT) public void setTextureOverride(RenderInfo info) { override = info; } @Override public IIcon getIcon(int side, int meta) { if (override != null) return override.getBlockTextureFromSide(side); IIcon icon = EnumCube.fromOrdinal(meta).getIcon(); if (icon == null) return EnumCube.CONCRETE_BLOCK.getIcon(); return icon; } public static String getBlockNameFromMetadata(int meta) { return EnumCube.fromOrdinal(meta).getTag(); } @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { int meta = world.getBlockMetadata(x, y, z); EnumCube.fromOrdinal(meta).getBlockDef().onNeighborBlockChange(world, x, y, z, block); } @Override public void updateTick(World world, int x, int y, int z, Random rand) { int meta = world.getBlockMetadata(x, y, z); EnumCube.fromOrdinal(meta).getBlockDef().updateTick(world, x, y, z, rand); } @Override public void onPostBlockPlaced(World world, int i, int j, int k, int meta) { EnumCube.fromOrdinal(meta).getBlockDef().onBlockPlaced(world, i, j, k); } @Override public void randomDisplayTick(World world, int i, int j, int k, Random rand) { int meta = world.getBlockMetadata(i, j, k); EnumCube.fromOrdinal(meta).getBlockDef().randomDisplayTick(world, i, j, k, rand); } @Override public void onBlockAdded(World world, int i, int j, int k) { int meta = world.getBlockMetadata(i, j, k); EnumCube.fromOrdinal(meta).getBlockDef().onBlockAdded(world, i, j, k); } @Override public void breakBlock(World world, int i, int j, int k, Block block, int meta) { EnumCube.fromOrdinal(meta).getBlockDef().onBlockRemoval(world, i, j, k); } @Override public boolean removedByPlayer(World world, EntityPlayer player, int i, int j, int k, boolean willHarvest) { int meta = world.getBlockMetadata(i, j, k); return EnumCube.fromOrdinal(meta).getBlockDef().removedByPlayer(world, player, i, j, k); } @Override public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { if (override != null) return true; return super.shouldSideBeRendered(world, x, y, z, side); } @Override public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int i, int j, int k) { int meta = world.getBlockMetadata(i, j, k); return EnumCube.fromOrdinal(meta).getBlockDef().canCreatureSpawn(type, world, i, j, k); } @Override public void getSubBlocks(Item item, CreativeTabs tab, List list) { for (EnumCube type : EnumCube.getCreativeList()) { if (type.isEnabled()) list.add(type.getItem()); } } @Override public float getExplosionResistance(Entity exploder, World world, int i, int j, int k, double srcX, double srcY, double srcZ) { int meta = world.getBlockMetadata(i, j, k); return EnumCube.fromOrdinal(meta).getResistance() * 3f / 5f; } @Override public int getFireSpreadSpeed(IBlockAccess world, int x, int y, int z, ForgeDirection face) { int metadata = world.getBlockMetadata(x, y, z); return EnumCube.fromOrdinal(metadata).getBlockDef().getFireSpreadSpeed(world, x, y, z, face); } @Override public int getFlammability(IBlockAccess world, int x, int y, int z, ForgeDirection face) { int metadata = world.getBlockMetadata(x, y, z); return EnumCube.fromOrdinal(metadata).getBlockDef().getFlammability(world, x, y, z, face); } @Override public boolean isFlammable(IBlockAccess world, int x, int y, int z, ForgeDirection face) { int metadata = world.getBlockMetadata(x, y, z); return EnumCube.fromOrdinal(metadata).getBlockDef().isFlammable(world, x, y, z, face); } }