/*
* 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.post;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import mods.railcraft.api.core.IPostConnection;
import mods.railcraft.common.core.Railcraft;
import mods.railcraft.common.core.RailcraftConfig;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import mods.railcraft.common.plugins.forestry.ForestryPlugin;
import mods.railcraft.common.plugins.forge.HarvestPlugin;
import mods.railcraft.common.util.inventory.InvTools;
import mods.railcraft.common.util.misc.EnumColor;
import mods.railcraft.common.util.misc.Game;
import mods.railcraft.common.util.misc.MiscTools;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.stats.StatList;
public class BlockPost extends BlockPostBase implements IPostConnection {
public static BlockPost block;
protected BlockPost(int renderType) {
super(renderType);
setBlockName("railcraft.post");
}
public static void registerBlock() {
if (block != null)
return;
if (RailcraftConfig.isBlockEnabled("post")) {
block = new BlockPost(Railcraft.getProxy().getRenderId());
GameRegistry.registerTileEntity(TilePostEmblem.class, "RCPostEmblemTile");
GameRegistry.registerBlock(block, ItemPost.class, block.getUnlocalizedName());
HarvestPlugin.setHarvestLevel(block, "crowbar", 0);
HarvestPlugin.setHarvestLevel(block, EnumPost.WOOD.ordinal(), "axe", 0);
HarvestPlugin.setHarvestLevel(block, EnumPost.STONE.ordinal(), "pickaxe", 1);
HarvestPlugin.setHarvestLevel(block, EnumPost.METAL.ordinal(), "pickaxe", 2);
HarvestPlugin.setHarvestLevel(block, EnumPost.EMBLEM.ordinal(), "pickaxe", 2);
HarvestPlugin.setHarvestLevel(block, EnumPost.WOOD_PLATFORM.ordinal(), "axe", 0);
HarvestPlugin.setHarvestLevel(block, EnumPost.STONE_PLATFORM.ordinal(), "pickaxe", 1);
HarvestPlugin.setHarvestLevel(block, EnumPost.METAL_PLATFORM.ordinal(), "pickaxe", 2);
ForestryPlugin.addBackpackItem("builder", block);
}
}
@Override
public boolean isPlatform(int meta) {
switch (EnumPost.fromId(meta)) {
case WOOD_PLATFORM:
case STONE_PLATFORM:
case METAL_PLATFORM:
return true;
}
return false;
}
@Override
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
for (EnumPost post : EnumPost.values()) {
if (post == EnumPost.EMBLEM) continue;
list.add(post.getItem());
}
}
@Override
@SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) {
IIcon woodIcon = iconRegister.registerIcon("railcraft:post.wood");
IIcon stoneIcon = iconRegister.registerIcon("railcraft:concrete");
IIcon metalIcon = iconRegister.registerIcon("railcraft:post.metal");
EnumPost.WOOD.setTexture(woodIcon);
EnumPost.WOOD_PLATFORM.setTexture(woodIcon);
EnumPost.STONE.setTexture(stoneIcon);
EnumPost.STONE_PLATFORM.setTexture(stoneIcon);
EnumPost.METAL.setTexture(metalIcon);
EnumPost.METAL_PLATFORM.setTexture(metalIcon);
EnumPost.EMBLEM.setTexture(metalIcon);
}
@Override
public IIcon getIcon(int side, int meta) {
return EnumPost.fromId(meta).getIcon();
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
int meta = world.getBlockMetadata(x, y, z);
if (meta == EnumPost.EMBLEM.ordinal()) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TilePostEmblem) {
TilePostEmblem post = (TilePostEmblem) tile;
EnumColor color = post.getColor();
if (color != null && BlockPostMetal.textures != null)
return BlockPostMetal.textures[color.ordinal()];
}
}
return super.getIcon(world, x, y, z, side);
}
@Override
public int damageDropped(int meta) {
return meta;
}
@Override
public int quantityDropped(int meta, int fortune, Random random) {
return 1;
}
@Override
public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
if (metadata == EnumPost.EMBLEM.ordinal()) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TilePostEmblem) {
TilePostEmblem post = (TilePostEmblem) tile;
ArrayList<ItemStack> drops = super.getDrops(world, x, y, z, metadata, fortune);
InvTools.setItemColor(drops.get(0), post.getColor());
ItemPost.setEmblem(drops.get(0), post.getEmblem());
return drops;
}
}
return super.getDrops(world, x, y, z, metadata, fortune);
}
@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) {
player.addStat(StatList.mineBlockStatArray[getIdFromBlock(this)], 1);
player.addExhaustion(0.025F);
if (Game.isHost(world) && !player.capabilities.isCreativeMode)
dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
return world.setBlockToAir(x, y, z);
}
@Override
public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) {
int meta = world.getBlockMetadata(x, y, z);
if (meta == EnumPost.EMBLEM.ordinal())
return false;
return side == ForgeDirection.DOWN || side == ForgeDirection.UP;
}
@Override
public TileEntity createTileEntity(World world, int metadata) {
if (metadata == EnumPost.EMBLEM.ordinal())
return new TilePostEmblem();
return null;
}
@Override
public boolean hasTileEntity(int metadata) {
return metadata == EnumPost.EMBLEM.ordinal();
}
@Override
public int getFireSpreadSpeed(IBlockAccess world, int x, int y, int z, ForgeDirection face) {
int metadata = world.getBlockMetadata(x, y, z);
if (metadata == EnumPost.WOOD.ordinal())
return 300;
return 0;
}
@Override
public int getFlammability(IBlockAccess world, int x, int y, int z, ForgeDirection face) {
int metadata = world.getBlockMetadata(x, y, z);
if (metadata == EnumPost.WOOD.ordinal())
return 5;
return 0;
}
@Override
public boolean isFlammable(IBlockAccess world, int x, int y, int z, ForgeDirection face) {
int metadata = world.getBlockMetadata(x, y, z);
return metadata == EnumPost.WOOD.ordinal();
}
@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 == EnumPost.METAL.ordinal())
if (BlockPostMetal.post != null) {
world.setBlock(x, y, z, BlockPostMetal.post, 15 - colour, 3);
return true;
}
if (meta == EnumPost.EMBLEM.ordinal()) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TilePostEmblem) {
TilePostEmblem tileEmblem = (TilePostEmblem) tile;
tileEmblem.setColor(EnumColor.fromId(15 - colour));
return true;
}
}
return false;
}
@Override
public ConnectStyle connectsToPost(IBlockAccess world, int x, int y, int z, ForgeDirection side) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TilePostEmblem) {
TilePostEmblem tileEmblem = (TilePostEmblem) tile;
if (tileEmblem.getFacing() == side)
return ConnectStyle.NONE;
}
return ConnectStyle.TWO_THIN;
}
@Override
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) {
super.onBlockPlacedBy(world, x, y, z, entity, stack);
int meta = world.getBlockMetadata(x, y, z);
if (meta == EnumPost.EMBLEM.ordinal()) {
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof TilePostEmblem) {
TilePostEmblem post = (TilePostEmblem) tile;
post.setFacing(MiscTools.getHorizontalSideClosestToPlayer(world, x, y, z, entity));
NBTTagCompound nbt = stack.getTagCompound();
if (nbt != null) {
if (nbt.hasKey("color"))
post.setColor(EnumColor.fromId(nbt.getByte("color")));
if (nbt.hasKey("emblem"))
post.setEmblem(nbt.getString("emblem"));
}
}
}
}
}