This commit is contained in:
坏黑 2018-05-07 18:19:02 +08:00
parent 2242720ded
commit c5583cc1d1
25 changed files with 581 additions and 471 deletions

View File

@ -114,7 +114,7 @@ public class Main extends JavaPlugin implements Listener {
}
public static Random getRandom() {
return NumberUtils.getRand();
return NumberUtils.getRandom();
}
public static String getTablePrefix() {

View File

@ -18,7 +18,7 @@ public class MainCommands implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length == 0 || args[0].equalsIgnoreCase("help")) {
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.HELP");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.HELP", label);
} else if (args[0].equalsIgnoreCase("save")) {
new SaveCommand(sender, args);
} else if (args[0].equalsIgnoreCase("enchants")) {

View File

@ -1,5 +1,8 @@
package me.skymc.taboolib.commands.language;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.string.language2.Language2Value;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.command.Command;
@ -7,74 +10,63 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.message.MsgUtils;
import me.skymc.taboolib.string.language2.Language2Value;
/**
* @author sky
* @since 2018年2月13日 下午5:11:01
*/
public class Language2Command implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length == 0) {
sender.sendMessage("§f");
sender.sendMessage("§b§l----- §3§lLanguage2 Commands §b§l-----");
sender.sendMessage("§f");
sender.sendMessage("§f /language2 send §8[§7玩家/ALL§8] §8[§7语言§8] §8<§7变量§8> §6- §e发送语言提示");
sender.sendMessage("§f /language2 reload §6- §e重载语言库");
sender.sendMessage("§f");
}
else if (args[0].equalsIgnoreCase("reload")) {
MsgUtils.send(sender, "§7重载中..");
long time = System.currentTimeMillis();
Main.getExampleLanguage2().reload();
MsgUtils.send(sender, "§7重载完成! 耗时: &f" + (System.currentTimeMillis() - time) + "ms");
}
else if (args[0].equalsIgnoreCase("send")) {
if (args.length < 3) {
MsgUtils.send(sender, "§4参数错误");
}
else {
// 时间
long time = System.currentTimeMillis();
// 获取语言文件
Language2Value value = Main.getExampleLanguage2().get(args[2]);
// 如果有变量参数
if (args.length > 3) {
int i = 0;
for (String variable : args[3].split("\\|")) {
value.addPlaceholder("$" + i, variable);
i++;
}
}
// 如果是公告
if (args[1].equals("ALL")) {
// 发送信息
value.broadcast();
}
else {
// 获取玩家
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
MsgUtils.send(sender, "§4玩家不在线");
}
else {
// 发送信息
value.send(player);
}
}
// 如果发送者是玩家
if (sender instanceof Player && ((Player) sender).getItemInHand().getType().equals(Material.COMMAND)) {
MsgUtils.send(sender, "§7信息已发送, 本次计算耗时: &f" + (System.currentTimeMillis() - time) + "ms");
}
}
}
return true;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (args.length == 0) {
TLocale.sendTo(sender, "COMMANDS.LANGUAGE2.HELP", label);
} else if (args[0].equalsIgnoreCase("reload")) {
reload(sender);
} else if (args[0].equalsIgnoreCase("send")) {
send(sender, args);
}
return true;
}
private void send(CommandSender sender, String[] args) {
if (args.length < 3) {
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
} else {
long time = System.currentTimeMillis();
Language2Value value = getLanguage2Value(args);
if (args[1].equalsIgnoreCase("ALL")) {
value.broadcast();
} else {
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
TLocale.sendTo(sender, "COMMANDS.LANGUAGE2.INVALID-PLAYER", args[1]);
} else {
value.send(player);
}
}
if (sender instanceof Player && ((Player) sender).getItemInHand().getType().equals(Material.COMMAND)) {
TLocale.sendTo(sender, "COMMANDS.LANGUAGE2.SUCCESS-SEND", String.valueOf(System.currentTimeMillis() - time));
}
}
}
private Language2Value getLanguage2Value(String[] args) {
Language2Value value = Main.getExampleLanguage2().get(args[2]);
if (args.length > 3) {
int i = 0;
for (String variable : args[3].split("\\|")) {
value.addPlaceholder("$" + i++, variable);
}
}
return value;
}
private void reload(CommandSender sender) {
TLocale.sendTo(sender, "COMMANDS.RELOAD.LOADING");
long time = System.currentTimeMillis();
Main.getExampleLanguage2().reload();
TLocale.sendTo(sender, "COMMANDS.RELOAD.SUCCESS-ELAPSED-TIME", String.valueOf(System.currentTimeMillis() - time));
}
}

View File

@ -21,35 +21,31 @@ public class TabooLibLocaleCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command arg1, String label, String[] args) {
if (args.length == 0) {
sender.sendMessage("§f");
sender.sendMessage("§b§l----- §3§lTabooLibLoacle Commands §b§l-----");
sender.sendMessage("§f");
sender.sendMessage("§f /tloacle send §8[§7玩家/ALL§8] §8[§7语言§8] §8<§7变量§8> §6- §e发送语言提示");
sender.sendMessage("§f /tloacle reload §6- §e重载语言库");
sender.sendMessage("§f");
TLocale.sendTo(sender, "COMMANDS.TLOCALE.HELP", label);
} else if (args[0].equalsIgnoreCase("send")) {
send(sender, args);
} else if (args[0].equalsIgnoreCase("reload")) {
reload(sender);
} else {
MsgUtils.send(sender, "§4参数错误");
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
}
return true;
}
void send(CommandSender sender, String[] args) {
if (args.length < 3) {
MsgUtils.send(sender, "§4参数错误");
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
long time = System.currentTimeMillis();
List<Player> target = new ArrayList<>();
if (args[1].equalsIgnoreCase("all")) {
target.addAll(Bukkit.getOnlinePlayers());
} else {
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
MsgUtils.send(sender, "§4玩家不在线");
TLocale.sendTo(sender, "COMMANDS.TLOCALE.INVALID-PLAYER", args[1]);
return;
}
target.add(player);
@ -64,13 +60,13 @@ public class TabooLibLocaleCommand implements CommandExecutor {
}
if (sender instanceof Player) {
MsgUtils.send(sender, "§7信息已发送");
TLocale.sendTo(sender, "COMMANDS.TLOCALE.SUCCESS-SEND", String.valueOf(System.currentTimeMillis() - time));
}
}
void reload(CommandSender sender) {
TLocale.reload();
MsgUtils.send(sender, "§7重载完成");
TLocale.sendTo(sender, "COMMANDS.TLOCALE.SUCCESS-RELOAD");
}
}

View File

@ -1,12 +1,12 @@
package me.skymc.taboolib.commands.sub;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.commands.SubCommand;
import me.skymc.taboolib.message.MsgUtils;
import me.skymc.taboolib.team.TagManager;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @author sky
@ -14,27 +14,23 @@ import me.skymc.taboolib.team.TagManager;
*/
public class TagDeleteCommand extends SubCommand {
/**
* @param sender
* @param args
*/
public TagDeleteCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 2) {
MsgUtils.send(sender, "参数错误");
return;
}
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
MsgUtils.send(sender, "玩家 &f" + args[1] + " &7不在线");
return;
}
TagManager.getInst().removeData(player);
if (sender instanceof Player) {
MsgUtils.send(sender, "删除玩家 &f" + args[1] + " &7的称号数据");
}
}
public TagDeleteCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 2) {
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.PLAYERTAG.INVALID-PLAYER", args[1]);
return;
}
TagManager.getInst().removeData(player);
if (sender instanceof Player) {
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.PLAYERTAG.SUCCESS-DELETE", args[1]);
}
}
}

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.commands.sub;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -15,20 +16,16 @@ import me.skymc.taboolib.team.TagManager;
*/
public class TagPrefixCommand extends SubCommand {
/**
* @param sender
* @param args
*/
public TagPrefixCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 3) {
MsgUtils.send(sender, "参数错误");
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
MsgUtils.send(sender, "玩家 &f" + args[1] + " &7不在线");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.PLAYERTAG.INVALID-PLAYER", args[1]);
return;
}
@ -39,7 +36,7 @@ public class TagPrefixCommand extends SubCommand {
TagManager.getInst().setPrefix(player, value);
if (sender instanceof Player) {
MsgUtils.send(sender, "设置玩家 &f" + args[1] + " &7的前缀为 &f" + value);
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.PLAYERTAG.SUCCESS-PREFIX-SET", args[1], value);
}
}

View File

@ -1,13 +1,13 @@
package me.skymc.taboolib.commands.sub;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.ilummc.tlib.resources.TLocale;
import me.clip.placeholderapi.PlaceholderAPI;
import me.skymc.taboolib.commands.SubCommand;
import me.skymc.taboolib.message.MsgUtils;
import me.skymc.taboolib.team.TagManager;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
* @author sky
@ -15,32 +15,28 @@ import me.skymc.taboolib.team.TagManager;
*/
public class TagSuffixCommand extends SubCommand {
/**
* @param sender
* @param args
*/
public TagSuffixCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 3) {
MsgUtils.send(sender, "参数错误");
return;
}
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
MsgUtils.send(sender, "玩家 &f" + args[1] + " &7不在线");
return;
}
String value = getArgs(2).replace("&", "§");
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
value = PlaceholderAPI.setPlaceholders(player, value);
}
TagManager.getInst().setSuffix(player, value);
if (sender instanceof Player) {
MsgUtils.send(sender, "设置玩家 &f" + args[1] + " &7的后缀为 &f" + value);
}
}
public TagSuffixCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 3) {
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
Player player = Bukkit.getPlayerExact(args[1]);
if (player == null) {
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.PLAYERTAG.INVALID-PLAYER", args[1]);
return;
}
String value = getArgs(2).replace("&", "§");
if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
value = PlaceholderAPI.setPlaceholders(player, value);
}
TagManager.getInst().setSuffix(player, value);
if (sender instanceof Player) {
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.PLAYERTAG.SUCCESS-SUFFIX-SET", args[1], value);
}
}
}

View File

@ -2,6 +2,7 @@ package me.skymc.taboolib.commands.sub.cycle;
import java.util.concurrent.TimeUnit;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.command.CommandSender;
import me.skymc.taboolib.commands.SubCommand;
@ -15,25 +16,21 @@ public class CycleInfoCommand extends SubCommand {
public CycleInfoCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 3) {
MsgUtils.send(sender, "&c请输入正确的检查器名称");
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
TimeCycle cycle = TimeCycleManager.getTimeCycle(args[2]);
if (cycle == null) {
MsgUtils.send(sender, "&c检查器 &4" + args[2] + " &c不存在");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.INVALID-CYCLE", args[2]);
return;
}
sender.sendMessage("§f");
sender.sendMessage("§b§l----- §3§lTimeCycle Info §b§l-----");
sender.sendMessage("§f");
sender.sendMessage(" §f- §7注册周期: §f" + asString(cycle.getCycle() / 1000L));
sender.sendMessage(" §f- §7注册插件: §f" + cycle.getPlugin().getName());
sender.sendMessage("§f");
sender.sendMessage(" §f- §7上次刷新时间: §f" + DateUtils.CH_ALL.format(TimeCycleManager.getBeforeTimeline(cycle.getName())));
sender.sendMessage(" §f- §7下次刷新时间: §f" + DateUtils.CH_ALL.format(TimeCycleManager.getAfterTimeline(cycle.getName())));
sender.sendMessage("§f");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.CYCLE-INFO",
asString(cycle.getCycle() / 1000L),
cycle.getPlugin().getName(),
DateUtils.CH_ALL.format(TimeCycleManager.getBeforeTimeline(cycle.getName())),
DateUtils.CH_ALL.format(TimeCycleManager.getAfterTimeline(cycle.getName())));
}
public String asString(long seconds) {
@ -48,5 +45,4 @@ public class CycleInfoCommand extends SubCommand {
public boolean command() {
return true;
}
}

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.commands.sub.cycle;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -9,29 +10,20 @@ import me.skymc.taboolib.jsonformatter.click.SuggestCommandEvent;
import me.skymc.taboolib.jsonformatter.hover.ShowTextEvent;
import me.skymc.taboolib.timecycle.TimeCycle;
import me.skymc.taboolib.timecycle.TimeCycleManager;
import org.bukkit.inventory.ItemFlag;
import java.util.Arrays;
public class CycleListCommand extends SubCommand {
public CycleListCommand(CommandSender sender, String[] args) {
super(sender, args);
sender.sendMessage("§f");
sender.sendMessage("§b§l----- §3§lTimeCycle List §b§l-----");
sender.sendMessage("§f");
for (TimeCycle cycle : TimeCycleManager.getTimeCycles()) {
if (isPlayer()) {
JSONFormatter json = new JSONFormatter();
json.append(" §7- §f" + cycle.getName());
json.appendHoverClick(" §8(点击复制)", new ShowTextEvent("§f点击复制"), new SuggestCommandEvent(cycle.getName()));
json.send((Player) sender);
}
else {
sender.sendMessage(" §7- §f" + cycle.getName());
}
}
sender.sendMessage("§f");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.LIST.HEAD");
TimeCycleManager.getTimeCycles().forEach(cycle -> TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.LIST.BODY", cycle.getName()));
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.LIST.FOOT");
}
@Override

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.commands.sub.cycle;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
@ -18,13 +19,13 @@ public class CycleResetCommand extends SubCommand {
public CycleResetCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 3) {
MsgUtils.send(sender, "&c请输入正确的检查器名称");
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
TimeCycle cycle = TimeCycleManager.getTimeCycle(args[2]);
if (cycle == null) {
MsgUtils.send(sender, "&c检查器 &4" + args[2] + " &c不存在");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.INVALID-CYCLE", args[2]);
return;
}
@ -38,7 +39,7 @@ public class CycleResetCommand extends SubCommand {
// 触发器
Bukkit.getPluginManager().callEvent(new TimeCycleEvent(cycle));
// 提示
MsgUtils.send(sender, "检查器 &f" + args[2] + " &7初始化完成");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.CYCLE-RESET", args[2]);
}
}.runTaskAsynchronously(Main.getInst());
}

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.commands.sub.cycle;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable;
@ -17,13 +18,13 @@ public class CycleUpdateCommand extends SubCommand {
public CycleUpdateCommand(CommandSender sender, String[] args) {
super(sender, args);
if (args.length < 3) {
MsgUtils.send(sender, "&c请输入正确的检查器名称");
TLocale.sendTo(sender, "COMMANDS.PARAMETER.UNKNOWN");
return;
}
TimeCycle cycle = TimeCycleManager.getTimeCycle(args[2]);
if (cycle == null) {
MsgUtils.send(sender, "&c检查器 &4" + args[2] + " &c不存在");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.INVALID-CYCLE", args[2]);
return;
}
@ -36,7 +37,7 @@ public class CycleUpdateCommand extends SubCommand {
// 触发器
Bukkit.getPluginManager().callEvent(new TimeCycleEvent(cycle));
// 提示
MsgUtils.send(sender, "检查器 &f" + args[2] + " &7已更新");
TLocale.sendTo(sender, "COMMANDS.TABOOLIB.TIMECYCLE.CYCLE-UPDATE", args[2]);
}
}.runTaskAsynchronously(Main.getInst());
}

View File

@ -1,55 +1,47 @@
package me.skymc.taboolib.cooldown;
import java.util.concurrent.ConcurrentHashMap;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.plugin.Plugin;
import me.skymc.taboolib.message.MsgUtils;
import java.util.concurrent.ConcurrentHashMap;
@Deprecated
public class CooldownUtils implements Listener {
private static ConcurrentHashMap<String, CooldownPack> packlist = new ConcurrentHashMap<>();
public static void register(CooldownPack pack) {
packlist.put(pack.getPackName(), pack);
MsgUtils.send("注册冷却包: " + pack.getPackName() + ", 时间: " + pack.getPackSeconds() + " 秒 (匿名注册)");
}
public static void register(CooldownPack pack, Plugin plugin) {
pack.setPlugin(plugin.getName());
packlist.put(pack.getPackName(), pack);
MsgUtils.send("注册冷却包: " + pack.getPackName() + ", 时间: " + pack.getPackSeconds() + " 秒 (" + plugin.getName() + ")");
}
public static void unregister(String name) {
packlist.remove(name);
MsgUtils.send("注销冷却包: " + name + " (主动注销)");
}
@EventHandler
public void quit(PlayerQuitEvent e) {
for (CooldownPack pack : packlist.values()) {
if (!pack.isCooldown(e.getPlayer().getName(), 0)) {
pack.unRegister(e.getPlayer().getName());
}
}
}
@EventHandler
public void disable(PluginDisableEvent e) {
for (CooldownPack pack : packlist.values()) {
if (pack.getPlugin().equals(e.getPlugin().getName())) {
packlist.remove(pack.getPackName());
MsgUtils.send("注销冷却包: " + pack.getPackName() + " (自动注销)");
}
}
}
private static ConcurrentHashMap<String, CooldownPack> packlist = new ConcurrentHashMap<>();
public static void register(CooldownPack pack) {
packlist.put(pack.getPackName(), pack);
TLocale.Logger.info("COOLDOWNPACK.PACK-REGISTER-ANONYMOUS", pack.getPackName(), String.valueOf(pack.getPackSeconds()));
}
public static void register(CooldownPack pack, Plugin plugin) {
pack.setPlugin(plugin.getName());
packlist.put(pack.getPackName(), pack);
TLocale.Logger.info("COOLDOWNPACK.PACK-REGISTER", pack.getPackName(), String.valueOf(pack.getPackSeconds()), plugin.getName());
}
public static void unregister(String name) {
packlist.remove(name);
TLocale.Logger.info("COOLDOWNPACK.PACK-UNREGISTER", name);
}
private static void unregister(CooldownPack pack) {
packlist.remove(pack.getPackName());
TLocale.Logger.info("COOLDOWNPACK.PACK-UNREGISTER-AUTO", pack.getPackName());
}
@EventHandler
public void quit(PlayerQuitEvent e) {
packlist.values().stream().filter(pack -> !pack.isCooldown(e.getPlayer().getName(), 0)).forEach(pack -> pack.unRegister(e.getPlayer().getName()));
}
@EventHandler
public void disable(PluginDisableEvent e) {
packlist.values().stream().filter(pack -> pack.getPlugin().equals(e.getPlugin().getName())).forEach(CooldownUtils::unregister);
}
}

View File

@ -2,6 +2,7 @@ package me.skymc.taboolib.cooldown.seconds;
import java.util.concurrent.ConcurrentHashMap;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
@ -18,39 +19,32 @@ public class CooldownUtils2 implements Listener {
public static void register(CooldownPack2 pack) {
packlist.put(pack.getPackName(), pack);
// MsgUtils.send("注册冷却包: " + pack.getPackName() + ", 时间: " + pack.getPackSeconds() + " 秒 (匿名注册)");
TLocale.Logger.info("COOLDOWNPACK.PACK-REGISTER-ANONYMOUS", pack.getPackName(), String.valueOf(pack.getPackSeconds()));
}
public static void register(CooldownPack2 pack, Plugin plugin) {
pack.setPlugin(plugin.getName());
packlist.put(pack.getPackName(), pack);
// MsgUtils.send("注册冷却包: " + pack.getPackName() + ", 时间: " + pack.getPackSeconds() + " 秒 (" + plugin.getName() + ")");
TLocale.Logger.info("COOLDOWNPACK.PACK-REGISTER", pack.getPackName(), String.valueOf(pack.getPackSeconds()), plugin.getName());
}
public static void unregister(String name) {
packlist.remove(name);
// MsgUtils.send("注销冷却包: " + name + " (主动注销)");
TLocale.Logger.info("COOLDOWNPACK.PACK-UNREGISTER", name);
}
@EventHandler
private static void unregister(CooldownPack2 pack) {
packlist.remove(pack.getPackName());
TLocale.Logger.info("COOLDOWNPACK.PACK-UNREGISTER-AUTO", pack.getPackName());
}
@EventHandler
public void quit(PlayerQuitEvent e) {
for (CooldownPack2 pack : packlist.values()) {
if (!pack.isCooldown(e.getPlayer().getName(), 0)) {
pack.unRegister(e.getPlayer().getName());
}
}
packlist.values().stream().filter(pack -> !pack.isCooldown(e.getPlayer().getName(), 0)).forEach(pack -> pack.unRegister(e.getPlayer().getName()));
}
@EventHandler
public void disable(PluginDisableEvent e) {
for (CooldownPack2 pack : packlist.values()) {
if (pack.getPlugin().equals(e.getPlugin().getName())) {
packlist.remove(pack.getPackName());
// MsgUtils.send("注销冷却包: " + pack.getPackName() + " (自动注销)");
}
}
}
packlist.values().stream().filter(pack -> pack.getPlugin().equals(e.getPlugin().getName())).forEach(CooldownUtils2::unregister);
}
}

View File

@ -5,6 +5,7 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.concurrent.ConcurrentHashMap;
import com.ilummc.tlib.resources.TLocale;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.scheduler.BukkitRunnable;
@ -344,8 +345,7 @@ public class GlobalDataManager {
// 移除
variables.remove(name);
// 提示
MsgUtils.warn("变量出现异常: &4" + name);
MsgUtils.warn("原因: &4" + e.getMessage());
TLocale.Logger.error("GLOBAL-DATAMANAGER.ERROR-CHECK-VARIABLE", String.valueOf(name), e.toString());
}
}
}
@ -410,8 +410,8 @@ public class GlobalDataManager {
// 载入数据
loadVariables(false);
// 提示信息
MsgUtils.send("从数据库中获取 &f" + variables.size() + " &7个变量, 耗时: &f" + (System.currentTimeMillis() - time) + " &7(ms)");
TLocale.Logger.info("GLOBAL-DATAMANAGER.SUCCESS-LOADED-VARIABLE", String.valueOf(variables.size()), String.valueOf(System.currentTimeMillis() - time));
// 检查更新
new BukkitRunnable() {

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.database;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.Main.StorageType;
import me.skymc.taboolib.events.PlayerLoadedEvent;
@ -83,7 +84,7 @@ public class PlayerDataManager implements Listener {
return PLAYER_DATA.get(username);
} else if (offline) {
if (Main.getStorageType() == StorageType.SQL) {
throw new PlayerOfflineException("不允许在储存模式为数据库的情况下获取离线玩家数据");
throw new PlayerOfflineException(TLocale.asString("PLAYER-DATAMANAGER.ERROR-STORAGE-SQL"));
}
return loadPlayerData(username);
}
@ -115,7 +116,7 @@ public class PlayerDataManager implements Listener {
// 创建空数据
PLAYER_DATA.put(username, new YamlConfiguration());
// 反馈信息
MsgUtils.warn("玩家 &4" + username + " &c的数据载入出现异常: &4" + e.getMessage());
TLocale.Logger.error("PLAYER-DATAMANAGER.ERROR-PLAYER-DATA", username, e.toString());
}
} else {
// 创建空数据
@ -189,7 +190,7 @@ public class PlayerDataManager implements Listener {
}
// 提示
if (!Main.getInst().getConfig().getBoolean("HIDE-NOTIFY")) {
MsgUtils.send("保存 &f" + PLAYER_DATA.size() + " &7条玩家数据, 耗时: &f" + (System.currentTimeMillis() - time) + " &7(ms)");
TLocale.Logger.info("PLAYER-DATAMANAGER.SUCCESS-SAVE-DATA", String.valueOf(PLAYER_DATA.size()), String.valueOf(System.currentTimeMillis() - time));
}
}
};

View File

@ -4,6 +4,7 @@ import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.ilummc.tlib.resources.TLocale;
import me.skymc.taboolib.exception.PluginNotFoundException;
import org.bukkit.Bukkit;
import org.bukkit.World;
@ -71,7 +72,7 @@ public class EntityUtils implements Listener {
public static void addGlow(Player player, Entity entity) {
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) {
try {
throw new PluginNotFoundException("缺少前置插件 ProtocolLib");
throw new PluginNotFoundException(TLocale.asString("ENTITY-UTILS.NOTFOUND-PROTOCOLLIB"));
} catch (Exception e) {
//
}
@ -99,7 +100,7 @@ public class EntityUtils implements Listener {
public static void delGlow(Player player, Entity entity) {
if (Bukkit.getPluginManager().getPlugin("ProtocolLib") == null) {
try {
throw new PluginNotFoundException("缺少前置插件 ProtocolLib");
throw new PluginNotFoundException(TLocale.asString("ENTITY-UTILS.NOTFOUND-PROTOCOLLIB"));
} catch (Exception e) {
//
}

View File

@ -4,6 +4,7 @@ import com.google.common.collect.Maps;
import com.google.common.io.Files;
import com.ilummc.tlib.TLib;
import com.ilummc.tlib.bean.Property;
import com.ilummc.tlib.resources.TLocale;
import com.ilummc.tlib.util.Ref;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.MemoryConfiguration;
@ -179,9 +180,7 @@ public class ConfigUtils {
configuration.loadFromString(yaml);
return configuration;
} catch (Exception e) {
TLib.getTLib().getLogger().error("配置文件载入失败!");
TLib.getTLib().getLogger().error("插件: &4" + plugin.getName());
TLib.getTLib().getLogger().error("文件: &4" + file);
TLocale.Logger.error("FILE-UTILS.FALL-LOAD-CONFIGURATION", plugin.getName(), file.getName());
}
return configuration;
}

View File

@ -2,51 +2,58 @@ package me.skymc.taboolib.fileutils;
import ch.njol.util.Closeable;
import me.skymc.taboolib.message.MsgUtils;
import org.apache.commons.io.IOUtils;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.channels.FileChannel;
import java.util.Objects;
public class FileUtils {
public static String ip() {
URL url;
URLConnection con;
try {
url = new URL("http://1212.ip138.com/ic.asp");
con = url.openConnection();
} catch (Exception ignored) {
return "[IP ERROR]";
}
InputStream ins = null;
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
InputStream ins = null;
URL url = new URL("http://1212.ip138.com/ic.asp");
URLConnection con = url.openConnection();
ins = con.getInputStream();
InputStreamReader isReader = new InputStreamReader(ins, "GB2312");
BufferedReader bReader = new BufferedReader(isReader);
inputStreamReader = new InputStreamReader(ins, "GB2312");
bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder webContent = new StringBuilder();
String str = null;
while ((str = bReader.readLine()) != null) {
webContent.append(str);
}
bufferedReader.lines().forEach(webContent::append);
int start = webContent.indexOf("[") + 1;
int end = webContent.indexOf("]");
ins.close();
return webContent.substring(start, end);
} catch (Exception e) {
// TODO: handle exception
} catch (Exception ignored) {
return "[IP ERROR]";
} finally {
IOUtils.close(con);
IOUtils.closeQuietly(bufferedReader);
IOUtils.closeQuietly(inputStreamReader);
IOUtils.closeQuietly(ins);
}
return "[IP ERROR]";
}
/**
* 创建并获取文件
* 检测文件并创建
*
* @param filePath
* @return
* @param file 文件
*/
public static File file(String filePath) {
File file = new File(filePath);
if (!file.exists()) {
public static File createNewFile(File file) {
if (file != null && !file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
} catch (Exception ignored) {
}
}
return file;
@ -55,26 +62,28 @@ public class FileUtils {
/**
* 创建并获取文件
*
* @param Path
* @param filePath
* @param Path 目录
* @param filePath 地址
* @return
*/
public static File file(File Path, String filePath) {
File file = new File(Path, filePath);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
return file;
return createNewFile(new File(Path, filePath));
}
/**
* 创建并获取文件
*
* @param filePath 地址
* @return {@link File}
*/
public static File file(String filePath) {
return createNewFile(new File(filePath));
}
/**
* 删除文件夹
*
* @param file
* @param file 文件夹
*/
public void deleteAllFile(File file) {
if (!file.exists()) {
@ -84,8 +93,7 @@ public class FileUtils {
file.delete();
return;
}
File[] files = file.listFiles();
for (File file1 : files) {
for (File file1 : Objects.requireNonNull(file.listFiles())) {
deleteAllFile(file1);
}
file.delete();
@ -96,20 +104,19 @@ public class FileUtils {
*
* @param file1 文件1
* @param file2 文件2
* @throws Exception
*/
public void copyAllFile(String file1, String file2) throws Exception {
public void copyAllFile(String file1, String file2) {
File _file1 = new File(file1);
File _file2 = new File(file2);
if (!_file2.exists()) {
if (!_file1.isDirectory()) {
_file2.createNewFile();
createNewFile(_file2);
} else {
_file2.mkdirs();
}
}
if (_file1.isDirectory()) {
for (File file : _file1.listFiles()) {
for (File file : Objects.requireNonNull(_file1.listFiles())) {
if (file.isDirectory()) {
copyAllFile(file.getAbsolutePath(), file2 + "/" + file.getName());
} else {
@ -138,43 +145,33 @@ public class FileUtils {
channelIn = fileIn.getChannel();
channelOut = fileOut.getChannel();
channelIn.transferTo(0, channelIn.size(), channelOut);
} catch (Exception e) {
//
} catch (IOException ignored) {
} finally {
try {
fileIn.close();
channelIn.close();
fileOut.close();
channelOut.close();
} catch (Exception e) {
//
}
IOUtils.closeQuietly(channelIn);
IOUtils.closeQuietly(channelOut);
IOUtils.closeQuietly(fileIn);
IOUtils.closeQuietly(fileOut);
}
}
/**
* 通过输入流读取文本
*
* @param in
* @param size
* @param encode
* @return
* @param in 输入流
* @param size 大小
* @param encode 编码
* @return 文本
*/
public static String getStringFromInputStream(InputStream in, int size, String encode) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[size];
int i = 0;
int i;
while ((i = in.read(b)) > 0) {
bos.write(b, 0, i);
}
bos.close();
return new String(bos.toByteArray(), encode);
} catch (IOException e) {
MsgUtils.warn("输入流读取出错: &4" + e.getMessage());
} catch (IOException ignored) {
}
return null;
}
@ -182,30 +179,28 @@ public class FileUtils {
/**
* 通过文件读取文本
*
* @param file
* @param size
* @param encode
* @return
* @param file 文件
* @param size 大小
* @param encode 编码
* @return 文本
*/
public static String getStringFromFile(File file, int size, String encode) {
FileInputStream fin = null;
BufferedInputStream bin = null;
try {
FileInputStream fin = new FileInputStream(file);
BufferedInputStream bin = new BufferedInputStream(fin);
fin = new FileInputStream(file);
bin = new BufferedInputStream(fin);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[size];
int i = 0;
int i;
while ((i = bin.read(b)) > 0) {
bos.write(b, 0, i);
}
bos.close();
bin.close();
fin.close();
return new String(bos.toByteArray(), encode);
} catch (IOException e) {
MsgUtils.warn("文件读取出错: &4" + e.getMessage());
} catch (IOException ignored) {
} finally {
IOUtils.closeQuietly(bin);
IOUtils.closeQuietly(fin);
}
return null;
}
@ -213,82 +208,80 @@ public class FileUtils {
/**
* 通过 URL 读取文本
*
* @param url
* @param size
* @return
* @param url 地址
* @param def 默认值
* @return 文本
*/
public static String getStringFromURL(String url, int size) {
try {
URLConnection conn = new URL(url).openConnection();
BufferedInputStream bin = new BufferedInputStream(conn.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[size];
int i = 0;
while ((i = bin.read(b)) > 0) {
bos.write(b, 0, i);
}
bos.close();
bin.close();
return new String(bos.toByteArray(), conn.getContentEncoding() == null ? "UTF-8" : conn.getContentEncoding());
} catch (IOException e) {
MsgUtils.warn("网络访问出错: &4" + e.getMessage());
}
return null;
}
public static String getStringFromURL(String url, String def) {
String s = getStringFromURL(url, 1024);
return s == null ? def : s;
}
/**
* 通过 URL 读取文本
*
* @param url 地址
* @param size 大小
* @return 文本
*/
public static String getStringFromURL(String url, int size) {
URLConnection conn = null;
BufferedInputStream bin = null;
try {
conn = new URL(url).openConnection();
bin = new BufferedInputStream(conn.getInputStream());
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[size];
int i;
while ((i = bin.read(b)) > 0) {
bos.write(b, 0, i);
}
return new String(bos.toByteArray(), conn.getContentEncoding() == null ? "UTF-8" : conn.getContentEncoding());
} catch (IOException ignored) {
} finally {
IOUtils.close(conn);
IOUtils.closeQuietly(bin);
}
return null;
}
/**
* 下载文件
*
* @param urlStr
* @param filename
* @param saveDir
* @param downloadURL 下载地址
* @param file 保存位置
*/
public static void download(String urlStr, String filename, File saveDir) {
public static void download(String downloadURL, File file) {
HttpURLConnection conn = null;
InputStream inputStream = null;
FileOutputStream fos = null;
try {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 超时时间
URL url = new URL(downloadURL);
conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5 * 1000);
// 防止屏蔽程序抓取而返回 403 错误
conn.setRequestProperty("User-Agent", "Mozilla/31.0 (compatible; MSIE 10.0; Windows NT; DigExt)");
// 得到输入流
InputStream inputStream = conn.getInputStream();
// 获取数组
inputStream = conn.getInputStream();
byte[] data = read(inputStream);
// 创建文件夹
if (!saveDir.exists()) {
saveDir.mkdirs();
}
// 保存文件
File file = new File(saveDir, filename);
FileOutputStream fos = new FileOutputStream(file);
// 写入文件
fos = new FileOutputStream(createNewFile(file));
fos.write(data);
// 结束
fos.close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
} catch (Exception ignored) {
} finally {
IOUtils.close(conn);
IOUtils.closeQuietly(fos);
IOUtils.closeQuietly(inputStream);
}
}
@Deprecated
public static void download(String downloadURL, String filename, File saveDir) {
download(downloadURL, new File(saveDir, filename));
}
public static byte[] read(InputStream in) {
byte[] buffer = new byte[1024];
int len = 0;
int len;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
while ((len = in.read(buffer)) != -1) {

View File

@ -7,27 +7,24 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.stream.IntStream;
public class DropUtils {
public static Item drop(Player player, ItemStack itemStack, double bulletSpread, double radius) {
Location location = player.getLocation();
location.setY(location.getY() + 1.5);
Item item = player.getWorld().dropItem(location, itemStack);
double yaw = Math.toRadians(-player.getLocation().getYaw() - 90.0F);
double pitch = Math.toRadians(-player.getLocation().getPitch());
double x = 0;
double y = 0;
double z = 0;
double x;
double y;
double z;
if (bulletSpread > 0) {
double[] spread = {1.0D, 1.0D, 1.0D};
for (int t = 0; t < 3; t++) {
spread[t] = ((NumberUtils.getRand().nextDouble() - NumberUtils.getRand().nextDouble()) * bulletSpread * 0.1D);
}
IntStream.range(0, 3).forEach(t -> spread[t] = ((NumberUtils.getRandom().nextDouble() - NumberUtils.getRandom().nextDouble()) * bulletSpread * 0.1D));
x = Math.cos(pitch) * Math.cos(yaw) + spread[0];
y = Math.sin(pitch) + spread[1];
z = -Math.sin(yaw) * Math.cos(pitch) + spread[2];
@ -36,9 +33,9 @@ public class DropUtils {
y = Math.sin(pitch);
z = -Math.sin(yaw) * Math.cos(pitch);
}
Vector dirVel = new Vector(x, y, z);
dirVel.normalize().multiply(radius);
item.setVelocity(dirVel);
return item;
}

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.inventory;
import com.ilummc.tlib.resources.TLocale;
import me.clip.placeholderapi.PlaceholderAPI;
import me.skymc.taboolib.Main;
import me.skymc.taboolib.TabooLib;
@ -97,7 +98,7 @@ public class ItemUtils {
reloadItemCache();
itemdir = YamlConfiguration.loadConfiguration(new File(Main.getInst().getConfig().getString("DATAURL.ITEMDIR")));
} catch (Exception e) {
MsgUtils.warn("物品库载入失败: &4" + e.getMessage());
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-ITEMS", e.toString());
}
}
@ -105,7 +106,7 @@ public class ItemUtils {
FileConfiguration conf = ConfigUtils.load(Main.getInst(), file);
for (String name : conf.getConfigurationSection("").getKeys(false)) {
if (isExists(name)) {
MsgUtils.warn("无法载入载入物品 &4" + name + "&c, 因为它已经存在了");
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-ITEMS", name);
} else if (finalFile) {
itemCachesFinal.put(name, loadItem(conf, name));
} else {
@ -124,19 +125,15 @@ public class ItemUtils {
finalItemsFolder.mkdir();
}
// 检查固定物品库中的物品
for (File file : Objects.requireNonNull(finalItemsFolder.listFiles())) {
loadItemsFile(file, true);
}
MsgUtils.send("载入 " + (itemCaches.size() + itemCachesFinal.size()) + " 项缓存物品");
Arrays.stream(Objects.requireNonNull(finalItemsFolder.listFiles())).forEach(file -> loadItemsFile(file, true));
TLocale.Logger.info("ITEM-UTILS.SUCCESS-LOAD-CACHES", String.valueOf(itemCaches.size() + itemCachesFinal.size()));
}
public static void reloadItemName() {
FileConfiguration conf = new Language("ITEM_NAME", Main.getInst(), true).getConfiguration();
itemlib.clear();
for (String a : conf.getConfigurationSection("").getKeys(false)) {
itemlib.put(a, conf.getString(a));
}
MsgUtils.send("载入 " + itemlib.size() + " 项物品名称");
conf.getConfigurationSection("").getKeys(false).forEach(a -> itemlib.put(a, conf.getString(a)));
TLocale.Logger.info("ITEM-UTILS.SUCCESS-LOAD-NAMES", String.valueOf(itemlib.size()));
}
public static File getItemCacheFile() {
@ -149,7 +146,7 @@ public class ItemUtils {
public static String getCustomName(ItemStack item) {
if (item == null || item.getType().equals(Material.AIR)) {
return "";
return TLocale.asString("ITEM-UTILS.EMPTY-ITEM");
}
int data = item.getType().getMaxDurability() == 0 ? item.getDurability() : 0;
return item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : itemlib.get(item.getType() + ":" + data) == null ? item.getType().toString() : itemlib.get(item.getType() + ":" + data);
@ -424,8 +421,7 @@ public class ItemUtils {
if (enchant != null) {
meta.addEnchant(enchant, section.getInt("enchants." + preEnchant), true);
} else {
MsgUtils.warn("&8" + preEnchant + " &c不是一个有效的附魔名称");
MsgUtils.warn("&c输入 &4/taboolib enchants&c 查看所有附魔");
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-ENCHANTS", preEnchant);
}
}
}
@ -436,8 +432,7 @@ public class ItemUtils {
if (flag != null) {
meta.addItemFlags(flag);
} else {
MsgUtils.warn("&8" + preFlag + " &c不是一个有效的标签名称");
MsgUtils.warn("&c输入 &4/taboolib flags&c 查看所有标签");
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-FLAG", preFlag);
}
}
}
@ -456,8 +451,7 @@ public class ItemUtils {
NumberUtils.getInteger(section.getString("potions." + prePotionName).split("-")[0]),
NumberUtils.getInteger(section.getString("potions." + prePotionName).split("-")[1]) - 1), true);
} else {
MsgUtils.warn("&8" + prePotionName + " &c不是一个有效的药水名称");
MsgUtils.warn("&c输入 &4/taboolib potions&c 查看所有药水");
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-POTION", prePotionName);
}
}
}
@ -499,18 +493,16 @@ public class ItemUtils {
_attr.setInteger("Operation", 0);
}
_attr.setString("AttributeName", asAttribute(name));
_attr.setInteger("UUIDMost", NumberUtils.getRand().nextInt(Integer.MAX_VALUE));
_attr.setInteger("UUIDLeast", NumberUtils.getRand().nextInt(Integer.MAX_VALUE));
_attr.setInteger("UUIDMost", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
_attr.setInteger("UUIDLeast", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
_attr.setString("Name", asAttribute(name));
if (!hand.equals("all")) {
_attr.setString("Slot", hand);
}
} catch (Exception e) {
MsgUtils.warn("&8" + name + " &c属性载入失败: &8" + e.getMessage());
} catch (Exception ignored) {
}
} else {
MsgUtils.warn("&8" + name + " &c不是一个有效的属性名称");
MsgUtils.warn("&c输入 &4/taboolib attributes&c 查看所有属性");
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-POTION", name);
}
}
}
@ -540,18 +532,16 @@ public class ItemUtils {
_attr.setInteger("Operation", 0);
}
_attr.setString("AttributeName", asAttribute(name));
_attr.setInteger("UUIDMost", NumberUtils.getRand().nextInt(Integer.MAX_VALUE));
_attr.setInteger("UUIDLeast", NumberUtils.getRand().nextInt(Integer.MAX_VALUE));
_attr.setInteger("UUIDMost", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
_attr.setInteger("UUIDLeast", NumberUtils.getRandom().nextInt(Integer.MAX_VALUE));
_attr.setString("Name", asAttribute(name));
if (!hand.equals("all")) {
_attr.setString("Slot", hand);
}
} catch (Exception e) {
MsgUtils.warn("&8" + name + " &c属性载入失败: &8" + e.getMessage());
} catch (NumberFormatException ignored) {
}
} else {
MsgUtils.warn("&8" + name + " &c不是一个有效的属性名称");
MsgUtils.warn("&c输入 &4/taboolib attributes&c 查看所有属性");
TLocale.Logger.error("ITEM-UTILS.FALL-LOAD-POTION", name);
}
return nbt;
}

View File

@ -1,5 +1,6 @@
package me.skymc.taboolib.object;
@Deprecated
public class WeightCategory {
private String category;

View File

@ -0,0 +1,99 @@
package me.skymc.taboolib.object;
import me.skymc.taboolib.other.NumberUtils;
import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @Author sky
* @Since 2018-05-07 16:18
*/
@ThreadSafe
public class WeightCollection<A> {
private final List<WeightObject> weightList = new CopyOnWriteArrayList<>();
public int size() {
return weightList.size();
}
public List<WeightObject> getWeightList() {
return weightList;
}
public void add(int weightNumber, A weightObject) {
weightList.add(new WeightObject(weightNumber, weightObject));
}
public void remove(WeightObject weightObject) {
weightList.remove(weightObject);
}
@Nullable
public WeightObject getWeight() {
int weightSum = weightList.stream().mapToInt(WeightObject::getWeightNumber).sum();
if (weightSum > 0) {
Integer m = 0, n = NumberUtils.getRandom().nextInt(weightSum);
for (WeightObject weightObject : weightList) {
if (m <= n && n < m + weightObject.getWeightNumber()) {
return weightObject;
}
m += weightObject.getWeightNumber();
}
}
return null;
}
class WeightObject<B> {
private int weightNumber;
private B weightObject;
public WeightObject(int weightNumber, B weightObject) {
this.weightNumber = weightNumber;
this.weightObject = weightObject;
}
public int getWeightNumber() {
return weightNumber;
}
public void setWeightNumber(int weightNumber) {
this.weightNumber = weightNumber;
}
public B getWeightObject() {
return weightObject;
}
public void setWeightObject(B weightObject) {
this.weightObject = weightObject;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof WeightObject)) {
return false;
}
WeightObject that = (WeightObject) o;
return getWeightNumber() == that.getWeightNumber() && Objects.equals(getWeightObject(), that.getWeightObject());
}
@Override
public int hashCode() {
return Objects.hash(getWeightNumber(), getWeightObject());
}
@Override
public String toString() {
return "weightNumber=" + "WeightObject{" + weightNumber + ", weightObject=" + weightObject + '}';
}
}
}

View File

@ -5,38 +5,27 @@ import java.util.Random;
public class NumberUtils {
private static Random rand = new Random();
private static Random random = new Random();
private static DecimalFormat doubleFormat = new DecimalFormat("#.##");
public static Random getRand() {
return rand;
public static Random getRandom() {
return random;
}
public static Double format(Double num) {
return Double.valueOf(doubleFormat.format(num));
}
@Deprecated
public static int getRandom() {
return rand.nextInt(100);
public static int getRandomInteger(Number num1, Number num2) {
int min = Math.min(num1.intValue(), num2.intValue());
int max = Math.max(num1.intValue(), num2.intValue());
return (int) (random.nextDouble() * (max - min) + min);
}
@Deprecated
public static boolean getChance(int a) {
return getRandom() <= a;
}
public static int getRandomInteger(Number l, Number u) {
Integer ll = Math.min(l.intValue(), u.intValue());
Integer uu = Math.max(l.intValue(), u.intValue());
return rand.nextInt(uu) % (uu - ll + 1) + ll;
}
public static double getRandomDouble(Number l, Number u) {
double ll = Math.min(l.doubleValue(), u.doubleValue());
double uu = Math.max(l.doubleValue(), u.doubleValue());
double d = ll + rand.nextDouble() * (uu - ll);
return Double.valueOf(doubleFormat.format(d));
public static double getRandomDouble(Number num1, Number num2) {
double min = Math.min(num1.doubleValue(), num2.doubleValue());
double max = Math.max(num1.doubleValue(), num2.doubleValue());
return random.nextDouble() * (max - min) + min;
}
public static int getInteger(String s) {
@ -62,4 +51,14 @@ public class NumberUtils {
return false;
}
}
@Deprecated
public static Random getRand() {
return random;
}
@Deprecated
public static boolean getChance(int a) {
return getRandom().nextInt(100) <= a;
}
}

View File

@ -4,6 +4,7 @@ import me.skymc.taboolib.object.WeightCategory;
import java.util.List;
@Deprecated
public class WeightUtils {
public static String getStringByWeight(List<WeightCategory> categorys) {
@ -17,7 +18,7 @@ public class WeightUtils {
return null;
}
Integer n = NumberUtils.getRand().nextInt(weightSum);
Integer n = NumberUtils.getRandom().nextInt(weightSum);
Integer m = 0;
for (WeightCategory wc : categorys) {

View File

@ -11,7 +11,7 @@ DEPENDENCY:
DOWNLOAD-SUCCESS: ' 下载 {0} 完成'
DOWNLOAD-FAILED:
- ' 下载 {0} 失败'
- ' 请手动下载 {1} 并重命名为 {2} 后放在 /TabooLib/libs 文件夹内'
- ' 请手动下载 {1} 并重命名为 {2} 后放在 /{0}/libs 文件夹内'
PLUGIN-AUTOLOAD-FAIL: '{0} 所依赖的插件 {1} 尝试自动加载失败,请尝试手动下载'
PLUGIN-LOAD-SUCCESS: ' {0} 请求的插件 {1} 加载成功'
PLUGIN-LOAD-FAIL: ' {0} 请求的插件 {1} 加载失败'
@ -38,6 +38,38 @@ LOCALE:
MISC:
FIELD-COPY-FAILED: '拷贝 {0} 对象失败'
FIELD-COPY-ERROR: '拷贝 {0} 对象出错:{1}'
COOLDOWNPACK:
PACK-REGISTER: '注册冷却包: {0}, 时间: {1} 秒 ({2})'
PACK-REGISTER-ANONYMOUS: '注册冷却包: {0}, 时间: {1} 秒 (匿名注册)'
PACK-UNREGISTER: '注销冷却包: {0} (主动注销)'
PACK-UNREGISTER-AUTO: '注销冷却包: {0} (自动注销)'
GLOBAL-DATAMANAGER:
ERROR-CHECK-VARIABLE: '&4变量 &c{0} &4载入异常: &c{1}'
SUCCESS-LOADED-VARIABLE: '&7从数据库中获取 &f{0} &7个变量, 耗时: &f{1} &7(ms)'
PLAYER-DATAMANAGER:
ERROR-STORAGE-SQL: '不允许在储存模式为数据库的情况下获取离线玩家数据'
ERROR-PLAYER-DATA: '&4玩家 &c{0} &4的数据载入出现异常: &c{1}'
SUCCESS-SAVE-DATA: '&7保存 &f{0} &7条玩家数据, 耗时: &f{1} &7(ms)'
ENTITY-UTILS:
NOTFOUND-PROTOCOLLIB: '缺少前置插件 ProtocolLib'
FILE-UTILS:
FALL-LOAD-CONFIGURATION: '&4配置文件载入失败!, 插件: &c{0}&4, 文件: &c{1}'
ITEM-UTILS:
FALL-LOAD-ITEMS: '物品库载入失败: &4{0}'
FALL-LOAD-ATTRIBUTE: '&c{0} &4不是一个有效的属性名称, 输入 &c/tlib attributes&4 查看所有属性'
FALL-LOAD-ENCHANT: '&c{0} &4不是一个有效的附魔名称, 输入 &c/tlib enchants&4 查看所有附魔'
FALL-LOAD-POTION: '&c{0} &4不是一个有效的药水名称, 输入 &c/tlib potions&4 查看所有药水'
FALL-LOAD-FLAG: '&c{0} &4不是一个有效的标签名称, 输入 &c/tlib flags&4 查看所有标签'
FALL-SAVE-EXISTS: '无法载入载入物品 &4{0}&c, 因为它已经存在了'
SUCCESS-LOAD-CACHES: '&7载入 &f{0} &7项缓存物品'
SUCCESS-LOAD-NAMES: '&7载入 &f{0} &7项物品名称'
EMPTY-ITEM: '空'
COMMANDS:
GLOBAL:
@ -55,35 +87,35 @@ COMMANDS:
- ''
- '§b§l----- §3§lTaooLib Commands §b§l-----'
- ''
- '&f /taboolib save §8[§7名称§8] &6- §e保存手中物品'
- '&f /taboolib item §8[§7名称§8] §8<§7玩家§8> §8<§7数量§8> &6- §e给予玩家物品'
- '&f /taboolib iteminfo &6- §e查看物品信息'
- '&f /taboolib itemlist &6- §e查看所有物品'
- '&f /taboolib itemreload &6- §e重载物品缓存'
- '&f /{0} save §8[§7名称§8] &6- §e保存手中物品'
- '&f /{0} item §8[§7名称§8] §8<§7玩家§8> §8<§7数量§8> &6- §e给予玩家物品'
- '&f /{0} iteminfo &6- §e查看物品信息'
- '&f /{0} itemlist &6- §e查看所有物品'
- '&f /{0} itemreload &6- §e重载物品缓存'
- ''
- '&f /taboolib attributes &6- §e查看所有属性'
- '&f /taboolib enchants &6- §e查看所有附魔'
- '&f /taboolib potions &6- §e查看所有药水'
- '&f /taboolib flags &6- §e查看所有标签'
- '&f /taboolib slots &6- §e查看所有部位'
- '&f /taboolib sounds &6- §e查看所有音效'
- '&f /{0} attributes &6- §e查看所有属性'
- '&f /{0} enchants &6- §e查看所有附魔'
- '&f /{0} potions &6- §e查看所有药水'
- '&f /{0} flags &6- §e查看所有标签'
- '&f /{0} slots &6- §e查看所有部位'
- '&f /{0} sounds &6- §e查看所有音效'
- ''
- '&f /taboolib getvariable §8[§7-s|a§8] §8[§7键§8] &6- §e查看变量'
- '&f /taboolib setvariable §8[§7-s|a§8] §8[§7键§8] §8[§7值§8] &6- §e更改变量'
- '&f /{0} getvariable §8[§7-s|a§8] §8[§7键§8] &6- §e查看变量'
- '&f /{0} setvariable §8[§7-s|a§8] §8[§7键§8] §8[§7值§8] &6- §e更改变量'
- ''
- '&f /taboolib cycle list &6- §e列出所有时间检查器'
- '&f /taboolib cycle info §8[§7名称§8] &6- §e查询检查器信息'
- '&f /taboolib cycle reset §8[§7名称§8] &6- §e初始化时间检查器'
- '&f /taboolib cycle update §8[§7名称§8] &6- §e更新时间检查器'
- '&f /{0} cycle list &6- §e列出所有时间检查器'
- '&f /{0} cycle info §8[§7名称§8] &6- §e查询检查器信息'
- '&f /{0} cycle reset §8[§7名称§8] &6- §e初始化时间检查器'
- '&f /{0} cycle update §8[§7名称§8] &6- §e更新时间检查器'
- ''
- '&f /taboolib shell load §8[§7名称§8] &6- §e载入某个脚本'
- '&f /taboolib shell unload §8[§7名称§8] &6- §e卸载某个脚本'
- '&f /{0} shell load §8[§7名称§8] &6- §e载入某个脚本'
- '&f /{0} shell unload §8[§7名称§8] &6- §e卸载某个脚本'
- ''
- '&f /taboolib tagprefix §8[§7名称§8] §8[§7文本§8] &6- §e设置玩家头顶前缀'
- '&f /taboolib tagsuffix §8[§7名称§8] §8[§7文本§8] &6- §e设置玩家头顶后缀'
- '&f /taboolib tagdelete §8[§7名称§8] &6- §e删除玩家称号数据'
- '&f /{0} tagprefix §8[§7名称§8] §8[§7文本§8] &6- §e设置玩家头顶前缀'
- '&f /{0} tagsuffix §8[§7名称§8] §8[§7文本§8] &6- §e设置玩家头顶后缀'
- '&f /{0} tagdelete §8[§7名称§8] &6- §e删除玩家称号数据'
- ''
- '&f /taboolib importdata &6- §4向数据库导入本地数据 §8(该操作将会清空数据库)'
- '&f /{0} importdata &6- §4向数据库导入本地数据 §8(该操作将会清空数据库)'
- ''
SAVE:
INVALID-NAME: '&8[&3&lTabooLib&8] &4请输入正确的名称'
@ -116,6 +148,11 @@ COMMANDS:
INVALID-SHELL: '&8[&3&lTabooLib&8] &4脚本 &c{0} &4不存在'
SUCCESS-LOAD: '&8[&3&lTabooLib&8] &7脚本 &f{0} &7已载入'
SUCCESS-UNLOAD: '&8[&3&lTabooLib&8] &7脚本 &f{0} &7已卸载'
PLAYERTAG:
INVALID-PLAYER: '&8[&3&lTabooLib&8] &4玩家 &c{0} &4不在线'
SUCCESS-PREFIX-SET: '&8[&3&lTabooLib&8] &7设置玩家 &f{0} &7的前缀为 &f{1}'
SUCCESS-SUFFIX-SET: '&8[&3&lTabooLib&8] &7设置玩家 &f{0} &7的后缀为 &f{1}'
SUCCESS-DELETE: '&8[&3&lTabooLib&8] &7删除玩家 &f{0} &7的称号数据'
INFO:
INVALID-ITEM: '&8[&3&lTabooLib&8] &4请手持正确的物品'
ITEM-INFO:
@ -171,6 +208,32 @@ COMMANDS:
sound:
hover: 点击复制音效
suggest: '{0}'
TIMECYCLE:
INVALID-CYCLE: '&8[&3&lTabooLib&8] &4检查器 &c{0} &4不存在'
CYCLE-UPDATE: '&8[&3&lTabooLib&8] &7检查器 &f{0} &7已更新'
CYCLE-RESET: '&8[&3&lTabooLib&8] &7检查器 &f{0} &7初始化完成'
CYCLE-INFO:
- ''
- '§b§l----- §3§lTimeCycle Info §b§l-----'
- ''
- ' §f- §7注册周期: §f{0}'
- ' §f- §7注册插件: §f{1}'
- ' §f- §7上次刷新时间: §f{2}'
- ' §f- §7下次刷新时间: §f{3}'
LIST:
HEAD:
- ''
- '§b§l----- §3§lTimeCycle List §b§l-----'
- ''
BODY:
- ==: JSON
text: ' §7- §f{0} <&8(点击复制)@copy>'
args:
copy:
hover: '§f点击复制'
suggest: '{0}'
FOOT:
- ''
ATTRIBUTES:
HEAD:
- ''
@ -240,12 +303,25 @@ COMMANDS:
hover: '§f点击复制'
suggest: '{0}'
FOOT:
- ''
- ''
LANGUAGE2:
INVALID-PLAYER: '&8[&3&lTabooLib&8] &4玩家 &c{0} &4不在线'
SUCCESS-SEND: '&8[&3&lTabooLib&8] &7信息已发送, 耗时&f: {0}'
HELP:
- ''
- '§b§l----- §3§lLanguage2 Commands §b§l-----'
- ''
- '§f /language2 send §8[§7玩家/ALL§8] §8[§7语言§8] §8<§7变量§8> §6- §e发送语言提示'
- '§f /language2 reload §6- §e重载语言库'
- ''
- '§f /{0} send §8[§7玩家/ALL§8] §8[§7语言§8] §8<§7变量§8> §6- §e发送语言提示'
- '§f /{0} reload §6- §e重载语言库'
- ''
TLOCALE:
INVALID-PLAYER: '&8[&3&lTabooLib&8] &4玩家 &c{0} &4不在线'
SUCCESS-RELOAD: '&8[&3&lTabooLib&8] &7重载完成'
SUCCESS-SEND: '&8[&3&lTabooLib&8] &7信息已发送, 耗时&f: {0}'
HELP:
- ''
- '§b§l----- §3§lTabooLibLoacle Commands §b§l-----'
- ''
- '§f /{0} send §8[§7玩家/ALL§8] §8[§7语言§8] §8<§7变量§8> §6- §e发送语言提示'
- '§f /{0} reload §6- §e重载语言库'
- ''