diff --git a/.vscode/settings.json b/.vscode/settings.json index c5f3f6b..0be1c0c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "java.configuration.updateBuildConfiguration": "interactive" + "java.configuration.updateBuildConfiguration": "automatic", + "java.compile.nullAnalysis.mode": "automatic" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 369b6e2..a61259c 100644 --- a/pom.xml +++ b/pom.xml @@ -69,10 +69,10 @@ sonatype https://oss.sonatype.org/content/groups/public/ - - gitlab-maven - https://Gitlab.Softwarerat.com/api/v4/projects/16/packages/maven - + + gitea + http://heimserver.local:36107/api/packages/minecraft/maven + @@ -88,13 +88,11 @@ 1.20.4-R0.1-SNAPSHOT provided - - com.softwarerat - GameAPI - 1.6.4-SNAPSHOT - system - ${project.basedir}/GameAPI-1.6.4-SNAPSHOT.jar - + + com.softwarerat + GameAPI + 1.6.4-SNAPSHOT + org.jetbrains annotations diff --git a/src/main/java/de/softwarerat/lobby/IPrefix.java b/src/main/java/de/softwarerat/lobby/IPrefix.java index cde9d3f..85fffbf 100644 --- a/src/main/java/de/softwarerat/lobby/IPrefix.java +++ b/src/main/java/de/softwarerat/lobby/IPrefix.java @@ -1,9 +1,10 @@ package de.softwarerat.lobby; -import com.softwarerat.API.prefix.PrefixAPI; import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import com.softwarerat.API.data.prefix.PrefixAPI; + public class IPrefix { PrefixAPI prefixAPI; diff --git a/src/main/java/de/softwarerat/lobby/Lobby.java b/src/main/java/de/softwarerat/lobby/Lobby.java index 9fac75c..4b81bc6 100644 --- a/src/main/java/de/softwarerat/lobby/Lobby.java +++ b/src/main/java/de/softwarerat/lobby/Lobby.java @@ -1,28 +1,27 @@ package de.softwarerat.lobby; -import com.softwarerat.API.data.GameData; -import com.softwarerat.API.listener.BuildBreakListener; -import com.softwarerat.API.listener.LobbyInventoryClickListener; -import com.softwarerat.API.prefix.PrefixAPI; -import com.softwarerat.GameAPI; -import de.softwarerat.lobby.commands.FlyCommand; -import de.softwarerat.lobby.listener.JoinListener; -import de.softwarerat.lobby.listener.QuitListener; -import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.command.CommandExecutor; import org.bukkit.entity.Player; -import org.bukkit.event.Listener; -import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.scoreboard.Scoreboard; import org.jetbrains.annotations.NotNull; +import com.softwarerat.API.data.GameData; +import com.softwarerat.API.data.prefix.PrefixAPI; +import com.softwarerat.API.event.listener.BuildBreakListener; +import com.softwarerat.API.event.listener.LobbyInventoryClickListener; +import com.softwarerat.GameAPI; + +import de.softwarerat.lobby.commands.FlyCommand; +import de.softwarerat.lobby.listener.JoinListener; +import de.softwarerat.lobby.listener.QuitListener; +import lombok.Getter; + public final class Lobby extends JavaPlugin implements PluginMessageListener { GameAPI gameAPI; @Getter @@ -84,4 +83,10 @@ public final class Lobby extends JavaPlugin implements PluginMessageListener { public void onPluginMessageReceived(@NotNull String s, @NotNull Player player, @NotNull byte[] bytes) { } + + + public static Lobby getInstance() { + return JavaPlugin.getPlugin(Lobby.class); + + } } diff --git a/src/main/java/de/softwarerat/lobby/listener/JoinListener.java b/src/main/java/de/softwarerat/lobby/listener/JoinListener.java index 0967be0..e5b1360 100644 --- a/src/main/java/de/softwarerat/lobby/listener/JoinListener.java +++ b/src/main/java/de/softwarerat/lobby/listener/JoinListener.java @@ -1,16 +1,23 @@ package de.softwarerat.lobby.listener; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +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.player.PlayerJoinEvent; + import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import com.softwarerat.API.builder.SpigotInventory; import com.softwarerat.API.builder.SpigotItem; + import de.softwarerat.lobby.IPrefix; import de.softwarerat.lobby.Lobby; -import org.bukkit.*; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; +import de.softwarerat.lobby.scoreboard.LobbyScoreboard; public class JoinListener implements Listener { @@ -41,6 +48,9 @@ public class JoinListener implements Listener { playerInventory.setSlot(new SpigotItem(Material.GRASS_BLOCK).setName(ChatColor.BLUE.toString() + ChatColor.BOLD + "Bauserver Joinen " + ChatColor.RESET + ChatColor.GRAY + "(Click)").build(), 4, (click) -> { sendPlayer(player, "build-1"); }); + + + new LobbyScoreboard(player); } public void sendPlayer(Player player, String targetServer) { diff --git a/src/main/java/de/softwarerat/lobby/scoreboard/EntryName.java b/src/main/java/de/softwarerat/lobby/scoreboard/EntryName.java new file mode 100644 index 0000000..4db0616 --- /dev/null +++ b/src/main/java/de/softwarerat/lobby/scoreboard/EntryName.java @@ -0,0 +1,30 @@ +package de.softwarerat.lobby.scoreboard; + +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/softwarerat/lobby/scoreboard/LobbyScoreboard.java b/src/main/java/de/softwarerat/lobby/scoreboard/LobbyScoreboard.java new file mode 100644 index 0000000..2929e27 --- /dev/null +++ b/src/main/java/de/softwarerat/lobby/scoreboard/LobbyScoreboard.java @@ -0,0 +1,70 @@ +package de.softwarerat.lobby.scoreboard; + +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import de.softwarerat.lobby.Lobby; + +public class LobbyScoreboard extends ScoreboardBuilder { + + private int socialId; + + public LobbyScoreboard(Player player) { + super(player, ChatColor.DARK_PURPLE.toString() + ChatColor.BOLD + " twitch.tv/DerBanko "); + socialId = 0; + + run(); + } + + @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() { + + } + + private void run() { + new BukkitRunnable() { + @Override + public void run() { + + switch (socialId) { + case 0: + setScore(ChatColor.AQUA + "softwarerat.com", 3); + break; + case 1: + setScore(ChatColor.DARK_PURPLE + "twitch.tv/zlavra", 3); + break; + case 2: + setScore(ChatColor.DARK_RED + "@zlavra:matrix.org", 3); + break; + } + + socialId++; + + if(socialId >= 3) { + socialId = 0; + } + + } + }.runTaskTimer(Lobby.getInstance(), 20, 20); + } +} diff --git a/src/main/java/de/softwarerat/lobby/scoreboard/ScoreboardBuilder.java b/src/main/java/de/softwarerat/lobby/scoreboard/ScoreboardBuilder.java new file mode 100644 index 0000000..6ae4e40 --- /dev/null +++ b/src/main/java/de/softwarerat/lobby/scoreboard/ScoreboardBuilder.java @@ -0,0 +1,114 @@ +package de.softwarerat.lobby.scoreboard; + +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()); + } +}