package com.asteria.net.message.impl;
import java.util.Optional;
import com.asteria.game.character.player.Player;
import com.asteria.game.item.Item;
import com.asteria.game.item.ItemNode;
import com.asteria.game.item.ItemNodeManager;
import com.asteria.game.location.Position;
import com.asteria.net.ByteOrder;
import com.asteria.net.message.InputMessageListener;
import com.asteria.net.message.MessageBuilder;
/**
* The message sent from the client when a player attempts to pick up an item.
*
* @author lare96 <http://github.com/lare96>
*/
public final class PickupItemMessage implements InputMessageListener {
@Override
public void handleMessage(Player player, int opcode, int size, MessageBuilder payload) {
if (player.isDisabled())
return;
int itemY = payload.getShort(ByteOrder.LITTLE);
int itemId = payload.getShort(false);
int itemX = payload.getShort(ByteOrder.LITTLE);
if (itemY < 0 || itemId < 0 || itemX < 0)
return;
player.setSkillAction(false);
player.getMovementListener().append(() -> {
if (player.getPosition().equals(new Position(itemX, itemY, player.getPosition().getZ()))) {
Position position = new Position(itemX, itemY, player.getPosition().getZ());
Optional<ItemNode> item = ItemNodeManager.getItem(itemId, position);
if (item.isPresent()) {
if (!player.getInventory().spaceFor(new Item(itemId, item.get().getItem().getAmount()))) {
player.getMessages().sendMessage("You don't have " + "enough inventory space to pick this item up.");
return;
}
item.get().onPickup(player);
}
}
});
}
}