package com.laytonsmith.abstraction.bukkit;
import com.laytonsmith.abstraction.MCEntity;
import com.laytonsmith.abstraction.MCEntityEquipment;
import com.laytonsmith.abstraction.MCItemStack;
import com.laytonsmith.abstraction.enums.MCEquipmentSlot;
import com.laytonsmith.abstraction.enums.MCVersion;
import com.laytonsmith.core.Static;
import org.bukkit.inventory.EntityEquipment;
import java.util.EnumMap;
import java.util.Map;
/**
*
* @author jb_aero
*/
public class BukkitMCEntityEquipment implements MCEntityEquipment {
private EntityEquipment ee;
public BukkitMCEntityEquipment(EntityEquipment equipment) {
this.ee = equipment;
}
@Override
public void clearEquipment() {
ee.clear();
}
@Override
public int getSize() {
return MCEquipmentSlot.values().length;
}
@Override
public MCEntity getHolder() {
return BukkitConvertor.BukkitGetCorrectEntity(ee.getHolder());
}
@Override
public Map<MCEquipmentSlot, MCItemStack> getAllEquipment() {
Map<MCEquipmentSlot, MCItemStack> slots = new EnumMap<MCEquipmentSlot, MCItemStack>(MCEquipmentSlot.class);
for (MCEquipmentSlot key : MCEquipmentSlot.values()) {
switch (key) {
case WEAPON:
slots.put(key, getWeapon());
break;
case OFF_HAND:
if(Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9)){
slots.put(key, getItemInOffHand());
}
break;
case HELMET:
slots.put(key, getHelmet());
break;
case CHESTPLATE:
slots.put(key, getChestplate());
break;
case LEGGINGS:
slots.put(key, getLeggings());
break;
case BOOTS:
slots.put(key, getBoots());
break;
}
}
return slots;
}
@Override
public void setAllEquipment(Map<MCEquipmentSlot, MCItemStack> slots) {
MCItemStack stack = null;
for (MCEquipmentSlot key : slots.keySet()) {
stack = slots.get(key);
switch (key) {
case WEAPON:
setWeapon(stack);
break;
case OFF_HAND:
if(Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9)){
setItemInOffHand(stack);
}
break;
case HELMET:
setHelmet(stack);
break;
case CHESTPLATE:
setChestplate(stack);
break;
case LEGGINGS:
setLeggings(stack);
break;
case BOOTS:
setBoots(stack);
break;
}
}
}
@Override
public Map<MCEquipmentSlot, Float> getAllDropChances() {
Map<MCEquipmentSlot, Float> slots = new EnumMap<MCEquipmentSlot, Float>(MCEquipmentSlot.class);
for (MCEquipmentSlot key : MCEquipmentSlot.values()) {
switch (key) {
case WEAPON:
slots.put(key, getWeaponDropChance());
break;
case OFF_HAND:
if(Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9)){
slots.put(key, getOffHandDropChance());
}
break;
case HELMET:
slots.put(key, getHelmetDropChance());
break;
case CHESTPLATE:
slots.put(key, getChestplateDropChance());
break;
case LEGGINGS:
slots.put(key, getLeggingsDropChance());
break;
case BOOTS:
slots.put(key, getBootsDropChance());
break;
}
}
return slots;
}
@Override
public void setAllDropChances(Map<MCEquipmentSlot, Float> slots) {
float chance;
for (MCEquipmentSlot key : slots.keySet()) {
chance = slots.get(key);
switch (key) {
case WEAPON:
setWeaponDropChance(chance);
break;
case OFF_HAND:
if(Static.getServer().getMinecraftVersion().gte(MCVersion.MC1_9)){
setOffHandDropChance(chance);
}
break;
case HELMET:
setHelmetDropChance(chance);
break;
case CHESTPLATE:
setChestplateDropChance(chance);
break;
case LEGGINGS:
setLeggingsDropChance(chance);
break;
case BOOTS:
setBootsDropChance(chance);
break;
}
}
}
// For the purposes of faking a normal inventory, we most likely will not be accessing
// anything below this line, but they are here for flexibility and completion
@Override
public MCItemStack getWeapon() {
return new BukkitMCItemStack(ee.getItemInHand());
}
@Override
public MCItemStack getItemInOffHand() {
return new BukkitMCItemStack(ee.getItemInOffHand());
}
@Override
public MCItemStack getHelmet() {
return new BukkitMCItemStack(ee.getHelmet());
}
@Override
public MCItemStack getChestplate() {
return new BukkitMCItemStack(ee.getChestplate());
}
@Override
public MCItemStack getLeggings() {
return new BukkitMCItemStack(ee.getLeggings());
}
@Override
public MCItemStack getBoots() {
return new BukkitMCItemStack(ee.getBoots());
}
@Override
public void setWeapon(MCItemStack stack) {
ee.setItemInHand(((BukkitMCItemStack) stack).asItemStack());
}
@Override
public void setItemInOffHand(MCItemStack stack) {
ee.setItemInOffHand(((BukkitMCItemStack) stack).asItemStack());
}
@Override
public void setHelmet(MCItemStack stack) {
ee.setHelmet(((BukkitMCItemStack) stack).asItemStack());
}
@Override
public void setChestplate(MCItemStack stack) {
ee.setChestplate(((BukkitMCItemStack) stack).asItemStack());
}
@Override
public void setLeggings(MCItemStack stack) {
ee.setLeggings(((BukkitMCItemStack) stack).asItemStack());
}
@Override
public void setBoots(MCItemStack stack) {
ee.setBoots(((BukkitMCItemStack) stack).asItemStack());
}
@Override
public float getWeaponDropChance() {
return ee.getItemInHandDropChance();
}
@Override
public float getOffHandDropChance() {
return ee.getItemInOffHandDropChance();
}
@Override
public float getHelmetDropChance() {
return ee.getHelmetDropChance();
}
@Override
public float getChestplateDropChance() {
return ee.getChestplateDropChance();
}
@Override
public float getLeggingsDropChance() {
return ee.getLeggingsDropChance();
}
@Override
public float getBootsDropChance() {
return ee.getBootsDropChance();
}
@Override
public void setWeaponDropChance(float chance) {
ee.setItemInHandDropChance(chance);
}
@Override
public void setOffHandDropChance(float chance) {
ee.setItemInOffHandDropChance(chance);
}
@Override
public void setHelmetDropChance(float chance) {
ee.setHelmetDropChance(chance);
}
@Override
public void setChestplateDropChance(float chance) {
ee.setChestplateDropChance(chance);
}
@Override
public void setLeggingsDropChance(float chance) {
ee.setLeggingsDropChance(chance);
}
@Override
public void setBootsDropChance(float chance) {
ee.setBootsDropChance(chance);
}
}