/* * 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.stairs; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Random; import mods.railcraft.client.particles.ParticleHelper; import mods.railcraft.client.sounds.RailcraftSound; import mods.railcraft.common.blocks.aesthetics.EnumBlockMaterial; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.modules.ModuleManager; import mods.railcraft.common.plugins.forge.CreativePlugin; import mods.railcraft.common.util.misc.Game; import mods.railcraft.common.util.sounds.IBlockSoundProvider; import net.minecraft.block.*; import net.minecraft.client.particle.EffectRenderer; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockRailcraftStairs extends BlockStairs implements IBlockSoundProvider { static BlockRailcraftStairs block; public static BlockRailcraftStairs getBlock() { return block; } public static ItemStack getItem(EnumBlockMaterial mat) { if (block == null) return null; return new ItemStack(block, 1, mat.ordinal()); } public static ItemStack getItem(EnumBlockMaterial mat, int qty) { if (block == null) return null; return new ItemStack(block, qty, mat.ordinal()); } public static String getTag(EnumBlockMaterial mat) { return "railcraft.stair." + mat.name().replace("_", ".").toLowerCase(Locale.ENGLISH); } public static boolean isEnabled(EnumBlockMaterial mat) { return ModuleManager.isModuleLoaded(ModuleManager.Module.STRUCTURES) && RailcraftConfig.isSubBlockEnabled(getTag(mat)) && getBlock() != null; } private final int renderId; public static int currentRenderPass; protected BlockRailcraftStairs(int renderId) { super(Blocks.stonebrick, 0); this.renderId = renderId; this.setStepSound(RailcraftSound.getInstance()); setCreativeTab(CreativePlugin.RAILCRAFT_TAB); useNeighborBrightness = true; isBlockContainer = true; } @Override public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileStair) return new ItemStack(this, 1, ((TileStair) tile).getStair().ordinal()); return null; } @Override public void getSubBlocks(Item item, CreativeTabs tab, List list) { for (EnumBlockMaterial mat : EnumBlockMaterial.creativeList) { if (isEnabled(mat)) list.add(getItem(mat)); } } @Override public ArrayList<ItemStack> getDrops(World world, int i, int j, int k, int md, int fortune) { TileEntity tile = world.getTileEntity(i, j, k); ArrayList<ItemStack> items = new ArrayList<ItemStack>(); if (tile instanceof TileStair) items.add(new ItemStack(this, 1, ((TileStair) tile).getStair().ordinal())); return items; } @Override public int quantityDropped(int meta, int fortune, Random random) { return 1; } @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { super.onBlockPlacedBy(world, x, y, z, entity, stack); TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileStair) ((TileStair) tile).setStair(EnumBlockMaterial.fromOrdinal(stack.getItemDamage())); } @Override public void harvestBlock(World world, EntityPlayer entityplayer, int i, int j, int k, int l) { } @Override public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1); player.addExhaustion(0.025F); if (Game.isHost(world) && !player.capabilities.isCreativeMode) dropBlockAsItem(world, x, y, z, 0, 0); return world.setBlockToAir(x, y, z); } @Override public void breakBlock(World world, int x, int y, int z, Block block, int par6) { super.breakBlock(world, x, y, z, block, par6); world.removeTileEntity(x, y, z); } @Override public boolean hasTileEntity(int metadata) { return true; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileStair(); } @Override public float getBlockHardness(World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileStair) return ((TileStair) tile).getStair().getBlockHardness(world, x, y, z); return super.getBlockHardness(world, x, y, z); } @Override public float getExplosionResistance(Entity entity, World world, int x, int y, int z, double explosionX, double explosionY, double explosionZ) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileStair) return ((TileStair) tile).getStair().getExplosionResistance(entity); return super.getExplosionResistance(entity, world, x, y, z, explosionX, explosionY, explosionZ); } @Override public int getRenderType() { return renderId; } @Override public int getRenderBlockPass() { return 1; } @Override public boolean canRenderInPass(int pass) { currentRenderPass = pass; return pass == 0 || pass == 1; } @SideOnly(Side.CLIENT) @Override public IIcon getIcon(int side, int meta) { return EnumBlockMaterial.fromOrdinal(meta).getIcon(side); } @Override public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileStair) return ((TileStair) tile).getTexture(side); return super.getIcon(world, x, y, z, side); } @SideOnly(Side.CLIENT) @Override public boolean addHitEffects(World worldObj, MovingObjectPosition target, EffectRenderer effectRenderer) { return ParticleHelper.addHitEffects(worldObj, block, target, effectRenderer, null); } @SideOnly(Side.CLIENT) @Override public boolean addDestroyEffects(World worldObj, int x, int y, int z, int meta, EffectRenderer effectRenderer) { return ParticleHelper.addDestroyEffects(worldObj, block, x, y, z, meta, effectRenderer, null); } @Override public SoundType getSound(World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(x, y, z); if (tile instanceof TileStair) return ((TileStair) tile).getStair().getSound(); return null; } @SideOnly(Side.CLIENT) @Override public void registerBlockIcons(IIconRegister par1IconRegister) { } }