diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java index 86bb158..3ad6e9f 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java @@ -4,6 +4,7 @@ import me.lifelessnerd.purekitpvp.combathandlers.leveling.PlayerLevelChat; import me.lifelessnerd.purekitpvp.combathandlers.killhandler.Suicide; import me.lifelessnerd.purekitpvp.combathandlers.mobhandler.OnPlayerSpawnMob; import me.lifelessnerd.purekitpvp.combathandlers.killhandler.DeathHandler; +import me.lifelessnerd.purekitpvp.globalevents.events.DoubleHealthListeners; import me.lifelessnerd.purekitpvp.kitCommand.KitPreviewListener; import me.lifelessnerd.purekitpvp.scoreboards.SidebarScoreboard; import me.lifelessnerd.purekitpvp.cosmetics.cosmeticsCommand.CosmeticsCommand; @@ -78,6 +79,8 @@ public final class PureKitPvP extends JavaPlugin { LanguageConfig.save(); LanguageConfig.loadLanguage(); + SidebarScoreboard scoreboard = new SidebarScoreboard(this); + getCommand("getkit").setExecutor(new GetKit(this)); getCommand("kit").setExecutor(new KitsGUI(this)); getCommand("perk").setExecutor(new PerkCommand(this)); @@ -104,7 +107,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 DoubleHealthListeners(this), this); getServer().getPluginManager().registerEvents(new CosmeticsGUIListener(this), this); getServer().getPluginManager().registerEvents(new KillEffect(this), this); diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/ReloadPlugin.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/ReloadPlugin.java index 166a888..dd2dbdd 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/ReloadPlugin.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/ReloadPlugin.java @@ -1,6 +1,7 @@ package me.lifelessnerd.purekitpvp; import me.lifelessnerd.purekitpvp.files.*; +import me.lifelessnerd.purekitpvp.scoreboards.SidebarScoreboard; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.entity.Player; @@ -66,6 +67,8 @@ public class ReloadPlugin extends Subcommand { plugin.saveConfig(); plugin.saveDefaultConfig(); + SidebarScoreboard scoreboard = new SidebarScoreboard(plugin); // Make new Scoreboard instance + player.sendMessage(Component.text("Plugin configs were reloaded!")); player.sendMessage(Component.text("Please note that settings relating to events are not reloaded." + "\nIf you have made such changes, a server reload/restart is required.").color(NamedTextColor.GRAY)); diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/KillEffect.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/KillEffect.java index a31c78f..cda900d 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/KillEffect.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/KillEffect.java @@ -17,6 +17,7 @@ import org.bukkit.plugin.Plugin; import org.bukkit.scheduler.BukkitRunnable; import javax.swing.text.html.HTMLDocument; +import java.util.Random; import java.util.logging.Level; public class KillEffect implements Listener { @@ -99,14 +100,16 @@ public class KillEffect implements Listener { } public static void bloodExplosion(Location location) { - + Random rnd = new Random(); for (float i = 0.5f; i < 1.8f; i += 0.1) { + float rndFloat = rnd.nextFloat() / 10; location.getWorld().spawnParticle( Particle.BLOCK_CRACK, - location.add(0,i,0), + location.add(rndFloat,i,rndFloat), 20, Material.REDSTONE_BLOCK.createBlockData() ); + location.subtract(rndFloat, i, rndFloat); } } diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/LanguageConfig.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/LanguageConfig.java index 4113e33..81a72bb 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/LanguageConfig.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/LanguageConfig.java @@ -176,12 +176,10 @@ public class LanguageConfig { defaults.put("SCOREBOARD_PERSONAL_KD", " &7K/D Ratio: &b%VALUE%"); defaults.put("SCOREBOARD_PERSONAL_LEVEL", " &7Level: &b%VALUE%"); defaults.put("SCOREBOARD_GLOBAL_TITLE", "&6Global Stats"); - defaults.put("SCOREBOARD_GLOBAL_KILLSTREAK", " &7Killstreak"); - defaults.put("SCOREBOARD_GLOBAL_KILLS", " &7Kills"); - defaults.put("SCOREBOARD_GLOBAL_KD", " &7K/D Ratio"); - defaults.put("SCOREBOARD_GLOBAL_LEVEL", " &7Level"); - - + defaults.put("SCOREBOARD_GLOBAL_KILLSTREAK", " &dKillstreak"); + defaults.put("SCOREBOARD_GLOBAL_KILLS", " &dKills"); + defaults.put("SCOREBOARD_GLOBAL_KD", " &dK/D Ratio"); + defaults.put("SCOREBOARD_GLOBAL_LEVEL", " &dLevel"); customFile.addDefaults(defaults); diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/EventDataClass.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/EventDataClass.java index f39753b..8e3fac1 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/EventDataClass.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/EventDataClass.java @@ -6,5 +6,7 @@ public class EventDataClass { public static boolean juggernautRunning = false; public static String juggernaut = ""; + public static boolean doubleHealth = false; + } diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/GlobalEventManager.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/GlobalEventManager.java index 8480464..5cfcc0c 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/GlobalEventManager.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/GlobalEventManager.java @@ -2,6 +2,7 @@ package me.lifelessnerd.purekitpvp.globalevents; import me.lifelessnerd.purekitpvp.files.LanguageConfig; import me.lifelessnerd.purekitpvp.globalevents.events.AbstractEvent; +import me.lifelessnerd.purekitpvp.globalevents.events.DoubleHealthEvent; import me.lifelessnerd.purekitpvp.globalevents.events.PickupFrenzyEvent; import me.lifelessnerd.purekitpvp.globalevents.events.TeleMadnessEvent; import me.lifelessnerd.purekitpvp.utils.ComponentUtils; @@ -37,6 +38,7 @@ public class GlobalEventManager { this.allEvents = new ArrayList<>(); allEvents.add(new PickupFrenzyEvent(plugin)); allEvents.add(new TeleMadnessEvent(plugin)); + allEvents.add(new DoubleHealthEvent(plugin)); enabledByConfig = new ArrayList<>(); for (AbstractEvent event : this.allEvents) { diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/events/DoubleHealthEvent.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/events/DoubleHealthEvent.java new file mode 100644 index 0000000..624a763 --- /dev/null +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/events/DoubleHealthEvent.java @@ -0,0 +1,61 @@ +package me.lifelessnerd.purekitpvp.globalevents.events; + +import me.lifelessnerd.purekitpvp.globalevents.EventDataClass; +import me.lifelessnerd.purekitpvp.utils.PlayerUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.Set; + +public class DoubleHealthEvent extends AbstractEvent{ + + BukkitTask eventLoop; + + public DoubleHealthEvent(Plugin plugin) { + super(plugin); + this.eventLength = plugin.getConfig().getInt("double-health-length"); + } + + @Override + public String getEventName() { + return "Double Health"; + } + + @Override + public Component getEventDescription() { + return Component.text(""); // TODO add lang defs + } + + @Override + public void onStart() { + this.running = true; + EventDataClass.doubleHealth = true; + Set players = PlayerUtils.getPlayersInWorld(plugin.getConfig().getString("world")); + for (Player player : players){ + AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + attribute.setBaseValue(40.0D); + } + startEndListener(null); + } + + @Override + public void pauseResumePasser(boolean paused) { + pauseResumeAbstractEvent(paused, eventLoop); + } + + @Override + public void onEnd() { + EventDataClass.doubleHealth = false; + Set players = PlayerUtils.getPlayersInWorld(plugin.getConfig().getString("world")); + for (Player player : players){ + AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + attribute.setBaseValue(40.0D); + } + this.running = false; + } +} diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/events/DoubleHealthListeners.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/events/DoubleHealthListeners.java new file mode 100644 index 0000000..0dab0a0 --- /dev/null +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/globalevents/events/DoubleHealthListeners.java @@ -0,0 +1,61 @@ +package me.lifelessnerd.purekitpvp.globalevents.events; + +import me.lifelessnerd.purekitpvp.globalevents.EventDataClass; +import org.bukkit.World; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeInstance; +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.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.plugin.Plugin; + + +public class DoubleHealthListeners implements Listener { + Plugin plugin; + public DoubleHealthListeners(Plugin plugin) { + this.plugin = plugin; + } + + @EventHandler + public void onJoin(PlayerJoinEvent e){ + Player player = e.getPlayer(); + if (!(player.getWorld().getName().equalsIgnoreCase(plugin.getConfig().getString("world")))){ + return; + } + + if (EventDataClass.doubleHealth){ + AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + attribute.setBaseValue(40.0D); + // TODO and set HP to be max instantly DO THIS EVERYWHERE + } + + } + + @EventHandler + public void onQuit(PlayerQuitEvent e){ + Player player = e.getPlayer(); + if (!(player.getWorld().getName().equalsIgnoreCase(plugin.getConfig().getString("world")))){ + return; + } + if (EventDataClass.doubleHealth){ + AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + attribute.setBaseValue(20.0D); + } + } + + @EventHandler + public void onWorldChange(PlayerChangedWorldEvent e){ + Player player = e.getPlayer(); + World fromWorld = e.getFrom(); + if (fromWorld.getName().equals(plugin.getConfig().getString("world"))){ + return; + } + if (EventDataClass.doubleHealth){ + AttributeInstance attribute = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); + attribute.setBaseValue(20.0D); + } + } +} diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java index e21f4af..e730c5c 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java @@ -9,27 +9,12 @@ import java.util.TreeMap; public class sample { public static void main(String[] args) { - Map treeMap = new TreeMap<>(); - // Adding elements to the tree map - treeMap.put(1, 0); - treeMap.put(2, 0); - treeMap.put(3, 0); + Double doublet = 0.1; - ArrayList array = new ArrayList<>(); + Double inty = 23.0; + System.out.println(doublet); - // Iterating over the elements of the tree map - int enumerator = 0; - for (Integer key : treeMap.keySet()) { - if (enumerator >= 6){ - break; - } - array.add("Key: " + key + ", Value: " + treeMap.get(key)); - enumerator++; - } - - var dab = "dab"; - System.out.println(array); } diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/GlobalStats.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/GlobalStats.java deleted file mode 100644 index 7b31e66..0000000 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/GlobalStats.java +++ /dev/null @@ -1,20 +0,0 @@ -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 sidebar){ - - - } -} diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/PersonalStats.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/PersonalStats.java deleted file mode 100644 index c97fe53..0000000 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/PersonalStats.java +++ /dev/null @@ -1,23 +0,0 @@ -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 sidebar, Player player){ - - - - - } -} diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/SidebarScoreboard.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/SidebarScoreboard.java index 7e3aae6..38caec7 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/SidebarScoreboard.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/SidebarScoreboard.java @@ -13,16 +13,21 @@ 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 java.util.*; public class SidebarScoreboard implements Listener { Plugin plugin; + public SidebarScoreboard(Plugin plugin) { this.plugin = plugin; - refreshLeaderboard(); + + if (plugin.getConfig().getBoolean("scoreboard-enabled")){ + refreshLeaderboard(); + } } @@ -51,8 +56,9 @@ public class SidebarScoreboard implements Listener { } } + long period = plugin.getConfig().getInt("scoreboard-period") * 20L; SidebarPager pager = new SidebarPager<>( - enabledSidebars, plugin.getConfig().getInt("scoreboard-period") * 20L, plugin); + enabledSidebars, period, plugin); // add page status line to all sidebars in pager pager.addPageLine((page, maxPage, sidebar) -> @@ -61,7 +67,20 @@ public class SidebarScoreboard implements Listener { for (Player player : players){ pager.show(player); + if (!(plugin.getConfig().getBoolean("scoreboard-enabled"))){ + pager.hide(player); + } } + + new BukkitRunnable() { + @Override + public void run() { + if (plugin.getConfig().getBoolean("scoreboard-enabled")){ + refreshLeaderboard(); + } + pager.destroy(); + } + }.runTaskLater(plugin, period * 2); } @@ -101,15 +120,12 @@ public class SidebarScoreboard implements Listener { createdLeaderboard = new ArrayList<>(); // This is empty; only happens when there are no/faulty values defined break; } - System.out.println("LIST: " + createdLeaderboard); + for (Component line : createdLeaderboard){ sidebar.addUpdatableLine( (player) -> { - System.out.println("testing"); - refreshLeaderboard(); // I need to make this function anyway to make it work with /pkpvp reload return line; } - // TODO test this ); } } @@ -119,21 +135,19 @@ public class SidebarScoreboard implements Listener { private ArrayList createLeaderboard(String statKey, int places) { - HashMap leaderboard = new HashMap<>(); + HashMap leaderboard = new HashMap<>(); Set players = PlayerStatsConfig.get().getKeys(false); - System.out.println(players.size() + "," + places); + for (String player : players){ - int statValue = PlayerStatsConfig.get().getInt(player + statKey); + double statValue = PlayerStatsConfig.get().getDouble(player + statKey); leaderboard.put(player, statValue); } ArrayList toBeReturned = new ArrayList<>(); for (int i = 0; i < places; i++) { - System.out.println(i); - System.out.println(leaderboard); - int highestScore = 0; + double highestScore = 0; String highestPlayer = null; for (String player : leaderboard.keySet()) { if (leaderboard.get(player) > highestScore) { @@ -142,7 +156,13 @@ public class SidebarScoreboard implements Listener { } } if (highestPlayer != null) { - toBeReturned.add(Component.text(highestPlayer + " - " + highestScore, NamedTextColor.GRAY)); + highestScore = DoubleUtils.round(highestScore, 2); + if (highestScore % 1 == 0){ + int highestScoreInt = (int) highestScore; + toBeReturned.add(Component.text(" " + highestPlayer + " - ", NamedTextColor.GRAY).append(Component.text(highestScoreInt, NamedTextColor.AQUA))); + } else { + toBeReturned.add(Component.text(" " + highestPlayer + " - ", NamedTextColor.GRAY).append(Component.text(highestScore, NamedTextColor.AQUA))); + } leaderboard.remove(highestPlayer); } } diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/TabManager.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/TabManager.java index 3a71096..798896a 100644 --- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/TabManager.java +++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/scoreboards/TabManager.java @@ -23,7 +23,7 @@ public class TabManager { public TabManager(Plugin plugin) { this.plugin = plugin; } - + // CURRENTLY NOT IN USE public void showTab(){ if(header == null && footer == null) return; @@ -33,8 +33,7 @@ public class TabManager { @Override public void run() { - // TODO - // get stats and such -- let owner choose what info? loop to append certain stats + // CURRENTLY NOT IN USE net.minecraft.network.chat.Component headerTBS = ComponentUtils.toMojangComponent(header); net.minecraft.network.chat.Component footerTBS = ComponentUtils.toMojangComponent(footer); @@ -55,7 +54,7 @@ public class TabManager { }, 10, plugin.getConfig().getLong("tab-refresh-period")); } - + // CURRENTLY NOT IN USE public void addHeader(Component header){ this.header = this.header.append(header).appendNewline(); } diff --git a/PureKitsFork/src/main/resources/config.yml b/PureKitsFork/src/main/resources/config.yml index 5fd3920..e01e159 100644 --- a/PureKitsFork/src/main/resources/config.yml +++ b/PureKitsFork/src/main/resources/config.yml @@ -83,36 +83,42 @@ global-event-loop: true global-event-period: 300 # Events that occur in global combat event loop -global-events-enabled: ["TeleMadness","Pickup Frenzy"] +global-events-enabled: ["TeleMadness","Pickup Frenzy", "Double Health"] # Event lengths in seconds telemadness-length: 30 pickup-frenzy-length: 60 -juggernaut-length: 60 +double-health-length: 60 +# Scoreboard is in BETA; reloading the plugin might not fully reload scoreboard or it might introduce bugs +# When any bugs relating to the scoreboard arise, reloading will most likely solve them. +# If bugs are persistent; report them please -> /purekitpvp info # Scoreboard Sidebar - enabled? scoreboard-enabled: true -scoreboard-title: "&6&lPureKitPvP" # Time between slides in seconds scoreboard-period: 10 # Slides of the sidebar scoreboard +# Choices: GlobalStats, PersonalStats enabled-slides: - GlobalStats - PersonalStats # What components of the global stats should be displayed +# Choices: Killstreak, Level, Kills, KD global-stats-components: - Killstreak - Level - Kills - KD -# Amount of places for players per component: if all components are enabled 2 is max here +# Amount of places for players per component: +# !! If all components above are enabled 2 IS MAX HERE! global-stats-place-amount: 2 - +# What components of the personal stats should be displayed +# Choices: Killstreak, Level, Kills, KD, Deaths personal-stats-components: - Killstreak - Kills