diff --git a/src/org/apollo/game/event/impl/ItemOnObjectEvent.java b/src/org/apollo/game/event/impl/ItemOnObjectEvent.java new file mode 100644 index 00000000..a419881d --- /dev/null +++ b/src/org/apollo/game/event/impl/ItemOnObjectEvent.java @@ -0,0 +1,71 @@ +package org.apollo.game.event.impl; + +import org.apollo.game.event.Event; + +/** + * An {@link Event} sent by the client when an item is used on an object. + * + * @author Major + */ +public final class ItemOnObjectEvent extends InventoryItemEvent { + + /** + * The object id the item was used on. + */ + private final int objectId; + + /** + * The x coordinate of the object. + */ + private final int x; + + /** + * The y coordinate of the object. + */ + private final int y; + + /** + * Creates an item on object event. + * + * @param interfaceId The interface id. + * @param id The item id. + * @param slot The slot the item is in. + * @param objectId The object id. + * @param x The x coordinate. + * @param y The y coordinate. + */ + public ItemOnObjectEvent(int interfaceId, int id, int slot, int objectId, int x, int y) { + super(0, interfaceId, id, slot); + this.objectId = objectId; + this.x = x; + this.y = y; + } + + /** + * Gets the object id. + * + * @return The object id. + */ + public int getObjectId() { + return objectId; + } + + /** + * Gets the x coordinate of the object. + * + * @return The x coordinate. + */ + public int getX() { + return x; + } + + /** + * Gets the y coordinate of the object. + * + * @return The y coordinate. + */ + public int getY() { + return y; + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/ItemOnObjectEventDecoder.java b/src/org/apollo/net/release/r317/ItemOnObjectEventDecoder.java new file mode 100644 index 00000000..d9056643 --- /dev/null +++ b/src/org/apollo/net/release/r317/ItemOnObjectEventDecoder.java @@ -0,0 +1,32 @@ +package org.apollo.net.release.r317; + +import org.apollo.game.event.impl.ItemOnObjectEvent; +import org.apollo.net.codec.game.DataOrder; +import org.apollo.net.codec.game.DataTransformation; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketReader; +import org.apollo.net.release.EventDecoder; + +/** + * An {@link EventDecoder} for the {@link ItemOnObjectEvent}. + * + * @author Major + */ +public final class ItemOnObjectEventDecoder extends EventDecoder { + + @Override + public ItemOnObjectEvent decode(GamePacket packet) { + GamePacketReader reader = new GamePacketReader(packet); + + int interfaceId = (int) reader.getUnsigned(DataType.SHORT); + int objectId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); + int y = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD); + int slot = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); + int x = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD); + int itemId = (int) reader.getUnsigned(DataType.SHORT); + + return new ItemOnObjectEvent(interfaceId, itemId, slot, objectId, x, y); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r317/Release317.java b/src/org/apollo/net/release/r317/Release317.java index adcea45d..f2058c31 100644 --- a/src/org/apollo/net/release/r317/Release317.java +++ b/src/org/apollo/net/release/r317/Release317.java @@ -39,6 +39,7 @@ import org.apollo.game.event.impl.UpdateSlottedItemsEvent; import org.apollo.game.event.impl.UpdateWeightEvent; import org.apollo.net.meta.PacketMetaDataGroup; import org.apollo.net.release.Release; +import org.apollo.net.release.r377.ItemOnObjectEventDecoder; /** * A {@link Release} implementation for the 317 protocol. @@ -142,6 +143,7 @@ public final class Release317 extends Release { register(155, new SecondNpcActionEventDecoder()); register(17, new ThirdNpcActionEventDecoder()); register(236, new TakeTileItemEventDecoder()); + register(192, new ItemOnObjectEventDecoder()); register(188, new AddFriendEventDecoder()); register(133, new AddIgnoreEventDecoder()); diff --git a/src/org/apollo/net/release/r377/ItemOnObjectEventDecoder.java b/src/org/apollo/net/release/r377/ItemOnObjectEventDecoder.java new file mode 100644 index 00000000..e831d7c4 --- /dev/null +++ b/src/org/apollo/net/release/r377/ItemOnObjectEventDecoder.java @@ -0,0 +1,32 @@ +package org.apollo.net.release.r377; + +import org.apollo.game.event.impl.ItemOnObjectEvent; +import org.apollo.net.codec.game.DataOrder; +import org.apollo.net.codec.game.DataTransformation; +import org.apollo.net.codec.game.DataType; +import org.apollo.net.codec.game.GamePacket; +import org.apollo.net.codec.game.GamePacketReader; +import org.apollo.net.release.EventDecoder; + +/** + * An {@link EventDecoder} for the {@link ItemOnObjectEvent}. + * + * @author Major + */ +public final class ItemOnObjectEventDecoder extends EventDecoder { + + @Override + public ItemOnObjectEvent decode(GamePacket packet) { + GamePacketReader reader = new GamePacketReader(packet); + + int objectId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); + int interfaceId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); + int itemId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); + int y = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE); + int slot = (int) reader.getUnsigned(DataType.SHORT); + int x = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD); + + return new ItemOnObjectEvent(interfaceId, itemId, slot, objectId, x, y); + } + +} \ No newline at end of file diff --git a/src/org/apollo/net/release/r377/Release377.java b/src/org/apollo/net/release/r377/Release377.java index a6043d24..b9e068a4 100644 --- a/src/org/apollo/net/release/r377/Release377.java +++ b/src/org/apollo/net/release/r377/Release377.java @@ -139,6 +139,7 @@ public final class Release377 extends Release { register(112, new SecondNpcActionEventDecoder()); register(13, new ThirdNpcActionEventDecoder()); register(71, new TakeTileItemEventDecoder()); + register(152, new ItemOnObjectEventDecoder()); register(120, new AddFriendEventDecoder()); register(217, new AddIgnoreEventDecoder());