RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
UseItemPacketListener.java
1package com.osroyale.net.packet.in;
2
3import com.osroyale.content.event.EventDispatcher;
4import com.osroyale.content.event.impl.ItemOnItemInteractionEvent;
5import com.osroyale.content.itemaction.ItemActionRepository;
6import com.osroyale.game.event.impl.ItemOnItemEvent;
7import com.osroyale.game.plugin.PluginManager;
8import com.osroyale.game.world.entity.mob.data.PacketType;
9import com.osroyale.game.world.entity.mob.player.Player;
10import com.osroyale.game.world.entity.mob.player.PlayerRight;
11import com.osroyale.game.world.items.Item;
12import com.osroyale.game.world.items.containers.inventory.Inventory;
13import com.osroyale.net.codec.ByteModification;
14import com.osroyale.net.codec.ByteOrder;
15import com.osroyale.net.packet.ClientPackets;
16import com.osroyale.net.packet.GamePacket;
17import com.osroyale.net.packet.PacketListener;
18import com.osroyale.net.packet.PacketListenerMeta;
19import com.osroyale.net.packet.out.SendMessage;
20import com.osroyale.util.MessageColor;
21import org.jire.tarnishps.event.npc.ItemOnNpcEvent;
22import org.jire.tarnishps.event.object.ItemOnObjectEvent;
23import org.jire.tarnishps.event.player.ItemOnPlayerEvent;
24
30@PacketListenerMeta({ClientPackets.ITEM_ON_NPC, ClientPackets.ITEM_ON_ITEM, ClientPackets.ITEM_ON_OBJECT, ClientPackets.ITEM_ON_GROUND_ITEM, ClientPackets.ITEM_ON_PLAYER})
67
68public class UseItemPacketListener implements PacketListener {
69
70 @Override
71 public void handlePacket(Player player, GamePacket packet) {
72 if (player.isDead())
73 return;
74 if (player.locking.locked(PacketType.USE_ITEM))
75 return;
76
77 switch (packet.getOpcode()) {
78 case ClientPackets.ITEM_ON_GROUND_ITEM:
79 handleItemOnGround(player, packet);
80 break;
81 case ClientPackets.ITEM_ON_ITEM:
82 handleItemOnItem(player, packet);
83 break;
84 case ClientPackets.ITEM_ON_NPC:
85 handleItemOnNpc(player, packet);
86 break;
87 case ClientPackets.ITEM_ON_OBJECT:
88 handleItemOnObject(player, packet);
89 break;
90 case ClientPackets.ITEM_ON_PLAYER:
91 handleItemOnPlayer(player, packet);
92 break;
93 }
94 }
95
100 private void handleItemOnGround(Player player, GamePacket packet) {
101 final int a1 = packet.readShort(ByteOrder.LE);
102 final int itemUsed = packet.readShort(false, ByteModification.ADD);
103 final int groundItem = packet.readShort();
104 final int gItemY = packet.readShort(false, ByteModification.ADD);
105 final int itemUsedSlot = packet.readShort(ByteOrder.LE, ByteModification.ADD);
106 final int gItemX = packet.readShort();
107
108 if (PlayerRight.isDeveloper(player)) {
109 player.send(new SendMessage("[ItemUsed] - " + itemUsed + " groundItem: " + groundItem + " itemUsedSlot: " + itemUsedSlot + " gItemX: " + gItemX + " gItemY: " + gItemY + " a1: " + a1, MessageColor.DEVELOPER));
110 }
111
112 player.send(new SendMessage("Nothing interesting happens."));
113 }
114
119 private void handleItemOnItem(Player player, GamePacket packet) {
120 final int usedWithSlot = packet.readShort();
121 final int itemUsedSlot = packet.readShort(ByteModification.ADD);
122 final Item used = player.inventory.get(itemUsedSlot);
123 final Item with = player.inventory.get(usedWithSlot);
124
125 if (used != null && with != null) {
126 if (EventDispatcher.execute(player, new ItemOnItemInteractionEvent(used, with, usedWithSlot, itemUsedSlot))) {
127 return;
128 }
129
130 if (ItemActionRepository.itemOnItem(player, used, with)) {
131 return;
132 }
133
134 if (PluginManager.getDataBus().publish(player, new ItemOnItemEvent(used, itemUsedSlot, with, usedWithSlot))) {
135 return;
136 }
137
138 player.send(new SendMessage("Nothing interesting happens."));
139 }
140 }
141
146 private void handleItemOnNpc(Player player, GamePacket packet) {
147 final int itemId = packet.readShort(false, ByteModification.ADD);
148 final int index = packet.readShort(false, ByteModification.ADD);
149 final int slot = packet.readShort(ByteOrder.LE);
150
151 player.getEvents().interact(player, new ItemOnNpcEvent(itemId, index, slot));
152 }
153
158 private void handleItemOnObject(Player player, GamePacket packet) {
159 int interfaceType = packet.readShort();
160 final int objectId = packet.readShort(ByteOrder.LE);
161 final int y = packet.readShort(ByteOrder.LE, ByteModification.ADD);
162 final int slot = packet.readShort(ByteOrder.LE);
163 final int x = packet.readShort(ByteOrder.LE, ByteModification.ADD);
164 final int itemId = packet.readShort();
165
166 player.getEvents().interact(player, new ItemOnObjectEvent(
167 interfaceType, itemId, slot, objectId, x, y
168 ));
169 }
170
175 private void handleItemOnPlayer(Player player, GamePacket packet) {
176 final int interfaceId = packet.readShort(ByteModification.ADD);
177 final int slot = packet.readShort();
178 final int item = packet.readShort();
179 final int itemSlot = packet.readShort(ByteOrder.LE);
180
181 if (interfaceId != Inventory.INVENTORY_DISPLAY_ID) {
182 return;
183 }
184
185 player.getEvents().interact(player, new ItemOnPlayerEvent(
186 interfaceId, item, itemSlot, slot
187 ));
188 }
189
190}
void handlePacket(Player player, GamePacket packet)