版本更新至:3.81
新增:TagManager 工具,用于更改玩家头顶称号,并兼容其他计分板插件。 修复:Language2 工具的 [json] 类型 ”url“ 参数失效。
This commit is contained in:
parent
325ffe8906
commit
f9a405a5ca
@ -6,7 +6,7 @@ website: http://www.15imc.com/index.html
|
|||||||
|
|
||||||
main: me.skymc.taboolib.Main
|
main: me.skymc.taboolib.Main
|
||||||
|
|
||||||
version: 3.8
|
version: 3.81
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
taboolib:
|
taboolib:
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
package me.skymc.taboolib.listener;
|
package me.skymc.taboolib.listener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.server.PluginDisableEvent;
|
import org.bukkit.event.server.PluginDisableEvent;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
|
import me.skymc.taboolib.Main;
|
||||||
import me.skymc.taboolib.message.MsgUtils;
|
import me.skymc.taboolib.message.MsgUtils;
|
||||||
import me.skymc.taboolib.mysql.MysqlUtils;
|
import me.skymc.taboolib.mysql.MysqlUtils;
|
||||||
import me.skymc.taboolib.mysql.protect.MySQLConnection;
|
import me.skymc.taboolib.mysql.protect.MySQLConnection;
|
||||||
@ -13,20 +19,42 @@ public class ListenerPluginDisable implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void disable(PluginDisableEvent e) {
|
public void disable(PluginDisableEvent e) {
|
||||||
int i = 0;
|
|
||||||
for (MySQLConnection conn : MysqlUtils.CONNECTIONS) {
|
|
||||||
if (conn.getPlugin().equals(e.getPlugin())) {
|
|
||||||
MysqlUtils.CONNECTIONS.remove(conn);
|
|
||||||
conn.closeConnection();
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i > 0) {
|
|
||||||
MsgUtils.send("已停止插件 &f" + e.getPlugin().getName() + "&7 的 &f" + i + "&7 条数据库连接");
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注销时间周期
|
// 注销时间周期
|
||||||
TimeCycleManager.cancel(e.getPlugin());
|
TimeCycleManager.cancel(e.getPlugin());
|
||||||
}
|
|
||||||
|
|
||||||
|
// 获取连接
|
||||||
|
List<MySQLConnection> conns = new ArrayList<>();
|
||||||
|
for (MySQLConnection conn : MysqlUtils.CONNECTIONS) {
|
||||||
|
if (conn.getPlugin().equals(e.getPlugin())) {
|
||||||
|
conns.add(conn);
|
||||||
|
MysqlUtils.CONNECTIONS.remove(conn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 异步注销
|
||||||
|
BukkitRunnable runnable = new BukkitRunnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
int i = 0;
|
||||||
|
for (MySQLConnection conn : conns) {
|
||||||
|
conn.setFallReconnection(false);
|
||||||
|
conn.closeConnection();
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (i > 0) {
|
||||||
|
MsgUtils.send("已停止插件 &f" + e.getPlugin().getName() + "&7 的 &f" + i + "&7 条数据库连接");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 如果插件关闭
|
||||||
|
try {
|
||||||
|
runnable.runTaskLater(Main.getInst(), 40);
|
||||||
|
}
|
||||||
|
catch (Exception err) {
|
||||||
|
MsgUtils.warn("异步任务失败, 执行方式改为同步执行");
|
||||||
|
runnable.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import ch.njol.skript.lang.Expression;
|
|||||||
import ch.njol.skript.lang.SkriptParser.ParseResult;
|
import ch.njol.skript.lang.SkriptParser.ParseResult;
|
||||||
import ch.njol.skript.lang.util.SimpleExpression;
|
import ch.njol.skript.lang.util.SimpleExpression;
|
||||||
import ch.njol.util.Kleenean;
|
import ch.njol.util.Kleenean;
|
||||||
|
import me.skymc.taboocode.TabooCodeItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author sky
|
* @author sky
|
||||||
@ -17,8 +18,6 @@ import ch.njol.util.Kleenean;
|
|||||||
public class ExpressionTabooCodeItem extends SimpleExpression<ItemStack> {
|
public class ExpressionTabooCodeItem extends SimpleExpression<ItemStack> {
|
||||||
|
|
||||||
private Expression<String> name;
|
private Expression<String> name;
|
||||||
private Class<?> tabooCodeItem;
|
|
||||||
private Method getItem;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<? extends ItemStack> getReturnType() {
|
public Class<? extends ItemStack> getReturnType() {
|
||||||
@ -34,13 +33,6 @@ public class ExpressionTabooCodeItem extends SimpleExpression<ItemStack> {
|
|||||||
@Override
|
@Override
|
||||||
public boolean init(Expression<?>[] args, int arg1, Kleenean arg2, ParseResult arg3) {
|
public boolean init(Expression<?>[] args, int arg1, Kleenean arg2, ParseResult arg3) {
|
||||||
name = (Expression<String>) args[0];
|
name = (Expression<String>) args[0];
|
||||||
try {
|
|
||||||
tabooCodeItem = Class.forName("me.skymc.taboocode.TabooCodeItem");
|
|
||||||
getItem = tabooCodeItem.getMethod("getItem", String.class, Boolean.class);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
//
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,7 +44,7 @@ public class ExpressionTabooCodeItem extends SimpleExpression<ItemStack> {
|
|||||||
@Override
|
@Override
|
||||||
protected ItemStack[] get(Event e) {
|
protected ItemStack[] get(Event e) {
|
||||||
try {
|
try {
|
||||||
ItemStack item = (ItemStack) getItem.invoke(null, name.getSingle(e), false);
|
ItemStack item = TabooCodeItem.getItem(name.getSingle(e), false);
|
||||||
return new ItemStack[] { item == null ? null : item.clone() };
|
return new ItemStack[] { item == null ? null : item.clone() };
|
||||||
}
|
}
|
||||||
catch (Exception err) {
|
catch (Exception err) {
|
||||||
|
@ -88,7 +88,7 @@ public class Language2Json implements Language2Line {
|
|||||||
}
|
}
|
||||||
// 打开连接
|
// 打开连接
|
||||||
else if (message.startsWith(KEY_URL)) {
|
else if (message.startsWith(KEY_URL)) {
|
||||||
clickEvent = new OpenUrlEvent(message.substring(KEY_SUGGEST.length()));
|
clickEvent = new OpenUrlEvent(message.substring(KEY_URL.length()));
|
||||||
}
|
}
|
||||||
// 换行
|
// 换行
|
||||||
else if (message.equals("[break]")) {
|
else if (message.equals("[break]")) {
|
||||||
|
187
src/main/java/me/skymc/taboolib/team/TagManager.java
Normal file
187
src/main/java/me/skymc/taboolib/team/TagManager.java
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
package me.skymc.taboolib.team;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.scoreboard.Scoreboard;
|
||||||
|
import org.bukkit.scoreboard.Team;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import me.skymc.taboolib.Main;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author sky
|
||||||
|
* @since 2018-03-17 21:43:49
|
||||||
|
*/
|
||||||
|
public class TagManager implements Listener {
|
||||||
|
|
||||||
|
private static TagManager inst;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private HashMap<String, PlayerData> playerdata = new HashMap<>();
|
||||||
|
|
||||||
|
private TagManager() {
|
||||||
|
Bukkit.getPluginManager().registerEvents(this, Main.getInst());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TagManager getInst() {
|
||||||
|
synchronized (TagManager.class) {
|
||||||
|
if (inst == null) {
|
||||||
|
inst = new TagManager();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置玩家前缀
|
||||||
|
*
|
||||||
|
* @param player 名称
|
||||||
|
* @param prefix 前缀
|
||||||
|
*/
|
||||||
|
public void setPrefix(Player player, String prefix) {
|
||||||
|
getPlayerData(player).setPrefix(prefix);
|
||||||
|
uploadData(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置玩家后缀
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
* @param suffix 后缀
|
||||||
|
*/
|
||||||
|
public void setSuffix(Player player, String suffix) {
|
||||||
|
getPlayerData(player).setSuffix(suffix);
|
||||||
|
uploadData(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取玩家前缀
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getPrefix(Player player) {
|
||||||
|
return getPlayerData(player).getPrefix();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取玩家后缀
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public String getSuffix(Player player) {
|
||||||
|
return getPlayerData(player).getSuffix();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取玩家数据
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
* @return {@link PlayerData}
|
||||||
|
*/
|
||||||
|
private PlayerData getPlayerData(Player player) {
|
||||||
|
PlayerData data = playerdata.get(player.getName());
|
||||||
|
if (data == null) {
|
||||||
|
data = new PlayerData(player.getName());
|
||||||
|
playerdata.put(player.getName(), data);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将该玩家的数据向服务器所有玩家更新
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
*/
|
||||||
|
public void uploadData(Player player) {
|
||||||
|
PlayerData data = getPlayerData(player);
|
||||||
|
String prefix = data.getPrefix().length() > 16 ? data.getPrefix().substring(0, 16) : data.getPrefix();
|
||||||
|
String suffix = data.getSuffix().length() > 16 ? data.getSuffix().substring(0, 16) : data.getSuffix();
|
||||||
|
// 如果没有称号数据
|
||||||
|
if (prefix.isEmpty() && suffix.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player _player : Bukkit.getOnlinePlayers()) {
|
||||||
|
Scoreboard scoreboard = _player.getScoreboard();
|
||||||
|
if (scoreboard == null) {
|
||||||
|
_player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
|
||||||
|
}
|
||||||
|
Team team = scoreboard.getTeam(player.getName());
|
||||||
|
if (team == null) {
|
||||||
|
team = scoreboard.registerNewTeam(player.getName());
|
||||||
|
team.addEntry(player.getName());
|
||||||
|
}
|
||||||
|
team.setPrefix(prefix);
|
||||||
|
team.setSuffix(suffix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载服务器内的称号数据到该玩家
|
||||||
|
*
|
||||||
|
* @param player 玩家
|
||||||
|
*/
|
||||||
|
public void downloadData(Player player) {
|
||||||
|
Scoreboard scoreboard = player.getScoreboard();
|
||||||
|
if (scoreboard == null) {
|
||||||
|
player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player _player : Bukkit.getOnlinePlayers()) {
|
||||||
|
PlayerData data = getPlayerData(_player);
|
||||||
|
String prefix = data.getPrefix().length() > 16 ? data.getPrefix().substring(0, 16) : data.getPrefix();
|
||||||
|
String suffix = data.getSuffix().length() > 16 ? data.getSuffix().substring(0, 16) : data.getSuffix();
|
||||||
|
// 如果没有称号数据
|
||||||
|
if (prefix.isEmpty() && suffix.isEmpty()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Team team = scoreboard.getTeam(_player.getName());
|
||||||
|
if (team == null) {
|
||||||
|
team = scoreboard.registerNewTeam(_player.getName());
|
||||||
|
team.addEntry(_player.getName());
|
||||||
|
}
|
||||||
|
team.setPrefix(prefix);
|
||||||
|
team.setSuffix(suffix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
|
downloadData(e.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onQuit(PlayerQuitEvent e) {
|
||||||
|
playerdata.remove(e.getPlayer().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
static class PlayerData {
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private String prefix;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
private String suffix;
|
||||||
|
|
||||||
|
public PlayerData(String name) {
|
||||||
|
this.name = name;
|
||||||
|
this.prefix = "";
|
||||||
|
this.suffix = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -9,90 +9,127 @@ import org.bukkit.scoreboard.Team;
|
|||||||
import me.skymc.taboolib.message.MsgUtils;
|
import me.skymc.taboolib.message.MsgUtils;
|
||||||
import me.skymc.taboolib.methods.MethodsUtils;
|
import me.skymc.taboolib.methods.MethodsUtils;
|
||||||
|
|
||||||
@Deprecated
|
/**
|
||||||
|
* @author sky
|
||||||
|
* @since 2018-03-17 21:36:52
|
||||||
|
*/
|
||||||
public class TagUtils {
|
public class TagUtils {
|
||||||
|
|
||||||
public static void setTag(Player p, String prefix, String suffix) throws Exception {
|
/**
|
||||||
|
* 设置玩家前后缀
|
||||||
|
*
|
||||||
|
* @param p 玩家
|
||||||
|
* @param prefix 前缀
|
||||||
|
* @param suffix 后缀
|
||||||
|
*/
|
||||||
|
public static void setTag(Player p, String prefix, String suffix) {
|
||||||
|
// 判断长度
|
||||||
|
if (prefix.length() > 16) {
|
||||||
|
prefix = prefix.substring(0, 16);
|
||||||
|
}
|
||||||
if (suffix.length() > 16) {
|
if (suffix.length() > 16) {
|
||||||
suffix = suffix.substring(0, 16);
|
suffix = suffix.substring(0, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取计分板
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
Team t = board.getTeam(p.getName());
|
Team t = board.getTeam(p.getName());
|
||||||
if (t == null)
|
if (t == null) {
|
||||||
{
|
|
||||||
t = board.registerNewTeam(p.getName());
|
t = board.registerNewTeam(p.getName());
|
||||||
t.setPrefix(prefix);
|
}
|
||||||
t.setSuffix(suffix);
|
|
||||||
t.addPlayer(p);
|
|
||||||
|
|
||||||
}
|
// 更新称号
|
||||||
else
|
t.setPrefix(prefix);
|
||||||
{
|
t.setSuffix(suffix);
|
||||||
t = board.getTeam(p.getName());
|
t.addEntry(p.getName());
|
||||||
t.setPrefix(prefix);
|
|
||||||
t.setSuffix(suffix);
|
// 更新玩家
|
||||||
t.addPlayer(p);
|
|
||||||
}
|
|
||||||
for (Player o : Bukkit.getOnlinePlayers()) {
|
for (Player o : Bukkit.getOnlinePlayers()) {
|
||||||
o.setScoreboard(board);
|
if (!board.equals(o.getScoreboard())) {
|
||||||
}
|
o.setScoreboard(board);
|
||||||
}
|
|
||||||
|
|
||||||
public static void unregisterTag(Player p) throws Exception
|
|
||||||
{
|
|
||||||
Bukkit.getScoreboardManager().getMainScoreboard().getPlayerTeam(p).unregister();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void delete() {
|
|
||||||
try {
|
|
||||||
for (Team t : Bukkit.getScoreboardManager().getMainScoreboard().getTeams()) {
|
|
||||||
t.unregister();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
}
|
||||||
// TODO: handle exception
|
|
||||||
|
/**
|
||||||
|
* 注销玩家前后缀
|
||||||
|
*
|
||||||
|
* @param p 玩家
|
||||||
|
*/
|
||||||
|
public static void unregisterTag(Player p) {
|
||||||
|
Team team = Bukkit.getScoreboardManager().getMainScoreboard().getTeam(p.getName());
|
||||||
|
if (team != null) {
|
||||||
|
team.unregister();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unregisterAll() throws Exception
|
/**
|
||||||
{
|
* 注销所有在线玩家前后缀
|
||||||
|
*/
|
||||||
|
public static void unregisterAll() {
|
||||||
for (Player o : Bukkit.getOnlinePlayers()) {
|
for (Player o : Bukkit.getOnlinePlayers()) {
|
||||||
unregisterTag(o);
|
unregisterTag(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void registerAll(String prefix, String suffix) throws Exception
|
/**
|
||||||
{
|
* 删除所有前后缀
|
||||||
for (Player o : Bukkit.getOnlinePlayers()) {
|
*/
|
||||||
setTag(o, prefix, " " + suffix);
|
public static void delete() {
|
||||||
|
for (Team t : Bukkit.getScoreboardManager().getMainScoreboard().getTeams()) {
|
||||||
|
t.unregister();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void refresh()
|
/**
|
||||||
{
|
* 设置全服玩家前后缀
|
||||||
|
*
|
||||||
|
* @param prefix 前缀
|
||||||
|
* @param suffix 后缀
|
||||||
|
*/
|
||||||
|
public static void registerAll(String prefix, String suffix) {
|
||||||
|
for (Player o : Bukkit.getOnlinePlayers()) {
|
||||||
|
setTag(o, prefix, suffix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 刷新计分板数据
|
||||||
|
*/
|
||||||
|
public static void refresh() {
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
for (Player o : Bukkit.getOnlinePlayers()) {
|
for (Player o : Bukkit.getOnlinePlayers()) {
|
||||||
o.setScoreboard(board);
|
o.setScoreboard(board);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPrefix(Player p) throws Exception
|
/**
|
||||||
{
|
* 获取玩家前缀
|
||||||
|
*
|
||||||
|
* @param p 玩家
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String getPrefix(Player p) {
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
Team t = board.getTeam(p.getName());
|
Team t = board.getTeam(p.getName());
|
||||||
if ((t != null) && (board.getPlayerTeam(p).getPrefix() != null) && (!board.getPlayerTeam(p).getPrefix().isEmpty())) {
|
if (t != null) {
|
||||||
return board.getPlayerTeam(p).getPrefix();
|
return t.getPrefix();
|
||||||
}
|
}
|
||||||
return "";
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getSuffix(Player p) throws Exception
|
/**
|
||||||
{
|
* 获取玩玩家后缀
|
||||||
|
*
|
||||||
|
* @param p 玩家
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
public static String getSuffix(Player p) {
|
||||||
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
Scoreboard board = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||||
Team t = board.getTeam(p.getName());
|
Team t = board.getTeam(p.getName());
|
||||||
if ((t != null) && (board.getPlayerTeam(p).getSuffix() != null) && (!board.getPlayerTeam(p).getSuffix().isEmpty())) {
|
if (t != null) {
|
||||||
return board.getPlayerTeam(p).getSuffix();
|
return t.getSuffix();
|
||||||
}
|
}
|
||||||
return "";
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user