MiaoBoard/src/main/java/pw/yumc/MiaoBoard/misc/Replace.java

152 lines
5.7 KiB
Java

package pw.yumc.MiaoBoard.misc;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.entity.Player;
import cn.citycraft.PluginHelper.kit.StrKit;
import cn.citycraft.PluginHelper.pluginapi.PluginAPI;
import pw.yumc.YumCore.bukkit.P;
import pw.yumc.YumCore.bukkit.compatible.C;
public class Replace {
public static String $(final Player p, final String text) {
return s(p(p, text));
}
private static String p(final Player p, final String text) {
return SimpleRelpace.$(p, PluginAPI.PlaceholderAPI(p, text));
}
private static String s(final String text) {
return StrKit.substring(text, 0, 38);
}
static class SimpleRelpace {
private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("[%]([^%]+)[%]");
private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final String EMPTY = "";
public static String $(final Player player, String text) {
final Matcher m = PLACEHOLDER_PATTERN.matcher(text);
while (m.find()) {
final String format = m.group(1);
if (format.contains("_")) {
final String[] ka = format.split("_", 2);
String value = format;
switch (ka[0]) {
case "player":
value = player(player, ka[1]);
break;
case "server":
value = server(player, ka[1]);
break;
case "plugin":
value = plugin(player, ka[1]);
break;
case "time":
value = time(player, ka[1]);
break;
}
text = text.replace("%" + format + "%", Matcher.quoteReplacement(value));
}
}
return text;
}
private static String player(final Player player, final String key) {
switch (key) {
case "x":
return String.valueOf(player.getLocation().getBlockX());
case "y":
return String.valueOf(player.getLocation().getBlockY());
case "z":
return String.valueOf(player.getLocation().getBlockZ());
case "yaw":
return String.valueOf(Math.round(player.getLocation().getYaw() * 100) / 100);
case "pitch":
return String.valueOf(Math.round(player.getLocation().getPitch() * 100) / 100);
case "world":
return player.getWorld().getName();
case "name":
return player.getName();
case "displayname":
return player.getDisplayName();
case "health":
return String.valueOf(player.getHealth());
case "max_health":
return String.valueOf(player.getMaxHealth());
default:
return EMPTY;
}
}
private static String plugin(final Player player, final String key) {
switch (key) {
case "version":
return P.getDescription().getVersion();
case "name":
return P.getName();
case "author":
return Arrays.toString(P.getDescription().getAuthors().toArray());
default:
return EMPTY;
}
}
private static String server(final Player player, final String key) {
final Runtime runtime = Runtime.getRuntime();
switch (key) {
case "online":
return String.valueOf(C.Player.getOnlinePlayers().size());
case "ram_used":
return String.valueOf((runtime.totalMemory() - runtime.freeMemory()) / 1048576L);
case "ram_free":
return String.valueOf(runtime.freeMemory() / 1048576L);
case "ram_total":
return String.valueOf(runtime.totalMemory() / 1048576L);
case "ram_max":
return String.valueOf(runtime.maxMemory() / 1048576L);
default:
return EMPTY;
}
}
private static String time(final Player player, final String key) {
final Date date = new Date();
if (key.startsWith("left") && key.contains("_")) {
final String time = key.split("_")[1].replace("`", " ");
String value = "解析错误";
try {
final long left = df.parse(time).getTime() - System.currentTimeMillis();
value = String.valueOf(left / 1000);
} catch (final ParseException e) {
}
return value;
}
switch (key) {
case "now":
return df.format(date);
case "year":
return String.valueOf(date.getYear() + 1900);
case "month":
return String.valueOf(date.getMonth() + 1);
case "day":
return String.valueOf(date.getDate());
case "hour":
return String.valueOf(date.getHours() + 1);
case "minute":
return String.valueOf(date.getMinutes());
case "second":
return String.valueOf(date.getSeconds());
}
return EMPTY;
}
}
}