Merge pull request #52 from thispixel/master.

Fix confusion between mouse click and flagged mouse movement.
This commit is contained in:
Major-
2015-02-12 17:20:24 +00:00
9 changed files with 166 additions and 18 deletions
@@ -7,7 +7,7 @@ import org.apollo.game.message.Message;
*
* @author Major
*/
public final class MouseClickMessage extends Message {
public final class FlaggedMouseEventMessage extends Message {
/**
* The number of clicks on this point (i.e. the point ({@link #x}, {@link #y})).
@@ -38,7 +38,7 @@ public final class MouseClickMessage extends Message {
* @param y The y coordinate of the mouse click.
* @param delta If the coordinates represent a change in x/y, rather than the values themselves.
*/
public MouseClickMessage(int clickCount, int x, int y, boolean delta) {
public FlaggedMouseEventMessage(int clickCount, int x, int y, boolean delta) {
this.clickCount = clickCount;
this.x = x;
this.y = y;
@@ -0,0 +1,82 @@
package org.apollo.game.message.impl;
import org.apollo.game.message.Message;
/**
* A {@link Message} sent by the client to indicate when the mouse button/s have been clicked. This can be used in
* combination with {@link org.apollo.game.message.impl.FocusUpdateMessage} to work out if the player is clicking
* whilst the client is closed
*
* @author Stuart
*/
public final class MouseClickedMessage extends Message {
/**
* Time in milliseconds since the last click
*/
private final long lastClickedDelay;
/**
* Right mouse button flag
*/
private final boolean rightMouseButton;
/**
* The y position of the cursor
*/
private final int x;
/**
* The x position of the cursor
*/
private final int y;
/**
* Creates a new mouse clicked message
*
* @param lastClickedDelay The delay since the last click
* @param rightMouseButton Whether or not the right mouse button was used
* @param x The x cursor position when clicked
* @param y The y cursor position when clicked
*/
public MouseClickedMessage(long lastClickedDelay, boolean rightMouseButton, int x, int y) {
this.lastClickedDelay = lastClickedDelay;
this.rightMouseButton = rightMouseButton;
this.x = x;
this.y = y;
}
/**
* Gets the time in milliseconds since the last click
*
* @return The time in milliseconds since the last click
*/
public long getLastClickedDelay() {
return lastClickedDelay;
}
/**
* Gets whether the right mouse button was used or not
*
* @return If the mouse right button was used to click
*/
public boolean usingRightMouseButton() {
return rightMouseButton;
}
/**
* Gets the x position of the cursor
*
* @return The x position of the cursor when clicked
*/
public int getX() {
return x;
}
/**
* Gets the y position of the cursor
*
* @return The y position of the cursor when clicked
*/
public int getY() {
return y;
}
}
@@ -1,20 +1,20 @@
package org.apollo.net.release.r317;
import org.apollo.game.message.impl.MouseClickMessage;
import org.apollo.game.message.impl.FlaggedMouseEventMessage;
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.MessageDecoder;
/**
* A {@link MessageDecoder} for the {@link MouseClickMessage}.
* A {@link MessageDecoder} for the {@link org.apollo.game.message.impl.FlaggedMouseEventMessage}.
*
* @author Major
*/
public final class MouseClickMessageDecoder extends MessageDecoder<MouseClickMessage> {
public final class FlaggedMouseEventMessageDecoder extends MessageDecoder<FlaggedMouseEventMessage> {
@Override
public MouseClickMessage decode(GamePacket packet) {
public FlaggedMouseEventMessage decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int read;
if (reader.getLength() == 2) {
@@ -22,7 +22,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder<MouseClickMes
int clicks = (read >> 12);
int dX = (read >> 6) & 0x3f;
int dY = read & 0x3f;
return new MouseClickMessage(clicks, dX, dY, true);
return new FlaggedMouseEventMessage(clicks, dX, dY, true);
} else if (reader.getLength() == 3) {
read = (int) reader.getUnsigned(DataType.TRI_BYTE) & ~0x800000;
} else {
@@ -33,7 +33,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder<MouseClickMes
int x = (read & 0x7f) % 765;
int y = (read & 0x7f) / 765;
return new MouseClickMessage(clicks, x, y, false);
return new FlaggedMouseEventMessage(clicks, x, y, false);
}
}
@@ -0,0 +1,32 @@
package org.apollo.net.release.r317;
import org.apollo.game.message.impl.MouseClickedMessage;
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.MessageDecoder;
/**
* A {@link org.apollo.net.release.MessageDecoder} for the {@link org.apollo.game.message.impl.MouseClickedMessage}
*
* @author Stuart
*/
public final class MouseClickedMessageDecoder extends MessageDecoder<MouseClickedMessage> {
@Override
public MouseClickedMessage decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int value = (int)reader.getUnsigned(DataType.INT);
long delay = (value >> 20) * 50;
boolean rightMouseButton = ((value >> 19) & 0x1) == 1;
int cords = (value & 0x3FFFF);
int x = cords % 765;
int y = cords / 765;
return new MouseClickedMessage(delay, rightMouseButton, x, y);
}
}
@@ -128,7 +128,8 @@ public final class Release317 extends Release {
register(237, new MagicOnItemMessageDecoder());
register(3, new FocusUpdateMessageDecoder());
register(45, new MouseClickMessageDecoder());
register(45, new FlaggedMouseEventMessageDecoder());
register(241, new MouseClickedMessageDecoder());
register(86, new ArrowKeyMessageDecoder());
register(95, new PrivacyOptionMessageDecoder());
@@ -1,20 +1,20 @@
package org.apollo.net.release.r377;
import org.apollo.game.message.impl.MouseClickMessage;
import org.apollo.game.message.impl.FlaggedMouseEventMessage;
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.MessageDecoder;
/**
* A {@link MessageDecoder} for the {@link MouseClickMessage}.
* A {@link MessageDecoder} for the {@link org.apollo.game.message.impl.FlaggedMouseEventMessage}.
*
* @author Major
*/
public final class MouseClickMessageDecoder extends MessageDecoder<MouseClickMessage> {
public final class FlaggedMouseEventMessageDecoder extends MessageDecoder<FlaggedMouseEventMessage> {
@Override
public MouseClickMessage decode(GamePacket packet) {
public FlaggedMouseEventMessage decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int read, clicks, x, y;
@@ -23,7 +23,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder<MouseClickMes
clicks = (read >> 12);
x = (read >> 6) & 0x3f;
y = read & 0x3f;
return new MouseClickMessage(clicks, x, y, true);
return new FlaggedMouseEventMessage(clicks, x, y, true);
} else if (reader.getLength() == 3) {
read = (int) reader.getUnsigned(DataType.TRI_BYTE) & ~0x800000;
} else {
@@ -33,7 +33,7 @@ public final class MouseClickMessageDecoder extends MessageDecoder<MouseClickMes
clicks = (read >> 19);
x = (read & 0x7f) % 765;
y = (read & 0x7f) / 765;
return new MouseClickMessage(clicks, x, y, false);
return new FlaggedMouseEventMessage(clicks, x, y, false);
}
}
@@ -0,0 +1,32 @@
package org.apollo.net.release.r377;
import org.apollo.game.message.impl.MouseClickedMessage;
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.MessageDecoder;
/**
* A {@link org.apollo.net.release.MessageDecoder} for the {@link org.apollo.game.message.impl.MouseClickedMessage}
*
* @author Stuart
*/
public final class MouseClickedMessageDecoder extends MessageDecoder<MouseClickedMessage> {
@Override
public MouseClickedMessage decode(GamePacket packet) {
GamePacketReader reader = new GamePacketReader(packet);
int value = (int)reader.getUnsigned(DataType.INT);
long delay = (value >> 20) * 50;
boolean rightMouseButton = ((value >> 19) & 0x1) == 1;
int cords = (value & 0x3FFFF);
int x = cords % 765;
int y = cords / 765;
return new MouseClickedMessage(delay, rightMouseButton, x, y);
}
}
@@ -13,7 +13,7 @@ import org.apollo.util.TextUtil;
*
* @author Major
*/
public final class PrivateMessageMessageDecoder extends MessageDecoder<PrivateMessageMessage> {
public final class PrivateChatMessageDecoder extends MessageDecoder<PrivateMessageMessage> {
@Override
public PrivateMessageMessage decode(GamePacket packet) {
@@ -128,7 +128,8 @@ public final class Release377 extends Release {
register(36, new MagicOnItemMessageDecoder());
register(187, new FocusUpdateMessageDecoder());
register(19, new MouseClickMessageDecoder());
register(19, new MouseClickedMessageDecoder());
register(171, new FlaggedMouseEventMessageDecoder());
register(140, new ArrowKeyMessageDecoder());
register(176, new PrivacyOptionMessageDecoder());
@@ -152,7 +153,7 @@ public final class Release377 extends Release {
register(217, new AddIgnoreMessageDecoder());
register(141, new RemoveFriendMessageDecoder());
register(160, new RemoveIgnoreMessageDecoder());
register(227, new PrivateMessageMessageDecoder());
register(227, new PrivateChatMessageDecoder());
// register encoders
register(IdAssignmentMessage.class, new IdAssignmentMessageEncoder());