package org.bukkit.craftbukkit.inventory;
import net.minecraft.server.EntityInsentient;
import net.minecraft.server.EnumItemSlot;
import org.bukkit.craftbukkit.entity.CraftLivingEntity;
import org.bukkit.entity.Entity;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
public class CraftEntityEquipment implements EntityEquipment {
private final CraftLivingEntity entity;
public CraftEntityEquipment(CraftLivingEntity entity) {
this.entity = entity;
}
@Override
public ItemStack getItemInMainHand() {
return getEquipment(EnumItemSlot.MAINHAND);
}
@Override
public void setItemInMainHand(ItemStack item) {
setEquipment(EnumItemSlot.MAINHAND, item);
}
@Override
public ItemStack getItemInOffHand() {
return getEquipment(EnumItemSlot.OFFHAND);
}
@Override
public void setItemInOffHand(ItemStack item) {
setEquipment(EnumItemSlot.OFFHAND, item);
}
@Override
public ItemStack getItemInHand() {
return getItemInMainHand();
}
@Override
public void setItemInHand(ItemStack stack) {
setItemInMainHand(stack);
}
public ItemStack getHelmet() {
return getEquipment(EnumItemSlot.HEAD);
}
public void setHelmet(ItemStack helmet) {
setEquipment(EnumItemSlot.HEAD, helmet);
}
public ItemStack getChestplate() {
return getEquipment(EnumItemSlot.CHEST);
}
public void setChestplate(ItemStack chestplate) {
setEquipment(EnumItemSlot.CHEST, chestplate);
}
public ItemStack getLeggings() {
return getEquipment(EnumItemSlot.LEGS);
}
public void setLeggings(ItemStack leggings) {
setEquipment(EnumItemSlot.LEGS, leggings);
}
public ItemStack getBoots() {
return getEquipment(EnumItemSlot.FEET);
}
public void setBoots(ItemStack boots) {
setEquipment(EnumItemSlot.FEET, boots);
}
public ItemStack[] getArmorContents() {
ItemStack[] armor = new ItemStack[]{
getEquipment(EnumItemSlot.FEET),
getEquipment(EnumItemSlot.LEGS),
getEquipment(EnumItemSlot.CHEST),
getEquipment(EnumItemSlot.HEAD),
};
return armor;
}
public void setArmorContents(ItemStack[] items) {
setEquipment(EnumItemSlot.FEET, items.length >= 1 ? items[0] : null);
setEquipment(EnumItemSlot.LEGS, items.length >= 2 ? items[1] : null);
setEquipment(EnumItemSlot.CHEST, items.length >= 3 ? items[2] : null);
setEquipment(EnumItemSlot.HEAD, items.length >= 4 ? items[3] : null);
}
private ItemStack getEquipment(EnumItemSlot slot) {
return CraftItemStack.asBukkitCopy(entity.getHandle().getEquipment(slot));
}
private void setEquipment(EnumItemSlot slot, ItemStack stack) {
entity.getHandle().setSlot(slot, CraftItemStack.asNMSCopy(stack));
}
public void clear() {
for (EnumItemSlot slot : EnumItemSlot.values()) {
setEquipment(slot, null);
}
}
public Entity getHolder() {
return entity;
}
@Override
public float getItemInHandDropChance() {
return getItemInMainHandDropChance();
}
@Override
public void setItemInHandDropChance(float chance) {
setItemInMainHandDropChance(chance);
}
@Override
public float getItemInMainHandDropChance() {
return getDropChance(EnumItemSlot.MAINHAND);
}
@Override
public void setItemInMainHandDropChance(float chance) {
setDropChance(EnumItemSlot.MAINHAND, chance);
}
@Override
public float getItemInOffHandDropChance() {
return getDropChance(EnumItemSlot.OFFHAND);
}
@Override
public void setItemInOffHandDropChance(float chance) {
setDropChance(EnumItemSlot.OFFHAND, chance);
}
public float getHelmetDropChance() {
return getDropChance(EnumItemSlot.HEAD);
}
public void setHelmetDropChance(float chance) {
setDropChance(EnumItemSlot.HEAD, chance);
}
public float getChestplateDropChance() {
return getDropChance(EnumItemSlot.CHEST);
}
public void setChestplateDropChance(float chance) {
setDropChance(EnumItemSlot.CHEST, chance);
}
public float getLeggingsDropChance() {
return getDropChance(EnumItemSlot.LEGS);
}
public void setLeggingsDropChance(float chance) {
setDropChance(EnumItemSlot.LEGS, chance);
}
public float getBootsDropChance() {
return getDropChance(EnumItemSlot.FEET);
}
public void setBootsDropChance(float chance) {
setDropChance(EnumItemSlot.FEET, chance);
}
private void setDropChance(EnumItemSlot slot, float chance) {
if (slot == EnumItemSlot.MAINHAND || slot == EnumItemSlot.OFFHAND) {
((EntityInsentient) entity.getHandle()).dropChanceHand[slot.b()] = chance - 0.1F;
} else {
((EntityInsentient) entity.getHandle()).dropChanceArmor[slot.b()] = chance - 0.1F;
}
}
private float getDropChance(EnumItemSlot slot) {
if (slot == EnumItemSlot.MAINHAND || slot == EnumItemSlot.OFFHAND) {
return ((EntityInsentient) entity.getHandle()).dropChanceHand[slot.b()] + 0.1F;
} else {
return ((EntityInsentient) entity.getHandle()).dropChanceArmor[slot.b()] + 0.1F;
}
}
}