1
mirror of https://github.com/CarmJos/MoeTeleport.git synced 2026-06-04 15:59:45 +08:00

Initial commit

This commit is contained in:
2021-12-16 01:11:56 +08:00
commit 5477e0ef92
10 changed files with 523 additions and 0 deletions
@@ -0,0 +1,90 @@
package cc.carm.plugin.protalcommands;
import cc.carm.plugin.protalcommands.listener.UserListener;
import cc.carm.plugin.protalcommands.util.ColorParser;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.PluginCommand;
import org.bukkit.command.TabCompleter;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class Main extends JavaPlugin {
private static Main instance;
public static boolean debugMode = true;
@Override
public void onEnable() {
instance = this;
log(getName() + " " + getDescription().getVersion() + " &7开始加载...");
long startTime = System.currentTimeMillis();
log("加载配置文件...");
saveDefaultConfig();
reloadConfig();
log("注册监听器...");
regListener(new UserListener());
log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。");
}
@Override
public void onDisable() {
log(getName() + " " + getDescription().getVersion() + " 开始卸载...");
long startTime = System.currentTimeMillis();
log("卸载监听器...");
Bukkit.getServicesManager().unregisterAll(this);
log("卸载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。");
}
/**
* 注册监听器
*
* @param listener 监听器
*/
public static void regListener(Listener listener) {
Bukkit.getPluginManager().registerEvents(listener, getInstance());
}
public static void log(String message) {
Bukkit.getConsoleSender().sendMessage(ColorParser.parse("[" + getInstance().getName() + "] " + message));
}
public static void debug(String message) {
if (debugMode) {
log("[DEBUG] " + message);
}
}
public static Main getInstance() {
return instance;
}
public static void registerCommand(String commandName,
@NotNull CommandExecutor executor) {
registerCommand(commandName, executor, null);
}
public static void registerCommand(String commandName,
@NotNull CommandExecutor executor,
@Nullable TabCompleter tabCompleter) {
PluginCommand command = Bukkit.getPluginCommand(commandName);
if (command == null) return;
command.setExecutor(executor);
if (tabCompleter != null) command.setTabCompleter(tabCompleter);
}
public static List<String> getCommands() {
return getInstance().getConfig().getStringList("commands");
}
}
@@ -0,0 +1,42 @@
package cc.carm.plugin.protalcommands.listener;
import cc.carm.plugin.protalcommands.Main;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerTeleportEvent;
import java.util.List;
public class UserListener implements Listener {
@EventHandler
public void onTeleport(PlayerTeleportEvent event) {
Location to = event.getTo();
if (to == null || to.getWorld() == null) {
return;
}
World.Environment environment = to.getWorld().getEnvironment();
if (environment == World.Environment.NETHER) {
event.setCancelled(true); //取消传送
executeCommands(event.getPlayer(), Main.getCommands());
}
}
private static void executeCommands(Player player, List<String> commands) {
if (commands == null || commands.isEmpty()) return;
for (String command : commands) {
try {
player.chat(PlaceholderAPI.setPlaceholders(player, command));
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
}
@@ -0,0 +1,33 @@
package cc.carm.plugin.protalcommands.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ColorParser {
public static String parse(String text) {
text = parseHexColor(text);
return parseColor(text);
}
public static String parseColor(final String text) {
return text.replaceAll("&", "§").replace("§§", "&");
}
public static String parseHexColor(String text) {
Pattern pattern = Pattern.compile("&\\((&?#[0-9a-fA-F]{6})\\)");
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String hexColor = text.substring(matcher.start() + 2, matcher.end() - 1);
hexColor = hexColor.replace("&", "");
StringBuilder bukkitColorCode = new StringBuilder('§' + "x");
for (int i = 1; i < hexColor.length(); i++) {
bukkitColorCode.append('§').append(hexColor.charAt(i));
}
text = text.replaceAll("&\\(" + hexColor + "\\)", bukkitColorCode.toString().toLowerCase());
matcher.reset(text);
}
return text;
}
}
@@ -0,0 +1,74 @@
package cc.carm.plugin.protalcommands.util;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.*;
public class MessageUtil {
public static boolean hasPlaceholderAPI() {
return Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null;
}
public static void send(CommandSender sender, List<String> messages) {
for (String s : messages) {
sender.sendMessage(ColorParser.parse(s));
}
}
public static void send(CommandSender sender, String... messages) {
send(sender, Arrays.asList(messages));
}
public static void sendWithPlaceholders(CommandSender sender, String... messages) {
sendWithPlaceholders(sender, Arrays.asList(messages));
}
public static void sendWithPlaceholders(CommandSender sender, List<String> messages) {
if (messages == null || messages.isEmpty()) return;
if (hasPlaceholderAPI() && sender instanceof Player) {
send(sender, PlaceholderAPI.setPlaceholders((Player) sender, messages));
} else {
send(sender, messages);
}
}
public static void sendWithPlaceholders(CommandSender sender, List<String> messages, String param, Object value) {
sendWithPlaceholders(sender, messages, new String[]{param}, new Object[]{value});
}
public static void sendWithPlaceholders(CommandSender sender, List<String> messages, String[] params, Object[] values) {
sendWithPlaceholders(sender, setCustomParams(messages, params, values));
}
public static List<String> setCustomParams(List<String> messages, String param, Object value) {
return setCustomParams(messages, new String[]{param}, new Object[]{value});
}
public static List<String> setCustomParams(List<String> messages, String[] params, Object[] values) {
if (params.length != values.length) return messages;
HashMap<String, Object> paramsMap = new HashMap<>();
for (int i = 0; i < params.length; i++) {
paramsMap.put(params[i], values[i]);
}
return setCustomParams(messages, paramsMap);
}
public static List<String> setCustomParams(List<String> messages, HashMap<String, Object> params) {
List<String> list = new ArrayList<>();
for (String message : messages) {
String afterMessage = message;
for (Map.Entry<String, Object> entry : params.entrySet()) {
afterMessage = afterMessage.replace(entry.getKey(), entry.getValue().toString());
}
list.add(afterMessage);
}
return list;
}
}
+5
View File
@@ -0,0 +1,5 @@
version: ${project.version}
commands:
- "/say Hello I'm %player_name%"
- "如果不加斜杠,则会让玩家以文本形式发送出来。"
+9
View File
@@ -0,0 +1,9 @@
main: cc.carm.plugin.protalcommands.Main
name: ${project.name}
version: ${project.version}
author: CarmJos
website: ${project.url}
description: ${project.description}
softdepend:
- PlaceholderAPI