RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
DropItemPacketListener.java
1package com.osroyale.net.packet.in;
2
3import com.osroyale.content.gambling.GambleStage;
4import com.osroyale.content.itemaction.ItemActionRepository;
5import com.osroyale.game.event.impl.DropItemEvent;
6import com.osroyale.game.plugin.PluginManager;
7import com.osroyale.game.world.entity.mob.data.PacketType;
8import com.osroyale.game.world.entity.mob.player.Player;
9import com.osroyale.game.world.entity.mob.player.PlayerRight;
10import com.osroyale.game.world.items.Item;
11import com.osroyale.game.world.items.ItemDefinition;
12import com.osroyale.game.world.items.containers.pricechecker.PriceType;
13import com.osroyale.game.world.items.ground.GroundItem;
14import com.osroyale.game.world.position.Area;
15import com.osroyale.net.codec.ByteModification;
16import com.osroyale.net.packet.ClientPackets;
17import com.osroyale.net.packet.GamePacket;
18import com.osroyale.net.packet.PacketListener;
19import com.osroyale.net.packet.PacketListenerMeta;
20import com.osroyale.net.packet.out.SendMessage;
21
50
51public class DropItemPacketListener implements PacketListener {
52
53 @Override
54 public void handlePacket(Player player, GamePacket packet) {
55 if (player.isDead() || player.locking.locked(PacketType.DROP_ITEM) || player.getGambling().getStage().equals(GambleStage.PLACING_BET) || player.getGambling().getStage().equals(GambleStage.IN_PROGRESS)) {
56 return;
57 }
58
59 final int itemId = packet.readShort(false, ByteModification.ADD);
60 packet.readByte(false);
61 packet.readByte(false);
62 final int slot = packet.readShort(false, ByteModification.ADD);
63 final Item item = player.inventory.get(slot);
64
65 if (ItemDefinition.get(itemId) == null)
66 return;
67
68 player.getCombat().reset();
69
70 if (!player.interfaceManager.isClear())
71 player.interfaceManager.close(false);
72
73 if (player.idle)
74 player.idle = false;
75
76 if (item == null)
77 return;
78
79 if (item.getId() != itemId)
80 return;
81
82 if (PluginManager.getDataBus().publish(player, new DropItemEvent(item, slot, player.getPosition().copy())))
83 return;
84
85 if (ItemActionRepository.drop(player, item)) {
86 if (PlayerRight.isDeveloper(player)) {
87 player.send(new SendMessage(String.format("[%s]: item=%d amount=%d slot=%d", ItemActionRepository.class.getSimpleName(), item.getId(), item.getAmount(), slot)));
88 }
89 return;
90 }
91
92 boolean inWilderness = Area.inWilderness(player);
93 if (inWilderness && item.getValue(PriceType.VALUE) >= 500_000) {
94 player.dialogueFactory.sendStatement("This is a valuable item, are you sure you want to", "drop it? In a PvP area, this item will be seen", "by everyone when dropped.");
95 player.dialogueFactory.sendOption("Yes, drop it.", () -> {
96 player.inventory.remove(item, slot, true);
97 GroundItem.createGlobal(player, item);
98 }, "Nevermind", () -> player.dialogueFactory.clear());
99 player.dialogueFactory.execute();
100 return;
101 } else if (inWilderness) {
102 player.inventory.remove(item, slot, true);
103 GroundItem.createGlobal(player, item);
104 return;
105 }
106
107 player.inventory.remove(item, slot, true);
108 GroundItem.create(player, item);
109 }
110}
final DialogueFactory sendStatement(String... lines)
final DialogueFactory sendOption(String option1, Runnable action1, String option2, Runnable action2)
static void createGlobal(Player player, Item item)
static GroundItem create(Player player, Item item)
void handlePacket(Player player, GamePacket packet)