Add item on item decoder; minor mining changes.

This commit is contained in:
Major-
2013-11-03 05:32:54 +00:00
parent 252b7677ca
commit 42d42af0c5
18 changed files with 208 additions and 30 deletions
+7
View File
@@ -72,4 +72,11 @@
<handler>org.apollo.game.event.handler.impl.EnteredAmountEventHandler</handler> <handler>org.apollo.game.event.handler.impl.EnteredAmountEventHandler</handler>
</chain> </chain>
</event> </event>
<event>
<type>org.apollo.game.event.impl.ItemOnItemEvent</type>
<chain>
<handler>org.apollo.game.event.handler.impl.ItemVerificationHandler</handler>
<handler>org.apollo.game.event.handler.impl.ItemOnItemVerificationHandler</handler>
</chain>
</event>
</events> </events>
+1 -3
View File
@@ -1,5 +1,3 @@
MAX_PLAYERS = 2000 # TODO: obtain from a Java class
# Calculates the number of pulses it takes for an ore to respawn based on the # Calculates the number of pulses it takes for an ore to respawn based on the
# number of players currently online. # number of players currently online.
# #
@@ -14,5 +12,5 @@ MAX_PLAYERS = 2000 # TODO: obtain from a Java class
# function. The rest of the mining plugin rounds the base respawn times in # function. The rest of the mining plugin rounds the base respawn times in
# pulses down where appropriate. # pulses down where appropriate.
def respawn_pulses(base, players) def respawn_pulses(base, players)
base - players * base / (MAX_PLAYERS * 2) base - players * base / (World.world.player_repository.size * 2)
end end
@@ -24,9 +24,9 @@ public final class BankButtonEventHandler extends EventHandler<ButtonEvent> {
@Override @Override
public void handle(EventHandlerContext ctx, Player player, ButtonEvent event) { public void handle(EventHandlerContext ctx, Player player, ButtonEvent event) {
if (event.getInterfaceId() == WITHDRAW_AS_ITEM) { if (event.getWidgetId() == WITHDRAW_AS_ITEM) {
player.setWithdrawingNotes(false); player.setWithdrawingNotes(false);
} else if (event.getInterfaceId() == WITHDRAW_AS_NOTE) { } else if (event.getWidgetId() == WITHDRAW_AS_NOTE) {
player.setWithdrawingNotes(true); player.setWithdrawingNotes(true);
} }
} }
@@ -0,0 +1,34 @@
package org.apollo.game.event.handler.impl;
import org.apollo.game.event.handler.EventHandler;
import org.apollo.game.event.handler.EventHandlerContext;
import org.apollo.game.event.impl.ItemOnItemEvent;
import org.apollo.game.model.Inventory;
import org.apollo.game.model.Item;
import org.apollo.game.model.Player;
/**
* An {@link EventHandler} which verifies the target item in {@link ItemOnItemEvent}s.
*
* @author Chris Fletcher
*/
public final class ItemOnItemVerificationHandler extends EventHandler<ItemOnItemEvent> {
@Override
public void handle(EventHandlerContext ctx, Player player, ItemOnItemEvent event) {
Inventory inventory = ItemVerificationHandler.interfaceToInventory(player, event.getTargetInterfaceId());
int slot = event.getTargetSlot();
if (slot < 0 || slot >= inventory.capacity()) {
ctx.breakHandlerChain();
return;
}
Item item = inventory.get(slot);
if (item == null || item.getId() != event.getTargetId()) {
ctx.breakHandlerChain();
return;
}
}
}
@@ -19,12 +19,11 @@ public final class ItemVerificationHandler extends EventHandler<InventoryItemEve
/** /**
* Gets the inventory based on the interface id. * Gets the inventory based on the interface id.
* *
* @param player The player.
* @param interfaceId The interface id. * @param interfaceId The interface id.
* @return The proper inventory. * @return The proper inventory.
* @throws IllegalArgumentException If the interface id is illegal. * @throws IllegalArgumentException If the interface id is not legal.
*/ */
private static Inventory interfaceToInventory(Player player, int interfaceId) { public static Inventory interfaceToInventory(Player player, int interfaceId) {
switch (interfaceId) { switch (interfaceId) {
case SynchronizationInventoryListener.INVENTORY_ID: case SynchronizationInventoryListener.INVENTORY_ID:
@@ -38,7 +37,7 @@ public final class ItemVerificationHandler extends EventHandler<InventoryItemEve
return player.getBank(); return player.getBank();
default: default:
throw new IllegalArgumentException("Unknown interface id: " + interfaceId); throw new IllegalArgumentException("unknown interface id: " + interfaceId);
} }
} }
+10 -10
View File
@@ -3,33 +3,33 @@ package org.apollo.game.event.impl;
import org.apollo.game.event.Event; import org.apollo.game.event.Event;
/** /**
* An event sent when the client clicks a button. * An event sent when a player clicks a button.
* *
* @author Graham * @author Graham
*/ */
public final class ButtonEvent extends Event { public final class ButtonEvent extends Event {
/** /**
* The interface id. * The widget id.
*/ */
private final int interfaceId; private final int widgetId;
/** /**
* Creates the button event. * Creates the button event.
* *
* @param interfaceId The interface id. * @param widgetId The widget id.
*/ */
public ButtonEvent(int interfaceId) { public ButtonEvent(int widgetId) {
this.interfaceId = interfaceId; this.widgetId = widgetId;
} }
/** /**
* Gets the interface id. * Gets the widget id.
* *
* @return The interface id. * @return The widget id.
*/ */
public int getInterfaceId() { public int getWidgetId() {
return interfaceId; return widgetId;
} }
} }
@@ -0,0 +1,70 @@
package org.apollo.game.event.impl;
/**
* An event which is sent by the client when a player uses one inventory item on another.
*
* @author Chris Fletcher
*/
public final class ItemOnItemEvent extends InventoryItemEvent {
/**
* The interface id of the target item.
*/
private final int targetInterface;
/**
* The id of the target item.
*/
private final int targetId;
/**
* The slot of the target item.
*/
private final int targetSlot;
/**
* Creates a new item-on-item event.
*
* @param usedInterface The interface id of the used item.
* @param usedId The id of the used item.
* @param usedSlot The slot of the target item.
* @param targetInterface The interface id of the target item.
* @param targetId The id of the target item.
* @param targetSlot The slot of the target item.
*/
public ItemOnItemEvent(int usedInterface, int usedId, int usedSlot, int targetInterface, int targetId,
int targetSlot) {
super(0, usedInterface, usedId, usedSlot);
this.targetInterface = targetInterface;
this.targetSlot = targetSlot;
this.targetId = targetId;
}
/**
* Gets the interface id of the target item.
*
* @return The target item's interface id.
*/
public int getTargetInterfaceId() {
return targetInterface;
}
/**
* Gets the id of the target item.
*
* @return The target item's interface id.
*/
public int getTargetId() {
return targetId;
}
/**
* Gets the slot of the target item.
*
* @return The slot of the target item.
*/
public int getTargetSlot() {
return targetSlot;
}
}
@@ -0,0 +1,34 @@
package org.apollo.net.release.r317;
import org.apollo.game.event.impl.ItemOnItemEvent;
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 ItemOnItemEventDecoder}.
*
* @author Chris Fletcher
*/
final class ItemOnItemEventDecoder extends EventDecoder<ItemOnItemEvent> {
@Override
public ItemOnItemEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int targetSlot = (int) reader.getUnsigned(DataType.SHORT);
int usedSlot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
int targetId = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
int targetInterface = (int) reader.getUnsigned(DataType.SHORT);
int usedId = (int) reader.getSigned(DataType.SHORT, DataOrder.LITTLE);
int usedInterface = (int) reader.getUnsigned(DataType.SHORT);
return new ItemOnItemEvent(usedInterface, usedId, usedSlot, targetInterface, targetId, targetSlot);
}
}
@@ -94,6 +94,7 @@ public final class Release317 extends Release {
register(135, new FifthItemActionEventDecoder()); register(135, new FifthItemActionEventDecoder());
register(130, new ClosedInterfaceEventDecoder()); register(130, new ClosedInterfaceEventDecoder());
register(208, new EnteredAmountEventDecoder()); register(208, new EnteredAmountEventDecoder());
register(53, new ItemOnItemEventDecoder());
// register encoders // register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder()); register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());
@@ -0,0 +1,34 @@
package org.apollo.net.release.r377;
import org.apollo.game.event.impl.ItemOnItemEvent;
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 ItemOnItemEventDecoder}.
*
* @author Chris Fletcher
*/
final class ItemOnItemEventDecoder extends EventDecoder<ItemOnItemEvent> {
@Override
public ItemOnItemEvent decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int targetId = (int) reader.getUnsigned(DataType.SHORT);
int usedSlot = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
int usedId = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE);
int targetInterface = (int) reader.getUnsigned(DataType.SHORT, DataOrder.LITTLE, DataTransformation.ADD);
int targetSlot = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
int usedInterface = (int) reader.getUnsigned(DataType.SHORT, DataTransformation.ADD);
return new ItemOnItemEvent(usedInterface, usedId, usedSlot, targetInterface, targetId, targetSlot);
}
}
@@ -94,6 +94,7 @@ public final class Release377 extends Release {
register(158, new FifthItemActionEventDecoder()); register(158, new FifthItemActionEventDecoder());
register(110, new ClosedInterfaceEventDecoder()); register(110, new ClosedInterfaceEventDecoder());
register(75, new EnteredAmountEventDecoder()); register(75, new EnteredAmountEventDecoder());
register(1, new ItemOnItemEventDecoder());
// register encoders // register encoders
register(IdAssignmentEvent.class, new IdAssignmentEventEncoder()); register(IdAssignmentEvent.class, new IdAssignmentEventEncoder());