diff --git a/src/main/java/de/spaffel/clans/Clans.java b/src/main/java/de/spaffel/clans/Clans.java index b573952..8c9f47c 100644 --- a/src/main/java/de/spaffel/clans/Clans.java +++ b/src/main/java/de/spaffel/clans/Clans.java @@ -12,6 +12,7 @@ import de.spaffel.clans.commands.joinclan; import de.spaffel.clans.commands.setclancolor; import de.spaffel.clans.commands.utils.jsonutil; import de.spaffel.clans.commands.utils.apicheck; +import de.spaffel.clans.commands.utils.Tab; import org.bukkit.entity.Player; import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; @@ -23,6 +24,7 @@ import java.io.IOException; import org.json.simple.JSONObject; import java.io.File; +import org.bukkit.plugin.Plugin; import java.util.Set; import java.util.stream.Collectors; import net.luckperms.api.LuckPermsProvider; @@ -51,11 +53,37 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; import org.bukkit.util.StringUtil; +import java.util.concurrent.CopyOnWriteArrayList; +import net.luckperms.api.LuckPerms; +import net.luckperms.api.LuckPermsProvider; +import net.luckperms.api.model.group.Group; +import net.luckperms.api.model.user.User; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; + +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; public final class Clans extends JavaPlugin implements Listener { + + + public LuckPerms lp; + static Clans plugin; + + public static Clans getPlugin() { + return plugin; + } + @Override public void onEnable() { + if(apicheck.doGet() == true){ // Plugin startup logic getServer().getPluginManager().registerEvents(this, this); @@ -73,8 +101,55 @@ public final class Clans extends JavaPlugin implements Listener { getCommand("leaveclan").setExecutor(new leaveclan()); getCommand("joinclan").setExecutor(new joinclan()); getCommand("setclancolor").setExecutor(new setclancolor()); + plugin = this; + PluginManager pm = Bukkit.getPluginManager(); + Tab.update(); + super.onEnable(); }} + public static void update() { + + + } + + public static String getFromID(int id){ + String c = ""; + CopyOnWriteArrayList abc = new CopyOnWriteArrayList<>(); + abc.add("A"); + abc.add("C"); + abc.add("D"); + abc.add("E"); + abc.add("F"); + abc.add("G"); + abc.add("H"); + abc.add("I"); + abc.add("J"); + abc.add("K"); + abc.add("L"); + abc.add("M"); + abc.add("N"); + abc.add("O"); + abc.add("P"); + abc.add("Q"); + abc.add("R"); + abc.add("S"); + abc.add("T"); + abc.add("U"); + abc.add("V"); + abc.add("W"); + abc.add("X"); + abc.add("Y"); + abc.add("Z"); + CopyOnWriteArrayList copy = new CopyOnWriteArrayList<>(); + for (String lul : abc) { + for (String s : abc) + copy.add("A" + lul + s); + } + c = copy.get(id); + return c; + } + + @Override public void onDisable() { // Plugin shutdown logic @@ -82,10 +157,13 @@ public final class Clans extends JavaPlugin implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { + if(apicheck.doGet() == true) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "say Helllooow!" + event.getPlayer().getName()); jsonutil.createPlayer(toString().valueOf(event.getPlayer().getUniqueId())); jsonutil.createuuidentry(toString().valueOf(event.getPlayer().getUniqueId()), event.getPlayer().getName()); + Tab.setPlayerteam(event.getPlayer(), toString().valueOf(event.getPlayer().getUniqueId()), event.getPlayer().getName() ); + Clans.update(); } } diff --git a/src/main/java/de/spaffel/clans/commands/joinclan.java b/src/main/java/de/spaffel/clans/commands/joinclan.java index 3365229..821e3a6 100644 --- a/src/main/java/de/spaffel/clans/commands/joinclan.java +++ b/src/main/java/de/spaffel/clans/commands/joinclan.java @@ -1,10 +1,13 @@ package de.spaffel.clans.commands; +import de.spaffel.clans.Clans; +import de.spaffel.clans.commands.utils.Tab; import de.spaffel.clans.commands.utils.jsonutil; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class joinclan implements CommandExecutor { @Override @@ -21,6 +24,8 @@ public class joinclan implements CommandExecutor { if (ans == "done"){ sender.sendMessage(ChatColor.GREEN + "You have joined the Clan " + name + "!"); + Tab.setPlayerteam((Player) sender, String.valueOf(jsonutil.getUUID(playername)), sender.getName()); + Clans.update(); }else{ sender.sendMessage(ChatColor.RED + "Wrong Password"); diff --git a/src/main/java/de/spaffel/clans/commands/leaveclan.java b/src/main/java/de/spaffel/clans/commands/leaveclan.java index 6a34f89..7556323 100644 --- a/src/main/java/de/spaffel/clans/commands/leaveclan.java +++ b/src/main/java/de/spaffel/clans/commands/leaveclan.java @@ -1,10 +1,13 @@ package de.spaffel.clans.commands; +import de.spaffel.clans.Clans; +import de.spaffel.clans.commands.utils.Tab; import de.spaffel.clans.commands.utils.jsonutil; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class leaveclan implements CommandExecutor { @Override @@ -14,6 +17,8 @@ public class leaveclan implements CommandExecutor { String uuid = leaderuuid; jsonutil.setClanId(uuid, "0"); sender.sendMessage(ChatColor.GREEN + "You have left the Clan!"); + Tab.setPlayerteam((Player) sender, String.valueOf(jsonutil.getUUID(playername)), sender.getName()); + Clans.update(); return false; } } diff --git a/src/main/java/de/spaffel/clans/commands/newclan.java b/src/main/java/de/spaffel/clans/commands/newclan.java index b1dc1ee..8ca2423 100644 --- a/src/main/java/de/spaffel/clans/commands/newclan.java +++ b/src/main/java/de/spaffel/clans/commands/newclan.java @@ -2,6 +2,8 @@ package de.spaffel.clans.commands; import java.io.IOException; import java.net.URL; +import de.spaffel.clans.Clans; +import de.spaffel.clans.commands.utils.Tab; import de.spaffel.clans.commands.utils.jsonutil; import org.bukkit.ChatColor; import org.bukkit.Bukkit; @@ -10,14 +12,21 @@ import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; public class newclan implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - + if(toString().valueOf(args[0]).length() > 12){ + sender.sendMessage(ChatColor.RED + "Clanname cant be longer than 12 Charakters"); + }else{ if (args.length == 2){ String name = toString().valueOf(args[0]); + + + + String password = toString().valueOf(args[1]); String playername = sender.getName(); String leaderuuid = String.valueOf(jsonutil.getUUID(playername)); @@ -25,6 +34,8 @@ public class newclan implements CommandExecutor { if (ans == "done"){ sender.sendMessage(ChatColor.GREEN + "You have created the Clan " + name + "!"); + Tab.setPlayerteam((Player) sender, String.valueOf(jsonutil.getUUID(playername)), sender.getName()); + Clans.update(); return true; }else{ @@ -36,7 +47,7 @@ public class newclan implements CommandExecutor { }else { sender.sendMessage(ChatColor.RED + "You need to write /newclan clanname password"); - } + }} return false; } } diff --git a/src/main/java/de/spaffel/clans/commands/utils/EntryName.java b/src/main/java/de/spaffel/clans/commands/utils/EntryName.java new file mode 100644 index 0000000..6f9db0f --- /dev/null +++ b/src/main/java/de/spaffel/clans/commands/utils/EntryName.java @@ -0,0 +1,31 @@ +package de.spaffel.clans.commands.utils; + +import org.bukkit.ChatColor; + +public enum EntryName { + + ENTRY_0(0, ChatColor.DARK_PURPLE.toString()), + ENTRY_1(1, ChatColor.DARK_GRAY.toString()), + ENTRY_2(2, ChatColor.BOLD.toString()), + ENTRY_3(3, ChatColor.DARK_RED.toString()), + ENTRY_4(4, ChatColor.GRAY.toString()), + ENTRY_5(5, ChatColor.DARK_GREEN.toString()), + ENTRY_6(6, ChatColor.LIGHT_PURPLE.toString()), + ENTRY_7(7, ChatColor.UNDERLINE.toString()); + + private final int entry; + private final String entryName; + + EntryName(int entry, String entryName) { + this.entry = entry; + this.entryName = entryName; + } + + public int getEntry() { + return entry; + } + + public String getEntryName() { + return entryName; + } +} diff --git a/src/main/java/de/spaffel/clans/commands/utils/Lag.java b/src/main/java/de/spaffel/clans/commands/utils/Lag.java new file mode 100644 index 0000000..3fb9d7d --- /dev/null +++ b/src/main/java/de/spaffel/clans/commands/utils/Lag.java @@ -0,0 +1,42 @@ +package de.spaffel.clans.commands.utils; + +public class Lag + implements Runnable +{ + public static int TICK_COUNT= 0; + public static long[] TICKS= new long[600]; + public static long LAST_TICK= 0L; + + public static double getTPS() + { + return getTPS(100); + } + + public static double getTPS(int ticks) + { + if (TICK_COUNT< ticks) { + return 20.0D; + } + int target = (TICK_COUNT- 1 - ticks) % TICKS.length; + long elapsed = System.currentTimeMillis() - TICKS[target]; + + return ticks / (elapsed / 1000.0D); + } + + public static long getElapsed(int tickID) + { + if (TICK_COUNT- tickID >= TICKS.length) + { + } + + long time = TICKS[(tickID % TICKS.length)]; + return System.currentTimeMillis() - time; + } + + public void run() + { + TICKS[(TICK_COUNT% TICKS.length)] = System.currentTimeMillis(); + + TICK_COUNT+= 1; + } +} diff --git a/src/main/java/de/spaffel/clans/commands/utils/ScoreboardBuilder.java b/src/main/java/de/spaffel/clans/commands/utils/ScoreboardBuilder.java new file mode 100644 index 0000000..24cf3d9 --- /dev/null +++ b/src/main/java/de/spaffel/clans/commands/utils/ScoreboardBuilder.java @@ -0,0 +1,114 @@ +package de.spaffel.clans.commands.utils; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; + +public abstract class ScoreboardBuilder { + + protected final Scoreboard scoreboard; + protected final Objective objective; + + protected final Player player; + + public ScoreboardBuilder(Player player, String displayName) { + this.player = player; + + if(player.getScoreboard().equals(Bukkit.getScoreboardManager().getMainScoreboard())) { + player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard()); + } + + this.scoreboard = player.getScoreboard(); + + if(this.scoreboard.getObjective("display") != null) { + this.scoreboard.getObjective("display").unregister(); + } + + this.objective = this.scoreboard.registerNewObjective("display", "dummy", displayName); + this.objective.setDisplaySlot(DisplaySlot.SIDEBAR); + + createScoreboard(); + } + + public abstract void createScoreboard(); + + public abstract void update(); + + public void setDisplayName(String displayName) { + this.objective.setDisplayName(displayName); + } + + public void setScore(String content, int score) { + Team team = getTeamByScore(score); + + if(team == null) { + return; + } + + team.setPrefix(content); + showScore(score); + } + + public void removeScore(int score) { + hideScore(score); + } + + private EntryName getEntryNameByScore(int score) { + for(EntryName name : EntryName.values()) { + if(score == name.getEntry()) { + return name; + } + } + + return null; + } + + private Team getTeamByScore(int score) { + EntryName name = getEntryNameByScore(score); + + if(name == null) { + return null; + } + + Team team = scoreboard.getEntryTeam(name.getEntryName()); + + if(team != null) { + return team; + } + + team = scoreboard.registerNewTeam(name.name()); + team.addEntry(name.getEntryName()); + return team; + } + + private void showScore(int score) { + EntryName name = getEntryNameByScore(score); + + if(name == null) { + return; + } + + if(objective.getScore(name.getEntryName()).isScoreSet()) { + return; + } + + objective.getScore(name.getEntryName()).setScore(score); + } + + private void hideScore(int score) { + EntryName name = getEntryNameByScore(score); + + if(name == null) { + return; + } + + if(!objective.getScore(name.getEntryName()).isScoreSet()) { + return; + } + + scoreboard.resetScores(name.getEntryName()); + } +} diff --git a/src/main/java/de/spaffel/clans/commands/utils/TPSUtil.java b/src/main/java/de/spaffel/clans/commands/utils/TPSUtil.java new file mode 100644 index 0000000..a04ea13 --- /dev/null +++ b/src/main/java/de/spaffel/clans/commands/utils/TPSUtil.java @@ -0,0 +1,19 @@ +package de.spaffel.clans.commands.utils; +import de.spaffel.clans.commands.utils.Lag; +import org.bukkit.Bukkit; +import org.bukkit.Server; +import org.bukkit.ChatColor; + +public class TPSUtil { + public static String getTPS() { + StringBuilder sb = new StringBuilder((String) ""); + sb.append(format((Lag.getTPS()))); + return sb.substring(0, sb.length()); + } + + private static String format(double tps) { + return String.valueOf(String.valueOf(( + (tps > 18.0D) ? ChatColor.GREEN : ((tps > 16.0D) ? ChatColor.YELLOW : ChatColor.RED)).toString())) + ( + (tps > 20.0D) ? "*" : "") + Math.min(Math.round(tps * 100.0D) / 100.0D, 20.0D); + } +} diff --git a/src/main/java/de/spaffel/clans/commands/utils/Tab.java b/src/main/java/de/spaffel/clans/commands/utils/Tab.java new file mode 100644 index 0000000..bd99fa1 --- /dev/null +++ b/src/main/java/de/spaffel/clans/commands/utils/Tab.java @@ -0,0 +1,84 @@ +package de.spaffel.clans.commands.utils; +import de.spaffel.clans.Clans; +import org.bukkit.Bukkit; + +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.ScoreboardManager; +import org.bukkit.scoreboard.Team; + +public class Tab { + public static Thread t; + + public static void setTab() { + Clans.update(); + for (Player p : Bukkit.getOnlinePlayers()) + setTab(p); + } + + public static void update() { + t = new Thread(new Runnable() { + public void run() { + while (true) { + try { + while (true) { + Thread.sleep(10000L); + Tab.setTab(); + } + + } catch (InterruptedException interruptedException) {} + } + } + }); + t.start(); + } + + public static void setTab(Player p) { + + + + + + String line = "§7"; + for (int i = 0; i != 12; i++) + line = String.valueOf(line) + "-"; + String head = "\n §a<§7" + line + "[§dSpaffel-Smp§7]" + line + "§a>\n" + "§eOnline§7: §a"+ ( + + Bukkit.getOnlinePlayers().size() + "§7/§a" + + Bukkit.getMaxPlayers() + "\n" + "§eTPS§7: §a"+ TPSUtil.getTPS() + "\n"); + String foot = "\n§e/vote §afür Belohnungen!\n§e/Discord §aUmauf den Discord zu gelangen!\n<§7" + + line + "[§dSpaffel-Smp§7]" + line + "§a>\n"; + p.setPlayerListHeaderFooter(head, foot); + + + } + public static void setPlayerteam(Player player, String uuid, String Playername){ + System.out.println("neue ranksetzen"); + Scoreboard scoreboard = Bukkit.getScoreboardManager().getNewScoreboard(); + + for(Player p : Bukkit.getOnlinePlayers()) { + System.out.println("testoooo"); + //String uuid = jsonutil.getUUID(Playername); + String Clanname = p.getDisplayName(); + System.out.println("n:" + p.getDisplayName()); + Team clan = scoreboard.getTeam(Clanname); + + + if(clan == null){ + clan = scoreboard.registerNewTeam(Clanname); + clan.setPrefix(jsonutil.getPrefix(String.valueOf(p.getUniqueId()))); + } + clan.setPrefix(jsonutil.getPrefix(String.valueOf(p.getUniqueId()))); + scoreboard.getTeam(Clanname).addPlayer((OfflinePlayer)p.getPlayer()); + + + + } + for(Player p : Bukkit.getOnlinePlayers()) { + p.setScoreboard(scoreboard); + } + + + } +} diff --git a/src/main/java/de/spaffel/clans/commands/utils/TestScoreboard.java b/src/main/java/de/spaffel/clans/commands/utils/TestScoreboard.java new file mode 100644 index 0000000..d8f6979 --- /dev/null +++ b/src/main/java/de/spaffel/clans/commands/utils/TestScoreboard.java @@ -0,0 +1,45 @@ +package de.spaffel.clans.commands.utils; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + + +public class TestScoreboard extends ScoreboardBuilder { + + private int socialId; + + public TestScoreboard(Player player) { + super(player, ChatColor.DARK_PURPLE.toString() + ChatColor.BOLD + " twitch.tv/DerBanko "); + socialId = 0; + + + } + + @Override + public void createScoreboard() { + setScore("test", 8); + setScore(ChatColor.DARK_GRAY.toString(), 7); + setScore(ChatColor.GRAY + "Dein Rang" + ChatColor.DARK_GRAY + ":", 6); + + if(player.isOp()) { + setScore(ChatColor.RED + "Operator", 5); + } else { + setScore(ChatColor.GRAY + "Spieler", 5); + } + + setScore(ChatColor.GRAY.toString(), 4); + setScore(ChatColor.AQUA + "twitter.com/DerBanko", 3); + setScore(ChatColor.RED.toString(), 2); + setScore(ChatColor.RED + player.getAddress().getHostName(), 1); + setScore(ChatColor.AQUA.toString(), 0); + } + + @Override + public void update() { + + } + + +} + diff --git a/src/main/java/de/spaffel/clans/commands/utils/jsonutil.java b/src/main/java/de/spaffel/clans/commands/utils/jsonutil.java index ac8868d..a744d08 100644 --- a/src/main/java/de/spaffel/clans/commands/utils/jsonutil.java +++ b/src/main/java/de/spaffel/clans/commands/utils/jsonutil.java @@ -97,7 +97,7 @@ public class jsonutil extends JavaPlugin{ }else{ String Clanname = getClanName(Clanid); String color = getClanColor(Clanid); - String prefix = color + "§l[" + Clanname + "] §f§r"; + String prefix = color + "[" + Clanname + "] §f§r"; return prefix; }