Compare commits

..
22 Commits
Author SHA1 Message Date
BenCodez b217edeadf Update version number to 6.13 2023-05-14 13:15:00 -04:00
BenCodez aa4ad384c1 Adjustments to remove static usuage 2023-05-14 13:03:43 -04:00
BenCodez 8021024b48 Small change to reduce RAM usuage 2023-05-13 20:32:19 -04:00
BenCodez d3f246d048 Add extra customization to vote next GUI 2023-05-13 08:34:05 -04:00
BenCodez 9c2dfcab06 A lot of changes to getting all player data to prevent possible issues 2023-05-13 08:23:48 -04:00
BenCodez 8b4224a034 Add stats for background task time taken and remove playerdataloadlimit 2023-05-12 20:28:06 -04:00
BenCodez 61bf0007c1 Minor change to time changes 2023-05-10 20:44:56 -04:00
BenCodez 151559c50e Support time zones of proxies, improve speed of time changes 2023-05-10 20:24:45 -04:00
BenCodez 2dccf6e790 Add random player placeholder for vote party 2023-05-10 16:53:53 -04:00
BenCodez bc510b1ba0 Remove use of using 2 tasks 2023-05-09 20:57:03 -04:00
BenCodez 0253d86b8d Properly account canvote placeholder with timeoffsets and votedelaydaily 2023-05-07 21:12:38 -04:00
BenCodez 59cd31a6c8 Improve speed of background task 2023-05-07 20:52:35 -04:00
BenCodez 068b24bd39 Account for time offset in canvote placeholders 2023-05-07 19:03:56 -04:00
BenCodez 7f06797f5f Add placeholder for next available milestone data 2023-05-07 13:28:14 -04:00
BenCodez 3e2bdf4772 Remove duplicate placeholder cache update 2023-05-07 13:12:45 -04:00
BenCodez 3b049299b1 Adjust handling of recaching to optimize performance 2023-05-06 20:04:08 -04:00
BenCodez 05670bebeb Update placeholder cache on vote 2023-05-05 19:47:48 -04:00
BenCodez 81f73590a6 Switch to json files on velocity for vote caches 2023-05-04 20:47:51 -04:00
BenCodez 163e4cdadb Convert yaml files to json on bungeecord due to yaml size limit 2023-05-04 20:14:26 -04:00
BenCodez 512c02e501 Change default return of custom placeholders to return the value instead 2023-05-01 17:27:55 -04:00
BenCodez 25ef8ba315 Adjust to advancedcore changes 2023-05-01 17:24:17 -04:00
BenCodez 8966feb35a Change placeholder name to avoid conflict 2023-05-01 16:41:09 -04:00
30 changed files with 492 additions and 280 deletions

No files matched your search

+6 -7
View File
@@ -434,11 +434,11 @@ CachedPlaceholders: []
UseJavascriptPlaceholders: false
# Custom placeholder returns
# For the example below use %votingplugin_custom_points_5%
# For the example below use %votingplugin_custom_enoughpoints_5%
# DO NOT USE ON MAIN THREAD IF POSSIBLE
# Keep everything lowercase
#CustomPlaceholderReturns:
# 'points_5':
# 'enoughpoints_5':
# 'true': 'User has enough points'
# 'false': 'User does not have enough points'
@@ -646,11 +646,6 @@ DelayBetweenUpdates: 3
# Recommend leaving this to false
ExtraBackgroundUpdate: false
# Limit number of users to load in a second
# Effects background tasks mainly
# set to -1 to disable (default value)
#PlayerDataLoadLimit: 500
##########################################
# Inventory controls
##########################################
@@ -680,6 +675,10 @@ AlwaysCloseInventory: false
# This is to prevent any possible exploits
CloseInventoryOnVote: true
# This will close GUI's if you shift click them rather than a regular
# This can help prevent exploits
CloseGUIOnShiftClick: false
###########################################
# Purge settings
###########################################
+4
View File
@@ -143,6 +143,10 @@ CHEST:
VoteNext:
Name: 'VoteNext: %player%'
BackButton: true
# Extra customization for displaying site names in GUI only
#CustomSiteNamesDisplays:
# Site1: site name display
LoreLine: '%time%'
VoteToday:
Name: 'VoteToday'
Line: '&6%VoteSite% : %Time%'
+1 -1
View File
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.bencodez</groupId>
<artifactId>votingplugin</artifactId>
<version>6.12.2</version>
<version>6.13</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -302,7 +302,7 @@ public class BungeeHandler implements Listener {
boolean setTotals = Boolean.valueOf(args.get(7));
user.clearCache();
user.cache();
boolean broadcast = true;
boolean bungeeBroadcast = false;
@@ -385,7 +385,7 @@ public class BungeeHandler implements Listener {
"pluginmessaging voteonline received from " + player + "/" + uuid + " on " + service);
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid),
player);
user.clearCache();
user.cache();
if (plugin.getBungeeSettings().isPerServerPoints()) {
user.addPoints(plugin.getConfigFile().getPointsOnVote());
@@ -457,7 +457,7 @@ public class BungeeHandler implements Listener {
String player = args.get(0);
plugin.debug("pluginmessaging voteupdate received for " + player);
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(player));
user.clearCache();
user.cache();
user.offVote();
@@ -577,7 +577,7 @@ public class BungeeHandler implements Listener {
user = UserManager.getInstance().getVotingPluginUser(data[2]);
}
user.clearCache();
user.cache();
if (plugin.getBungeeSettings().isPerServerPoints()) {
user.addPoints(plugin.getConfigFile().getPointsOnVote());
@@ -610,7 +610,7 @@ public class BungeeHandler implements Listener {
user = UserManager.getInstance().getVotingPluginUser(data[2]);
}
user.clearCache();
user.cache();
if (plugin.getBungeeSettings().isPerServerPoints()) {
user.addPoints(plugin.getConfigFile().getPointsOnVote());
@@ -53,6 +53,7 @@ import com.bencodez.advancedcore.api.rewards.injected.RewardInjectInt;
import com.bencodez.advancedcore.api.rewards.injected.RewardInjectValidator;
import com.bencodez.advancedcore.api.skull.SkullHandler;
import com.bencodez.advancedcore.api.updater.Updater;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.advancedcore.logger.Logger;
import com.bencodez.advancedcore.nms.NMSManager;
import com.bencodez.votingplugin.broadcast.BroadcastHandler;
@@ -81,6 +82,7 @@ import com.bencodez.votingplugin.placeholders.MVdWPlaceholders;
import com.bencodez.votingplugin.placeholders.PlaceHolders;
import com.bencodez.votingplugin.signs.Signs;
import com.bencodez.votingplugin.specialrewards.SpecialRewards;
import com.bencodez.votingplugin.test.VoteTester;
import com.bencodez.votingplugin.timequeue.TimeQueueHandler;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.bencodez.votingplugin.topvoter.TopVoterHandler;
@@ -144,6 +146,9 @@ public class VotingPluginMain extends AdvancedCorePlugin {
@Getter
private PlaceHolders placeholders;
@Getter
private VoteTester voteTester;
@Getter
private String profile = "";
@@ -223,7 +228,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
public void basicBungeeUpdate() {
for (Player player : Bukkit.getOnlinePlayers()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(player);
user.clearCache();
user.cache();
user.offVote();
user.checkOfflineRewards();
}
@@ -1012,6 +1017,8 @@ public class VotingPluginMain extends AdvancedCorePlugin {
public void onPostLoad() {
loadVersionFile();
getOptions().setServer(bungeeSettings.getServer());
voteTester = new VoteTester(plugin);
loadVoteTimer();
@@ -1102,7 +1109,6 @@ public class VotingPluginMain extends AdvancedCorePlugin {
placeholders = new PlaceHolders(this);
getServerData().updatePlaceholders();
placeholders.load();
if (Bukkit.getPluginManager().isPluginEnabled("MVdWPlaceholderAPI")) {
mvdwPlaceholders = new MVdWPlaceholders(this);
@@ -1393,7 +1399,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
voteReminding.loadRemindChecking();
coolDownCheck.checkEnabled();
setUpdate(true);
}
@@ -1420,6 +1426,9 @@ public class VotingPluginMain extends AdvancedCorePlugin {
plugin.debug("Loaded Files");
}
@Getter
private long lastBackgroundTaskTimeTaken = -1;
public void update() {
if (update || configFile.isAlwaysUpdate()) {
if (!updateStarted && plugin != null) {
@@ -1434,7 +1443,6 @@ public class VotingPluginMain extends AdvancedCorePlugin {
plugin.debug("Starting background task, current cached users: "
+ plugin.getUserManager().getDataManager().getUserDataCache().keySet().size());
int dataLoadLimit = getConfigFile().getPlayerDataLoadLimit();
try {
boolean extraBackgroundUpdate = configFile.isExtraBackgroundUpdate();
long startTime = System.currentTimeMillis();
@@ -1456,17 +1464,23 @@ public class VotingPluginMain extends AdvancedCorePlugin {
.getTopVoterIgnorePermission();
ArrayList<String> blackList = plugin.getConfigFile().getBlackList();
ArrayList<String> uuids = UserManager.getInstance().getAllUUIDs();
// ArrayList<String> uuids = UserManager.getInstance().getAllUUIDs();
int currentDay = LocalDateTime.now().getDayOfMonth();
int currentDataLoad = 0;
for (String uuid : uuids) {
HashMap<UUID, ArrayList<Column>> cols = plugin.getUserManager().getAllKeys();
long time1 = ((System.currentTimeMillis() - startTime) / 1000);
plugin.debug("Finished getting player data in " + time1 + " seconds, " + cols.size()
+ " users, " + plugin.getStorageType().toString());
time1 = System.currentTimeMillis();
for (Entry<UUID, ArrayList<Column>> playerData : cols.entrySet()) {
String uuid = playerData.getKey().toString();
if (plugin != null && plugin.isEnabled()) {
if (uuid != null && !uuid.isEmpty()) {
VotingPluginUser user = UserManager.getInstance()
.getVotingPluginUser(UUID.fromString(uuid), false);
user.dontCache();
user.tempCache();
user.getUserData().updateCacheWithTemp();
user.updateTempCacheWithColumns(playerData.getValue());
cols.put(playerData.getKey(), null);
if (!user.isBanned() && !blackList.contains(user.getPlayerName())) {
if (!topVoterIgnorePermissionUse || !user.isTopVoterIgnore()) {
@@ -1508,24 +1522,13 @@ public class VotingPluginMain extends AdvancedCorePlugin {
}
user.clearTempCache();
user = null;
if (dataLoadLimit > 0) {
currentDataLoad++;
if (currentDataLoad >= dataLoadLimit) {
currentDataLoad -= dataLoadLimit;
Thread.sleep(1000);
}
}
}
} else {
return;
}
}
update = false;
long time1 = ((System.currentTimeMillis() - startTime) / 1000);
plugin.debug("Finished loading player data in " + time1 + " seconds, " + uuids.size()
+ " users, " + plugin.getStorageType().toString() + ", data load limit: "
+ dataLoadLimit);
time1 = System.currentTimeMillis();
cols.clear();
cols = null;
topVoterHandler.updateTopVoters(tempTopVoter);
placeholders.onUpdate();
@@ -1533,17 +1536,22 @@ public class VotingPluginMain extends AdvancedCorePlugin {
serverData.updateValues();
getSigns().updateSigns();
tempTopVoter = null;
checkFirstTimeLoaded();
time1 = ((System.currentTimeMillis() - time1) / 1000);
long totalTime = ((System.currentTimeMillis() - startTime) / 1000);
plugin.debug("Background task finished. Final processing took " + time1
+ " seconds. Total time: " + totalTime + " seconds");
plugin.getUserManager().getDataManager().clearNonNeededCachedUsers();
plugin.extraDebug("Current cached users: "
+ plugin.getUserManager().getDataManager().getUserDataCache().keySet().size());
update = false;
tempTopVoter = null;
time1 = ((System.currentTimeMillis() - time1) / 1000);
long totalTime = ((System.currentTimeMillis() - startTime) / 1000);
lastBackgroundTaskTimeTaken = totalTime;
plugin.debug("Background task finished. Final processing took " + time1
+ " seconds. Total time: " + totalTime + " seconds");
} catch (Exception ex) {
if (plugin != null) {
plugin.getLogger().info("Looks like something went wrong");
@@ -351,6 +351,14 @@ public class VotingPluginMetrics {
}
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("background_task_time_taken", new Callable<String>() {
@Override
public String call() throws Exception {
return "" + plugin.getLastBackgroundTaskTimeTaken();
}
}));
if (!plugin.getBuildNumber().equals("NOTSET")) {
metrics.addCustomChart(new BStatsMetrics.SimplePie("dev_build_number", new Callable<String>() {
@@ -7,6 +7,7 @@ import lombok.Getter;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.JsonConfiguration;
import net.md_5.bungee.config.YamlConfiguration;
public class NonVotedPlayersCache {
@@ -53,7 +54,8 @@ public class NonVotedPlayersCache {
bungee.getDataFolder().mkdir();
}
File file = new File(bungee.getDataFolder(), "nonvotedplayerscache.yml");
File yamlFile = new File(bungee.getDataFolder(), "nonvotedplayerscache.yml");
File file = new File(bungee.getDataFolder(), "nonvotedplayerscache.json");
if (!file.exists()) {
try {
@@ -62,9 +64,24 @@ public class NonVotedPlayersCache {
e.printStackTrace();
}
}
if (yamlFile.exists()) {
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "nonvotedplayerscache.yml"));
yamlFile.renameTo(new File(bungee.getDataFolder(), "oldnonvotedplayerscache.yml"));
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "oldnonvotedplayerscache.yml"));
} catch (IOException e) {
e.printStackTrace();
}
save();
}
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "nonvotedplayerscache.yml"));
data = ConfigurationProvider.getProvider(JsonConfiguration.class)
.load(new File(bungee.getDataFolder(), "nonvotedplayerscache.json"));
} catch (IOException e) {
e.printStackTrace();
}
@@ -84,8 +101,8 @@ public class NonVotedPlayersCache {
public void save() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "nonvotedplayerscache.yml"));
ConfigurationProvider.getProvider(JsonConfiguration.class).save(data,
new File(bungee.getDataFolder(), "nonvotedplayerscache.json"));
} catch (IOException e) {
e.printStackTrace();
}
@@ -9,6 +9,7 @@ import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import lombok.Getter;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.JsonConfiguration;
import net.md_5.bungee.config.YamlConfiguration;
public class VoteCache {
@@ -114,7 +115,9 @@ public class VoteCache {
bungee.getDataFolder().mkdir();
}
File file = new File(bungee.getDataFolder(), "votecache.yml");
File yamlFile = new File(bungee.getDataFolder(), "votecache.yml");
File file = new File(bungee.getDataFolder(), "votecache.json");
if (!file.exists()) {
try {
@@ -123,9 +126,23 @@ public class VoteCache {
e.printStackTrace();
}
}
if (yamlFile.exists()) {
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "votecache.yml"));
yamlFile.renameTo(new File(bungee.getDataFolder(), "oldvotecache.yml"));
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "oldvotecache.yml"));
} catch (IOException e) {
e.printStackTrace();
}
save();
}
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "votecache.yml"));
data = ConfigurationProvider.getProvider(JsonConfiguration.class)
.load(new File(bungee.getDataFolder(), "votecache.json"));
} catch (IOException e) {
e.printStackTrace();
}
@@ -133,8 +150,8 @@ public class VoteCache {
public void save() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "votecache.yml"));
ConfigurationProvider.getProvider(JsonConfiguration.class).save(data,
new File(bungee.getDataFolder(), "votecache.json"));
} catch (IOException e) {
e.printStackTrace();
}
@@ -572,7 +572,8 @@ public class VotingPluginBungee extends Plugin implements Listener {
method = BungeeMethod.PLUGINMESSAGING;
}
bungeeTimeChecker = new BungeeTimeChecker(config.getData().getInt("TimeHourOffSet")) {
bungeeTimeChecker = new BungeeTimeChecker(config.getData().getString("TimeZone", ""),
config.getData().getInt("TimeHourOffSet")) {
@Override
public void warning(String text) {
@@ -591,7 +592,7 @@ public class VotingPluginBungee extends Plugin implements Listener {
try {
lastOnline = Long.valueOf(lastOnlineStr);
} catch (NumberFormatException e) {
//e.printStackTrace();
// e.printStackTrace();
}
if (LocalDateTime.now().atZone(ZoneOffset.UTC).toInstant().toEpochMilli() - lastOnline < 1000
@@ -2,10 +2,10 @@ package com.bencodez.votingplugin.bungee.velocity;
import java.io.File;
import com.bencodez.advancedcore.bungeeapi.velocity.VelocityYMLFile;
import com.bencodez.advancedcore.bungeeapi.velocity.VelocityJSONFile;
import com.velocitypowered.api.proxy.Player;
public class NonVotedPlayersCache extends VelocityYMLFile {
public class NonVotedPlayersCache extends VelocityJSONFile {
private VotingPluginVelocity plugin;
@@ -3,13 +3,13 @@ package com.bencodez.votingplugin.bungee.velocity;
import java.io.File;
import java.util.Collection;
import com.bencodez.advancedcore.bungeeapi.velocity.VelocityYMLFile;
import com.bencodez.advancedcore.bungeeapi.velocity.VelocityJSONFile;
import com.bencodez.votingplugin.bungee.OfflineBungeeVote;
import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import ninja.leaping.configurate.ConfigurationNode;
public class VoteCache extends VelocityYMLFile {
public class VoteCache extends VelocityJSONFile {
public VoteCache(File file) {
super(file);
@@ -59,6 +59,7 @@ import com.bencodez.advancedcore.bungeeapi.sockets.ClientHandler;
import com.bencodez.advancedcore.bungeeapi.sockets.SocketHandler;
import com.bencodez.advancedcore.bungeeapi.sockets.SocketReceiver;
import com.bencodez.advancedcore.bungeeapi.time.BungeeTimeChecker;
import com.bencodez.advancedcore.bungeeapi.velocity.VelocityYMLFile;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.bungee.BungeeVersion;
@@ -611,7 +612,8 @@ public class VotingPluginVelocity {
e.printStackTrace();
}
bungeeTimeChecker = new BungeeTimeChecker(config.getNode("TimeHourOffSet").getInt()) {
bungeeTimeChecker = new BungeeTimeChecker(config.getNode("TimeZone").getString(""),
config.getNode("TimeHourOffSet").getInt()) {
@Override
public void warning(String text) {
@@ -632,7 +634,7 @@ public class VotingPluginVelocity {
try {
lastOnline = Long.valueOf(lastOnlineStr);
} catch (NumberFormatException e) {
//e.printStackTrace();
// e.printStackTrace();
}
if (LocalDateTime.now().atZone(ZoneOffset.UTC).toInstant().toEpochMilli() - lastOnline < 1000
@@ -752,12 +754,36 @@ public class VotingPluginVelocity {
if (mysqlLoaded) {
uuidPlayerNameCache = mysql.getRowsUUIDNameQuery();
voteCacheFile = new VoteCache(new File(dataDirectory.toFile(), "votecache.yml"));
voteCacheFile = new VoteCache(new File(dataDirectory.toFile(), "votecache.json"));
bungeeTimeChecker.loadTimer();
// convert yml file if exists
File yamlVoteCacheFile = new File(dataDirectory.toFile(), "votecache.yml");
if (yamlVoteCacheFile.exists()) {
VelocityYMLFile yamlVoteCache = new VelocityYMLFile(yamlVoteCacheFile);
voteCacheFile.setConf(yamlVoteCache.getData());
yamlVoteCacheFile.renameTo(new File(dataDirectory.toFile(), "oldvotecache.yml"));
VelocityYMLFile oldYamlVoteCache = new VelocityYMLFile(
new File(dataDirectory.toFile(), "oldvotecache.yml"));
oldYamlVoteCache.setConf(yamlVoteCache.getData());
voteCacheFile.save();
}
nonVotedPlayersCache = new NonVotedPlayersCache(
new File(dataDirectory.toFile(), "nonvotedplayerscache.yml"), this);
new File(dataDirectory.toFile(), "nonvotedplayerscache.json"), this);
// convert yml file if exists
File yamlnonVotedPlayersCacheFile = new File(dataDirectory.toFile(), "nonvotedplayerscache.yml");
if (yamlnonVotedPlayersCacheFile.exists()) {
VelocityYMLFile yamlnonVotedPlayersCache = new VelocityYMLFile(yamlnonVotedPlayersCacheFile);
voteCacheFile.setConf(yamlnonVotedPlayersCache.getData());
yamlnonVotedPlayersCacheFile.renameTo(new File(dataDirectory.toFile(), "oldnonvotedplayerscache.yml"));
VelocityYMLFile oldYamlnonVotedPlayersCache = new VelocityYMLFile(
new File(dataDirectory.toFile(), "oldnonvotedplayerscache.yml"));
oldYamlnonVotedPlayersCache.setConf(yamlnonVotedPlayersCache.getData());
voteCacheFile.save();
}
bungeeTimeChecker.loadTimer();
try {
for (String key : voteCacheFile.getTimedVoteCache()) {
@@ -3,6 +3,7 @@ package com.bencodez.votingplugin.commands;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Pattern;
@@ -30,7 +31,7 @@ import com.bencodez.advancedcore.api.misc.ArrayUtils;
import com.bencodez.advancedcore.api.misc.PlayerUtils;
import com.bencodez.advancedcore.api.rewards.RewardOptions;
import com.bencodez.advancedcore.api.updater.Updater;
import com.bencodez.advancedcore.api.user.UserStorage;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.advancedcore.api.user.userstorage.DataType;
import com.bencodez.advancedcore.api.valuerequest.ValueRequest;
import com.bencodez.advancedcore.api.valuerequest.listeners.BooleanListener;
@@ -65,7 +66,6 @@ import com.bencodez.votingplugin.commands.gui.player.VoteURLVoteSite;
import com.bencodez.votingplugin.commands.tabcompleter.AliasesTabCompleter;
import com.bencodez.votingplugin.events.PlayerVoteEvent;
import com.bencodez.votingplugin.objects.VoteSite;
import com.bencodez.votingplugin.test.VoteTester;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.bencodez.votingplugin.user.UserManager;
import com.bencodez.votingplugin.user.VotingPluginUser;
@@ -297,12 +297,7 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
sendMessage(sender, "&cStarting...");
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance()
.getVotingPluginUser(UUID.fromString(uuid));
user.dontCache();
user.setMilestoneCount(user.getTotal(TopVoter.AllTime));
}
plugin.getUserManager().copyColumnData(TopVoter.AllTime.getColumnName(), "MilestoneCount");
sendMessage(sender, "&cFinished sync milestonecount with all time total");
}
@@ -337,34 +332,46 @@ public class CommandLoader {
plugin.getLogger().warning("Failed to get number from " + str);
}
}
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance()
.getVotingPluginUser(UUID.fromString(uuid));
user.dontCache();
int milestoneCount = user.getMilestoneCount();
for (int num : nums) {
if (milestoneCount >= num) {
if (!user.hasGottenMilestone(num)) {
sendMessage(sender,
"&cMilestone " + num + " for " + user.getPlayerName()
HashMap<UUID, ArrayList<Column>> cols = plugin.getUserManager().getAllKeys();
for (Entry<UUID, ArrayList<Column>> playerData : cols.entrySet()) {
String uuid = playerData.getKey().toString();
if (plugin != null && plugin.isEnabled()) {
if (uuid != null && !uuid.isEmpty()) {
VotingPluginUser user = UserManager.getInstance()
.getVotingPluginUser(UUID.fromString(uuid));
user.dontCache();
user.updateTempCacheWithColumns(playerData.getValue());
cols.put(playerData.getKey(), null);
int milestoneCount = user.getMilestoneCount();
for (int num : nums) {
if (milestoneCount >= num) {
if (!user.hasGottenMilestone(num)) {
sendMessage(sender, "&cMilestone " + num + " for "
+ user.getPlayerName()
+ " not already given when it should be, Current AllTimeTotal: "
+ user.getTotal(TopVoter.AllTime) + ", Current MileStoneCount: "
+ user.getMilestoneCount());
user.setHasGotteMilestone(num, true);
}
} else {
if (user.hasGottenMilestone(num)) {
sendMessage(sender,
"&cMilestone " + num + " for " + user.getPlayerName()
user.setHasGotteMilestone(num, true);
}
} else {
if (user.hasGottenMilestone(num)) {
sendMessage(sender, "&cMilestone " + num + " for "
+ user.getPlayerName()
+ " already given when it shouldn't be, Current AllTimeTotal: "
+ user.getTotal(TopVoter.AllTime) + ", Current MileStoneCount: "
+ user.getMilestoneCount());
user.setHasGotteMilestone(num, false);
}
user.setHasGotteMilestone(num, false);
}
}
}
user.clearTempCache();
}
}
}
cols.clear();
cols = null;
sendMessage(sender, "&cFinished");
}
@@ -1300,7 +1307,7 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VoteTester.getInstance().testVotes(Integer.parseInt(args[3]), args[1], args[2]);
plugin.getVoteTester().testVotes(Integer.parseInt(args[3]), args[1], args[2]);
if (isPlayer(sender)) {
sendMessage(sender, "&cSee console for details");
}
@@ -1313,7 +1320,7 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VoteTester.getInstance().testSpam(Integer.parseInt(args[3]), args[1], args[2]);
plugin.getVoteTester().testSpam(Integer.parseInt(args[3]), args[1], args[2]);
if (isPlayer(sender)) {
sendMessage(sender, "&cSee console for details");
}
@@ -1326,7 +1333,7 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VoteTester.getInstance().testRewards(Integer.parseInt(args[3]), args[1], args[2]);
plugin.getVoteTester().testRewards(Integer.parseInt(args[3]), args[1], args[2]);
if (isPlayer(sender)) {
sendMessage(sender, "&cSee console for details");
}
@@ -1684,110 +1691,97 @@ public class CommandLoader {
@Override
public void run() {
com.bencodez.advancedcore.thread.Thread.getInstance().run(new Runnable() {
loadTabComplete();
@Override
public void run() {
loadTabComplete();
UserGUI.getInstance().addPluginButton(plugin,
new BInventoryButton("Force Vote", new String[] {}, new ItemStack(Material.STONE)) {
UserGUI.getInstance().addPluginButton(plugin,
new BInventoryButton("Force Vote", new String[] {}, new ItemStack(Material.STONE)) {
@Override
public void onClick(ClickEvent clickEvent) {
Player player = clickEvent.getPlayer();
ArrayList<String> voteSites = new ArrayList<String>();
for (VoteSite voteSite : plugin.getVoteSites()) {
voteSites.add(voteSite.getKey());
}
new ValueRequest().requestString(player, "",
ArrayUtils.getInstance().convert(voteSites), true, new StringListener() {
@Override
public void onClick(ClickEvent clickEvent) {
Player player = clickEvent.getPlayer();
ArrayList<String> voteSites = new ArrayList<String>();
for (VoteSite voteSite : plugin.getVoteSites()) {
voteSites.add(voteSite.getKey());
}
new ValueRequest().requestString(player, "",
ArrayUtils.getInstance().convert(voteSites), true,
new StringListener() {
@Override
public void onInput(Player player, String value) {
PlayerVoteEvent voteEvent = new PlayerVoteEvent(
plugin.getVoteSite(value, true),
UserGUI.getInstance().getCurrentPlayer(player),
plugin.getVoteSiteServiceSite(value), false);
plugin.getServer().getPluginManager().callEvent(voteEvent);
player.sendMessage("Forced vote for "
+ UserGUI.getInstance().getCurrentPlayer(player) + " on "
+ value);
}
});
}
});
UserGUI.getInstance().addPluginButton(plugin,
new BInventoryButton("MileStones", new String[0], new ItemStack(Material.STONE)) {
@Override
public void onClick(ClickEvent event) {
Player player = event.getWhoClicked();
String playerName = (String) event.getMeta(player, "Player");
BInventory inv = new BInventory("MileStones: " + playerName);
for (String mileStoneName : plugin.getSpecialRewardsConfig().getMilestoneVotes()) {
if (StringParser.getInstance().isInt(mileStoneName)) {
int mileStone = Integer.parseInt(mileStoneName);
inv.addButton(inv.getNextSlot(),
new BInventoryButton("" + mileStone, new String[] {
"Enabled: " + plugin.getSpecialRewardsConfig()
.getMilestoneRewardEnabled(mileStone),
"&cClick to set wether this has been completed or not" },
new ItemStack(Material.STONE)) {
@Override
public void onInput(Player player, String value) {
PlayerVoteEvent voteEvent = new PlayerVoteEvent(
plugin.getVoteSite(value, true),
UserGUI.getInstance().getCurrentPlayer(player),
plugin.getVoteSiteServiceSite(value), false);
plugin.getServer().getPluginManager().callEvent(voteEvent);
public void onClick(ClickEvent clickEvent) {
if (StringParser.getInstance().isInt(clickEvent.getClickedItem()
.getItemMeta().getDisplayName())) {
Player player = clickEvent.getPlayer();
int mileStone = Integer.parseInt(clickEvent.getClickedItem()
.getItemMeta().getDisplayName());
String playerName = (String) event.getMeta(player,
"Player");
VotingPluginUser user = UserManager.getInstance()
.getVotingPluginUser(playerName);
new ValueRequest().requestBoolean(player,
"" + user.hasGottenMilestone(mileStone),
new BooleanListener() {
player.sendMessage("Forced vote for "
+ UserGUI.getInstance().getCurrentPlayer(player)
+ " on " + value);
@Override
public void onInput(Player player,
boolean value) {
String playerName = UserGUI.getInstance()
.getCurrentPlayer(player);
VotingPluginUser user = UserManager
.getInstance()
.getVotingPluginUser(playerName);
user.setHasGotteMilestone(mileStone, value);
player.sendMessage(
"Set milestone completetion to "
+ value + " on "
+ mileStone);
}
});
}
}
});
}
});
}
}
});
UserGUI.getInstance().addPluginButton(plugin,
new BInventoryButton("MileStones", new String[0], new ItemStack(Material.STONE)) {
@Override
public void onClick(ClickEvent event) {
Player player = event.getWhoClicked();
String playerName = (String) event.getMeta(player, "Player");
BInventory inv = new BInventory("MileStones: " + playerName);
for (String mileStoneName : plugin.getSpecialRewardsConfig()
.getMilestoneVotes()) {
if (StringParser.getInstance().isInt(mileStoneName)) {
int mileStone = Integer.parseInt(mileStoneName);
inv.addButton(inv.getNextSlot(),
new BInventoryButton("" + mileStone, new String[] {
"Enabled: " + plugin.getSpecialRewardsConfig()
.getMilestoneRewardEnabled(mileStone),
"&cClick to set wether this has been completed or not" },
new ItemStack(Material.STONE)) {
@Override
public void onClick(ClickEvent clickEvent) {
if (StringParser.getInstance()
.isInt(clickEvent.getClickedItem().getItemMeta()
.getDisplayName())) {
Player player = clickEvent.getPlayer();
int mileStone = Integer
.parseInt(clickEvent.getClickedItem()
.getItemMeta().getDisplayName());
String playerName = (String) event.getMeta(player,
"Player");
VotingPluginUser user = UserManager.getInstance()
.getVotingPluginUser(playerName);
new ValueRequest().requestBoolean(player,
"" + user.hasGottenMilestone(mileStone),
new BooleanListener() {
@Override
public void onInput(Player player,
boolean value) {
String playerName = UserGUI
.getInstance()
.getCurrentPlayer(player);
VotingPluginUser user = UserManager
.getInstance()
.getVotingPluginUser(
playerName);
user.setHasGotteMilestone(mileStone,
value);
player.sendMessage(
"Set milestone completetion to "
+ value + " on "
+ mileStone);
}
});
}
}
});
}
}
}
});
}
});
}
});
@@ -2258,47 +2252,33 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
ArrayList<String> msg = new ArrayList<String>();
ArrayList<String> uuids = UserManager.getInstance().getAllUUIDs();
int daily = 0;
int weekly = 0;
int month = 0;
int all = 0;
if (plugin.getOptions().getStorageType().equals(UserStorage.MYSQL)) {
for (TopVoter top : TopVoter.values()) {
int cTotal = 0;
ArrayList<Integer> nums = plugin.getMysql().getNumbersInColumn(top.getColumnName());
for (Integer num : nums) {
cTotal += num.intValue();
}
switch (top) {
case AllTime:
all = cTotal;
break;
case Daily:
daily = cTotal;
break;
case Monthly:
month = cTotal;
break;
case Weekly:
weekly = cTotal;
break;
default:
break;
}
for (TopVoter top : TopVoter.values()) {
int cTotal = 0;
ArrayList<Integer> nums = plugin.getUserManager().getNumbersInColumn(top.getColumnName());
for (Integer num : nums) {
cTotal += num.intValue();
}
} else {
switch (top) {
case AllTime:
all = cTotal;
break;
case Daily:
daily = cTotal;
break;
case Monthly:
month = cTotal;
break;
case Weekly:
weekly = cTotal;
break;
default:
break;
for (String uuid : uuids) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
user.dontCache();
daily += user.getTotal(TopVoter.Daily);
weekly += user.getTotal(TopVoter.Weekly);
month += user.getTotal(TopVoter.Monthly);
all += user.getTotal(TopVoter.AllTime);
}
}
@@ -183,6 +183,17 @@ public class AdminGUI {
}
});
buttons.add(new BInventoryButton(
new ItemBuilder(Material.STONE, 1).setName("&cBackground task time").addLoreLine("&aClick to see")) {
@Override
public void onClick(ClickEvent event) {
event.getPlayer().sendMessage("Last background task time: " + plugin.getLastBackgroundTaskTimeTaken());
}
});
return buttons;
}
@@ -143,7 +143,7 @@ public class VoteGUI extends GUIHandler {
for (final String slot : plugin.getGui().getChestVoteGUISlots()) {
ItemBuilder builder = getItemSlot(slot, player);
inv.addButton(new UpdatingBInventoryButton(builder, 1000, 1000) {
inv.addButton(new UpdatingBInventoryButton(plugin, builder, 1000, 1000) {
@Override
public void onClick(ClickEvent event) {
@@ -66,7 +66,7 @@ public class VoteLast extends GUIHandler {
for (VoteSite site : plugin.getVoteSites()) {
if (!site.isHidden()) {
inv.addButton(inv.getNextSlot(),
new UpdatingBInventoryButton(site.getItem().setName(site.getDisplayName())
new UpdatingBInventoryButton(plugin, site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandLastGUILine(site)).setAmountNone(1), 1000, 1000) {
@Override
@@ -89,9 +89,15 @@ public class VoteNext extends GUIHandler {
inv.addPlaceholder("player", user.getPlayerName());
for (VoteSite site : plugin.getVoteSites()) {
if (!site.isHidden()) {
String siteNameDisplay = plugin.getGui().getChestVoteNextCustomSiteNamesDisplays(site.getKey());
if (siteNameDisplay.isEmpty()) {
siteNameDisplay = site.getDisplayName();
}
inv.addButton(inv.getNextSlot(),
new UpdatingBInventoryButton(site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandNextInfo(site)).setAmountNone(1), 1000, 1000) {
new UpdatingBInventoryButton(plugin, site.getItem().setName(siteNameDisplay)
.setLore(StringParser.getInstance().replacePlaceHolder(
plugin.getGui().getChestVoteNextLine(), "time", user.voteCommandNextInfo(site)))
.setAmountNone(1), 1000, 1000) {
@Override
public void onClick(ClickEvent clickEvent) {
@@ -93,7 +93,7 @@ public class VoteShop extends GUIHandler {
Player player = event.getWhoClicked();
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(player);
user.clearCache();
user.cache();
String identifier = (String) getData("identifier");
int limit = (int) getData("Limit");
@@ -53,7 +53,7 @@ public class VoteShopConfirm extends GUIHandler {
@Override
public void onClick(ClickEvent event) {
user.clearCache();
user.cache();
int points = plugin.getGui().getChestShopIdentifierCost(identifier);
int limit = plugin.getGui().getChestShopIdentifierLimit(identifier);
HashMap<String, String> placeholders = new HashMap<String, String>();
@@ -67,7 +67,7 @@ public class VoteTotal extends GUIHandler {
inv.addPlaceholder("player", user.getPlayerName());
for (final TopVoter top : TopVoter.values()) {
inv.addButton(new UpdatingBInventoryButton(
inv.addButton(new UpdatingBInventoryButton(plugin,
new ItemBuilder(plugin.getGui().getChestVoteTotalItem(top))
.addPlaceholder("Total", "" + user.getTotal(top)).addPlaceholder("topvoter", top.getName()),
1000, 1000) {
@@ -165,7 +165,7 @@ public class VoteURL extends GUIHandler {
if (plugin.getGui().getChestVoteURLViewAllUrlsButtonEnabled()) {
ItemBuilder builderAll = getItemAll();
inv.addButton(new UpdatingBInventoryButton(builderAll, 5000, 5000) {
inv.addButton(new UpdatingBInventoryButton(plugin, builderAll, 5000, 5000) {
@Override
public void onClick(ClickEvent event) {
@@ -190,7 +190,7 @@ public class VoteURL extends GUIHandler {
startSlot++;
}
inv.addButton(new UpdatingBInventoryButton(builder, 5000, 5000) {
inv.addButton(new UpdatingBInventoryButton(plugin, builder, 5000, 5000) {
@Override
public void onClick(ClickEvent event) {
@@ -222,8 +222,7 @@ public class VoteURL extends GUIHandler {
@Override
public void onClick(ClickEvent clickEvent) {
new RewardBuilder(plugin.getGui().getData(),
"CHEST.VoteURL.ExtraItems." + str + "."
+ clickEvent.getButton().getLastRewardsPath(player))
"CHEST.VoteURL.ExtraItems." + str + "." + clickEvent.getButton().getLastRewardsPath(player))
.setGiveOffline(false).send(clickEvent.getPlayer());
}
@@ -69,7 +69,7 @@ public class VoteURLVoteSite extends GUIHandler {
}
});
inv.addButton(new UpdatingBInventoryButton(
inv.addButton(new UpdatingBInventoryButton(plugin,
new ItemBuilder(Material.COMPASS).setName("&4Next Vote").addLoreLine(user.voteCommandNextInfo(site)),
1000, 1000) {
@@ -54,10 +54,6 @@ public class Config extends YMLFile {
@Getter
private boolean allowUnJoinedCheckServer = true;
@ConfigDataInt(path = "PlayerDataLoadLimit")
@Getter
private int playerDataLoadLimit = -1;
@ConfigDataBoolean(path = "AllowVotePointTransfers")
@Getter
private boolean allowVotePointTransfers = false;
@@ -301,6 +301,14 @@ public class GUI extends YMLFile {
public String getChestVoteNextName() {
return getData().getString("CHEST.VoteNext.Name", "VoteNext: %player%");
}
public String getChestVoteNextLine() {
return getData().getString("CHEST.VoteNext.Line", "%time%");
}
public String getChestVoteNextCustomSiteNamesDisplays(String site) {
return getData().getString("CHEST.VoteNext.CustomSiteNamesDisplays." + site, "");
}
public String getChestVoteRewardName() {
return getData().getString("CHEST.VoteRewardName", "VoteReward");
@@ -122,7 +122,6 @@ public class PlayerVoteListener implements Listener {
final String uuid = user.getUUID();
// reupdate cache
user.clearCache();
user.cache();
user.updateName(true);
@@ -228,7 +227,6 @@ public class PlayerVoteListener implements Listener {
if (!user.isOnline()) {
user.clearCache();
}
plugin.setUpdate(true);
plugin.extraDebug("Finished vote processing: " + playerName + "/" + uuid);
@@ -99,7 +99,7 @@ public class PlaceHolders {
if (!returnStr.isEmpty()) {
return returnStr;
}
return "No value: " + str;
return str;
} else {
return getPlaceholderValue(p, identifier, javascript, forceProcess, useCache);
}
@@ -275,6 +275,26 @@ public class PlaceHolders {
}
}
placeholders.add(new PlaceHolder<VotingPluginUser>("nextmilestone_votes_required") {
@Override
public String placeholderRequest(VotingPluginUser user, String identifier) {
return "" + user.getNextAvailableMileStone();
}
}.withDescription("Get number of votes required for next available milestone").updateDataKey("MilestoneCount"));
placeholders.add(new PlaceHolder<VotingPluginUser>("nextmilestone_votes_until") {
@Override
public String placeholderRequest(VotingPluginUser user, String identifier) {
int toGo = user.getNextAvailableMileStone() - user.getMilestoneCount();
if (toGo >= 0) {
return "" + toGo;
}
return "0";
}
}.withDescription("Get number of votes until next available milestone").updateDataKey("MilestoneCount"));
for (final String identifier : plugin.getGui().getChestShopIdentifiers()) {
if (plugin.getGui().getChestShopIdentifierLimit(identifier) > 0) {
placeholders.add(new PlaceHolder<VotingPluginUser>("VoteShopLimit_" + identifier) {
@@ -471,7 +491,7 @@ public class PlaceHolders {
}
}.withDescription("Get user top voter position"));
placeholders.add(new PlaceHolder<VotingPluginUser>("Points_") {
placeholders.add(new PlaceHolder<VotingPluginUser>("EnoughPoints_") {
@Override
public String placeholderRequest(VotingPluginUser user, String identifier) {
@@ -1,6 +1,8 @@
package com.bencodez.votingplugin.test;
import java.util.ArrayList;
import java.util.Random;
import java.util.UUID;
import org.bukkit.Bukkit;
@@ -8,18 +10,17 @@ import com.bencodez.advancedcore.api.rewards.Reward;
import com.bencodez.advancedcore.api.rewards.RewardOptions;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.events.PlayerVoteEvent;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.bencodez.votingplugin.user.UserManager;
import com.bencodez.votingplugin.user.VotingPluginUser;
public class VoteTester {
private static VoteTester instance = new VoteTester();
public static VoteTester getInstance() {
return instance;
public VoteTester(VotingPluginMain plugin) {
this.plugin = plugin;
}
private VotingPluginMain plugin = VotingPluginMain.plugin;
private VotingPluginMain plugin;
public void testRewards(int amount, String name, String rewardName) {
plugin.getVoteTimer().submit(new Runnable() {
@@ -59,6 +60,47 @@ public class VoteTester {
}
private String getSaltString() {
String SALTCHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
StringBuilder salt = new StringBuilder();
Random rnd = new Random();
while (salt.length() < 18) { // length of the random string.
int index = (int) (rnd.nextFloat() * SALTCHARS.length());
salt.append(SALTCHARS.charAt(index));
}
String saltStr = salt.toString();
return saltStr;
}
public void generatePlayers(int numberOfPlayers) {
if (plugin.getOptions().getDebug().isDebug()) {
int num = 1;
String salt = getSaltString();
Random random = new Random();
for (int i = 0; i < numberOfPlayers; i++) {
UUID uuid = UUID.randomUUID();
if (!plugin.getUserManager().userExist(uuid)) {
String playerName = salt + num;
if (!plugin.getUserManager().userExist(playerName)) {
VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(uuid,
playerName);
user.dontCache();
user.setPoints(random.nextInt(100));
for (TopVoter top : TopVoter.values()) {
user.setTotal(top, random.nextInt(1000));
}
user.setMilestoneCount(random.nextInt(100));
user.setPlayerName(playerName);
user.updateName(true);
num++;
plugin.debug("Generated user " + uuid.toString() + "/" + playerName);
}
}
}
}
}
public void testVotes(int amount, String name, String site) {
plugin.getVoteTimer().submit(new Runnable() {
@@ -26,6 +26,7 @@ import com.bencodez.advancedcore.api.time.events.MonthChangeEvent;
import com.bencodez.advancedcore.api.time.events.PreDateChangedEvent;
import com.bencodez.advancedcore.api.time.events.WeekChangeEvent;
import com.bencodez.advancedcore.api.user.UserStorage;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.advancedcore.api.user.userstorage.DataType;
import com.bencodez.advancedcore.api.yml.YMLFileHandler;
import com.bencodez.votingplugin.VotingPluginMain;
@@ -87,14 +88,26 @@ public class TopVoterHandler implements Listener {
if (plugin.getGui().isLastMonthGUI()) {
plugin.getLastMonthTopVoter().clear();
LinkedHashMap<TopVoterPlayer, Integer> totals = new LinkedHashMap<TopVoterPlayer, Integer>();
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
user.dontCache();
int total = user.getLastMonthTotal();
if (total > 0) {
totals.put(user.getTopVoterPlayer(), total);
HashMap<UUID, ArrayList<Column>> cols = plugin.getUserManager().getAllKeys();
for (Entry<UUID, ArrayList<Column>> playerData : cols.entrySet()) {
String uuid = playerData.getKey().toString();
if (plugin != null && plugin.isEnabled()) {
if (uuid != null && !uuid.isEmpty()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
user.dontCache();
user.updateTempCacheWithColumns(playerData.getValue());
cols.put(playerData.getKey(), null);
int total = user.getLastMonthTotal();
if (total > 0) {
totals.put(user.getTopVoterPlayer(), total);
}
user.clearTempCache();
}
}
}
cols.clear();
cols = null;
plugin.getLastMonthTopVoter().putAll(sortByValues(totals, false));
@@ -113,7 +126,6 @@ public class TopVoterHandler implements Listener {
if (plugin.getStorageType().equals(UserStorage.MYSQL)) {
plugin.getMysql().clearCacheBasic();
}
plugin.getUserManager().getDataManager().clearCache();
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
@@ -127,11 +139,12 @@ public class TopVoterHandler implements Listener {
plugin.getUserManager().copyColumnData(TopVoter.Daily.getColumnName(), TopVoter.Daily.getLastColumnName());
if (plugin.getConfigFile().isUseVoteStreaks() || plugin.getConfigFile().isUseHighestTotals()) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid), false);
HashMap<UUID, ArrayList<Column>> cols = plugin.getUserManager().getAllKeys();
for (Entry<UUID, ArrayList<Column>> playerData : cols.entrySet()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(playerData.getKey(), false);
user.dontCache();
user.tempCache();
user.getUserData().updateCacheWithTemp();
user.updateTempCacheWithColumns(playerData.getValue());
cols.put(playerData.getKey(), null);
if (plugin.getConfigFile().isUseVoteStreaks()) {
if (!user.voteStreakUpdatedToday(LocalDateTime.now().minusDays(1))) {
if (user.getDayVoteStreak() != 0) {
@@ -147,6 +160,8 @@ public class TopVoterHandler implements Listener {
}
user.clearTempCache();
}
cols.clear();
cols = null;
}
try {
@@ -186,15 +201,6 @@ public class TopVoterHandler implements Listener {
}
}
if (!plugin.getBungeeSettings().isGloblalDataEnabled() && plugin.getBungeeSettings().isUseBungeecoord()) {
// give time for other servers to catch up
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// give time for other servers to catch up
if (!plugin.getTopVoterHandler().bungeeHandleResets()) {
plugin.debug("Delaying time change 10 seconds for other servers to catchup");
@@ -211,7 +217,6 @@ public class TopVoterHandler implements Listener {
if (plugin.getStorageType().equals(UserStorage.MYSQL)) {
plugin.getMysql().clearCacheBasic();
}
plugin.getUserManager().getDataManager().clearCache();
long now = ((System.currentTimeMillis() - startTime) / 1000);
plugin.getLogger().info("Finished processing day change, took " + now + " seconds");
@@ -229,11 +234,12 @@ public class TopVoterHandler implements Listener {
TopVoter.Monthly.getLastColumnName());
}
if (plugin.getConfigFile().isUseHighestTotals() || plugin.getConfigFile().isUseVoteStreaks()) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid), false);
HashMap<UUID, ArrayList<Column>> cols = plugin.getUserManager().getAllKeys();
for (Entry<UUID, ArrayList<Column>> playerData : cols.entrySet()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(playerData.getKey(), false);
user.dontCache();
user.tempCache();
user.getUserData().updateCacheWithTemp();
user.updateTempCacheWithColumns(playerData.getValue());
cols.put(playerData.getKey(), null);
if (plugin.getConfigFile().isUseVoteStreaks()) {
if (user.getTotal(TopVoter.Monthly) == 0 && user.getMonthVoteStreak() != 0) {
user.setMonthVoteStreak(0);
@@ -259,6 +265,8 @@ public class TopVoterHandler implements Listener {
}
user.clearTempCache();
}
cols.clear();
cols = null;
}
@@ -285,7 +293,6 @@ public class TopVoterHandler implements Listener {
VotingPluginUser user = entry.getKey().getUser();
user.dontCache();
if (!plugin.getConfigFile().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
user.giveMonthlyTopVoterAward(i, places.get(i));
}
}
@@ -324,7 +331,6 @@ public class TopVoterHandler implements Listener {
if (plugin.getStorageType().equals(UserStorage.MYSQL)) {
plugin.getMysql().clearCacheBasic();
}
plugin.getUserManager().getDataManager().clearCache();
long now = ((System.currentTimeMillis() - startTime) / 1000);
plugin.getLogger().info("Finished processing day change, took " + now + " seconds");
}
@@ -348,11 +354,12 @@ public class TopVoterHandler implements Listener {
plugin.getUserManager().copyColumnData(TopVoter.Weekly.getColumnName(),
TopVoter.Weekly.getLastColumnName());
if (plugin.getConfigFile().isUseVoteStreaks() || plugin.getConfigFile().isUseHighestTotals()) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid), false);
HashMap<UUID, ArrayList<Column>> cols = plugin.getUserManager().getAllKeys();
for (Entry<UUID, ArrayList<Column>> playerData : cols.entrySet()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(playerData.getKey(), false);
user.dontCache();
user.tempCache();
user.getUserData().updateCacheWithTemp();
user.updateTempCacheWithColumns(playerData.getValue());
cols.put(playerData.getKey(), null);
if (plugin.getConfigFile().isUseVoteStreaks()) {
if (user.getTotal(TopVoter.Weekly) == 0 && user.getWeekVoteStreak() != 0) {
user.setWeekVoteStreak(0);
@@ -374,6 +381,8 @@ public class TopVoterHandler implements Listener {
}
user.clearTempCache();
}
cols.clear();
cols = null;
}
try {
@@ -430,7 +439,6 @@ public class TopVoterHandler implements Listener {
if (plugin.getStorageType().equals(UserStorage.MYSQL)) {
plugin.getMysql().clearCacheBasic();
}
plugin.getUserManager().getDataManager().clearCache();
long now = ((System.currentTimeMillis() - startTime) / 1000);
plugin.getLogger().info("Finished processing day change, took " + now + " seconds");
@@ -12,6 +12,7 @@ import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -271,10 +272,24 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
return now.isAfter(nextvote);
} else {
if (now.getDayOfYear() != lastVote.getDayOfYear() || now.getYear() != lastVote.getYear()) {
return true;
LocalDateTime offsetoclockyesterday = plugin.getTimeChecker().getTime().plusDays(-1).withHour(0)
.withMinute(0).plusHours((long) voteSite.getTimeOffSet());
LocalDateTime offsetoclocktoday = plugin.getTimeChecker().getTime().withHour(0).withMinute(0)
.plusHours((long) voteSite.getTimeOffSet());
if (!now.isBefore(offsetoclocktoday)) {
if (!lastVote.isBefore(offsetoclocktoday)) {
return false;
} else {
return true;
}
} else {
if (!lastVote.isBefore(offsetoclockyesterday)) {
return false;
} else {
return true;
}
}
return false;
}
} catch (Exception e) {
e.printStackTrace();
@@ -1000,6 +1015,40 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
}
}
public int getNextAvailableMileStone() {
Set<String> mVotes = plugin.getSpecialRewardsConfig().getMilestoneVotes();
ArrayList<Integer> nums = new ArrayList<Integer>();
int mileStoneCount = getMilestoneCount();
HashMap<String, Boolean> gottenMileStones = getHasGottenMilestone();
for (String vote : mVotes) {
if (StringParser.getInstance().isInt(vote)) {
final int num = Integer.parseInt(vote);
if (plugin.getSpecialRewardsConfig().getMilestoneRewardEnabled(num)) {
if (gottenMileStones.containsKey("" + num)) {
if (!gottenMileStones.get("" + num).booleanValue()) {
nums.add(Integer.valueOf(num));
}
} else {
nums.add(Integer.valueOf(num));
}
}
}
}
int lowestNum = -1;
for (Integer num : nums) {
if (mileStoneCount < num.intValue()) {
if (lowestNum == -1 || num.intValue() < lowestNum) {
lowestNum = num.intValue();
}
}
}
return lowestNum;
}
public void setReminded(boolean reminded) {
getUserData().setString("Reminded", "" + reminded);
}
@@ -3,6 +3,7 @@ package com.bencodez.votingplugin.voteparty;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
import java.util.UUID;
import org.bukkit.Bukkit;
@@ -186,15 +187,29 @@ public class VoteParty implements Listener {
.setServer(useBungee).send(user);
}
public String getRandomPlayerName() {
ArrayList<String> allPlayers = new ArrayList<String>();
for (Player players : Bukkit.getOnlinePlayers()) {
allPlayers.add(players.getName());
}
if (allPlayers.size() == 0) {
return "No Player";
}
int random = new Random().nextInt(allPlayers.size());
return allPlayers.get(random);
}
public void giveRewards(VotingPluginUser orgUser, boolean forceBungee) {
MiscUtils.getInstance().broadcast(plugin.getSpecialRewardsConfig().getVotePartyBroadcast());
String player = getRandomPlayerName();
for (final String cmd : plugin.getSpecialRewardsConfig().getVotePartyGlobalCommands()) {
Bukkit.getScheduler().runTask(plugin, new Runnable() {
@Override
public void run() {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), cmd);
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(),
StringParser.getInstance().replacePlaceHolder(cmd, "randomonlineplayer", player));
}
});