Split SetTileItemEvent into three separate events.

This commit is contained in:
Major-
2014-02-15 15:15:25 +00:00
parent 1e5a354ea8
commit 8c6d6bf189
15 changed files with 395 additions and 237 deletions
@@ -0,0 +1,70 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
import org.apollo.game.model.Item;
/**
* An {@link Event} sent to the client that adds an item to a tile.
*
* @author Major
*/
public final class AddTileItemEvent extends Event {
/**
* The item to add to the tile.
*/
private final Item item;
/**
* The position offset
*/
private final int positionOffset;
/**
* Creates am add tile item event.
*
* @param item The item to add to the tile.
*/
public AddTileItemEvent(Item item) {
this(item, 0);
}
/**
* Creates am add tile item event.
*
* @param item The item to add to the tile.
* @param positionOffset The offset from the 'base' position.
*/
public AddTileItemEvent(Item item, int positionOffset) {
this.item = item;
this.positionOffset = positionOffset;
}
/**
* Gets the id of the item.
*
* @return The id.
*/
public int getId() {
return item.getId();
}
/**
* Gets the amount of the item.
*
* @return The amount.
*/
public int getAmount() {
return item.getAmount();
}
/**
* Gets the offset from the 'base' position.
*
* @return The offset.
*/
public int getPositionOffset() {
return positionOffset;
}
}
@@ -0,0 +1,60 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
* An {@link Event} sent to the client to instruct it to remove an item from a tile.
*
* @author Major
*/
public final class RemoveTileItemEvent extends Event {
/**
* The item.
*/
private final int id;
/**
* The offset from the client's base position.
*/
private final int positionOffset;
/**
* Creates a remove tile item event.
*
* @param id The id of the item to remove.
*/
public RemoveTileItemEvent(int id) {
this(id, 0);
}
/**
* Creates a remove tile item event.
*
* @param id The id of the item to remove.
* @param positionOffset The offset from the 'base' position.
*/
public RemoveTileItemEvent(int id, int positionOffset) {
this.id = id;
this.positionOffset = positionOffset;
}
/**
* Gets the id of the item to remove.
*
* @return The id.
*/
public int getId() {
return id;
}
/**
* Gets the offset from the 'base' position.
*
* @return The offset.
*/
public int getPositionOffset() {
return positionOffset;
}
}
@@ -1,145 +0,0 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
import org.apollo.game.model.Item;
import org.apollo.game.model.def.ItemDefinition;
/**
* An {@link Event} sent to tell the client to display an item on a tile.
*
* @author Major
*/
public final class SetTileItemEvent extends Event {
/**
* The {@link Item}.
*/
private final Item item;
/**
* The offset from the client's base position.
*/
private final int positionOffset;
/**
* The previous amount of the item (if it is being updated).
*/
private final int previousAmount;
/**
* Indicates whether the item is stackable.
*/
private final boolean stackable;
/**
* Indicates whether an existing item is being updated.
*/
private final boolean updating;
/**
* Creates a new event that will remove the item with the specified id from the tile.
*
* @param id The id of the item.
*/
public SetTileItemEvent(int id) {
this(id, 0, ItemDefinition.lookup(id).isStackable(), false, 0, 0);
}
/**
* Creates a new event that will add an item with the specified id and amount to the tile.
*
* @param id The id of the item.
* @param amount The amount of the item.
*/
public SetTileItemEvent(int id, int amount) {
this(id, amount, ItemDefinition.lookup(id).isStackable(), false, 0, 0);
}
/**
* Creates a new event that updates the previous amount of the item.
*
* @param id The id of the item.
* @param amount The amount of the item.
* @param previousAmount The previous amount of the item.
*/
public SetTileItemEvent(int id, int amount, int previousAmount) {
this(id, amount, true, true, previousAmount, 0);
}
/**
* Creates a new set tile item event.
*
* @param id The id of the item.
* @param amount The new amount of the item.
* @param stackable Whether the item is stackable or not.
* @param positionOffset The offset from the client's base position.
* @param updating If the item is being updated or not.
* @param previousAmount The previous amount of the item.
*/
public SetTileItemEvent(int id, int amount, boolean stackable, boolean updating, int previousAmount,
int positionOffset) {
if (id < 0 || amount < 0 || previousAmount < 0) {
throw new IllegalArgumentException("The id, amount, and previous amount must be 0 or greater.");
}
this.item = new Item(id, amount);
this.stackable = stackable;
this.updating = updating;
this.previousAmount = previousAmount;
this.positionOffset = positionOffset;
}
/**
* Gets the amount of the item.
*
* @return The amount.
*/
public int getAmount() {
return item.getAmount();
}
/**
* Gets the id of the item.
*
* @return The item.
*/
public int getId() {
return item.getId();
}
/**
* Gets the offset from the client's base position.
*
* @return The offset.
*/
public int getPositionOffset() {
return positionOffset;
}
/**
* Gets the previous amount of the item.
*
* @return The previous amount.
*/
public int getPreviousAmount() {
return previousAmount;
}
/**
* Indicates whether this item is stackable or not.
*
* @return {@code true} if the item is stackable, otherwise {@code false}.
*/
public boolean isStackable() {
return stackable;
}
/**
* Indicates whether this item is being updated or not.
*
* @return {@code true} if the item is being updated, otherwise {@code false}.
*/
public boolean isUpdating() {
return updating;
}
}
@@ -0,0 +1,91 @@
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
import org.apollo.game.model.Item;
/**
* An {@link Event} sent to tell the client to update the amount of an item display on a tile.
*
* @author Major
*/
public final class UpdateTileItemEvent extends Event {
/**
* The {@link Item}.
*/
private final Item item;
/**
* The offset from the client's base position.
*/
private final int positionOffset;
/**
* The previous amount of the item (if it is being updated).
*/
private final int previousAmount;
/**
* Creates a new event that updates the previous amount of the item.
*
* @param id The id of the item.
* @param amount The amount of the item.
* @param previousAmount The previous amount of the item.
*/
public UpdateTileItemEvent(Item item, int previousAmount) {
this(item, previousAmount, 0);
}
/**
* Creates a new set tile item event.
*
* @param id The id of the item.
* @param amount The new amount of the item.
* @param stackable Whether the item is stackable or not.
* @param positionOffset The offset from the client's base position.
* @param updating If the item is being updated or not.
* @param previousAmount The previous amount of the item.
*/
public UpdateTileItemEvent(Item item, int previousAmount, int positionOffset) {
this.item = item;
this.previousAmount = previousAmount;
this.positionOffset = positionOffset;
}
/**
* Gets the amount of the item.
*
* @return The amount.
*/
public int getAmount() {
return item.getAmount();
}
/**
* Gets the id of the item.
*
* @return The item.
*/
public int getId() {
return item.getId();
}
/**
* Gets the offset from the client's base position.
*
* @return The offset.
*/
public int getPositionOffset() {
return positionOffset;
}
/**
* Gets the previous amount of the item.
*
* @return The previous amount.
*/
public int getPreviousAmount() {
return previousAmount;
}
}
@@ -0,0 +1,27 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.AddTileItemEvent;
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.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link AddTileItemEvent}.
*
* @author Major
*/
public final class AddTileItemEventEncoder extends EventEncoder<AddTileItemEvent> {
@Override
public GamePacket encode(AddTileItemEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(44);
builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, event.getId());
builder.put(DataType.SHORT, event.getAmount());
builder.put(DataType.BYTE, event.getPositionOffset());
return builder.toGamePacket();
}
}
@@ -1,5 +1,6 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.AddTileItemEvent;
import org.apollo.game.event.impl.CloseInterfaceEvent;
import org.apollo.game.event.impl.ConfigEvent;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
@@ -17,9 +18,10 @@ import org.apollo.game.event.impl.PlayerSynchronizationEvent;
import org.apollo.game.event.impl.PositionEvent;
import org.apollo.game.event.impl.PrivacyOptionEvent;
import org.apollo.game.event.impl.RegionChangeEvent;
import org.apollo.game.event.impl.RemoveTileItemEvent;
import org.apollo.game.event.impl.SendFriendEvent;
import org.apollo.game.event.impl.ServerMessageEvent;
import org.apollo.game.event.impl.SetTileItemEvent;
import org.apollo.game.event.impl.UpdateTileItemEvent;
import org.apollo.game.event.impl.SetWidgetItemModelEvent;
import org.apollo.game.event.impl.SetWidgetModelAnimationEvent;
import org.apollo.game.event.impl.SetWidgetNpcModelEvent;
@@ -115,6 +117,8 @@ public final class Release317 extends Release {
register(185, new ButtonEventDecoder());
register(130, new ClosedInterfaceEventDecoder());
register(208, new EnteredAmountEventDecoder());
register(40, new DialogueContinueEventDecoder());
register(53, new ItemOnItemEventDecoder());
register(237, new MagicOnItemEventDecoder());
@@ -134,7 +138,6 @@ public final class Release317 extends Release {
register(155, new SecondNpcActionEventDecoder());
register(17, new ThirdNpcActionEventDecoder());
register(236, new TakeTileItemEventDecoder());
register(40, new DialogueContinueEventDecoder());
register(188, new AddFriendEventDecoder());
register(133, new AddIgnoreEventDecoder());
@@ -165,12 +168,15 @@ public final class Release317 extends Release {
register(SetWidgetModelAnimationEvent.class, new SetWidgetModelAnimationEventEncoder());
register(ConfigEvent.class, new ConfigEventEncoder());
register(DisplayTabInterfaceEvent.class, new DisplayTabInterfaceEventEncoder());
register(SetTileItemEvent.class, new SetTileItemEventEncoder());
register(PositionEvent.class, new PositionEventEncoder());
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
register(OpenDialogueInterfaceEvent.class, new OpenDialogueInterfaceEventEncoder());
register(AddTileItemEvent.class, new AddTileItemEventEncoder());
register(UpdateTileItemEvent.class, new UpdateTileItemEventEncoder());
register(RemoveTileItemEvent.class, new RemoveTileItemEventEncoder());
register(ForwardPrivateMessageEvent.class, new ForwardPrivateMessageEventEncoder());
register(FriendServerStatusEvent.class, new FriendServerStatusEventEncoder());
register(IgnoreListEvent.class, new IgnoreListEventEncoder());
@@ -0,0 +1,25 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.RemoveTileItemEvent;
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.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link RemoveTileItemEvent}.
*
* @author Major
*/
public final class RemoveTileItemEventEncoder extends EventEncoder<RemoveTileItemEvent> {
@Override
public GamePacket encode(RemoveTileItemEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(156);
builder.put(DataType.BYTE, DataTransformation.ADD, event.getPositionOffset());
builder.put(DataType.SHORT, event.getId());
return builder.toGamePacket();
}
}
@@ -1,43 +0,0 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.SetTileItemEvent;
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.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link SetTileItemEvent}.
*
* @author Major
*/
public class SetTileItemEventEncoder extends EventEncoder<SetTileItemEvent> {
@Override
public GamePacket encode(SetTileItemEvent event) {
GamePacketBuilder builder = null;
if (event.getAmount() == 0) { // remove the item.
builder = new GamePacketBuilder(156);
builder.put(DataType.BYTE, DataTransformation.ADD, event.getPositionOffset());
builder.put(DataType.SHORT, event.getId());
} else if (!event.isUpdating()) { // sending a new item
builder = new GamePacketBuilder(44);
builder.put(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD, event.getId());
builder.put(DataType.SHORT, event.getAmount());
builder.put(DataType.BYTE, event.getPositionOffset());
} else { // updating an already displayed item
builder = new GamePacketBuilder(84);
builder.put(DataType.BYTE, event.getPositionOffset());
builder.put(DataType.SHORT, event.getId());
builder.put(DataType.SHORT, event.getPreviousAmount());
builder.put(DataType.SHORT, event.getAmount());
}
return builder.toGamePacket();
}
}
@@ -0,0 +1,26 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.UpdateTileItemEvent;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link UpdateTileItemEvent}.
*
* @author Major
*/
public final class UpdateTileItemEventEncoder extends EventEncoder<UpdateTileItemEvent> {
@Override
public GamePacket encode(UpdateTileItemEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(84);
builder.put(DataType.BYTE, event.getPositionOffset());
builder.put(DataType.SHORT, event.getId());
builder.put(DataType.SHORT, event.getPreviousAmount());
builder.put(DataType.SHORT, event.getAmount());
return builder.toGamePacket();
}
}
@@ -0,0 +1,26 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.AddTileItemEvent;
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.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link AddTileItemEvent}.
*
* @author Major
*/
public final class AddTileItemEventEncoder extends EventEncoder<AddTileItemEvent> {
@Override
public GamePacket encode(AddTileItemEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(107);
builder.put(DataType.SHORT, event.getId());
builder.put(DataType.BYTE, DataTransformation.NEGATE, event.getPositionOffset());
builder.put(DataType.SHORT, DataTransformation.ADD, event.getAmount());
return builder.toGamePacket();
}
}
@@ -14,7 +14,7 @@ import org.apollo.net.release.EventEncoder;
* @author Chris Fletcher
* @author Major
*/
final class PositionEventEncoder extends EventEncoder<PositionEvent> {
public final class PositionEventEncoder extends EventEncoder<PositionEvent> {
@Override
public GamePacket encode(PositionEvent event) {
@@ -1,5 +1,6 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.AddTileItemEvent;
import org.apollo.game.event.impl.CloseInterfaceEvent;
import org.apollo.game.event.impl.ConfigEvent;
import org.apollo.game.event.impl.DisplayTabInterfaceEvent;
@@ -17,9 +18,10 @@ import org.apollo.game.event.impl.PlayerSynchronizationEvent;
import org.apollo.game.event.impl.PositionEvent;
import org.apollo.game.event.impl.PrivacyOptionEvent;
import org.apollo.game.event.impl.RegionChangeEvent;
import org.apollo.game.event.impl.RemoveTileItemEvent;
import org.apollo.game.event.impl.SendFriendEvent;
import org.apollo.game.event.impl.ServerMessageEvent;
import org.apollo.game.event.impl.SetTileItemEvent;
import org.apollo.game.event.impl.UpdateTileItemEvent;
import org.apollo.game.event.impl.SetWidgetItemModelEvent;
import org.apollo.game.event.impl.SetWidgetModelAnimationEvent;
import org.apollo.game.event.impl.SetWidgetNpcModelEvent;
@@ -115,6 +117,8 @@ public final class Release377 extends Release {
register(79, new ButtonEventDecoder());
register(110, new ClosedInterfaceEventDecoder());
register(75, new EnteredAmountEventDecoder());
register(226, new DialogueContinueEventDecoder());
register(1, new ItemOnItemEventDecoder());
register(36, new MagicOnItemEventDecoder());
@@ -131,7 +135,6 @@ public final class Release377 extends Release {
register(112, new SecondNpcActionEventDecoder());
register(13, new ThirdNpcActionEventDecoder());
register(71, new TakeTileItemEventDecoder());
register(226, new DialogueContinueEventDecoder());
register(120, new AddFriendEventDecoder());
register(217, new AddIgnoreEventDecoder());
@@ -162,12 +165,15 @@ public final class Release377 extends Release {
register(SetWidgetModelAnimationEvent.class, new SetWidgetModelAnimationEventEncoder());
register(ConfigEvent.class, new ConfigEventEncoder());
register(DisplayTabInterfaceEvent.class, new DisplayTabInterfaceEventEncoder());
register(SetTileItemEvent.class, new SetTileItemEventEncoder());
register(PositionEvent.class, new PositionEventEncoder());
register(UpdateRunEnergyEvent.class, new UpdateRunEnergyEventEncoder());
register(PrivacyOptionEvent.class, new PrivacyOptionEventEncoder());
register(OpenDialogueInterfaceEvent.class, new OpenDialogueInterfaceEventEncoder());
register(AddTileItemEvent.class, new AddTileItemEventEncoder());
register(UpdateTileItemEvent.class, new UpdateTileItemEventEncoder());
register(RemoveTileItemEvent.class, new RemoveTileItemEventEncoder());
register(ForwardPrivateMessageEvent.class, new ForwardPrivateMessageEventEncoder());
register(FriendServerStatusEvent.class, new FriendServerStatusEventEncoder());
register(IgnoreListEvent.class, new IgnoreListEventEncoder());
@@ -0,0 +1,25 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.RemoveTileItemEvent;
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.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link RemoveTileItemEvent}.
*
* @author Major
*/
public final class RemoveTileItemEventEncoder extends EventEncoder<RemoveTileItemEvent> {
@Override
public GamePacket encode(RemoveTileItemEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(208);
builder.put(DataType.SHORT, DataTransformation.ADD, event.getId());
builder.put(DataType.BYTE, DataTransformation.ADD, event.getPositionOffset());
return builder.toGamePacket();
}
}
@@ -1,42 +0,0 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.SetTileItemEvent;
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.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link SetTileItemEvent}.
*
* @author Major
*/
public class SetTileItemEventEncoder extends EventEncoder<SetTileItemEvent> {
@Override
public GamePacket encode(SetTileItemEvent event) {
GamePacketBuilder builder = null;
if (event.getAmount() == 0) { // remove the item.
builder = new GamePacketBuilder(208);
builder.put(DataType.SHORT, DataTransformation.ADD, event.getId());
builder.put(DataType.BYTE, DataTransformation.ADD, event.getPositionOffset());
} else if (!event.isUpdating()) { // sending a new item
builder = new GamePacketBuilder(107);
builder.put(DataType.SHORT, event.getId());
builder.put(DataType.BYTE, DataTransformation.NEGATE, event.getPositionOffset());
builder.put(DataType.SHORT, DataTransformation.ADD, event.getAmount());
} else { // updating an already displayed item
builder = new GamePacketBuilder(121);
builder.put(DataType.BYTE, event.getPositionOffset());
builder.put(DataType.SHORT, event.getId());
builder.put(DataType.SHORT, event.getPreviousAmount());
builder.put(DataType.SHORT, event.getAmount());
}
return builder.toGamePacket();
}
}
@@ -0,0 +1,26 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.UpdateTileItemEvent;
import org.apollo.net.codec.game.DataType;
import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.release.EventEncoder;
/**
* An {@link EventEncoder} for the {@link UpdateTileItemEvent}.
*
* @author Major
*/
public final class UpdateTileItemEventEncoder extends EventEncoder<UpdateTileItemEvent> {
@Override
public GamePacket encode(UpdateTileItemEvent event) {
GamePacketBuilder builder = new GamePacketBuilder(121);
builder.put(DataType.BYTE, event.getPositionOffset());
builder.put(DataType.SHORT, event.getId());
builder.put(DataType.SHORT, event.getPreviousAmount());
builder.put(DataType.SHORT, event.getAmount());
return builder.toGamePacket();
}
}