Improve GroupedRegionUpdateMessageEncoder code

This commit is contained in:
Major-
2016-02-10 19:38:25 +00:00
parent a880127c5f
commit d10eb1267f
3 changed files with 13 additions and 43 deletions
@@ -35,15 +35,15 @@ public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<Grou
@Override @Override
public GamePacket encode(GroupedRegionUpdateMessage message) { public GamePacket encode(GroupedRegionUpdateMessage message) {
GamePacketBuilder builder = new GamePacketBuilder(60, PacketType.VARIABLE_SHORT); GamePacketBuilder builder = new GamePacketBuilder(60, PacketType.VARIABLE_SHORT);
Position lastKnownRegion = message.getLastKnownRegion(), region = message.getRegionPosition(); Position base = message.getLastKnownRegion(), region = message.getRegionPosition();
builder.put(DataType.BYTE, region.getLocalY(lastKnownRegion)); builder.put(DataType.BYTE, region.getLocalY(base));
builder.put(DataType.BYTE, DataTransformation.NEGATE, region.getLocalX(lastKnownRegion)); builder.put(DataType.BYTE, DataTransformation.NEGATE, region.getLocalX(base));
for (RegionUpdateMessage update : message.getMessages()) { for (RegionUpdateMessage update : message.getMessages()) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) release MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) release
.getMessageEncoder(update.getClass()); .getMessageEncoder(update.getClass());
GamePacket packet = encoder.encode(update); GamePacket packet = encoder.encode(update);
builder.put(DataType.BYTE, packet.getOpcode()); builder.put(DataType.BYTE, packet.getOpcode());
@@ -1,7 +1,5 @@
package org.apollo.game.release.r377; package org.apollo.game.release.r377;
import java.util.Map;
import org.apollo.game.message.impl.GroupedRegionUpdateMessage; import org.apollo.game.message.impl.GroupedRegionUpdateMessage;
import org.apollo.game.message.impl.RegionUpdateMessage; import org.apollo.game.message.impl.RegionUpdateMessage;
import org.apollo.game.model.Position; import org.apollo.game.model.Position;
@@ -11,9 +9,7 @@ import org.apollo.net.codec.game.GamePacket;
import org.apollo.net.codec.game.GamePacketBuilder; import org.apollo.net.codec.game.GamePacketBuilder;
import org.apollo.net.meta.PacketType; import org.apollo.net.meta.PacketType;
import org.apollo.net.release.MessageEncoder; import org.apollo.net.release.MessageEncoder;
import org.apollo.net.release.Release;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
/** /**
* A {@link MessageEncoder} for the {@link GroupedRegionUpdateMessage}. * A {@link MessageEncoder} for the {@link GroupedRegionUpdateMessage}.
@@ -23,17 +19,17 @@ import com.google.common.collect.ImmutableMap;
public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<GroupedRegionUpdateMessage> { public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<GroupedRegionUpdateMessage> {
/** /**
* The Map of RegionUpdateMessages to MessageEncoders. * The Release containing the MessageEncoders for the RegionUpdateMessages.
*/ */
private final Map<Class<? extends RegionUpdateMessage>, MessageEncoder<? extends RegionUpdateMessage>> encoders; private final Release release;
/** /**
* Creates the GroupedRegionUpdateMessageEncoder. * Creates the GroupedRegionUpdateMessageEncoder.
* *
* @param encoders The Map of RegionUpdateMessages to MessageEncoders. * @param release The {@link Release} containing the {@link MessageEncoder}s for the {@link RegionUpdateMessage}s.
*/ */
public GroupedRegionUpdateMessageEncoder(Map<Class<? extends RegionUpdateMessage>, MessageEncoder<? extends RegionUpdateMessage>> encoders) { public GroupedRegionUpdateMessageEncoder(Release release) {
this.encoders = ImmutableMap.copyOf(encoders); this.release = release;
} }
@Override @Override
@@ -46,9 +42,8 @@ public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<Grou
for (RegionUpdateMessage update : message.getMessages()) { for (RegionUpdateMessage update : message.getMessages()) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) encoders.get(update); MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) release
.getMessageEncoder(update.getClass());
Preconditions.checkState(encoder != null, update.getClass() + " does not have a registered encoder in GroupedRegionUpdateMessageEncoder.");
GamePacket packet = encoder.encode(update); GamePacket packet = encoder.encode(update);
builder.put(DataType.BYTE, packet.getOpcode()); builder.put(DataType.BYTE, packet.getOpcode());
@@ -1,8 +1,5 @@
package org.apollo.game.release.r377; package org.apollo.game.release.r377;
import java.util.HashMap;
import java.util.Map;
import org.apollo.game.message.impl.ClearRegionMessage; import org.apollo.game.message.impl.ClearRegionMessage;
import org.apollo.game.message.impl.CloseInterfaceMessage; import org.apollo.game.message.impl.CloseInterfaceMessage;
import org.apollo.game.message.impl.ConfigMessage; import org.apollo.game.message.impl.ConfigMessage;
@@ -27,7 +24,6 @@ import org.apollo.game.message.impl.OpenSidebarMessage;
import org.apollo.game.message.impl.PlayerSynchronizationMessage; import org.apollo.game.message.impl.PlayerSynchronizationMessage;
import org.apollo.game.message.impl.PrivacyOptionMessage; import org.apollo.game.message.impl.PrivacyOptionMessage;
import org.apollo.game.message.impl.RegionChangeMessage; import org.apollo.game.message.impl.RegionChangeMessage;
import org.apollo.game.message.impl.RegionUpdateMessage;
import org.apollo.game.message.impl.RemoveObjectMessage; import org.apollo.game.message.impl.RemoveObjectMessage;
import org.apollo.game.message.impl.RemoveTileItemMessage; import org.apollo.game.message.impl.RemoveTileItemMessage;
import org.apollo.game.message.impl.SendFriendMessage; import org.apollo.game.message.impl.SendFriendMessage;
@@ -51,7 +47,6 @@ import org.apollo.game.message.impl.UpdateSlottedItemsMessage;
import org.apollo.game.message.impl.UpdateTileItemMessage; import org.apollo.game.message.impl.UpdateTileItemMessage;
import org.apollo.game.message.impl.UpdateWeightMessage; import org.apollo.game.message.impl.UpdateWeightMessage;
import org.apollo.net.meta.PacketMetaDataGroup; import org.apollo.net.meta.PacketMetaDataGroup;
import org.apollo.net.release.MessageEncoder;
import org.apollo.net.release.Release; import org.apollo.net.release.Release;
/** /**
@@ -104,7 +99,6 @@ public final class Release377 extends Release {
* Initialises this release by registering encoders and decoders. * Initialises this release by registering encoders and decoders.
*/ */
private void init() { private void init() {
// register decoders
WalkMessageDecoder walkMessageDecoder = new WalkMessageDecoder(); WalkMessageDecoder walkMessageDecoder = new WalkMessageDecoder();
register(213, walkMessageDecoder); register(213, walkMessageDecoder);
register(28, walkMessageDecoder); register(28, walkMessageDecoder);
@@ -174,7 +168,6 @@ public final class Release377 extends Release {
register(160, new RemoveIgnoreMessageDecoder()); register(160, new RemoveIgnoreMessageDecoder());
register(227, new PrivateChatMessageDecoder()); register(227, new PrivateChatMessageDecoder());
// register encoders
register(IdAssignmentMessage.class, new IdAssignmentMessageEncoder()); register(IdAssignmentMessage.class, new IdAssignmentMessageEncoder());
register(RegionChangeMessage.class, new RegionChangeMessageEncoder()); register(RegionChangeMessage.class, new RegionChangeMessageEncoder());
register(ServerChatMessage.class, new ServerMessageMessageEncoder()); register(ServerChatMessage.class, new ServerMessageMessageEncoder());
@@ -212,25 +205,7 @@ public final class Release377 extends Release {
register(SendObjectMessage.class, new SendObjectMessageEncoder()); register(SendObjectMessage.class, new SendObjectMessageEncoder());
register(RemoveObjectMessage.class, new RemoveObjectMessageEncoder()); register(RemoveObjectMessage.class, new RemoveObjectMessageEncoder());
Map<Class<? extends RegionUpdateMessage>, MessageEncoder<? extends RegionUpdateMessage>> regionUpdates = new HashMap<>(); register(GroupedRegionUpdateMessage.class, new GroupedRegionUpdateMessageEncoder(this));
regionUpdates.put(SendPublicTileItemMessage.class, new AddGlobalTileItemMessageEncoder());
regionUpdates.put(SendTileItemMessage.class, new AddTileItemMessageEncoder());
regionUpdates.put(UpdateTileItemMessage.class, new UpdateTileItemMessageEncoder());
regionUpdates.put(RemoveTileItemMessage.class, new RemoveTileItemMessageEncoder());
regionUpdates.put(SendObjectMessage.class, new SendObjectMessageEncoder());
regionUpdates.put(RemoveObjectMessage.class, new RemoveObjectMessageEncoder());
for (Map.Entry<Class<? extends RegionUpdateMessage>, MessageEncoder<? extends RegionUpdateMessage>> entry : regionUpdates.entrySet()) {
@SuppressWarnings("unchecked")
Class<RegionUpdateMessage> clazz = (Class<RegionUpdateMessage>) entry.getKey();
@SuppressWarnings("unchecked")
MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) entry.getValue();
register(clazz, encoder);
}
register(GroupedRegionUpdateMessage.class, new GroupedRegionUpdateMessageEncoder(regionUpdates));
register(ClearRegionMessage.class, new ClearRegionMessageEncoder()); register(ClearRegionMessage.class, new ClearRegionMessageEncoder());
register(ForwardPrivateChatMessage.class, new ForwardPrivateChatMessageEncoder()); register(ForwardPrivateChatMessage.class, new ForwardPrivateChatMessageEncoder());