Skip to content

Commit bfc838b

Browse files
committed
Add wait until vote delay feature on proxy
- Implemented vote delay checks in `VotingPluginProxy`. - Added methods to handle vote delay logic in `Config` classes. - Updated `VotingPluginProxyConfig` with new vote delay methods. - Extended `bungeeconfig.yml` with `WaitUntilVoteDelay` settings. - Improved vote handling to skip votes if delay conditions are unmet. - Enhanced logging for skipped votes due to delay.
1 parent 9cda17e commit bfc838b

File tree

5 files changed

+174
-3
lines changed

5 files changed

+174
-3
lines changed

VotingPlugin/src/main/java/com/bencodez/votingplugin/proxy/VotingPluginProxy.java

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.io.InputStreamReader;
1010
import java.net.HttpURLConnection;
1111
import java.net.URL;
12+
import java.time.Instant;
1213
import java.time.LocalDateTime;
1314
import java.time.ZoneId;
1415
import java.time.ZoneOffset;
@@ -564,7 +565,9 @@ public void run() {
564565
}
565566
});
566567

567-
} else if (method.equals(BungeeMethod.MQTT)) {
568+
} else if (method.equals(BungeeMethod.MQTT))
569+
570+
{
568571
// use MqttHander
569572

570573
try {
@@ -592,8 +595,9 @@ public void onMessage(String topic, String payload) {
592595
}
593596

594597
}
595-
currentVotePartyVotesRequired = getConfig().getVotePartyVotesRequired()
596-
+ getVoteCacheVotePartyIncreaseVotesRequired();
598+
currentVotePartyVotesRequired =
599+
600+
getConfig().getVotePartyVotesRequired() + getVoteCacheVotePartyIncreaseVotesRequired();
597601
votePartyVotes = getVoteCacheCurrentVotePartyVotes();
598602

599603
globalMessageProxyHandler = new GlobalMessageProxyHandler() {
@@ -1044,6 +1048,81 @@ public void status() {
10441048
}
10451049
}
10461050

1051+
public String getWaitUntilDelaySiteFromService(String service) {
1052+
for (String site : getConfig().getWaitUntilVoteDelaySites()) {
1053+
if (getConfig().getWaitUntilVoteDelayService(site).equalsIgnoreCase(service)) {
1054+
return site;
1055+
}
1056+
}
1057+
return "";
1058+
}
1059+
1060+
private long getLastVotesTime(ArrayList<Column> cols, String site) {
1061+
for (Column d : cols) {
1062+
if (d.getName().equalsIgnoreCase("LastVotes")) {
1063+
1064+
DataValue value = d.getValue();
1065+
String[] list = value.getString().split("%line%");
1066+
for (String str : list) {
1067+
String[] data = str.split("//");
1068+
if (data[0].equalsIgnoreCase(site)) {
1069+
return Long.valueOf(data[1]);
1070+
}
1071+
}
1072+
1073+
}
1074+
}
1075+
return 0;
1076+
}
1077+
1078+
public boolean checkVoteDelay(String uuid, String service, ArrayList<Column> data) {
1079+
String site = getWaitUntilDelaySiteFromService(service);
1080+
if (site.isEmpty()) {
1081+
return true;
1082+
}
1083+
1084+
int voteDelay = getConfig().getWaitUntilVoteDelayVoteDelay(site);
1085+
int voteDelayMin = getConfig().getWaitUntilVoteDelayVoteDelayMin(site);
1086+
1087+
long lastVote = getLastVotesTime(data, site);
1088+
if (lastVote == 0) {
1089+
return true;
1090+
}
1091+
1092+
try {
1093+
LocalDateTime now = getBungeeTimeChecker().getTime();
1094+
LocalDateTime lastVoteTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(lastVote), ZoneId.systemDefault())
1095+
.plusHours(getConfig().getTimeHourOffSet());
1096+
1097+
if (!getConfig().getWaitUntilVoteDelayVoteDelayDaily(site)) {
1098+
if (voteDelay == 0 && voteDelayMin == 0) {
1099+
return true;
1100+
}
1101+
1102+
LocalDateTime nextvote = lastVoteTime.plusHours((long) voteDelay).plusMinutes((long) voteDelayMin);
1103+
1104+
return now.isAfter(nextvote);
1105+
}
1106+
LocalDateTime resetTime = lastVoteTime.withHour(getConfig().getWaitUntilVoteDelayVoteDelayHour(site))
1107+
.withMinute(0).withSecond(0);
1108+
LocalDateTime resetTimeTomorrow = resetTime.plusHours(24);
1109+
1110+
if (lastVoteTime.isBefore(resetTime)) {
1111+
if (now.isAfter(resetTime)) {
1112+
return true;
1113+
}
1114+
} else {
1115+
if (now.isAfter(resetTimeTomorrow)) {
1116+
return true;
1117+
}
1118+
}
1119+
} catch (Exception e) {
1120+
e.printStackTrace();
1121+
}
1122+
1123+
return false;
1124+
}
1125+
10471126
public synchronized void vote(String player, String service, boolean realVote, boolean timeQueue, long queueTime,
10481127
BungeeMessageData text, String uuid) {
10491128
try {
@@ -1127,6 +1206,11 @@ public synchronized void vote(String player, String service, boolean realVote, b
11271206
ArrayList<Column> data = getProxyMySQL()
11281207
.getExactQuery(new Column("uuid", new DataValueString(uuid)));
11291208

1209+
if (!checkVoteDelay(uuid, service, data)) {
1210+
log("Vote delay is not met for " + player + "/" + service + ", skipping vote");
1211+
return;
1212+
}
1213+
11301214
int allTimeTotal = getValue(data, "AllTimeTotal", 1);
11311215
int monthTotal = getValue(data, "MonthTotal", 1);
11321216
int dateMonthTotal = -1;

VotingPlugin/src/main/java/com/bencodez/votingplugin/proxy/VotingPluginProxyConfig.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,18 @@ public interface VotingPluginProxyConfig {
130130

131131
public List<String> getWhiteListedServers();
132132

133+
public Collection<String> getWaitUntilVoteDelaySites();
134+
135+
public String getWaitUntilVoteDelayService(String site);
136+
137+
public int getWaitUntilVoteDelayVoteDelay(String site);
138+
139+
public int getWaitUntilVoteDelayVoteDelayMin(String site);
140+
141+
public int getWaitUntilVoteDelayVoteDelayHour(String site);
142+
143+
public boolean getWaitUntilVoteDelayVoteDelayDaily(String site);
144+
133145
public void load();
134146

135147
public void save();

VotingPlugin/src/main/java/com/bencodez/votingplugin/proxy/bungee/Config.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,4 +374,34 @@ public boolean getPluginMessageEncryption() {
374374
return getData().getBoolean("PluginMessageEncryption", false);
375375
}
376376

377+
@Override
378+
public Collection<String> getWaitUntilVoteDelaySites() {
379+
return getData().getSection("WaitUntilVoteDelay").getKeys();
380+
}
381+
382+
@Override
383+
public String getWaitUntilVoteDelayService(String site) {
384+
return getData().getString("WaitUntilVoteDelay." + site + ".ServiceSite", "");
385+
}
386+
387+
@Override
388+
public int getWaitUntilVoteDelayVoteDelay(String site) {
389+
return getData().getInt("WaitUntilVoteDelay." + site + ".VoteDelay", 24);
390+
}
391+
392+
@Override
393+
public boolean getWaitUntilVoteDelayVoteDelayDaily(String site) {
394+
return getData().getBoolean("WaitUntilVoteDelay." + site + ".VoteDelayDaily", false);
395+
}
396+
397+
@Override
398+
public int getWaitUntilVoteDelayVoteDelayHour(String site) {
399+
return getData().getInt("WaitUntilVoteDelay." + site + ".VoteDelayDailyHour", 0);
400+
}
401+
402+
@Override
403+
public int getWaitUntilVoteDelayVoteDelayMin(String site) {
404+
return getData().getInt("WaitUntilVoteDelay." + site + ".VoteDelayMin", 0);
405+
}
406+
377407
}

VotingPlugin/src/main/java/com/bencodez/votingplugin/proxy/velocity/Config.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.File;
44
import java.util.ArrayList;
5+
import java.util.Collection;
56
import java.util.HashMap;
67
import java.util.List;
78
import java.util.Map;
@@ -364,4 +365,34 @@ public boolean getPluginMessageEncryption() {
364365
return getBoolean(getNode("PluginMessageEncryption"), false);
365366
}
366367

368+
@Override
369+
public Collection<String> getWaitUntilVoteDelaySites() {
370+
return getChildrenAsList(getNode("WaitUntilVoteDelay"));
371+
}
372+
373+
@Override
374+
public String getWaitUntilVoteDelayService(String site) {
375+
return getString(getNode("WaitUntilVoteDelay", site, "ServiceSite"), "");
376+
}
377+
378+
@Override
379+
public int getWaitUntilVoteDelayVoteDelay(String site) {
380+
return getInt(getNode("WaitUntilVoteDelay", site, "VoteDelay"), 24);
381+
}
382+
383+
@Override
384+
public boolean getWaitUntilVoteDelayVoteDelayDaily(String site) {
385+
return getBoolean(getNode("WaitUntilVoteDelay", site, "VoteDelayDaily"), false);
386+
}
387+
388+
@Override
389+
public int getWaitUntilVoteDelayVoteDelayHour(String site) {
390+
return getInt(getNode("WaitUntilVoteDelay", site, "VoteDelayDailyHour"), 0);
391+
}
392+
393+
@Override
394+
public int getWaitUntilVoteDelayVoteDelayMin(String site) {
395+
return getInt(getNode("WaitUntilVoteDelay", site, "VoteDelayMin"), 0);
396+
}
397+
367398
}

VotingPlugin/src/main/resources/bungeeconfig.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ Redis:
121121
# SOCKETS Settings
122122
###########################################
123123

124+
# Settings hidden to avoid confusion, highly recommend other methods first
124125
# Settings available here https://github.com/BenCodez/VotingPlugin/wiki/Bungee-Setup-SOCKETS
125126

126127
###########################################
@@ -208,6 +209,19 @@ OnlineMode: true
208209
# If true plugin will atempt to lookup uuids if none exist
209210
UUIDLookup: true
210211

212+
213+
# If you use this plugin will ignore votes from these service sites for said amount of time
214+
WaitUntiVoteDelay:
215+
# sitename must match what's in VoteSites.yml on backend servers
216+
SITENAME:
217+
# Set service site here and vote delay
218+
ServiceSite: SERVICESITE
219+
VoteDelay: 24
220+
VoteDelayMin: 0
221+
# If true it resets based on the day isntead
222+
VoteDelayDaily: false
223+
VoteDelayDailyHour: 0
224+
211225
###########################################
212226
# Month Date Totals
213227
# Experimental feature

0 commit comments

Comments
 (0)