package mhfc.net.common.item;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ImmutableList;
import mhfc.net.common.weapon.melee.greatsword.ItemGreatsword;
import mhfc.net.common.weapon.melee.hammer.ItemHammer;
import mhfc.net.common.weapon.melee.huntinghorn.ItemHuntingHorn;
import mhfc.net.common.weapon.melee.longsword.ItemLongsword;
import mhfc.net.common.weapon.range.bow.ItemBow;
import mhfc.net.common.weapon.range.bowgun.heavy.ItemHeavyBowgun;
import mhfc.net.common.weapon.range.bowgun.light.ItemLightBowgun;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
public enum ItemType {
ARMOR_HEAD(GeneralType.ARMOR) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemArmor) && ((ItemArmor) item).armorType == 0;
}
@Override
public String getNameString() {
return "type.armor_head.name";
}
},
ARMOR_BODY(GeneralType.ARMOR) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemArmor) && ((ItemArmor) item).armorType == 1;
}
@Override
public String getNameString() {
return "type.armor_body.name";
}
},
ARMOR_PANTS(GeneralType.ARMOR) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemArmor) && ((ItemArmor) item).armorType == 2;
}
@Override
public String getNameString() {
return "type.armor_pants.name";
}
},
ARMOR_BOOTS(GeneralType.ARMOR) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemArmor) && ((ItemArmor) item).armorType == 3;
}
@Override
public String getNameString() {
return "type.armor_boots.name";
}
},
WEAPON_GREAT_SWORD(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemGreatsword);
}
@Override
public String getNameString() {
return "type.weapon_great_sword.name";
}
},
WEAPON_LONG_SWORD(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemLongsword);
}
@Override
public String getNameString() {
return "type.weapon_long_sword.name";
}
},
WEAPON_HAMMER(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemHammer);
}
@Override
public String getNameString() {
return "type.weapon_hammer.name";
}
},
WEAPON_HUNTING_HORN(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemHuntingHorn);
}
@Override
public String getNameString() {
return "type.weapon_hunting_horn.name";
}
},
WEAPON_SWORD_AND_SHIELD(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
// TODO Auto-generated method stub
return false;
}
@Override
public String getNameString() {
return "type.weapon_sword_shield.name";
}
},
WEAPON_DOUBLE_SWORD(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
// TODO Auto-generated method stub
return false;
}
@Override
public String getNameString() {
return "type.weapon_double_sword.name";
}
},
WEAPON_LANCE(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
// TODO Auto-generated method stub
return false;
}
@Override
public String getNameString() {
return "type.weapon_lance.name";
}
},
WEAPON_GUNLANCE(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
// TODO Auto-generated method stub
return false;
}
@Override
public String getNameString() {
return "type.weapon_gunlance.name";
}
},
WEAPON_BOW(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemBow);
}
@Override
public String getNameString() {
return "type.weapon_bow.name";
}
},
WEAPON_SMALL_BOWGUN(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemLightBowgun);
}
@Override
public String getNameString() {
return "type.weapon_small_bowgun.name";
}
},
WEAPON_BIG_BOWGUN(GeneralType.WEAPON) {
@Override
public boolean isTypeOf(Item item) {
return (item instanceof ItemHeavyBowgun);
}
@Override
public String getNameString() {
return "type.weapon_big_bowgun.name";
}
},
NO_OTHER(GeneralType.NONE) {
@Override
public boolean isTypeOf(Item item) {
return false;
}
@Override
public String getNameString() {
return "type.no_item.name";
}
};
public static enum GeneralType {
ARMOR,
WEAPON,
NONE;
}
public final static List<ItemType> weaponTypes;
public final static List<ItemType> armorTypes;
public final static List<ItemType> allTypes = ImmutableList.copyOf(ItemType.values());
static {
List<ItemType> weapons = new ArrayList<>();
List<ItemType> armors = new ArrayList<>();
for (ItemType type : allTypes) {
switch (type.generalType) {
case ARMOR:
armors.add(type);
break;
case WEAPON:
weapons.add(type);
default:
break;
}
}
weaponTypes = ImmutableList.copyOf(weapons);
armorTypes = ImmutableList.copyOf(armors);
}
public static ItemType getTypeOf(ItemStack stack) {
if (stack == null) {
return NO_OTHER;
}
Item item = stack.getItem();
return getTypeOf(item);
}
public static ItemType getTypeOf(Item item) {
for (ItemType type : allTypes) {
if (type.isTypeOf(item)) {
return type;
}
}
return NO_OTHER;
}
private final GeneralType generalType;
private ItemType(GeneralType genType) {
this.generalType = genType;
}
public GeneralType getGeneralType() {
return generalType;
}
/**
* Returns the ordinal of the enum in the subgroup of weapon types. If the enum is not a weapon type, -1 is returned
*
*/
public int getWeaponOrdinal() {
if (generalType == GeneralType.WEAPON) {
return ordinal() - WEAPON_BIG_BOWGUN.ordinal();
}
return -1;
}
/**
* Returns the ordinal of the enum in the subgroup of armor types. If the enum is not an armor type, -1 is returned
*
*/
public int getArmorOrdinal() {
if (generalType == GeneralType.ARMOR) {
return ordinal() - ARMOR_BODY.ordinal();
}
return -1;
}
public abstract boolean isTypeOf(Item item);
public abstract String getNameString();
}