From 535af85ecb8fa836e3ddf6a3219a5244296990df Mon Sep 17 00:00:00 2001 From: Xelara Networks Date: Tue, 9 Jun 2026 20:45:18 -0400 Subject: [PATCH] Made the vote clickable --- .../com/bitnix/dirtsleep/DirtSleepPlugin.java | 371 ++++++++++++------ src/main/resources/config.yml | 47 ++- src/main/resources/plugin.yml | 6 +- target/DirtSleep.jar | Bin 8788 -> 13009 bytes .../DirtSleepPlugin$ActiveVote.class | Bin 0 -> 976 bytes .../dirtsleep/DirtSleepPlugin$VoteType.class | Bin 0 -> 1452 bytes .../bitnix/dirtsleep/DirtSleepPlugin.class | Bin 12153 -> 17425 bytes target/classes/config.yml | 47 ++- target/classes/plugin.yml | 6 +- target/maven-archiver/pom.properties | 2 +- .../compile/default-compile/createdFiles.lst | 2 + 11 files changed, 336 insertions(+), 145 deletions(-) create mode 100644 target/classes/com/bitnix/dirtsleep/DirtSleepPlugin$ActiveVote.class create mode 100644 target/classes/com/bitnix/dirtsleep/DirtSleepPlugin$VoteType.class diff --git a/src/main/java/com/bitnix/dirtsleep/DirtSleepPlugin.java b/src/main/java/com/bitnix/dirtsleep/DirtSleepPlugin.java index 19ffdda..4e1139c 100644 --- a/src/main/java/com/bitnix/dirtsleep/DirtSleepPlugin.java +++ b/src/main/java/com/bitnix/dirtsleep/DirtSleepPlugin.java @@ -1,5 +1,8 @@ package com.bitnix.dirtsleep; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; @@ -9,14 +12,14 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; import java.util.*; import java.util.stream.Collectors; public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { - private final Map> dayVotes = new HashMap<>(); - private final Map> nightVotes = new HashMap<>(); + private final Map activeVotes = new HashMap<>(); @Override public void onEnable() { @@ -34,8 +37,12 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { @Override public void onDisable() { - dayVotes.clear(); - nightVotes.clear(); + for (ActiveVote vote : activeVotes.values()) { + if (vote.timeoutTask != null) { + vote.timeoutTask.cancel(); + } + } + activeVotes.clear(); } @Override @@ -46,7 +53,12 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { return true; } - handleVoteDay(player); + if (args.length == 1 && (args[0].equalsIgnoreCase("yes") || args[0].equalsIgnoreCase("no"))) { + handleResponseVote(player, VoteType.DAY, args[0].equalsIgnoreCase("yes")); + return true; + } + + startVote(player, VoteType.DAY); return true; } @@ -56,7 +68,12 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { return true; } - handleVoteNight(player); + if (args.length == 1 && (args[0].equalsIgnoreCase("yes") || args[0].equalsIgnoreCase("no"))) { + handleResponseVote(player, VoteType.NIGHT, args[0].equalsIgnoreCase("yes")); + return true; + } + + startVote(player, VoteType.NIGHT); return true; } @@ -68,8 +85,14 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { } reloadConfig(); - dayVotes.clear(); - nightVotes.clear(); + + for (ActiveVote vote : activeVotes.values()) { + if (vote.timeoutTask != null) { + vote.timeoutTask.cancel(); + } + } + activeVotes.clear(); + sender.sendMessage(message("messages.reloaded")); return true; } @@ -81,164 +104,184 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { return false; } - private void handleVoteDay(Player player) { - if (!getConfig().getBoolean("vote-day.enabled", true)) { - player.sendMessage(message("messages.disabled")); + private void startVote(Player starter, VoteType type) { + if (!getConfig().getBoolean("vote-" + type.configName + ".enabled", true)) { + starter.sendMessage(message(type == VoteType.DAY ? "messages.disabled" : "messages.night-disabled")); return; } - World world = player.getWorld(); + World world = starter.getWorld(); if (!isWorldEnabled(world)) { - player.sendMessage(message("messages.world-disabled")); + starter.sendMessage(message("messages.world-disabled")); return; } - if (!canVoteDayInWorld(world)) { - player.sendMessage(message("messages.not-night")); - clearDayVotes(world); + if (!canStartVote(world, type)) { + starter.sendMessage(message(type == VoteType.DAY ? "messages.not-night" : "messages.not-day")); return; } String worldKey = world.getName().toLowerCase(Locale.ROOT); - Set votes = dayVotes.computeIfAbsent(worldKey, k -> new HashSet<>()); - - if (votes.contains(player.getUniqueId())) { - player.sendMessage(message("messages.already-voted")); + if (activeVotes.containsKey(worldKey)) { + starter.sendMessage(message("messages.vote-already-running")); return; } - votes.add(player.getUniqueId()); + int requiredYesVotes = getRequiredVotes(world, type); + long durationSeconds = Math.max(5, getConfig().getLong("vote-session.duration-seconds", 30)); - int currentVotes = countValidVotes(world, votes); - int requiredVotes = getRequiredVotes(world); + ActiveVote activeVote = new ActiveVote(type, requiredYesVotes); + activeVote.yesVotes.add(starter.getUniqueId()); - String voteMessage = message("messages.vote-added") - .replace("%player%", player.getName()) - .replace("%votes%", String.valueOf(currentVotes)) - .replace("%required%", String.valueOf(requiredVotes)) - .replace("%remaining%", String.valueOf(Math.max(0, requiredVotes - currentVotes))); + BukkitTask task = Bukkit.getScheduler().runTaskLater(this, () -> timeoutVote(world), durationSeconds * 20L); + activeVote.timeoutTask = task; - broadcast(world, voteMessage); + activeVotes.put(worldKey, activeVote); - if (currentVotes >= requiredVotes) { - makeDay(world); - clearDayVotes(world); - clearNightVotes(world); - broadcast(world, message("messages.vote-passed")); + String startedMessage = message(type == VoteType.DAY ? "messages.vote-started-day" : "messages.vote-started-night") + .replace("%player%", starter.getName()) + .replace("%yes%", String.valueOf(activeVote.yesVotes.size())) + .replace("%no%", String.valueOf(activeVote.noVotes.size())) + .replace("%required%", String.valueOf(requiredYesVotes)); + + String clickPrompt = message("messages.click-prompt"); + + for (Player player : world.getPlayers()) { + player.sendMessage(startedMessage); + player.sendMessage(clickPrompt); + sendClickableVoteMessage(player, type); } + + checkVoteResult(world); } - private void handleVoteNight(Player player) { - if (!getConfig().getBoolean("vote-night.enabled", true)) { - player.sendMessage(message("messages.night-disabled")); - return; - } - + private void handleResponseVote(Player player, VoteType commandType, boolean yes) { World world = player.getWorld(); - - if (!isWorldEnabled(world)) { - player.sendMessage(message("messages.world-disabled")); - return; - } - - if (!canVoteNightInWorld(world)) { - player.sendMessage(message("messages.not-day")); - clearNightVotes(world); - return; - } - String worldKey = world.getName().toLowerCase(Locale.ROOT); - Set votes = nightVotes.computeIfAbsent(worldKey, k -> new HashSet<>()); + ActiveVote activeVote = activeVotes.get(worldKey); - if (votes.contains(player.getUniqueId())) { - player.sendMessage(message("messages.night-already-voted")); + if (activeVote == null) { + player.sendMessage(message("messages.no-active-vote")); return; } - votes.add(player.getUniqueId()); + if (activeVote.type != commandType) { + player.sendMessage(message("messages.wrong-vote-command")); + return; + } - int currentVotes = countValidVotes(world, votes); - int requiredVotes = getRequiredVotes(world); + activeVote.yesVotes.remove(player.getUniqueId()); + activeVote.noVotes.remove(player.getUniqueId()); - String voteMessage = message("messages.night-vote-added") - .replace("%player%", player.getName()) - .replace("%votes%", String.valueOf(currentVotes)) - .replace("%required%", String.valueOf(requiredVotes)) - .replace("%remaining%", String.valueOf(Math.max(0, requiredVotes - currentVotes))); + if (yes) { + activeVote.yesVotes.add(player.getUniqueId()); + player.sendMessage(message("messages.vote-yes-confirm")); + } else { + activeVote.noVotes.add(player.getUniqueId()); + player.sendMessage(message("messages.vote-no-confirm")); + } - broadcast(world, voteMessage); + broadcastVoteStatus(world, activeVote); + checkVoteResult(world); + } - if (currentVotes >= requiredVotes) { - makeNight(world); - clearNightVotes(world); - clearDayVotes(world); - broadcast(world, message("messages.night-vote-passed")); + private void broadcastVoteStatus(World world, ActiveVote activeVote) { + cleanupInvalidVotes(world, activeVote); + + String path = activeVote.type == VoteType.DAY ? "messages.vote-progress-day" : "messages.vote-progress-night"; + String msg = message(path) + .replace("%yes%", String.valueOf(activeVote.yesVotes.size())) + .replace("%no%", String.valueOf(activeVote.noVotes.size())) + .replace("%required%", String.valueOf(activeVote.requiredYesVotes)); + + broadcast(world, msg); + } + + private void checkVoteResult(World world) { + String worldKey = world.getName().toLowerCase(Locale.ROOT); + ActiveVote activeVote = activeVotes.get(worldKey); + if (activeVote == null) { + return; + } + + cleanupInvalidVotes(world, activeVote); + + int yesVotes = activeVote.yesVotes.size(); + int noVotes = activeVote.noVotes.size(); + int requiredYes = activeVote.requiredYesVotes; + int eligible = getEligiblePlayers(world, activeVote.type); + + if (yesVotes >= requiredYes) { + if (activeVote.type == VoteType.DAY) { + makeDay(world); + broadcast(world, message("messages.vote-passed")); + } else { + makeNight(world); + broadcast(world, message("messages.night-vote-passed")); + } + + endVote(world); + return; + } + + int remainingPossibleYes = Math.max(0, eligible - noVotes); + if (remainingPossibleYes < requiredYes) { + broadcast(world, message("messages.vote-failed")); + endVote(world); } } - private void makeDay(World world) { - world.setTime(1000); - world.setStorm(false); - world.setThundering(false); + private void timeoutVote(World world) { + String worldKey = world.getName().toLowerCase(Locale.ROOT); + ActiveVote activeVote = activeVotes.get(worldKey); + if (activeVote == null) { + return; + } + + cleanupInvalidVotes(world, activeVote); + + if (activeVote.type == VoteType.DAY) { + broadcast(world, message("messages.vote-expired")); + } else { + broadcast(world, message("messages.night-vote-expired")); + } + + endVote(world); } - private void makeNight(World world) { - world.setTime(13000); + private void endVote(World world) { + String worldKey = world.getName().toLowerCase(Locale.ROOT); + ActiveVote activeVote = activeVotes.remove(worldKey); + if (activeVote != null && activeVote.timeoutTask != null) { + activeVote.timeoutTask.cancel(); + } } - private void clearDayVotes(World world) { - dayVotes.remove(world.getName().toLowerCase(Locale.ROOT)); + private void cleanupInvalidVotes(World world, ActiveVote activeVote) { + activeVote.yesVotes.removeIf(uuid -> !isEligibleVoter(world, uuid, activeVote.type)); + activeVote.noVotes.removeIf(uuid -> !isEligibleVoter(world, uuid, activeVote.type)); } - private void clearNightVotes(World world) { - nightVotes.remove(world.getName().toLowerCase(Locale.ROOT)); - } - - private int countValidVotes(World world, Set votes) { - votes.removeIf(uuid -> { - Player p = Bukkit.getPlayer(uuid); - return p == null || !p.isOnline() || !p.getWorld().equals(world); - }); - return votes.size(); - } - - private boolean isWorldEnabled(World world) { - List worlds = getConfig().getStringList("vote-day.worlds"); - return worlds.isEmpty() || worlds.contains(world.getName()); - } - - private boolean canVoteDayInWorld(World world) { - if (world.getEnvironment() != World.Environment.NORMAL) { + private boolean isEligibleVoter(World world, UUID uuid, VoteType type) { + Player player = Bukkit.getPlayer(uuid); + if (player == null || !player.isOnline()) { + return false; + } + if (!player.getWorld().equals(world)) { + return false; + } + if (player.getGameMode() == GameMode.SPECTATOR) { return false; } - if (!getConfig().getBoolean("vote-day.only-during-night", true)) { - return true; - } - - long time = world.getTime(); - int nightStartsAt = getConfig().getInt("vote-day.night-starts-at", 12542); - return time >= nightStartsAt && time < 24000; + boolean excludeBypass = getConfig().getBoolean("vote-" + type.configName + ".exclude-bypass", true); + return !excludeBypass || !player.hasPermission("dirtsleep.bypass"); } - private boolean canVoteNightInWorld(World world) { - if (world.getEnvironment() != World.Environment.NORMAL) { - return false; - } - - if (!getConfig().getBoolean("vote-night.only-during-day", true)) { - return true; - } - - long time = world.getTime(); - int dayEndsAt = getConfig().getInt("vote-night.day-ends-at", 12542); - return time >= 0 && time < dayEndsAt; - } - - private int getRequiredVotes(World world) { + private int getEligiblePlayers(World world, VoteType type) { int eligible = 0; - boolean excludeBypass = getConfig().getBoolean("vote-day.exclude-bypass", true); + boolean excludeBypass = getConfig().getBoolean("vote-" + type.configName + ".exclude-bypass", true); for (Player player : world.getPlayers()) { if (player.getGameMode() == GameMode.SPECTATOR) { @@ -252,11 +295,40 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { eligible++; } - if (eligible <= 0) { - return 1; + return Math.max(1, eligible); + } + + private boolean isWorldEnabled(World world) { + List worlds = getConfig().getStringList("vote-day.worlds"); + return worlds.isEmpty() || worlds.contains(world.getName()); + } + + private boolean canStartVote(World world, VoteType type) { + if (world.getEnvironment() != World.Environment.NORMAL) { + return false; } - String raw = getConfig().getString("vote-day.required-votes", "50%"); + long time = world.getTime(); + + if (type == VoteType.DAY) { + if (!getConfig().getBoolean("vote-day.only-during-night", true)) { + return true; + } + int nightStartsAt = getConfig().getInt("vote-day.night-starts-at", 12542); + return time >= nightStartsAt && time < 24000; + } + + if (!getConfig().getBoolean("vote-night.only-during-day", true)) { + return true; + } + int dayEndsAt = getConfig().getInt("vote-night.day-ends-at", 12542); + return time >= 0 && time < dayEndsAt; + } + + private int getRequiredVotes(World world, VoteType type) { + int eligible = getEligiblePlayers(world, type); + + String raw = getConfig().getString("vote-" + type.configName + ".required-votes", "50%"); if (raw == null) { return 1; } @@ -281,6 +353,29 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { } } + private void makeDay(World world) { + world.setTime(1000); + world.setStorm(false); + world.setThundering(false); + } + + private void makeNight(World world) { + world.setTime(13000); + } + + private void sendClickableVoteMessage(Player player, VoteType type) { + String yesCommand = type == VoteType.DAY ? "/voteday yes" : "/votenight yes"; + String noCommand = type == VoteType.DAY ? "/voteday no" : "/votenight no"; + + Component yes = Component.text("[YES]", NamedTextColor.GREEN) + .clickEvent(ClickEvent.runCommand(yesCommand)); + Component spacer = Component.text(" ", NamedTextColor.GRAY); + Component no = Component.text("[NO]", NamedTextColor.RED) + .clickEvent(ClickEvent.runCommand(noCommand)); + + player.sendMessage(yes.append(spacer).append(no)); + } + private void broadcast(World world, String message) { for (Player player : world.getPlayers()) { player.sendMessage(message); @@ -307,6 +402,38 @@ public final class DirtSleepPlugin extends JavaPlugin implements TabExecutor { } } + if (command.getName().equalsIgnoreCase("voteday") || command.getName().equalsIgnoreCase("votenight")) { + if (args.length == 1) { + return Arrays.asList("yes", "no").stream() + .filter(s -> s.toLowerCase(Locale.ROOT).startsWith(args[0].toLowerCase(Locale.ROOT))) + .collect(Collectors.toList()); + } + } + return Collections.emptyList(); } + + private enum VoteType { + DAY("day"), + NIGHT("night"); + + private final String configName; + + VoteType(String configName) { + this.configName = configName; + } + } + + private static final class ActiveVote { + private final VoteType type; + private final int requiredYesVotes; + private final Set yesVotes = new HashSet<>(); + private final Set noVotes = new HashSet<>(); + private BukkitTask timeoutTask; + + private ActiveVote(VoteType type, int requiredYesVotes) { + this.type = type; + this.requiredYesVotes = requiredYesVotes; + } + } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 8d5e6d8..e087ff0 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -11,7 +11,7 @@ vote-day: # Tick time where night starts night-starts-at: 12542 - # Required votes before changing to day + # Required YES votes before changing to day # Examples: "1", "2", "50%", "75%" required-votes: "50%" @@ -28,19 +28,50 @@ vote-night: # Tick time where day effectively ends for vote checks day-ends-at: 12542 + # Required YES votes before changing to night + # Examples: "1", "2", "50%", "75%" + required-votes: "50%" + + # Ignore players with this permission from vote requirement: + # dirtsleep.bypass + exclude-bypass: true + +vote-session: + # How long a vote stays open + duration-seconds: 30 + messages: prefix: "&8[&6DirtBagMC&8] &7" - vote-added: "%prefix%&e%player% &7voted for day. &f(%votes%/%required% votes, %remaining% remaining)" - vote-passed: "%prefix%&aVote passed! Skipping to day." - already-voted: "%prefix%&cYou already voted." - not-night: "%prefix%&cYou can only use this at night." - disabled: "%prefix%&cVote day is disabled." + vote-started-day: "%prefix%&e%player% &7started a vote to make it &fday&7. &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" + vote-started-night: "%prefix%&e%player% &7started a vote to make it &fnight&7. &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" - night-vote-added: "%prefix%&e%player% &7voted for night. &f(%votes%/%required% votes, %remaining% remaining)" + click-prompt: "%prefix%&7Click below to vote." + + vote-progress-day: "%prefix%&7Day vote status: &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" + vote-progress-night: "%prefix%&7Night vote status: &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" + + vote-passed: "%prefix%&aVote passed! Skipping to day." night-vote-passed: "%prefix%&aVote passed! Skipping to night." + + vote-failed: "%prefix%&cVote failed." + vote-expired: "%prefix%&cVote to make it day expired." + night-vote-expired: "%prefix%&cVote to make it night expired." + + vote-yes-confirm: "%prefix%&aYou voted YES." + vote-no-confirm: "%prefix%&cYou voted NO." + + vote-already-running: "%prefix%&cA vote is already running in this world." + no-active-vote: "%prefix%&cThere is no active vote in this world." + wrong-vote-command: "%prefix%&cUse the correct vote buttons for the current vote." + + already-voted: "%prefix%&cYou already voted." night-already-voted: "%prefix%&cYou already voted for night." - not-day: "%prefix%&cYou can only use this during the day." + + not-night: "%prefix%&cYou can only start this vote at night." + not-day: "%prefix%&cYou can only start this vote during the day." + + disabled: "%prefix%&cVote day is disabled." night-disabled: "%prefix%&cVote night is disabled." world-disabled: "%prefix%&cVote commands are disabled in this world." diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 1aea36a..092fdca 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,13 +3,13 @@ version: 1.0 main: com.bitnix.dirtsleep.DirtSleepPlugin api-version: '1.21' author: bitnix -description: Simple vote day plugin +description: Simple vote day/night plugin commands: voteday: - description: Vote to make it day + description: Start a vote to make it day usage: /voteday votenight: - description: Vote to make it night + description: Start a vote to make it night usage: /votenight dirtsleep: description: DirtSleep admin command diff --git a/target/DirtSleep.jar b/target/DirtSleep.jar index 2d930d8f6ea5bc8f719e5a0ae7a378c59679b315..0d390aa141fe7633ace3be2591ae3868080109a2 100644 GIT binary patch delta 11098 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 diff --git a/target/classes/com/bitnix/dirtsleep/DirtSleepPlugin$ActiveVote.class b/target/classes/com/bitnix/dirtsleep/DirtSleepPlugin$ActiveVote.class new file mode 100644 index 0000000000000000000000000000000000000000..cc627fed5c0e6a054878196cf5ad690212340e99 GIT binary patch literal 976 zcmb7D+iuf95IyT$+&G4`q1-~DEd)qX+6D2Ls-m<)jT9B6q>=h)JF8?H$1e7|(4PWv zi7J7_2k=pdSwl(TDaexNvNLDS`i#H-`0@?FHn;@?853C>Ipi7UkDL>S`%W<6FWn>I zDTe%}45Zp($kggR6LSm;X;Gr2&-a{o*b&NtiA(`S*d{L7xQr45_rfuEr3&O*-j|Vz zeIbtdE_og8z4DWR4656nk|&}UD#0*!Dq`)$45jvT2H`g~_JWPF1~!8*t%0!)^I*SMlb}I-(wBtK*tR=UmQ%$Thtj~f{J(rR=oV$2Ti($}u=V)JOJIE_* ziBn6f35Hwb8(5+|ZPbO>z-`>2Ge)O5ER$WK=nXRT0QVbbV2!UZ56@7Tz?!=AjkO7` zG?pf~{(%Y&tkS!JJRyBVmc663eNQ{~3Crv=s%(P0biVQn6!%c2h~QJQEcG;9`Y|b| Z(H`JoYHMhaEmNk58rG=h5!sDrm7i`N^=AM8 literal 0 HcmV?d00001 diff --git a/target/classes/com/bitnix/dirtsleep/DirtSleepPlugin$VoteType.class b/target/classes/com/bitnix/dirtsleep/DirtSleepPlugin$VoteType.class new file mode 100644 index 0000000000000000000000000000000000000000..e9eccc15f912ebe61b55d499020e6a193275e810 GIT binary patch literal 1452 zcmb7ET~8BH5IwiMrDa)YseA|`DuQ;4rHJ5HD^dZ41c9X3g!r_yOIfnrCEG2LH-C!y zpgt-@AsP+O{wU+jw!|Vl*iCNd&fJ+ZbLQUZuixK(0?6V?2myg)!6~OUOwTr7rHZEO zRV>5UNzKtN$GcUlS~Bh7yyF>bdpkxe1Y{LKv!=`Qd0nFMhL5DWrX1J;AcANJ?J7DEBkY3Z*oHt?TwB`KclDH|+ojaX#FTC=?;mM78jtW%`oBTJ@jELY1L zhP$S3SY(+!r$(*GJLaZ11>MT)uF0r%Xxa7~7JY7bTTXFRcS-dOm$=B@mPw*DXO?W; ztGZN2_jz^X=}~41R{f@=xJHI-Lj(C%Gffsdou&)TIaRk{JT21NUL)JPAK zeGEzRPmwl6l0Ri1%2#w8Bl3wfnnU_+;WP1u{Cja50pEX;Bu6MQkvPJIV+i&SobsO_ zi(2!-9nOtOT0shX&93xxA^BhnBxO2M6Qcu%=u0HO;PPkEYj7QO3h|!)F+QM8d<4Vx z&>4eI`P6vFclox$>X$5dEs_;XnYM8C&rvo~JKOokneMq@=c^{!1lQ>N} zjQe;{51Xf^@i+3FqGH#i*w7({43QQwA)Bgv4drW)) literal 0 HcmV?d00001 diff --git a/target/classes/com/bitnix/dirtsleep/DirtSleepPlugin.class b/target/classes/com/bitnix/dirtsleep/DirtSleepPlugin.class index 07b996f7cc7dcf136f22bdc523e97e5e5b201c34..4024e815887ce5651c6f596cfc44008f1551341c 100644 GIT binary patch literal 17425 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 X&z79bd+4D0`I1uguKJ~Vk4pa=u?)^i literal 12153 zcmd5?33yc1z5oC3Ofr+n4TQ-?WHCSjSqY+|60`{kNH75;2pYwDGjo%SOlHC?EL!*N zX_eNcRm9fiiMUV|mq=W3U#oVp)mCk*R;}7rtJb9`?|06*bLUPnO5gXr@4W}#H@WvL z|MOpd|K*%>pZWUU2Z^Xfo8=>oTpn`kltZ~pQ=+lH#-8MwHK9b~U^v+qiZq^RtTP%H z<7b(CXUd%yii8q}F}bR1R(idxOTtmC=M5XByj)CJdrYg5Wrv{DPV<66)(u z$bmjI7wc3a1Q-`L)|qW)uaOKVTBDKPP@k8|m^|x15roCia-H^}382ttV#vUN5eYKQ zsa9)+jYwZ(S0WaQ^flFVIJ5!g#mGj*rZun0N0Vr>hxXN}f~I6BVrkEbW*`9}#>C9E z$xzH(5{)cLhQmzLolB`xfZZyfk&Dplz;on|oQ$IZlo4Q3#jh{l*^ zRA*z~Vmvjhsb;01P@_{V)j{E)u)^rUpuw=2FhQjVrR@oJkm zpZ25K9@<~01B8VNGHl9}69}6|%tv$RAP*g^(;+mMX`d`|Tdc#FFx(Pjz+@_}b}G&? zn~&zvp&mL+r|(cRQ(;=OY5|q2pExyWZbN1v=BE_KyIN2PMx$QI~XjbbeWN$Fc%;Y33i(CxY74bLc!qqv`nWXX*rD14@`$m;YMx7 zMy5#_=FX5-+Ia=j)Nd15+Fy#iQm0j7g|X=smI#ma(lH1jF*6)Bf?hfn18ktoG=c-6 zh!A?UPR9$|fxY-LGd2*4$3xMGmrh_R9Z=H6XGWq8gLa<~sz;}Q(6YxGBHB!ydIjoq zwPGqH^ut$eLaNIIJ14?j?dGIVqM#AhX@DYtvO0wOYe0K8%T-Ff{7-6`P zd->9(0KVUmjZ_!ZF^?|S=?dBm*Goh@qU+6=iYF-#cM!@5@|K7Dk%hPDbQS#s!NC|D z48sTaO$9YMw>KFHNKh@b9-2fvy;`Sh=vp{W0HHdWFxz`udf@sArdB5atW@G)d^9;{ z1hrGoe`dt#E;AuOvQ?)WXd5I2NREnx)+Wt%;KZN7?omgzw}Hd!=q8ts%&Am7P;Gvcjj`OZPGr*+3M$HGmxvGVX_nRVw&b z2_+pQF!7L1yXav=qL_)U05H_%G)rs05$nRbW+Y%XIl_KMyVEWfTD>^eoJX_W@W2r4ESwoSyg43p%|>zkq9} z?bK-`5G-8-1_DS4;XPEFSFoqsz0NslKJPiI=w8s*E3+O z5t&C=<##&$UbKys9xaoFG_03iLo~`%{-6<$3+?{__>qQ91~TmBM9@LB_7l?9oMBqe4Jf&~7#-W5^o6P-S#e?oJjR11kB$X&g-Mh3Xgb^3z71Rl}V zg&J@`^mVJg-8y|G`U=Ff{-mfDV0Vl1?57Y@n03}f5sTzJ5M5{bNn^LpIgIS-2H;@f z+1X;N!^7<0vMgo>LjfaUicr8_o%7fSz7*khz;ue`4w)e?J*}o&Ow@HQ;4xS}9y$qv zV!zSuIa0d|J6nM@aCDppXW$sMw5AP5E5PWgZ@{ zb2;ymg1_AjWryMm1_l!d&fuXNqvwFijqn+nfWNyo_DIKDKhAs7o7yNnvP}HwDi% zI@fX?L;}wWKM-lLmr=oww`VGki6;!~(i)6}&~Ky8vv@!7f_d#C(PXPM5FIQ?t={G3 z15?aMax>#-%eF1f0t`9$v0< z7q38!a$qAh2GOHy*@D&;Ei0Cy#4d57A~ghHScy26F0NC`YoXO%KE|ouR9cWZH|}K= z<*ox~At%Imwa&-$cU9@DoQLV)EFSfZKIRPl$XIOX+#@!4Zfvm!yo~yRMJD53o%=+^ z?-dAG6-xAr#*oe@3jfayn~^@%6xMlwQRn8xlRa^{O&3T+S{luPj|X|JhhsX&8P;*^ z1KXlWRNk=1pb?9kskf|Kz_#4xV^sJ>isTJCZ{(A}eZUNb@u#}226*`%YPNKYS&|&+ zF=Go6ehuu#1LmNp-h6y2pXTAybv}d7Oq~-*-N2X3KCyN4N@k>MW#t5+?`(uVJ53D6 z%-+xjFP{tGO+Wb9={@#I%JhR*S4=<1%P5|4I&%R?SE<2OKE9AI^6(~|f51P)JO{K; zd*C!AEOw_86EPza4Km+AZ?{&7nG(wkah zF=HbranOis_KO-^UCzSIXD7GNx z7=UH00TR^#CmxtJqr7*KVdWCI4^MGqunG044A4L~751*t@A zwdIS+ovFjT(o86998AGs%3dKRkGCDLR*dd-S`B#0m9jvBLdS4fTA{Qa(Ub-K65I*7 zO%a7sfvohPOVpJu$jN!A`4%AIi)RlG^8&JZ<~Hasr3-Yx-EdBeQo)i`+AV9Eg zIh&~}L)=l2Rrvs9+{t7J*l^-g_F(}Wx26^taSC0Doy@c>b*yt|sQi@Ipun`aOcQA{ zHdf9;ZtIFB0osK)>P0nW7hvj+Xr@S$U<_xo31nGgu+vQRM}zS~nld(5^W!W)E7CPx z^A&17G?a>lGF{6<1Kom#eMG|qU2|(Wh1w)UrqSuJ8^iV$!zy%*HLZ}E(J;-YRccip zZMv?_(5ewbWxAHy4@K5R*O-kR(s*FU=ru$|fk2f%;Cy?|sTymN;(n35FNjxmM5Akx zgIVIf!`2xSS0G?HhyVMXYRPY(>nvI<%B@B?+=VTlh_&sJ2o7e$;?M}7%XjR=Jz71W zHcCU;g!O1MQ5}5yPy|e+8JyAP<7$=pas2wl1t^}M#7;uvr|^y|Ovif}4wrEKik7D_ zqLW;BCz?=u4{_~%UZ%DbC<>BqtylF&2w9fQF{h2)kbi}+c*>1sMZ$3Mp#^Yb?8 zTLepJGi!&asMcRPMB{hT#9cHM@0BCot84xBBl z`C3U6aThp=+Gt-|ft%AHj-Aqsn>OPw*o-d#+k)|;+Pla%OmICs6v~J6GD;U!l!xn3 zKQ2VmB#Ug4FY+&xnxSeJ$P>K?sSXsXXxdCQbq`a^X430+QOn$%Z8WZ~*55ir3x=s( zBlq^&@|+=B>fSDA;O84=bd8vClr;nD!3?9^{h<3A>L_=+X8VtpP0e-w?qNDkqbuc# z-yI?&wc-#3M~e)u`qE?Y7D~UlwnHWt3vBd4-9&Z3Lp>DUK-Dx8*S!1DESin~2hw4< zb6r9QQ8yh-$59jY;6yoyOVdGWrn7LAy@}?7qgLEbEW~ZY;dB!%qC2Ra9>fjZF2M9T z%zmDZlzKi6S}(`CzvN#5%C*>cs;49Dw&UzJ=-jf0c=|QJBu)Dw|Av1He2TW0`4x%l z7x{Pmdvf!uXf3C_iMy%5LoHvDXM+87(6j!pr1YP6$nm`-Bqtc3+nRefjLeWLN~E2#t%&Pz3lw)1z?57R{q`F}V>KVBki(r_=d zL&Nk_7qoHRTz9z}gs*3`+^ErJx#sp1i5=wcFf5Ur0<@STk9XjNdJ8x z@Bq^gJ?MX=Bxff*CZ3)u$+e!Iah2qj90fbbEw#Kfs^IijPefL21ItKf{?GzHeLq18ad@j!$DT=c-g0a^+)ETca3 z^wU~8kW&-8xvzsP(XjA!D;+ueZ9=h&p+;cJ>u?#M# zv!dqpG;026TX1ivc|)P*L02BT0@2-Li@7u39)BC%K0yoZth6R7#X0t|32Q1f?? z&4QY9fSPlGn)85~3t+7aftrhenoU5>#X!v^K+UB<&1FE%<*?xuu*Q`@%@&Nh3Zt&Z z@3pYwb+F*|K+RU5<_4f<8&Gp2Y&`T`_$$Odq?b&NWP*Y4Xp%5NXh-Nw@O@zyy)=;M|3{d@RHDqexGsYJSQUXuNa) zMl0@!tX1Y)tN5_W*K(CKUGe!A(S4wMzk{C7rsuQi;j-MKx74CnCW07HZAZ0XvF@so z#2*5ayBx&JY~p1$aopQwAzrw5;*Wy(V|yWv+g@lz0$9){TihU8S*zEG%u>W- zhj?5k)-GXy++VL`9p(ul_Iuph$SpImin@xW7f=$u=wPYFW~s(vDW4|uU-&&Rkcwxj z<$bh>9GFk8-89X^rLJaSD||L#@pd2ZC2n38*A4STWGSxLN;$6Wiqq*ToaMN;qZb>3 z7S&uoZr0aBJadk_qQrg9Wm{-$MKRC5>?#NIs*IS7Z}|wxKA;kG6G2Va}Z$gZ>A;vop<2{J+KA8K!A;uzGj77E>(`+${`R^me zm|=;5j|!9+nit6_4_bT1b*NJI!GiU}AkMZGZ0^BHJ4L_8hNs3K5wmgfxf z5yFB?Z=l?5dtRHgnTpDDiukBuUL~M~wx`e5c-x*wC;o(BQbqpgBJLjI;{?$sMJvh+ zK0&+{abSqe%`^w)rfBSU2Zwl#=)_7pIeJL$#Pi1I7IQMXW+$)TG{@^M@uI-kJ~!9B z9n*L6De?^@VWutevx$@GetMjq;FB}T%n#B35fu9|3d~QC3_e8x`8o3I7brG%BT{}v z$I>3cRT7f73m-zcDakpsp1pJ``{;bmr!8E7JKr(1gU2E|7UGkOafoWASgDMj;_=cz zgK&ZUP}-~F@;YGZL;eW5-hmR}A216()PSpe%%7lb3w9NsqBzK*r>r*NAIoCt^ zs4-+&Au0H7jh;R#?Tg$TIb|g!Pt$Xrln6Nd*yYH@?f|)-Qp7O?)zEv3D|j zPY|f9RiHYnh|dA2u$$==4Ru9)9$uH!HWcysC@>#H$L$!dGMwCe@ig*tC4yL$%^Aqq z{M7N6-~y+nRL=hr{D6T1-i;@bNAZQE#mEVG6M1c1;qGO$@j zkzXU1QAu>1z05dCl4Zm!A+3Y=2ri|KQ1!{$kNGS98qXrD+-ZfJX2^7)*wbQ@w!hk> z)w>^{dB?c?M|bVyi--AgeB0r^m$!(_^HU8Vy?&T)){q@bZ{NwcrkRrwlV_67ja0<5 zpaE>Ucs4cRc^=P^OdlYT&}=i^Y;S~`?Tt_~?~%G8+@qv7LO30mrxKJ#g+6iaW2tSC zR3nmDo!X_;x@N0~A-+?jM`b9bx&0iPE0)ADfQmJjFc7HX(8;2D5=B)^$?Jz$iwyx=lK86$rK5!al@i7~Gh$8^+ef-EV_wZwB=t+s_3b}}`#%TGFLud!bYyal_{?YTv zr4?XBO&g<)#a|>jZ7SLdwQ*Xp^;BX#jn~SxiL!0HHd&jZ)nL5%f@TVB(rTN_wK}aq IYozl30{TXLGXMYp diff --git a/target/classes/config.yml b/target/classes/config.yml index 8d5e6d8..e087ff0 100644 --- a/target/classes/config.yml +++ b/target/classes/config.yml @@ -11,7 +11,7 @@ vote-day: # Tick time where night starts night-starts-at: 12542 - # Required votes before changing to day + # Required YES votes before changing to day # Examples: "1", "2", "50%", "75%" required-votes: "50%" @@ -28,19 +28,50 @@ vote-night: # Tick time where day effectively ends for vote checks day-ends-at: 12542 + # Required YES votes before changing to night + # Examples: "1", "2", "50%", "75%" + required-votes: "50%" + + # Ignore players with this permission from vote requirement: + # dirtsleep.bypass + exclude-bypass: true + +vote-session: + # How long a vote stays open + duration-seconds: 30 + messages: prefix: "&8[&6DirtBagMC&8] &7" - vote-added: "%prefix%&e%player% &7voted for day. &f(%votes%/%required% votes, %remaining% remaining)" - vote-passed: "%prefix%&aVote passed! Skipping to day." - already-voted: "%prefix%&cYou already voted." - not-night: "%prefix%&cYou can only use this at night." - disabled: "%prefix%&cVote day is disabled." + vote-started-day: "%prefix%&e%player% &7started a vote to make it &fday&7. &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" + vote-started-night: "%prefix%&e%player% &7started a vote to make it &fnight&7. &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" - night-vote-added: "%prefix%&e%player% &7voted for night. &f(%votes%/%required% votes, %remaining% remaining)" + click-prompt: "%prefix%&7Click below to vote." + + vote-progress-day: "%prefix%&7Day vote status: &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" + vote-progress-night: "%prefix%&7Night vote status: &aYES: &f%yes%&7/&f%required% &8| &cNO: &f%no%" + + vote-passed: "%prefix%&aVote passed! Skipping to day." night-vote-passed: "%prefix%&aVote passed! Skipping to night." + + vote-failed: "%prefix%&cVote failed." + vote-expired: "%prefix%&cVote to make it day expired." + night-vote-expired: "%prefix%&cVote to make it night expired." + + vote-yes-confirm: "%prefix%&aYou voted YES." + vote-no-confirm: "%prefix%&cYou voted NO." + + vote-already-running: "%prefix%&cA vote is already running in this world." + no-active-vote: "%prefix%&cThere is no active vote in this world." + wrong-vote-command: "%prefix%&cUse the correct vote buttons for the current vote." + + already-voted: "%prefix%&cYou already voted." night-already-voted: "%prefix%&cYou already voted for night." - not-day: "%prefix%&cYou can only use this during the day." + + not-night: "%prefix%&cYou can only start this vote at night." + not-day: "%prefix%&cYou can only start this vote during the day." + + disabled: "%prefix%&cVote day is disabled." night-disabled: "%prefix%&cVote night is disabled." world-disabled: "%prefix%&cVote commands are disabled in this world." diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index 1aea36a..092fdca 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -3,13 +3,13 @@ version: 1.0 main: com.bitnix.dirtsleep.DirtSleepPlugin api-version: '1.21' author: bitnix -description: Simple vote day plugin +description: Simple vote day/night plugin commands: voteday: - description: Vote to make it day + description: Start a vote to make it day usage: /voteday votenight: - description: Vote to make it night + description: Start a vote to make it night usage: /votenight dirtsleep: description: DirtSleep admin command diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties index 43835c6..e625be0 100644 --- a/target/maven-archiver/pom.properties +++ b/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Tue Jun 09 20:09:21 EDT 2026 +#Tue Jun 09 20:37:04 EDT 2026 artifactId=DirtSleep groupId=com.bitnix version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 52b0b9a..c6bcd11 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1 +1,3 @@ +com/bitnix/dirtsleep/DirtSleepPlugin$VoteType.class com/bitnix/dirtsleep/DirtSleepPlugin.class +com/bitnix/dirtsleep/DirtSleepPlugin$ActiveVote.class