package com.asteria.net.message.impl;
import com.asteria.game.World;
import com.asteria.game.character.player.Player;
import com.asteria.game.item.Item;
import com.asteria.game.plugin.context.ItemOnPlayerPlugin;
import com.asteria.net.ByteOrder;
import com.asteria.net.ValueType;
import com.asteria.net.message.InputMessageListener;
import com.asteria.net.message.MessageBuilder;
/**
* The message sent from the client when a player uses an item on another player.
*
* @author lare96 <http://github.com/lare96>
*/
public final class ItemOnPlayerMessage implements InputMessageListener {
@Override
public void handleMessage(Player player, int opcode, int size, MessageBuilder payload) {
if (player.isDisabled())
return;
int container = payload.getShort(ValueType.A, ByteOrder.BIG);
int index = payload.getShort();
int itemUsed = payload.getShort();
int itemSlot = payload.getShort(false, ValueType.A, ByteOrder.LITTLE);
Item item = player.getInventory().get(itemSlot);
Player usedOn = World.getPlayers().get(index);
if (container < 0 || item == null || usedOn == null || itemUsed < 0)
return;
if (item.getId() != itemUsed)
return;
player.getMovementListener().append(() -> {
if (player.getPosition().withinDistance(usedOn.getPosition(), 1)) {
World.getPlugins().execute(player, ItemOnPlayerPlugin.class, new ItemOnPlayerPlugin(player, item));
}
});
}
}