/* * 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.wall; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import net.minecraft.block.*; import java.util.List; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import mods.railcraft.client.sounds.RailcraftSound; import mods.railcraft.common.plugins.forge.RailcraftRegistry; import mods.railcraft.common.core.Railcraft; 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.HarvestPlugin; import mods.railcraft.common.plugins.forge.WorldPlugin; import net.minecraft.init.Blocks; import net.minecraft.item.Item; public class BlockRailcraftWall extends BlockWall { private static BlockRailcraftWall alpha; private static BlockRailcraftWall beta; public static int currentRenderPass; public static BlockRailcraftWall getBlockAlpha() { return alpha; } public static BlockRailcraftWall getBlockBeta() { return beta; } public static void registerBlocks() { if (alpha == null && RailcraftConfig.isBlockEnabled("wall.alpha")) { int renderId = Railcraft.getProxy().getRenderId(); alpha = new BlockRailcraftWall(renderId, true, new WallProxyApha()); alpha.setBlockName("railcraft.wall.alpha"); RailcraftRegistry.register(alpha, ItemWall.class); for (EnumWallAlpha wall : EnumWallAlpha.VALUES) { switch (wall) { case SNOW: HarvestPlugin.setHarvestLevel(alpha, wall.ordinal(), "shovel", 0); break; case OBSIDIAN: HarvestPlugin.setHarvestLevel(alpha, wall.ordinal(), "pickaxe", 3); break; default: HarvestPlugin.setHarvestLevel(alpha, wall.ordinal(), "pickaxe", 2); } RailcraftRegistry.register(wall.getItem()); if (wall != EnumWallAlpha.SNOW || wall != EnumWallAlpha.ICE) ForestryPlugin.addBackpackItem("builder", wall.getItem()); } } if (beta == null && RailcraftConfig.isBlockEnabled("wall.beta")) { int renderId = Railcraft.getProxy().getRenderId(); beta = new BlockRailcraftWall(renderId, false, new WallProxyBeta()); beta.setBlockName("railcraft.wall.beta"); RailcraftRegistry.register(beta, ItemWall.class); for (EnumWallBeta wall : EnumWallBeta.VALUES) { switch (wall) { default: HarvestPlugin.setHarvestLevel(beta, wall.ordinal(), "pickaxe", 2); } RailcraftRegistry.register(wall.getItem()); ForestryPlugin.addBackpackItem("builder", wall.getItem()); } } } public static void initialize() { EnumWallAlpha.initialize(); EnumWallBeta.initialize(); } private final int renderId; public final WallProxy proxy; private final boolean alphaBlend; public BlockRailcraftWall(int renderId, boolean alphaBlend, WallProxy proxy) { super(Blocks.stonebrick); if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) this.renderId = 32; else this.renderId = renderId; this.alphaBlend = alphaBlend; this.proxy = proxy; this.setStepSound(RailcraftSound.getInstance()); setCreativeTab(CreativePlugin.RAILCRAFT_TAB); } @Override public IIcon getIcon(int side, int meta) { WallInfo wall = proxy.fromMeta(meta); Block source = wall.getSource(); if (source == null) return Blocks.cobblestone.getIcon(side, 0); return source.getIcon(side, wall.getSourceMeta()); } /** * The type of render function that is called for this block * @return */ @Override public int getRenderType() { return renderId; } @Override public int getRenderBlockPass() { return alphaBlend ? 1 : 0; } @Override public boolean canRenderInPass(int pass) { currentRenderPass = pass; if (!alphaBlend) return getRenderBlockPass() == pass; return pass == 0 || pass == 1; } /** * Return whether an adjacent block can connect to a wall. * * @param world * @param x * @param y * @param z * @return */ @Override public boolean canConnectWallTo(IBlockAccess world, int x, int y, int z) { Block block = WorldPlugin.getBlock(world, x, y, z); if (block instanceof BlockRailcraftWall) return true; else if (block != this && block != Blocks.fence_gate) return block != null && block.getMaterial().isOpaque() && block.renderAsNormalBlock() ? block.getMaterial() != Material.gourd : false; else return true; } /** * Determines if a torch can be placed on the top surface of this block. * Useful for creating your own block that torches can be on, such as * fences. * * @param world The current world * @param x X Position * @param y Y Position * @param z Z Position * @return True to allow the torch to be placed */ @Override public boolean canPlaceTorchOnTop(World world, int x, int y, int z) { return true; } @Override public void getSubBlocks(Item item, CreativeTabs tab, List list) { for (WallInfo wall : proxy.getCreativeList()) { if (wall.isEnabled()) list.add(wall.getItem()); } } @Override public float getBlockHardness(World world, int x, int y, int z) { int meta = world.getBlockMetadata(x, y, z); WallInfo wall = proxy.fromMeta(meta); return wall.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) { int meta = world.getBlockMetadata(x, y, z); WallInfo wall = proxy.fromMeta(meta); return wall.getExplosionResistance(entity); } }