155 lines
5.6 KiB
Java
155 lines
5.6 KiB
Java
package pw.yumc.MiaoChat;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
|
import org.bukkit.inventory.ItemStack;
|
|
import org.bukkit.plugin.java.JavaPlugin;
|
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
|
|
|
import com.google.common.io.ByteArrayDataInput;
|
|
import com.google.common.io.ByteArrayDataOutput;
|
|
import com.google.common.io.ByteStreams;
|
|
import me.clip.placeholderapi.PlaceholderAPI;
|
|
import me.clip.placeholderapi.PlaceholderHook;
|
|
import pw.yumc.MiaoChat.config.ChatConfig;
|
|
import pw.yumc.MiaoChat.listeners.ChatListener;
|
|
import pw.yumc.YumCore.bukkit.Log;
|
|
import pw.yumc.YumCore.bukkit.compatible.C;
|
|
import pw.yumc.YumCore.commands.CommandSub;
|
|
import pw.yumc.YumCore.commands.annotation.Cmd;
|
|
import pw.yumc.YumCore.commands.annotation.Help;
|
|
import pw.yumc.YumCore.commands.interfaces.Executor;
|
|
import pw.yumc.YumCore.config.FileConfig;
|
|
import pw.yumc.YumCore.global.L10N;
|
|
|
|
public class MiaoChat extends JavaPlugin implements Executor, PluginMessageListener, Listener {
|
|
private FileConfig cfg;
|
|
private ChatConfig chatConfig;
|
|
private String ServerName;
|
|
|
|
public ChatConfig getChatConfig() {
|
|
return chatConfig;
|
|
}
|
|
|
|
@Override
|
|
public FileConfiguration getConfig() {
|
|
return cfg;
|
|
}
|
|
|
|
@Cmd(permission = "MiaoChat.toggle", executor = Cmd.Executor.PLAYER)
|
|
@Help("关闭聊天功能")
|
|
public void off(Player sender) {
|
|
ChatListener.offList.add(sender);
|
|
Log.sender(sender, "§c聊天功能已关闭!");
|
|
}
|
|
|
|
@Cmd(permission = "MiaoChat.toggle", executor = Cmd.Executor.PLAYER)
|
|
@Help("开启聊天功能")
|
|
public void on(Player sender) {
|
|
ChatListener.offList.remove(sender);
|
|
Log.sender(sender, "§a聊天功能已开启!");
|
|
}
|
|
|
|
@Override
|
|
public void onEnable() {
|
|
new ChatListener();
|
|
new CommandSub("MiaoChat", this);
|
|
enableBungeeCord();
|
|
hookPlaceholderAPI();
|
|
L10N.getName(new ItemStack(Material.AIR));
|
|
}
|
|
|
|
private void enableBungeeCord() {
|
|
if (getChatConfig().isBungeeCord()) {
|
|
Log.i("已开启 BungeeCord 模式!");
|
|
Bukkit.getMessenger().registerIncomingPluginChannel(this, "BungeeCord", this);
|
|
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
|
|
Bukkit.getPluginManager().registerEvents(this, this);
|
|
Bukkit.getMessenger().registerIncomingPluginChannel(this, MiaoMessage.CHANNEL, this);
|
|
Bukkit.getMessenger().registerOutgoingPluginChannel(this, MiaoMessage.CHANNEL);
|
|
Bukkit.getMessenger().registerIncomingPluginChannel(this, MiaoMessage.NORMAL_CHANNEL, this);
|
|
Bukkit.getMessenger().registerOutgoingPluginChannel(this, MiaoMessage.NORMAL_CHANNEL);
|
|
}
|
|
}
|
|
|
|
private void hookPlaceholderAPI() {
|
|
PlaceholderAPI.registerPlaceholderHook("mct", new PlaceholderHook() {
|
|
@Override
|
|
public String onPlaceholderRequest(Player player, String s) {
|
|
switch (s.toLowerCase()) {
|
|
case "server":
|
|
return getChatConfig().getServername();
|
|
case "bserver":
|
|
return ServerName;
|
|
default:
|
|
}
|
|
return "未知的参数";
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void onLoad() {
|
|
cfg = new FileConfig();
|
|
chatConfig = new ChatConfig();
|
|
}
|
|
|
|
@Cmd(permission = "MiaoChat.reload")
|
|
@Help("重载配置文件")
|
|
public void reload(CommandSender sender) {
|
|
cfg.reload();
|
|
chatConfig.reload();
|
|
Log.sender(sender, "§a配置文件已重载!");
|
|
}
|
|
|
|
public static void send(byte[] in) {
|
|
send(MiaoMessage.decode(in).getJson());
|
|
}
|
|
|
|
public static void send(String json) {
|
|
for (Player player : C.Player.getOnlinePlayers()) {
|
|
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tellraw " + player.getName() + " " + json);
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
public void onJoin(final PlayerJoinEvent e) {
|
|
Bukkit.getScheduler().runTaskLater(this, () -> {
|
|
Player p = e.getPlayer();
|
|
if (p.isOnline()) {
|
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
|
out.writeUTF("GetServer");
|
|
p.sendPluginMessage(MiaoChat.this, "BungeeCord", out.toByteArray());
|
|
}
|
|
}, 10);
|
|
}
|
|
|
|
@Override
|
|
public void onPluginMessageReceived(String channel, Player player, byte[] message) {
|
|
if (MiaoMessage.CHANNEL.equals(channel)) {
|
|
send(message);
|
|
} else if (MiaoMessage.NORMAL_CHANNEL.equals(channel)) {
|
|
for (Player p : C.Player.getOnlinePlayers()) {
|
|
p.sendMessage(MiaoMessage.decode(message).getJson());
|
|
}
|
|
} else if ("BungeeCord".equals(channel)) {
|
|
final ByteArrayDataInput input = ByteStreams.newDataInput(message);
|
|
if ("GetServer".equals(input.readUTF())) {
|
|
ServerName = input.readUTF();
|
|
Log.d("获取服务器名称: " + ServerName);
|
|
PlayerJoinEvent.getHandlerList().unregister((Listener) this);
|
|
Bukkit.getScheduler().runTaskLater(this, () -> {
|
|
Bukkit.getMessenger().unregisterIncomingPluginChannel(MiaoChat.this, "BungeeCord");
|
|
Bukkit.getMessenger().unregisterOutgoingPluginChannel(MiaoChat.this, "BungeeCord");
|
|
}, 20);
|
|
}
|
|
}
|
|
}
|
|
}
|