Hello all,

Im having an issue where items that should be dropped are going into the abys!

Player1 kills player2, Player2 has 10 noted sharks. Player2 keeps 3 sharks but the other 7 sharks do NOT drop to player1

Any ideas?

Code:
	public List<Item> getValidItems() {
		List<Item> items = new ArrayList<Item>();
		for (Item item : this.items) {
			if (item != null && item.getId() > 0 && item.getAmount() > 0) {
				items.add(item);
			}
		}
		return items;
	}
Code:
	public Item[] getValidItemsArray() {
		List<Item> items = getValidItems();
		Item[] array = new Item[items.size()];
		for(int i = 0; i < items.size(); i++) {
			array[i] = items.get(i);
		}
		return array;
	}
Code:
public class ItemsKeptOnDeath {

	/**
	 * Sends the items kept on death interface for a player.
	 * @param player	Player to send the items kept on death interface for.
	 */
	public static void sendInterface(Player player) {
		clearInterfaceData(player); //To prevent sending multiple layers of items.
		sendInterfaceData(player); //Send info on the interface.
		player.getPacketSender().sendInterface(17100); //Open the interface.
	}

	/**
	 * Sends the items kept on death data for a player.
	 * @param player	Player to send the items kept on death data for.
	 */
	public static void sendInterfaceData(Player player) {
		/**
		 * Sends text info
		 */
		int size = getAmountToKeep(player);
		String[] infoToFill = new String[6];
		switch(size) {
		case 0: //Player must be skulled WITHOUT the protect item prayer/curse active, player will keep 0 items.
			infoToFill[0] = "You are skulled and will"; infoToFill[1] = "not keep any items on"; infoToFill[2] = "death.";
			break;
		case 1: //Player must be skulled but have the protect item prayer/curse active, player will keep 1 item.
		case 4: //Player is not skulled & has protect item prayer/curse active, player will keep 4 items. Send this info.
			infoToFill[0] = "You have the Protect Item"; infoToFill[1] = "prayer/curse active."; infoToFill[2] = "Therefore`, you will keep"; infoToFill[3] = "an extra item on death.";
			break;
		case 2: //No such case where a player can keep 2 items.
			break;
		case 3: // Player has no factors active, size of array is 3 and player will keep 3 items.
			infoToFill[0] = "You will keep 3 items"; infoToFill[1] = "on death since you"; infoToFill[2] = "have no factors active.";
			break;
		}
		infoToFill[4] = "@red@All untradeable items"; infoToFill[5] = "@red@are automatically kept.";
		for(int i = 0; i < infoToFill.length; i++)
			if(infoToFill[i] == null)
				player.getPacketSender().sendString(17143 + i, "");
			else
				player.getPacketSender().sendString(17143 + i, infoToFill[i]);
		player.getPacketSender().sendMessage("@red@Note: All untradeable items are automatically kept on death!");
		ArrayList<Item> toKeep = getItemsToKeep(player);
		for(int i = 0; i < toKeep.size(); i++) {
			player.getPacketSender().sendItemOnInterface(17108+i, toKeep.get(i).getId(), 1);
		}
		int toSend = 17112;
		for(Item item : Misc.concat(player.getInventory().getItems(), player.getEquipment().getItems())) {
			if(item == null || item.getId() <= 0 || item.getAmount() <= 0 || !item.tradeable() || toKeep.contains(item)) {
				continue;
			}
			if(toSend >= 17142)
				toSend = 17150;
			if(toSend >= 17160)
				break;
			player.getPacketSender().sendItemOnInterface(toSend, item.getId(), item.getAmount());
			toSend++;
		}
		infoToFill = null;
	}

	/**
	 * Clears the items kept on death interface for a player.
	 * @param player	Player to clear the items kept on death interface for.
	 */
	public static void clearInterfaceData(Player player) {
		player.getPacketSender().sendString(17107, "");
		for(int i = 17108; i <= 17142; i++)
			player.getPacketSender().sendItemOnInterface(i, -1, 1);
		for(int i = 17150; i <= 17160; i++)
			player.getPacketSender().sendItemOnInterface(i, -1, 1);
	}

	/**
	 * Sets the items to keep on death for a player.
	 * @param player	Player to set items for.
	 */
	public static ArrayList<Item> getItemsToKeep(Player player) {
		ArrayList<Item> items = new ArrayList<Item>();
		for(Item item : Misc.concat(player.getInventory().getItems(), player.getEquipment().getItems())) {
			if(item == null || item.getId() <= 0 || item.getAmount() <= 0 || !item.tradeable()) {
				continue;
			}
			items.add(item);
		}
		Collections.sort(items, new Comparator<Item>() {
			@Override
			public int compare(Item item, Item item2) {
				int value1 = item.getDefinition().getValue();
				int value2 = item2.getDefinition().getValue();
				if (value1 == value2) {
					return 0;
				} else if (value1 > value2) {
					return -1;
				} else {
					return 1;
				}
			}
		});
		ArrayList<Item> toKeep = new ArrayList<Item>();
		int amountToKeep = getAmountToKeep(player);
		for(int i = 0; i < amountToKeep && i < items.size(); i++) {
			toKeep.add(items.get(i));
		}
		return toKeep;
	}

	public static int getAmountToKeep(Player player) {
		boolean keepExtraItem = PrayerHandler.isActivated(player, PrayerHandler.PROTECT_ITEM) || CurseHandler.isActivated(player, CurseHandler.PROTECT_ITEM);
		return (player.getSkullTimer() > 0 ? 0 : 3) + (keepExtraItem ? 1 : 0);
	}
}

Any help will be much appreciated thank you

Please