package net.geforcemods.securitycraft.items;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.geforcemods.securitycraft.api.IOwnable;
import net.geforcemods.securitycraft.api.Owner;
import net.geforcemods.securitycraft.blocks.BlockReinforcedSlabs;
import net.geforcemods.securitycraft.blocks.BlockReinforcedWoodSlabs;
import net.geforcemods.securitycraft.main.mod_SecurityCraft;
import net.geforcemods.securitycraft.util.PlayerUtils;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSlab;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
public class ItemBlockReinforcedSlabs extends ItemBlock {
private final boolean isNotSlab; // <--- Not really, I just don't know what the purpose of this boolean is yet.
private final BlockSlab singleSlab;
private final ReinforcedSlabType slabType;
public ItemBlockReinforcedSlabs(Block par1Block, BlockReinforcedWoodSlabs par2Block, Boolean par3, ReinforcedSlabType slabType){
super(par1Block);
this.singleSlab = par2Block;
this.isNotSlab = par3;
this.slabType = slabType;
this.setMaxDamage(0);
this.setHasSubtypes(true);
}
public ItemBlockReinforcedSlabs(Block par1Block, BlockReinforcedSlabs par2Block, Boolean par3, ReinforcedSlabType slabType){
super(par1Block);
this.singleSlab = par2Block;
this.isNotSlab = par3;
this.slabType = slabType;
this.setMaxDamage(0);
this.setHasSubtypes(true);
}
/**
* Gets an icon index based on an item's damage value
*/
@SideOnly(Side.CLIENT)
public IIcon getIconFromDamage(int par1){
if(slabType == ReinforcedSlabType.OTHER){
return mod_SecurityCraft.reinforcedStoneSlabs.getIcon(2, par1);
}else{
return mod_SecurityCraft.reinforcedWoodSlabs.getIcon(2, par1);
}
}
public String getUnlocalizedName(ItemStack stack){
if(slabType == ReinforcedSlabType.WOOD){
if(stack.getItemDamage() == 0){
return this.getUnlocalizedName() + "_oak";
}else if(stack.getItemDamage() == 1){
return this.getUnlocalizedName() + "_spruce";
}else if(stack.getItemDamage() == 2){
return this.getUnlocalizedName() + "_birch";
}if(stack.getItemDamage() == 3){
return this.getUnlocalizedName() + "_jungle";
}else if(stack.getItemDamage() == 4){
return this.getUnlocalizedName() + "_acacia";
}else if(stack.getItemDamage() == 5){
return this.getUnlocalizedName() + "_darkoak";
}else{
return this.getUnlocalizedName();
}
}else{
if(stack.getItemDamage() == 0){
return this.getUnlocalizedName() + "_stone";
}else if(stack.getItemDamage() == 1){
return this.getUnlocalizedName() + "_cobble";
}else if(stack.getItemDamage() == 2){
return this.getUnlocalizedName() + "_sandstone";
}else{
return this.getUnlocalizedName();
}
}
}
public int getMetadata(int par1){
return par1;
}
public boolean onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7, float par8, float par9, float par10){
if(this.isNotSlab){
return super.onItemUse(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10);
}else if(par1ItemStack.stackSize == 0){
return false;
}else if(!par2EntityPlayer.canPlayerEdit(par4, par5, par6, par7, par1ItemStack)){
return false;
}else{
Block block = par3World.getBlock(par4, par5, par6);
int i1 = par3World.getBlockMetadata(par4, par5, par6);
int j1 = i1 & 7;
boolean flag = (i1 & 8) != 0;
Owner owner = null;
if(par3World.getTileEntity(par4, par5, par6) instanceof IOwnable){
owner = ((IOwnable) par3World.getTileEntity(par4, par5, par6)).getOwner();
if(!((IOwnable) par3World.getTileEntity(par4, par5, par6)).getOwner().isOwner(par2EntityPlayer)){
if(!par3World.isRemote){
PlayerUtils.sendMessageToPlayer(par2EntityPlayer, StatCollector.translateToLocal("messages.reinforcedSlab"), StatCollector.translateToLocal("messages.reinforcedSlab.cannotDoubleSlab"), EnumChatFormatting.RED);
}
return false;
}
}
if((par7 == 1 && !flag || par7 == 0 && flag) && isBlock(block) && j1 == par1ItemStack.getItemDamage()){
if(par3World.checkNoEntityCollision(this.getBlockVariant(i1).getCollisionBoundingBoxFromPool(par3World, par4, par5, par6)) && par3World.setBlock(par4, par5, par6, this.getBlockVariant(block, i1), (block == mod_SecurityCraft.reinforcedStoneSlabs && i1 == 2 ? 2 : j1), 3)){
par3World.playSoundEffect(par4 + 0.5F, par5 + 0.5F, par6 + 0.5F, this.getBlockVariant(block, i1).stepSound.func_150496_b(), (this.getBlockVariant(block, i1).stepSound.getVolume() + 1.0F) / 2.0F, this.getBlockVariant(block, i1).stepSound.getPitch() * 0.8F);
--par1ItemStack.stackSize;
if(owner != null){
((IOwnable) par3World.getTileEntity(par4, par5, par6)).getOwner().set(owner);
}
}
return true;
}else{
return this.func_150946_a(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7) ? true : super.onItemUse(par1ItemStack, par2EntityPlayer, par3World, par4, par5, par6, par7, par8, par9, par10);
}
}
}
@SideOnly(Side.CLIENT)
public boolean func_150936_a(World par1World, int par2, int par3, int par4, int par5, EntityPlayer par6EntityPlayer, ItemStack par7ItemStack){
int i1 = par2;
int j1 = par3;
int k1 = par4;
Block block = par1World.getBlock(par2, par3, par4);
int l1 = par1World.getBlockMetadata(par2, par3, par4);
int i2 = l1 & 7;
boolean flag = (l1 & 8) != 0;
if((par5 == 1 && !flag || par5 == 0 && flag) && block == this.singleSlab && i2 == par7ItemStack.getItemDamage()){
return true;
}else{
if(par5 == 0){
--par3;
}
if(par5 == 1){
++par3;
}
if(par5 == 2){
--par4;
}
if(par5 == 3){
++par4;
}
if(par5 == 4){
--par2;
}
if(par5 == 5){
++par2;
}
Block block1 = par1World.getBlock(par2, par3, par4);
int j2 = par1World.getBlockMetadata(par2, par3, par4);
i2 = j2 & 7;
return block1 == this.singleSlab && i2 == par7ItemStack.getItemDamage() ? true : super.func_150936_a(par1World, i1, j1, k1, par5, par6EntityPlayer, par7ItemStack);
}
}
private boolean func_150946_a(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, int par4, int par5, int par6, int par7){
if(par7 == 0){
--par5;
}
if(par7 == 1){
++par5;
}
if(par7 == 2){
--par6;
}
if(par7 == 3){
++par6;
}
if(par7 == 4){
--par4;
}
if(par7 == 5){
++par4;
}
Block block = par3World.getBlock(par4, par5, par6);
int i1 = par3World.getBlockMetadata(par4, par5, par6);
int j1 = i1 & 7;
Owner owner = null;
if(par3World.getTileEntity(par4, par5, par6) instanceof IOwnable){
owner = ((IOwnable) par3World.getTileEntity(par4, par5, par6)).getOwner();
}
if(block == this.singleSlab && j1 == par1ItemStack.getItemDamage()){
if(par3World.checkNoEntityCollision(this.getBlockVariant(i1).getCollisionBoundingBoxFromPool(par3World, par4, par5, par6)) && par3World.setBlock(par4, par5, par6, this.getBlockVariant(i1), j1, 3)){
par3World.playSoundEffect(par4 + 0.5F, par5 + 0.5F, par6 + 0.5F, this.getBlockVariant(i1).stepSound.func_150496_b(), (this.getBlockVariant(i1).stepSound.getVolume() + 1.0F) / 2.0F, this.getBlockVariant(i1).stepSound.getPitch() * 0.8F);
--par1ItemStack.stackSize;
if(owner != null){
((IOwnable) par3World.getTileEntity(par4, par5, par6)).getOwner().set(owner.getUUID(), owner.getName());
}
}
return true;
}else{
return false;
}
}
public Block getBlockVariant(Block slab, int meta){
if(slab == mod_SecurityCraft.reinforcedWoodSlabs){
return mod_SecurityCraft.reinforcedDoubleWoodSlabs;
}
if(slab == mod_SecurityCraft.reinforcedStoneSlabs){
return mod_SecurityCraft.reinforcedDoubleStoneSlabs;
}
if(slab == mod_SecurityCraft.reinforcedDirtSlab){
return mod_SecurityCraft.reinforcedDoubleDirtSlab;
}
return slab;
}
public Block getBlockVariant(int meta){
if(slabType == ReinforcedSlabType.OTHER){
return Block.getBlockFromItem(new ItemStack(mod_SecurityCraft.reinforcedStoneSlabs, 1, meta).getItem());
}else{
return Block.getBlockFromItem(new ItemStack(mod_SecurityCraft.reinforcedWoodSlabs, 1, meta).getItem());
}
}
public boolean isBlock(Block block){
if(slabType == ReinforcedSlabType.OTHER){
return block == mod_SecurityCraft.reinforcedStoneSlabs || block == mod_SecurityCraft.reinforcedDirtSlab;
}else{
return block == mod_SecurityCraft.reinforcedWoodSlabs;
}
}
public static enum ReinforcedSlabType {
WOOD,
OTHER;
}
}