This commit is contained in:
坏黑
2018-05-07 14:43:57 +08:00
parent 7181c487f9
commit 6f34cbc2e0
152 changed files with 9256 additions and 9003 deletions

View File

@@ -1,69 +1,68 @@
package me.skymc.taboolib.message;
import java.util.HashMap;
import java.util.LinkedList;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import lombok.Getter;
import java.util.HashMap;
import java.util.LinkedList;
public class ChatCatcher implements Listener {
@Getter
private static HashMap<String, LinkedList<Catcher>> playerdata = new HashMap<>();
public static boolean contains(Player player) {
return playerdata.containsKey(player.getName()) && playerdata.get(player.getName()).size() > 0;
}
public static void call(Player player, Catcher catcher) {
if (!playerdata.containsKey(player.getName())) {
playerdata.put(player.getName(), new LinkedList<>());
}
playerdata.get(player.getName()).add(catcher.before());
}
@EventHandler
public void quit(PlayerQuitEvent e) {
playerdata.remove(e.getPlayer().getName());
}
@EventHandler
public void chat(AsyncPlayerChatEvent e) {
if (playerdata.containsKey(e.getPlayer().getName()) && playerdata.get(e.getPlayer().getName()).size() > 0) {
e.setCancelled(true);
if (e.getMessage().equalsIgnoreCase("quit()")) {
// 退出引导
playerdata.get(e.getPlayer().getName()).removeFirst().cancel();
// 清理数据
clearData(e.getPlayer());
}
else {
Catcher catcher = playerdata.get(e.getPlayer().getName()).getFirst();
// 如果终止引导
if (!catcher.after(e.getMessage())) {
// 移除
playerdata.get(e.getPlayer().getName()).removeFirst();
// 清理
clearData(e.getPlayer());
}
else {
catcher.before();
}
}
}
}
private void clearData(Player player) {
if (playerdata.containsKey(player.getName()) && playerdata.get(player.getName()).size() == 0) {
playerdata.remove(player.getName());
}
}
private static HashMap<String, LinkedList<Catcher>> playerdata = new HashMap<>();
public static HashMap<String, LinkedList<Catcher>> getPlayerdata() {
return playerdata;
}
public static boolean contains(Player player) {
return playerdata.containsKey(player.getName()) && playerdata.get(player.getName()).size() > 0;
}
public static void call(Player player, Catcher catcher) {
if (!playerdata.containsKey(player.getName())) {
playerdata.put(player.getName(), new LinkedList<>());
}
playerdata.get(player.getName()).add(catcher.before());
}
@EventHandler
public void quit(PlayerQuitEvent e) {
playerdata.remove(e.getPlayer().getName());
}
@EventHandler
public void chat(AsyncPlayerChatEvent e) {
if (playerdata.containsKey(e.getPlayer().getName()) && playerdata.get(e.getPlayer().getName()).size() > 0) {
e.setCancelled(true);
if (e.getMessage().equalsIgnoreCase("quit()")) {
// 退出引导
playerdata.get(e.getPlayer().getName()).removeFirst().cancel();
// 清理数据
clearData(e.getPlayer());
} else {
Catcher catcher = playerdata.get(e.getPlayer().getName()).getFirst();
// 如果终止引导
if (!catcher.after(e.getMessage())) {
// 移除
playerdata.get(e.getPlayer().getName()).removeFirst();
// 清理
clearData(e.getPlayer());
} else {
catcher.before();
}
}
}
}
private void clearData(Player player) {
if (playerdata.containsKey(player.getName()) && playerdata.get(player.getName()).size() == 0) {
playerdata.remove(player.getName());
}
}
public interface Catcher {
@@ -72,5 +71,5 @@ public class ChatCatcher implements Listener {
boolean after(String message);
void cancel();
}
}
}