No need of NMS imports.
This commit is contained in:
parent
2380c42089
commit
dc8e49f643
@ -2,21 +2,29 @@ package com.ryanmichela.sshd.implementations;
|
|||||||
|
|
||||||
import com.ryanmichela.sshd.ConsoleShellFactory;
|
import com.ryanmichela.sshd.ConsoleShellFactory;
|
||||||
import com.ryanmichela.sshd.SshdPlugin;
|
import com.ryanmichela.sshd.SshdPlugin;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.conversations.Conversation;
|
import org.bukkit.conversations.Conversation;
|
||||||
import org.bukkit.conversations.ConversationAbandonedEvent;
|
import org.bukkit.conversations.ConversationAbandonedEvent;
|
||||||
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.command.ServerCommandSender;
|
import org.bukkit.permissions.PermissibleBase;
|
||||||
import org.bukkit.craftbukkit.v1_12_R1.conversations.ConversationTracker;
|
import org.bukkit.permissions.Permission;
|
||||||
|
import org.bukkit.permissions.PermissionAttachment;
|
||||||
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
public class SSHDCommandSender extends ServerCommandSender implements ConsoleCommandSender {
|
public class SSHDCommandSender implements ConsoleCommandSender, CommandSender {
|
||||||
|
|
||||||
private final ConversationTracker conversationTracker = new ConversationTracker();
|
private final PermissibleBase perm = new PermissibleBase(this);
|
||||||
|
private final SSHDConversationTracker conversationTracker = new SSHDConversationTracker();
|
||||||
|
|
||||||
public void sendMessage(String message) {
|
public void sendMessage(String message) {
|
||||||
this.sendRawMessage(message);
|
this.sendRawMessage(message);
|
||||||
@ -24,7 +32,7 @@ public class SSHDCommandSender extends ServerCommandSender implements ConsoleCom
|
|||||||
|
|
||||||
public void sendRawMessage(String message) {
|
public void sendRawMessage(String message) {
|
||||||
try {
|
try {
|
||||||
ConsoleShellFactory.ConsoleShell.consoleReader.println(ChatColor.stripColor(message) + "\r");
|
ConsoleShellFactory.ConsoleShell.consoleReader.println(ChatColor.stripColor(message));
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
SshdPlugin.instance.getLogger().log(Level.SEVERE, "Error sending message to SSHDCommandSender", e);
|
SshdPlugin.instance.getLogger().log(Level.SEVERE, "Error sending message to SSHDCommandSender", e);
|
||||||
}
|
}
|
||||||
@ -66,4 +74,56 @@ public class SSHDCommandSender extends ServerCommandSender implements ConsoleCom
|
|||||||
return this.conversationTracker.isConversing();
|
return this.conversationTracker.isConversing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isPermissionSet(String name) {
|
||||||
|
return this.perm.isPermissionSet(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPermissionSet(Permission perm) {
|
||||||
|
return this.perm.isPermissionSet(perm);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPermission(String name) {
|
||||||
|
return this.perm.hasPermission(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasPermission(Permission perm) {
|
||||||
|
return this.perm.hasPermission(perm);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value) {
|
||||||
|
return this.perm.addAttachment(plugin, name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin) {
|
||||||
|
return this.perm.addAttachment(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks) {
|
||||||
|
return this.perm.addAttachment(plugin, name, value, ticks);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PermissionAttachment addAttachment(Plugin plugin, int ticks) {
|
||||||
|
return this.perm.addAttachment(plugin, ticks);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAttachment(PermissionAttachment attachment) {
|
||||||
|
this.perm.removeAttachment(attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void recalculatePermissions() {
|
||||||
|
this.perm.recalculatePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<PermissionAttachmentInfo> getEffectivePermissions() {
|
||||||
|
return this.perm.getEffectivePermissions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPlayer() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Server getServer() {
|
||||||
|
return Bukkit.getServer();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,78 @@
|
|||||||
|
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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user