3rd time's the charm
Personal stats operational All in constructor tho -> needs refactoring to support onJoin listener
This commit is contained in:
1 parent
6b5bcd227a
commit
df962e2f49
11 files changed
+158
-224
No files matched your search
@@ -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.");
|
||||
|
||||
+1
-4
@@ -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%");
|
||||
|
||||
-15
@@ -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);
|
||||
}
|
||||
-47
@@ -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){
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
-83
@@ -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){
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
+96
-68
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user