package net.scapeemulator.game.msg;
import java.util.HashMap;
import java.util.Map;
import net.scapeemulator.game.model.ExtendedOption;
import net.scapeemulator.game.msg.decoder.CameraAngleMessageDecoder;
import net.scapeemulator.game.msg.decoder.ChatMessageDecoder;
import net.scapeemulator.game.msg.decoder.ClickMessageDecoder;
import net.scapeemulator.game.msg.decoder.CommandMessageDecoder;
import net.scapeemulator.game.msg.decoder.DisplayMessageDecoder;
import net.scapeemulator.game.msg.decoder.FlagsMessageDecoder;
import net.scapeemulator.game.msg.decoder.FocusMessageDecoder;
import net.scapeemulator.game.msg.decoder.FriendListOperationMessageDecoder;
import net.scapeemulator.game.msg.decoder.GrandExchangeSearchMessageDecoder;
import net.scapeemulator.game.msg.decoder.IdleLogoutMessageDecoder;
import net.scapeemulator.game.msg.decoder.IntegerScriptInputMessageDecoder;
import net.scapeemulator.game.msg.decoder.PingMessageDecoder;
import net.scapeemulator.game.msg.decoder.PrivacySettingsUpdateMessageDecoder;
import net.scapeemulator.game.msg.decoder.PrivateChatSentMessageDecoder;
import net.scapeemulator.game.msg.decoder.RegionChangedMessageDecoder;
import net.scapeemulator.game.msg.decoder.SceneRebuiltMessageDecoder;
import net.scapeemulator.game.msg.decoder.SequenceNumberMessageDecoder;
import net.scapeemulator.game.msg.decoder.UsernameScriptInputMessageDecoder;
import net.scapeemulator.game.msg.decoder.WalkMessageDecoder;
import net.scapeemulator.game.msg.decoder.button.ButtonOptionMessageDecoder;
import net.scapeemulator.game.msg.decoder.button.OldButtonMessageDecoder;
import net.scapeemulator.game.msg.decoder.grounditem.GroundItemOptionThreeMessageDecoder;
import net.scapeemulator.game.msg.decoder.grounditem.GroundItemOptionFourMessageDecoder;
import net.scapeemulator.game.msg.decoder.inter.InterfaceClosedMessageDecoder;
import net.scapeemulator.game.msg.decoder.inter.InterfaceInputMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemDropMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemExamineMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOnGroundItemMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOnItemMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOnNPCMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOnObjectMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOptionFourMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOptionOneMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.ItemOptionTwoMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.MagicOnItemMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.RemoveItemMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.SwapItemsMessageDecoder;
import net.scapeemulator.game.msg.decoder.item.SwapItemsTwoMessageDecoder;
import net.scapeemulator.game.msg.decoder.npc.MagicOnNPCMessageDecoder;
import net.scapeemulator.game.msg.decoder.npc.NPCExamineMessageDecoder;
import net.scapeemulator.game.msg.decoder.npc.NPCOptionTwoMessageDecoder;
import net.scapeemulator.game.msg.decoder.npc.NPCOptionOneMessageDecoder;
import net.scapeemulator.game.msg.decoder.npc.NPCOptionThreeMessageDecoder;
import net.scapeemulator.game.msg.decoder.object.ObjectExamineMessageDecoder;
import net.scapeemulator.game.msg.decoder.object.ObjectOptionFourMessageDecoder;
import net.scapeemulator.game.msg.decoder.object.ObjectOptionOneMessageDecoder;
import net.scapeemulator.game.msg.decoder.object.ObjectOptionThreeMessageDecoder;
import net.scapeemulator.game.msg.decoder.object.ObjectOptionTwoMessageDecoder;
import net.scapeemulator.game.msg.decoder.object.ObjectOptionFiveMessageDecoder;
import net.scapeemulator.game.msg.decoder.player.PlayerOptionFourMessageDecoder;
import net.scapeemulator.game.msg.decoder.player.PlayerOptionThreeMessageDecoder;
import net.scapeemulator.game.msg.encoder.CameraAngleMessageEncoder;
import net.scapeemulator.game.msg.encoder.CameraFaceMessageEncoder;
import net.scapeemulator.game.msg.encoder.CameraMoveMessageEncoder;
import net.scapeemulator.game.msg.encoder.CameraResetMessageEncoder;
import net.scapeemulator.game.msg.encoder.ConfigMessageEncoder;
import net.scapeemulator.game.msg.encoder.CreateProjectileMessageEncoder;
import net.scapeemulator.game.msg.encoder.EnergyMessageEncoder;
import net.scapeemulator.game.msg.encoder.FriendStatusMessageEncoder;
import net.scapeemulator.game.msg.encoder.FriendsListStatusMessageEncoder;
import net.scapeemulator.game.msg.encoder.GrandExchangeUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.GroundItemCreateMessageEncoder;
import net.scapeemulator.game.msg.encoder.GroundItemRemoveMessageEncoder;
import net.scapeemulator.game.msg.encoder.GroundItemUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.GroundObjectAnimateMessageEncoder;
import net.scapeemulator.game.msg.encoder.GroundObjectRemoveMessageEncoder;
import net.scapeemulator.game.msg.encoder.GroundObjectUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.RegionConstructMessageEncoder;
import net.scapeemulator.game.msg.encoder.RenameTileActionMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceAccessMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceAnimationMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceCloseMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceItemMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceItemsMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceNPCHeadMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceOpenMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfacePlayerHeadMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceResetItemsMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceRootMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceSlottedItemsMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceTextMessageEncoder;
import net.scapeemulator.game.msg.encoder.InterfaceVisibleMessageEncoder;
import net.scapeemulator.game.msg.encoder.LogoutMessageEncoder;
import net.scapeemulator.game.msg.encoder.NpcUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.PlacementCoordsMessageEncoder;
import net.scapeemulator.game.msg.encoder.PlayerOptionMessageEncoder;
import net.scapeemulator.game.msg.encoder.PlayerUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.PrivacySettingsUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.PrivateChatReceivedMessageEncoder;
import net.scapeemulator.game.msg.encoder.PrivateChatSentMessageEncoder;
import net.scapeemulator.game.msg.encoder.RegionChangeMessageEncoder;
import net.scapeemulator.game.msg.encoder.ResetMinimapFlagMessageEncoder;
import net.scapeemulator.game.msg.encoder.ScriptIntMessageEncoder;
import net.scapeemulator.game.msg.encoder.ScriptMessageEncoder;
import net.scapeemulator.game.msg.encoder.ScriptStringMessageEncoder;
import net.scapeemulator.game.msg.encoder.SendIgnoresMessageEncoder;
import net.scapeemulator.game.msg.encoder.ServerMessageEncoder;
import net.scapeemulator.game.msg.encoder.SetPositionMessageEncoder;
import net.scapeemulator.game.msg.encoder.SkillMessageEncoder;
import net.scapeemulator.game.msg.encoder.MinimapUpdateMessageEncoder;
import net.scapeemulator.game.msg.encoder.VarbitMessageEncoder;
import net.scapeemulator.game.util.LandscapeKeyTable;
public final class CodecRepository {
private final MessageDecoder<?>[] inCodecs = new MessageDecoder<?>[256];
private final Map<Class<?>, MessageEncoder<?>> outCodecs = new HashMap<>();
public CodecRepository(LandscapeKeyTable table) {
/* decoders */
bind(new PingMessageDecoder());
bind(new IdleLogoutMessageDecoder());
bind(new OldButtonMessageDecoder());
bind(new WalkMessageDecoder(39));
bind(new WalkMessageDecoder(77));
bind(new WalkMessageDecoder(215));
bind(new ChatMessageDecoder());
bind(new CommandMessageDecoder());
bind(new DisplayMessageDecoder());
bind(new RemoveItemMessageDecoder());
bind(new RegionChangedMessageDecoder());
bind(new ClickMessageDecoder());
bind(new FocusMessageDecoder());
bind(new CameraAngleMessageDecoder());
bind(new FlagsMessageDecoder());
bind(new SequenceNumberMessageDecoder());
bind(new InterfaceClosedMessageDecoder());
bind(new IntegerScriptInputMessageDecoder());
bind(new UsernameScriptInputMessageDecoder());
bind(new ObjectOptionOneMessageDecoder());
bind(new ObjectOptionTwoMessageDecoder());
bind(new ObjectOptionThreeMessageDecoder());
bind(new ObjectOptionFourMessageDecoder());
bind(new ObjectOptionFiveMessageDecoder());
bind(new ObjectExamineMessageDecoder());
bind(new SceneRebuiltMessageDecoder());
bind(new PrivacySettingsUpdateMessageDecoder());
bind(new FriendListOperationMessageDecoder(34));
bind(new FriendListOperationMessageDecoder(57));
bind(new FriendListOperationMessageDecoder(120));
bind(new FriendListOperationMessageDecoder(213));
bind(new PrivateChatSentMessageDecoder());
bind(new GroundItemOptionThreeMessageDecoder());
bind(new GroundItemOptionFourMessageDecoder());
bind(new GrandExchangeSearchMessageDecoder());
/* Bind all the item decoders */
bind(new ItemOptionOneMessageDecoder());
bind(new ItemOptionTwoMessageDecoder());
bind(new ItemOptionFourMessageDecoder());
bind(new ItemExamineMessageDecoder());
bind(new ItemOnNPCMessageDecoder());
bind(new ItemDropMessageDecoder());
bind(new SwapItemsMessageDecoder());
bind(new SwapItemsTwoMessageDecoder());
bind(new ItemOnItemMessageDecoder());
bind(new ItemOnObjectMessageDecoder());
bind(new ItemOnGroundItemMessageDecoder());
bind(new MagicOnItemMessageDecoder());
/* Bind all the button option decoders */
bind(new ButtonOptionMessageDecoder(ExtendedOption.ONE, 155));
bind(new ButtonOptionMessageDecoder(ExtendedOption.TWO, 196));
bind(new ButtonOptionMessageDecoder(ExtendedOption.THREE, 124));
bind(new ButtonOptionMessageDecoder(ExtendedOption.FOUR, 199));
bind(new ButtonOptionMessageDecoder(ExtendedOption.FIVE, 234));
bind(new ButtonOptionMessageDecoder(ExtendedOption.SIX, 168));
bind(new ButtonOptionMessageDecoder(ExtendedOption.SEVEN, 166));
bind(new ButtonOptionMessageDecoder(ExtendedOption.EIGHT, 64));
bind(new ButtonOptionMessageDecoder(ExtendedOption.NINE, 9));
bind(new InterfaceInputMessageDecoder());
bind(new PlayerOptionFourMessageDecoder());
bind(new PlayerOptionThreeMessageDecoder());
bind(new NPCOptionOneMessageDecoder());
bind(new NPCOptionThreeMessageDecoder());
bind(new NPCExamineMessageDecoder());
bind(new NPCOptionTwoMessageDecoder());
bind(new MagicOnNPCMessageDecoder());
/* encoders */
bind(new SetPositionMessageEncoder());
bind(new RegionChangeMessageEncoder(table));
bind(new RegionConstructMessageEncoder(table));
bind(new InterfaceRootMessageEncoder());
bind(new InterfaceOpenMessageEncoder());
bind(new InterfaceCloseMessageEncoder());
bind(new InterfaceVisibleMessageEncoder());
bind(new InterfaceItemMessageEncoder());
bind(new InterfaceTextMessageEncoder());
bind(new InterfaceItemsMessageEncoder());
bind(new InterfaceSlottedItemsMessageEncoder());
bind(new InterfaceResetItemsMessageEncoder());
bind(new InterfaceAccessMessageEncoder());
bind(new InterfacePlayerHeadMessageEncoder());
bind(new InterfaceNPCHeadMessageEncoder());
bind(new InterfaceAnimationMessageEncoder());
bind(new MinimapUpdateMessageEncoder());
bind(new ServerMessageEncoder());
bind(new RenameTileActionMessageEncoder());
bind(new LogoutMessageEncoder());
bind(new CameraMoveMessageEncoder());
bind(new CameraAngleMessageEncoder());
bind(new CameraResetMessageEncoder());
bind(new CameraFaceMessageEncoder());
bind(new PlayerUpdateMessageEncoder());
bind(new PrivacySettingsUpdateMessageEncoder());
bind(new PrivateChatSentMessageEncoder());
bind(new PrivateChatReceivedMessageEncoder());
bind(new SkillMessageEncoder());
bind(new EnergyMessageEncoder());
bind(new ResetMinimapFlagMessageEncoder());
bind(new ConfigMessageEncoder());
bind(new VarbitMessageEncoder());
bind(new ScriptMessageEncoder());
bind(new NpcUpdateMessageEncoder());
bind(new ScriptStringMessageEncoder());
bind(new ScriptIntMessageEncoder());
bind(new PlacementCoordsMessageEncoder());
bind(new GroundItemCreateMessageEncoder());
bind(new GroundItemUpdateMessageEncoder());
bind(new GroundItemRemoveMessageEncoder());
bind(new GroundObjectUpdateMessageEncoder());
bind(new GroundObjectRemoveMessageEncoder());
bind(new GroundObjectAnimateMessageEncoder());
bind(new PlayerOptionMessageEncoder());
bind(new CreateProjectileMessageEncoder());
bind(new GrandExchangeUpdateMessageEncoder());
bind(new SendIgnoresMessageEncoder());
bind(new FriendStatusMessageEncoder());
bind(new FriendsListStatusMessageEncoder());
}
public MessageDecoder<?> get(int opcode) {
return inCodecs[opcode];
}
@SuppressWarnings("unchecked")
public <T extends Message> MessageEncoder<T> get(Class<T> clazz) {
return (MessageEncoder<T>) outCodecs.get(clazz);
}
public void bind(MessageDecoder<?> decoder) {
inCodecs[decoder.opcode] = decoder;
}
public void bind(MessageEncoder<?> encoder) {
outCodecs.put(encoder.clazz, encoder);
}
}