Untitled

 avatar
unknown
java
4 years ago
50 kB
5
Indexable
package com.rs.game.player;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import com.rs.cache.loaders.ItemDefinitions;
import com.rs.game.Animation;
import com.rs.game.Entity;
import com.rs.game.Graphics;
import com.rs.game.WorldTile;
import com.rs.game.activites.duel.ArenaControler;
import com.rs.game.activites.lastmanstanding.game.LastManStandingGameController;
import com.rs.game.activites.lastmanstanding.lobby.LastManStandingLobbyController;
import com.rs.game.activites.lastmanstanding.postgame.LastManStandingPostGameController;
import com.rs.game.item.Item;
import com.rs.game.item.ItemsContainer;
import com.rs.game.npc.NPC;
import com.rs.game.npc.others.Revenant;
import com.rs.game.player.actions.firemaking.Bonfire;
import com.rs.game.player.content.ItemConstants;
import com.rs.game.player.content.Magic;
import com.rs.game.player.content.SkillCapeCustomizer;
import com.rs.game.player.content.items.EliteOutfits;
import com.rs.game.player.content.items.PrayerBooks;
import com.rs.game.player.controllers.DungeonController;
import com.rs.game.player.dialogue.impl.Transportation;
import com.rs.game.player.rebirth.data.RebirthSkillsData.RebirthPerks;
import com.rs.game.player.rebirth.data.RebirthSkillsData.RebirthPerks10;
import com.rs.network.protocol.codec.decode.WorldPacketsDecoder;
import com.rs.network.protocol.codec.decode.impl.ButtonHandler;
import com.rs.utils.Colors;
import com.rs.utils.ItemExamines;
import com.rs.utils.ItemWeights;
import com.rs.utils.Utils;

import lombok.val;

public final class Equipment implements Serializable {

	public static final class SavedCosmetic implements Serializable {

		/**
		 * 
		 */
		private static final long serialVersionUID = 3243926269985535095L;
		private ItemsContainer<Item> cosmeticItems;
		private String cosmeticName;

		public SavedCosmetic(String cosmeticName, ItemsContainer<Item> cosmeticItems) {
			this.cosmeticName = cosmeticName;
			this.cosmeticItems = cosmeticItems;
		}

		public ItemsContainer<Item> getCosmeticItems() {
			return cosmeticItems;
		}

		public String getCosmeticName() {
			return cosmeticName;
		}

	}

	private static final long serialVersionUID = -4147163237095647617L;

	public static final byte SLOT_HAT = 0, SLOT_CAPE = 1, SLOT_AMULET = 2, SLOT_WEAPON = 3, SLOT_CHEST = 4,
			SLOT_SHIELD = 5, SLOT_LEGS = 7, SLOT_HANDS = 9, SLOT_FEET = 10, SLOT_RING = 12, SLOT_ARROWS = 13,
			SLOT_AURA = 14, SLOT_POCKET = 17;

	public static boolean hideArms(Item item) {
		return item.getDefinitions().getEquipType() == 6;
	}

	/**
	 * public static boolean scrimshaw(Item item) { String name =
	 * item.getName().toLowerCase(); return item.getDefinitions().getEquipType() ==
	 * 17 || name.contains("scrimshaw"); }
	 **/

	public static boolean hideHair(Item item) {
		String name = item.getName().toLowerCase();
		return item.getDefinitions().getEquipType() == 8 || name.contains("full helm")
				|| (name.startsWith("void") && name.contains("ranger")) || name.contains("dragon mask")
				|| name.contains("we'en mask") || name.contains("fox mask");
	}

	public static boolean showBear(Item item) {
		String name = item.getName().toLowerCase();
		return !hideHair(item) || name.contains("horns") || name.contains("hat") || name.contains("afro")
				|| name.contains("bronze full") || name.contains("cowl") || name.contains("tattoo")
				|| name.contains("headdress") || name.contains("hood") || name.contains("bearhead")
				|| name.equals("santa hat") || name.contains("partyhat") || name.contains("sleeping")
				|| name.contains("coif") || name.contains("wig") || name.contains("bandana") || name.contains("mitre")
				|| (name.contains("mask") && !name.contains("ween") && !name.contains("sirenic"))
				|| name.contains("med helm") || name.contains("chicken head")
				|| (name.contains("helm") && !name.contains("full") || name.contains("headwear")
						|| item.getId() == 32386);
	}

	private ItemsContainer<Item> items;
	private boolean[] hiddenSlots;
	private boolean hideAll;
	private transient double equipmentWeight;

	public void checkItems() {
		if (cosmeticItems == null) {
			cosmeticItems = new ItemsContainer<>(19, false);
		}
		if (keepSakeItems == null) {
			keepSakeItems = new ArrayList<>(50);
		}
		if (savedCosmetics == null) {
			savedCosmetics = new ArrayList<>();
		}
		int size = items.getSize();
		int newSize = 15;
		if (size != newSize) {
			Item[] copy = items.getItemsCopy();
			items = new ItemsContainer<Item>(newSize, false);
			items.addAll(copy);
		}
		for (int i = 0; i < size; i++) {
			Item item = items.get(i);
			if (item == null) {
				continue;
			}
			if (!ItemConstants.canWear(item, player)) {
				items.set(i, null);
				player.getInventory().addItemDrop(item.getId(), item.getAmount());
			}
		}
	}

	private transient Player player;

	private transient int equipmentHpIncrease;
	// cosmetics
	private ItemsContainer<Item> cosmeticItems;
	private transient ItemsContainer<Item> cosmeticPreviewItems;
	private List<Item> keepSakeItems;
	private List<SavedCosmetic> savedCosmetics;
	private int costumeColor;

	static final int[] DISABLED_SLOTS = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 };

	// try
	public static int getItemSlot(int itemId) {
		if (itemId == 14632) {
			return Equipment.SLOT_SHIELD;
		}
		if (itemId == 1917 || itemId == 1963 || itemId == 8794 || itemId == 288) {
			return -1;
		}
		return ItemDefinitions.getItemDefinitions(itemId).getEquipSlot();
	}

	public static boolean isTwoHandedWeapon(Item item) {
		return item.getDefinitions().getEquipType() == 5;
	}

	/**
	 * Sets the attack render animation.
	 * 
	 * @param player The player to set the r'emote to.
	 */
	public int getWeaponStance() {
		boolean combatStance = player.getCombatDefinitions().isCombatStance();
		Item weapon = items.get(3);
		if (weapon == null) {
			Item offhand = items.get(SLOT_SHIELD);
			if (offhand == null) {
				return combatStance ? 2688 : 2699;
			}
			int emote = offhand.getDefinitions().getCombatOpcode(combatStance ? 2955 : 2954);
			return emote == 0 ? combatStance ? 2688 : 2699 : emote;
		}
		int emote = weapon.getDefinitions().getCombatOpcode(combatStance ? 2955 : 2954);
		if (weapon.getId() == 4084) {
			return 1119;
		}
		return emote == 0 ? combatStance ? 2688 : 2699 : emote;
	}

	public Equipment() {
		items = new ItemsContainer<Item>(15, false);
		cosmeticItems = new ItemsContainer<>(15, false);
		keepSakeItems = new ArrayList<>(50);
		savedCosmetics = new ArrayList<>();
		hiddenSlots = new boolean[15];
	}

	public void deleteItem(int itemId, int amount) {
		Item[] itemsBefore = items.getItemsCopy();
		items.remove(new Item(itemId, amount));
		refreshItems(itemsBefore);
	}

	public int getAmmoId() {
		Item item = items.get(SLOT_ARROWS);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getAmuletId() {
		Item item = items.get(SLOT_AMULET);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getAuraId() {
		Item item = items.get(SLOT_AURA);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	/**
	 * public int getScrimshawId() { Item item = items.get(SLOT_POCKET); if (item ==
	 * null) return -1; return item.getId(); }
	 **/

	public int getBootsId() {
		Item item = items.get(SLOT_FEET);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getCapeId() {
		Item item = items.get(SLOT_CAPE);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getChestId() {
		Item item = items.get(SLOT_CHEST);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getEquipmentHpIncrease() {
		return equipmentHpIncrease;
	}

	public int getGlovesId() {
		Item item = items.get(SLOT_HANDS);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getHatId() {
		Item item = items.get(SLOT_HAT);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public Item getItem(int slot) {
		return items.get(slot);
	}

	public ItemsContainer<Item> getItems() {
		return items;
	}

	public int getLegsId() {
		Item item = items.get(SLOT_LEGS);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getRingId() {
		Item item = items.get(SLOT_RING);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getShieldId() {
		Item item = items.get(SLOT_SHIELD);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public int getWeaponId() {
		Item item = items.get(SLOT_WEAPON);
		if (item == null) {
			return -1;
		}
		return item.getId();
	}

	public boolean hasShield() {
		return items.get(5) != null;
	}

	public boolean hasTwoHandedWeapon() {
		Item weapon = items.get(SLOT_WEAPON);
		return weapon != null && isTwoHandedWeapon(weapon);
	}

	public void init() {
		if (cosmeticItems == null) {
			cosmeticItems = new ItemsContainer<>(15, false);
		}
		if (hiddenSlots == null) {
			hiddenSlots = new boolean[15];
		}
		if (keepSakeItems == null) {
			keepSakeItems = new ArrayList<>(50);
		}
		if (savedCosmetics == null) {
			savedCosmetics = new ArrayList<>();
		}
		player.getPackets().sendItems(94, items);
		refresh(null);
	}

	public void refreshItemContainer() {
		player.getPackets().sendItems(94, items);
		refresh();
	}

	public void refresh(int... slots) {
		if (slots != null) {
			if (player.getTemporaryAttributtes().get("Cosmetics") != null) {
				Item[] cosmetics = items.getItemsCopy();
				for (int i = 0; i < cosmetics.length; i++) {
					Item item = cosmetics[i];
					if (item == null) {
						cosmetics[i] = new Item(0);
					}
				}
				player.getPackets().sendUpdateItems(94, cosmetics, slots);
			} else {
				player.getPackets().sendUpdateItems(94, items, slots);
			}
			player.getCombatDefinitions().checkAttackStyle();
		}
		player.getCombatDefinitions().refreshBonuses();
		refreshConfigs(slots == null);
	}

	public int rebirthHpIncrease() {
		boolean hpRebirthPerk = player.Rebirth().isActivatedFirstPerk(RebirthPerks.CONSTITUION);
		// if (hpRebirthPerk) {
		// return (int) player.Rebirth().getFirstPerkBenefit(RebirthPerks.CONSTITUION);
		// }
		return 0;
	}

	private int hpIncrease(int equipSlot, int itemId) {
		switch (equipSlot) {
		case Equipment.SLOT_HAT:
			switch (itemId) {
			// elite nex armour
			case 18418:
			case 18428:
			case 18438:
				return 69;
			// nex armour
			case 20135:// torva
			case 20137:// augmented torva
			case 20147:// pernix
			case 20149:// augmented pernix
			case 20159:// virtus
			case 20161:// augmented virtus
				return 66;
			case 26325:// tetsu helm
			case 26328: // Tetsu helm (worn)
			case 26337:// seasinger
			case 26340: // Seasinger's hood (worn)
			case 26346:// death lotus
			case 26349: // Death Lotus hood (worn)
				return 93;
			case 26322:// superior tetsu helm
			case 26334:// superior sea singer
			case 26352:// superior death lotus
				return 106;
			case 18376:// elite bandos helm
			case 18386:// elite armadyl helm
			case 18396:// elite dragon mage
				return 26;
			}
			break;
		case Equipment.SLOT_CHEST:
			switch (itemId) {
			// elite nex armour
			case 18420:
			case 18430:
			case 18440:
				return 211;
			case 20139:// torva
			case 20141:// torva
			case 20151:// pernix
			case 20153:// pernix
			case 20163:// virtus
			case 20165:// virtus
			case 36481:// augmented torva
			case 36485:// augmented pernix
			case 36477:// augmented virtus
				return 200;
			case 26326:// tetsu body
			case 26329: // Tetsu body (worn)
			case 26338:// seassinger body
			case 26341: // Seasinger's robe top (worn)
			case 26347:// death lotus body
			case 26350: // Death Lotus chestplate (worn)
				return 280;
			case 26323:// superior tetsu body
			case 26335:// superior tetsu body
			case 26353:// death lotus body
				return 320;
			case 18378: // Elite Bandos chestplate
			case 18412: // Augmented Elite Bandos chestplate
			case 18388: // Elite Armadyl chestplate
			case 18414: // Augmented Elite Armadyl chestplate
			case 18398: // Elite Dragon mage top
			case 18416: // Augmented Elite Dragon mage top
				return 94;
			}
			break;
		case Equipment.SLOT_LEGS:
			switch (itemId) {
			// elite nex armour
			case 18422:
			case 18432:
			case 18442:
				return 138;
			case 20143:
			case 20145: // torva
			case 20155:
			case 20157: // pernix
			case 20167:
			case 20169: // virtus
			case 36483: // augmented torva
			case 36487: // augmented pernix
			case 36479: // augmented virtus
				return 134;
			case 26327:// Tetsu platelegs
			case 26330: // Tetsu platelegs (worn)
			case 26339: // Seasinger's robe bottom
			case 26342: // Seasinger's robe bottom (worn)
			case 26348: // Death Lotus chaps
			case 26351: // Death Lotus chaps (worn)
				return 188;
			case 26324: // Superior tetsu platelegs
			case 26336: // Superior seasinger's robe bottom
			case 26354: // Superior Death Lotus chaps
				return 214;
			case 18380: // Elite Bandos tassets
			case 18413: // Augmented Elite Bandos tassets
			case 18390: // Elite Armadyl chainskirt
			case 18415: // Augmented Elite Armadyl chainskirt
			case 18400: // Elite Dragon mage bottoms
			case 18417: // Augmented Elite Dragon mage bottoms
				return 62;
			}
			break;
		case Equipment.SLOT_FEET:
			switch (itemId) {
			// elite nex armour
			case 18426:
			case 18446:
			case 18436:
				return 27;
			case 18384: // Elite Bandos boots
			case 18394: // Elite Armadyl boots
			case 18404: // Elite Dragon mage boots
				return 10;
			}
			break;
		case Equipment.SLOT_HANDS:
			switch (itemId) {
			// elite nex armour
			case 18424:
			case 18434:
			case 18444:
				return 17;
			case 18382: // Elite Bandos gloves
			case 18392: // Elite Armadyl gloves
			case 18402: // Elite Dragon mage gloves
				return 6;
			}
			break;
		}
		return 0;
	}

	public void refreshConfigs(boolean init) {
		double hpIncrease = 0;
		for (int index = 0; index < items.getSize(); index++) {
			Item item = items.get(index);
			if (item == null) {
				continue;
			}
			refreshItems(item);
			hpIncrease += hpIncrease(index, item.getId());

			if (player.getLastBonfire() > 0) {
				int maxhp = player.getSkills().getLevel(Skills.HITPOINTS) * 10;
				hpIncrease += (maxhp * (Bonfire.getBonfireBoostMultiplier(player)
						* (player.Rebirth().isActivatedSecondPerk(RebirthPerks10.FIREMAKING) ? 1.5 : 1))) - maxhp;
			}
			if (player.getHpBoostMultiplier() != 0) {
				int maxhp = player.getSkills().getLevel(Skills.HITPOINTS) * 10;
				hpIncrease += maxhp * player.getHpBoostMultiplier();
			}
			if (hpIncrease != equipmentHpIncrease) {
				equipmentHpIncrease = (int) hpIncrease;
				if (!init) {
					player.refreshHitPoints();
				}
			}
			double w = 0;
			for (Item item1 : items.getItems()) {
				if (item1 == null) {
					continue;
				}
				w += ItemWeights.getWeight(item1, true);
			}
			equipmentWeight = w;
			player.getPackets().refreshWeight();
		}
	}

	public double getEquipmentWeight() {
		return equipmentWeight;
	}

	public void refreshItems(Item[] itemsBefore) {
		int[] changedSlots = new int[itemsBefore.length];
		int count = 0;
		for (int index = 0; index < itemsBefore.length; index++) {
			if (itemsBefore[index] != items.getItems()[index]) {
				changedSlots[count++] = index;
			}
		}
		int[] finalChangedSlots = new int[count];
		System.arraycopy(changedSlots, 0, finalChangedSlots, 0, count);
		refresh(finalChangedSlots);
	}

	public void handleEquipment(int componentId, int slotId, int itemId, int packetId) {
		player.closeInterfaces();
		if (player.getInterfaceManager().containsInventoryInter()) {
			return;
		}
		int option = packetId == WorldPacketsDecoder.ACTION_BUTTON1_PACKET ? 0
				: packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET ? 1
						: packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET ? 2
								: packetId == WorldPacketsDecoder.ACTION_BUTTON4_PACKET ? 3
										: packetId == WorldPacketsDecoder.ACTION_BUTTON5_PACKET ? 4
												: packetId == WorldPacketsDecoder.ACTION_BUTTON9_PACKET ? 5
														: packetId == WorldPacketsDecoder.ACTION_BUTTON8_PACKET ? 6
																: -1;
		if (option == -1) {
			return;
		}
		ItemDefinitions def = ItemDefinitions.getItemDefinitions(itemId);
		if (itemId >= 39893 && itemId <= 39901) {
			if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
				player.getDialogueManager().startDialogue("AttuneGemstoneArmourD");
				return;
			} else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET) {
				player.getDialogueManager().startDialogue("GemstoneChargesD");
				return;
			}
		}
		// if(option == )
		String clickedOption = def.getEquipmentOptions()[option];
		if (slotId == Equipment.SLOT_CAPE && SkillCapeCustomizer.isCustomizable(itemId)) {
			switch (clickedOption) {
			case "Max Guild":
				Magic.compCapeTeleport(player, 2276, 3315, 1);
				break;
			case "Kandarin Monastery":
				Magic.compCapeTeleport(player, 2606, 3222, 0);
				break;
			case "Summoning restore":
				Long sumRestore = (Long) player.getTemporaryAttributtes().get("sum_restore");
				if (sumRestore != null && sumRestore + 1500000 > Utils.currentTimeMillis()) {
					player.sendMessage("You can only restore your summoning points once every 15 minutes.");
					return;
				}
				player.getSkills().set(Skills.SUMMONING, 99);
				player.getTemporaryAttributtes().put("sum_restore", Utils.currentTimeMillis());
				player.sendMessage("Summoning points restored, you can do this again in 15 minutes.");
				break;
			case "Customise":
				SkillCapeCustomizer.startCustomizing(player, itemId);
				break;
			}
			return;
		}
		switch (componentId) {
		case 6:// HAT
			if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
				if (itemId == 34030 || itemId == 34031 || itemId == 34032 || itemId == 34033 || itemId == 34034
						|| itemId == 34035 || itemId == 34036) {
					player.getDialogueManager().startDialogue("SunglassesD", itemId);
					return;
				}

				if (EliteOutfits.isComponent(itemId)) {
					if (EliteOutfits.wearingSentinel(player)) {
						player.getDialogueManager().startDialogue("SentinelTeleports",
								EliteOutfits.getPrefix(def.getName()));
					} else {
						player.getDialogueManager().startDialogue("SimpleItemMessage", 39745, 1,
								Colors.shade(Colors.SALMON)
										+ "You need to be wearing a full set of matching Sentinel outfit!");
					}
					return;
				}

				if (itemId == 24431) {
					player.setNextGraphics(new Graphics(3187));
					return;
				}
				if (itemId == 35963 || itemId == 35968 || itemId == 35973 || itemId == 35978) {
					Magic.sendNormalTeleportSpell(player, 1, 0, new WorldTile(3134, 3228, 0));
					return;
				}
				if (itemId >= 15493 && itemId <= 15494) {
					player.getDialogueManager().startDialogue("Kuradal");
					return;
				}
				if (itemId == 10507) {
					player.setNextGraphics(new Graphics(263));
					player.setNextAnimation(new Animation(7531));
					player.sendMessage("You act like a reindeer.. I think.");
					player.lock(2);
					return;
				}
				final Item idam = player.getEquipment().getItem(Equipment.SLOT_HAT);
				if (idam != null) {
					if (player.getCharges().checkCharges(idam)) {
						return;
					}
				}
			}
			break;
		case 9:// CAPE
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				if (itemId == 10498 || itemId == 10499 || itemId == 20068) {
					player.sendMessage("You can not operate that.");
				}
				if (itemId == 12645) {
					player.setNextAnimation(new Animation(8903));
					player.setNextGraphics(new Graphics(1566));
					player.lock(6);
				}
				if (def.isMaxCape() || def.isCompletionistCape()) {
					Magic.compCapeTeleport(player, 2274, 3340, 1);
				}
				if (clickedOption.equals("Communicate")) {
					if (itemId == 37694) {
						player.getDialogueManager().startDialogue("SkillingMasterD", false);
						return;
					} else if (itemId == 25450) {
						if (player.getContracts().canTalkToAdvancedMaster(true)) {
							player.getDialogueManager().startDialogue("SkillingMasterD", true);
						}
						return;
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				if (def.isMaxCape() || def.isCompletionistCape()) {
					SkillCapeCustomizer.startCustomizing(player, itemId);
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON8_PACKET:
				final Item idam1 = player.getEquipment().getItem(Equipment.SLOT_CAPE);
				if (idam1 != null) {
					if (player.getCharges().checkCharges(idam1)) {
						return;
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON9_PACKET:
				if (itemId == 20769 || itemId == 20771 || itemId == 32152 || itemId == 32153) {
					SkillCapeCustomizer.startCustomizing(player, itemId);
				}
				break;
			}
			break;
		case 12:// AMULET
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				int amuletId = player.getEquipment().getAmuletId();
				if (amuletId == 37130 || amuletId >= 39298 && amuletId <= 39307) {
					player.getDialogueManager().startDialogue("ChicScarfD", amuletId, true);
					return;
				} else if (amuletId == 21514) {
					player.sendMessage("Your arcane capacitor has "
							+ player.getEquipment().getItem(Equipment.SLOT_AMULET).getCharges()
							+ " charges left in it.");
					return;
				}
				if (amuletId <= 1712 && amuletId >= 1706) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3087, 3496, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() - 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				} else if (amuletId >= 11105 && amuletId <= 11111) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2614, 3382, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				} else if (amuletId == 1704 || amuletId == 10352) {
					player.sendMessage("The amulet has ran out of charges.");
					return;
				} else if (amuletId == 11113) {
					player.sendMessage("The amulet has ran out of charges.");
					return;
				} else if (amuletId >= 3853 && amuletId <= 3867) {
					player.getDialogueManager().startDialogue("Transportation2", "Burthrope Games Room",
							new WorldTile(2880, 3559, 0), "Barbarian Outpost", new WorldTile(2519, 3571, 0),
							"Gamers' Grotto", new WorldTile(2970, 9679, 0), "Corporeal Beast",
							new WorldTile(2886, 4377, 0), amuletId);
					return;
				}
				final Item idam2 = player.getEquipment().getItem(Equipment.SLOT_AMULET);
				if (idam2 != null) {
					if (player.getCharges().checkCharges(idam2)) {
						return;
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				if (itemId <= 1712 && itemId >= 1706) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2918, 3176, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() - 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				} else if (itemId >= 11105 && itemId <= 11111) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3021, 3339, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
				if (itemId <= 1712 && itemId >= 1706) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3105, 3251, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() - 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				} else if (itemId >= 11105 && itemId <= 11111) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2933, 3296, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
				if (itemId <= 1712 && itemId >= 1706) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3293, 3163, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() - 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				} else if (itemId >= 11105 && itemId <= 11111) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3142, 3440, 0))) {
						Item amulet = player.getEquipment().getItem(Equipment.SLOT_AMULET);
						if (amulet != null) {
							amulet.setId(amulet.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_AMULET);
						}
					}
				}
				break;
			}
			break;
		case 15:// WEAPON
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				if (itemId == 15426) {
					player.setNextAnimation(new Animation(12664));
				}
				if (itemId == 20084) {
					player.setNextAnimation(new Animation(15150));
				}
				final Item idam3 = player.getEquipment().getItem(Equipment.SLOT_WEAPON);
				if (idam3 != null) {
					if (player.getCharges().checkCharges(idam3)) {
						return;
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				if (itemId == 20084) {
					player.setNextGraphics(new Graphics(2953));
					player.setNextAnimation(new Animation(15149));
				}
				break;
			}
			break;
		case 18:// BODY
			if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
				final Item idam4 = player.getEquipment().getItem(Equipment.SLOT_CHEST);
				if (idam4 != null) {
					if (player.getCharges().checkCharges(idam4)) {
						return;
					}
				}
			}
			break;
		case 21:// SHIELD
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				final Item idam5 = player.getEquipment().getItem(Equipment.SLOT_SHIELD);
				if (idam5 != null) {
					if (PrayerBooks.isGodBook(idam5.getId(), true)) {
						PrayerBooks.sermanize(player, idam5.getId());
						return;
					}
				}
				int shieldId = player.getEquipment().getShieldId();
				if (shieldId == 11283 || shieldId == 25558 || shieldId == 25561) {
					if (player.getDFSDelay() >= Utils.currentTimeMillis()) {
						player.sendMessage("You must wait two minutes before performing this attack once more.");
						return;
					}
					player.getTemporaryAttributtes().put("dfs_shield_active", true);
				} else if (shieldId == 11284 || shieldId == 25559 || shieldId == 25562) {
					player.sendMessage("You don't have any charges left in your shield.");
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				final Item idam6 = player.getEquipment().getItem(Equipment.SLOT_SHIELD);
				if (idam6.getId() == 14632) {
					player.performInstantSpecial(idam6.getId());
					return;
				}
				if (idam6 != null) {
					if (idam6.getId() == 30014 || idam6.getId() == 30018 || idam6.getId() == 30022) {
						Entity target = (Entity) player.getTemporaryAttributtes().get("last_target");
						if (target != null && !target.isDead() && !target.hasFinished()) {
							if (target instanceof Player) {
								player.sendMessage("You cannot provoke players.");
								return;
							} else if (target instanceof NPC) {
								long lastProvoke = player.getTemporaryAttributtes().get("provoke") == null ? 0
										: (long) player.getTemporaryAttributtes().get("provoke");
								if (lastProvoke > Utils.currentTimeMillis()) {
									final int seconds = (int) ((lastProvoke - Utils.currentTimeMillis()) / 1000 + 1);
									player.sendMessage("You need to wait another " + seconds + " second"
											+ (seconds == 1 ? "" : "s") + " to use provoke.");
									return;
								}
								player.getTemporaryAttributtes().put("provoke", Utils.currentTimeMillis() + 30000);
								target.setTarget(player);
								player.setNextAnimation(new Animation(18130));
							}
						} else {
							player.sendMessage("You need to be engaged in combat to use provoke.");
						}
						return;
					}
					if (player.getCharges().checkCharges(idam6)) {
						return;
					}
				}
				break;
			}
			break;
		case 24:// LEGS
			if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
				final Item idam7 = player.getEquipment().getItem(Equipment.SLOT_LEGS);
				if (idam7 != null) {
					if (player.getCharges().checkCharges(idam7)) {
						return;
					}
				}
			}
			break;
		case 27:// HANDS
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				if (itemId >= 11118 && itemId <= 11124) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2880, 3542, 0))) {
						Item gloves = player.getEquipment().getItem(Equipment.SLOT_HANDS);
						if (gloves != null) {
							gloves.setId(gloves.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_HANDS);
						}
					}
				} else if (itemId == 11126) {
					player.sendMessage("The bracelet has ran out of charges.");
					return;
				}
				final Item idam8 = player.getEquipment().getItem(Equipment.SLOT_HANDS);
				if (itemId >= 13845 && itemId <= 13857) {
					player.sendMessage("Your " + idam8.getName() + " have "
							+ (int) Math.ceil((double) idam8.getCharges() / Revenant.getBrawlersCharges(itemId) * 100)
							+ "% of its charges left.");
					return;
				}
				if (idam8 != null) {
					if (player.getCharges().checkCharges(idam8)) {
						return;
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				if (itemId >= 11118 && itemId <= 11124) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3191, 3367, 0))) {
						Item gloves = player.getEquipment().getItem(Equipment.SLOT_HANDS);
						if (gloves != null) {
							gloves.setId(gloves.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_HANDS);
						}
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
				if (itemId >= 11118 && itemId <= 11124) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3051, 3491, 0))) {
						Item gloves = player.getEquipment().getItem(Equipment.SLOT_HANDS);
						if (gloves != null) {
							gloves.setId(gloves.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_HANDS);
						}
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
				if (itemId >= 11118 && itemId <= 11124) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2655, 3441, 0))) {
						Item gloves = player.getEquipment().getItem(Equipment.SLOT_HANDS);
						if (gloves != null) {
							gloves.setId(gloves.getId() + 2);
							player.getEquipment().refresh(Equipment.SLOT_HANDS);
						}
					}
				}
				break;
			}
			break;
		case 30:// BOOTS
			if (packetId == WorldPacketsDecoder.ACTION_BUTTON2_PACKET) {
				final Item idam9 = player.getEquipment().getItem(Equipment.SLOT_FEET);
				if (idam9 != null) {
					if (idam9.getId() >= 30920 && idam9.getId() <= 30924) {
						if (idam9.getCharges() == 0) {
							player.sendMessage("There are no charges left in your Silverhawk boots.");
						} else {
							player.sendMessage("There " + (idam9.getCharges() == 1 ? "is " : "are ")
									+ idam9.getCharges() + " charges left in your Silverhawk boots.");
						}
						return;
					}
					if (player.getCharges().checkCharges(idam9)) {
						return;
					}
				}
			} else if (packetId == WorldPacketsDecoder.ACTION_BUTTON3_PACKET) {
				if (player.isUnderCombat()) {
					player.sendMessage("You need to be out of combat to do this emote.");
					return;
				}
				player.lock(15);
				player.stopAll();
				player.setNextAnimation(new Animation(22794));
				player.setNextGraphics(new Graphics(4604));
				player.setNextGraphics(new Graphics(4603));
				return;
			}
			break;
		case 33:// RING
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				if (itemId == 15707 || ItemDefinitions.getItemDefinitions(itemId).isRingOfKinship()) {
					player.getDungManager().openPartyInterface();
					return;
				}
				if (itemId >= 13281 && itemId <= 13288) {
					player.getDialogueManager().startDialogue("Kuradal", 9085);
					return;
				}
				if (itemId == 2572) {
					player.getInterfaceManager().sendBossKillLog();
					return;
				}
				if (itemId >= 34987 && itemId <= 34995) {
					player.getDialogueManager().startDialogue("KethsiRing", itemId, false);
					return;
				}
				if (itemId >= 2552 && itemId <= 2566) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(3315, 3234, 0))) {
						Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
						if (ring != null) {
							if (ring.getId() == 2566) {
								ring.setId(1635);
							} else {
								ring.setId(ring.getId() + 2);
							}
							player.getEquipment().refresh(Equipment.SLOT_RING);
						}
					}
					return;
				}
				if (itemId == 2568) {
					int left = 140 - player.ironOres;
					player.sendMessage("Your ring of forging has " + Colors.RED + left + "</col> charges left.");
					return;
				}
				if (itemId >= 20655 && itemId <= 20659) {
					Magic.sendItemTeleportSpell(player, true, 9603, 1684, 4, new WorldTile(2581, 3845, 0));
					Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
					ring.setId(ring.getId() - 2);
					player.getEquipment().refresh(Equipment.SLOT_RING);
					return;
				}
				if (itemId == 20653) {
					Magic.sendItemTeleportSpell(player, true, 9603, 1684, 4, new WorldTile(2581, 3845, 0));
					Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
					player.getEquipment().refresh(Equipment.SLOT_RING);
					ring.setId(2572);
					return;
				}
				final Item idam9 = player.getEquipment().getItem(Equipment.SLOT_RING);
				if (idam9 != null) {
					if (player.getCharges().checkCharges(idam9)) {
						return;
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				if (itemId == 15707) {
					Magic.daemonheimTeleport(player, new WorldTile(3448, 3699, 0));
					return;
				} else if (ItemDefinitions.getItemDefinitions(itemId).isRingOfKinship()) {
					player.getRingOfKinship().quickSwitch(new Item(itemId));
					return;
				}
				if (itemId >= 13281 && itemId <= 13288) {
					player.getDialogueManager().startDialogue("Kuradal", 9085);
					return;
				}
				if (itemId >= 2552 && itemId <= 2566) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2442, 3088, 0))) {
						Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
						if (ring != null) {
							if (ring.getId() == 2566) {
								ring.setId(1635);
							} else {
								ring.setId(ring.getId() + 2);
							}
							player.getEquipment().refresh(Equipment.SLOT_RING);
						}
					}
				}
				if (itemId >= 20655 && itemId <= 20659) {
					Magic.sendItemTeleportSpell(player, true, 9603, 1684, 4, new WorldTile(3164, 3468, 0));
					Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
					ring.setId(ring.getId() - 2);
					player.getEquipment().refresh(Equipment.SLOT_RING);
					return;
				}
				if (itemId == 20653) {
					Magic.sendItemTeleportSpell(player, true, 9603, 1684, 4, new WorldTile(3164, 3468, 0));
					Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
					ring.setId(2572);
					player.getEquipment().refresh(Equipment.SLOT_RING);
					return;
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
				/*
				 * if (itemId == 15707) { player.sendMessage("You cannot customise your ring.");
				 * return; }
				 */
				if (itemId == 15707 || ItemDefinitions.getItemDefinitions(itemId).isRingOfKinship()) {
					player.getRingOfKinship().openInterface(new Item(itemId, 1));
					// player.getRingOfKinship().openInterface(new Item(itemId, 1));
					// System.out.println(packetId);
					// Magic.daemonheimTeleport(player, new WorldTile(3448,
					// 3699, 0));
					return;
				}
				if (itemId >= 13281 && itemId <= 13288) {
					player.getInterfaceManager().sendInterface(1309);
					return;
				}
				if (itemId >= 2552 && itemId <= 2566) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(2413, 2848, 0))) {
						Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
						if (ring != null) {
							if (ring.getId() == 2566) {
								ring.setId(1635);
							} else {
								ring.setId(ring.getId() + 2);
							}
							player.getEquipment().refresh(Equipment.SLOT_RING);
						}
					}
				}
				break;
			case WorldPacketsDecoder.ACTION_BUTTON5_PACKET:
				if (itemId >= 2552 && itemId <= 2566) {
					if (Magic.sendItemTeleportSpell(player, true, Transportation.EMOTE, Transportation.GFX, 4,
							new WorldTile(1679, 5599, 0))) {
						Item ring = player.getEquipment().getItem(Equipment.SLOT_RING);
						if (ring != null) {
							if (ring.getId() == 2566) {
								ring.setId(1635);
							} else {
								ring.setId(ring.getId() + 2);
							}
							player.getEquipment().refresh(Equipment.SLOT_RING);
						}
					}
				}
				break;
			}
			break;
		case 37:// ARROWS
			break;
		case 46:// AURA
			switch (packetId) {
			case WorldPacketsDecoder.ACTION_BUTTON2_PACKET:
				player.getAuraManager().activate();
				break;
			case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
				player.getAuraManager().sendAuraRemainingTime();
				break;
			case WorldPacketsDecoder.ACTION_BUTTON4_PACKET:
				ButtonHandler.sendRemove(player, Equipment.SLOT_AURA, false);
				player.getAuraManager().removeAura();
				break;
			}
			break;
		case 38:
			player.closeInterfaces();
			ButtonHandler.openEquipmentBonuses(player, false);
			break;
		case 41:
			player.stopAll();
			if (player.getControlerManager().getControler() instanceof DungeonController) {
				// player.getDungeoneeringToolbelt().openToolbelt();
				return;
			}
			player.getInterfaceManager().sendInterface(1178);
			player.getToolBelt().refresh();
			break;
		}
		switch (packetId) {
		case WorldPacketsDecoder.ACTION_BUTTON1_PACKET:
			ButtonHandler.sendRemove(player, componentId == 6 ? 0
					: componentId == 9 ? 1
							: componentId == 12 ? 2
									: componentId == 37 ? 13
											: componentId == 15 ? 3
													: componentId == 18 ? 4
															: componentId == 21 ? 5
																	: componentId == 24 ? 7
																			: componentId == 27 ? 9
																					: componentId == 30 ? 10
																							: componentId == 33 ? 12
																									: componentId == 45
																											? 14
																											: -1,
					false);
			break;
		case WorldPacketsDecoder.ACTION_BUTTON3_PACKET:
			if (itemId == 34200 || itemId == 34205 || itemId == 34210 || itemId == 34215) {
				player.getDialogueManager().startDialogue("SharkConsumeOption");
				return;
			}
			break;
		case WorldPacketsDecoder.ACTION_BUTTON8_PACKET:
			player.getEquipment().sendExamine(componentId == 6 ? 0
					: componentId == 9 ? 1
							: componentId == 12 ? 2
									: componentId == 37 ? 13
											: componentId == 15 ? 3
													: componentId == 18 ? 4
															: componentId == 21 ? 5
																	: componentId == 24 ? 7
																			: componentId == 27 ? 9
																					: componentId == 30 ? 10
																							: componentId == 33 ? 12
																									: componentId == 45
																											? 14
																											: -1);
			break;
		}
	}

	public void removeAmmo(int ammoId, int ammount) {
		if (ammount == -1) {
			val superiorMorrigansJavelinItemId = 39139;
			val superiorMorrigansThrowingAxeItemId = 39143;
			if (ammoId == superiorMorrigansJavelinItemId || ammoId == superiorMorrigansThrowingAxeItemId) {
				return;
			}
			items.remove(SLOT_WEAPON, new Item(ammoId, 1));
			refresh(SLOT_WEAPON);
		} else {
			items.remove(SLOT_ARROWS, new Item(ammoId, ammount));
			refresh(SLOT_ARROWS);
		}
		player.getAppearence().generateAppearenceData();
	}

	public void removeAmmo(int ammoId, int ammount, boolean primary) {
		if (ammount == -1) {
			items.remove(primary ? SLOT_WEAPON : SLOT_SHIELD, new Item(ammoId, 1));
			refresh(primary ? SLOT_WEAPON : SLOT_SHIELD);
		} else {
			items.remove(SLOT_ARROWS, new Item(ammoId, ammount));
			refresh(SLOT_ARROWS);
		}
		player.getAppearence().generateAppearenceData();
	}

	public void setGear(byte gear) {
		int slot = gear;
		items.remove(slot, new Item(items.get(slot)));
		refresh(gear);
	}

	public void reset() {
		items.reset();
		init();
	}

	public void sendExamine(int slotId) {
		Item item = items.get(slotId);
		if (item == null) {
			return;
		}
		player.getPackets().sendGameMessage(ItemExamines.getExamine(item));
	}

	public void setEquipmentHpIncrease(int hp) {
		this.equipmentHpIncrease = hp;
	}

	public void setPlayer(Player player) {
		this.player = player;
	}

	public boolean wearingArmourExceptAura() {
		return getItem(SLOT_HAT) != null || getItem(SLOT_CAPE) != null || getItem(SLOT_AMULET) != null
				|| getItem(SLOT_WEAPON) != null || getItem(SLOT_CHEST) != null || getItem(SLOT_SHIELD) != null
				|| getItem(SLOT_LEGS) != null || getItem(SLOT_HANDS) != null || getItem(SLOT_FEET) != null
				|| getItem(SLOT_ARROWS) != null || getItem(SLOT_RING) != null;
	}

	public boolean wearingArmour() {
		return getItem(SLOT_HAT) != null || getItem(SLOT_CAPE) != null || getItem(SLOT_AMULET) != null
				|| getItem(SLOT_WEAPON) != null || getItem(SLOT_CHEST) != null || getItem(SLOT_SHIELD) != null
				|| getItem(SLOT_LEGS) != null || getItem(SLOT_HANDS) != null || getItem(SLOT_FEET) != null
				|| getItem(SLOT_ARROWS) != null || getItem(SLOT_AURA) != null || getItem(SLOT_RING) != null;
	}

	public ItemsContainer<Item> getItemsContainer() {
		return items;
	}

	public void set(int i, Item item) {
		items.set(i, item);
		refresh();
	}

	public boolean containsOneItem(int... itemIds) {
		for (int itemId : itemIds) {
			if (items.containsOne(new Item(itemId, 1))) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Explicitly used for Warpriest upgrading.
	 * 
	 * @param itemId the Item ID to upgrade.
	 */
	private boolean refreshItems(Item item) {
		int defenceLvl = player.getSkills().getLevelForXp(Skills.DEFENCE);
		int items50[] = { 30306, 30309, 30312, 30315, 30318, 30321, 28773, 28776, 28779, 28782, 28785, 28788, 28755,
				28758, 28761, 28764, 28767, 28770, 30288, 30291, 30294, 30297, 30300, 30303 };
		int items75[] = { 30307, 30310, 30313, 30316, 30319, 30322, 28774, 28777, 28780, 28783, 28786, 28789, 28756,
				28759, 28762, 28765, 28768, 28771, 30289, 30292, 30295, 30298, 30301, 30304 };
		if (defenceLvl >= 50 && defenceLvl < 75) {
			for (int itemId : items50) {
				if (item.getId() == itemId) {
					player.sendMessage("Your " + item.getName() + " upgraded to a higher tier.");
					item.setId(item.getId() + 1);
					return true;
				}
			}
		}
		if (defenceLvl >= 75) {
			for (int itemId : items75) {
				if (item.getId() == itemId) {
					player.sendMessage("Your " + item.getName() + " upgraded to a higher tier.");
					item.setId(item.getId() + 1);
					return true;
				}
			}
			for (int itemId : items50) {
				if (item.getId() == itemId) {
					player.sendMessage("Your " + item.getName() + " upgraded to a higher tier.");
					item.setId(item.getId() + 2);
					return true;
				}
			}
		}
		return false;
	}

	public int getWeaponEndCombatEmote() {
		Item weapon = items.get(3);
		if (weapon == null) {
			Item offhand = items.get(SLOT_SHIELD);
			if (offhand == null) {
				return -1;
			}
			int emote = offhand.getDefinitions().getCombatOpcode(2918);
			return emote == 0 ? 18025 : emote;
		}
		int emote = weapon.getDefinitions().getCombatOpcode(2918);
		return emote == 0 ? 18025 : emote;
	}

	public ItemsContainer<Item> getCosmeticItems() {
		return cosmeticItems;
	}

	public List<Item> getKeepSakeItems() {
		return keepSakeItems;
	}

	public boolean containsKeepSakeItem(int itemId) {
		for (Item item : keepSakeItems) {
			if (item == null) {
				continue;
			}
			if (item.getId() == itemId) {
				return true;
			}
		}
		return false;
	}

	public List<SavedCosmetic> getSavedCosmetics() {
		if (savedCosmetics == null) {
			savedCosmetics = new ArrayList<>();
		}
		return savedCosmetics;
	}

	public boolean[] getHiddenSlots() {
		return hiddenSlots;
	}

	public boolean isCanDisplayCosmetic() {
		if (player.getControlerManager().getControler() != null
				&& player.getControlerManager().getControler() instanceof ArenaControler) {
			return false;
		}
		if (player.getControlerManager().getControler() instanceof LastManStandingLobbyController
				|| player.getControlerManager().getControler() instanceof LastManStandingGameController
				|| player.getControlerManager().getControler() instanceof LastManStandingPostGameController) {
			return false;
		}
		if (player.isOwner()) {
			return true;
		}
		return !player.isCanPvp();
	}

	public int getCostumeColor() {
		return costumeColor;
	}

	public void setCostumeColor(int costumeColor) {
		this.costumeColor = costumeColor;
		player.getAppearence().generateAppearenceData();
	}

	public boolean isHideAll() {
		return hideAll;
	}

	public void setHideAll(boolean hideAll) {
		this.hideAll = hideAll;
	}

	public void resetCosmetics() {
		cosmeticItems.reset();
	}

	public static final class Cosmetic implements Serializable {

		/**
		 * 
		 */
		private static final long serialVersionUID = 3243926269985535095L;
		private ItemsContainer<Item> cosmeticItems;
		private boolean[] hiddenSlots;
		private String cosmeticName;

		public Cosmetic(String cosmeticName, ItemsContainer<Item> cosmeticItems, boolean[] hiddenSlots) {
			this.cosmeticName = cosmeticName;
			this.cosmeticItems = cosmeticItems;
			this.hiddenSlots = hiddenSlots;
		}

		public ItemsContainer<Item> getCosmeticItems() {
			return cosmeticItems;
		}

		public boolean[] getHiddenSlots() {
			return hiddenSlots;
		}

		public String getCosmeticName() {
			return cosmeticName;
		}

	}

	public int getWeaponRenderEmote() {
		Item weapon = items.get(3);
		if (weapon == null) {
			return 1426;
		}
		if (weapon.getName().toLowerCase().contains("mace") || weapon.getName().toLowerCase().contains("halberd")) {
			return 1426;
		}

		return weapon.getDefinitions().getRenderAnimId();
	}

	public ItemsContainer<Item> getCosmeticPreviewItems() {
		return cosmeticPreviewItems;
	}

	public void setCosmeticPreviewItems(ItemsContainer<Item> cosmeticPreviewItems) {
		this.cosmeticPreviewItems = cosmeticPreviewItems;
	}

	public void resetEquipmentSlots() {
		ItemsContainer<Item> i = items.asItemContainer();
		items = new ItemsContainer<Item>(19, false);
		for (int x = 0; x < 19; x++) {
			items.set(x, i.get(x));
		}
	}

	public long getEquipmentValue() {
		long value = 0;
		for (Item equipment : player.getEquipment().getItems().toArray()) {
			if (equipment == null) {
				continue;
			}
			long amount = equipment.getAmount();
			value += equipment.getDefinitions().getValue() * amount;
		}
		return value;
	}

	public void resetExcept(int slot) {
		for (byte i = 0; i <= SLOT_ARROWS; i++) {
			if (i == slot) {
				continue;
			}
			if (items.get(i) != null) {
				setGear(i);
			}
		}
	}
}
Editor is loading...