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
public GamePacket encode(GroupedRegionUpdateMessage message) {
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, DataTransformation.NEGATE, region.getLocalX(lastKnownRegion));
builder.put(DataType.BYTE, region.getLocalY(base));
builder.put(DataType.BYTE, DataTransformation.NEGATE, region.getLocalX(base));
for (RegionUpdateMessage update : message.getMessages()) {
@SuppressWarnings("unchecked")
MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) release
.getMessageEncoder(update.getClass());
.getMessageEncoder(update.getClass());
GamePacket packet = encoder.encode(update);
builder.put(DataType.BYTE, packet.getOpcode());
@@ -1,7 +1,5 @@
package org.apollo.game.release.r377;
import java.util.Map;
import org.apollo.game.message.impl.GroupedRegionUpdateMessage;
import org.apollo.game.message.impl.RegionUpdateMessage;
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.meta.PacketType;
import org.apollo.net.release.MessageEncoder;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import org.apollo.net.release.Release;
/**
* A {@link MessageEncoder} for the {@link GroupedRegionUpdateMessage}.
@@ -23,17 +19,17 @@ import com.google.common.collect.ImmutableMap;
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.
*
* @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) {
this.encoders = ImmutableMap.copyOf(encoders);
public GroupedRegionUpdateMessageEncoder(Release release) {
this.release = release;
}
@Override
@@ -46,9 +42,8 @@ public final class GroupedRegionUpdateMessageEncoder extends MessageEncoder<Grou
for (RegionUpdateMessage update : message.getMessages()) {
@SuppressWarnings("unchecked")
MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) encoders.get(update);
Preconditions.checkState(encoder != null, update.getClass() + " does not have a registered encoder in GroupedRegionUpdateMessageEncoder.");
MessageEncoder<RegionUpdateMessage> encoder = (MessageEncoder<RegionUpdateMessage>) release
.getMessageEncoder(update.getClass());
GamePacket packet = encoder.encode(update);
builder.put(DataType.BYTE, packet.getOpcode());
@@ -1,8 +1,5 @@
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.CloseInterfaceMessage;
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.PrivacyOptionMessage;
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.RemoveTileItemMessage;
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.UpdateWeightMessage;
import org.apollo.net.meta.PacketMetaDataGroup;
import org.apollo.net.release.MessageEncoder;
import org.apollo.net.release.Release;
/**
@@ -104,7 +99,6 @@ public final class Release377 extends Release {
* Initialises this release by registering encoders and decoders.
*/
private void init() {
// register decoders
WalkMessageDecoder walkMessageDecoder = new WalkMessageDecoder();
register(213, walkMessageDecoder);
register(28, walkMessageDecoder);
@@ -174,7 +168,6 @@ public final class Release377 extends Release {
register(160, new RemoveIgnoreMessageDecoder());
register(227, new PrivateChatMessageDecoder());
// register encoders
register(IdAssignmentMessage.class, new IdAssignmentMessageEncoder());
register(RegionChangeMessage.class, new RegionChangeMessageEncoder());
register(ServerChatMessage.class, new ServerMessageMessageEncoder());
@@ -212,25 +205,7 @@ public final class Release377 extends Release {
register(SendObjectMessage.class, new SendObjectMessageEncoder());
register(RemoveObjectMessage.class, new RemoveObjectMessageEncoder());
Map<Class<? extends RegionUpdateMessage>, MessageEncoder<? extends RegionUpdateMessage>> regionUpdates = new HashMap<>();
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(GroupedRegionUpdateMessage.class, new GroupedRegionUpdateMessageEncoder(this));
register(ClearRegionMessage.class, new ClearRegionMessageEncoder());
register(ForwardPrivateChatMessage.class, new ForwardPrivateChatMessageEncoder());