mirror of
https://github.com/CarmJos/cn2b2t-project.git
synced 2026-06-04 18:17:19 +08:00
first commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
package org.cn2b2t.common;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.cn2b2t.common.commands.*;
|
||||
import org.cn2b2t.common.listeners.*;
|
||||
import org.cn2b2t.common.managers.DataManager;
|
||||
import org.cn2b2t.common.managers.DonateManager;
|
||||
import org.cn2b2t.common.managers.UserDataManager;
|
||||
import org.cn2b2t.common.managers.WorldBorderManager;
|
||||
import org.cn2b2t.common.runnables.BoardCastRunnable;
|
||||
import org.cn2b2t.common.runnables.RestartRunnable;
|
||||
|
||||
public class Main extends JavaPlugin {
|
||||
|
||||
public static String pluginName = "2b2t-common";
|
||||
public static String pluginVersion = "1.0-SNAPSHOT";
|
||||
|
||||
private static Main instance;
|
||||
|
||||
public static Main getInstance() {
|
||||
return Main.instance;
|
||||
}
|
||||
|
||||
public static String color(final String text) {
|
||||
return text.replaceAll("&", "§").replaceAll("§§", "&");
|
||||
}
|
||||
|
||||
private void pluginMessage(String s) {
|
||||
this.getServer().getConsoleSender().sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.RED + "!" + ChatColor.DARK_GRAY + "] " + ChatColor.AQUA + pluginName + " " + ChatColor.WHITE + pluginVersion + ChatColor.GRAY + s);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
Main.instance = this;
|
||||
inits();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
this.shutdown();
|
||||
}
|
||||
|
||||
private void inits() {
|
||||
regCmds();
|
||||
regListeners();
|
||||
pluginMessage("已启用。");
|
||||
saveConfig();
|
||||
saveDefaultConfig();
|
||||
reloadConfig();
|
||||
DataManager.init();
|
||||
UserDataManager.init();
|
||||
WorldBorderManager.init();
|
||||
DonateManager.init();
|
||||
new BoardCastRunnable();
|
||||
new RestartRunnable(21600);
|
||||
|
||||
// BungeeTabListPlusBukkitAPI.registerVariable(this, new Serverprefix());
|
||||
}
|
||||
|
||||
private void shutdown() {
|
||||
this.pluginMessage("已卸载。");
|
||||
}
|
||||
|
||||
private void regCmds() {
|
||||
this.getCommand("suicide").setExecutor(new Suicide());
|
||||
this.getCommand("delay").setExecutor(new Delay());
|
||||
this.getCommand("help").setExecutor(new Help());
|
||||
this.getCommand("donate").setExecutor(new Donate());
|
||||
this.getCommand("donate").setTabCompleter(new Donate());
|
||||
this.getCommand("settings").setExecutor(new Settings());
|
||||
this.getCommand("settings").setTabCompleter(new Settings());
|
||||
this.getCommand("toggle").setExecutor(new Toggle());
|
||||
this.getCommand("toggle").setTabCompleter(new Toggle());
|
||||
this.getCommand("ignore").setExecutor(new Ignore());
|
||||
this.getCommand("ignore").setTabCompleter(new Ignore());
|
||||
}
|
||||
|
||||
private void regListeners() {
|
||||
Bukkit.getPluginManager().registerEvents(new QuitListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new RespawnListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new LoginListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new ChatListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new Protection(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new SignColor(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new AnvilColorPatch(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new FastPot(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new BedListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new ScoreboardListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new UnfairListener(), this);
|
||||
Bukkit.getPluginManager().registerEvents(new DeathListener(), this);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
import org.cn2b2t.common.runnables.RestartRunnable;
|
||||
|
||||
public class Delay implements CommandExecutor {
|
||||
|
||||
private boolean hasDelayed = false;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("delay")) {
|
||||
if (sender instanceof Player) {
|
||||
Player p = (Player) sender;
|
||||
if (ProfileData.getProfileData(p).getMonthlyDonate() > 10) {
|
||||
if (!hasDelayed) {
|
||||
RestartRunnable.count = RestartRunnable.count + 600;
|
||||
hasDelayed = true;
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage(Main.color(
|
||||
"&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7服务器重启事项已被玩家 &e" + p.getName() + " &7推迟10分钟。\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"
|
||||
)));
|
||||
}
|
||||
} else {
|
||||
p.sendMessage(Main.color("&7本功能只有至今一个月内赞助&e超过10元&7的玩家才可使用。\n" +
|
||||
"&7输入 &6/donate &7,查看赞助方法,一起维护这个服务器吧!"));
|
||||
}
|
||||
} else {
|
||||
RestartRunnable.count = RestartRunnable.count + 3600;
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.sendMessage(Main.color(
|
||||
"&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7服务器重启事项已被控制台推迟一小时。\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"
|
||||
)));
|
||||
hasDelayed = false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.managers.DataManager;
|
||||
import org.cn2b2t.common.managers.DonateManager;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Donate implements CommandExecutor, TabCompleter {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("donate") && sender instanceof Player) {
|
||||
Player p = (Player) sender;
|
||||
if (args.length >= 1) {
|
||||
String aim = args[0];
|
||||
if (aim.equalsIgnoreCase("me")) {
|
||||
help(p, 1);
|
||||
} else if (aim.equalsIgnoreCase("info")) {
|
||||
help(p, 2);
|
||||
} else if (aim.equals("1") || aim.equals("5") || aim.equals("10") || aim.equals("20") || aim.equals("50")) {
|
||||
Main.getInstance().getServer().dispatchCommand(Bukkit.getConsoleSender(), "mcpay pbuy " + sender.getName() + " " + DonateManager.getID(aim));
|
||||
} else {
|
||||
help(p, 0);
|
||||
}
|
||||
} else {
|
||||
help(p, 0);
|
||||
}
|
||||
} else if (cmd.getName().equalsIgnoreCase("donate")) {
|
||||
if (args.length == 4) {
|
||||
// donate apply adehcby 20200306194633048611812 20
|
||||
String playername = args[1];
|
||||
String order = args[2];
|
||||
String price = args[3];
|
||||
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(Main.color(
|
||||
"&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7感谢 &6&l" + playername + "&7为本服助力 &6" + price + "元 &7!\n" +
|
||||
"&7本服仅由玩家赞助维持,输入 &6/donate &7查看更多。\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"
|
||||
)));
|
||||
DataManager.saveData(Bukkit.getPlayer(playername), order, (int) Double.parseDouble(price));
|
||||
|
||||
}
|
||||
sender.sendMessage(Main.color(" \n本月赞助 &6" + DonateManager.monthly + "\n" +
|
||||
"总共收到 &6" + DonateManager.total));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void help(Player p, int i) {
|
||||
switch (i) {
|
||||
case 1: {
|
||||
ProfileData profileData = ProfileData.getProfileData(p);
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7您总共赞助了 &6" + profileData.getTotalDonate() + " &7元;\n" +
|
||||
"&7至今一个月内,您为服务器提供了 &6" + profileData.getMonthlyDonate() + " &7元资金。\n" +
|
||||
"&7总共为服务器续命 &6" + profileData.getTotalDonate() / 50 + " &7天。\n" +
|
||||
(profileData.getTotalDonate() > 0 ? "&7感谢您为本社区所做的一切!\n" : "\n") +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7本服&c无管理维护,仅由玩家赞助维持&7。\n" +
|
||||
"&7所收赞助钱款自动化处理,全部转账到服务商账户中。\n" +
|
||||
"&7若您还未有相应消费能力,&c谢绝赞助,心意已领&7。\n" +
|
||||
"&7至今一个月内 赞助&6超过5元的&7即可获得 &e浅黄色 &7聊天名,\n" +
|
||||
"&7至今一个月内 赞助&6超过10元&7的可以延迟服务器重启。\n" +
|
||||
"&7总共赞助&6超过50元&7的,即使本服务器已满人,也可进入。\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7本服自2019年9月1日起,开始接受玩家资助。\n" +
|
||||
"&7本月获得赞助 &6" + DonateManager.monthly + "元&7,总共获得 &6" + DonateManager.total + "元&7。\n" +
|
||||
"&7查看介绍 &6/donate info\n" +
|
||||
"&7查看我的贡献 &6/donate me\n" +
|
||||
"&7赞助对应金额 &6/donate 1/5/10/20/50\n" +
|
||||
"&c注意:&7目前仅支持单笔1元、5元、 10元、20元、50元,\n" +
|
||||
" &7请勿输入其他金额。\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1: {
|
||||
List<String> completions = new ArrayList<>();
|
||||
String[] strings = new String[]{"info", "me", "1", "5", "10"};
|
||||
for (String s : strings) {
|
||||
if (StringUtil.startsWithIgnoreCase(s, args[0].toLowerCase())) {
|
||||
completions.add(s);
|
||||
}
|
||||
}
|
||||
return completions;
|
||||
}
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
public class Help implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("help")) {
|
||||
sender.sendMessage(Main.color(
|
||||
"&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7查看服务器版本 &6/version\n" +
|
||||
"&7屏蔽玩家 &6/ignore <ID>\n" +
|
||||
"&7想要赞助 &6/donate\n" +
|
||||
"&7推迟重启 &6/delay\n" +
|
||||
"&7不想活了 &6/suicide\n" +
|
||||
"&7个人设置 &6/settings &7查看详情。\n" +
|
||||
"&7开关设置 &6/toggle &7查看详情。\n" +
|
||||
"&7其余更多原版自带指令,不做详解,自行搜索、询问。\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"
|
||||
));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Ignore implements CommandExecutor, TabCompleter {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("ignore") && sender instanceof Player) {
|
||||
Player p = (Player) sender;
|
||||
if (args.length >= 1) {
|
||||
String aim = args[0];
|
||||
if (Bukkit.getPlayer(aim) != null && Bukkit.getPlayer(aim).isOnline()) {
|
||||
ignore(p, Bukkit.getPlayer(aim));
|
||||
} else {
|
||||
p.sendMessage("&7您所想屏蔽的玩家并不在线!");
|
||||
}
|
||||
} else {
|
||||
help(p);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void help(Player p) {
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7屏蔽某人消息 &6/ignore &8<&6ID&8>\n" +
|
||||
"&7注意,每次屏蔽退出服务器后即失效,若需要请再次屏蔽。" +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
}
|
||||
|
||||
private static void ignore(Player p, Player target) {
|
||||
if (p != target) {
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7已成功屏蔽 &2" + target.getName() + "&7 !\n" +
|
||||
"&7注意,本次屏蔽退出服务器后即失效,若需要请再次屏蔽。" +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
ProfileData.getProfileData(p).ignorePlayer(target.getUniqueId());
|
||||
} else {
|
||||
p.sendMessage(Main.color("&7您无法屏蔽您自己!"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1: {
|
||||
return Bukkit.getOnlinePlayers().stream().filter(p -> sender instanceof Player
|
||||
&& p != sender
|
||||
&& StringUtil.startsWithIgnoreCase(p.getName(), args[0].toLowerCase())).map(HumanEntity::getName)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Settings implements CommandExecutor, TabCompleter {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("settings") && sender instanceof Player) {
|
||||
Player p = (Player) sender;
|
||||
if (args.length >= 2 && (args[1].equalsIgnoreCase("true") || args[1].equalsIgnoreCase("false"))) {
|
||||
String aim = args[0];
|
||||
boolean value = args[1].equalsIgnoreCase("true");
|
||||
|
||||
if (aim.equalsIgnoreCase("showScoreboard") || aim.equalsIgnoreCase("ssb")) {
|
||||
ProfileData.getProfileData(p).setShowScoreboard(value);
|
||||
} else if (aim.equalsIgnoreCase("showDeathMessages") || aim.equalsIgnoreCase("sdm")) {
|
||||
ProfileData.getProfileData(p).setShowDeathMessages(value);
|
||||
} else if (aim.equalsIgnoreCase("showJoinAndLeaveAlerts") || aim.equalsIgnoreCase("sjaqa")) {
|
||||
ProfileData.getProfileData(p).setShowJoinAndLeaveAlerts(value);
|
||||
} else {
|
||||
help(p);
|
||||
}
|
||||
} else {
|
||||
help(p);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void help(Player p) {
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7开关积分榜\n" +
|
||||
" &6/settings showScoreboard true/false\n" +
|
||||
"&7开关死亡消息\n" +
|
||||
" &6/settings showDeathMessages true/false\n" +
|
||||
"&7开关玩家加入、退出提示信息\n" +
|
||||
" &6/settings showJoinAndLeaveAlerts true/false\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1: {
|
||||
List<String> completions = new ArrayList<>();
|
||||
String[] strings = new String[]{"showScoreboard", "showDeathMessages", "showJoinAndLeaveAlerts"};
|
||||
for (String s : strings) {
|
||||
if (StringUtil.startsWithIgnoreCase(s, args[0].toLowerCase())) {
|
||||
completions.add(s);
|
||||
}
|
||||
}
|
||||
return completions;
|
||||
}
|
||||
case 2: {
|
||||
List<String> completions = new ArrayList<>();
|
||||
String[] strings = new String[]{"true", "false"};
|
||||
for (String s : strings) {
|
||||
if (StringUtil.startsWithIgnoreCase(s, args[0].toLowerCase())) {
|
||||
completions.add(s);
|
||||
}
|
||||
}
|
||||
return completions;
|
||||
}
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
public class Suicide implements CommandExecutor {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("suicide")) {
|
||||
if (sender instanceof Player) ((Player) sender).setHealth(0);
|
||||
sender.sendMessage(Main.color("&a这个世界虽然不完美,但我们仍然可以治愈自己。\n" +
|
||||
"&7全国免费心理咨询热线 &f&l800-810-1117"));
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
package org.cn2b2t.common.commands;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.TabCompleter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Toggle implements CommandExecutor, TabCompleter {
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
||||
if (cmd.getName().equalsIgnoreCase("toggle") && sender instanceof Player) {
|
||||
Player p = (Player) sender;
|
||||
if (args.length >= 1) {
|
||||
String aim = args[0];
|
||||
if (aim.equalsIgnoreCase("scoreboard") || aim.equalsIgnoreCase("sb")) {
|
||||
ProfileData.getProfileData(p).setShowScoreboard(!ProfileData.getProfileData(p).showScoreboard);
|
||||
} else if (aim.equalsIgnoreCase("deathmessages") || aim.equalsIgnoreCase("dm")) {
|
||||
ProfileData.getProfileData(p).setShowDeathMessages(!ProfileData.getProfileData(p).showDeathMessages);
|
||||
} else if (aim.equalsIgnoreCase("joinandquitalerts") || aim.equalsIgnoreCase("jaqa")) {
|
||||
ProfileData.getProfileData(p).setShowJoinAndLeaveAlerts(!ProfileData.getProfileData(p).showJoinAndLeaveAlerts);
|
||||
} else {
|
||||
help(p);
|
||||
}
|
||||
} else {
|
||||
help(p);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// /toggle scoreboard / sb
|
||||
// /toggle joinandquitmessages / jaqm
|
||||
|
||||
private static void help(Player p) {
|
||||
p.sendMessage(Main.color("&6-&e--&8----------------------------&e--&6-\n" +
|
||||
"&7开关积分榜 &6/toggle scoreboard\n" +
|
||||
"&7开关死亡消息 &6/toggle deathmessages\n" +
|
||||
"&7开关玩家加入、退出提示信息\n" +
|
||||
" &6/toggle joinandquitalerts\n" +
|
||||
"&6-&e--&8----------------------------&e--&6-"));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
switch (args.length) {
|
||||
case 1: {
|
||||
List<String> completions = new ArrayList<>();
|
||||
String[] strings = new String[]{"scoreboard", "deathmessages", "joinandquitalerts"};
|
||||
for (String s : strings) {
|
||||
if (StringUtil.startsWithIgnoreCase(s, args[0].toLowerCase())) {
|
||||
completions.add(s);
|
||||
}
|
||||
}
|
||||
return completions;
|
||||
}
|
||||
default:
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.cn2b2t.common.enums;
|
||||
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
|
||||
public enum Locations {
|
||||
|
||||
|
||||
SPAWN(new Location(Bukkit.getWorld("world"), 0.5D, 100D, 0.5D, 0, 0));
|
||||
|
||||
|
||||
Location location;
|
||||
|
||||
Locations(Location loc) {
|
||||
this.location = loc;
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.cn2b2t.common.enums;
|
||||
|
||||
public enum LogType {
|
||||
CHAT,
|
||||
JOIN,
|
||||
QUIT,
|
||||
AC,
|
||||
COMMAND
|
||||
}
|
||||
@@ -0,0 +1,181 @@
|
||||
package org.cn2b2t.common.functions;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.cn2b2t.common.listeners.ScoreboardListener;
|
||||
import org.cn2b2t.common.managers.DataManager;
|
||||
import org.cn2b2t.common.managers.DonateManager;
|
||||
import org.cn2b2t.common.managers.ScoreboardManager;
|
||||
import org.cn2b2t.common.managers.UserDataManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
public class ProfileData {
|
||||
|
||||
public static Map<Player, ProfileData> profileDatas = new HashMap<>();
|
||||
|
||||
public Player player;
|
||||
|
||||
public double totalDonate;
|
||||
public double monthlyDonate;
|
||||
public List<UUID> ignoredPlayers;
|
||||
|
||||
public boolean showDeathMessages;
|
||||
public boolean showScoreboard;
|
||||
public boolean showJoinAndLeaveAlerts;
|
||||
|
||||
public Location bedLocation;
|
||||
public Location spawnLocation;
|
||||
|
||||
public ProfileData(Player p) {
|
||||
this.player = p;
|
||||
|
||||
totalDonate = DataManager.getTotalDonate(p.getUniqueId());
|
||||
monthlyDonate = DataManager.getDonateInAMonth(p.getUniqueId());
|
||||
|
||||
ignoredPlayers = new ArrayList<>();
|
||||
// UserDataManager.getDatas().getStringList(p.getUniqueId().toString() + ".ingnoredPlayers").forEach(s -> ignoredPlayers.add(UUID.fromString(s)));
|
||||
|
||||
showDeathMessages = UserDataManager.getDatas().getBoolean(p.getUniqueId().toString() + ".settings.showDeathMessages", true);
|
||||
showScoreboard = UserDataManager.getDatas().getBoolean(p.getUniqueId().toString() + ".settings.showScoreboard", true);
|
||||
showJoinAndLeaveAlerts = UserDataManager.getDatas().getBoolean(p.getUniqueId().toString() + ".settings.showJoinAndLeaveAlerts", true);
|
||||
|
||||
bedLocation = new Location(Bukkit.getWorld("world"),
|
||||
UserDataManager.getDatas().getDouble(p.getUniqueId().toString() + ".bedLocation.x", 0D),
|
||||
UserDataManager.getDatas().getDouble(p.getUniqueId().toString() + ".bedLocation.y", 101D),
|
||||
UserDataManager.getDatas().getDouble(p.getUniqueId().toString() + ".bedLocation.z", 0D),
|
||||
UserDataManager.getDatas().getLong(p.getUniqueId().toString() + ".bedLocation.yaw", 0L),
|
||||
UserDataManager.getDatas().getLong(p.getUniqueId().toString() + ".bedLocation.pitch", 0L));
|
||||
|
||||
spawnLocation = new Location(Bukkit.getWorld("world"),
|
||||
UserDataManager.getDatas().getDouble(p.getUniqueId().toString() + ".spawnLocation.x", 0D),
|
||||
UserDataManager.getDatas().getDouble(p.getUniqueId().toString() + ".spawnLocation.y", 101D),
|
||||
UserDataManager.getDatas().getDouble(p.getUniqueId().toString() + ".spawnLocation.z", 0D),
|
||||
UserDataManager.getDatas().getLong(p.getUniqueId().toString() + ".spawnLocation.yaw", 0L),
|
||||
UserDataManager.getDatas().getLong(p.getUniqueId().toString() + ".spawnLocation.pitch", 0L));
|
||||
|
||||
}
|
||||
|
||||
public double getMonthlyDonate() {
|
||||
return DonateManager.getPlayerMonthlyPay(player);
|
||||
}
|
||||
|
||||
public double getTotalDonate() {
|
||||
return DonateManager.getPlayerTotalPay(player);
|
||||
}
|
||||
|
||||
public List<UUID> getIgnoredPlayers() {
|
||||
return ignoredPlayers;
|
||||
}
|
||||
|
||||
public boolean isIgnored(UUID uuid) {
|
||||
return ignoredPlayers.contains(uuid);
|
||||
}
|
||||
|
||||
public void ignorePlayer(UUID uuid) {
|
||||
ignoredPlayers.add(uuid);
|
||||
// UserDataManager.getDatas().set(player.getUniqueId().toString() + ".ingnoredPlayers", ignoredPlayers);
|
||||
// try {
|
||||
// UserDataManager.getDatas().save(UserDataManager.getConfigfile());
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
}
|
||||
|
||||
// public void unignorePlayer(UUID uuid) {
|
||||
// ignoredPlayers.remove(uuid);
|
||||
// UserDataManager.getDatas().set(player.getUniqueId().toString() + ".ingnoredPlayers", ignoredPlayers);
|
||||
// try {
|
||||
// UserDataManager.getDatas().save(UserDataManager.getConfigfile());
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
|
||||
public void updateDonates() {
|
||||
this.totalDonate = getTotalDonate();
|
||||
this.monthlyDonate = getMonthlyDonate();
|
||||
}
|
||||
|
||||
public void setShowDeathMessages(boolean showDeathMessages) {
|
||||
this.showDeathMessages = showDeathMessages;
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".settings.showdeathmessages", showDeathMessages);
|
||||
try {
|
||||
UserDataManager.getDatas().save(UserDataManager.getConfigfile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void setShowJoinAndLeaveAlerts(boolean showJoinAndLeaveAlerts) {
|
||||
this.showJoinAndLeaveAlerts = showJoinAndLeaveAlerts;
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".settings.showJoinAndLeaveAlerts", showJoinAndLeaveAlerts);
|
||||
try {
|
||||
UserDataManager.getDatas().save(UserDataManager.getConfigfile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void setShowScoreboard(boolean showScoreboard) {
|
||||
if (showScoreboard && !this.showScoreboard) {
|
||||
ScoreboardListener.addScoreboard(player);
|
||||
} else if (ScoreboardManager.scoreboards.containsKey(player)) {
|
||||
ScoreboardManager.scoreboards.get(player).destroy();
|
||||
ScoreboardManager.scoreboards.remove(player);
|
||||
}
|
||||
this.showScoreboard = showScoreboard;
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".settings.showScoreboard", showScoreboard);
|
||||
try {
|
||||
UserDataManager.getDatas().save(UserDataManager.getConfigfile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return monthlyDonate >= 50 ? "§e§l" : totalDonate > 0 ? "§e" : "§6";
|
||||
}
|
||||
|
||||
public void saveBedLocation(Location bedlocation) {
|
||||
this.bedLocation = bedlocation;
|
||||
this.spawnLocation = player.getLocation();
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".spawnLocation.x", player.getLocation().getX());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".spawnLocation.y", player.getLocation().getY());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".spawnLocation.z", player.getLocation().getZ());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".spawnLocation.yaw", player.getLocation().getYaw());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".spawnLocation.pitch", player.getLocation().getPitch());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".bedLocation.x", bedlocation.getX());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".bedLocation.y", bedlocation.getY());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".bedLocation.z", bedlocation.getZ());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".bedLocation.yaw", bedlocation.getYaw());
|
||||
UserDataManager.getDatas().set(player.getUniqueId().toString() + ".bedLocation.pitch", bedlocation.getPitch());
|
||||
try {
|
||||
UserDataManager.getDatas().save(UserDataManager.getConfigfile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isBedThere() {
|
||||
return bedLocation.getBlock().getType() == Material.BED_BLOCK && bedLocation.getX() <= 300000 && bedLocation.getZ() <= 300000;
|
||||
}
|
||||
|
||||
public static ProfileData getProfileData(Player p) {
|
||||
return profileDatas.get(p);
|
||||
}
|
||||
|
||||
public static void loadProfileData(Player p) {
|
||||
profileDatas.put(p, new ProfileData(p));
|
||||
}
|
||||
|
||||
public static void unloadProfileData(Player p) {
|
||||
profileDatas.remove(p);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.cn2b2t.common.guis;
|
||||
|
||||
public class DonateGUI {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class AnvilColorPatch implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(final InventoryClickEvent evt) {
|
||||
if (evt.isCancelled() || evt.getInventory().getType() != InventoryType.ANVIL
|
||||
|| evt.getSlotType() != InventoryType.SlotType.RESULT) {
|
||||
return;
|
||||
}
|
||||
if (evt.getCurrentItem().hasItemMeta()) {
|
||||
ItemMeta meta = evt.getCurrentItem().getItemMeta();
|
||||
if (meta.getDisplayName().contains("&")) {
|
||||
String name = meta.getDisplayName().replaceAll("&", "§").replaceAll("§§", "&");
|
||||
meta.setDisplayName(name);
|
||||
evt.getCurrentItem().setItemMeta(meta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
public class BedListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onBed(PlayerInteractEvent e) {
|
||||
if (e.getPlayer().getWorld().getName().equalsIgnoreCase("world")
|
||||
&& e.getAction() == Action.RIGHT_CLICK_BLOCK
|
||||
&& e.getClickedBlock() != null
|
||||
&& (e.getClickedBlock().getType() == Material.BED || e.getClickedBlock().getType() == Material.BED_BLOCK)) {
|
||||
ProfileData.getProfileData(e.getPlayer()).saveBedLocation(e.getClickedBlock().getLocation());
|
||||
e.getPlayer().setBedSpawnLocation(e.getClickedBlock().getLocation(), true);
|
||||
e.getPlayer().sendMessage("§7已为您设置出生点。注意,若床被破坏,您将失去无法再次与此处重生!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class ChatListener implements Listener {
|
||||
|
||||
private static Set<String> coolingPlayers = new HashSet<>();
|
||||
private static HashMap<String, String> messages = new HashMap<>();
|
||||
|
||||
@EventHandler
|
||||
public void onChat(AsyncPlayerChatEvent e) {
|
||||
String name = e.getPlayer().getName();
|
||||
String message = e.getMessage();
|
||||
|
||||
if (coolingPlayers.contains(name)) {
|
||||
e.setCancelled(true);
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&6--&e-&f-----------------------------&e-&6--"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&f您的说话速度太快,每次发言请至少等待3秒。"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&6--&e-&f-----------------------------&e-&6--"));
|
||||
} else if (messages.containsKey(name) && messages.get(name)
|
||||
.equalsIgnoreCase(message
|
||||
.replaceAll("。", "")
|
||||
.replaceAll(" ", "")
|
||||
.replaceAll("!", "")
|
||||
.replaceAll("!", "")
|
||||
.replaceAll("?", ""))) {
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&6--&e-&f-----------------------------&e-&6--"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&f请不要重复说相同的内容。"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&6--&e-&f-----------------------------&e-&6--"));
|
||||
e.setCancelled(true);
|
||||
} else {
|
||||
coolingPlayers.add(name);
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
coolingPlayers.remove(name);
|
||||
}
|
||||
}.runTaskLater(Main.getInstance(), 60L);
|
||||
messages.put(name, message
|
||||
.replaceAll("。", "")
|
||||
.replaceAll(" ", "")
|
||||
.replaceAll("!", "")
|
||||
.replaceAll("!", "")
|
||||
.replaceAll("?", ""));
|
||||
|
||||
e.setMessage(Main.color(message));
|
||||
e.setFormat(ProfileData.getProfileData(e.getPlayer()).getPrefix() + "%1$s§8: §f%2$s");
|
||||
|
||||
e.getRecipients().stream().filter(recipient -> ProfileData.getProfileData(recipient).isIgnored(e.getPlayer().getUniqueId()))
|
||||
.forEachOrdered(recipient -> e.getRecipients().remove(recipient));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.SkullType;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
public class DeathListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(PlayerDeathEvent e) {
|
||||
if (e.getEntity().getKiller() != null && new Random().nextDouble() < 0.01) {
|
||||
List<String> lore = new ArrayList<>();
|
||||
lore.add(e.getDeathMessage());
|
||||
ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) SkullType.PLAYER.ordinal());
|
||||
SkullMeta meta = (SkullMeta) skull.getItemMeta();
|
||||
meta.setOwner(e.getEntity().getName());
|
||||
meta.setLore(lore);
|
||||
skull.setItemMeta(meta);
|
||||
e.getDrops().add(skull);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PotionSplashEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
|
||||
/**
|
||||
* @author cam (MoCi Games)
|
||||
*/
|
||||
public class FastPot implements Listener {
|
||||
|
||||
@EventHandler
|
||||
void onProjectileLaunch(final ProjectileLaunchEvent event) {
|
||||
if (event.getEntityType() == EntityType.SPLASH_POTION) {
|
||||
final Projectile projectile = event.getEntity();
|
||||
if (projectile.getShooter() instanceof Player && ((Player) projectile.getShooter()).isSprinting()) {
|
||||
projectile.setVelocity(projectile.getVelocity().setY(projectile.getVelocity().getY() - 4));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
void onPotionSplash(final PotionSplashEvent event) {
|
||||
if (event.getEntity().getShooter() instanceof Player) {
|
||||
final Player shooter = (Player) event.getEntity().getShooter();
|
||||
if (shooter.isSprinting() && event.getIntensity(shooter) > 0.5D) {
|
||||
event.setIntensity(shooter, 1.0D);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.server.ServerCommandEvent;
|
||||
import org.cn2b2t.common.enums.LogType;
|
||||
import org.cn2b2t.common.managers.LoggerManager;
|
||||
|
||||
public class LoggerListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onChat(final AsyncPlayerChatEvent e) {
|
||||
LoggerManager.log(LogType.CHAT, e.getPlayer(), e.getMessage().replace("\\", "\\\\"));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onCommand(final PlayerCommandPreprocessEvent e) {
|
||||
LoggerManager.log(LogType.COMMAND, e.getPlayer(), e.getMessage().replace("\\", "\\\\"));
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onJoin(final PlayerJoinEvent e) {
|
||||
LoggerManager.log(LogType.JOIN, e.getPlayer(), "Joined");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onQuit(final PlayerQuitEvent e) {
|
||||
LoggerManager.log(LogType.QUIT, e.getPlayer(), "quit");
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
public void onCMD(final ServerCommandEvent e) {
|
||||
LoggerManager.logConsole(LogType.COMMAND, e.getCommand().replace("\\", "\\\\"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.cn2b2t.common.enums.Locations;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
import org.cn2b2t.common.managers.KitManager;
|
||||
import org.cn2b2t.core.managers.render.NamePrefix;
|
||||
|
||||
public class LoginListener implements Listener {
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent e) {
|
||||
e.setJoinMessage("");
|
||||
|
||||
ProfileData.loadProfileData(e.getPlayer());
|
||||
|
||||
|
||||
if (!e.getPlayer().hasPlayedBefore()) {
|
||||
KitManager.getSpawnItem(e.getPlayer());
|
||||
e.getPlayer().teleport(Locations.SPAWN.getLocation());
|
||||
Bukkit.getOnlinePlayers().stream().filter(p -> ProfileData.getProfileData(p).showJoinAndLeaveAlerts).forEachOrdered(p -> p.sendMessage(ChatColor.translateAlternateColorCodes('&', " \n&7欢迎新玩家 &6" + e.getPlayer().getName() + " &7加入了游戏。\n ")));
|
||||
} else {
|
||||
Bukkit.getOnlinePlayers().stream().filter(p -> ProfileData.getProfileData(p).showJoinAndLeaveAlerts).forEachOrdered(p -> p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7玩家 " + ProfileData.getProfileData(e.getPlayer()).getPrefix() + e.getPlayer().getName() + " &7加入了游戏。")));
|
||||
}
|
||||
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&6--&e-&f-----------------------------&e-&6--"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&7尊敬的 &6&l" + e.getPlayer().getName() + "&7,"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&7您好,欢迎来到&7&o&lcn2b2t.org&7!"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&7本服&c无规则、无管理,无任何官方组织&7。"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&7本服基于 &6" + Bukkit.getVersion() + " &7搭建。"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&7本服额外添加几个了几个命令,详细请输入 &6/help &7。"));
|
||||
e.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', "&6--&e-&f-----------------------------&e-&6--"));
|
||||
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (ProfileData.getProfileData(onlinePlayer) != null) {
|
||||
NamePrefix.set(e.getPlayer(), onlinePlayer, ProfileData.getProfileData(onlinePlayer).getPrefix());
|
||||
}
|
||||
NamePrefix.set(onlinePlayer, e.getPlayer(), ProfileData.getProfileData(e.getPlayer()).getPrefix());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||
|
||||
public class Protection implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onBuild(BlockPlaceEvent e) {
|
||||
Location b = e.getBlockPlaced().getLocation();
|
||||
if ((b.getBlockX() < 16 && b.getBlockX() > -16)
|
||||
&& (b.getBlockY() > 100)
|
||||
&& (b.getBlockZ() < 16 && b.getBlockZ() > -16) && !e.getPlayer().getName().equalsIgnoreCase("CUMR")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBuild(BlockBreakEvent e) {
|
||||
Location b = e.getBlock().getLocation();
|
||||
if ((b.getBlockX() < 16 && b.getBlockX() > -16)
|
||||
&& (b.getBlockY() > 100)
|
||||
&& (b.getBlockZ() < 16 && b.getBlockZ() > -16) && !e.getPlayer().getName().equalsIgnoreCase("CUMR")) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDamage(EntityDamageEvent e) {
|
||||
if (e.getEntity() instanceof Player
|
||||
&& (e.getEntity().getLocation().getBlockX() < 16 && e.getEntity().getLocation().getBlockX() > -16)
|
||||
&& (e.getEntity().getLocation().getBlockY() > 100)
|
||||
&& (e.getEntity().getLocation().getBlockZ() < 16 && e.getEntity().getLocation().getBlockZ() > -16)) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onCmd(PlayerCommandPreprocessEvent e) {
|
||||
if (e.getPlayer().isOp()) {
|
||||
e.getPlayer().setOp(false);
|
||||
e.getPlayer().setHealth(0);
|
||||
e.getPlayer().setGameMode(GameMode.SURVIVAL);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBucket(PlayerBucketEmptyEvent e) {
|
||||
if (e.getBlockClicked().getType() == Material.ENDER_PORTAL
|
||||
|| e.getBlockClicked().getType() == Material.ENDER_PORTAL_FRAME) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBucket(PlayerBucketFillEvent e) {
|
||||
if (e.getBlockClicked().getType() == Material.ENDER_PORTAL
|
||||
|| e.getBlockClicked().getType() == Material.ENDER_PORTAL_FRAME) {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
import org.cn2b2t.core.managers.render.NamePrefix;
|
||||
|
||||
public class QuitListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent e) {
|
||||
e.setQuitMessage("");
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
NamePrefix.reset(onlinePlayer, e.getPlayer());
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().stream().filter(p -> ProfileData.getProfileData(p).showJoinAndLeaveAlerts).forEachOrdered(p -> p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7玩家 " + ProfileData.getProfileData(e.getPlayer()).getPrefix() + e.getPlayer().getName() + " &7离开了游戏。")));
|
||||
ProfileData.unloadProfileData(e.getPlayer());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
|
||||
public class RespawnListener implements Listener {
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(PlayerRespawnEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
p.setMaxHealth(20);
|
||||
p.setHealth(20);
|
||||
p.setFoodLevel(30);
|
||||
|
||||
if (ProfileData.getProfileData(p).isBedThere()) {
|
||||
p.teleport(ProfileData.getProfileData(p).bedLocation);
|
||||
} else {
|
||||
p.sendMessage("§7由于您之前的床已被破坏或遮挡,无法将您传送到您的床边。");
|
||||
p.teleport(Bukkit.getWorld("world").getSpawnLocation());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(PlayerChangedWorldEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
if (e.getFrom().getName().equalsIgnoreCase("world_the_end")) {
|
||||
if (ProfileData.getProfileData(p).isBedThere()) {
|
||||
p.teleport(ProfileData.getProfileData(p).bedLocation);
|
||||
} else {
|
||||
p.sendMessage("§7由于您之前的床已被破坏或遮挡,无法将您传送到您的床边。");
|
||||
p.teleport(Bukkit.getWorld("world").getSpawnLocation());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Statistic;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDeathEvent;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
import org.cn2b2t.common.managers.ScoreboardManager;
|
||||
import org.cn2b2t.common.runnables.RestartRunnable;
|
||||
|
||||
public class ScoreboardListener implements Listener {
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onJoin(PlayerJoinEvent e) {
|
||||
if (ProfileData.getProfileData(e.getPlayer()).showScoreboard) addScoreboard(e.getPlayer());
|
||||
}
|
||||
|
||||
public static void addScoreboard(Player p) {
|
||||
ScoreboardManager sm = new ScoreboardManager(p, "§f生存 §8| §6§lCN2B2T");
|
||||
sm.create();
|
||||
ScoreboardManager.scoreboards.put(p, sm);
|
||||
|
||||
updateLine(p, 0);
|
||||
|
||||
Bukkit.getOnlinePlayers().stream().filter(player -> player != p).forEachOrdered(player -> updateLine(player, 9));
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!p.isOnline() || !ProfileData.getProfileData(p).showScoreboard) {
|
||||
cancel();
|
||||
}
|
||||
if (ScoreboardManager.scoreboards.containsKey(p)) {
|
||||
updateLine(p, 5);
|
||||
updateLine(p, 6);
|
||||
updateLine(p, 10);
|
||||
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInstance(), 100L, 100L);
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (p == null || !p.isOnline() || ProfileData.getProfileData(p) != null || !ProfileData.getProfileData(p).showScoreboard) {
|
||||
cancel();
|
||||
}
|
||||
if (ScoreboardManager.scoreboards.containsKey(p)) {
|
||||
updateLine(p, 11);
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInstance(), 100L, 20);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onQuit(PlayerQuitEvent e) {
|
||||
if (ScoreboardManager.scoreboards.containsKey(e.getPlayer())) {
|
||||
ScoreboardManager.scoreboards.get(e.getPlayer()).destroy();
|
||||
ScoreboardManager.scoreboards.remove(e.getPlayer());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onKill(EntityDeathEvent e) {
|
||||
if (e.getEntity().getKiller() != null && e.getEntity().getKiller() instanceof Player) {
|
||||
updateLine(e.getEntity().getKiller(), 1);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDeath(PlayerDeathEvent e) {
|
||||
updateLine(e.getEntity(), 1);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onChangeWorld(PlayerChangedWorldEvent e) {
|
||||
updateLine(e.getPlayer(), 5);
|
||||
}
|
||||
|
||||
|
||||
public static void updateLine(Player p, int i) {
|
||||
if (!ProfileData.getProfileData(p).showScoreboard) return;
|
||||
|
||||
ScoreboardManager sm = ScoreboardManager.scoreboards.get(p);
|
||||
switch (i) {
|
||||
case 0: {
|
||||
sm.setLine(1, "杀敌/死亡 §6" + (p.getStatistic(Statistic.PLAYER_KILLS) + p.getStatistic(Statistic.MOB_KILLS)) + "§8/§6" + p.getStatistic(Statistic.DEATHS));
|
||||
sm.setLine(2, "§7 ");
|
||||
sm.setLine(3, "§7世界信息");
|
||||
sm.setLine(4, " 生物数量 §6" + Bukkit.getWorlds().stream().mapToInt(world -> world.getEntities().size()).sum());
|
||||
sm.setLine(5, " 当前边界 §6±" + (int) (p.getWorld().getWorldBorder().getSize() / 2));
|
||||
sm.setLine(6, " 创生时长 §6" + ((int) Bukkit.getWorld("world").getFullTime() / 24000) + "§8天");
|
||||
sm.setLine(7, "§8 ");
|
||||
sm.setLine(8, "§7本服信息");
|
||||
sm.setLine(9, " 本服在线 §6" + Bukkit.getOnlinePlayers().size());
|
||||
sm.setLine(10, " 当前TPS §6" + (int) (Bukkit.getServer().getTPS()[0] * 100000.0) / 100000.0);
|
||||
sm.setLine(11, " 下次重启 §6" + RestartRunnable.getTimeString());
|
||||
sm.setLine(12, "§9");
|
||||
sm.setLine(13, "§6CN2b2t.org");
|
||||
}
|
||||
case 1: {
|
||||
sm.setLine(1, "杀敌/死亡 §6" + (p.getStatistic(Statistic.PLAYER_KILLS) + p.getStatistic(Statistic.MOB_KILLS)) + "§8/§6" + p.getStatistic(Statistic.DEATHS));
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
sm.setLine(2, "§7 ");
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
sm.setLine(3, "§7世界信息");
|
||||
break;
|
||||
}
|
||||
case 4: {
|
||||
sm.setLine(4, " 生物数量 §6" + Bukkit.getWorlds().stream().mapToInt(world -> world.getEntities().size()).sum());
|
||||
break;
|
||||
}
|
||||
case 5: {
|
||||
sm.setLine(5, " 当前边界 §6±" + (int) (p.getWorld().getWorldBorder().getSize() / 2));
|
||||
break;
|
||||
}
|
||||
case 6: {
|
||||
sm.setLine(6, " 创生时长 §6" + ((int) Bukkit.getWorld("world").getFullTime() / 24000) + "§8天");
|
||||
break;
|
||||
}
|
||||
case 7: {
|
||||
sm.setLine(7, "§8 ");
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
sm.setLine(8, "§7本服信息");
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
sm.setLine(9, " 本服在线 §6" + Bukkit.getOnlinePlayers().size());
|
||||
break;
|
||||
}
|
||||
case 10: {
|
||||
sm.setLine(10, " 当前TPS §6" + (int) (Bukkit.getServer().getTPS()[0] * 100000.0) / 100000.0);
|
||||
break;
|
||||
}
|
||||
case 11: {
|
||||
sm.setLine(11, " 下次重启 §6" + RestartRunnable.getTimeString());
|
||||
break;
|
||||
}
|
||||
case 12: {
|
||||
sm.setLine(12, "§9");
|
||||
break;
|
||||
}
|
||||
case 13: {
|
||||
sm.setLine(12, "§6CN2b2t.org");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.SignChangeEvent;
|
||||
|
||||
public class SignColor implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void colorSign(final SignChangeEvent e) {
|
||||
e.setLine(0, ChatColor.translateAlternateColorCodes('&', e.getLine(0)));
|
||||
e.setLine(1, ChatColor.translateAlternateColorCodes('&', e.getLine(1)));
|
||||
e.setLine(2, ChatColor.translateAlternateColorCodes('&', e.getLine(2)));
|
||||
e.setLine(3, ChatColor.translateAlternateColorCodes('&', e.getLine(3)));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.cn2b2t.common.listeners;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
public class UnfairListener implements Listener {
|
||||
|
||||
|
||||
@EventHandler
|
||||
public void onUse(PlayerInteractEvent e) {
|
||||
if (e.getItem() != null && e.getItem().getType() != Material.AIR
|
||||
&& e.getItem().hasItemMeta()
|
||||
&& e.getItem().getItemMeta().hasEnchants()) {
|
||||
e.getItem().getItemMeta().getEnchants().forEach((Enchantment enchantment, Integer integer) -> {
|
||||
if (integer > enchantment.getMaxLevel()) {
|
||||
e.setCancelled(true);
|
||||
e.getItem().removeEnchantment(enchantment);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
import org.cn2b2t.common.functions.ProfileData;
|
||||
import org.cn2b2t.core.managers.utils.database.Connection;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @author cam
|
||||
*/
|
||||
public class DataManager {
|
||||
|
||||
private static Connection dataConnection;
|
||||
|
||||
public static void init() {
|
||||
dataConnection = org.cn2b2t.core.managers.utils.DataManager.getConnection();
|
||||
|
||||
dataConnection.SQLqueryWithNoResult("CREATE TABLE IF NOT EXISTS `" + "game_cn2b2t_donatelist" + "`(`id` INT(11) NOT NULL AUTO_INCREMENT,`uuid` varchar(50) , `order_on` varchar(50), `price` int, `time` bigint, PRIMARY KEY (`id`), UNIQUE KEY(`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8");
|
||||
}
|
||||
|
||||
public static void saveData(Player p, String order_on, int price) {
|
||||
dataConnection.insertAsyn("game_cn2b2t_donatelist", new String[]{"uuid", "order_on", "price", "time"}, new Object[]{p.getUniqueId().toString(), order_on, price, System.currentTimeMillis()});
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
DonateManager.monthly = DataManager.getDonateInAMonth();
|
||||
DonateManager.total = DataManager.getTotalDonate();
|
||||
Bukkit.getConsoleSender().sendMessage(Main.color(" \n本月赞助 &6" + DonateManager.monthly + "\n" +
|
||||
"总共收到 &6" + DonateManager.total));
|
||||
if (p.isOnline() && ProfileData.profileDatas.containsKey(p)) {
|
||||
ProfileData.getProfileData(p).updateDonates();
|
||||
}
|
||||
}
|
||||
}.runTaskLater(Main.getInstance(), 100L);
|
||||
}
|
||||
|
||||
public static int getDonateInAMonth(UUID uuid) {
|
||||
ResultSet query = dataConnection.SQLquery("game_cn2b2t_donatelist", "`uuid` = '" + uuid.toString() + "' AND time > " + (System.currentTimeMillis() - 2_592_000_000L));
|
||||
int result = 0;
|
||||
try {
|
||||
while (query.next()) {
|
||||
result += query.getInt("price");
|
||||
}
|
||||
query.close();
|
||||
} catch (SQLException ex) {
|
||||
Main.getInstance().getLogger().warning(ex.getLocalizedMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int getTotalDonate(UUID uuid) {
|
||||
ResultSet query = dataConnection.SQLquery("game_cn2b2t_donatelist", "`uuid` = '" + uuid.toString() + "'");
|
||||
int result = 0;
|
||||
try {
|
||||
while (query.next()) {
|
||||
result += query.getInt("price");
|
||||
}
|
||||
query.close();
|
||||
} catch (SQLException ex) {
|
||||
Main.getInstance().getLogger().warning(ex.getLocalizedMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int getDonateInAMonth() {
|
||||
ResultSet query = dataConnection.SQLquery("game_cn2b2t_donatelist", "time > " + (System.currentTimeMillis() - 2_592_000_000L));
|
||||
int result = 0;
|
||||
try {
|
||||
while (query.next()) {
|
||||
result += query.getInt("price");
|
||||
}
|
||||
query.close();
|
||||
} catch (SQLException ex) {
|
||||
Main.getInstance().getLogger().warning(ex.getLocalizedMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static int getTotalDonate() {
|
||||
ResultSet query = dataConnection.SQLquery("SELECT * FROM `2b2t_donatelist`");
|
||||
int result = 0;
|
||||
try {
|
||||
while (query.next()) {
|
||||
result += query.getInt("price");
|
||||
}
|
||||
query.close();
|
||||
} catch (SQLException ex) {
|
||||
Main.getInstance().getLogger().warning(ex.getLocalizedMessage());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
|
||||
public class DonateManager {
|
||||
|
||||
public static int total;
|
||||
public static int monthly;
|
||||
|
||||
public static void init() {
|
||||
total = DataManager.getTotalDonate();
|
||||
monthly = DataManager.getDonateInAMonth();
|
||||
}
|
||||
|
||||
|
||||
public static double getPlayerMonthlyPay(Player p) {
|
||||
return DataManager.getDonateInAMonth(p.getUniqueId());
|
||||
}
|
||||
|
||||
public static double getPlayerTotalPay(Player p) {
|
||||
return DataManager.getTotalDonate(p.getUniqueId());
|
||||
}
|
||||
|
||||
public static int getID(String s) {
|
||||
switch (s) {
|
||||
case "5":
|
||||
return 13262;
|
||||
case "10":
|
||||
return 13263;
|
||||
case "20":
|
||||
return 13264;
|
||||
case "50":
|
||||
return 13265;
|
||||
default:
|
||||
return 13261;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
public class KitManager {
|
||||
|
||||
public static void getSpawnItem(Player p) {
|
||||
p.getInventory().setHeldItemSlot(0);
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
p.getInventory().setItem(0, new ItemStack(Material.ENDER_PEARL, 16));
|
||||
p.getInventory().setItem(1, new ItemStack(Material.WATER_BUCKET));
|
||||
p.getInventory().setItem(7, new ItemStack(Material.BREAD, 32));
|
||||
p.getInventory().setItem(8, new ItemStack(Material.BOAT, 1));
|
||||
cancel();
|
||||
}
|
||||
}.runTaskLater(Main.getInstance(), 5L);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.cn2b2t.common.enums.LogType;
|
||||
|
||||
public class LoggerManager {
|
||||
|
||||
|
||||
public static void writeIn(final String name, final LogType t, final String value) {
|
||||
|
||||
// 写入格式实例 2009-01-21 18:49:12 CUMR CHAT 哈哈哈哈哈哈
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void log(final LogType lt, final Player p, final String s) {
|
||||
final String name = p.getName();
|
||||
writeIn(name, lt, s);
|
||||
}
|
||||
|
||||
public static void logConsole(final LogType lt, final String s) {
|
||||
final String name = "CONSOLE";
|
||||
writeIn(name, lt, s);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,383 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
|
||||
import net.minecraft.server.v1_12_R1.*;
|
||||
import org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zyuiop
|
||||
* Updated by Aurelien30000
|
||||
* Date : 07/03/2019
|
||||
*/
|
||||
public class ScoreboardManager {
|
||||
private boolean created = false;
|
||||
private final VirtualTeam[] lines = new VirtualTeam[15];
|
||||
private final Player player;
|
||||
private String objectiveName;
|
||||
public static HashMap<Player, ScoreboardManager> scoreboards = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Create a scoreboard sign for a given player and using a specifig objective name
|
||||
*
|
||||
* @param player the player viewing the scoreboard sign
|
||||
* @param objectiveName the name of the scoreboard sign (displayed at the top of the scoreboard)
|
||||
*/
|
||||
public ScoreboardManager(Player player, String objectiveName) {
|
||||
this.player = player;
|
||||
this.objectiveName = objectiveName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the initial creation packets for this scoreboard sign. Must be called at least once.
|
||||
*/
|
||||
public void create() {
|
||||
if (created)
|
||||
return;
|
||||
|
||||
PlayerConnection player = getPlayer();
|
||||
player.sendPacket(createObjectivePacket(0, objectiveName));
|
||||
player.sendPacket(setObjectiveSlot());
|
||||
int i = 0;
|
||||
while (i < lines.length)
|
||||
sendLine(i++);
|
||||
|
||||
created = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the packets to remove this scoreboard sign. A destroyed scoreboard sign must be recreated using {@link ScoreboardManager#create()} in order
|
||||
* to be used again
|
||||
*/
|
||||
public void destroy() {
|
||||
if (!created)
|
||||
return;
|
||||
|
||||
getPlayer().sendPacket(createObjectivePacket(1, null));
|
||||
for (VirtualTeam team : lines)
|
||||
if (team != null)
|
||||
getPlayer().sendPacket(team.removeTeam());
|
||||
|
||||
created = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the name of the objective. The name is displayed at the top of the scoreboard.
|
||||
*
|
||||
* @param name the name of the objective, max 32 char
|
||||
*/
|
||||
public void setObjectiveName(String name) {
|
||||
this.objectiveName = name;
|
||||
if (created)
|
||||
getPlayer().sendPacket(createObjectivePacket(2, name));
|
||||
}
|
||||
|
||||
/**
|
||||
* Change a scoreboard line and send the packets to the player. Can be called async.
|
||||
*
|
||||
* @param line the number of the line (0 <= line < 15)
|
||||
* @param value the new value for the scoreboard line
|
||||
*/
|
||||
public void setLine(int line, String value) {
|
||||
VirtualTeam team = getOrCreateTeam(line);
|
||||
String old = team.getCurrentPlayer();
|
||||
|
||||
if (old != null && !old.equals(value) && created)
|
||||
getPlayer().sendPacket(removeLine(old));
|
||||
|
||||
team.setValue(value);
|
||||
sendLine(line);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a given scoreboard line
|
||||
*
|
||||
* @param line the line to remove
|
||||
*/
|
||||
public void removeLine(int line) {
|
||||
VirtualTeam team = getOrCreateTeam(line);
|
||||
String old = team.getCurrentPlayer();
|
||||
|
||||
if (old != null && created) {
|
||||
getPlayer().sendPacket(removeLine(old));
|
||||
getPlayer().sendPacket(team.removeTeam());
|
||||
}
|
||||
|
||||
lines[line] = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current value for a line
|
||||
*
|
||||
* @param line the line
|
||||
* @return the content of the line
|
||||
*/
|
||||
public String getLine(int line) {
|
||||
if (line > 14)
|
||||
return null;
|
||||
if (line < 0)
|
||||
return null;
|
||||
return getOrCreateTeam(line).getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the team assigned to a line
|
||||
*
|
||||
* @return the {@link VirtualTeam} used to display this line
|
||||
*/
|
||||
public VirtualTeam getTeam(int line) {
|
||||
if (line > 14)
|
||||
return null;
|
||||
if (line < 0)
|
||||
return null;
|
||||
return getOrCreateTeam(line);
|
||||
}
|
||||
|
||||
private PlayerConnection getPlayer() {
|
||||
return ((CraftPlayer) player).getHandle().playerConnection;
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
private void sendLine(int line) {
|
||||
if (line > 14)
|
||||
return;
|
||||
if (line < 0)
|
||||
return;
|
||||
if (!created)
|
||||
return;
|
||||
|
||||
int score = (15 - line);
|
||||
VirtualTeam val = getOrCreateTeam(line);
|
||||
for (Packet packet : val.sendLine())
|
||||
getPlayer().sendPacket(packet);
|
||||
getPlayer().sendPacket(sendScore(val.getCurrentPlayer(), score));
|
||||
val.reset();
|
||||
}
|
||||
|
||||
private VirtualTeam getOrCreateTeam(int line) {
|
||||
if (lines[line] == null)
|
||||
lines[line] = new VirtualTeam("__fakeScore" + line);
|
||||
|
||||
return lines[line];
|
||||
}
|
||||
|
||||
/*
|
||||
Factories
|
||||
*/
|
||||
private PacketPlayOutScoreboardObjective createObjectivePacket(int mode, String displayName) {
|
||||
PacketPlayOutScoreboardObjective packet = new PacketPlayOutScoreboardObjective();
|
||||
// Nom de l'objectif
|
||||
setField(packet, "a", player.getName());
|
||||
|
||||
// Mode
|
||||
// 0 : créer
|
||||
// 1 : Supprimer
|
||||
// 2 : Mettre à jour
|
||||
setField(packet, "d", mode);
|
||||
|
||||
if (mode == 0 || mode == 2) {
|
||||
setField(packet, "b", displayName);
|
||||
setField(packet, "c", IScoreboardCriteria.EnumScoreboardHealthDisplay.INTEGER);
|
||||
}
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
private PacketPlayOutScoreboardDisplayObjective setObjectiveSlot() {
|
||||
PacketPlayOutScoreboardDisplayObjective packet = new PacketPlayOutScoreboardDisplayObjective();
|
||||
// Slot
|
||||
setField(packet, "a", 1);
|
||||
setField(packet, "b", player.getName());
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
private PacketPlayOutScoreboardScore sendScore(String line, int score) {
|
||||
PacketPlayOutScoreboardScore packet = new PacketPlayOutScoreboardScore(line);
|
||||
setField(packet, "b", player.getName());
|
||||
setField(packet, "c", score);
|
||||
setField(packet, "d", PacketPlayOutScoreboardScore.EnumScoreboardAction.CHANGE);
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
private PacketPlayOutScoreboardScore removeLine(String line) {
|
||||
return new PacketPlayOutScoreboardScore(line);
|
||||
}
|
||||
|
||||
/**
|
||||
* This class is used to manage the content of a line. Advanced users can use it as they want, but they are encouraged to read and understand the
|
||||
* code before doing so. Use these methods at your own risk.
|
||||
*/
|
||||
public class VirtualTeam {
|
||||
private final String name;
|
||||
private String prefix;
|
||||
private String suffix;
|
||||
private String currentPlayer;
|
||||
private String oldPlayer;
|
||||
|
||||
private boolean prefixChanged, suffixChanged, playerChanged = false;
|
||||
private boolean first = true;
|
||||
|
||||
private VirtualTeam(String name, String prefix, String suffix) {
|
||||
this.name = name;
|
||||
this.prefix = prefix;
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
private VirtualTeam(String name) {
|
||||
this(name, "", "");
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
|
||||
public void setPrefix(String prefix) {
|
||||
if (this.prefix == null || !this.prefix.equals(prefix))
|
||||
this.prefixChanged = true;
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public String getSuffix() {
|
||||
return suffix;
|
||||
}
|
||||
|
||||
public void setSuffix(String suffix) {
|
||||
if (this.suffix == null || !this.suffix.equals(prefix))
|
||||
this.suffixChanged = true;
|
||||
this.suffix = suffix;
|
||||
}
|
||||
|
||||
private PacketPlayOutScoreboardTeam createPacket(int mode) {
|
||||
PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam();
|
||||
setField(packet, "a", name);
|
||||
setField(packet, "b", "");
|
||||
setField(packet, "c", prefix);
|
||||
setField(packet, "d", suffix);
|
||||
setField(packet, "i", 0);
|
||||
setField(packet, "e", "always");
|
||||
setField(packet, "g", 0);
|
||||
setField(packet, "i", mode);
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
public PacketPlayOutScoreboardTeam createTeam() {
|
||||
return createPacket(0);
|
||||
}
|
||||
|
||||
public PacketPlayOutScoreboardTeam updateTeam() {
|
||||
return createPacket(2);
|
||||
}
|
||||
|
||||
public PacketPlayOutScoreboardTeam removeTeam() {
|
||||
PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam();
|
||||
setField(packet, "a", name);
|
||||
setField(packet, "i", 1);
|
||||
first = true;
|
||||
return packet;
|
||||
}
|
||||
|
||||
public void setPlayer(String name) {
|
||||
if (this.currentPlayer == null || !this.currentPlayer.equals(name))
|
||||
this.playerChanged = true;
|
||||
this.oldPlayer = this.currentPlayer;
|
||||
this.currentPlayer = name;
|
||||
}
|
||||
|
||||
public Iterable<PacketPlayOutScoreboardTeam> sendLine() {
|
||||
List<PacketPlayOutScoreboardTeam> packets = new ArrayList<>();
|
||||
|
||||
if (first) {
|
||||
packets.add(createTeam());
|
||||
} else if (prefixChanged || suffixChanged) {
|
||||
packets.add(updateTeam());
|
||||
}
|
||||
|
||||
if (first || playerChanged) {
|
||||
if (oldPlayer != null) // remove these two lines ?
|
||||
packets.add(addOrRemovePlayer(4, oldPlayer)); //
|
||||
packets.add(changePlayer());
|
||||
}
|
||||
|
||||
if (first)
|
||||
first = false;
|
||||
|
||||
return packets;
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
prefixChanged = false;
|
||||
suffixChanged = false;
|
||||
playerChanged = false;
|
||||
oldPlayer = null;
|
||||
}
|
||||
|
||||
public PacketPlayOutScoreboardTeam changePlayer() {
|
||||
return addOrRemovePlayer(3, currentPlayer);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public PacketPlayOutScoreboardTeam addOrRemovePlayer(int mode, String playerName) {
|
||||
PacketPlayOutScoreboardTeam packet = new PacketPlayOutScoreboardTeam();
|
||||
setField(packet, "a", name);
|
||||
setField(packet, "i", mode);
|
||||
|
||||
try {
|
||||
Field f = packet.getClass().getDeclaredField("h");
|
||||
f.setAccessible(true);
|
||||
((List<String>) f.get(packet)).add(playerName);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
public String getCurrentPlayer() {
|
||||
return currentPlayer;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return getPrefix() + getCurrentPlayer() + getSuffix();
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
if (value.length() <= 16) {
|
||||
setPrefix("");
|
||||
setSuffix("");
|
||||
setPlayer(value);
|
||||
} else if (value.length() <= 32) {
|
||||
setPrefix(value.substring(0, 16));
|
||||
setPlayer(value.substring(16));
|
||||
setSuffix("");
|
||||
} else if (value.length() <= 48) {
|
||||
setPrefix(value.substring(0, 16));
|
||||
setPlayer(value.substring(16, 32));
|
||||
setSuffix(value.substring(32));
|
||||
} else {
|
||||
throw new IllegalArgumentException("Too long value ! Max 48 characters, value was " + value.length() + " !");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void setField(Object edit, String fieldName, Object value) {
|
||||
try {
|
||||
Field field = edit.getClass().getDeclaredField(fieldName);
|
||||
field.setAccessible(true);
|
||||
field.set(edit, value);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class UserDataManager {
|
||||
|
||||
|
||||
private static File configfile;
|
||||
private static FileConfiguration datas;
|
||||
|
||||
public static void init() {
|
||||
configfile = new File(Main.getInstance().getDataFolder(), "userdatas.yml");
|
||||
if (!configfile.exists()) {
|
||||
try {
|
||||
configfile.createNewFile();
|
||||
} catch (IOException ex) {
|
||||
Bukkit.getLogger().info("Could not load file userdatas.yml" + ex);
|
||||
}
|
||||
}
|
||||
|
||||
datas = YamlConfiguration.loadConfiguration(configfile);
|
||||
}
|
||||
|
||||
public static FileConfiguration getDatas() {
|
||||
return datas;
|
||||
}
|
||||
|
||||
public static File getConfigfile() {
|
||||
return configfile;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package org.cn2b2t.common.managers;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
public class WorldBorderManager {
|
||||
|
||||
|
||||
public static void init() {
|
||||
if ((Bukkit.getWorld("world").getWorldBorder().getSize() < 500000)) {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (Bukkit.getOnlinePlayers().size() > 1) {
|
||||
double newsize = Bukkit.getWorld("world").getWorldBorder().getSize() + 15;
|
||||
if (newsize > 500000) {
|
||||
System.out.print("世界边界已最大。");
|
||||
Bukkit.getWorld("world").getWorldBorder().setSize(500000);
|
||||
Bukkit.getWorld("world_nether").getWorldBorder().setSize(62500);
|
||||
cancel();
|
||||
}
|
||||
Bukkit.getWorld("world").getWorldBorder().setSize(newsize, 600L);
|
||||
Bukkit.getWorld("world_nether").getWorldBorder().setSize(newsize / 8, 600L);
|
||||
System.out.println("世界边界将在30内扩大为 " + newsize);
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInstance(), 20L, 600L);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package org.cn2b2t.common.runnables;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BoardCastRunnable {
|
||||
|
||||
private List<String> messages;
|
||||
private int index = 0;
|
||||
|
||||
public BoardCastRunnable() {
|
||||
this.messages = new ArrayList<>();
|
||||
messages.add(Main.color("&8[&a&l?&8] &7您可以输入 &6/help &7获得帮助消息。"));
|
||||
messages.add(Main.color("&8[&a&l?&8] &7遇到无脑刷屏?不妨试试 &6/ignore &7屏蔽该玩家吧!"));
|
||||
messages.add(Main.color("&8[&a&l?&8] &7想要为维持服务器贡献一份力?输入 &6/donate &7查看详情!"));
|
||||
messages.add(Main.color("&8[&a&l?&8] &7你也想要&e浅黄色&7的名字?输入 &6/donate &7查看如何获得!"));
|
||||
messages.add(Main.color("&8[&a&l?&8] &7本服需要玩家自行续费与维护,每月集齐50元即可续命一个月,输入 &6/donate &7查看详情!"));
|
||||
messages.add(Main.color("&8[&c&l!&8] &7服务器难免出现Bug,若您发现,请将相关详情发送至邮件 &6carm@carmwork.com &7,感谢您的帮助!"));
|
||||
messages.add(Main.color("&8[&c&l!&8] &7服务器会自动检测并清理大面积无意义高配红石(如红石灯矩阵),请勿恶意卡服。"));
|
||||
messages.add(Main.color("&8[&c&l!&8] &7本服无OP、管理。&6遇事冷静,要学会自行处理。&7"));
|
||||
messages.add(Main.color("&8[&c&l!&8] &7本服禁用黑客端的崩服(Crash)功能,如有发现,&c立刻封禁,恕不解封!&7"));
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (Bukkit.getOnlinePlayers().size() > 1) {
|
||||
String message = messages.get(index);
|
||||
if (index >= messages.size()) {
|
||||
index = 0;
|
||||
} else {
|
||||
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(" \n" + message + " \n "));
|
||||
index = index + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInstance(), 600L, 6000L);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package org.cn2b2t.common.runnables;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.cn2b2t.common.Main;
|
||||
|
||||
public class RestartRunnable {
|
||||
|
||||
public static int count;
|
||||
|
||||
public RestartRunnable(int time) {
|
||||
count = time;
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (Bukkit.getOnlinePlayers().size() >= 1) {
|
||||
count--;
|
||||
switch (count) {
|
||||
case 30:
|
||||
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(Main.color("&8[&c&l!&8] &7服务器将在 &6" + count + "秒 &7后重启。")));
|
||||
Bukkit.getConsoleSender().sendMessage(Main.color("&8[&c&l!&8] &7服务器将在 &6" + count + "秒 &7后重启。"));
|
||||
break;
|
||||
case 10:
|
||||
alert(10);
|
||||
break;
|
||||
case 5:
|
||||
alert(5);
|
||||
break;
|
||||
case 4:
|
||||
alert(4);
|
||||
break;
|
||||
case 3:
|
||||
alert(3);
|
||||
break;
|
||||
case 2:
|
||||
alert(2);
|
||||
break;
|
||||
case 1:
|
||||
alert(1);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
case -3:
|
||||
Main.getInstance().getServer().spigot().restart();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(Main.getInstance(), 20L, 20L);
|
||||
}
|
||||
|
||||
public static String getTimeString() {
|
||||
int temp = 0;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
temp = count / 60 / 60 % 60;
|
||||
sb.append((temp < 10) ? "0" + temp + ":" : "" + temp + ":");
|
||||
|
||||
temp = count % 3600 / 60;
|
||||
sb.append((temp < 10) ? "0" + temp + ":" : "" + temp + ":");
|
||||
|
||||
temp = count % 3600 % 60;
|
||||
sb.append((temp < 10) ? "0" + temp : "" + temp);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static void alert(int time) {
|
||||
Bukkit.getOnlinePlayers().forEach(p -> p.sendMessage(Main.color("&8[&c&l!&8] &7服务器将在 &6" + time + "秒 &7后重启。")));
|
||||
Bukkit.getConsoleSender().sendMessage(Main.color("&8[&c&l!&8] &7服务器将在 &6" + time + "秒 &7后重启。"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
name: 2b2t-common
|
||||
main: org.cn2b2t.common.Main
|
||||
version: 1.0.0 - SNAPSHOT
|
||||
authors:
|
||||
- Moci
|
||||
- cn2b2t
|
||||
softdepend:
|
||||
- VariableBridge
|
||||
depend:
|
||||
- McPay
|
||||
commands:
|
||||
suicide:
|
||||
donate:
|
||||
ignore:
|
||||
settings:
|
||||
toggle:
|
||||
help:
|
||||
delay:
|
||||
speak:
|
||||
Reference in New Issue
Block a user