Most of the way there.
This commit is contained in:
parent
047369105e
commit
1c6028199b
47
bungee/config.yml
Normal file
47
bungee/config.yml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
forge_support: false
|
||||||
|
connection_throttle_limit: 3
|
||||||
|
timeout: 30000
|
||||||
|
online_mode: true
|
||||||
|
log_commands: false
|
||||||
|
listeners:
|
||||||
|
- query_port: 25577
|
||||||
|
motd: '&1Another Bungee server'
|
||||||
|
tab_list: GLOBAL_PING
|
||||||
|
query_enabled: false
|
||||||
|
proxy_protocol: false
|
||||||
|
forced_hosts:
|
||||||
|
pvp.md-5.net: pvp
|
||||||
|
ping_passthrough: false
|
||||||
|
priorities:
|
||||||
|
- lobby
|
||||||
|
bind_local_address: true
|
||||||
|
host: 0.0.0.0:25577
|
||||||
|
max_players: 1
|
||||||
|
tab_size: 60
|
||||||
|
force_default_server: false
|
||||||
|
connection_throttle: 4000
|
||||||
|
groups:
|
||||||
|
md_5:
|
||||||
|
- admin
|
||||||
|
log_pings: true
|
||||||
|
ip_forward: false
|
||||||
|
prevent_proxy_connections: false
|
||||||
|
network_compression_threshold: 256
|
||||||
|
disabled_commands:
|
||||||
|
- disabledcommandhere
|
||||||
|
stats: 8d157bd9-a8be-441b-8dec-fd61c19393e5
|
||||||
|
permissions:
|
||||||
|
default:
|
||||||
|
- bungeecord.command.server
|
||||||
|
- bungeecord.command.list
|
||||||
|
admin:
|
||||||
|
- bungeecord.command.alert
|
||||||
|
- bungeecord.command.end
|
||||||
|
- bungeecord.command.ip
|
||||||
|
- bungeecord.command.reload
|
||||||
|
servers:
|
||||||
|
lobby:
|
||||||
|
motd: '&1Just another BungeeCord - Forced Host'
|
||||||
|
address: localhost:25565
|
||||||
|
restricted: false
|
||||||
|
player_limit: -1
|
1
bungee/locations.yml
Normal file
1
bungee/locations.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
{}
|
8
bungee/modules.yml
Normal file
8
bungee/modules.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
version: 2
|
||||||
|
modules:
|
||||||
|
- jenkins://cmd_alert
|
||||||
|
- jenkins://cmd_find
|
||||||
|
- jenkins://cmd_list
|
||||||
|
- jenkins://cmd_send
|
||||||
|
- jenkins://cmd_server
|
||||||
|
- jenkins://reconnect_yaml
|
1
bungee/plugins/SSHD/authorized_keys/zachery
Normal file
1
bungee/plugins/SSHD/authorized_keys/zachery
Normal file
@ -0,0 +1 @@
|
|||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDlOkUWRz4aOH8E0oX2Cx7WIqFdIK17n0aeLopLemE9xXPQnPQYKpxCXimU242GAF3c6UldRMWesrXqdyjaPOCe63NAgBpsc7v+nfDOZSYmN1OoBDTs/gDSIA/KlAK+c5W8kEQ108d0us5lmPT+KEKx8jo614jwSaKNRjPLY9G7pXcJ2u1q55wNW/6T/z//zzulo3Bvo6rFnj8hg85cFnOO/ZyiZbI72RO/ElAlP8Q+tpwRTP/JE5BR50sdf6jVuowsMw4BdTMi+U+ggRPbfOTowLoQybV8y/GM8F6+PCAi7ItZYgEYJvw3jjCl5F88hyrm5ayBo17tGKrrQ827HB0T zachery@Zachery
|
BIN
bungee/plugins/SSHD/hostkey
Normal file
BIN
bungee/plugins/SSHD/hostkey
Normal file
Binary file not shown.
8
bungee/plugins/SSHD/motd.txt
Normal file
8
bungee/plugins/SSHD/motd.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
§l§4 _____ _____ _ _ _____§r
|
||||||
|
§l§6 / ____/ ____| | | | __ \§r
|
||||||
|
§l§2| (___| (___ | |__| | | | |§r
|
||||||
|
§l§3 \___ \\___ \| __ | | | |§r
|
||||||
|
§l§9 ____) |___) | | | | |__| |§r
|
||||||
|
§l§5|_____/_____/|_| |_|_____/§r
|
||||||
|
|
||||||
|
===============================================
|
1
bungee/plugins/config.yml
Normal file
1
bungee/plugins/config.yml
Normal file
@ -0,0 +1 @@
|
|||||||
|
test: This configuration file works!
|
1212
bungee/proxy.log.0
Normal file
1212
bungee/proxy.log.0
Normal file
File diff suppressed because it is too large
Load Diff
0
bungee/proxy.log.0.lck
Normal file
0
bungee/proxy.log.0.lck
Normal file
11
pom.xml
11
pom.xml
@ -5,7 +5,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>com.ryanmichela</groupId>
|
<groupId>com.ryanmichela</groupId>
|
||||||
<artifactId>sshd</artifactId>
|
<artifactId>sshd-bungee</artifactId>
|
||||||
<version>1.3.6.1</version>
|
<version>1.3.6.1</version>
|
||||||
<url>https://github.com/Justasic/Bukkit-SSHD/</url>
|
<url>https://github.com/Justasic/Bukkit-SSHD/</url>
|
||||||
|
|
||||||
@ -101,14 +101,12 @@
|
|||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-core</artifactId>
|
<artifactId>log4j-core</artifactId>
|
||||||
<version>2.0</version>
|
<version>2.0</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.logging.log4j</groupId>
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
<artifactId>log4j-api</artifactId>
|
<artifactId>log4j-api</artifactId>
|
||||||
<version>2.1</version>
|
<version>2.1</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -117,16 +115,13 @@
|
|||||||
<version>1.10</version>
|
<version>1.10</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-lang</groupId>
|
<groupId>commons-lang</groupId>
|
||||||
<artifactId>commons-lang</artifactId>
|
<artifactId>commons-lang</artifactId>
|
||||||
<version>2.6</version>
|
<version>2.6</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>net.md-5</groupId>
|
|
||||||
<artifactId>bungeecord-bootstrap</artifactId>
|
|
||||||
<version>1.13-SNAPSHOT</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
|
@ -6,6 +6,9 @@ import org.apache.sshd.server.channel.ChannelSession;
|
|||||||
import org.apache.sshd.server.Environment;
|
import org.apache.sshd.server.Environment;
|
||||||
import org.apache.sshd.server.ExitCallback;
|
import org.apache.sshd.server.ExitCallback;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -56,11 +59,8 @@ public class ConsoleCommandFactory implements CommandFactory {
|
|||||||
SshdPlugin.instance.getLogger()
|
SshdPlugin.instance.getLogger()
|
||||||
.info("[U: " + environment.getEnv().get(Environment.ENV_USER) + "] " + command);
|
.info("[U: " + environment.getEnv().get(Environment.ENV_USER) + "] " + command);
|
||||||
|
|
||||||
SshdPlugin.instance.getProxy().getPluginManager().dispatchCommand(SshdPlugin.instance.getProxy().getConsole(), command);
|
if (!SshdPlugin.instance.getProxy().getPluginManager().dispatchCommand(SshdPlugin.instance.getProxy().getConsole(), command))
|
||||||
|
SshdPlugin.instance.getProxy().getConsole().sendMessage(new ComponentBuilder("Command not found").color(ChatColor.RED).create());
|
||||||
// getConsoleSender() doesn't exist in bungee, and is replaced with getConsole() from my understanding.
|
|
||||||
//SshdPlugin.instance.getProxy().getPluginManager().dispatchCommand(SshdPlugin.instance.getProxy().getConsoleSender().getInstance(), command);
|
|
||||||
//Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -15,12 +15,13 @@ import java.util.Map;
|
|||||||
import java.util.logging.Formatter;
|
import java.util.logging.Formatter;
|
||||||
import java.util.logging.LogRecord;
|
import java.util.logging.LogRecord;
|
||||||
|
|
||||||
public class ConsoleLogFormatter extends Formatter {
|
public class ConsoleLogFormatter extends Formatter
|
||||||
|
{
|
||||||
private SimpleDateFormat dateFormat;
|
private SimpleDateFormat dateFormat;
|
||||||
private static final Map<ChatColor, String> replacements = new EnumMap<ChatColor, String>(ChatColor.class);
|
private static final Map<ChatColor, String> replacements = new EnumMap<ChatColor, String>(ChatColor.class);
|
||||||
|
|
||||||
public ConsoleLogFormatter() {
|
public ConsoleLogFormatter()
|
||||||
|
{
|
||||||
this.dateFormat = new SimpleDateFormat("HH:mm:ss");
|
this.dateFormat = new SimpleDateFormat("HH:mm:ss");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,6 +11,8 @@ import com.ryanmichela.sshd.implementations.SSHDCommandSender;
|
|||||||
import com.ryanmichela.sshd.ConsoleLogFormatter;
|
import com.ryanmichela.sshd.ConsoleLogFormatter;
|
||||||
import jline.console.ConsoleReader;
|
import jline.console.ConsoleReader;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.core.Logger;
|
import org.apache.logging.log4j.core.Logger;
|
||||||
import org.apache.sshd.common.Factory;
|
import org.apache.sshd.common.Factory;
|
||||||
@ -51,6 +53,7 @@ public class ConsoleShellFactory implements ShellFactory {
|
|||||||
private String Username;
|
private String Username;
|
||||||
|
|
||||||
StreamHandlerAppender streamHandlerAppender;
|
StreamHandlerAppender streamHandlerAppender;
|
||||||
|
StreamHandler streamHandler;
|
||||||
public ConsoleReader ConsoleReader;
|
public ConsoleReader ConsoleReader;
|
||||||
public SSHDCommandSender SshdCommandSender;
|
public SSHDCommandSender SshdCommandSender;
|
||||||
|
|
||||||
@ -95,10 +98,10 @@ public class ConsoleShellFactory implements ShellFactory {
|
|||||||
this.ConsoleReader.setExpandEvents(true);
|
this.ConsoleReader.setExpandEvents(true);
|
||||||
//this.ConsoleReader.addCompleter(new ConsoleCommandCompleter());
|
//this.ConsoleReader.addCompleter(new ConsoleCommandCompleter());
|
||||||
|
|
||||||
StreamHandler streamHandler = new FlushyStreamHandler(out, new ConsoleLogFormatter(), this.ConsoleReader);
|
streamHandler = new FlushyStreamHandler(out, new ConsoleLogFormatter(), this.ConsoleReader);
|
||||||
this.streamHandlerAppender = new StreamHandlerAppender(streamHandler);
|
this.streamHandlerAppender = new StreamHandlerAppender(streamHandler);
|
||||||
|
|
||||||
((Logger)LogManager.getRootLogger()).addAppender(this.streamHandlerAppender);
|
SshdPlugin.instance.getProxy().getLogger().addHandler(this.streamHandler);
|
||||||
|
|
||||||
this.environment = env;
|
this.environment = env;
|
||||||
this.Username = env.getEnv().get(Environment.ENV_USER);
|
this.Username = env.getEnv().get(Environment.ENV_USER);
|
||||||
@ -109,12 +112,13 @@ public class ConsoleShellFactory implements ShellFactory {
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
e.printStackTrace();
|
||||||
throw new IOException("Error starting shell", e);
|
throw new IOException("Error starting shell", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void destroy(ChannelSession cs) { ((Logger)LogManager.getRootLogger()).removeAppender(this.streamHandlerAppender); }
|
public void destroy(ChannelSession cs) { SshdPlugin.instance.getProxy().getLogger().removeHandler(this.streamHandler); }
|
||||||
|
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
@ -150,22 +154,23 @@ public class ConsoleShellFactory implements ShellFactory {
|
|||||||
{
|
{
|
||||||
// NO ECHO NO PREAMBLE AND SHIT
|
// NO ECHO NO PREAMBLE AND SHIT
|
||||||
String cmd = command.substring("rpc".length() + 1, command.length());
|
String cmd = command.substring("rpc".length() + 1, command.length());
|
||||||
instance.getProxy().getPluginManager().dispatchCommand(this.SshdCommandSender, cmd);
|
if (!instance.getProxy().getPluginManager().dispatchCommand(this.SshdCommandSender, cmd))
|
||||||
//Bukkit.dispatchCommand(this.SshdCommandSender, cmd);
|
instance.getProxy().getConsole().sendMessage(new ComponentBuilder("Command not found").color(ChatColor.RED).create());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!mkpasswd)
|
if (!mkpasswd)
|
||||||
instance.getLogger().info("<" + this.Username + "> " + command);
|
instance.getLogger().info("<" + this.Username + "> " + command);
|
||||||
|
|
||||||
instance.getProxy().getPluginManager().dispatchCommand(instance.getProxy().getConsole(), command);
|
if (!instance.getProxy().getPluginManager().dispatchCommand(this.SshdCommandSender, command))
|
||||||
//Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command);
|
instance.getProxy().getConsole().sendMessage(new ComponentBuilder("Command not found").color(ChatColor.RED).create());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
|
e.printStackTrace();
|
||||||
instance.getLogger().log(Level.SEVERE, "Error processing command from SSH", e);
|
instance.getLogger().log(Level.SEVERE, "Error processing command from SSH", e);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -2,6 +2,7 @@ package com.ryanmichela.sshd;
|
|||||||
|
|
||||||
import jline.console.ConsoleReader;
|
import jline.console.ConsoleReader;
|
||||||
import org.apache.sshd.common.SshException;
|
import org.apache.sshd.common.SshException;
|
||||||
|
import org.apache.sshd.common.channel.exception.SshChannelClosedException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@ -10,39 +11,50 @@ import java.util.logging.*;
|
|||||||
/**
|
/**
|
||||||
* Copyright 2013 Ryan Michela
|
* Copyright 2013 Ryan Michela
|
||||||
*/
|
*/
|
||||||
public class FlushyStreamHandler extends StreamHandler {
|
public class FlushyStreamHandler extends StreamHandler
|
||||||
|
{
|
||||||
private ConsoleReader reader;
|
private ConsoleReader reader;
|
||||||
|
|
||||||
public FlushyStreamHandler(OutputStream out, Formatter formatter, ConsoleReader reader) {
|
public FlushyStreamHandler(OutputStream out, Formatter formatter, ConsoleReader reader)
|
||||||
|
{
|
||||||
super(out, formatter);
|
super(out, formatter);
|
||||||
this.reader = reader;
|
this.reader = reader;
|
||||||
setLevel(Level.INFO);
|
setLevel(Level.INFO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void publish(LogRecord record) {
|
public synchronized void publish(LogRecord record)
|
||||||
record.setMessage(record.getMessage().replace("\n", "\n\r"));
|
{
|
||||||
|
record.setMessage(record.getMessage().replace("\n", "\r\n"));
|
||||||
super.publish(record);
|
super.publish(record);
|
||||||
flush();
|
flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized void flush() {
|
public synchronized void flush()
|
||||||
try {
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
reader.print(ConsoleReader.RESET_LINE + "");
|
reader.print(ConsoleReader.RESET_LINE + "");
|
||||||
reader.flush();
|
reader.flush();
|
||||||
super.flush();
|
super.flush();
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
reader.drawLine();
|
reader.drawLine();
|
||||||
} catch (Throwable ex) {
|
}
|
||||||
|
catch (Throwable ex)
|
||||||
|
{
|
||||||
reader.getCursorBuffer().clear();
|
reader.getCursorBuffer().clear();
|
||||||
}
|
}
|
||||||
reader.flush();
|
reader.flush();
|
||||||
super.flush();
|
super.flush();
|
||||||
} catch (SshException ex) {
|
}
|
||||||
|
catch (SshChannelClosedException ex)
|
||||||
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
} catch (IOException ex) {
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
Logger.getLogger(FlushyStreamHandler.class.getName()).log(Level.SEVERE, null, ex);
|
Logger.getLogger(FlushyStreamHandler.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,19 +21,21 @@ public class MkpasswdCommand extends Command
|
|||||||
public void execute(CommandSender sender, String[] args)
|
public void execute(CommandSender sender, String[] args)
|
||||||
{
|
{
|
||||||
ProxiedPlayer player = (ProxiedPlayer) sender;
|
ProxiedPlayer player = (ProxiedPlayer) sender;
|
||||||
|
|
||||||
String algoritm, password;
|
String algoritm, password;
|
||||||
algoritm = args[0];
|
|
||||||
password = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Stupid bukkit, we have to concatenate the arguments together if they're using
|
// Stupid bukkit, we have to concatenate the arguments together if they're using
|
||||||
// spaces in their passwords otherwise it won't be as strong as it should be.
|
// spaces in their passwords otherwise it won't be as strong as it should be.
|
||||||
|
algoritm = args[0];
|
||||||
|
password = String.join(" ", Arrays.copyOfRange(args, 1, args.length));
|
||||||
}
|
}
|
||||||
catch (ArrayIndexOutOfBoundsException e)
|
catch (ArrayIndexOutOfBoundsException e)
|
||||||
{
|
{
|
||||||
// ignore it.
|
// ignore it.
|
||||||
|
sender.sendMessage("Invalid Syntax");
|
||||||
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If they're console, allow regardless.
|
// If they're console, allow regardless.
|
||||||
@ -50,6 +52,11 @@ public class MkpasswdCommand extends Command
|
|||||||
sender.sendMessage(Cryptography.BCrypt_HashPassword(password));
|
sender.sendMessage(Cryptography.BCrypt_HashPassword(password));
|
||||||
else if (algoritm.equalsIgnoreCase("sha256"))
|
else if (algoritm.equalsIgnoreCase("sha256"))
|
||||||
sender.sendMessage(Cryptography.SHA256_HashPassword(password));
|
sender.sendMessage(Cryptography.SHA256_HashPassword(password));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sender.sendMessage("Invalid Syntax");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -55,7 +55,6 @@ public final class SshdPlugin extends Plugin
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!file.exists())
|
if (!file.exists())
|
||||||
@ -108,7 +107,6 @@ public final class SshdPlugin extends Plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
getProxy().getPluginManager().registerCommand(this, new MkpasswdCommand());
|
getProxy().getPluginManager().registerCommand(this, new MkpasswdCommand());
|
||||||
//this.getCommand("mkpasswd").setExecutor(new MkpasswdCommand());
|
|
||||||
|
|
||||||
sshd.setCommandFactory(new ConsoleCommandFactory());
|
sshd.setCommandFactory(new ConsoleCommandFactory());
|
||||||
try
|
try
|
||||||
|
@ -5,26 +5,10 @@ import lombok.AccessLevel;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.CommandSender;
|
import net.md_5.bungee.api.CommandSender;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
|
|
||||||
/*
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Server;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
|
||||||
import org.bukkit.conversations.Conversation;
|
|
||||||
import org.bukkit.conversations.ConversationAbandonedEvent;
|
|
||||||
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
|
||||||
import org.bukkit.permissions.PermissibleBase;
|
|
||||||
import org.bukkit.permissions.Permission;
|
|
||||||
import org.bukkit.permissions.PermissionAttachment;
|
|
||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
*/
|
|
||||||
|
|
||||||
import com.ryanmichela.sshd.ConsoleShellFactory;
|
import com.ryanmichela.sshd.ConsoleShellFactory;
|
||||||
|
import com.ryanmichela.sshd.ConsoleLogFormatter;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -32,77 +16,91 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
public final class SSHDCommandSender implements CommandSender
|
||||||
public final class SSHDCommandSender implements CommandSender {
|
{
|
||||||
private static final SSHDCommandSender instance = new SSHDCommandSender();
|
|
||||||
|
|
||||||
public ConsoleShellFactory.ConsoleShell console;
|
public ConsoleShellFactory.ConsoleShell console;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String message) {
|
public void sendMessage(String message)
|
||||||
ProxyServer.getInstance().getLogger().info(message);
|
{
|
||||||
|
if (message.indexOf('\n') != 0)
|
||||||
|
this.sendRawMessage(message);
|
||||||
|
else
|
||||||
|
Arrays.asList(message.split("\n")).forEach(this::sendMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendRawMessage(String message) {
|
public void sendRawMessage(String message)
|
||||||
// What the fuck does this code even do? Are we sending to one client or all of
|
{
|
||||||
// them?
|
|
||||||
if (this.console.ConsoleReader == null)
|
if (this.console.ConsoleReader == null)
|
||||||
return;
|
return;
|
||||||
try {
|
/*
|
||||||
ProxyServer.getInstance().getLogger().info(message);
|
try
|
||||||
this.console.ConsoleReader.println(ChatColor.stripColor(message));
|
{
|
||||||
} catch (IOException e) {
|
this.console.ConsoleReader.println(ConsoleLogFormatter.ColorizeString(message).replace("\n", "\n\r"));
|
||||||
SshdPlugin.instance.getLogger().log(Level.SEVERE, "Error sending message to SSHDCommandSender", e);
|
|
||||||
}
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
SshdPlugin.instance.getLogger().log(Level.SEVERE, "Error sending message to SSHDCommandSender", e);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessages(String... messages) {
|
public void sendMessages(String... messages)
|
||||||
|
{
|
||||||
Arrays.asList(messages).forEach(this::sendMessage);
|
Arrays.asList(messages).forEach(this::sendMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(BaseComponent... message) {
|
public void sendMessage(BaseComponent... message)
|
||||||
|
{
|
||||||
sendMessage(BaseComponent.toLegacyText(message));
|
sendMessage(BaseComponent.toLegacyText(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(BaseComponent message) {
|
public void sendMessage(BaseComponent message)
|
||||||
|
{
|
||||||
sendMessage(message.toLegacyText());
|
sendMessage(message.toLegacyText());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName()
|
||||||
return "CONSOLE";
|
{
|
||||||
|
return "SSHD CONSOLE";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getGroups() {
|
public Collection<String> getGroups()
|
||||||
|
{
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addGroups(String... groups) {
|
public void addGroups(String... groups)
|
||||||
|
{
|
||||||
throw new UnsupportedOperationException("Console may not have groups");
|
throw new UnsupportedOperationException("Console may not have groups");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeGroups(String... groups) {
|
public void removeGroups(String... groups)
|
||||||
|
{
|
||||||
throw new UnsupportedOperationException("Console may not have groups");
|
throw new UnsupportedOperationException("Console may not have groups");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPermission(String permission) {
|
public boolean hasPermission(String permission)
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setPermission(String permission, boolean value) {
|
public void setPermission(String permission, boolean value)
|
||||||
|
{
|
||||||
throw new UnsupportedOperationException("Console has all permissions");
|
throw new UnsupportedOperationException("Console has all permissions");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getPermissions() {
|
public Collection<String> getPermissions()
|
||||||
|
{
|
||||||
return Collections.emptySet();
|
return Collections.emptySet();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,78 +0,0 @@
|
|||||||
package com.ryanmichela.sshd.implementations;
|
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.conversations.Conversation;
|
|
||||||
import org.bukkit.conversations.ConversationAbandonedEvent;
|
|
||||||
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
|
||||||
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
public class SSHDConversationTracker {
|
|
||||||
private LinkedList<Conversation> conversationQueue = new LinkedList<>();
|
|
||||||
|
|
||||||
synchronized boolean beginConversation(Conversation conversation) {
|
|
||||||
if (!this.conversationQueue.contains(conversation)) {
|
|
||||||
this.conversationQueue.addLast(conversation);
|
|
||||||
if (this.conversationQueue.getFirst() == conversation) {
|
|
||||||
conversation.begin();
|
|
||||||
conversation.outputNextPrompt();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) {
|
|
||||||
if (!this.conversationQueue.isEmpty()) {
|
|
||||||
if (this.conversationQueue.getFirst() == conversation) {
|
|
||||||
conversation.abandon(details);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.conversationQueue.contains(conversation)) {
|
|
||||||
this.conversationQueue.remove(conversation);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!this.conversationQueue.isEmpty()) {
|
|
||||||
this.conversationQueue.getFirst().outputNextPrompt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void abandonAllConversations() {
|
|
||||||
LinkedList<Conversation> oldQueue = this.conversationQueue;
|
|
||||||
this.conversationQueue = new LinkedList<>();
|
|
||||||
|
|
||||||
for (Conversation conversation : oldQueue) {
|
|
||||||
try {
|
|
||||||
conversation.abandon(new ConversationAbandonedEvent(conversation, new ManuallyAbandonedConversationCanceller()));
|
|
||||||
} catch (Throwable var5) {
|
|
||||||
Bukkit.getLogger().log(Level.SEVERE, "Unexpected exception while abandoning a conversation", var5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized void acceptConversationInput(String input) {
|
|
||||||
if (this.isConversing()) {
|
|
||||||
Conversation conversation = this.conversationQueue.getFirst();
|
|
||||||
|
|
||||||
try {
|
|
||||||
conversation.acceptInput(input);
|
|
||||||
} catch (Throwable var4) {
|
|
||||||
conversation.getContext().getPlugin().getLogger().log(Level.WARNING, String.format("Plugin %s generated an exception whilst handling conversation input", conversation.getContext().getPlugin().getDescription().getFullName()), var4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
synchronized boolean isConversing() {
|
|
||||||
return !this.conversationQueue.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized boolean isConversingModaly() {
|
|
||||||
return this.isConversing() && this.conversationQueue.getFirst().isModal();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
name: SSHD
|
name: SSHD
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
author: Ryan Michela, Haarolean, toxuin, Justin Crawford
|
author: Ryan Michela, Haarolean, toxuin, Justin Crawford, Zachery Coleman
|
||||||
main: com.ryanmichela.sshd.SshdPlugin
|
main: com.ryanmichela.sshd.SshdPlugin
|
||||||
commands:
|
commands:
|
||||||
mkpasswd:
|
mkpasswd:
|
||||||
|
Loading…
Reference in New Issue
Block a user