Skip to content

Commit 59bd789

Browse files
committed
Refactor vote delay handling to use ParsedDuration
1 parent be78d4a commit 59bd789

File tree

12 files changed

+349
-278
lines changed

12 files changed

+349
-278
lines changed

VotingPlugin/src/main/java/com/bencodez/votingplugin/commands/CommandLoader.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1225,16 +1225,15 @@ public void execute(CommandSender sender, String[] args) {
12251225
});
12261226

12271227
plugin.getAdminVoteCommand()
1228-
.add(new CommandHandler(plugin, new String[] { "VoteSite", "(sitename)", "SetVoteDelay", "(number)" },
1228+
.add(new CommandHandler(plugin, new String[] { "VoteSite", "(sitename)", "SetVoteDelay", "(TEXT)" },
12291229
"VotingPlugin.Commands.AdminVote.VoteSite.Edit|" + adminPerm, "Set VoteSite VoteDelay") {
12301230

12311231
@Override
12321232
public void execute(CommandSender sender, String[] args) {
12331233
String voteSite = plugin.getVoteSiteManager().getVoteSiteName(true, args[1]);
1234-
int delay = Integer.parseInt(args[3]);
1235-
plugin.getConfigVoteSites().setVoteDelay(voteSite, delay);
1234+
plugin.getConfigVoteSites().setVoteDelay(voteSite, args[3]);
12361235
sender.sendMessage(
1237-
MessageAPI.colorize("&cSet VoteDelay to &c&l" + delay + "&c on &c&l" + voteSite));
1236+
MessageAPI.colorize("&cSet VoteDelay to &c&l" + args[3] + "&c on &c&l" + voteSite));
12381237

12391238
}
12401239
});

VotingPlugin/src/main/java/com/bencodez/votingplugin/commands/gui/AdminGUI.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,6 @@ public void openAdminGUIVoteSites(Player player) {
249249
lore.add("ServiceSite: " + voteSite.getServiceSite());
250250
lore.add("VoteURL: " + voteSite.getVoteURL());
251251
lore.add("VoteDelay: " + voteSite.getVoteDelay());
252-
lore.add("VoteDelayMin: " + voteSite.getVoteDelayMin());
253252

254253
inv.addButton(count,
255254
new BInventoryButton(voteSite.getKey(), ArrayUtils.convert(lore), new ItemStack(Material.STONE)) {
@@ -349,24 +348,13 @@ public void setValue(Player player, String value) {
349348
}
350349
}));
351350

352-
inv.addButton(new EditGUIButton(new EditGUIValueNumber("VoteDelay", voteSite.getVoteDelay()) {
351+
inv.addButton(new EditGUIButton(new EditGUIValueString("VoteDelay", voteSite.getVoteDelay()) {
353352

354353
@Override
355-
public void setValue(Player player, Number num) {
356-
VoteSite voteSite = (VoteSite) getInv().getMeta(player, "VoteSite");
357-
String siteName = voteSite.getKey();
358-
plugin.getConfigVoteSites().setVoteDelay(siteName, num.intValue());
359-
plugin.reload();
360-
}
361-
}));
362-
363-
inv.addButton(new EditGUIButton(new EditGUIValueNumber("VoteDelayMin", voteSite.getVoteDelay()) {
364-
365-
@Override
366-
public void setValue(Player player, Number num) {
354+
public void setValue(Player player, String value) {
367355
VoteSite voteSite = (VoteSite) getInv().getMeta(player, "VoteSite");
368356
String siteName = voteSite.getKey();
369-
plugin.getConfigVoteSites().setVoteDelay(siteName, num.intValue());
357+
plugin.getConfigVoteSites().setVoteDelay(siteName, value);
370358
plugin.reload();
371359
}
372360
}));
@@ -377,7 +365,7 @@ public void setValue(Player player, Number num) {
377365
public void setValue(Player player, Number num) {
378366
VoteSite voteSite = (VoteSite) getInv().getMeta(player, "VoteSite");
379367
String siteName = voteSite.getKey();
380-
plugin.getConfigVoteSites().setVoteDelay(siteName, num.intValue());
368+
plugin.getConfigVoteSites().setVoteDelayDailyHour(siteName, num.intValue());
381369
plugin.reload();
382370
}
383371
}));

VotingPlugin/src/main/java/com/bencodez/votingplugin/config/ConfigVoteSites.java

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.bencodez.simpleapi.array.ArrayUtils;
1818
import com.bencodez.simpleapi.file.YMLFile;
1919
import com.bencodez.simpleapi.messages.MessageAPI;
20+
import com.bencodez.simpleapi.time.ParsedDuration;
2021
import com.bencodez.votingplugin.VotingPluginMain;
2122
import com.bencodez.votingplugin.votesites.VoteSite;
2223

@@ -48,7 +49,7 @@ public void generateVoteSite(String siteName) {
4849
setEnabled(siteName, true);
4950
setServiceSite(siteName, org);
5051
setVoteURL(siteName, "VoteURL");
51-
setVoteDelay(siteName, 24);
52+
setVoteDelay(siteName, "24h");
5253
set(siteName, "DisplayItem.Material", "STONE");
5354
set(siteName, "DisplayItem.Amount", 1);
5455
set(siteName, "Rewards.Messages.Player", "&aThanks for voting on %ServiceSite%!");
@@ -173,24 +174,27 @@ public String getServiceSite(String siteName) {
173174
return getData(siteName).getString("ServiceSite");
174175
}
175176

176-
/**
177-
* Gets the vote delay.
178-
*
179-
* @param siteName the site name
180-
* @return the vote delay
181-
*/
182-
public double getVoteDelay(String siteName) {
183-
return getData(siteName).getDouble("VoteDelay", 24);
177+
public ParsedDuration getVoteDelay(String site) {
178+
ConfigurationSection sec = getData(site);
179+
180+
// NEW FORMAT (string)
181+
if (sec.isString("VoteDelay")) {
182+
return ParsedDuration.parse(sec.getString("VoteDelay"));
183+
}
184+
185+
// LEGACY FORMAT (numbers)
186+
double hours = sec.getDouble("VoteDelay", 0);
187+
double minutes = sec.getDouble("VoteDelayMin", 0);
188+
189+
long millis = (long) (hours * 60 * 60 * 1000) + (long) (minutes * 60 * 1000);
190+
191+
return ParsedDuration.ofMillis(millis);
184192
}
185193

186194
public int getVoteDelayDailyHour(String siteName) {
187195
return getData(siteName).getInt("VoteDelayDailyHour", 0);
188196
}
189197

190-
public double getVoteDelayMin(String siteName) {
191-
return getData(siteName).getDouble("VoteDelayMin", 0);
192-
}
193-
194198
/**
195199
* Gets the vote site enabled.
196200
*
@@ -448,14 +452,10 @@ public void setServiceSite(String siteName, String serviceSite) {
448452
* @param siteName the site name
449453
* @param voteDelay the vote delay
450454
*/
451-
public void setVoteDelay(String siteName, double voteDelay) {
455+
public void setVoteDelay(String siteName, String voteDelay) {
452456
set(siteName, "VoteDelay", voteDelay);
453457
}
454458

455-
public void setVoteDelayDaily(String siteName, boolean value) {
456-
set(siteName, "VoteDelayDaily", value);
457-
}
458-
459459
/**
460460
* Sets the vote URL.
461461
*
@@ -484,4 +484,12 @@ public boolean siteCheck(String siteName) {
484484
return pass;
485485
}
486486

487+
public void setVoteDelayDailyHour(String siteName, int intValue) {
488+
set(siteName, "VoteDelayDailyHour", intValue);
489+
}
490+
491+
public void setVoteDelayDaily(String siteName, boolean value) {
492+
set(siteName, "VoteDelayDaily", value);
493+
}
494+
487495
}

VotingPlugin/src/main/java/com/bencodez/votingplugin/specialrewards/votemilestones/VoteMilestoneLimit.java

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,15 @@ public enum Type {
2121
}
2222

2323
private final Type type;
24-
private final long cooldownMillis; // for COOLDOWN when not using months
25-
private final int cooldownMonths; // for COOLDOWN when Duration uses "mo"
24+
private final long cooldownMillis; // fixed millis cooldown
2625

27-
public VoteMilestoneLimit(Type type, long cooldownMillis, int cooldownMonths) {
26+
public VoteMilestoneLimit(Type type, long cooldownMillis) {
2827
this.type = type == null ? Type.NONE : type;
2928
this.cooldownMillis = Math.max(0L, cooldownMillis);
30-
this.cooldownMonths = Math.max(0, cooldownMonths);
3129
}
3230

3331
public static VoteMilestoneLimit none() {
34-
return new VoteMilestoneLimit(Type.NONE, 0L, 0);
32+
return new VoteMilestoneLimit(Type.NONE, 0L);
3533
}
3634

3735
public Type getType() {
@@ -42,10 +40,6 @@ public long getCooldownMillis() {
4240
return cooldownMillis;
4341
}
4442

45-
public int getCooldownMonths() {
46-
return cooldownMonths;
47-
}
48-
4943
public boolean isEnabled() {
5044
return type != Type.NONE;
5145
}
@@ -74,24 +68,26 @@ public static VoteMilestoneLimit fromConfig(ConfigurationSection milestoneSectio
7468
if (pd.isEmpty()) {
7569
long minutes = sec.getLong("Minutes", 0L);
7670
if (minutes > 0) {
77-
return new VoteMilestoneLimit(Type.COOLDOWN, minutes * 60_000L, 0);
71+
return new VoteMilestoneLimit(Type.COOLDOWN, minutes * 60_000L);
7872
}
7973
return none(); // cooldown with no duration => treat as NONE
8074
}
8175

82-
return new VoteMilestoneLimit(Type.COOLDOWN, pd.getMillis(), pd.getMonths());
76+
return new VoteMilestoneLimit(Type.COOLDOWN, pd.getMillis());
8377
}
8478

8579
// window types or none
86-
return new VoteMilestoneLimit(type, 0L, 0);
80+
return new VoteMilestoneLimit(type, 0L);
8781
}
8882

8983
private static Type parseType(String raw) {
90-
if (raw == null)
84+
if (raw == null) {
9185
return Type.NONE;
86+
}
9287
String v = raw.trim().toUpperCase();
93-
if (v.isEmpty())
88+
if (v.isEmpty()) {
9489
return Type.NONE;
90+
}
9591

9692
// Allow friendly aliases
9793
switch (v) {
@@ -137,27 +133,16 @@ public boolean allows(long lastTriggeredMs, long nowMs, ZoneId zone) {
137133
case WINDOW_MONTH:
138134
return !sameMonth(lastTriggeredMs, nowMs, zone);
139135
case COOLDOWN:
140-
return nowMs >= nextAllowedMs(lastTriggeredMs, zone);
136+
return nowMs >= nextAllowedMs(lastTriggeredMs);
141137
default:
142138
return true;
143139
}
144140
}
145141

146-
public long nextAllowedMs(long lastTriggeredMs, ZoneId zone) {
142+
public long nextAllowedMs(long lastTriggeredMs) {
147143
if (type != Type.COOLDOWN || lastTriggeredMs <= 0) {
148144
return 0L;
149145
}
150-
if (zone == null) {
151-
zone = ZoneId.systemDefault();
152-
}
153-
154-
// Month-aware cooldown: add calendar months
155-
if (cooldownMonths > 0) {
156-
ZonedDateTime zdt = Instant.ofEpochMilli(lastTriggeredMs).atZone(zone);
157-
return zdt.plusMonths(cooldownMonths).toInstant().toEpochMilli();
158-
}
159-
160-
// Fixed millis cooldown
161146
return lastTriggeredMs + cooldownMillis;
162147
}
163148

0 commit comments

Comments
 (0)