/* * Decompiled with CFR 0.152. */ package gearth.extensions; import gearth.extensions.Extension; import gearth.extensions.ExtensionInfo; import gearth.extensions.IExtension; import gearth.extensions.OnConnectionListener; import gearth.misc.HostInfo; import gearth.misc.listenerpattern.Observable; import gearth.misc.listenerpattern.ObservableObject; import gearth.protocol.HMessage; import gearth.protocol.HPacket; import gearth.services.packet_info.PacketInfo; import gearth.services.packet_info.PacketInfoManager; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; public abstract class ExtensionBase extends IExtension { protected final Map> incomingMessageListeners = new HashMap>(); protected final Map> outgoingMessageListeners = new HashMap>(); protected final Map> hashOrNameIncomingListeners = new HashMap>(); protected final Map> hashOrNameOutgoingListeners = new HashMap>(); volatile PacketInfoManager packetInfoManager = PacketInfoManager.EMPTY; ObservableObject observableHostInfo = new ObservableObject(null); private Observable onConnectionObservable = new Observable(); void updateHostInfo(HostInfo hostInfo) { this.observableHostInfo.setObject(hostInfo); } /* * WARNING - Removed try catching itself - possible behaviour change. */ @Override public void intercept(HMessage.Direction direction, int headerId, MessageListener messageListener) { Map> listeners; Map> map = listeners = direction == HMessage.Direction.TOCLIENT ? this.incomingMessageListeners : this.outgoingMessageListeners; synchronized (map) { if (!listeners.containsKey(headerId)) { listeners.put(headerId, new ArrayList()); } listeners.get(headerId).add(messageListener); } } /* * WARNING - Removed try catching itself - possible behaviour change. */ @Override public void intercept(HMessage.Direction direction, String hashOrName, MessageListener messageListener) { Map> listeners; Map> map = listeners = direction == HMessage.Direction.TOCLIENT ? this.hashOrNameIncomingListeners : this.hashOrNameOutgoingListeners; synchronized (map) { if (!listeners.containsKey(hashOrName)) { listeners.put(hashOrName, new ArrayList()); } listeners.get(hashOrName).add(messageListener); } } @Override public void intercept(HMessage.Direction direction, MessageListener messageListener) { this.intercept(direction, -1, messageListener); } @Override public void writeToConsole(String s) { this.writeToConsole("black", s); } protected boolean isOnClickMethodUsed() { for (Class c = this.getClass(); c != Extension.class; c = c.getSuperclass()) { try { c.getDeclaredMethod("onClick", new Class[0]); return true; } catch (NoSuchMethodException noSuchMethodException) { continue; } } return false; } /* * WARNING - Removed try catching itself - possible behaviour change. */ public void modifyMessage(HMessage habboMessage) { HPacket habboPacket = habboMessage.getPacket(); Map> listeners = habboMessage.getDestination() == HMessage.Direction.TOCLIENT ? this.incomingMessageListeners : this.outgoingMessageListeners; Map> hashOrNameListeners = habboMessage.getDestination() == HMessage.Direction.TOCLIENT ? this.hashOrNameIncomingListeners : this.hashOrNameOutgoingListeners; HashSet correctListeners = new HashSet(); Object object = listeners; synchronized (object) { int i; if (listeners.containsKey(-1)) { for (i = listeners.get(-1).size() - 1; i >= 0; --i) { correctListeners.add(listeners.get(-1).get(i)); } } if (listeners.containsKey(habboPacket.headerId())) { for (i = listeners.get(habboPacket.headerId()).size() - 1; i >= 0; --i) { correctListeners.add(listeners.get(habboPacket.headerId()).get(i)); } } } object = hashOrNameListeners; synchronized (object) { List packetInfos = this.packetInfoManager.getAllPacketInfoFromHeaderId(habboMessage.getDestination(), habboPacket.headerId()); ArrayList identifiers = new ArrayList(); packetInfos.forEach(packetInfo -> { String name = packetInfo.getName(); String hash = packetInfo.getHash(); if (name != null && hashOrNameListeners.containsKey(name)) { identifiers.add(name); } if (hash != null && hashOrNameListeners.containsKey(hash)) { identifiers.add(hash); } }); for (String identifier : identifiers) { for (int i = hashOrNameListeners.get(identifier).size() - 1; i >= 0; --i) { correctListeners.add(hashOrNameListeners.get(identifier).get(i)); } } } for (MessageListener listener : correctListeners) { habboMessage.getPacket().resetReadIndex(); listener.act(habboMessage); } habboMessage.getPacket().resetReadIndex(); } @Override void onClick() { } @Override protected ExtensionInfo getInfoAnnotations() { return this.getClass().getAnnotation(ExtensionInfo.class); } @Override public void onConnect(OnConnectionListener listener) { this.onConnectionObservable.addListener(listener); } Observable getOnConnectionObservable() { return this.onConnectionObservable; } void setPacketInfoManager(PacketInfoManager packetInfoManager) { this.packetInfoManager = packetInfoManager; } @Override public PacketInfoManager getPacketInfoManager() { return this.packetInfoManager; } public HostInfo getHostInfo() { return this.observableHostInfo.getObject(); } public static interface FlagsCheckListener { public void act(String[] var1); } public static interface MessageListener { public void act(HMessage var1); } }