3rd time's the charm

Personal stats operational
All in constructor tho -> needs refactoring to support onJoin listener
This commit is contained in:
Luka de Vrij committed 2023-12-03 23:57:34 +01:00
1 parent 6b5bcd227a
commit df962e2f49
11 files changed
+158 -224

No files matched your search

+9
View File
@@ -107,6 +107,10 @@
<id>sk89q-repo</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
</repositories>
<dependencies>
@@ -116,6 +120,11 @@
<version>1.20.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.catcoder</groupId>
<artifactId>bukkit-sidebar</artifactId>
<version>6.2.5-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
@@ -34,7 +34,7 @@ public class InfoCommand extends Subcommand{
&bPureKitPvP - version 1.2
&6SpigotMC: &ohttps://bit.ly/PureKitPvPSpigotMC
&6Github: &ohttps://github.com/LifelessNerd/PureKitPvP
&6Developer: &ohttps://twitter.com/NerdLifeless
&6Developer: &ohttps://twitter.com/LukaDeVrij
&rIf you have any problems, bugs or glitches, please do reach out to me via any of the links above.
""";
player.sendMessage(ChatColor.translateAlternateColorCodes('&', message));
@@ -31,7 +31,9 @@ public final class PureKitPvP extends JavaPlugin {
@Override
public void onEnable() {
PerkFireHandler.plugin = this; //idk? fixes npe?
PluginGetter.plugin = this; //this is dumb but used in >= 2 instances
// Has to be at the start because other class constructors use it
getConfig().options().copyDefaults();
saveDefaultConfig();
@@ -76,9 +78,6 @@ public final class PureKitPvP extends JavaPlugin {
LanguageConfig.save();
LanguageConfig.loadLanguage();
SidebarScoreboard sidebar = new SidebarScoreboard(this);
// sidebar.enableSidebar();
getCommand("getkit").setExecutor(new GetKit(this));
getCommand("kit").setExecutor(new KitsGUI(this));
getCommand("perk").setExecutor(new PerkCommand(this));
@@ -105,6 +104,7 @@ public final class PureKitPvP extends JavaPlugin {
getServer().getPluginManager().registerEvents(new BlockRemover(this), this);
getServer().getPluginManager().registerEvents(new KitPreviewListener(this), this);
getServer().getPluginManager().registerEvents(new ProjectileRemover(this), this);
getServer().getPluginManager().registerEvents(new SidebarScoreboard(this), this);
getServer().getPluginManager().registerEvents(new CosmeticsGUIListener(this), this);
getServer().getPluginManager().registerEvents(new KillEffect(this), this);
@@ -112,8 +112,9 @@ public final class PureKitPvP extends JavaPlugin {
getServer().getPluginManager().registerEvents(new ProjectileTrail(this), this);
getServer().getPluginManager().registerEvents(new ProjectileTrailInventory(this), this);
getServer().getPluginManager().registerEvents(new KillMessageInventory(this), this);
PerkFireHandler.plugin = this; //idk? fixes npe?
PluginGetter.plugin = this; //this is dumb but used in >= 2 instances
getLogger().info("Enabled PureKitPvP");
getLogger().warning("Plugin active in world " + getConfig().getString("world") + ". To change this, see the config.");
@@ -159,10 +159,7 @@ public class DeathHandler implements Listener {
String credit = ""; // Needed for later
boolean playerInvolved = true;
//Check who should get credit
System.out.println(damageData.lastPlayerDamager);
System.out.println(damageData.lastOtherDamager);
System.out.println(1);
if (damageData.lastPlayerDamager == null && damageData.lastOtherDamager != null){
//This means the player was completely killed by environment, no player killer
// Except when the killer is a zombie of a player -> handled down below
@@ -168,6 +168,7 @@ public class LanguageConfig {
defaults.put("EVENTS_PICKUP_DESC", "Killed players drop their stuff!");
defaults.put("EVENTS_JUGGERNAUT_DESC", "Team up to kill the Juggernaut!");
defaults.put("SCOREBOARD_MAIN_TITLE", "&6PureKitPvP");
defaults.put("SCOREBOARD_PERSONAL_TITLE", "&6Personal Stats");
defaults.put("SCOREBOARD_PERSONAL_KILLSTREAK", " &7Killstreak: &b%VALUE%");
defaults.put("SCOREBOARD_PERSONAL_KILLS", " &7Kills: &b%VALUE%");
@@ -1,15 +0,0 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.scoreboard.Scoreboard;
public abstract class AbstractObjective{
Plugin plugin;
public AbstractObjective(Plugin plugin) {
this.plugin = plugin;
}
public abstract void show(Scoreboard scoreboard, Player player);
}
@@ -1,47 +0,0 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.scoreboard.*;
import java.util.ArrayList;
import java.util.List;
public class GlobalObjective extends AbstractObjective {
public GlobalObjective(Plugin plugin) {
super(plugin);
}
@Override
public void show(Scoreboard scoreboard, Player player) { // Player is unused in this class - not in the brother class
scoreboard.clearSlot(DisplaySlot.SIDEBAR);
Objective globalStats = scoreboard.getObjective("GlobalStats");
globalStats.setDisplaySlot(DisplaySlot.SIDEBAR);
List<String> enabled = plugin.getConfig().getStringList("global-stats-components");
Score score = globalStats.getScore("Global Stats");
score.setScore(15);
for (String component : enabled) {
switch(component){
case "Killstreak":
Score tempScore = globalStats.getScore(" Killstreak Leaders");
tempScore.setScore(14);
tempScore = globalStats.getScore(" LifelessNerd - 12");
tempScore.setScore(13);
}
}
}
private ArrayList<Double> createLeaderboard(String key){
return null;
}
}
@@ -0,0 +1,20 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import me.catcoder.sidebar.Sidebar;
import net.kyori.adventure.text.Component;
import org.bukkit.plugin.Plugin;
public class GlobalStats {
Plugin plugin;
public GlobalStats(Plugin plugin) {
this.plugin = plugin;
}
public static void appendLines(Sidebar<Component> sidebar){
}
}
@@ -1,83 +0,0 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import me.lifelessnerd.purekitpvp.files.LanguageConfig;
import me.lifelessnerd.purekitpvp.files.PlayerStatsConfig;
import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
import me.lifelessnerd.purekitpvp.utils.DoubleUtils;
import me.lifelessnerd.purekitpvp.utils.PlayerUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.scoreboard.*;
import java.util.List;
import java.util.Set;
public class PersonalObjective extends AbstractObjective {
public PersonalObjective(Plugin plugin) {
super(plugin);
}
@Override
public void show(Scoreboard scoreboard, Player player) {
LegacyComponentSerializer serializer = LegacyComponentSerializer.legacy('§');
scoreboard.clearSlot(DisplaySlot.SIDEBAR);
Objective personalStats = scoreboard.getObjective("PersonalStats");
personalStats.setDisplaySlot(DisplaySlot.SIDEBAR);
List<String> enabled = plugin.getConfig().getStringList("personal-stats-components");
Score score = personalStats.getScore(serializer.serialize(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_TITLE")));
score.setScore(15);
int max = 14;
for (String component : enabled) {
int value;
String scoreName;
Score tempScore;
switch(component){
case "Killstreak":
value = PlayerStatsConfig.get().getInt(player.getName() + ".killstreak");
scoreName = serializer.serialize(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_KILLSTREAK").
replaceText(ComponentUtils.replaceConfig("%VALUE%", String.valueOf(value))));
tempScore = personalStats.getScore(scoreName);
tempScore.setScore(max);
break;
case "Kills":
value = PlayerStatsConfig.get().getInt(player.getName() + ".kills");
scoreName = serializer.serialize(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_KILLS").
replaceText(ComponentUtils.replaceConfig("%VALUE%", String.valueOf(value))));
tempScore = personalStats.getScore(scoreName);
tempScore.setScore(max);
break;
case "Deaths":
value = PlayerStatsConfig.get().getInt(player.getName() + ".deaths");
scoreName = serializer.serialize(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_DEATHS").
replaceText(ComponentUtils.replaceConfig("%VALUE%", String.valueOf(value))));
tempScore = personalStats.getScore(scoreName);
tempScore.setScore(max);
break;
case "KD":
double doubleValue = DoubleUtils.round(PlayerStatsConfig.get().getDouble(player.getName() + ".kdratio"), 2);
scoreName = serializer.serialize(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_KD").
replaceText(ComponentUtils.replaceConfig("%VALUE%", String.valueOf(doubleValue))));
tempScore = personalStats.getScore(scoreName);
tempScore.setScore(max);
break;
case "Level":
value = PlayerStatsConfig.get().getInt(player.getName() + ".level");
scoreName = serializer.serialize(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_LEVEL").
replaceText(ComponentUtils.replaceConfig("%VALUE%", String.valueOf(value))));
tempScore = personalStats.getScore(scoreName);
tempScore.setScore(max);
break;
}
max--;
}
}
}
@@ -0,0 +1,23 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import me.catcoder.sidebar.Sidebar;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.util.ArrayList;
public class PersonalStats {
Plugin plugin;
public PersonalStats(Plugin plugin) {
this.plugin = plugin;
}
public static void updateBoard(Sidebar<Component> sidebar, Player player){
}
}
@@ -1,91 +1,119 @@
package me.lifelessnerd.purekitpvp.scoreboards;
import me.catcoder.sidebar.ProtocolSidebar;
import me.catcoder.sidebar.Sidebar;
import me.catcoder.sidebar.pager.SidebarPager;
import me.lifelessnerd.purekitpvp.files.LanguageConfig;
import me.lifelessnerd.purekitpvp.files.PlayerStatsConfig;
import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
import me.lifelessnerd.purekitpvp.utils.DoubleUtils;
import me.lifelessnerd.purekitpvp.utils.PlayerUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.Bukkit;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.scoreboard.*;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class SidebarScoreboard {
public class SidebarScoreboard implements Listener {
Plugin plugin;
Scoreboard scoreboard;
int currentPage;
List<String> enabled;
public SidebarScoreboard(Plugin plugin) {
this.plugin = plugin;
this.currentPage = 1;
this.enabled = plugin.getConfig().getStringList("enabled-slides");
}
public void enableSidebar(){
ScoreboardManager manager = Bukkit.getScoreboardManager();
Scoreboard scoreboard = manager.getNewScoreboard();
this.scoreboard = scoreboard;
List<AbstractObjective> objectives = new ArrayList<>();
objectives.add(new PersonalObjective(plugin));
objectives.add(new GlobalObjective(plugin));
// Start task with this
BukkitTask runnable = new BukkitRunnable() {
@Override
public void run() {
swapScoreboard(scoreboard, objectives);
}
}.runTaskTimer(plugin, 0, plugin.getConfig().getLong("scoreboard-period") * 20);
}
private void swapScoreboard(Scoreboard scoreboard, List<AbstractObjective> objectives){
Set<Player> players = PlayerUtils.getPlayersInWorld(plugin.getConfig().getString("world"));
LegacyComponentSerializer serializer = LegacyComponentSerializer.legacyAmpersand();
Component displayName = serializer.deserialize(plugin.getConfig().getString("scoreboard-title"));
List<String> enabled = plugin.getConfig().getStringList("enabled-slides");
try {
scoreboard.getObjective("PersonalStats").unregister();
scoreboard.getObjective("GlobalStats").unregister();
} catch (Exception e){
ArrayList<Sidebar<Component>> enabledSidebars = new ArrayList<>();
Component titleComponent = LanguageConfig.lang.get("SCOREBOARD_MAIN_TITLE");
for (String panel : enabled) {
switch(panel){
case "GlobalStats":
Sidebar<Component> globalStatsSidebar = ProtocolSidebar.newAdventureSidebar(titleComponent, plugin);
fillGlobalSidebar(globalStatsSidebar);
enabledSidebars.add(globalStatsSidebar);
break;
case "PersonalStats":
Sidebar<Component> personalStatsSidebar = ProtocolSidebar.newAdventureSidebar(titleComponent, plugin);
fillPersonalSidebar(personalStatsSidebar);
enabledSidebars.add(personalStatsSidebar);
break;
}
}
SidebarPager<Component> pager = new SidebarPager<>(
enabledSidebars, plugin.getConfig().getInt("scoreboard-period") * 20L, plugin);
Objective personalStats = scoreboard.registerNewObjective("PersonalStats", Criteria.DUMMY, displayName);
Objective globalStats = scoreboard.registerNewObjective("GlobalStats", Criteria.DUMMY, displayName);
// add page status line to all sidebars in pager
pager.addPageLine((page, maxPage, sidebar) ->
sidebar.addLine(Component.text("Page " + page + "/" + maxPage).color(NamedTextColor.GREEN)));
switch (currentPage % enabled.size()){
case 0:
for (Player player: players) {
objectives.get(0).show(scoreboard, player);
player.setScoreboard(scoreboard);
}
break;
case 1:
objectives.get(1).show(scoreboard, null);
break;
for (Player player : players){
pager.show(player);
}
currentPage++;
}
private void fillGlobalSidebar(Sidebar<Component> sidebar) {
int places = plugin.getConfig().getInt("global-stats-place-amount");
List<String> enabled = plugin.getConfig().getStringList("global-stats-components");
sidebar.updateLinesPeriodically(0, 20);
}
private void fillPersonalSidebar(Sidebar<Component> sidebar){
sidebar.addLine(LanguageConfig.lang.get("SCOREBOARD_PERSONAL_TITLE"));
List<String> enabled = plugin.getConfig().getStringList("personal-stats-components");
for (String component : enabled){
switch(component){
case "Killstreak":
sidebar.addUpdatableLine(
(player) -> LanguageConfig.lang.get("SCOREBOARD_PERSONAL_KILLSTREAK").
replaceText(ComponentUtils.replaceConfig("%VALUE%",
PlayerStatsConfig.get().getString(player.getName() + ".killstreak")))
);
break;
case "Kills":
sidebar.addUpdatableLine(
(player) -> LanguageConfig.lang.get("SCOREBOARD_PERSONAL_KILLS").
replaceText(ComponentUtils.replaceConfig("%VALUE%",
PlayerStatsConfig.get().getString(player.getName() + ".kills")))
);
break;
case "Deaths":
sidebar.addUpdatableLine(
(player) -> LanguageConfig.lang.get("SCOREBOARD_PERSONAL_DEATHS").
replaceText(ComponentUtils.replaceConfig("%VALUE%",
PlayerStatsConfig.get().getString(player.getName() + ".deaths")))
);
break;
case "KD":
sidebar.addUpdatableLine(
(player) -> LanguageConfig.lang.get("SCOREBOARD_PERSONAL_KD").
replaceText(ComponentUtils.replaceConfig("%VALUE%",
String.valueOf(DoubleUtils.round(
PlayerStatsConfig.get().getDouble(player.getName() + ".kdratio"), 2)
)))
);
break;
case "Level":
sidebar.addUpdatableLine(
(player) -> LanguageConfig.lang.get("SCOREBOARD_PERSONAL_LEVEL").
replaceText(ComponentUtils.replaceConfig("%VALUE%",
PlayerStatsConfig.get().getString(player.getName() + ".level")))
);
break;
}
}
sidebar.updateLinesPeriodically(0, 20);
}
}