Code:
public class PickupItem implements PacketType {
private boolean canPickUp(final Client c, final String itemName, final GroundItem item) {
for (Object[] o : c.getDroppedItems()) {
if (((String) o[0]).equalsIgnoreCase(itemName)) {
if (((int) o[1]) == item.getItemAmount()) {
if (((int) o[2]) == c.pItemX) {
if (((int) o[3]) == c.pItemY) {
return true;
}
}
}
}
}
return false;
}
private boolean hasItem(final Client c, final String itemName) {
for (Object[] o : c.getDroppedItems()) {
if (((String) o[0]).equalsIgnoreCase(itemName)) {
return true;
}
}
return false;
}
@Override
public void processPacket(final Client c, int packetType, int packetSize) {
c.pItemY = c.getInStream().readSignedWordBigEndian();
c.pItemId = c.getInStream().readUnsignedWord();
c.pItemX = c.getInStream().readSignedWordBigEndian();
if (Math.abs(c.getX() - c.pItemX) > 25 || Math.abs(c.getY() - c.pItemY) > 25) {
c.resetWalkingQueue();
return;
}
String itemName = c.getItems().getItemName(c.pItemId).toLowerCase();
GameLogger.writeLog(c.playerName, "pickupitem", c.playerName + " picked up " + itemName + " itemX: " + c.pItemX + ", itemY: " + c.pItemY + "");
if(c.playerIsFiremaking) {
return;
}
c.getCombat().resetPlayerAttack();
if(c.getX() == c.pItemX && c.getY() == c.pItemY) {
Server.itemHandler.removeGroundItem(c, c.pItemId, c.pItemX, c.pItemY, true);
c.getPA().requestUpdates();
} else {
c.walkingToItem = true;
Server.getTaskScheduler().addEvent(new Task(1, false) {
public void execute() {
if(!c.walkingToItem)
this.stop();
if(c.getX() == c.pItemX && c.getY() == c.pItemY) {
Server.itemHandler.removeGroundItem(c, c.pItemId, c.pItemX, c.pItemY, true);
c.walkingToItem = false;
this.stop();
}
}
});
}
}
}