finish!
This commit is contained in:
109
src/main/java/net/limework/networking/AppleTunneler.java
Normal file
109
src/main/java/net/limework/networking/AppleTunneler.java
Normal file
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
13
src/main/resources/config.yml
Normal file
13
src/main/resources/config.yml
Normal file
@@ -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"
|
||||
|
||||
4
src/main/resources/plugin.yml
Normal file
4
src/main/resources/plugin.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
main: net.limework.networking.AppleTunneler
|
||||
version: ${project.version}
|
||||
name: ${project.artifactId}
|
||||
api-version: 1.13
|
||||
Reference in New Issue
Block a user