mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-06 16:51:37 +00:00
Improve GroupedRegionUpdateMessageEncoder code
This commit is contained in:
@@ -35,10 +35,10 @@ 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")
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
Reference in New Issue
Block a user