From b7bf03f31383f18d5512bb05c4a0c66d464068e5 Mon Sep 17 00:00:00 2001
From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com>
Date: Sun, 25 Apr 2021 15:41:32 +0200
Subject: [PATCH] internal extensions
---
Extensions/BlockReplacePackets/pom.xml | 113 --------------
.../java/gearth/extensions/Extension.java | 133 ++---------------
.../java/gearth/extensions/ExtensionBase.java | 130 ++++++++++++++++
.../java/gearth/extensions/ExtensionForm.java | 6 +-
.../extensions/ExtensionFormLauncher.java | 10 +-
.../java/gearth/extensions/IExtension.java | 25 ++--
.../gearth/extensions/InternalExtension.java | 68 +++++++++
.../extensions/InternalExtensionBuilder.java | 139 ++++++++++++++++++
.../InternalExtensionFormBuilder.java | 74 ++++++++++
.../extra/{harble => tools}/ChatConsole.java | 5 +-
.../{harble => tools}/ChatInputListener.java | 2 +-
.../{harble => tools}/PacketInfoSupport.java | 4 +-
.../windows/WindowsHabboClient.java | 2 +-
.../simple/SimpleExtensionProducer.java | 5 +-
.../BlockAndReplacePackets.java | 27 ++--
.../blockreplacepackets/RuleContainer.java | 6 +-
.../rules/BlockPacketRule.java | 2 +-
.../rules/BlockReplaceRule.java | 2 +-
.../rules/ReplaceIntegerRule.java | 2 +-
.../rules/ReplacePacketRule.java | 4 +-
.../rules/ReplaceStringRule.java | 2 +-
.../rules/ReplaceSubstringRule.java | 2 +-
.../rules/RuleFactory.java | 2 +-
.../blockreplacepackets/blockreplace.fxml | 16 +-
pom.xml | 1 -
25 files changed, 487 insertions(+), 295 deletions(-)
delete mode 100644 Extensions/BlockReplacePackets/pom.xml
create mode 100644 G-Earth/src/main/java/gearth/extensions/ExtensionBase.java
create mode 100644 G-Earth/src/main/java/gearth/extensions/InternalExtension.java
create mode 100644 G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java
create mode 100644 G-Earth/src/main/java/gearth/extensions/InternalExtensionFormBuilder.java
rename G-Earth/src/main/java/gearth/extensions/extra/{harble => tools}/ChatConsole.java (95%)
rename G-Earth/src/main/java/gearth/extensions/extra/{harble => tools}/ChatInputListener.java (65%)
rename G-Earth/src/main/java/gearth/extensions/extra/{harble => tools}/PacketInfoSupport.java (97%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/BlockAndReplacePackets.java (91%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/RuleContainer.java (93%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/BlockPacketRule.java (94%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/BlockReplaceRule.java (93%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/ReplaceIntegerRule.java (94%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/ReplacePacketRule.java (92%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/ReplaceStringRule.java (94%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/ReplaceSubstringRule.java (94%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/java/gearth/services/internal_extensions}/blockreplacepackets/rules/RuleFactory.java (95%)
rename {Extensions/BlockReplacePackets/src/main/java/extensions => G-Earth/src/main/resources/gearth/services/internal_extensions}/blockreplacepackets/blockreplace.fxml (94%)
diff --git a/Extensions/BlockReplacePackets/pom.xml b/Extensions/BlockReplacePackets/pom.xml
deleted file mode 100644
index 9a1a6fc..0000000
--- a/Extensions/BlockReplacePackets/pom.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
- 4.0.0
-
- BlockReplacePackets
-
- jar
-
- 0.0.1-beta
-
-
- G-Earth
- G-Earth-Parent
- 1.3.4
- ../../
-
-
-
-
-
-
- false
- src/main/java
-
- **/*.fxml
- **/*.css
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
- ${project.build.directory}/bin
-
-
- true
- true
- extensions.blockreplacepackets.BlockAndReplacePackets
- false
- lib/
- true
-
-
- ${project.artifactId}
-
-
-
-
- maven-assembly-plugin
- 2.5
-
-
- package
-
- single
-
-
-
-
- ${project.build.directory}/bin
-
-
- extensions.blockreplacepackets.BlockAndReplacePackets
-
-
-
- jar-with-dependencies
-
- ${project.artifactId}
- false
-
-
-
-
-
- maven-antrun-plugin
- 3.0.0
-
-
- package
-
-
-
-
-
-
-
-
-
- run
-
-
-
-
-
-
-
-
-
-
- G-Earth
- G-Earth
- 1.3.4
-
-
-
-
\ No newline at end of file
diff --git a/G-Earth/src/main/java/gearth/extensions/Extension.java b/G-Earth/src/main/java/gearth/extensions/Extension.java
index 2f40d1c..bd00f8d 100644
--- a/G-Earth/src/main/java/gearth/extensions/Extension.java
+++ b/G-Earth/src/main/java/gearth/extensions/Extension.java
@@ -1,5 +1,9 @@
package gearth.extensions;
+import gearth.extensions.ExtensionBase;
+import gearth.extensions.ExtensionInfo;
+import gearth.extensions.IExtension;
+import gearth.extensions.OnConnectionListener;
import gearth.misc.listenerpattern.Observable;
import gearth.misc.packet_info.PacketInfoManager;
import gearth.protocol.HMessage;
@@ -18,17 +22,9 @@ import java.util.Map;
/**
* Created by Jonas on 23/06/18.
*/
-public abstract class Extension implements IExtension {
+public abstract class Extension extends ExtensionBase {
- public interface MessageListener {
- void act(HMessage message);
- }
- public interface FlagsCheckListener {
- void act(String[] args);
- }
-
- protected boolean canLeave; // can you disconnect the ext
- protected boolean canDelete; // can you delete the ext (will be false for some built-in extensions)
+ protected FlagsCheckListener flagRequestCallback = null;
private String[] args;
private boolean isCorrupted = false;
@@ -39,9 +35,6 @@ public abstract class Extension implements IExtension {
protected PacketInfoManager packetInfoManager = new PacketInfoManager(new ArrayList<>()); // empty
private OutputStream out = null;
- private final Map> incomingMessageListeners = new HashMap<>();
- private final Map> outgoingMessageListeners = new HashMap<>();
- private FlagsCheckListener flagRequestCallback = null;
private String getArgument(String[] args, String... arg) {
for (int i = 0; i < args.length - 1; i++) {
@@ -59,8 +52,7 @@ public abstract class Extension implements IExtension {
* @param args arguments
*/
public Extension(String[] args) {
- canLeave = canLeave();
- canDelete = canDelete();
+ super();
//obtain port
this.args = args;
@@ -136,8 +128,8 @@ public abstract class Extension implements IExtension {
.appendBoolean(file != null)
.appendString(file == null ? "": file)
.appendString(cookie == null ? "" : cookie)
- .appendBoolean(canLeave)
- .appendBoolean(canDelete);
+ .appendBoolean(canLeave())
+ .appendBoolean(canDelete());
writeToStream(response.toBytes());
}
else if (packet.headerId() == NetworkExtensionInfo.OUTGOING_MESSAGES_IDS.CONNECTIONSTART) {
@@ -149,7 +141,7 @@ public abstract class Extension implements IExtension {
packetInfoManager = PacketInfoManager.readFromPacket(packet);
Constants.UNITY_PACKETS = clientType == HClient.UNITY;
- onConnectionObservable.fireEvent(l -> l.onConnection(
+ getOnConnectionObservable().fireEvent(l -> l.onConnection(
host, connectionPort, hotelVersion,
clientIdentifier, clientType, packetInfoManager)
);
@@ -180,36 +172,8 @@ public abstract class Extension implements IExtension {
else if (packet.headerId() == NetworkExtensionInfo.OUTGOING_MESSAGES_IDS.PACKETINTERCEPT) {
String stringifiedMessage = packet.readLongString();
HMessage habboMessage = new HMessage(stringifiedMessage);
- HPacket habboPacket = habboMessage.getPacket();
- Map> listeners =
- habboMessage.getDestination() == HMessage.Direction.TOCLIENT ?
- incomingMessageListeners :
- outgoingMessageListeners;
-
- List correctListeners = new ArrayList<>();
-
- synchronized (incomingMessageListeners) {
- synchronized (outgoingMessageListeners) {
- if (listeners.containsKey(-1)) { // registered on all packets
- for (int i = listeners.get(-1).size() - 1; i >= 0; i--) {
- correctListeners.add(listeners.get(-1).get(i));
- }
- }
-
- if (listeners.containsKey(habboPacket.headerId())) {
- for (int i = listeners.get(habboPacket.headerId()).size() - 1; i >= 0; i--) {
- correctListeners.add(listeners.get(habboPacket.headerId()).get(i));
- }
- }
- }
- }
-
- for(MessageListener listener : correctListeners) {
- habboMessage.getPacket().resetReadIndex();
- listener.act(habboMessage);
- }
- habboMessage.getPacket().resetReadIndex();
+ modifyMessage(habboMessage);
HPacket response = new HPacket(NetworkExtensionInfo.INCOMING_MESSAGES_IDS.MANIPULATEDPACKET);
response.appendLongString(habboMessage.stringify());
@@ -275,37 +239,6 @@ public abstract class Extension implements IExtension {
}
}
- /**
- * Register a listener on a specific packet Type
- * @param direction ToClient or ToServer
- * @param headerId the packet header ID
- * @param messageListener the callback
- */
- public void intercept(HMessage.Direction direction, int headerId, MessageListener messageListener) {
- Map> listeners =
- direction == HMessage.Direction.TOCLIENT ?
- incomingMessageListeners :
- outgoingMessageListeners;
-
- synchronized (listeners) {
- if (!listeners.containsKey(headerId)) {
- listeners.put(headerId, new ArrayList<>());
- }
- }
-
-
- listeners.get(headerId).add(messageListener);
- }
-
- /**
- * Register a listener on all packets
- * @param direction ToClient or ToServer
- * @param messageListener the callback
- */
- public void intercept(HMessage.Direction direction, MessageListener messageListener) {
- intercept(direction, -1, messageListener);
- }
-
/**
* Requests the flags which have been given to G-Earth when it got executed
* For example, you might want this extension to do a specific thing if the flag "-e" was given
@@ -324,15 +257,6 @@ public abstract class Extension implements IExtension {
}
}
-
- /**
- * Write to the console in G-Earth
- * @param s the text to be written
- */
- public void writeToConsole(String s) {
- writeToConsole("black", s, true);
- }
-
/**
* Write to the console in G-Earth
* @param s the text to be written
@@ -360,37 +284,12 @@ public abstract class Extension implements IExtension {
}
}
-
- private boolean isOnClickMethodUsed() {
-
- Class extends Extension> c = getClass();
-
- while (c != Extension.class) {
- try {
- c.getDeclaredMethod("onClick");
- // if it didnt error, onClick exists
- return true;
- } catch (NoSuchMethodException e) {
-// e.printStackTrace();
- }
-
- c = (Class extends Extension>) c.getSuperclass();
- }
-
- return false;
- }
-
/**
* Gets called when a connection has been established with G-Earth.
* This does not imply a connection with Habbo is setup.
*/
protected void initExtension(){}
- /**
- * The application got doubleclicked from the G-Earth interface. Doing something here is optional
- */
- protected void onClick(){}
-
/**
* A connection with Habbo has been started
*/
@@ -409,14 +308,4 @@ public abstract class Extension implements IExtension {
return true;
}
- ExtensionInfo getInfoAnnotations() {
- return getClass().getAnnotation(ExtensionInfo.class);
- }
-
-
- private Observable onConnectionObservable = new Observable<>();
- public void onConnect(OnConnectionListener listener){
- onConnectionObservable.addListener(listener);
- }
-
}
diff --git a/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java b/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java
new file mode 100644
index 0000000..060b835
--- /dev/null
+++ b/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java
@@ -0,0 +1,130 @@
+package gearth.extensions;
+
+import gearth.misc.listenerpattern.Observable;
+import gearth.protocol.HMessage;
+import gearth.protocol.HPacket;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public abstract class ExtensionBase extends IExtension {
+
+ public interface MessageListener {
+ void act(HMessage message);
+ }
+ public interface FlagsCheckListener {
+ void act(String[] args);
+ }
+
+ protected final Map> incomingMessageListeners = new HashMap<>();
+ protected final Map> outgoingMessageListeners = new HashMap<>();
+
+ /**
+ * Register a listener on a specific packet Type
+ * @param direction ToClient or ToServer
+ * @param headerId the packet header ID
+ * @param messageListener the callback
+ */
+ public void intercept(HMessage.Direction direction, int headerId, MessageListener messageListener) {
+ Map> listeners =
+ direction == HMessage.Direction.TOCLIENT ?
+ incomingMessageListeners :
+ outgoingMessageListeners;
+
+ synchronized (listeners) {
+ if (!listeners.containsKey(headerId)) {
+ listeners.put(headerId, new ArrayList<>());
+ }
+ }
+
+
+ listeners.get(headerId).add(messageListener);
+ }
+
+ /**
+ * Register a listener on all packets
+ * @param direction ToClient or ToServer
+ * @param messageListener the callback
+ */
+ public void intercept(HMessage.Direction direction, MessageListener messageListener) {
+ intercept(direction, -1, messageListener);
+ }
+
+ @Override
+ public void writeToConsole(String s) {
+ writeToConsole("black", s);
+ }
+
+ protected boolean isOnClickMethodUsed() {
+ Class extends ExtensionBase> c = getClass();
+ while (c != Extension.class) {
+ try {
+ c.getDeclaredMethod("onClick");
+ // if it didnt error, onClick exists
+ return true;
+ } catch (NoSuchMethodException e) {
+// e.printStackTrace();
+ }
+
+ c = (Class extends ExtensionBase>) c.getSuperclass();
+ }
+ return false;
+ }
+
+ public void modifyMessage(HMessage habboMessage) {
+ HPacket habboPacket = habboMessage.getPacket();
+
+ Map> listeners =
+ habboMessage.getDestination() == HMessage.Direction.TOCLIENT ?
+ incomingMessageListeners :
+ outgoingMessageListeners;
+
+ List correctListeners = new ArrayList<>();
+
+ synchronized (incomingMessageListeners) {
+ synchronized (outgoingMessageListeners) {
+ if (listeners.containsKey(-1)) { // registered on all packets
+ for (int i = listeners.get(-1).size() - 1; i >= 0; i--) {
+ correctListeners.add(listeners.get(-1).get(i));
+ }
+ }
+
+ if (listeners.containsKey(habboPacket.headerId())) {
+ for (int i = listeners.get(habboPacket.headerId()).size() - 1; i >= 0; i--) {
+ correctListeners.add(listeners.get(habboPacket.headerId()).get(i));
+ }
+ }
+ }
+ }
+
+ for(MessageListener listener : correctListeners) {
+ habboMessage.getPacket().resetReadIndex();
+ listener.act(habboMessage);
+ }
+ habboMessage.getPacket().resetReadIndex();
+ }
+
+ /**
+ * The application got doubleclicked from the G-Earth interface. Doing something here is optional
+ */
+ @Override
+ void onClick() {
+
+ }
+
+ @Override
+ protected ExtensionInfo getInfoAnnotations() {
+ return getClass().getAnnotation(ExtensionInfo.class);
+ }
+
+ private Observable onConnectionObservable = new Observable<>();
+ public void onConnect(OnConnectionListener listener){
+ onConnectionObservable.addListener(listener);
+ }
+
+ Observable getOnConnectionObservable() {
+ return onConnectionObservable;
+ }
+}
diff --git a/G-Earth/src/main/java/gearth/extensions/ExtensionForm.java b/G-Earth/src/main/java/gearth/extensions/ExtensionForm.java
index 145733c..5310cd0 100644
--- a/G-Earth/src/main/java/gearth/extensions/ExtensionForm.java
+++ b/G-Earth/src/main/java/gearth/extensions/ExtensionForm.java
@@ -8,9 +8,9 @@ import gearth.protocol.HPacket;
/**
* Created by Jonas on 22/09/18.
*/
-public abstract class ExtensionForm implements IExtension {
+public abstract class ExtensionForm extends ExtensionBase {
- volatile Extension extension;
+ volatile ExtensionBase extension;
protected volatile Stage primaryStage;
protected static void runExtensionForm(String[] args, Class extends ExtensionForm> extension) {
@@ -59,7 +59,7 @@ public abstract class ExtensionForm implements IExtension {
/**
* The application got doubleclicked from the G-Earth interface. Doing something here is optional
*/
- protected void onClick(){
+ public void onClick(){
Platform.runLater(() -> {
primaryStage.show();
primaryStage.requestFocus();
diff --git a/G-Earth/src/main/java/gearth/extensions/ExtensionFormLauncher.java b/G-Earth/src/main/java/gearth/extensions/ExtensionFormLauncher.java
index 0eec47b..920f02a 100644
--- a/G-Earth/src/main/java/gearth/extensions/ExtensionFormLauncher.java
+++ b/G-Earth/src/main/java/gearth/extensions/ExtensionFormLauncher.java
@@ -5,7 +5,7 @@ import javafx.application.Platform;
import javafx.stage.Stage;
/**
- * Created by Jeunez on 6/11/2018.
+ * Created by Jonas on 6/11/2018.
*/
public class ExtensionFormLauncher extends Application {
@@ -19,7 +19,7 @@ public class ExtensionFormLauncher extends Application {
ExtensionForm creator = extension.newInstance();
ExtensionForm extensionForm = creator.launchForm(primaryStage);
- extensionForm.extension = new Extension(args) {
+ Extension extension = new Extension(args) {
@Override
protected void initExtension() {
extensionForm.initExtension();
@@ -41,7 +41,7 @@ public class ExtensionFormLauncher extends Application {
}
@Override
- ExtensionInfo getInfoAnnotations() {
+ protected ExtensionInfo getInfoAnnotations() {
return extInfo;
}
@@ -55,9 +55,11 @@ public class ExtensionFormLauncher extends Application {
return extensionForm.canDelete();
}
};
+ extensionForm.extension = extension;
+
extensionForm.primaryStage = primaryStage;
Thread t = new Thread(() -> {
- extensionForm.extension.run();
+ extension.run();
//when the extension has ended, close this process
System.exit(0);
});
diff --git a/G-Earth/src/main/java/gearth/extensions/IExtension.java b/G-Earth/src/main/java/gearth/extensions/IExtension.java
index 8040bce..3b8ae89 100644
--- a/G-Earth/src/main/java/gearth/extensions/IExtension.java
+++ b/G-Earth/src/main/java/gearth/extensions/IExtension.java
@@ -3,15 +3,22 @@ package gearth.extensions;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
-public interface IExtension {
+public abstract class IExtension {
- boolean sendToClient(HPacket packet);
- boolean sendToServer(HPacket packet);
- void intercept(HMessage.Direction direction, int headerId, Extension.MessageListener messageListener);
- void intercept(HMessage.Direction direction, Extension.MessageListener messageListener);
- boolean requestFlags(Extension.FlagsCheckListener flagRequestCallback);
- void writeToConsole(String colorClass, String s);
- void writeToConsole(String s);
- void onConnect(OnConnectionListener listener);
+ public abstract boolean sendToClient(HPacket packet);
+ public abstract boolean sendToServer(HPacket packet);
+ public abstract void intercept(HMessage.Direction direction, int headerId, Extension.MessageListener messageListener);
+ public abstract void intercept(HMessage.Direction direction, Extension.MessageListener messageListener);
+ public abstract boolean requestFlags(Extension.FlagsCheckListener flagRequestCallback);
+ public abstract void writeToConsole(String colorClass, String s);
+ public abstract void writeToConsole(String s);
+ public abstract void onConnect(OnConnectionListener listener);
+ abstract void initExtension();
+ abstract void onClick();
+ abstract void onStartConnection();
+ abstract void onEndConnection();
+ abstract ExtensionInfo getInfoAnnotations();
+ abstract boolean canLeave();
+ abstract boolean canDelete();
}
diff --git a/G-Earth/src/main/java/gearth/extensions/InternalExtension.java b/G-Earth/src/main/java/gearth/extensions/InternalExtension.java
new file mode 100644
index 0000000..5f870d2
--- /dev/null
+++ b/G-Earth/src/main/java/gearth/extensions/InternalExtension.java
@@ -0,0 +1,68 @@
+package gearth.extensions;
+
+import gearth.Main;
+import gearth.extensions.ExtensionBase;
+import gearth.extensions.IExtension;
+import gearth.protocol.HPacket;
+
+
+public class InternalExtension extends ExtensionBase {
+
+ public interface InternalExtensionCommunicator {
+ void sendToClient(HPacket packet);
+ void sendToServer(HPacket packet);
+ void writeToConsole(String s);
+ }
+
+ private InternalExtensionCommunicator communicator = null;
+
+ public void setCommunicator(InternalExtensionCommunicator communicator) {
+ this.communicator = communicator;
+ }
+
+ @Override
+ public boolean sendToClient(HPacket packet) {
+ communicator.sendToClient(packet);
+ return true;
+ }
+
+ @Override
+ public boolean sendToServer(HPacket packet) {
+ communicator.sendToServer(packet);
+ return true;
+ }
+
+ @Override
+ public boolean requestFlags(FlagsCheckListener flagRequestCallback) {
+ flagRequestCallback.act(Main.args);
+ return true;
+ }
+
+ @Override
+ public void writeToConsole(String colorClass, String s) {
+ String text = "[" + colorClass + "]" + getInfoAnnotations().Title() + " --> " + s;
+ communicator.writeToConsole(text);
+ }
+
+ // to be maybe overwritten
+ @Override
+ protected void initExtension() { }
+
+ // to be maybe overwritten
+ @Override
+ protected void onStartConnection() {}
+
+ // to be maybe overwritten
+ @Override
+ protected void onEndConnection() {}
+
+ @Override
+ protected boolean canLeave() {
+ return false;
+ }
+
+ @Override
+ protected boolean canDelete() {
+ return false;
+ }
+}
diff --git a/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java b/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java
new file mode 100644
index 0000000..e1631b7
--- /dev/null
+++ b/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java
@@ -0,0 +1,139 @@
+package gearth.extensions;
+
+
+import gearth.misc.packet_info.PacketInfoManager;
+import gearth.protocol.HMessage;
+import gearth.protocol.HPacket;
+import gearth.protocol.connection.HClient;
+import gearth.services.extensionhandler.extensions.GEarthExtension;
+
+// wraps internal GEarthExtension class to IExtension interface
+// to allow internal extensions that follow the same remote-extensions interface
+public class InternalExtensionBuilder extends GEarthExtension {
+
+ private final InternalExtension extension;
+
+ public InternalExtensionBuilder(InternalExtension extension) {
+ this.extension = extension;
+ extension.setCommunicator(new InternalExtension.InternalExtensionCommunicator() {
+ @Override
+ public void sendToClient(HPacket packet) {
+ sendMessage(HMessage.Direction.TOCLIENT, packet);
+ }
+
+ @Override
+ public void sendToServer(HPacket packet) {
+ sendMessage(HMessage.Direction.TOSERVER, packet);
+ }
+
+ @Override
+ public void writeToConsole(String s) {
+ log(s);
+ }
+ });
+ }
+
+ @Override
+ public String getAuthor() {
+ return extension.getInfoAnnotations().Author();
+ }
+
+ @Override
+ public String getDescription() {
+ return extension.getInfoAnnotations().Description();
+ }
+
+ @Override
+ public String getTitle() {
+ return extension.getInfoAnnotations().Title();
+ }
+
+ @Override
+ public String getVersion() {
+ return extension.getInfoAnnotations().Version();
+ }
+
+ @Override
+ public boolean isFireButtonUsed() {
+ Class extends InternalExtension > c = extension.getClass();
+
+ while (c != InternalExtension.class) {
+ try {
+ c.getDeclaredMethod("onClick");
+ return true;
+ } catch (NoSuchMethodException e) {
+// e.printStackTrace();
+ }
+
+ c = (Class extends InternalExtension>) c.getSuperclass();
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean isDeleteButtonVisible() {
+ return extension.canDelete();
+ }
+
+ @Override
+ public boolean isLeaveButtonVisible() {
+ return extension.canLeave();
+ }
+
+ @Override
+ public boolean isInstalledExtension() {
+ return false;
+ }
+
+ @Override
+ public void doubleclick() {
+ extension.onClick();
+ }
+
+ @Override
+ public void packetIntercept(HMessage hMessage) {
+ extension.modifyMessage(hMessage);
+ sendManipulatedPacket(hMessage);
+ }
+
+ @Override
+ public void provideFlags(String[] flags) {
+ // no need
+ }
+
+ @Override
+ public void connectionStart(String host, int port, String hotelVersion, String clientIdentifier, HClient clientType, PacketInfoManager packetInfoManager) {
+ extension.getOnConnectionObservable().fireEvent(l -> l.onConnection(
+ host, port, hotelVersion,
+ clientIdentifier, clientType, packetInfoManager)
+ );
+ extension.onStartConnection();
+ }
+
+ @Override
+ public void connectionEnd() {
+ extension.onEndConnection();
+ }
+
+ @Override
+ public void init() {
+ extension.initExtension();
+ }
+
+ @Override
+ public void close() {
+ // no need in internal ext
+ }
+
+ @Override
+ public void packetToStringResponse(String string, String expression) {
+ // no need in java ext
+ }
+
+ @Override
+ public void stringToPacketResponse(HPacket packet) {
+ // no need in java ext
+ }
+
+}
diff --git a/G-Earth/src/main/java/gearth/extensions/InternalExtensionFormBuilder.java b/G-Earth/src/main/java/gearth/extensions/InternalExtensionFormBuilder.java
new file mode 100644
index 0000000..c1cfc03
--- /dev/null
+++ b/G-Earth/src/main/java/gearth/extensions/InternalExtensionFormBuilder.java
@@ -0,0 +1,74 @@
+package gearth.extensions;
+
+import gearth.services.extensionhandler.extensions.GEarthExtension;
+import gearth.services.extensionhandler.extensions.extensionproducers.ExtensionProducerObserver;
+import javafx.application.Platform;
+import javafx.stage.Stage;
+
+public class InternalExtensionFormBuilder {
+
+ public static void launch(Class extends ExtensionForm> extension, ExtensionProducerObserver observer) {
+ try {
+ ExtensionInfo extInfo = extension.getAnnotation(ExtensionInfo.class);
+ ExtensionForm creator = extension.newInstance();
+
+ Stage stage = new Stage();
+ ExtensionForm extensionForm = creator.launchForm(stage);
+
+ InternalExtension internalExtension = new InternalExtension() {
+ @Override
+ protected void initExtension() {
+ extensionForm.initExtension();
+ }
+
+ @Override
+ protected void onClick() {
+ extensionForm.onClick();
+ }
+
+ @Override
+ protected void onStartConnection() {
+ extensionForm.onStartConnection();
+ }
+
+ @Override
+ protected void onEndConnection() {
+ extensionForm.onEndConnection();
+ }
+
+ @Override
+ protected ExtensionInfo getInfoAnnotations() {
+ return extInfo;
+ }
+
+ @Override
+ protected boolean canLeave() {
+ return extensionForm.canLeave();
+ }
+
+ @Override
+ protected boolean canDelete() {
+ return extensionForm.canDelete();
+ }
+ };
+ extensionForm.extension = internalExtension;
+ extensionForm.primaryStage = stage;
+
+ GEarthExtension gEarthExtension = new InternalExtensionBuilder(internalExtension);
+ observer.onExtensionProduced(gEarthExtension);
+
+
+ Platform.setImplicitExit(false);
+
+ stage.setOnCloseRequest(event -> {
+ event.consume();
+ Platform.runLater(() -> {
+ stage.hide();
+ extensionForm.onHide();
+ });
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/G-Earth/src/main/java/gearth/extensions/extra/harble/ChatConsole.java b/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java
similarity index 95%
rename from G-Earth/src/main/java/gearth/extensions/extra/harble/ChatConsole.java
rename to G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java
index 5411670..cde0c8c 100644
--- a/G-Earth/src/main/java/gearth/extensions/extra/harble/ChatConsole.java
+++ b/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java
@@ -1,13 +1,10 @@
-package gearth.extensions.extra.harble;
+package gearth.extensions.extra.tools;
import gearth.extensions.ExtensionInfo;
import gearth.extensions.IExtension;
-import gearth.extensions.OnConnectionListener;
import gearth.misc.listenerpattern.Observable;
-import gearth.misc.packet_info.PacketInfoManager;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
-import gearth.protocol.connection.HClient;
/**
* Created by Jonas on 3/12/2018.
diff --git a/G-Earth/src/main/java/gearth/extensions/extra/harble/ChatInputListener.java b/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatInputListener.java
similarity index 65%
rename from G-Earth/src/main/java/gearth/extensions/extra/harble/ChatInputListener.java
rename to G-Earth/src/main/java/gearth/extensions/extra/tools/ChatInputListener.java
index a9a933a..4e097a8 100644
--- a/G-Earth/src/main/java/gearth/extensions/extra/harble/ChatInputListener.java
+++ b/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatInputListener.java
@@ -1,4 +1,4 @@
-package gearth.extensions.extra.harble;
+package gearth.extensions.extra.tools;
public interface ChatInputListener {
void inputEntered(String input);
diff --git a/G-Earth/src/main/java/gearth/extensions/extra/harble/PacketInfoSupport.java b/G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java
similarity index 97%
rename from G-Earth/src/main/java/gearth/extensions/extra/harble/PacketInfoSupport.java
rename to G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java
index 217893e..e0dedee 100644
--- a/G-Earth/src/main/java/gearth/extensions/extra/harble/PacketInfoSupport.java
+++ b/G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java
@@ -1,13 +1,11 @@
-package gearth.extensions.extra.harble;
+package gearth.extensions.extra.tools;
import gearth.extensions.Extension;
import gearth.extensions.IExtension;
-import gearth.extensions.OnConnectionListener;
import gearth.misc.packet_info.PacketInfo;
import gearth.misc.packet_info.PacketInfoManager;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
-import gearth.protocol.connection.HClient;
import java.security.InvalidParameterException;
import java.util.*;
diff --git a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java
index 8801fef..7178b06 100644
--- a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java
+++ b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java
@@ -15,7 +15,7 @@ import java.net.URISyntaxException;
import java.util.*;
/**
- * Created by Jeunez on 27/06/2018.
+ * Created by Jonas on 27/06/2018.
*/
public class WindowsHabboClient extends HabboClient {
diff --git a/G-Earth/src/main/java/gearth/services/extensionhandler/extensions/implementations/simple/SimpleExtensionProducer.java b/G-Earth/src/main/java/gearth/services/extensionhandler/extensions/implementations/simple/SimpleExtensionProducer.java
index 105b907..b5c55aa 100644
--- a/G-Earth/src/main/java/gearth/services/extensionhandler/extensions/implementations/simple/SimpleExtensionProducer.java
+++ b/G-Earth/src/main/java/gearth/services/extensionhandler/extensions/implementations/simple/SimpleExtensionProducer.java
@@ -1,7 +1,9 @@
package gearth.services.extensionhandler.extensions.implementations.simple;
+import gearth.extensions.InternalExtensionFormBuilder;
import gearth.services.extensionhandler.extensions.extensionproducers.ExtensionProducer;
import gearth.services.extensionhandler.extensions.extensionproducers.ExtensionProducerObserver;
+import gearth.services.internal_extensions.blockreplacepackets.BlockAndReplacePackets;
public class SimpleExtensionProducer implements ExtensionProducer {
@@ -9,7 +11,8 @@ public class SimpleExtensionProducer implements ExtensionProducer {
public void startProducing(ExtensionProducerObserver observer) {
// uncomment the next line if you want to see an embedded example extension in G-Earth
- // observer.onExtensionConnect(new ExampleExtension());
+// observer.onExtensionProduced(new ExampleExtension());
+ InternalExtensionFormBuilder.launch(BlockAndReplacePackets.class, observer);
}
}
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/BlockAndReplacePackets.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java
similarity index 91%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/BlockAndReplacePackets.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java
index ad3d6ff..30e9e13 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/BlockAndReplacePackets.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java
@@ -1,10 +1,12 @@
-package extensions.blockreplacepackets;
+package gearth.services.internal_extensions.blockreplacepackets;
-import extensions.blockreplacepackets.rules.BlockReplaceRule;
-import extensions.blockreplacepackets.rules.RuleFactory;
-import gearth.extensions.Extension;
+import gearth.Main;
+import gearth.extensions.ExtensionForm;
+import gearth.extensions.ExtensionInfo;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
+import gearth.services.internal_extensions.blockreplacepackets.rules.BlockReplaceRule;
+import gearth.services.internal_extensions.blockreplacepackets.rules.RuleFactory;
import gearth.ui.GEarthController;
import javafx.application.Platform;
import javafx.event.ActionEvent;
@@ -15,11 +17,10 @@ import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
+import javafx.scene.image.Image;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
-import gearth.extensions.ExtensionForm;
-import gearth.extensions.ExtensionInfo;
import java.util.ArrayList;
import java.util.List;
@@ -48,9 +49,9 @@ public class BlockAndReplacePackets extends ExtensionForm {
List rules = new ArrayList<>();
- public static void main(String[] args) {
- runExtensionForm(args, BlockAndReplacePackets.class);
- }
+// public static void main(String[] args) {
+// runExtensionForm(args, BlockAndReplacePackets.class);
+// }
//initialize javaFX elements
public void initialize() {
@@ -177,7 +178,7 @@ public class BlockAndReplacePackets extends ExtensionForm {
@Override
protected void initExtension() {
- Extension.MessageListener messageListener = message -> {
+ MessageListener messageListener = message -> {
for (BlockReplaceRule rule : rules) {
rule.appendRuleToMessage(message);
}
@@ -196,6 +197,7 @@ public class BlockAndReplacePackets extends ExtensionForm {
primaryStage.setScene(new Scene(root));
primaryStage.setResizable(false);
primaryStage.getScene().getStylesheets().add(GEarthController.class.getResource("/gearth/ui/bootstrap3.css").toExternalForm());
+ primaryStage.getIcons().add(new Image(Main.class.getResourceAsStream("G-EarthLogoSmaller.png")));
return loader.getController();
}
@@ -215,6 +217,11 @@ public class BlockAndReplacePackets extends ExtensionForm {
clearInput();
}
+ @Override
+ protected boolean canLeave() {
+ return false;
+ }
+
@Override
protected boolean canDelete() {
return false;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/RuleContainer.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/RuleContainer.java
similarity index 93%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/RuleContainer.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/RuleContainer.java
index c72ee00..4539d53 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/RuleContainer.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/RuleContainer.java
@@ -1,6 +1,6 @@
-package extensions.blockreplacepackets;
+package gearth.services.internal_extensions.blockreplacepackets;
-import extensions.blockreplacepackets.rules.BlockReplaceRule;
+import gearth.services.internal_extensions.blockreplacepackets.rules.BlockReplaceRule;
import gearth.ui.buttons.DeleteButton;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
@@ -13,7 +13,7 @@ import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
/**
- * Created by Jeunez on 6/11/2018.
+ * Created by Jonas on 6/11/2018.
*/
public class RuleContainer extends GridPane {
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/BlockPacketRule.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/BlockPacketRule.java
similarity index 94%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/BlockPacketRule.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/BlockPacketRule.java
index d80c675..a8e22df 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/BlockPacketRule.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/BlockPacketRule.java
@@ -1,4 +1,4 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HMessage;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/BlockReplaceRule.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/BlockReplaceRule.java
similarity index 93%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/BlockReplaceRule.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/BlockReplaceRule.java
index d1cc521..621cf0a 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/BlockReplaceRule.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/BlockReplaceRule.java
@@ -1,4 +1,4 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HMessage;
import javafx.beans.InvalidationListener;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceIntegerRule.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceIntegerRule.java
similarity index 94%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceIntegerRule.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceIntegerRule.java
index f543461..d5141ee 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceIntegerRule.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceIntegerRule.java
@@ -1,4 +1,4 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HMessage;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplacePacketRule.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplacePacketRule.java
similarity index 92%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplacePacketRule.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplacePacketRule.java
index c6bfa0d..6134234 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplacePacketRule.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplacePacketRule.java
@@ -1,10 +1,10 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HMessage;
import gearth.protocol.HPacket;
/**
- * Created by Jeunez on 6/11/2018.
+ * Created by Jonas on 6/11/2018.
*/
public class ReplacePacketRule extends BlockReplaceRule {
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceStringRule.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceStringRule.java
similarity index 94%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceStringRule.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceStringRule.java
index fd20820..5449370 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceStringRule.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceStringRule.java
@@ -1,4 +1,4 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HMessage;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceSubstringRule.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceSubstringRule.java
similarity index 94%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceSubstringRule.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceSubstringRule.java
index 9e56286..dbb58be 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/ReplaceSubstringRule.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/ReplaceSubstringRule.java
@@ -1,4 +1,4 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HMessage;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/RuleFactory.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java
similarity index 95%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/RuleFactory.java
rename to G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java
index ef99e03..dc59f63 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/rules/RuleFactory.java
+++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/rules/RuleFactory.java
@@ -1,4 +1,4 @@
-package extensions.blockreplacepackets.rules;
+package gearth.services.internal_extensions.blockreplacepackets.rules;
import gearth.protocol.HPacket;
diff --git a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/blockreplace.fxml b/G-Earth/src/main/resources/gearth/services/internal_extensions/blockreplacepackets/blockreplace.fxml
similarity index 94%
rename from Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/blockreplace.fxml
rename to G-Earth/src/main/resources/gearth/services/internal_extensions/blockreplacepackets/blockreplace.fxml
index 5df9e8a..0e135cf 100644
--- a/Extensions/BlockReplacePackets/src/main/java/extensions/blockreplacepackets/blockreplace.fxml
+++ b/G-Earth/src/main/resources/gearth/services/internal_extensions/blockreplacepackets/blockreplace.fxml
@@ -1,17 +1,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/pom.xml b/pom.xml
index ca40e40..d3aa29e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,6 @@
Extensions/AdminOnConnect
- Extensions/BlockReplacePackets