From 94a683ca02fbe38936348aaf8d8eae01450d752a Mon Sep 17 00:00:00 2001 From: okx-code Date: Mon, 22 Sep 2025 23:35:54 +0100 Subject: [PATCH] update --- .../plugins/SimpleAdminHacks/config.yml | 2 + .../files/gamma-config/plugins/TAB/config.yml | 2 +- .../plugins/SimpleAdminHacks/config.yml | 2 + .../files/paper-config/plugins/TAB/config.yml | 2 +- .../pvp-config/plugins/Finale/config.yml | 16 +++---- .../plugins/SimpleAdminHacks/config.yml | 2 + .../files/pvp-config/plugins/TAB/config.yml | 2 +- ansible/files/pvp-config/server.properties | 2 +- .../net/civmc/civproxy/CivProxyPlugin.java | 14 ++++-- .../java/net/civmc/civproxy/PlayerCount.java | 47 ++++++++++++++++++ .../java/net/civmc/kitpvp/KitPvpPlugin.java | 6 +-- .../java/net/civmc/kitpvp/kit/KitItem.java | 4 +- .../java/net/civmc/kitpvp/kit/KitPotion.java | 2 +- .../java/net/civmc/kitpvp/ranked/KitCost.java | 11 +++-- .../civmc/kitpvp/ranked/RankedCommand.java | 11 +++-- .../kitpvp/ranked/RankedPlaceholders.java | 1 - .../kitpvp/ranked/RankedQueueListener.java | 10 +++- .../kitpvp/ranked/RankedQueueManager.java | 24 ++++++++-- .../civmc/kitpvp/ranked/UnrankedCommand.java | 9 ++-- .../civmc/kitpvp/snapshot/DeathListener.java | 7 ++- .../simpleadminhacks-paper/build.gradle.kts | 1 + .../hacks/basic/PlayerCount.java | 47 ++++++++++++++++++ .../hacks/basic/PlayerCountPlaceholders.java | 48 +++++++++++++++++++ .../src/main/resources/config.yml | 2 + .../src/main/resources/plugin.yml | 2 +- 25 files changed, 234 insertions(+), 42 deletions(-) create mode 100644 plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/PlayerCount.java create mode 100644 plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCount.java create mode 100644 plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCountPlaceholders.java diff --git a/ansible/files/gamma-config/plugins/SimpleAdminHacks/config.yml b/ansible/files/gamma-config/plugins/SimpleAdminHacks/config.yml index 709503c2d..b8e033a5e 100644 --- a/ansible/files/gamma-config/plugins/SimpleAdminHacks/config.yml +++ b/ansible/files/gamma-config/plugins/SimpleAdminHacks/config.yml @@ -612,3 +612,5 @@ hacks: enabled: true FairPlay: enabled: true + PlayerCount: + enabled: true diff --git a/ansible/files/gamma-config/plugins/TAB/config.yml b/ansible/files/gamma-config/plugins/TAB/config.yml index 78c5ce839..947148156 100644 --- a/ansible/files/gamma-config/plugins/TAB/config.yml +++ b/ansible/files/gamma-config/plugins/TAB/config.yml @@ -5,7 +5,7 @@ header-footer: - disabledworld header: - '&6&kAAAA&r&6&l Welcome to CivMC &x&3&e&c&0&d&1Mini&6&l!&r&6&kAAAA' - - "&7Online players: &f%online%" + - "&2&lMain: &f%playercount_main% &4&lPvP: &f%playercount_pvp% &3&lMini: &f%online%" footer: - '&9Modmail at &6reddit.com/r/civmc' - '&a%tps% TPS &r&6discord.gg/nDnsU6vJqg' diff --git a/ansible/files/paper-config/plugins/SimpleAdminHacks/config.yml b/ansible/files/paper-config/plugins/SimpleAdminHacks/config.yml index 629db7f08..1568d7fcc 100644 --- a/ansible/files/paper-config/plugins/SimpleAdminHacks/config.yml +++ b/ansible/files/paper-config/plugins/SimpleAdminHacks/config.yml @@ -614,3 +614,5 @@ hacks: enabled: true FairPlay: enabled: true + PlayerCount: + enabled: true diff --git a/ansible/files/paper-config/plugins/TAB/config.yml b/ansible/files/paper-config/plugins/TAB/config.yml index 8eeca230f..555b5eb5c 100644 --- a/ansible/files/paper-config/plugins/TAB/config.yml +++ b/ansible/files/paper-config/plugins/TAB/config.yml @@ -5,7 +5,7 @@ header-footer: - disabledworld header: - '&6&kAAAA&r&6&l Welcome to CivMC! &r&6&kAAAA' - - "&7Online players: &f%online%" + - "&2&lMain: &f%online% &4&lPvP: &f%playercount_pvp% &3&lMini: &f%playercount_mini%" footer: - '&9Modmail at &6reddit.com/r/civmc' - '&a%tps% TPS &r&6discord.gg/nDnsU6vJqg' diff --git a/ansible/files/pvp-config/plugins/Finale/config.yml b/ansible/files/pvp-config/plugins/Finale/config.yml index a7f4b037e..658d83609 100644 --- a/ansible/files/pvp-config/plugins/Finale/config.yml +++ b/ansible/files/pvp-config/plugins/Finale/config.yml @@ -489,7 +489,7 @@ tippedArrows: slow: &slow name: Arrow of Slowness type: slowness - duration: 220 + duration: 74 color: r: 89 g: 103 @@ -497,11 +497,11 @@ tippedArrows: long_slow: <<: *slow type: long_slowness - duration: 600 + duration: 200 strong_slow: <<: *slow type: strong_slowness - duration: 40 + duration: 20 turtle_master: &turtle_master name: Arrow of Turtle Master type: turtle_master @@ -533,7 +533,7 @@ tippedArrows: poison: &poison name: Arrow of Poison type: poison - duration: 100 + duration: 34 color: r: 94 g: 129 @@ -541,11 +541,11 @@ tippedArrows: long_poison: <<: *poison type: long_poison - duration: 220 + duration: 74 strong_poison: <<: *poison type: strong_poison - duration: 40 + duration: 20 regen: ®en name: Arrow of Regeneration type: regeneration @@ -581,7 +581,7 @@ tippedArrows: weakness: &weakness name: Arrow of Weakness type: weakness - duration: 220 + duration: 74 color: r: 110 g: 28 @@ -589,7 +589,7 @@ tippedArrows: long_weakness: <<: *weakness type: long_weakness - duration: 600 + duration: 200 luck: name: Arrow of Luck type: luck diff --git a/ansible/files/pvp-config/plugins/SimpleAdminHacks/config.yml b/ansible/files/pvp-config/plugins/SimpleAdminHacks/config.yml index 9772a0378..6fe4fe5a8 100644 --- a/ansible/files/pvp-config/plugins/SimpleAdminHacks/config.yml +++ b/ansible/files/pvp-config/plugins/SimpleAdminHacks/config.yml @@ -584,3 +584,5 @@ hacks: enabled: true FairPlay: enabled: true + PlayerCount: + enabled: true diff --git a/ansible/files/pvp-config/plugins/TAB/config.yml b/ansible/files/pvp-config/plugins/TAB/config.yml index 0809a0b6f..de20f8343 100644 --- a/ansible/files/pvp-config/plugins/TAB/config.yml +++ b/ansible/files/pvp-config/plugins/TAB/config.yml @@ -5,7 +5,7 @@ header-footer: - disabledworld header: - '&6&kAAAA&r&6&l Welcome to CivMC &4&lPvP&6&l! &r&6&kAAAA' - - "&7Online players: &f%online%" + - "&2&lMain: &f%playercount_main% &4&lPvP: &f%online% &3&lMini: &f%playercount_mini%" footer: - '&9Modmail at &6reddit.com/r/civmc' - '&a%tps% TPS &r&6discord.gg/nDnsU6vJqg' diff --git a/ansible/files/pvp-config/server.properties b/ansible/files/pvp-config/server.properties index 3c1f775f2..b5acb9fe4 100644 --- a/ansible/files/pvp-config/server.properties +++ b/ansible/files/pvp-config/server.properties @@ -17,7 +17,7 @@ difficulty=hard network-compression-threshold=256 max-tick-time=60000 require-resource-pack=false -max-players=350 +max-players=250 use-native-transport=true online-mode=false enable-status=true diff --git a/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/CivProxyPlugin.java b/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/CivProxyPlugin.java index 25a7ce1c6..c5c056747 100644 --- a/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/CivProxyPlugin.java +++ b/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/CivProxyPlugin.java @@ -6,6 +6,7 @@ import com.velocitypowered.api.event.connection.DisconnectEvent; import com.velocitypowered.api.event.player.KickedFromServerEvent; import com.velocitypowered.api.event.player.ServerPostConnectEvent; import com.velocitypowered.api.event.player.ServerPreConnectEvent; +import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.plugin.Dependency; import com.velocitypowered.api.plugin.Plugin; import com.velocitypowered.api.proxy.Player; @@ -13,12 +14,10 @@ import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.server.RegisteredServer; import java.time.Instant; -import java.util.Comparator; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.luckperms.api.LuckPermsProvider; import net.luckperms.api.model.data.TemporaryNodeMergeStrategy; import net.luckperms.api.model.user.UserManager; @@ -46,6 +45,15 @@ public class CivProxyPlugin { } + public Logger getLogger() { + return logger; + } + + @Subscribe + public void onProxyInitialization(ProxyInitializeEvent event) { + new PlayerCount(this, server).start(); + } + @Subscribe public void onToMain(KickedFromServerEvent event) { // Other than banned players, kicked servers should go to the queue on the PvP server @@ -95,7 +103,7 @@ public class CivProxyPlugin { // if (mini != null && mini.getPlayersConnected().size() < 110) { // event.setResult(ServerPreConnectEvent.ServerResult.allowed(server.getServer("mini").get())); // } else { - event.setResult(ServerPreConnectEvent.ServerResult.allowed(server.getServer("pvp").get())); + event.setResult(ServerPreConnectEvent.ServerResult.allowed(server.getServer("pvp").get())); // } players.put(event.getPlayer(), new QueueRecord(Instant.now(), name)); diff --git a/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/PlayerCount.java b/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/PlayerCount.java new file mode 100644 index 000000000..bbf81d7b9 --- /dev/null +++ b/plugins/civproxy-velocity/src/main/java/net/civmc/civproxy/PlayerCount.java @@ -0,0 +1,47 @@ +package net.civmc.civproxy; + +import com.velocitypowered.api.proxy.ProxyServer; +import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; +import com.velocitypowered.api.proxy.server.RegisteredServer; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; + +public class PlayerCount { + + private static final MinecraftChannelIdentifier PLAYER_COUNT_ID = MinecraftChannelIdentifier.create("civproxy", "player_count"); + + private final CivProxyPlugin plugin; + private final ProxyServer server; + + public PlayerCount(CivProxyPlugin plugin, ProxyServer server) { + this.plugin = plugin; + this.server = server; + } + + public void start() { + server.getEventManager().register(plugin, this); + server.getScheduler().buildTask(plugin, () -> { + try { + Map count = new HashMap<>(); + for (RegisteredServer server : server.getAllServers()) { + count.put(server.getServerInfo().getName(), server.getPlayersConnected().size()); + } + + for (RegisteredServer server : server.getAllServers()) { + server.sendPluginMessage(PLAYER_COUNT_ID, out -> { + out.writeInt(count.size() - 1); + for (Map.Entry entry : count.entrySet()) { + if (!entry.getKey().equals(server.getServerInfo().getName())) { + out.writeUTF(entry.getKey()); + out.writeInt(entry.getValue()); + } + } + }); + } + } catch (RuntimeException ex) { + plugin.getLogger().warn("Ticking player counts", ex); + } + }).delay(Duration.ZERO).repeat(Duration.ofSeconds(2)).schedule(); + } +} diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/KitPvpPlugin.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/KitPvpPlugin.java index a9a1b65c0..d7658fd45 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/KitPvpPlugin.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/KitPvpPlugin.java @@ -2,7 +2,6 @@ package net.civmc.kitpvp; import java.sql.SQLException; import java.util.List; -import me.clip.placeholderapi.PlaceholderAPI; import net.civmc.kitpvp.anvil.AnvilGui; import net.civmc.kitpvp.arena.ArenaCleaner; import net.civmc.kitpvp.arena.ArenaCommand; @@ -54,7 +53,8 @@ public class KitPvpPlugin extends ACivMod { getCommand("clear").setExecutor(new ClearCommand()); InventorySnapshotManager inventorySnapshotManager = new InventorySnapshotManager(); - getServer().getPluginManager().registerEvents(new DeathListener(inventorySnapshotManager), this); + DeathListener deathListener = new DeathListener(inventorySnapshotManager); + getServer().getPluginManager().registerEvents(deathListener, this); getCommand("viewinventorysnapshot").setExecutor(new ViewInventorySnapshotCommand(inventorySnapshotManager)); if (Bukkit.getPluginManager().isPluginEnabled("BreweryX")) { @@ -83,7 +83,7 @@ public class KitPvpPlugin extends ACivMod { RankedQueueManager queueManager = new RankedQueueManager(dao, ranked, manager, spawnProvider, rankedArena); getCommand("ranked").setExecutor(new RankedCommand(queueManager)); getCommand("unranked").setExecutor(new UnrankedCommand(queueManager)); - getServer().getPluginManager().registerEvents(new RankedQueueListener(queueManager), this); + getServer().getPluginManager().registerEvents(new RankedQueueListener(queueManager, deathListener), this); new RankedPlaceholders(ranked).register(); PrivateArenaListener privateArenaListener = new PrivateArenaListener(spawnProvider, manager); diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitItem.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitItem.java index 2601dae9d..8296b6022 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitItem.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitItem.java @@ -131,10 +131,10 @@ public enum KitItem { ARROW(Material.ARROW, KitCategory.TOOL, 0), BOW(Material.BOW, KitCategory.TOOL, 1), - CROSSBOW(Material.CROSSBOW, KitCategory.TOOL, 1), + CROSSBOW(Material.CROSSBOW, KitCategory.TOOL, 4), FISHING_ROD(Material.FISHING_ROD, KitCategory.TOOL, 1), OAK_BOAT(Material.OAK_BOAT, KitCategory.TOOL, 1), - TNT_MINECART(Material.TNT_MINECART, KitCategory.TOOL, 4), + TNT_MINECART(Material.TNT_MINECART, KitCategory.TOOL, 3), ELYTRA(Material.ELYTRA, KitCategory.ARMOUR, 100), TURTLE_HELMET(Material.TURTLE_HELMET, KitCategory.ARMOUR, 2), diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitPotion.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitPotion.java index 7395bc6e0..f17aa35a6 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitPotion.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/kit/KitPotion.java @@ -34,7 +34,7 @@ public enum KitPotion { LONG_STRENGTH(PotionType.LONG_STRENGTH, 0), STRONG_STRENGTH(PotionType.STRONG_STRENGTH, 0), WEAKNESS(PotionType.WEAKNESS, 1), - LONG_WEAKNESS(PotionType.LONG_WEAKNESS, 2), + LONG_WEAKNESS(PotionType.LONG_WEAKNESS, 3), LUCK(PotionType.LUCK, 0), TURTLE_MASTER(PotionType.TURTLE_MASTER, 5), LONG_TURTLE_MASTER(PotionType.LONG_TURTLE_MASTER, 5), diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/KitCost.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/KitCost.java index e0154e29f..1f8bffd36 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/KitCost.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/KitCost.java @@ -2,6 +2,10 @@ package net.civmc.kitpvp.ranked; import com.dre.brewery.Brew; import com.dre.brewery.recipe.BRecipe; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import net.civmc.kitpvp.kit.KitCustomItem; import net.civmc.kitpvp.kit.KitDrugs; import net.civmc.kitpvp.kit.KitItem; @@ -16,10 +20,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; import vg.civcraft.mc.civmodcore.inventory.CustomItem; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; public class KitCost { @@ -34,6 +34,7 @@ public class KitCost { ENCHANTMENT_COST_PER_LEVEL.put(Enchantment.POWER, 1); ENCHANTMENT_COST_PER_LEVEL.put(Enchantment.THORNS, 1); ENCHANTMENT_COST_PER_LEVEL.put(Enchantment.SWIFT_SNEAK, 100); + ENCHANTMENT_COST_PER_LEVEL.put(Enchantment.QUICK_CHARGE, 1); } public static ItemStack setPoints(ItemStack item, int points) { @@ -86,7 +87,7 @@ public class KitCost { if (item.hasItemMeta() && item.getItemMeta() instanceof PotionMeta meta) { if (item.getType() == Material.TIPPED_ARROW) { - cost += 3; + cost += 4; } for (KitPotion potion : KitPotion.values()) { if (meta.getBasePotionType() == potion.getType()) { diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedCommand.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedCommand.java index 55cc698e6..2bdfa060d 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedCommand.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedCommand.java @@ -22,10 +22,13 @@ public class RankedCommand implements CommandExecutor { return false; } - if (this.rankedQueueManager.isInQueue(player)) { - player.sendMessage(Component.text("You have left the ranked queue", NamedTextColor.YELLOW)); - this.rankedQueueManager.leaveQueue(player); - } else if (!(args.length > 0 && args[0].equals("leave"))) { + if (this.rankedQueueManager.isInQueue(player) || (args.length > 0 && args[0].equals("leave"))) { + if (this.rankedQueueManager.leaveQueue(player)) { + player.sendMessage(Component.text("You have left the ranked queue", NamedTextColor.YELLOW)); + } else { + player.sendMessage(Component.text("You are not in the ranked queue", NamedTextColor.GRAY)); + } + } else { this.rankedQueueManager.joinQueue(player, false); } diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedPlaceholders.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedPlaceholders.java index af7af7e7d..1fade8940 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedPlaceholders.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedPlaceholders.java @@ -1,6 +1,5 @@ package net.civmc.kitpvp.ranked; -import java.util.Collections; import java.util.Map; import java.util.UUID; import me.clip.placeholderapi.expansion.PlaceholderExpansion; diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueListener.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueListener.java index 81c64223c..3de2f7c4b 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueListener.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueListener.java @@ -1,6 +1,7 @@ package net.civmc.kitpvp.ranked; import net.civmc.kitpvp.KitPvpPlugin; +import net.civmc.kitpvp.snapshot.DeathListener; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -14,9 +15,11 @@ import org.bukkit.plugin.java.JavaPlugin; public class RankedQueueListener implements Listener { private final RankedQueueManager rankedQueueManager; + private final DeathListener deathListener; - public RankedQueueListener(RankedQueueManager rankedQueueManager) { + public RankedQueueListener(RankedQueueManager rankedQueueManager, DeathListener deathListener) { this.rankedQueueManager = rankedQueueManager; + this.deathListener = deathListener; } @EventHandler @@ -60,5 +63,10 @@ public class RankedQueueListener implements Listener { } else { match.addOpponentDamageDealt(event.getFinalDamage()); } + + if (player.getHealth() - event.getFinalDamage() < 0) { + deathListener.die(player); + rankedQueueManager.loseMatch(player); + } } } diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueManager.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueManager.java index d3e266fab..b68390bf1 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueManager.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/RankedQueueManager.java @@ -157,23 +157,29 @@ public class RankedQueueManager { } public boolean isInQueue(Player player) { - return this.queued.containsKey(player); + QueuedPlayer queued = this.queued.get(player); + return queued == null || !queued.valid(); } - public void leaveQueue(Player player) { + public boolean leaveQueue(Player player) { if (this.queued.remove(player) != null) { JavaPlugin.getPlugin(KitPvpPlugin.class).getLogger().info("%s left the ranked queue".formatted(player.getName())); + return true; } + return false; } public boolean isInUnrankedQueue(Player player) { - return this.unrankedQueued.containsKey(player); + QueuedPlayer queued = this.unrankedQueued.get(player); + return queued == null || !queued.valid(); } - public void leaveUnrankedQueue(Player player) { + public boolean leaveUnrankedQueue(Player player) { if (this.unrankedQueued.remove(player) != null) { JavaPlugin.getPlugin(KitPvpPlugin.class).getLogger().info("%s left the unranked queue".formatted(player.getName())); + return true; } + return false; } public boolean loseMatch(Player player) { @@ -299,6 +305,11 @@ public class RankedQueueManager { if (getMatch(player) != null) { return; } + QueuedPlayer queue = this.queued.get(player); + if (!queue.valid()) { + this.queued.put(player, new QueuedPlayer(queue.elo(), queue.joined(), false)); + return; + } JavaPlugin plugin = JavaPlugin.getPlugin(KitPvpPlugin.class); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { int kitId = dao.getKit(player.getUniqueId()); @@ -343,6 +354,11 @@ public class RankedQueueManager { if (getMatch(player) != null) { return; } + QueuedPlayer queue = this.unrankedQueued.get(player); + if (!queue.valid()) { + this.unrankedQueued.put(player, new QueuedPlayer(queue.elo(), queue.joined(), false)); + return; + } JavaPlugin plugin = JavaPlugin.getPlugin(KitPvpPlugin.class); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { int kitId = dao.getKit(player.getUniqueId()); diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/UnrankedCommand.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/UnrankedCommand.java index d5819e7d6..ce55bc049 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/UnrankedCommand.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/ranked/UnrankedCommand.java @@ -22,9 +22,12 @@ public class UnrankedCommand implements CommandExecutor { return false; } - if (this.rankedQueueManager.isInUnrankedQueue(player)) { - player.sendMessage(Component.text("You have left the unranked queue", NamedTextColor.YELLOW)); - this.rankedQueueManager.leaveUnrankedQueue(player); + if (this.rankedQueueManager.isInUnrankedQueue(player) || (args.length > 0 && args[0].equals("leave"))) { + if (this.rankedQueueManager.leaveUnrankedQueue(player)) { + player.sendMessage(Component.text("You have left the unranked queue", NamedTextColor.YELLOW)); + } else { + player.sendMessage(Component.text("You are not in the unranked queue", NamedTextColor.GRAY)); + } } else { this.rankedQueueManager.joinUnrankedQueue(player, false); } diff --git a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/snapshot/DeathListener.java b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/snapshot/DeathListener.java index b0d69594a..e41493f2c 100644 --- a/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/snapshot/DeathListener.java +++ b/plugins/kitpvp-paper/src/main/java/net/civmc/kitpvp/snapshot/DeathListener.java @@ -24,13 +24,16 @@ public class DeathListener implements Listener { return; } - Player player = event.getPlayer(); + die(event.getPlayer()); + event.getDrops().clear(); + } + public void die(Player player) { + Player killer = player.getKiller(); snapshotManager.putSnapshot(killer.getUniqueId(), new InventorySnapshot(killer.getInventory().getContents(), false, player.getPlayerProfile(), killer.getHealth())); snapshotManager.putSnapshot(player.getUniqueId(), new InventorySnapshot(player.getInventory().getContents(), true, killer.getPlayerProfile(), 0)); player.getInventory(); - event.getDrops().clear(); Bukkit.broadcast( Component.empty().append(createComponent(player).color(NamedTextColor.GOLD)) .append(Component.text(" was killed by ", NamedTextColor.YELLOW) diff --git a/plugins/simpleadminhacks-paper/build.gradle.kts b/plugins/simpleadminhacks-paper/build.gradle.kts index 53a11e5f7..79464ee17 100644 --- a/plugins/simpleadminhacks-paper/build.gradle.kts +++ b/plugins/simpleadminhacks-paper/build.gradle.kts @@ -16,6 +16,7 @@ dependencies { compileOnly(project(":plugins:banstick-paper")) compileOnly(project(":plugins:bastion-paper")) compileOnly(project(":plugins:exilepearl-paper")) + compileOnly("me.clip:placeholderapi:2.11.6") compileOnly(libs.protocollib) } diff --git a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCount.java b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCount.java new file mode 100644 index 000000000..5d854d021 --- /dev/null +++ b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCount.java @@ -0,0 +1,47 @@ +package com.programmerdan.minecraft.simpleadminhacks.hacks.basic; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; +import com.programmerdan.minecraft.simpleadminhacks.SimpleAdminHacks; +import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHack; +import com.programmerdan.minecraft.simpleadminhacks.framework.BasicHackConfig; +import java.util.HashMap; +import java.util.Map; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; +import org.jetbrains.annotations.NotNull; + +public class PlayerCount extends BasicHack implements PluginMessageListener { + + public static final String CHANNEL = "civproxy:player_count"; + private final Map pings = new HashMap<>(); + + public PlayerCount(SimpleAdminHacks plugin, BasicHackConfig config) { + super(plugin, config); + } + + @Override + public void onEnable() { + super.onEnable(); + Bukkit.getServer().getMessenger().registerIncomingPluginChannel(SimpleAdminHacks.instance(), CHANNEL, this); + new PlayerCountPlaceholders(this.pings).register(); + } + + @Override + public void onDisable() { + super.onDisable(); + } + + @Override + public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, byte @NotNull [] message) { + if (!CHANNEL.equals(channel)) { + return; + } + ByteArrayDataInput data = ByteStreams.newDataInput(message); + int servers = data.readInt(); + for (int i = 0; i < servers; i++) { + pings.put(data.readUTF().toLowerCase(), data.readInt()); + } + } +} diff --git a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCountPlaceholders.java b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCountPlaceholders.java new file mode 100644 index 000000000..ebb9d5158 --- /dev/null +++ b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/PlayerCountPlaceholders.java @@ -0,0 +1,48 @@ +package com.programmerdan.minecraft.simpleadminhacks.hacks.basic; + +import java.util.Map; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PlayerCountPlaceholders extends PlaceholderExpansion { + + private Map pings; + + public PlayerCountPlaceholders(Map pings) { + this.pings = pings; + } + + @Override + public @Nullable String onPlaceholderRequest(Player player, @NotNull String params) { + params = params.toLowerCase(); + + return Integer.toString(pings.getOrDefault(params.toLowerCase(), 0)); + } + + @Override + public @NotNull String getIdentifier() { + return "playercount"; + } + + @Override + public @NotNull String getAuthor() { + return "Okx"; + } + + @Override + public @NotNull String getVersion() { + return "1.0"; + } + + @Override + public boolean persist() { + return true; + } + + @Override + public boolean canRegister() { + return true; + } +} diff --git a/plugins/simpleadminhacks-paper/src/main/resources/config.yml b/plugins/simpleadminhacks-paper/src/main/resources/config.yml index e062874ca..6d9b49d6c 100644 --- a/plugins/simpleadminhacks-paper/src/main/resources/config.yml +++ b/plugins/simpleadminhacks-paper/src/main/resources/config.yml @@ -553,3 +553,5 @@ hacks: enabled: true FairPlay: enabled: true + PlayerCount: + enabled: false diff --git a/plugins/simpleadminhacks-paper/src/main/resources/plugin.yml b/plugins/simpleadminhacks-paper/src/main/resources/plugin.yml index f39c3022f..b2c7fddb6 100644 --- a/plugins/simpleadminhacks-paper/src/main/resources/plugin.yml +++ b/plugins/simpleadminhacks-paper/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ author: ProgrammerDan authors: [ ProgrammerDan, Maxopoly ] version: ${version} depend: [ CivModCore ] -softdepend: [ CombatTagPlus, NameLayer, Citadel, ProtocolLib, BanStick, ExilePearl ] +softdepend: [ CombatTagPlus, NameLayer, Citadel, ProtocolLib, BanStick, ExilePearl, PlaceholderAPI ] api-version: 1.21.3 commands: hacks: