Compare commits

...
54 Commits
Author SHA1 Message Date
BenCodez 900237b7ea Add maven profile 2021-07-17 20:06:58 -04:00
BenCodez 7fa7c2baf9 Update version to 6.5 2021-07-17 20:02:13 -04:00
BenCodez eec8d706ee Add ignore to insert queries on mysql 2021-07-16 19:04:12 -04:00
BenCodez d292ae4a18 Bug fix 2021-07-16 16:06:24 -04:00
BenCodez f7d04f87db Bug fix 2021-07-14 16:09:15 -04:00
BenCodez 59e2f3da99 Rewrite convert command 2021-07-13 17:16:54 -04:00
BenCodez 2a5b6c23da Check for valid player on /vote givepoints 2021-07-12 19:35:02 -04:00
BenCodez 62560be2ab More reminding bug fixes 2021-07-12 16:40:57 -04:00
BenCodez 64993b8b53 More reminding improvements 2021-07-12 16:35:39 -04:00
BenCodez 18c4cd6b6d Don't show hidden votesites in /vote next 2021-07-12 16:30:20 -04:00
BenCodez 35e14f7a76 Factor in hidden votesites 2021-07-12 16:22:24 -04:00
BenCodez 5c6490159b More attempted fixes at vote reminding 2021-07-12 16:09:31 -04:00
BenCodez 29f0c19a74 Fix vote reminding not reminding correctly 2021-07-12 15:46:35 -04:00
BenCodez 664500d61b Adjust vote reminding 2021-07-12 14:49:16 -04:00
BenCodez e208cdf49b Dependency change 2021-07-11 19:51:55 -04:00
BenCodez e295795ec4 Change maven profiles 2021-07-11 19:50:41 -04:00
BenCodez c9d24b5e88 Update importants 2021-07-11 12:47:47 -04:00
BenCodez f09311e6fc Undo change to relocation 2021-07-11 12:20:58 -04:00
BenCodez 02ea389f12 Update importants 2021-07-10 18:04:29 -04:00
BenCodez 14ccfa3730 update dependency 2021-07-10 17:38:50 -04:00
BenCodez 51ffe88557 Change artifactid to lowercase 2021-07-10 17:37:24 -04:00
BenCodez 7daa0545f3 Change default vote reminding, remind on anysite by default 2021-07-08 20:01:33 -04:00
BenCodez ef7b9cb55a Add log message for votes on velocity 2021-07-08 19:46:16 -04:00
BenCodez a410567de0 Bug fix 2021-07-08 18:47:20 -04:00
BenCodez f00aeab649 Bug fix 2021-07-08 17:43:47 -04:00
BenCodez a4494fc2e7 Fixed issue with velocity uuid check 2021-07-08 17:32:52 -04:00
BenCodez 6333760508 Better console message for ignoring vote on proxy server 2021-07-08 17:16:57 -04:00
BenCodez 012547f950 Update to 1.17.1 2021-07-06 19:48:10 -04:00
BenCodez 631d9c9a1c Code cleanup 2021-07-06 16:56:36 -04:00
BenCodez a61e3176a8 Update profile 2021-07-03 20:23:15 -04:00
BenCodez c013835725 renable javadoc 2021-07-03 19:37:39 -04:00
BenCodez ea8ed1e950 disable javadoc for testing 2021-07-03 19:35:19 -04:00
BenCodez 7dcb3a5f62 temp disable javadoc 2021-07-03 19:34:27 -04:00
BenCodez ed70727a76 Update pom 2021-07-03 19:28:09 -04:00
BenCodez 3418d461e4 Improve vote reminding 2021-07-01 21:28:08 -04:00
BenCodez 1e5ec8226a Small little fixes 2021-07-01 16:42:22 -04:00
BenCodez 993fa19f85 Bug fix 2021-06-30 20:09:01 -04:00
BenCodez 7d3d777cb5 Send update plugin message on vote 2021-06-30 19:41:36 -04:00
BenCodez 9829864a96 Actually open shop page when it's suppose to 2021-06-30 18:38:06 -04:00
BenCodez eec87f642f Don't close inventory unless needed for shop GUI confirmation 2021-06-30 18:28:31 -04:00
BenCodez 9cba16814a Don't generate votesite if site exists but is disabled 2021-06-30 17:01:44 -04:00
BenCodez 44ebd17356 Set bungeecoord-api version 2021-06-30 13:34:58 -04:00
BenCodez ba2312ed46 Add line for mysql in default config 2021-06-30 07:54:44 -04:00
BenCodez 2d8f9e1ca1 Update bstats class 2021-06-29 21:50:10 -04:00
BenCodez 7556a203c2 Fix version of maven plugin 2021-06-29 13:11:27 -04:00
BenCodez 67b8fbcc88 Update version number 2021-06-29 13:05:02 -04:00
BenCodez 4c9f7f76b9 Fix comments 2021-06-28 17:20:04 -04:00
BenCodez df388ca0e3 Add commands to set votestreaks 2021-06-25 16:02:53 -04:00
BenCodez 1d8fc309ff Bug fix 2021-06-23 19:35:44 -04:00
BenCodez 42a159ea82 Little comment change 2021-06-21 17:08:05 -04:00
BenCodez a62187e0cb Better handling when mysql isn't working on bungee & velocity 2021-06-20 18:52:14 -04:00
BenCodez 7896b2f08a Added /av vote (player), with GUI 2021-06-20 14:09:03 -04:00
BenCodez 034d031d79 Add failsafe for votesite loading 2021-06-19 22:12:07 -04:00
BenCodez e228fd6fed Remove barely used command 2021-06-16 21:09:33 -04:00
28 changed files with 906 additions and 770 deletions

No files matched your search

+1 -1
View File
@@ -9,7 +9,7 @@ UseBungeecord: false
# What type of bungee setup
# Requires restart and set on all servers
# https://github.com/Ben12345rocks/VotingPlugin/wiki/Bungeecoord-Setups
# https://github.com/BenCodez/VotingPlugin/wiki/Bungeecoord-Setups
# Available:
# SOCKETS
# PLUGINMESSAGING
+16 -14
View File
@@ -1,7 +1,7 @@
# VotingPlugin by Ben12345rocks
# VotingPlugin by BenCodez
# Main Config
# See wiki for help:
# https://github.com/Ben12345rocks/VotingPlugin/wiki
# https://github.com/BenCodez/VotingPlugin/wiki
# Config is sorted in sections
# Use Control + F to search with Notepad++
#
@@ -30,6 +30,8 @@ MySQL:
Prefix: ''
#UseSSL: true
#PublicKeyRetrieval: false
#Additional info on connection string
#Line: ''
# ---------------------------------------------------------
# Mysql cache options
@@ -74,35 +76,34 @@ AllowUnJoinedCheckServer: true
# Configuration for VoteReminding
# By default this should be all setup to work
# as long as vote delays are done properly
# as long as vote delays are done properly in votesites.yml
VoteReminding:
# Enable vote reminding
# This will remind player when he can vote on all sites
# Requires VoteDelays to be setup properly
# Use /vote next to see when you can be reminded
# Players require the perm "VotingPlugin.Login.RemindVotes" or "VotingPlugin.Player"
# To remind if any votesite is available (rather than all) use the permission "VotingPlugin.Login.RemindVotes.Any"
Enabled: true
# Will remind player on login if he can vote
RemindOnLogin: true
# Whether or not to remind only once when the player can vote
# Does not apply to login reminds.
RemindOnlyOnce: true
# Will remind player on login if he can vote
# Ignores value above
RemindOnLogin: true
# Delay to remind votes in minutes
# Only works if above is false
# Set to -1 to disable
RemindDelay: 30
# Run reward files on remind
# By default, the reward file will be created for you
# Run rewards
# and have the default message
# Edit the message at AdvancedCore/Rewards/Remind.yml (or any other reward listed)
# Can add titles and more in the reward file
# Can add titles and more in the reward
# This can also be edited via /av gui
Rewards:
Messages:
Player: '&aRemember to vote!'
Player: '&aYou have %sitesavailable% to vote on still!'
Title:
Enabled: false
Title: '&cRemember to vote!'
@@ -578,10 +579,11 @@ WaitUntilLoggedIn: true
# Preload skulls to improve performance
# If false, skulls will be cached as they are used
# assuming loadskulls is enabled
PreloadSkulls: false
# Setting to false disables saving skulls in a cache to improve speeds
# Will reduce ram usage if disabled
# Will reduce ram usage (very little) if disabled, but slow GUI speeds when using skulls
LoadSkulls: true
# Use vault for permission checks
+12 -3
View File
@@ -5,6 +5,7 @@ description: Highly Customizable Voting Listener!
website: https://www.spigotmc.org/resources/votingplugin.15358/
author: BenCodez
softdepend: [MVdWPlaceholders, Votifier, VotifierPlus, NuVotifier, CMI, Vault, PlaceholderAPI, ProtocolLib, MVdWPlaceholderAPI, AuthMe]
loadbefore: [MCPerks]
api-version: 1.13
libraries:
- org.openjdk.nashorn:nashorn-core:15.2
@@ -220,7 +221,15 @@ commands:
adminvoteRunCMD:
description: Command Alias
aliases: avRunCMD
adminvoteuseruuidremove:
description: Command Alias
aliases: avuseruuidremove
adminvoteedit:
description: Command Alias
aliases: avedit
adminvoteResetMilestoneCount:
description: Command Alias
aliases: avResetMilestoneCount
permissions:
VotingPlugin.Player:
description: Allows basic access player commands
@@ -246,7 +255,7 @@ permissions:
description: Permission for generating votesite message
VotingPlugin.Login.RemindVotes:
description: Permission to allow timed reminders
VotingPlugin.Login.RemindVotes.Any:
description: Remind if player can vote on any website, rather than all
VotingPlugin.Login.RemindVotes.All:
description: Remind if player can vote on all votesites, rather than any
default: false
+143 -88
View File
@@ -3,8 +3,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bencodez</groupId>
<artifactId>VotingPlugin</artifactId>
<version>6.4</version>
<artifactId>votingplugin</artifactId>
<version>6.5</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -13,13 +13,6 @@
<github.global.server>github</github.global.server>
<project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
</properties>
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<build>
<resources>
<resource>
@@ -79,7 +72,7 @@
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.12.0</version>
<version>1.18.20.0</version>
<executions>
<execution>
<id>delombok</id>
@@ -111,14 +104,10 @@
</filter>
</filters>
<relocations>
<!-- Lets relocate the shaded API so we dont cause any conflicts with
other plugins -->
<relocation>
<pattern>com.bencodez.advancedcore</pattern>
<shadedPattern>${project.groupId}.votingplugin.advancedcore</shadedPattern>
</relocation>
<!-- Lets relocate the shaded API so we dont cause any conflicts with
other plugins -->
<relocation>
<pattern>net.pl3x.bukkit.chatapi</pattern>
<shadedPattern>${project.groupId}.votingplugin</shadedPattern>
@@ -136,13 +125,12 @@
<shadedPattern>${project.groupId}.votingplugin.hikari</shadedPattern>
</relocation>
<relocation>
<pattern>xyz.upperlevel.spigot.book</pattern>
<shadedPattern>${project.groupId}.votingplugin.upperlevel.book</shadedPattern>
<pattern>org.bstats</pattern>
<shadedPattern>${project.groupId}.votingplugin.bstats</shadedPattern>
</relocation>
<relocation>
<pattern>org.bstats</pattern>
<!-- Replace this with your package! -->
<shadedPattern>${project.groupId}.votingplugin.bstats</shadedPattern>
<pattern>xyz.upperlevel.spigot</pattern>
<shadedPattern>${project.groupId}.votingplugin.advancedcore.xyz.upperlevel.spigot</shadedPattern>
</relocation>
</relocations>
</configuration>
@@ -175,50 +163,6 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<phase>deploy</phase>
<configuration>
<sourcepath>${project.basedir}/target/delombok</sourcepath>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.12</version>
<executions>
<execution>
<id>javadoc</id>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
<configuration>
<message>Maven javadoc for ${project.version}</message>
<noJekyll>true</noJekyll>
<outputDirectory>${project.build.directory}/apidocs
</outputDirectory>
<branch>refs/heads/gh-pages</branch>
<includes>
<include>**/*</include>
</includes>
<repositoryName>VotingPlugin</repositoryName>
<repositoryOwner>BenCodez</repositoryOwner>
<server>github</server>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
@@ -264,12 +208,16 @@
<id>velocity</id>
<url>https://nexus.velocitypowered.com/repository/maven-public/</url>
</repository>
<repository>
<id>bencodez repo</id>
<url>http://51.161.110.19:8081/repository/maven-releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.17-R0.1-SNAPSHOT</version>
<version>1.17.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -281,7 +229,7 @@
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>LATEST</version>
<version>1.17-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -291,11 +239,6 @@
<scope>system</scope>
<systemPath>${project.basedir}/Jars/nuvotifier.jar</systemPath>
</dependency>
<dependency>
<groupId>com.tchristofferson</groupId>
<artifactId>ConfigUpdater</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>be.maximvdw</groupId>
<artifactId>MVdWPlaceholderAPI</artifactId>
@@ -319,40 +262,53 @@
<profiles>
<profile>
<id>prod</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<build.profile.id>prod</build.profile.id>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.bencodez</groupId>
<artifactId>advancedcore</artifactId>
<version>master-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
<profile>
<id>prod2</id>
<properties>
<build.profile.id>prod2</build.profile.id>
<build.profile.id>prod</build.profile.id>
</properties>
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.bencodez</groupId>
<artifactId>AdvancedCore</artifactId>
<version>LATEST</version>
<groupId>com.github.bencodez</groupId>
<artifactId>advancedcore</artifactId>
<version>master-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
@@ -365,11 +321,110 @@
<dependencies>
<dependency>
<groupId>com.bencodez</groupId>
<artifactId>AdvancedCore</artifactId>
<artifactId>advancedcore</artifactId>
<version>LATEST</version>
<scope>compile</scope>
</dependency>
</dependencies>
</profile>
<profile>
<id>deploy</id>
<properties>
<build.profile.id>deploy</build.profile.id>
</properties>
<dependencies>
<dependency>
<groupId>com.bencodez</groupId>
<artifactId>advancedcore</artifactId>
<version>LATEST</version>
<scope>compile</scope>
</dependency>
</dependencies>
<distributionManagement>
<snapshotRepository>
<id>nexus</id>
<url>http://51.161.110.19:8081/repository/maven-snapshots/</url>
</snapshotRepository>
<repository>
<id>nexus</id>
<url>http://51.161.110.19:8081/repository/maven-releases</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<phase>deploy</phase>
<configuration>
<sourcepath>${project.basedir}/target/delombok</sourcepath>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>nexus</serverId>
<nexusUrl>http://51.161.110.19:8081/nexus/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
<plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.12</version>
<executions>
<execution>
<id>javadoc</id>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
<configuration>
<message>Maven javadoc for ${project.version}</message>
<noJekyll>true</noJekyll>
<outputDirectory>${project.build.directory}/apidocs
</outputDirectory>
<branch>refs/heads/gh-pages</branch>
<includes>
<include>**/*</include>
</includes>
<repositoryName>VotingPlugin</repositoryName>
<repositoryOwner>BenCodez</repositoryOwner>
<server>github</server>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
@@ -14,7 +14,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TimerTask;
import java.util.zip.ZipEntry;
@@ -251,77 +250,6 @@ public class VotingPluginMain extends AdvancedCorePlugin {
}
}
public void convertDataStorage(UserStorage from, UserStorage to) {
if (from == null || to == null) {
throw new RuntimeException("Invalid Storage Method");
}
UserStorage cur = getStorageType();
getOptions().setStorageType(from);
if (getStorageType().equals(UserStorage.MYSQL) && getMysql() != null) {
getMysql().clearCache();
}
ArrayList<String> uuids = new ArrayList<String>(UserManager.getInstance().getAllUUIDs());
while (uuids.size() > 0) {
HashMap<VotingPluginUser, HashMap<String, String>> data = new HashMap<VotingPluginUser, HashMap<String, String>>();
getOptions().setStorageType(from);
loadUserAPI(getOptions().getStorageType());
// setStorageType(to);
if (getStorageType().equals(UserStorage.MYSQL) && getMysql() != null) {
getMysql().clearCache();
}
ArrayList<String> converted = new ArrayList<String>();
int i = 0;
while (i < configFile.getConvertAmount() && i < uuids.size()) {
String uuid = uuids.get(i);
try {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
HashMap<String, String> values = new HashMap<String, String>();
for (String key : user.getData().getKeys()) {
String value = user.getData().getValue(key);
if (value != null && !value.isEmpty() && !value.equalsIgnoreCase("null")) {
values.put(key, value);
}
}
i++;
converted.add(uuid);
data.put(user, values);
debug("[Convert] Added " + uuid);
} catch (Exception e) {
debug(e);
plugin.getLogger().warning("Exception occoured for '" + uuid + "': " + e.getMessage()
+ ", turn debug on to see full stack traces");
}
}
try {
wait(configFile.getConvertDelay());
} catch (Exception e) {
}
uuids.removeAll(converted);
plugin.getLogger().info("Finished getting data from " + from.toString() + " Converting " + data.size()
+ " users, " + uuids.size() + " left to convert");
getOptions().setStorageType(to);
loadUserAPI(getOptions().getStorageType());
if (getStorageType().equals(UserStorage.MYSQL) && getMysql() != null) {
getMysql().clearCache();
}
writeConvertData(data);
}
getOptions().setStorageType(cur);
reload();
plugin.getLogger().info("Finished convertting");
}
public ArrayList<VotingPluginUser> convertSet(Set<VotingPluginUser> set) {
return new ArrayList<VotingPluginUser>(set);
}
@@ -386,7 +314,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
return voteSite;
}
}
if (configFile.isAutoCreateVoteSites() && !configVoteSites.getVoteSitesNames().contains(siteName)) {
if (configFile.isAutoCreateVoteSites() && !configVoteSites.getVoteSitesNames(false).contains(siteName)) {
configVoteSites.generateVoteSite(siteName);
return new VoteSite(plugin, siteName.replace(".", "_"));
}
@@ -401,7 +329,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
* @return the vote site name
*/
public String getVoteSiteName(String... urls) {
ArrayList<String> sites = getConfigVoteSites().getVoteSitesNames();
ArrayList<String> sites = getConfigVoteSites().getVoteSitesNames(false);
for (String url : urls) {
if (url == null) {
return null;
@@ -431,7 +359,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
}
public String getVoteSiteServiceSite(String name) {
ArrayList<String> sites = getConfigVoteSites().getVoteSitesNames();
ArrayList<String> sites = getConfigVoteSites().getVoteSitesNames(true);
if (name == null) {
return null;
}
@@ -524,7 +452,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
getSpecialRewardsConfig().setValue(path, value);
}
});
addDirectlyDefinedRewards(new DirectlyDefinedReward("FirstVoteToday") {
@Override
@@ -1195,7 +1123,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
if (!site.hasRewards() && !hasRewards) {
issues = false;
plugin.getLogger().warning("No rewards detected for the site: " + site.getKey()
+ ". See https://github.com/Ben12345rocks/AdvancedCore/wiki/Rewards on how to add rewards");
+ ". See https://github.com/BenCodez/VotingPlugin/wiki/Rewards on how to add rewards");
}
boolean contains = false;
@@ -1217,7 +1145,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
@Override
public void run() {
plugin.getLogger().warning(
"Detected an issue with voting sites, check the server startup log for more details");
"Detected an issue with voting sites, check the server startup log for more details: https://github.com/BenCodez/VotingPlugin/wiki/Votifier-Troubleshooting");
}
}, 30l);
}
@@ -1250,7 +1178,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
loadVoteSites();
setJenkinsSite("ben12345rocks.com");
setJenkinsSite("bencodez.com");
updateAdvancedCoreHook();
}
@@ -1375,6 +1303,8 @@ public class VotingPluginMain extends AdvancedCorePlugin {
getOptions().setServer(bungeeSettings.getServer());
placeholders.load();
voteReminding.loadRemindChecking();
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
@@ -1508,30 +1438,4 @@ public class VotingPluginMain extends AdvancedCorePlugin {
plugin.debug("Updated VoteToday");
}
private void writeConvertData(HashMap<VotingPluginUser, HashMap<String, String>> data) {
boolean checkInt = getStorageType().equals(UserStorage.MYSQL);
for (Entry<VotingPluginUser, HashMap<String, String>> entry : data.entrySet()) {
try {
for (Entry<String, String> values : entry.getValue().entrySet()) {
String value = values.getValue();
if (value != null && !value.equalsIgnoreCase("null")) {
if (checkInt) {
if (StringParser.getInstance().isInt(value)) {
entry.getKey().getData().setInt(values.getKey(), Integer.parseInt(value));
} else {
entry.getKey().getData().setString(values.getKey(), value);
}
} else {
entry.getKey().getData().setString(values.getKey(), value);
}
}
}
} catch (Exception e) {
e.printStackTrace();
plugin.getLogger()
.warning("Exception occoured for '" + entry.getKey().getUUID() + "': " + e.getMessage());
}
}
}
}
@@ -1,5 +1,7 @@
package com.bencodez.votingplugin;
import java.util.concurrent.Callable;
import com.bencodez.advancedcore.api.metrics.BStatsMetrics;
import com.bencodez.advancedcore.api.rewards.RewardHandler;
import com.bencodez.votingplugin.user.UserManager;
@@ -7,12 +9,12 @@ import com.bencodez.votingplugin.user.UserManager;
public class VotingPluginMetrics {
public void load(VotingPluginMain plugin) {
BStatsMetrics metrics = new BStatsMetrics(plugin);
BStatsMetrics metrics = new BStatsMetrics(plugin, 38);
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_firstvote") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_firstvote", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (RewardHandler.getInstance().hasRewards(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getFirstVoteRewardsPath())) {
return "True";
@@ -20,11 +22,11 @@ public class VotingPluginMetrics {
return "False";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_everysite") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_everysite", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (RewardHandler.getInstance().hasRewards(plugin.getConfigVoteSites().getData(),
plugin.getConfigVoteSites().getEverySiteRewardPath())) {
return "True";
@@ -32,11 +34,11 @@ public class VotingPluginMetrics {
return "False";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_allsites") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_allsites", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (RewardHandler.getInstance().hasRewards(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getAllSitesRewardPath())) {
return "True";
@@ -44,11 +46,11 @@ public class VotingPluginMetrics {
return "False";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_cumulative") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_cumulative", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (plugin.getSpecialRewardsConfig().getCumulativeVotes().size() == 0) {
return "False";
} else {
@@ -60,22 +62,22 @@ public class VotingPluginMetrics {
return "False";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_voteparty") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_voteparty", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (!plugin.getSpecialRewardsConfig().getVotePartyEnabled()) {
return "False";
} else {
return "True";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_milestone") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_milestone", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (plugin.getSpecialRewardsConfig().getMilestoneVotes().size() == 0) {
return "False";
} else {
@@ -87,11 +89,11 @@ public class VotingPluginMetrics {
return "False";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_anysitereward") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_anysitereward", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (RewardHandler.getInstance().hasRewards(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getAnySiteRewardsPath())) {
return "True";
@@ -99,11 +101,11 @@ public class VotingPluginMetrics {
return "False";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_votestreakday") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_votestreakday", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
for (String s : plugin.getSpecialRewardsConfig().getVoteStreakVotes("Day")) {
if (plugin.getSpecialRewardsConfig().getVoteStreakRewardEnabled("Day", s)
@@ -115,12 +117,12 @@ public class VotingPluginMetrics {
}
return "False";
}
});
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_votestreakweek") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_votestreakweek", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
for (String s : plugin.getSpecialRewardsConfig().getVoteStreakVotes("Week")) {
if (plugin.getSpecialRewardsConfig().getVoteStreakRewardEnabled("Week", s)
@@ -132,12 +134,12 @@ public class VotingPluginMetrics {
return "False";
}
});
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_votestreakmonth") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("extrarewards_votestreakmonth", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
for (String s : plugin.getSpecialRewardsConfig().getVoteStreakVotes("Month")) {
if (plugin.getSpecialRewardsConfig().getVoteStreakRewardEnabled("Month", s)
@@ -149,33 +151,33 @@ public class VotingPluginMetrics {
return "False";
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("numberofsites") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("numberofsites", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getVoteSites().size();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("numberofrewards") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("numberofrewards", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + RewardHandler.getInstance().getRewards().size();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("autocreatevotesites") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("autocreatevotesites", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getConfigFile().isAutoCreateVoteSites();
}
});
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("numberofusers") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("numberofusers", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
int total = UserManager.getInstance().getAllUUIDs().size();
if (total < 1000) {
return "<1000";
@@ -185,113 +187,113 @@ public class VotingPluginMetrics {
return "1000-10000";
}
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("data_storage") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("data_storage", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return plugin.getOptions().getStorageType().toString();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("DisableCheckOnWorldChange") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("DisableCheckOnWorldChange", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getOptions().isDisableCheckOnWorldChange();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("votereminding_enabled") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("votereminding_enabled", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getConfigFile().getVoteRemindingEnabled();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("LoadTopVoter_Monthly") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("LoadTopVoter_Monthly", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getConfigFile().getLoadTopVoterMonthly();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("LoadTopVoter_Weekly") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("LoadTopVoter_Weekly", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getConfigFile().getLoadTopVoterWeekly();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("LoadTopVoter_Daily") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("LoadTopVoter_Daily", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getConfigFile().getLoadTopVoterDaily();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("bungeemethod") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("bungeemethod", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
return "" + plugin.getBungeeHandler().getMethod().toString();
} else {
return "Disabled";
}
}
});
}));
if (plugin.getBungeeSettings().isUseBungeecoord()) {
metrics.addCustomChart(new BStatsMetrics.SimplePie("bungeebroadcast") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("bungeebroadcast", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getBungeeSettings().isBungeeBroadcast();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("bungeebroadcastalways") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("bungeebroadcastalways", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getBungeeSettings().isBungeeBroadcastAlways();
}
});
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("perserverrewards") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("perserverrewards", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getBungeeSettings().isPerServerRewards();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("perserverpoints") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("perserverpoints", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getBungeeSettings().isPerServerPoints();
}
});
metrics.addCustomChart(new BStatsMetrics.SimplePie("triggervotifierevent") {
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("triggervotifierevent", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getBungeeSettings().isTriggerVotifierEvent();
}
});
}));
}
metrics.addCustomChart(new BStatsMetrics.SimplePie("geyserprefixsupport") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("geyserprefixsupport", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getOptions().isGeyserPrefixSupport();
}
});
}));
metrics.addCustomChart(new BStatsMetrics.SimplePie("using_dev_build") {
metrics.addCustomChart(new BStatsMetrics.SimplePie("using_dev_build", new Callable<String>() {
@Override
public String getValue() {
public String call() throws Exception {
return "" + plugin.getProfile().contains("dev");
}
});
}));
}
}
@@ -53,6 +53,7 @@ public class BroadcastHandler {
public void schelude(int delay) {
if (timer != null) {
timer.cancel();
timer = new Timer();
} else {
timer = new Timer();
}
@@ -65,17 +65,17 @@ public class BungeeMySQL {
}
mysql = new com.bencodez.advancedcore.api.user.userstorage.mysql.api.MySQL(maxThreads) {
@Override
public void severe(String string) {
bungee.getLogger().severe(string);
}
@Override
public void debug(SQLException e) {
if (bungee.getConfig().getDebug()) {
e.printStackTrace();
}
}
@Override
public void severe(String string) {
bungee.getLogger().severe(string);
}
};
if (!mysql.connect(hostName, "" + port, user, pass, database, useSSL, lifeTime, str, publicKeyRetrieval)) {
@@ -382,7 +382,7 @@ public class BungeeMySQL {
}
public void insertQuery(String index, List<Column> cols) {
String query = "INSERT " + getName() + " ";
String query = "INSERT IGNORE " + getName() + " ";
query += "set uuid='" + index + "', ";
@@ -205,36 +205,6 @@ public class VotingPluginBungee extends Plugin {
return 0;
}
private int mysqlUpdate(ArrayList<Column> cols, String uuid, String column, int toAdd) {
int num = getValue(cols, column) + toAdd;
debug("Setting " + column + " to " + num + " for " + uuid);
mysql.update(uuid, column, num, DataType.INTEGER);
return num;
}
@Override
public void onDisable() {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedVotes.entrySet()) {
String server = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVote(server, num, voteData);
num++;
}
}
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedOnlineVotes.entrySet()) {
String name = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVoteOnline(name, num, voteData);
num++;
}
}
nonVotedPlayersCache.save();
}
}
private void loadMysql() {
mysql = new BungeeMySQL(this, "VotingPlugin_Users", config.getData());
@@ -265,6 +235,36 @@ public class VotingPluginBungee extends Plugin {
getMysql().alterColumnType("DayVoteStreakLastUpdate", "MEDIUMTEXT");
}
private int mysqlUpdate(ArrayList<Column> cols, String uuid, String column, int toAdd) {
int num = getValue(cols, column) + toAdd;
debug("Setting " + column + " to " + num + " for " + uuid);
mysql.update(uuid, column, num, DataType.INTEGER);
return num;
}
@Override
public void onDisable() {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedVotes.entrySet()) {
String server = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVote(server, num, voteData);
num++;
}
}
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedOnlineVotes.entrySet()) {
String name = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVoteOnline(name, num, voteData);
num++;
}
}
nonVotedPlayersCache.save();
}
}
@Override
public void onEnable() {
try {
@@ -438,7 +438,8 @@ public class VotingPluginBungee extends Plugin {
metrics.addCustomChart(
new BStatsMetricsBungee.SimplePie("waitforuseronline", () -> "" + getConfig().getWaitForUserOnline()));
getLogger().info("VotingPlugin loaded, using method: " + method.toString());
getLogger().info("VotingPlugin loaded, using method: " + method.toString() + ", PluginMessagingVersion: "
+ BungeeVersion.getPluginMessageVersion());
}
@EventHandler
@@ -658,7 +659,7 @@ public class VotingPluginBungee extends Plugin {
}
uuid = u.toString();
} else {
getLogger().info("Ignoring vote from " + player);
getLogger().info("Ignoring vote from " + player + " since player hasn't joined before");
return;
}
}
@@ -669,6 +670,11 @@ public class VotingPluginBungee extends Plugin {
if (getConfig().getBungeeManageTotals()) {
if (mysql == null) {
getLogger().severe("Mysql is not loaded correctly, stopping vote processing");
return;
}
if (!mysql.getUuids().contains(uuid)) {
mysql.update(uuid, "PlayerName", player, DataType.STRING);
}
@@ -745,6 +751,9 @@ public class VotingPluginBungee extends Plugin {
cachedOnlineVotes.put(uuid, list);
debug("Caching online vote for " + player + " on " + service);
}
for (String s : getProxy().getServers().keySet()) {
sendPluginMessageServer(s, "VoteUpdate", uuid);
}
}
} else if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service, text);
@@ -63,17 +63,17 @@ public class BungeeMySQL {
}
mysql = new com.bencodez.advancedcore.api.user.userstorage.mysql.api.MySQL(maxThreads) {
@Override
public void severe(String string) {
plugin.getLogger().error(string);
}
@Override
public void debug(SQLException e) {
if (plugin.getConfig().getDebug()) {
e.printStackTrace();
}
}
@Override
public void severe(String string) {
plugin.getLogger().error(string);
}
};
if (!mysql.connect(hostName, "" + port, user, pass, database, useSSL, lifeTime, str, publicKeyRetrieval)) {
@@ -380,7 +380,7 @@ public class BungeeMySQL {
}
public void insertQuery(String index, List<Column> cols) {
String query = "INSERT " + getName() + " ";
String query = "INSERT IGNORE " + getName() + " ";
query += "set uuid='" + index + "', ";
@@ -13,6 +13,10 @@ public class Config extends VelocityYMLFile {
super(file);
}
public boolean getAllowUnJoined() {
return getBoolean(getNode("AllowUnJoined"), false);
}
public List<String> getBlockedServers() {
return getStringList(getNode("BlockedServers"), new ArrayList<String>());
}
@@ -21,22 +25,14 @@ public class Config extends VelocityYMLFile {
return getBoolean(getNode("Broadcast"), false);
}
public boolean getWaitForUserOnline() {
return getBoolean(getNode("WaitForUserOnline"), false);
public String getBungeeHost() {
return getString(getNode("BungeeServer", "Host"), "");
}
public boolean getBungeeManageTotals() {
return getBoolean(getNode("BungeeManageTotals"), true);
}
public boolean getAllowUnJoined() {
return getBoolean(getNode("AllowUnJoined"), false);
}
public String getBungeeHost() {
return getString(getNode("BungeeServer", "Host"), "");
}
public String getBungeeMethod() {
return getString(getNode("BungeeMethod"), "PLUGINMESSAGING");
}
@@ -53,6 +49,18 @@ public class Config extends VelocityYMLFile {
return getString(getNode("FallBackServer"), "");
}
public long getLong(ConfigurationNode node, long def) {
return node.getLong(def);
}
public ConfigurationNode getMysqlNode() {
return getNode("MySQL");
}
public int getPointsOnVote() {
return getInt(getNode("PointsOnVote"), 1);
}
public boolean getSendVotesToAllServers() {
return getBoolean(getNode("SendVotesToAllServers"), true);
}
@@ -61,10 +69,6 @@ public class Config extends VelocityYMLFile {
return getNode("SpigotServers", s);
}
public int getPointsOnVote() {
return getInt(getNode("PointsOnVote"), 1);
}
public Collection<String> getSpigotServers() {
ArrayList<String> list = new ArrayList<String>();
for (ConfigurationNode conf : getNode("SpigotServers").getChildrenList()) {
@@ -73,11 +77,7 @@ public class Config extends VelocityYMLFile {
return list;
}
public ConfigurationNode getMysqlNode() {
return getNode("MySQL");
}
public long getLong(ConfigurationNode node, long def) {
return node.getLong(def);
public boolean getWaitForUserOnline() {
return getBoolean(getNode("WaitForUserOnline"), false);
}
}
@@ -13,10 +13,10 @@ import ninja.leaping.configurate.objectmapping.ObjectMappingException;
import ninja.leaping.configurate.yaml.YAMLConfigurationLoader;
public class VelocityYMLFile {
@Getter
private File file;
@Getter
private ConfigurationNode conf;
@Getter
private File file;
private YAMLConfigurationLoader loader;
public VelocityYMLFile(File file) {
@@ -41,31 +41,14 @@ public class VelocityYMLFile {
}
public ConfigurationNode getData() {
return conf;
}
public ConfigurationNode getNode(Object... path) {
return getData().getNode(path);
}
public List<String> getStringList(ConfigurationNode node, ArrayList<String> def) {
try {
return node.getList(TypeToken.of(String.class), def);
} catch (ObjectMappingException e) {
e.printStackTrace();
return def;
}
}
public String getString(ConfigurationNode node, String def) {
return node.getString(def);
}
public boolean getBoolean(ConfigurationNode node, boolean def) {
return node.getBoolean(def);
}
public ConfigurationNode getData() {
return conf;
}
public int getInt(ConfigurationNode node, int def) {
return node.getInt(def);
}
@@ -77,7 +60,24 @@ public class VelocityYMLFile {
}
return keys;
}
public ConfigurationNode getNode(Object... path) {
return getData().getNode(path);
}
public String getString(ConfigurationNode node, String def) {
return node.getString(def);
}
public List<String> getStringList(ConfigurationNode node, ArrayList<String> def) {
try {
return node.getList(TypeToken.of(String.class), def);
} catch (ObjectMappingException e) {
e.printStackTrace();
return def;
}
}
public void reload() {
loader = YAMLConfigurationLoader.builder().setPath(file.toPath()).build();
@@ -65,35 +65,44 @@ import ninja.leaping.configurate.ConfigurationNode;
"BenCodez" }, dependencies = { @Dependency(id = "nuvotifier", optional = true) })
public class VotingPluginVelocity {
private final ProxyServer server;
@Getter
private final Logger logger;
private final Path dataDirectory;
private final Metrics.Factory metricsFactory;
@Getter
private Config config;
private static final ChannelIdentifier CHANNEL = MinecraftChannelIdentifier.create("vp", "vp");
@Getter
private BungeeMethod method;
@Getter
private BungeeMySQL mysql;
private HashMap<String, ArrayList<OfflineBungeeVote>> cachedOnlineVotes = new HashMap<String, ArrayList<OfflineBungeeVote>>();
private HashMap<RegisteredServer, ArrayList<OfflineBungeeVote>> cachedVotes = new HashMap<RegisteredServer, ArrayList<OfflineBungeeVote>>();
private HashMap<String, ClientHandler> clientHandles;
@Getter
private Config config;
private final Path dataDirectory;
private EncryptionHandler encryptionHandler;
@Getter
private final Logger logger;
@Getter
private BungeeMethod method;
private final Metrics.Factory metricsFactory;
@Getter
private BungeeMySQL mysql;
private NonVotedPlayersCache nonVotedPlayersCache;
private final ProxyServer server;
private SocketHandler socketHandler;
private VoteCache voteCacheFile;
@Inject
public VotingPluginVelocity(ProxyServer server, Logger logger, Metrics.Factory metricsFactory,
@DataDirectory Path dataDirectory) {
this.server = server;
this.logger = logger;
this.dataDirectory = dataDirectory;
this.metricsFactory = metricsFactory;
}
public void checkCachedVotes(RegisteredServer serverToCheck) {
if (!serverToCheck.getPlayersConnected().isEmpty()) {
if (cachedVotes.containsKey(serverToCheck)
@@ -104,7 +113,10 @@ public class VotingPluginVelocity {
for (OfflineBungeeVote cache : c) {
boolean toSend = true;
if (getConfig().getWaitForUserOnline()) {
Player p = server.getPlayer(UUID.fromString(cache.getUuid())).get();
Player p = null;
if (server.getPlayer(UUID.fromString(cache.getUuid())).isPresent()) {
p = server.getPlayer(UUID.fromString(cache.getUuid())).get();
}
if (p == null || !p.isActive()) {
toSend = false;
} else if (p != null && p.isActive() && !p.getCurrentServer().get().getServerInfo()
@@ -151,13 +163,85 @@ public class VotingPluginVelocity {
}
}
@Inject
public VotingPluginVelocity(ProxyServer server, Logger logger, Metrics.Factory metricsFactory,
@DataDirectory Path dataDirectory) {
this.server = server;
this.logger = logger;
this.dataDirectory = dataDirectory;
this.metricsFactory = metricsFactory;
public void debug(String msg) {
if (config.getDebug()) {
logger.info("Debug: " + msg);
}
}
public UUID fetchUUID(String playerName) throws Exception {
// Get response from Mojang API
URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + playerName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (connection.getResponseCode() == 400) {
logger.info("There is no player with the name \"" + playerName + "\"!");
return null;
}
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// Parse JSON response and get UUID
JsonElement element = new JsonParser().parse(bufferedReader);
JsonObject object = element.getAsJsonObject();
String uuidAsString = object.get("id").getAsString();
// Return UUID
return parseUUIDFromString(uuidAsString);
}
public String getProperName(String uuid, String currentName) {
if (server.getPlayer(UUID.fromString(uuid)).isPresent()) {
Player p = server.getPlayer(UUID.fromString(uuid)).get();
if (p != null && p.isActive()) {
return p.getUsername();
}
}
return currentName;
}
public String getUUID(String playerName) {
if (server.getPlayer(playerName).isPresent()) {
Player p = server.getPlayer(playerName).get();
if (p != null && p.isActive()) {
return p.getUniqueId().toString();
}
}
if (mysql != null) {
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
}
}
if (nonVotedPlayersCache != null) {
return nonVotedPlayersCache.playerExists(playerName);
}
return "";
}
private int getValue(ArrayList<Column> cols, String column) {
for (Column d : cols) {
if (d.getName().equalsIgnoreCase(column)) {
Object value = d.getValue();
int num = 0;
if (value instanceof Integer) {
try {
num = (int) value;
} catch (ClassCastException | NullPointerException ex) {
}
} else if (value instanceof String) {
try {
num = Integer.parseInt((String) value);
} catch (Exception e) {
}
}
return num;
}
}
return 0;
}
private void loadMysql() {
@@ -189,34 +273,76 @@ public class VotingPluginVelocity {
getMysql().alterColumnType("DayVoteStreakLastUpdate", "MEDIUMTEXT");
}
public void reload(boolean loadMySQL) {
config.reload();
if (loadMySQL) {
if (!config.getString(config.getNode("Host"), "").isEmpty()) {
loadMysql();
} else {
logger.error("MySQL settings not set in bungeeconfig.yml");
private int mysqlUpdate(ArrayList<Column> cols, String uuid, String column, int toAdd) {
int num = getValue(cols, column) + toAdd;
debug("Setting " + column + " to " + num + " for " + uuid);
mysql.update(uuid, column, num, DataType.INTEGER);
return num;
}
@Subscribe
public void onPluginMessagingReceived(PluginMessageEvent event) {
if (event.getIdentifier().getId().equals(CHANNEL.getId())) {
ByteArrayInputStream instream = new ByteArrayInputStream(event.getData());
DataInputStream in = new DataInputStream(instream);
try {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outstream);
String subchannel = in.readUTF();
int size = in.readInt();
// check for status message returns
if (subchannel.equalsIgnoreCase("statusokay")) {
String server = in.readUTF();
logger.info("Status okay for " + server);
return;
} else if (subchannel.equalsIgnoreCase("login")) {
String player = in.readUTF();
Player p = server.getPlayer(player).get();
checkCachedVotes(p.getCurrentServer().get().getServer());
checkOnlineVotes(p, p.getUniqueId().toString(), p.getCurrentServer().get().getServer());
return;
} else {
// reforward message
out.writeUTF(subchannel);
out.writeInt(size);
for (int i = 0; i < size; i++) {
out.writeUTF(in.readUTF());
}
for (RegisteredServer send : server.getAllServers()) {
if (send.getPlayersConnected().size() > 0) {
send.sendPluginMessage(CHANNEL, outstream.toByteArray());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void status() {
if (method.equals(BungeeMethod.SOCKETS)) {
sendServerMessage("status");
} else if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (RegisteredServer s : server.getAllServers()) {
if (!config.getBlockedServers().contains(s.getServerInfo().getName())) {
if (s.getPlayersConnected().size() == 0) {
getLogger().info("No players on server " + s + " to send test status message");
} else {
// send
getLogger().info("Sending request for status message on " + s);
sendPluginMessageServer(s, "Status", s.getServerInfo().getName());
}
} else {
getLogger().info("Ignoring blocked server " + s);
@Subscribe
public void onProxyDisable(ProxyShutdownEvent event) {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (Entry<RegisteredServer, ArrayList<OfflineBungeeVote>> entry : cachedVotes.entrySet()) {
RegisteredServer server = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVote(server.getServerInfo().getName(), num, voteData);
num++;
}
}
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedOnlineVotes.entrySet()) {
String name = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVoteOnline(name, num, voteData);
num++;
}
}
nonVotedPlayersCache.save();
}
}
@@ -388,119 +514,15 @@ public class VotingPluginVelocity {
metrics.addCustomChart(new SimplePie("waitforuseronline", () -> "" + getConfig().getWaitForUserOnline()));
logger.info("VotingPlugin velocity loaded, method: " + method.toString());
logger.info("VotingPlugin velocity loaded, method: " + method.toString() + ", PluginMessagingVersion: "
+ BungeeVersion.getPluginMessageVersion());
}
@Subscribe
public void onProxyDisable(ProxyShutdownEvent event) {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (Entry<RegisteredServer, ArrayList<OfflineBungeeVote>> entry : cachedVotes.entrySet()) {
RegisteredServer server = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVote(server.getServerInfo().getName(), num, voteData);
num++;
}
}
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedOnlineVotes.entrySet()) {
String name = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVoteOnline(name, num, voteData);
num++;
}
}
nonVotedPlayersCache.save();
}
}
@Subscribe
public void playerServerConnected(ServerConnectedEvent event) {
checkCachedVotes(event.getServer());
checkOnlineVotes(event.getPlayer(), event.getPlayer().getUniqueId().toString(), event.getServer());
}
@Subscribe
public void onPluginMessagingReceived(PluginMessageEvent event) {
if (event.getIdentifier().getId().equals(CHANNEL.getId())) {
ByteArrayInputStream instream = new ByteArrayInputStream(event.getData());
DataInputStream in = new DataInputStream(instream);
try {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outstream);
String subchannel = in.readUTF();
int size = in.readInt();
// check for status message returns
if (subchannel.equalsIgnoreCase("statusokay")) {
String server = in.readUTF();
logger.info("Status okay for " + server);
return;
} else if (subchannel.equalsIgnoreCase("login")) {
String player = in.readUTF();
Player p = server.getPlayer(player).get();
checkCachedVotes(p.getCurrentServer().get().getServer());
checkOnlineVotes(p, p.getUniqueId().toString(), p.getCurrentServer().get().getServer());
return;
} else {
// reforward message
out.writeUTF(subchannel);
out.writeInt(size);
for (int i = 0; i < size; i++) {
out.writeUTF(in.readUTF());
}
for (RegisteredServer send : server.getAllServers()) {
if (send.getPlayersConnected().size() > 0) {
send.sendPluginMessage(CHANNEL, outstream.toByteArray());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String getUUID(String playerName) {
Player p = server.getPlayer(playerName).get();
if (p != null && p.isActive()) {
return p.getUniqueId().toString();
}
if (mysql != null) {
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
}
}
if (nonVotedPlayersCache != null) {
return nonVotedPlayersCache.playerExists(playerName);
}
return "";
}
public UUID fetchUUID(String playerName) throws Exception {
// Get response from Mojang API
URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + playerName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (connection.getResponseCode() == 400) {
logger.info("There is no player with the name \"" + playerName + "\"!");
return null;
}
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// Parse JSON response and get UUID
JsonElement element = new JsonParser().parse(bufferedReader);
JsonObject object = element.getAsJsonObject();
String uuidAsString = object.get("id").getAsString();
// Return UUID
return parseUUIDFromString(uuidAsString);
public void onVotifierEvent(VotifierEvent event) {
Vote vote = event.getVote();
logger.info("Vote received " + vote.getUsername() + " from service site " + vote.getServiceName());
vote(vote.getUsername(), vote.getServiceName(), true);
}
private UUID parseUUIDFromString(String uuidAsString) {
@@ -521,54 +543,21 @@ public class VotingPluginVelocity {
return new UUID(mostSigBits, leastSigBits);
}
public void debug(String msg) {
if (config.getDebug()) {
logger.info("Debug: " + msg);
}
@Subscribe
public void playerServerConnected(ServerConnectedEvent event) {
checkCachedVotes(event.getServer());
checkOnlineVotes(event.getPlayer(), event.getPlayer().getUniqueId().toString(), event.getServer());
}
private int getValue(ArrayList<Column> cols, String column) {
for (Column d : cols) {
if (d.getName().equalsIgnoreCase(column)) {
Object value = d.getValue();
int num = 0;
if (value instanceof Integer) {
try {
num = (int) value;
} catch (ClassCastException | NullPointerException ex) {
}
} else if (value instanceof String) {
try {
num = Integer.parseInt((String) value);
} catch (Exception e) {
}
}
return num;
public void reload(boolean loadMySQL) {
config.reload();
if (loadMySQL) {
if (!config.getString(config.getNode("Host"), "").isEmpty()) {
loadMysql();
} else {
logger.error("MySQL settings not set in bungeeconfig.yml");
}
}
return 0;
}
private int mysqlUpdate(ArrayList<Column> cols, String uuid, String column, int toAdd) {
int num = getValue(cols, column) + toAdd;
debug("Setting " + column + " to " + num + " for " + uuid);
mysql.update(uuid, column, num, DataType.INTEGER);
return num;
}
@Subscribe
public void onVotifierEvent(VotifierEvent event) {
Vote vote = event.getVote();
vote(vote.getUsername(), vote.getServiceName(), true);
}
public String getProperName(String uuid, String currentName) {
Player p = server.getPlayer(UUID.fromString(uuid)).get();
if (p != null && p.isActive()) {
return p.getUsername();
}
return currentName;
}
public void sendPluginMessageServer(RegisteredServer s, String channel, String... messageData) {
@@ -592,6 +581,71 @@ public class VotingPluginVelocity {
}
public void sendServerMessage(String... messageData) {
for (ClientHandler h : clientHandles.values()) {
h.sendMessage(messageData);
}
}
public void sendServerMessageServer(String server, String... messageData) {
if (clientHandles.containsKey(server)) {
clientHandles.get(server).sendMessage(messageData);
}
}
public void sendSocketVote(String name, String service, BungeeMessageData text) {
String uuid = getUUID(name);
if (config.getSendVotesToAllServers()) {
sendServerMessage("bungeevote", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
} else {
// online server only
Player p = server.getPlayer(name).get();
String server = "";
if (p != null && p.isActive()) {
server = p.getCurrentServer().get().getServerInfo().getName();
} else {
server = config.getFallBack();
}
if (config.getBlockedServers().contains(server)) {
server = config.getFallBack();
}
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
sendServerMessage("BungeeUpdate");
}
}
public void status() {
if (method.equals(BungeeMethod.SOCKETS)) {
sendServerMessage("status");
} else if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (RegisteredServer s : server.getAllServers()) {
if (!config.getBlockedServers().contains(s.getServerInfo().getName())) {
if (s.getPlayersConnected().size() == 0) {
getLogger().info("No players on server " + s + " to send test status message");
} else {
// send
getLogger().info("Sending request for status message on " + s);
sendPluginMessageServer(s, "Status", s.getServerInfo().getName());
}
} else {
getLogger().info("Ignoring blocked server " + s);
}
}
}
}
public void vote(String player, String service, boolean realVote) {
try {
if (player == null || player.isEmpty()) {
@@ -616,7 +670,7 @@ public class VotingPluginVelocity {
}
uuid = u.toString();
} else {
logger.info("Ignoring vote from " + player);
logger.info("Ignoring vote from " + player + " since player hasn't joined before");
return;
}
}
@@ -627,6 +681,11 @@ public class VotingPluginVelocity {
if (getConfig().getBungeeManageTotals()) {
if (mysql == null) {
logger.error("Mysql is not loaded correctly, stopping vote processing");
return;
}
if (!mysql.getUuids().contains(uuid)) {
mysql.update(uuid, "PlayerName", player, DataType.STRING);
}
@@ -658,7 +717,10 @@ public class VotingPluginVelocity {
for (RegisteredServer s : server.getAllServers()) {
if (!config.getBlockedServers().contains(s.getServerInfo().getName())) {
boolean forceCache = false;
Player p = server.getPlayer(UUID.fromString(uuid)).get();
Player p = null;
if (server.getPlayer(UUID.fromString(uuid)).isPresent()) {
p = server.getPlayer(UUID.fromString(uuid)).get();
}
if ((p == null || !p.isActive()) && getConfig().getWaitForUserOnline()) {
forceCache = true;
debug("Forcing vote to cache");
@@ -702,6 +764,10 @@ public class VotingPluginVelocity {
cachedOnlineVotes.put(uuid, list);
debug("Caching online vote for " + player + " on " + service);
}
for (RegisteredServer s : server.getAllServers()) {
sendPluginMessageServer(s, "VoteUpdate", uuid);
}
}
} else if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service, text);
@@ -710,49 +776,4 @@ public class VotingPluginVelocity {
e.printStackTrace();
}
}
public void sendSocketVote(String name, String service, BungeeMessageData text) {
String uuid = getUUID(name);
if (config.getSendVotesToAllServers()) {
sendServerMessage("bungeevote", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
} else {
// online server only
Player p = server.getPlayer(name).get();
String server = "";
if (p != null && p.isActive()) {
server = p.getCurrentServer().get().getServerInfo().getName();
} else {
server = config.getFallBack();
}
if (config.getBlockedServers().contains(server)) {
server = config.getFallBack();
}
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
sendServerMessage("BungeeUpdate");
}
}
public void sendServerMessage(String... messageData) {
for (ClientHandler h : clientHandles.values()) {
h.sendMessage(messageData);
}
}
public void sendServerMessageServer(String server, String... messageData) {
if (clientHandles.containsKey(server)) {
clientHandles.get(server).sendMessage(messageData);
}
}
}
@@ -1,7 +1,5 @@
package com.bencodez.votingplugin.commands;
import java.io.File;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
@@ -33,7 +31,6 @@ import com.bencodez.advancedcore.api.rewards.RewardHandler;
import com.bencodez.advancedcore.api.rewards.RewardOptions;
import com.bencodez.advancedcore.api.updater.Updater;
import com.bencodez.advancedcore.api.user.UUID;
import com.bencodez.advancedcore.api.user.UserStorage;
import com.bencodez.advancedcore.api.valuerequest.ValueRequest;
import com.bencodez.advancedcore.api.valuerequest.listeners.BooleanListener;
import com.bencodez.advancedcore.api.valuerequest.listeners.StringListener;
@@ -47,6 +44,7 @@ import com.bencodez.votingplugin.commands.gui.admin.AdminVotePerms;
import com.bencodez.votingplugin.commands.gui.admin.AdminVotePlaceholders;
import com.bencodez.votingplugin.commands.gui.admin.AdminVotePlaceholdersPlayer;
import com.bencodez.votingplugin.commands.gui.admin.AdminVoteVoteParty;
import com.bencodez.votingplugin.commands.gui.admin.AdminVoteVotePlayer;
import com.bencodez.votingplugin.commands.gui.admin.cumulative.AdminVoteCumulative;
import com.bencodez.votingplugin.commands.gui.admin.milestones.AdminVoteMilestones;
import com.bencodez.votingplugin.commands.gui.admin.voteshop.AdminVoteVoteShop;
@@ -70,7 +68,6 @@ import com.bencodez.votingplugin.test.VoteTester;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.bencodez.votingplugin.user.UserManager;
import com.bencodez.votingplugin.user.VotingPluginUser;
import com.tchristofferson.configupdater.ConfigUpdater;
// TODO: Auto-generated Javadoc
/**
@@ -727,24 +724,43 @@ public class CommandLoader {
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "ConvertFromData", "(userstorage)" },
"VotingPlugin.Commands.AdminVote.ConvertFromData",
"Convert from selected user storage to current user storage") {
.add(new CommandHandler(new String[] { "User", "(player)", "SetVoteStreak", "DAY", "(number)" },
"VotingPlugin.Commands.AdminVote.SetVoteStreak.Day|" + adminPerm, "Set votestreak for player") {
@Override
public void execute(CommandSender sender, String[] args) {
if (sender instanceof Player) {
sender.sendMessage(StringParser.getInstance().colorize("&cThis can not be done ingame"));
return;
}
try {
sender.sendMessage("Starting to convert");
UserStorage prevStorage = UserStorage.valueOf(args[1].toUpperCase());
plugin.convertDataStorage(prevStorage, VotingPluginMain.plugin.getStorageType());
sender.sendMessage("Finished converting!");
} catch (Exception ex) {
ex.printStackTrace();
}
UserManager.getInstance().getVotingPluginUser(args[1])
.setDayVoteStreak(Integer.parseInt(args[4]));
sender.sendMessage(StringParser.getInstance()
.colorize("&cSet votestreak day for '" + args[1] + "' to " + args[4]));
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "SetVoteStreak", "WEEK", "(number)" },
"VotingPlugin.Commands.AdminVote.SetVoteStreak.Week|" + adminPerm,
"Set votestreak for player") {
@Override
public void execute(CommandSender sender, String[] args) {
UserManager.getInstance().getVotingPluginUser(args[1])
.setWeekVoteStreak(Integer.parseInt(args[4]));
sender.sendMessage(StringParser.getInstance()
.colorize("&cSet votestreak week for '" + args[1] + "' to " + args[4]));
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "SetVoteStreak", "MONTH", "(number)" },
"VotingPlugin.Commands.AdminVote.SetVoteStreak.Month|" + adminPerm,
"Set votestreak for player") {
@Override
public void execute(CommandSender sender, String[] args) {
UserManager.getInstance().getVotingPluginUser(args[1])
.setMonthVoteStreak(Integer.parseInt(args[4]));
sender.sendMessage(StringParser.getInstance()
.colorize("&cSet votestreak month for '" + args[1] + "' to " + args[4]));
}
});
@@ -863,6 +879,15 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "Vote", "(player)", },
"VotingPlugin.Commands.AdminVote.Vote|" + adminPerm, "Trigger manual vote via GUI", false) {
@Override
public void execute(CommandSender sender, String[] args) {
new AdminVoteVotePlayer(plugin, sender, args[1]).open();
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "Vote" },
"VotingPlugin.Commands.AdminVote.Vote|" + adminPerm, "Manual vote syntax") {
@@ -942,26 +967,6 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "Config", "Update" },
"VotingPlugin.Commands.AdminVote.Config.Edit|" + adminPerm, "Updates config with missing values") {
@Override
public void execute(CommandSender sender, String[] args) {
ArrayList<String> ignoreSections = new ArrayList<String>();
ignoreSections.add("VoteReminding");
File file = new File(plugin.getDataFolder(), "Config.yml");
try {
ConfigUpdater.update(plugin, "Config.yml", file, ignoreSections);
} catch (IOException e) {
e.printStackTrace();
}
plugin.getConfigFile().reloadData();
plugin.getConfigFile().loadValues();
sendMessage(sender, "&cUpdated config with new values");
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "Config", "TempExtraDebug" },
"VotingPlugin.Commands.AdminVote.Config.Edit|" + adminPerm,
@@ -1201,7 +1206,7 @@ public class CommandLoader {
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "VotePartyExtraRequired", "(Number)" },
"VotingPlugin.Commands.AdminVote.VoteParty.SetExtraRequired|" + adminPerm,
"Force a voteparty reward, resets vote count") {
"Set VotePartyExtraRequired value") {
@Override
public void execute(CommandSender sender, String[] args) {
@@ -2149,20 +2154,25 @@ public class CommandLoader {
if (plugin.getConfigFile().isAllowVotePointTransfers()) {
VotingPluginUser cPlayer = UserManager.getInstance().getVotingPluginUser((Player) sender);
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
int pointsToGive = Integer.parseInt(args[2]);
if (pointsToGive > 0) {
if (cPlayer.getPoints() >= pointsToGive) {
user.addPoints(pointsToGive);
cPlayer.removePoints(pointsToGive);
sendMessage(sender, "&c" + pointsToGive + " points given to " + user.getPlayerName());
user.sendMessage(
"&cYou received " + pointsToGive + " points from " + cPlayer.getPlayerName());
if (com.bencodez.advancedcore.api.user.UserManager.getInstance().userExist(args[1])) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
int pointsToGive = Integer.parseInt(args[2]);
if (pointsToGive > 0) {
if (cPlayer.getPoints() >= pointsToGive) {
user.addPoints(pointsToGive);
cPlayer.removePoints(pointsToGive);
sendMessage(sender,
"&c" + pointsToGive + " points given to " + user.getPlayerName());
user.sendMessage("&cYou received " + pointsToGive + " points from "
+ cPlayer.getPlayerName());
} else {
sendMessage(sender, "&cNot enough points");
}
} else {
sendMessage(sender, "&cNot enough points");
sendMessage(sender, "&cNumber of points needs to be greater than 0");
}
} else {
sendMessage(sender, "&cNumber of points needs to be greater than 0");
sendMessage(sender, "&c" + args[1] + " has not joined the server");
}
}
}
@@ -0,0 +1,80 @@
package com.bencodez.votingplugin.commands.gui.admin;
import java.util.ArrayList;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.bencodez.advancedcore.api.gui.GUIHandler;
import com.bencodez.advancedcore.api.gui.GUIMethod;
import com.bencodez.advancedcore.api.inventory.BInventory.ClickEvent;
import com.bencodez.advancedcore.api.inventory.BInventoryButton;
import com.bencodez.advancedcore.api.inventory.editgui.EditGUI;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.events.PlayerVoteEvent;
import com.bencodez.votingplugin.objects.VoteSite;
public class AdminVoteVotePlayer extends GUIHandler {
private String playerName;
private VotingPluginMain plugin;
public AdminVoteVotePlayer(VotingPluginMain plugin, CommandSender player, String playerName) {
super(player);
this.plugin = plugin;
this.playerName = playerName;
}
@Override
public ArrayList<String> getChat(CommandSender sender) {
return null;
}
@Override
public void onBook(Player player) {
}
@Override
public void onChat(CommandSender sender) {
}
@Override
public void onChest(Player player) {
EditGUI inv = new EditGUI("Trigger vote for " + playerName);
inv.requirePermission("VotingPlugin.Commands.AdminVote.Vote|VotingPlugin.Admin");
for (VoteSite site : plugin.getVoteSites()) {
inv.addButton(new BInventoryButton(site.getItem().setName(site.getKey())) {
@Override
public void onClick(ClickEvent clickEvent) {
VoteSite site = (VoteSite) getData("site");
PlayerVoteEvent voteEvent = new PlayerVoteEvent(site, playerName, site.getServiceSite(), false);
sendMessage(clickEvent.getPlayer(), "&cTriggering vote...");
if (voteEvent.getVoteSite() != null) {
if (!voteEvent.getVoteSite().isVaidServiceSite()) {
sendMessage(clickEvent.getPlayer(),
"&cPossible issue with service site, has the server gotten the vote from "
+ voteEvent.getServiceSite() + "?");
}
}
plugin.getServer().getPluginManager().callEvent(voteEvent);
if (plugin.isYmlError()) {
sendMessage(clickEvent.getPlayer(),
"&3Detected yml error, please check server log for details");
}
}
}.addData("site", site));
}
inv.openInventory(player);
}
@Override
public void open() {
open(GUIMethod.CHEST);
}
}
@@ -43,7 +43,6 @@ public class VoteNext extends GUIHandler {
for (VoteSite voteSite : plugin.getVoteSites()) {
if (!voteSite.isHidden()) {
String msgLine = plugin.getConfigFile().getFormatCommandsVoteNextLayout();
msgLine = StringParser.getInstance().replaceIgnoreCase(msgLine, "%info%",
@@ -63,12 +62,14 @@ public class VoteNext extends GUIHandler {
// add colors/config options
for (VoteSite site : plugin.getVoteSites()) {
Layout nextLayout = new Layout(new ArrayList<String>(Arrays.asList("[Json]")));
nextLayout.replaceTextComponent("[Json]",
BookUtil.TextBuilder.of(book.colorize(site.getDisplayName()))
.onClick(BookUtil.ClickAction.openUrl(site.getVoteURLJsonStrip()))
.onHover(BookUtil.HoverAction.showText(user.voteCommandNextInfo(site))).build());
book.addLayout(nextLayout);
if (!site.isHidden()) {
Layout nextLayout = new Layout(new ArrayList<String>(Arrays.asList("[Json]")));
nextLayout.replaceTextComponent("[Json]",
BookUtil.TextBuilder.of(book.colorize(site.getDisplayName()))
.onClick(BookUtil.ClickAction.openUrl(site.getVoteURLJsonStrip()))
.onHover(BookUtil.HoverAction.showText(user.voteCommandNextInfo(site))).build());
book.addLayout(nextLayout);
}
}
book.addLine();
@@ -85,20 +86,24 @@ public class VoteNext extends GUIHandler {
BInventory inv = new BInventory(plugin.getGui().getChestVoteNextName());
inv.addPlaceholder("player", user.getPlayerName());
for (VoteSite site : plugin.getVoteSites()) {
inv.addButton(inv.getNextSlot(), new UpdatingBInventoryButton(site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandNextInfo(site)).setAmountNone(1), 1000, 1000) {
if (!site.isHidden()) {
inv.addButton(inv.getNextSlot(),
new UpdatingBInventoryButton(site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandNextInfo(site)).setAmountNone(1), 1000, 1000) {
@Override
public void onClick(ClickEvent clickEvent) {
@Override
public void onClick(ClickEvent clickEvent) {
}
}
@Override
public ItemBuilder onUpdate(Player player) {
return site.getItem().setName(site.getDisplayName()).setLore(user.voteCommandNextInfo(site))
.setAmountNone(1).addPlaceholder("player", user.getPlayerName());
}
});
@Override
public ItemBuilder onUpdate(Player player) {
return site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandNextInfo(site)).setAmountNone(1)
.addPlaceholder("player", user.getPlayerName());
}
});
}
}
if (plugin.getGui().getChestVoteNextBackButton()) {
@@ -49,6 +49,7 @@ public class VoteShopConfirm extends GUIHandler {
public void onChest(Player player) {
PlayerUtils.getInstance().setPlayerMeta(player, "ident", identifier);
BInventory inv = new BInventory(plugin.getGui().getChestShopConfirmPurchaseTitle());
inv.dontClose();
inv.addButton(new BInventoryButton(new ItemBuilder(plugin.getGui().getChestShopConfirmPurchaseYesItem())) {
@Override
@@ -77,7 +78,7 @@ public class VoteShopConfirm extends GUIHandler {
if (plugin.getGui().getChestVoteShopCloseGUI(identifier)) {
event.getButton().getInv().closeInv(player, null);
} else {
new VoteShop(plugin, event.getPlayer(), user);
new VoteShop(plugin, event.getPlayer(), user).open();
}
}
@@ -52,10 +52,6 @@ public class BungeeSettings extends YMLFile {
@ConfigDataString(path = "Server")
@Getter
private String server = "PleaseSet";
public String getServerNameStorage() {
return getServer().replace("-", "_");
}
@ConfigDataString(path = "SpigotServer.Host")
@Getter
@@ -81,6 +77,10 @@ public class BungeeSettings extends YMLFile {
super(plugin, new File(plugin.getDataFolder(), "BungeeSettings.yml"));
}
public String getServerNameStorage() {
return getServer().replace("-", "_");
}
@Override
public void loadValues() {
new AnnotationHandler().load(getData(), this);
@@ -85,14 +85,6 @@ public class Config extends YMLFile {
@Getter
private boolean clearCacheOnVoteShopPurchase = true;
@ConfigDataInt(path = "ConvertAmount")
@Getter
private int convertAmount = 150;
@ConfigDataInt(path = "ConvertDelay", defaultValue = 30000)
@Getter
private int convertDelay;
@ConfigDataBoolean(path = "CountFakeVotes")
@Getter
private boolean countFakeVotes = true;
@@ -341,6 +333,10 @@ public class Config extends YMLFile {
return getData().getString("Format.Commands.Vote.Best.Title", "&3&l%player% Best Votes");
}
public String getFormatCommandsVoteHelpHoverColor() {
return getData().getString("Format.Commands.Vote.Help.HoverColor", "AQUA");
}
/**
* Gets the commands vote help line.
*
@@ -349,10 +345,6 @@ public class Config extends YMLFile {
public String getFormatCommandsVoteHelpLine() {
return getData().getString("Format.Commands.Vote.Help.Line", "&6%Command% - &6%HelpMessage%");
}
public String getFormatCommandsVoteHelpHoverColor() {
return getData().getString("Format.Commands.Vote.Help.HoverColor", "AQUA");
}
/**
* Gets the commands vote help require permission.
@@ -41,8 +41,8 @@ public class ConfigVoteSites extends YMLFile {
if (plugin.getConfigFile().isAutoCreateVoteSites()) {
String org = siteName;
siteName = siteName.replace(".", "_");
plugin.getLogger().warning("VoteSite " + siteName
+ " does not exist, creating one, set AutoCreateVoteSites to false to prevent this");
plugin.getLogger().warning("VoteSite " + siteName + " does not exist with the servicesite '" + org
+ "', creating one, set AutoCreateVoteSites to false to prevent this");
setEnabled(siteName, true);
setServiceSite(siteName, org);
setVoteURL(siteName, "VoteURL");
@@ -69,6 +69,9 @@ public class ConfigVoteSites extends YMLFile {
* @return the data
*/
public ConfigurationSection getData(String siteName) {
if (!getData().isConfigurationSection("VoteSites." + siteName)) {
plugin.getLogger().warning("VoteSites." + siteName + " is not a configuration section");
}
return getData().getConfigurationSection("VoteSites." + siteName);
}
@@ -189,7 +192,7 @@ public class ConfigVoteSites extends YMLFile {
*/
public ArrayList<VoteSite> getVoteSitesLoad() {
ArrayList<VoteSite> voteSites = new ArrayList<VoteSite>();
ArrayList<String> voteSiteNames = getVoteSitesNames();
ArrayList<String> voteSiteNames = getVoteSitesNames(true);
if (voteSiteNames != null) {
for (String site : voteSiteNames) {
if (getVoteSiteEnabled(site) && !site.equalsIgnoreCase("null")) {
@@ -222,12 +225,7 @@ public class ConfigVoteSites extends YMLFile {
return voteSites;
}
/**
* Gets the vote sites names.
*
* @return the vote sites names
*/
public ArrayList<String> getVoteSitesNames() {
public ArrayList<String> getVoteSitesNames(boolean checkEnabled) {
ArrayList<String> siteNames = new ArrayList<String>();
if (getData().isConfigurationSection("VoteSites")) {
siteNames = ArrayUtils.getInstance().convert(getData().getConfigurationSection("VoteSites").getKeys(false));
@@ -235,11 +233,14 @@ public class ConfigVoteSites extends YMLFile {
for (int i = siteNames.size() - 1; i >= 0; i--) {
// plugin.getLogger().info(siteNames.get(i));
if (!getVoteSiteEnabled(siteNames.get(i)) || siteNames.get(i).equalsIgnoreCase("null")
|| !siteCheck(siteNames.get(i))) {
if (!getData().isConfigurationSection("VoteSites." + siteNames.get(i))) {
plugin.getLogger()
.warning("VoteSites." + siteNames.get(i) + " is not a configuration section, please remove");
siteNames.remove(i);
} else if (siteNames.get(i).equalsIgnoreCase("null")
|| (!getVoteSiteEnabled(siteNames.get(i)) && checkEnabled) || !siteCheck(siteNames.get(i))) {
// plugin.getLogger().info("Removed: " + siteNames.get(i));
siteNames.remove(i);
}
}
@@ -36,7 +36,7 @@ public class SpecialRewardsConfig extends YMLFile {
@Getter
private String firstVoteRewardsPath = "FirstVote";
@Getter
private String firstVoteTodayRewardsPath = "FirstVoteToday";
@@ -3,7 +3,7 @@ package com.bencodez.votingplugin.events;
import lombok.Getter;
public enum SpecialRewardType {
ALLSITE, CUMMULATIVE, FIRSTVOTE, MILESTONE, VOTESTREAK, FIRSTVOTETODAY;
ALLSITE, CUMMULATIVE, FIRSTVOTE, FIRSTVOTETODAY, MILESTONE, VOTESTREAK;
@Getter
private int amount = -1;
@@ -87,6 +87,11 @@ public class PlayerVoteListener implements Listener {
return;
}
if (!voteSite.isEnabled()) {
plugin.debug("Votesite: " + voteSite.getKey() + " is not enabled");
return;
}
VotingPluginUser user = null;
if (event.getVotingPluginUser() != null) {
user = event.getVotingPluginUser();
@@ -77,12 +77,12 @@ public class VotiferEvent implements Listener {
&& (plugin.getBungeeHandler().getMethod().equals(BungeeMethod.PLUGINMESSAGING)
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.SOCKETS))) {
plugin.getLogger().severe(
"Ignoring vote from votifier since pluginmessaging or socket bungee method is enabled");
"Ignoring vote from votifier since pluginmessaging or socket bungee method is enabled, this means you aren't setup correctly for those methods");
return;
}
String voteSiteName = plugin.getVoteSiteName(voteSite);
ArrayList<String> sites = plugin.getConfigVoteSites().getVoteSitesNames();
ArrayList<String> sites = plugin.getConfigVoteSites().getVoteSitesNames(false);
boolean createSite = false;
if (sites != null) {
if (!sites.contains(voteSiteName)) {
@@ -250,6 +250,14 @@ public class PlaceHolders {
}
}.withDescription("Return true/false if player can vote on all sites"));
placeholders.add(new PlaceHolder<VotingPluginUser>("CanVoteSites") {
@Override
public String placeholderRequest(OfflinePlayer p, VotingPluginUser user, String identifier) {
return "" + user.getSitesNotVotedOn();
}
}.withDescription("Return number of votesites available"));
placeholders.add(new PlaceHolder<VotingPluginUser>("Next_AnySite") {
@Override
@@ -91,7 +91,7 @@ public class SignHandler {
* Check skulls.
*/
public void checkSkulls() {
if (playerName.equalsIgnoreCase("No Player") || playerName.equals("")) {
if (noNameAvailable()) {
return;
}
if (skullLocation != null) {
@@ -151,6 +151,10 @@ public class SignHandler {
return skullLocation != null;
}
public boolean noNameAvailable() {
return playerName.equalsIgnoreCase("No Player") || playerName.equals("");
}
/**
* Removes the sign.
*/
@@ -224,9 +224,11 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
*/
public boolean canVoteAll() {
for (VoteSite voteSite : plugin.getVoteSites()) {
boolean canVote = canVoteSite(voteSite);
if (!canVote) {
return false;
if (!voteSite.isHidden()) {
boolean canVote = canVoteSite(voteSite);
if (!canVote) {
return false;
}
}
}
return true;
@@ -234,7 +236,7 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
public boolean canVoteAny() {
for (VoteSite voteSite : plugin.getVoteSites()) {
if (!voteSite.isIgnoreCanVote()) {
if (!voteSite.isIgnoreCanVote() && !voteSite.isHidden()) {
boolean canVote = canVoteSite(voteSite);
if (canVote) {
return true;
@@ -1269,4 +1271,16 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
return MiscUtils.getInstance().getTime(getDayVoteStreakLastUpdate()).getDayOfYear() == time.getDayOfYear();
}
public int getSitesNotVotedOn() {
int amount = 0;
for (VoteSite site : plugin.getVoteSites()) {
if (!site.isHidden()) {
if (canVoteSite(site)) {
amount++;
}
}
}
return amount;
}
}
@@ -1,9 +1,11 @@
package com.bencodez.votingplugin.votereminding;
import java.util.Timer;
import java.util.TimerTask;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import com.bencodez.advancedcore.api.misc.PlayerUtils;
import com.bencodez.advancedcore.api.rewards.RewardBuilder;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.user.UserManager;
@@ -18,6 +20,8 @@ public class VoteReminding {
/** The plugin. */
private VotingPluginMain plugin;
private Timer timer;
public VoteReminding(VotingPluginMain plugin) {
this.plugin = plugin;
}
@@ -28,22 +32,13 @@ public class VoteReminding {
* @param user the user
*/
public void checkRemind(VotingPluginUser user) {
String playerName = user.getPlayerName();
if (PlayerUtils.getInstance().hasServerPermission(playerName, "VotingPlugin.Login.RemindVotes")
|| PlayerUtils.getInstance().hasServerPermission(playerName, "VotingPlugin.Player")) {
if (user.canVoteAll() || (user.canVoteAny() && user.hasPermission("VotingPlugin.Login.RemindVotes.Any"))) {
Player player = Bukkit.getPlayer(playerName);
if (player != null) {
if (!plugin.getConfigFile().getVoteRemindingRemindOnlyOnce()) {
runRemind(user);
user.setReminded(true);
} else if (!user.isReminded()) {
runRemind(user);
user.setReminded(true);
}
if (user.hasPermission("VotingPlugin.Login.RemindVotes") || user.hasPermission("VotingPlugin.Player")) {
if (shouldRemind(user)) {
if (!plugin.getConfigFile().getVoteRemindingRemindOnlyOnce()) {
runRemind(user);
} else if (!user.isReminded()) {
runRemind(user);
}
}
}
@@ -51,23 +46,31 @@ public class VoteReminding {
private void giveReward(VotingPluginUser user) {
new RewardBuilder(plugin.getConfigFile().getData(), plugin.getConfigFile().getVoteRemindingRewardsPath())
.setGiveOffline(false).send(user);
.withPlaceHolder("sitesavailable", "" + user.getSitesNotVotedOn()).setGiveOffline(false).send(user);
}
/**
* Load remind checking.
*/
public void loadRemindChecking() {
Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, new Runnable() {
if (timer != null) {
timer.cancel();
}
if (plugin.getConfigFile().getVoteRemindingRemindDelay() > 0) {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(player);
checkRemind(user);
@Override
public void run() {
if (plugin != null) {
for (Player player : Bukkit.getServer().getOnlinePlayers()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(player);
checkRemind(user);
}
}
}
}
}, 10, plugin.getConfigFile().getVoteRemindingRemindDelay() * 20 * 60);
}, 1000 * 30, plugin.getConfigFile().getVoteRemindingRemindDelay() * 1000 * 60);
}
}
/**
@@ -80,13 +83,25 @@ public class VoteReminding {
if (plugin.getConfigFile().isUsePrimaryAccountForPlaceholders() && user.hasPrimaryAccount()) {
user = UserManager.getInstance().getVotingPluginUser(user.getPrimaryAccount());
}
if (user.canVoteAll() && user.shouldBeReminded()) {
giveReward(user);
if (user.getData().hasData()) {
user.setReminded(true);
giveReward(user);
plugin.debug(user.getPlayerName() + " was reminded!");
}
plugin.debug(user.getPlayerName() + " was reminded!");
}
}
public boolean shouldRemind(VotingPluginUser user) {
if (user.shouldBeReminded()) {
boolean hasPermAll = user.hasPermission("VotingPlugin.Login.RemindVotes.All");
if (hasPermAll) {
return user.canVoteAll();
} else {
return user.canVoteAny();
}
} else {
return false;
}
}
@@ -95,9 +110,7 @@ public class VoteReminding {
if (plugin.getConfigFile().isUsePrimaryAccountForPlaceholders() && user.hasPrimaryAccount()) {
user = UserManager.getInstance().getVotingPluginUser(user.getPrimaryAccount());
}
if ((!UserManager.getInstance().getAllUUIDs().contains(user.getUUID()) || (user.canVoteAll()
|| (user.canVoteAny() && user.hasPermission("VotingPlugin.Login.RemindVotes.Any"))))
&& user.shouldBeReminded()) {
if ((!UserManager.getInstance().getAllUUIDs().contains(user.getUUID()) || shouldRemind(user))) {
giveReward(user);
if (user.getData().hasData()) {
user.setReminded(true);