package joshie.harvest.mining.block;
import com.mojang.realmsclient.gui.ChatFormatting;
import joshie.harvest.core.HFTab;
import joshie.harvest.core.base.block.BlockHFEnumCube;
import joshie.harvest.core.helpers.ChatHelper;
import joshie.harvest.core.helpers.TextHelper;
import joshie.harvest.core.lib.HFModInfo;
import joshie.harvest.mining.HFMining;
import joshie.harvest.mining.block.BlockStone.Type;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving.SpawnPlacementType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static joshie.harvest.mining.block.BlockStone.Type.LADDER_HOLE;
public class BlockStone extends BlockHFEnumCube<BlockStone, Type> {
public enum Type implements IStringSerializable {
REAL(false), DECORATIVE_BLANK(true), DECORATIVE_PURPLE(true), DECORATIVE_SILVER(true), DECORATIVE_GREEN(true), DECORATIVE_BLUE(true), DECORATIVE_RED(true), LADDER_HOLE(false);
private final boolean isFake;
Type(boolean isFake) {
this.isFake = isFake;
}
public boolean isFake() {
return isFake;
}
@Override
public String getName() {
return name().toLowerCase(Locale.ENGLISH);
}
}
public BlockStone() {
super(Material.ROCK, Type.class, HFTab.MINING);
setSoundType(SoundType.STONE);
}
//TECHNICAL
@SuppressWarnings("deprecation")
@Override
public float getBlockHardness(IBlockState state, World world, BlockPos pos) {
return !getEnumFromState(state).isFake ? -1F: 4F;
}
@Override
public boolean canEntityDestroy(IBlockState state, IBlockAccess world, BlockPos pos, Entity entity) {
return getEnumFromState(state).isFake;
}
@Override
public float getExplosionResistance(World world, BlockPos pos, @Nonnull Entity exploder, Explosion explosion) {
return !getEnumFromState(world.getBlockState(pos)).isFake ? 60000000F : 14F;
}
@Override
public int getToolLevel(Type type) {
return 2;
}
@Override
@Nonnull
public List<ItemStack> getDrops(@Nonnull IBlockAccess world, @Nonnull BlockPos pos, @Nonnull IBlockState state, int fortune) {
ArrayList<ItemStack> ret = new ArrayList<>();
if (getEnumFromState(world.getBlockState(pos)).isFake()) {
ret.add(new ItemStack(HFMining.STONE, 1, getEnumFromState(world.getBlockState(pos)).ordinal()));
}
return ret;
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (getEnumFromState(state) == LADDER_HOLE) {
if (heldItem != null && heldItem.getItem() == Item.getItemFromBlock(HFMining.LADDER)) {
world.setBlockState(pos, world.getBlockState(pos.down()));
heldItem.splitStack(1);
return true;
} else if (world.isRemote) ChatHelper.displayChat(ChatFormatting.ITALIC + TextHelper.translate("stone.ladder.hole.whisper"));
}
return false;
}
@Override
public boolean canSilkHarvest(World world, BlockPos pos, @Nonnull IBlockState state, EntityPlayer player) {
return false;
}
@Override
public boolean canCreatureSpawn(@Nonnull IBlockState state, @Nonnull IBlockAccess world, @Nonnull BlockPos pos, SpawnPlacementType type) {
return false;
}
@Override
public String getItemStackDisplayName(ItemStack stack) {
String unlocalized = getUnlocalizedName();
String name = getEnumFromStack(stack).isFake() ? "decorative" : stack.getItem().getUnlocalizedName(stack);
return TextHelper.localizeFully(unlocalized + "." + name);
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List<String> list, boolean flag) {
int adjusted = Math.max(0, Math.min(Type.values().length, stack.getItemDamage()));
Type type = Type.values()[adjusted];
if (type.isFake()) {
list.add(TextFormatting.YELLOW + TextHelper.translate("tooltip.cosmetic"));
}
}
@SideOnly(Side.CLIENT)
public void registerModels(Item item, String name) {
for (int i = 0; i < values.length; i++) {
ModelLoader.setCustomModelResourceLocation(item, i, new ModelResourceLocation(new ResourceLocation(HFModInfo.MODID, "mine/mine_wall_" + getEnumFromMeta(i).getName()), "inventory"));
}
}
}