diff --git a/.gitignore b/.gitignore
index 105413f..902afbc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,22 +15,9 @@ Extensions/BlockReplacePackets/.classpath
.project
.settings/org.eclipse.m2e.core.prefs
.vscode/launch.json
-Extensions/AdminOnConnect/.classpath
-Extensions/AdminOnConnect/.project
-Extensions/AdminOnConnect/.settings/org.eclipse.jdt.apt.core.prefs
-Extensions/AdminOnConnect/.settings/org.eclipse.jdt.core.prefs
-Extensions/AdminOnConnect/.settings/org.eclipse.m2e.core.prefs
-Extensions/BlockReplacePackets/.project
-Extensions/BlockReplacePackets/.settings/org.eclipse.jdt.apt.core.prefs
-Extensions/BlockReplacePackets/.settings/org.eclipse.jdt.core.prefs
-Extensions/BlockReplacePackets/.settings/org.eclipse.m2e.core.prefs
-Extensions/HappySpeech/.classpath
-Extensions/HappySpeech/.project
-Extensions/HappySpeech/.settings/org.eclipse.jdt.apt.core.prefs
-Extensions/HappySpeech/.settings/org.eclipse.jdt.core.prefs
-Extensions/HappySpeech/.settings/org.eclipse.m2e.core.prefs
-G-Earth/.classpath
-G-Earth/.project
-G-Earth/.settings/org.eclipse.jdt.apt.core.prefs
-G-Earth/.settings/org.eclipse.jdt.core.prefs
-G-Earth/.settings/org.eclipse.m2e.core.prefs
+
+*.classpath
+*.project
+*.settings/org.eclipse.jdt.apt.core.prefs
+*.settings/org.eclipse.jdt.core.prefs
+*.settings/org.eclipse.m2e.core.prefs
diff --git a/Extensions/AdminOnConnect/pom.xml b/Extensions/AdminOnConnect/pom.xml
deleted file mode 100644
index c6f4ceb..0000000
--- a/Extensions/AdminOnConnect/pom.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
- 4.0.0
-
- AdminOnConnect
-
- jar
-
- 0.0.1-beta
-
-
- G-Earth
- G-Earth-Parent
- 1.4.1
- ../../
-
-
-
-
-
-
- false
- src/main/java
-
- **/*.fxml
- **/*.css
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.5
-
- ${project.build.directory}/bin
-
-
- true
- true
- extensions.adminonconnect.AdminOnConnect
- false
- lib/
- true
-
-
- ${project.artifactId}
-
-
-
-
-
- maven-assembly-plugin
- 2.5
-
-
- package
-
- single
-
-
-
-
- ${project.build.directory}/bin
-
-
- extensions.adminonconnect.AdminOnConnect
-
-
-
- jar-with-dependencies
-
- ${project.artifactId}
- false
-
-
-
-
-
- maven-antrun-plugin
- 3.0.0
-
-
- package
-
-
-
-
-
-
-
-
-
- run
-
-
-
-
-
-
-
-
-
- G-Earth
- G-Earth
- 1.4.1
-
-
-
-
\ No newline at end of file
diff --git a/Extensions/AdminOnConnect/src/main/java/extensions/adminonconnect/AdminOnConnect.java b/Extensions/AdminOnConnect/src/main/java/extensions/adminonconnect/AdminOnConnect.java
deleted file mode 100644
index 44ef20a..0000000
--- a/Extensions/AdminOnConnect/src/main/java/extensions/adminonconnect/AdminOnConnect.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package extensions.adminonconnect;
-
-import gearth.extensions.Extension;
-import gearth.extensions.ExtensionInfo;
-import gearth.protocol.HMessage;
-import gearth.protocol.HPacket;
-
-/**
- * Created by Jonas on 26/06/18.
- */
-
-@ExtensionInfo(
- Title = "Always admin!",
- Description = "Gives you admin permission on connect",
- Version = "1.0",
- Author = "sirjonasxx"
-)
-public class AdminOnConnect extends Extension {
-
- public static void main(String[] args) {
- new AdminOnConnect(args).run();
- }
- public AdminOnConnect(String[] args) {
- super(args);
- }
-
- private boolean done = true;
-
- protected void initExtension() {
- intercept(HMessage.Direction.TOCLIENT, message -> {
- if (!done) {
- HPacket packet = message.getPacket();
- if (packet.length() == 11) {
- if (packet.readByte(14) == 0 || packet.readByte(14) == 1) {
- packet.replaceInt(6, 7);
- packet.replaceInt(10, 7);
- packet.replaceBoolean(14, true);
-
- done = true;
- writeToConsole("Replaced user permissions");
- }
- }
- }
- });
-
- intercept(HMessage.Direction.TOSERVER, 4000, message -> done = false);
- }
-
-// protected void onStartConnection() {
-// done = false;
-// }
-}
diff --git a/G-Earth/src/main/java/gearth/services/always_admin/AdminService.java b/G-Earth/src/main/java/gearth/services/always_admin/AdminService.java
new file mode 100644
index 0000000..afa406b
--- /dev/null
+++ b/G-Earth/src/main/java/gearth/services/always_admin/AdminService.java
@@ -0,0 +1,54 @@
+package gearth.services.always_admin;
+
+import gearth.protocol.HConnection;
+import gearth.protocol.HMessage;
+import gearth.protocol.HPacket;
+
+public class AdminService {
+
+ private final HConnection hConnection;
+
+ volatile private boolean enabled;
+ volatile private HPacket originalPacket;
+
+ public AdminService(boolean enabled, HConnection hConnection) {
+ this.enabled = enabled;
+ this.hConnection = hConnection;
+ originalPacket = null;
+ }
+
+ public void setEnabled(boolean enabled) {
+ if (enabled != this.enabled) {
+ this.enabled = enabled;
+ if (originalPacket != null) {
+ if (enabled) {
+ hConnection.sendToClient(new HPacket(originalPacket.headerId(), 7, 7, true));
+ }
+ else {
+ hConnection.sendToClient(originalPacket);
+ }
+ }
+ }
+ }
+
+ public void onConnect() {
+ originalPacket = null;
+ }
+
+ public void onMessage(HMessage message) {
+ HPacket packet = message.getPacket();
+ if (message.getDestination() == HMessage.Direction.TOCLIENT
+ && (originalPacket == null || packet.headerId() == originalPacket.headerId())
+ && packet.length() == 11 && (packet.readByte(14) == 0 || packet.readByte(14) == 1)) {
+ originalPacket = new HPacket(packet);
+
+ if (enabled) {
+ packet.replaceInt(6, 7);
+ packet.replaceInt(10, 7);
+ packet.replaceBoolean(14, true);
+ }
+ }
+
+ }
+
+}
diff --git a/G-Earth/src/main/java/gearth/ui/extra/ExtraController.java b/G-Earth/src/main/java/gearth/ui/extra/ExtraController.java
index 2bfb373..24373cf 100644
--- a/G-Earth/src/main/java/gearth/ui/extra/ExtraController.java
+++ b/G-Earth/src/main/java/gearth/ui/extra/ExtraController.java
@@ -3,9 +3,12 @@ package gearth.ui.extra;
import gearth.Main;
import gearth.misc.Cacher;
import gearth.protocol.HConnection;
+import gearth.protocol.HMessage;
+import gearth.protocol.TrafficListener;
import gearth.protocol.connection.HState;
import gearth.protocol.connection.proxy.ProxyProviderFactory;
import gearth.protocol.connection.proxy.SocksConfiguration;
+import gearth.services.always_admin.AdminService;
import gearth.services.g_python.GPythonVersionUtils;
import gearth.ui.SubForm;
import gearth.ui.info.InfoController;
@@ -25,6 +28,7 @@ public class ExtraController extends SubForm implements SocksConfiguration {
public static final String INFO_URL_GPYTHON = "https://github.com/sirjonasxx/G-Earth/wiki/G-Python-qtConsole";
public static final String NOTEPAD_CACHE_KEY = "notepad_text";
+ public static final String ALWAYS_ADMIN_KEY = "always_admin";
public static final String SOCKS_CACHE_KEY = "socks_config";
public static final String GPYTHON_CACHE_KEY = "use_gpython";
@@ -51,6 +55,9 @@ public class ExtraController extends SubForm implements SocksConfiguration {
public GridPane grd_socksInfo;
public TextField txt_socksPort;
public TextField txt_socksIp;
+ public CheckBox cbx_admin;
+
+ private AdminService adminService;
public void initialize() {
url_troubleshooting.setTooltip(new Tooltip("https://github.com/sirjonasxx/G-Earth/wiki/Troubleshooting"));
@@ -72,6 +79,10 @@ public class ExtraController extends SubForm implements SocksConfiguration {
cbx_gpython.setSelected(Cacher.getCacheContents().getBoolean(GPYTHON_CACHE_KEY));
}
+ if (Cacher.getCacheContents().has(ALWAYS_ADMIN_KEY)) {
+ cbx_admin.setSelected(Cacher.getCacheContents().getBoolean(ALWAYS_ADMIN_KEY));
+ }
+
cbx_debug.selectedProperty().addListener(observable -> HConnection.DEBUG = cbx_debug.isSelected());
cbx_disableDecryption.selectedProperty().addListener(observable -> HConnection.DECRYPTPACKETS = !cbx_disableDecryption.isSelected());
@@ -82,6 +93,10 @@ public class ExtraController extends SubForm implements SocksConfiguration {
@Override
protected void onParentSet() {
+ adminService = new AdminService(cbx_admin.isSelected(), getHConnection());
+ getHConnection().addTrafficListener(1, message -> adminService.onMessage(message));
+ getHConnection().getStateObservable().addListener((oldState, newState) -> {if (newState == HState.CONNECTED) adminService.onConnect();});
+
parentController.getStage().setAlwaysOnTop(cbx_alwaysOnTop.isSelected());
cbx_alwaysOnTop.selectedProperty().addListener(observable -> parentController.getStage().setAlwaysOnTop(cbx_alwaysOnTop.isSelected()));
@@ -99,6 +114,7 @@ public class ExtraController extends SubForm implements SocksConfiguration {
protected void onExit() {
Cacher.put(NOTEPAD_CACHE_KEY, txtarea_notepad.getText());
Cacher.put(GPYTHON_CACHE_KEY, cbx_gpython.isSelected());
+ Cacher.put(ALWAYS_ADMIN_KEY, cbx_admin.isSelected());
saveSocksConfig();
}
@@ -191,4 +207,9 @@ public class ExtraController extends SubForm implements SocksConfiguration {
}
}
+
+ public void adminCbxClick(ActionEvent actionEvent) {
+ adminService.setEnabled(cbx_admin.isSelected());
+
+ }
}
diff --git a/G-Earth/src/main/resources/gearth/ui/extra/Extra.fxml b/G-Earth/src/main/resources/gearth/ui/extra/Extra.fxml
index da8993c..7368aba 100644
--- a/G-Earth/src/main/resources/gearth/ui/extra/Extra.fxml
+++ b/G-Earth/src/main/resources/gearth/ui/extra/Extra.fxml
@@ -1,17 +1,10 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
-
+
@@ -34,12 +27,13 @@
-
-
+
+
+
-
+
@@ -50,7 +44,7 @@
-
+
@@ -110,7 +104,7 @@
-
+
@@ -118,7 +112,12 @@
-
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 0b9ec7f..99444cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,9 +15,6 @@
G-Earth
-
-
- Extensions/AdminOnConnect