package net.scapeemulator.game.model.player;
import net.scapeemulator.game.model.player.inventory.Inventory;
import net.scapeemulator.game.model.player.skills.runecrafting.Runecrafting;
public final class Equipment {
public static final int HEAD = 0;
public static final int CAPE = 1;
public static final int NECK = 2;
public static final int WEAPON = 3;
public static final int BODY = 4;
public static final int SHIELD = 5;
public static final int LEGS = 7;
public static final int HANDS = 9;
public static final int FEET = 10;
public static final int RING = 12;
public static final int AMMO = 13;
public static void remove(Player player, int slot) {
Inventory inventory = player.getInventory();
Inventory equipment = player.getEquipment();
Item item = equipment.get(slot);
if (item == null)
return;
Item remaining = inventory.add(item);
equipment.set(slot, remaining);
if (remaining == null) {
if (slot == WEAPON) {
player.getPlayerCombatHandler().weaponChanged();
}
equipmentChanged(player, slot, item, null);
}
}
public static void equip(Player player, int slot) {
Inventory inventory = player.getInventory();
Inventory equipment = player.getEquipment();
Item originalWeapon = equipment.get(WEAPON);
Item item = inventory.get(slot);
if (item == null)
return;
EquipmentDefinition def = item.getEquipmentDefinition();
if (def == null)
return;
if (!def.getRequirements().hasRequirementsDisplayAll(player)) {
return;
}
def.getRequirements().fulfillAll(player);
int targetSlot = def.getSlot();
boolean unequipShield = def.getSlot() == WEAPON && def.isTwoHanded() && equipment.get(SHIELD) != null;
boolean unequipWeapon = targetSlot == SHIELD && equipment.get(WEAPON) != null && equipment.get(WEAPON).getEquipmentDefinition().isTwoHanded();
boolean topUpStack = item.getDefinition().isStackable()
&& (equipment.get(targetSlot) != null && item.getId() == equipment.get(targetSlot).getId());
boolean drainStack = equipment.get(targetSlot) != null && equipment.get(targetSlot).getDefinition().isStackable()
&& inventory.contains(equipment.get(targetSlot).getId());
if ((unequipShield || unequipWeapon) && inventory.freeSlots() == 0) {
inventory.fireCapacityExceeded();
return;
}
if (topUpStack) {
Item remaining = equipment.add(item);
inventory.set(slot, remaining);
} else {
if (drainStack) {
Item remaining = inventory.add(equipment.get(targetSlot));
equipment.set(targetSlot, remaining);
if (remaining != null)
return;
}
inventory.remove(item, slot);
Item other = equipment.get(targetSlot);
if (other != null) {
inventory.add(other);
}
equipment.set(targetSlot, item);
equipmentChanged(player, targetSlot, other, item);
}
if (unequipShield) {
Item remaining = inventory.add(equipment.get(SHIELD));
equipment.set(SHIELD, remaining);
} else if (unequipWeapon) {
Item remaining = inventory.add(equipment.get(WEAPON));
equipment.set(WEAPON, remaining);
}
Item weapon = equipment.get(WEAPON);
boolean weaponChanged = false;
if (originalWeapon == null && weapon != null)
weaponChanged = true;
else if (weapon == null && originalWeapon != null)
weaponChanged = true;
else if (originalWeapon != null && weapon != null && originalWeapon.getId() != weapon.getId())
weaponChanged = true;
if (weaponChanged) {
player.getPlayerCombatHandler().weaponChanged();
}
}
private static void equipmentChanged(Player p, int slot, Item oldI, Item newI) {
p.calculateEquipmentBonuses();
if (slot == HEAD) {
Runecrafting.checkTiara(p, oldI, newI);
}
}
public static void showEquipmentInterface(Player player) {
player.getInterfaceSet().openWindow(667);
player.sendEquipmentBonuses();
}
private Equipment() {
/* empty */
}
}