diff --git a/.gitignore b/.gitignore
index 847e1e6..cb993b4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
# intellji idea
/.idea
+*.iml
# java stuff
diff --git a/pom.xml b/pom.xml
index 229c9e9..56114f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- net.glomc.networking
- SpigotNebulaVpn
+ net.limework.networking
+ AppleTunneler
1.0-SNAPSHOT
@@ -13,4 +13,58 @@
17
+
+
+
+ src/main/resources
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.3.1-SNAPSHOT
+
+ false
+
+
+
+ package
+
+ shade
+
+
+
+
+
+
+
+
+
+ spigot-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+
+
+
+ com.github.mwiede
+ jsch
+ 0.1.72
+
+
+
+ org.spigotmc
+ spigot-api
+ 1.18.1-R0.1-SNAPSHOT
+ provided
+
+
\ No newline at end of file
diff --git a/src/main/java/net/limework/networking/AppleTunneler.java b/src/main/java/net/limework/networking/AppleTunneler.java
new file mode 100644
index 0000000..f009f2a
--- /dev/null
+++ b/src/main/java/net/limework/networking/AppleTunneler.java
@@ -0,0 +1,109 @@
+package net.limework.networking;
+
+import com.jcraft.jsch.JSch;
+import com.jcraft.jsch.JSchException;
+import com.jcraft.jsch.Session;
+import org.bukkit.plugin.java.JavaPlugin;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import java.io.File;
+
+public class AppleTunneler extends JavaPlugin {
+
+ private Session sshSession;
+ private final JSch jsch = new JSch();
+
+ private synchronized void createNewConnection() throws JSchException {
+ if (sshSession != null) {
+ sshSession.disconnect();
+ }
+ java.util.Properties config = new java.util.Properties();
+ config.put("StrictHostKeyChecking", "no");
+ sshSession = jsch.getSession(getUsername(), getHost(), getPort());
+ sshSession.setConfig(config);
+ sshSession.connect(2000);
+ loadRemoteToLocalPortForwarding();
+ }
+
+ private void connectionFailedLog(JSchException exception) {
+ getLogger().severe("==========================");
+ getLogger().severe("failed to start a connection");
+ exception.printStackTrace();
+ getLogger().severe("==========================");
+
+ }
+
+ private void loadIds() throws JSchException {
+ File file = new File(getDataFolder(), "Identities");
+ if (file.mkdir()) {
+ getLogger().info("created Identities folder.");
+ }
+ File[] files = file.listFiles();
+
+ if (files == null) {
+ return;
+ }
+ if (files.length == 0) {
+ getLogger().warning("no Identities files found, please put them in " + file.getPath());
+ throw new RuntimeException("no Identities files found");
+ }
+ for (File id : files) {
+ jsch.addIdentity(id.getPath());
+ }
+ }
+
+ private void loadRemoteToLocalPortForwarding() throws JSchException {
+ for (String line : getConfig().getStringList("ports")) {
+ String[] array = line.split(":");
+ sshSession.setPortForwardingL(Integer.parseInt(array[0]), array[1], Integer.parseInt(array[2]));
+ }
+ }
+
+ @Override
+ public void onEnable() {
+ this.saveDefaultConfig();
+ try {
+ loadIds();
+ } catch (JSchException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ createNewConnection();
+ } catch (JSchException e) {
+ connectionFailedLog(e);
+ }
+ new BukkitRunnable() {
+ private boolean isConnecting = false;
+
+ @Override
+ public void run() {
+ if (isConnecting) {
+ return;
+ }
+ if (!sshSession.isConnected()) {
+ isConnecting = true;
+ try {
+ createNewConnection();
+ } catch (JSchException e) {
+ connectionFailedLog(e);
+ }
+ isConnecting = false;
+ }
+ }
+ }.runTaskTimerAsynchronously(this, 0, 20);
+
+ }
+
+ private int getPort() {
+ return this.getConfig().getInt("port");
+ }
+
+ private String getUsername() {
+ return this.getConfig().getString("username");
+ }
+
+ private String getHost() {
+ return this.getConfig().getString("host");
+ }
+
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000..e23d751
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,13 @@
+# welcome to the config of ${project.artifactId}
+
+# username for ssh
+username: apple
+# host eg: domains can be used.
+host: 192.168.0.100
+# port
+port: 22
+
+# Syntax is "local-port:remote-host:remote-port"
+ports:
+ - "25565:127.0.0.1:25565"
+
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..a2c0f50
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,4 @@
+main: net.limework.networking.AppleTunneler
+version: ${project.version}
+name: ${project.artifactId}
+api-version: 1.13
\ No newline at end of file