Compare commits

...
57 Commits
Author SHA1 Message Date
BenCodez f04930e437 Update version number to 6.18.4 2025-04-13 15:47:38 -06:00
Ben c45e8356bb Merge pull request #1432 from BenCodez/dependabot/maven/VotingPlugin/org.projectlombok-lombok-1.18.38
Bump org.projectlombok:lombok from 1.18.36 to 1.18.38 in /VotingPlugin
2025-04-07 07:44:46 -06:00
dependabot[bot] 2f78b7784a Bump org.projectlombok:lombok from 1.18.36 to 1.18.38 in /VotingPlugin
Bumps [org.projectlombok:lombok](https://github.com/projectlombok/lombok) from 1.18.36 to 1.18.38.
- [Changelog](https://github.com/projectlombok/lombok/blob/master/doc/changelog.markdown)
- [Commits](https://github.com/projectlombok/lombok/compare/v1.18.36...v1.18.38)

---
updated-dependencies:
- dependency-name: org.projectlombok:lombok
  dependency-version: 1.18.38
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 07:15:37 +00:00
BenCodez 911642f57f Update placeholder descriptions to specify "username" instead of "user" 2025-04-03 17:28:54 -06:00
Ben 5e63c04f6c Merge pull request #1430 from BenCodez/dependabot/maven/VotingPlugin/net.md-5-bungeecord-api-1.21-R0.2
Bump net.md-5:bungeecord-api from 1.20-R0.3-SNAPSHOT to 1.21-R0.2 in /VotingPlugin
2025-03-31 07:43:01 -06:00
dependabot[bot] e368f30dd9 Bump net.md-5:bungeecord-api in /VotingPlugin
Bumps [net.md-5:bungeecord-api](https://github.com/SpigotMC/BungeeCord) from 1.20-R0.3-SNAPSHOT to 1.21-R0.2.
- [Commits](https://github.com/SpigotMC/BungeeCord/commits)

---
updated-dependencies:
- dependency-name: net.md-5:bungeecord-api
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 06:53:42 +00:00
BenCodez 5d5e8b0d55 Modify unit tests, add more tests 2025-03-30 22:08:06 -06:00
BenCodez 16e52a4fd7 Revert placeholder change 2025-03-30 16:58:46 -06:00
BenCodez 331c8fedf5 Adjust next vote placeholder 2025-03-30 14:59:12 -06:00
BenCodez c085d6823e Improve vote cache time checks and add unit tests for VotingPluginProxy
- Add `@Setter` to `cachedOnlineVotes` and `cachedVotes`
- Update vote cache time check logic in `VotingPluginProxy`
- Create `VotingPluginProxyTest` class
- Add tests for removing expired votes from `cachedOnlineVotes`
- Add tests for not removing non-expired votes from `cachedOnlineVotes`
- Add tests for removing expired votes from `cachedVotes`
2025-03-30 14:35:23 -06:00
BenCodez 47680b2646 Slight adjustment to vote cache time handling 2025-03-30 10:35:41 -06:00
BenCodez 60ed0ce73d Force update player heads from signs 2025-03-29 08:11:36 -06:00
BenCodez e5ae3184e0 Fix velocity config not reloading 2025-03-28 07:49:03 -06:00
BenCodez dca9c6fe18 Adjust handling of skulls for signs to use item skull cache 2025-03-27 20:29:38 -06:00
Ben 083e90706f Merge pull request #1429 from tonyjamesstark/patch-1
Update SignHandler.java
2025-03-27 09:04:33 -06:00
tonyjamesstark fed96bcda1 Update SignHandler.java
fix skull displays showing default skins
2025-03-27 07:57:07 -07:00
BenCodez 5bad8c8f98 Update to 1.21.5 2025-03-25 21:36:58 -06:00
BenCodez e31326395c Fix bungee voteparty not working on backend servers 2025-03-18 21:30:37 -06:00
Ben f5b2d27b9e Merge pull request #1425 from BenCodez/dependabot/maven/VotingPlugin/org.junit.jupiter-junit-jupiter-engine-5.12.1
Bump org.junit.jupiter:junit-jupiter-engine from 5.12.0 to 5.12.1 in /VotingPlugin
2025-03-17 07:56:15 -06:00
dependabot[bot] 42626e3789 Bump org.junit.jupiter:junit-jupiter-engine in /VotingPlugin
Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.12.0 to 5.12.1.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.12.0...r5.12.1)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 06:27:11 +00:00
BenCodez b35ff9454d Fix color codes on velocity commands 2025-03-12 19:24:27 -06:00
BenCodez 9ee1547691 Add sitesavailabletotal placeholder - return number of votesites 2025-03-11 10:07:41 -06:00
BenCodez cb1599fe56 Fix double vote points on online proxy votes 2025-03-08 20:18:57 -06:00
BenCodez 59a206617c Adjustments to handling bedrock players 2025-03-07 10:32:58 -06:00
BenCodez 699d74ca3f Change vote party processing order 2025-03-04 08:07:34 -06:00
BenCodez ad6d411e64 Change order of voteparty processing 2025-03-03 12:21:23 -06:00
Ben 1b430dc4b8 Merge pull request #1422 from BenCodez/dependabot/maven/VotingPlugin/org.apache.maven.plugins-maven-deploy-plugin-3.1.4
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.3 to 3.1.4 in /VotingPlugin
2025-03-03 07:50:47 -06:00
dependabot[bot] 526dcc830e Bump org.apache.maven.plugins:maven-deploy-plugin in /VotingPlugin
Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4.
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:02:14 +00:00
BenCodez 75aaae7016 Change layout of packages for proxy files 2025-03-02 19:23:56 -06:00
BenCodez 89d3372701 Make attempt to get bedrock player if votes comes with no prefix 2025-03-02 19:18:02 -06:00
BenCodez 209f1dbc25 Add extra check before checking players current server on velocity 2025-02-25 17:17:40 -06:00
BenCodez bb67de8d0e Update version number to 6.18.4-SNAPSHOT 2025-02-24 15:15:06 -06:00
BenCodez b4d57c7eae Update version number to 6.18.3 2025-02-24 14:58:52 -06:00
Ben 2ac6609d8e Update README.md 2025-02-24 14:51:22 -06:00
Ben 9eec6525c0 Merge pull request #1421 from BenCodez/dependabot/maven/VotingPlugin/org.junit.jupiter-junit-jupiter-engine-5.12.0
Bump org.junit.jupiter:junit-jupiter-engine from 5.11.4 to 5.12.0 in /VotingPlugin
2025-02-24 08:17:06 -06:00
dependabot[bot] 858b8b7b3c Bump org.junit.jupiter:junit-jupiter-engine in /VotingPlugin
Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.11.4 to 5.12.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:04:40 +00:00
BenCodez 0aaef50a82 Add extra checks for velocity 2025-02-22 07:58:36 -06:00
BenCodez 365f06d2ed Add extra checks for velocity 2025-02-22 07:58:36 -06:00
BenCodez a1b7370da0 Adjust login check to be a little more efficient 2025-02-18 21:23:38 -06:00
Ben 2f52576bc4 Merge pull request #1420 from BenCodez/dependabot/maven/VotingPlugin/org.junit.jupiter-junit-jupiter-engine-5.11.4
Bump org.junit.jupiter:junit-jupiter-engine from 5.8.1 to 5.11.4 in /VotingPlugin
2025-02-17 08:26:44 -06:00
dependabot[bot] bac19aecb9 Bump org.junit.jupiter:junit-jupiter-engine in /VotingPlugin
Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.8.1 to 5.11.4.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.8.1...r5.11.4)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter-engine
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 06:35:47 +00:00
BenCodez 3ad6ce247d Undo test change 2025-02-13 16:24:51 -06:00
BenCodez bb78792e27 Test change in pom.xml 2025-02-13 16:02:24 -06:00
BenCodez 726b116c20 Add voteparty test 2025-02-12 17:48:42 -06:00
BenCodez f731f82b01 Modify test package location 2025-02-12 08:36:08 -06:00
BenCodez 939c431bcf Fix lombok 2025-02-11 11:40:09 -06:00
BenCodez 87ed9dfe39 Change default source and resource folder, add first unit test 2025-02-11 11:35:59 -06:00
BenCodez eceacf607f Change handling of json files on bungee 2025-02-09 13:52:38 -06:00
BenCodez 8d6db5b94f Add extra null check on nonvotedplayerscache.json 2025-02-09 09:51:24 -06:00
BenCodez 700300a293 Adjust handling of non voted player cache on bungee 2025-02-08 08:32:28 -06:00
BenCodez 5e5e208de0 Adjust plugin messaging handling slightly 2025-02-05 10:37:48 -06:00
BenCodez b48662acfe Add AdminVoteTopPoints command and GUI for viewing top points 2025-02-05 08:45:05 -06:00
BenCodez 0aed3068db Adjust multi-proxy loading 2025-02-04 17:25:24 -06:00
BenCodez 25a3ff904d Add more debug to vote party check 2025-02-04 10:54:04 -06:00
BenCodez bb7adc409a Small change for bungee 2025-01-31 12:34:57 -06:00
BenCodez 1b28966798 Fixed an error that can happen on bungee 2025-01-26 18:42:36 -06:00
BenCodez f5d34ad84a Update version number to 6.18.3-SNAPSHOT 2025-01-26 13:35:26 -06:00
135 changed files with 1466 additions and 521 deletions

No files matched your search

-4
View File
@@ -2,10 +2,6 @@
Plugin on SpigotMC
https://www.spigotmc.org/resources/votingplugin.15358/
## License
### Creative Commons Arttribution 3.0 Unported
https://github.com/BenCodez/VotingPlugin/blob/master/VotingPlugin/Resources/LICENSE.txt
### Maven:
<repository>
+1
View File
@@ -6,3 +6,4 @@
/.settings/
/.classpath
/.factorypath
/.apt_generated_tests/
+27 -13
View File
@@ -4,20 +4,21 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.bencodez</groupId>
<artifactId>votingplugin</artifactId>
<version>6.18.2</version>
<version>6.18.4</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
<github.global.server>github</github.global.server>
<project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
<build.number>NOTSET</build.number>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.release>8</maven.compiler.release>
</properties>
<build>
<resources>
<resource>
<directory>Resources</directory>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>plugin.yml</include>
@@ -26,11 +27,12 @@
</includes>
</resource>
<resource>
<directory>Resources</directory>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
<sourceDirectory>src</sourceDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<pluginManagement>
<plugins>
<plugin>
@@ -74,7 +76,7 @@
<configuration>
<addOutputDirectory>false</addOutputDirectory>
<outputDirectory>${project.basedir}/target/delombok</outputDirectory>
<sourceDirectory>${project.basedir}/src</sourceDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
</configuration>
</execution>
</executions>
@@ -209,19 +211,19 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.21.4-R0.1-SNAPSHOT</version>
<version>1.21.5-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
<version>1.18.38</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>1.20-R0.3-SNAPSHOT</version>
<version>1.21-R0.2</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -257,9 +259,21 @@
<dependency>
<groupId>com.bencodez</groupId>
<artifactId>advancedcore</artifactId>
<version>3.7.14-SNAPSHOT</version>
<version>3.7.15</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.12.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.15.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
@@ -360,7 +374,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.3</version>
<version>3.1.4</version>
<configuration>
<skip>true</skip>
</configuration>
@@ -577,7 +591,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.1.3</version>
<version>3.1.4</version>
<configuration>
<skip>true</skip>
</configuration>
@@ -1,118 +0,0 @@
package com.bencodez.votingplugin.bungee;
import java.io.File;
import java.io.IOException;
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 {
private VotingPluginBungee bungee;
@Getter
private Configuration data;
public NonVotedPlayersCache(VotingPluginBungee bungee) {
this.bungee = bungee;
}
public void addPlayer(ProxiedPlayer proxiedPlayer) {
if (!bungee.getVotingPluginProxy().getProxyMySQL().containsKeyQuery(proxiedPlayer.getUniqueId().toString())) {
addPlayer(proxiedPlayer.getUniqueId().toString(), proxiedPlayer.getName());
}
}
public void addPlayer(String uuid, String playerName) {
getData().set("NonVotedPlayers." + playerName + ".UUID", uuid);
getData().set("NonVotedPlayers." + playerName + ".LastTime", System.currentTimeMillis());
save();
}
public void addPlayerCheck(String uuid, String playerName) {
if (!bungee.getVotingPluginProxy().getProxyMySQL().containsKeyQuery(uuid)) {
addPlayer(uuid, playerName);
}
}
public void check() {
for (String player : getData().getSection("NonVotedPlayers").getKeys()) {
long time = getData().getLong("NonVotedPlayers." + player + ".LastTime", 0);
if ((System.currentTimeMillis() - time) > 1000 * 60 * 60 * 24 * 5) {
remove(player);
} else {
String uuid = getData().getString("NonVotedPlayers." + player + ".UUID", "");
if (!uuid.isEmpty()) {
if (bungee.getVotingPluginProxy().getProxyMySQL().containsKeyQuery(uuid)) {
remove(player);
}
} else {
remove(player);
}
}
}
save();
}
public void load() {
if (!bungee.getDataFolder().exists()) {
bungee.getDataFolder().mkdir();
}
File yamlFile = new File(bungee.getDataFolder(), "nonvotedplayerscache.yml");
File file = new File(bungee.getDataFolder(), "nonvotedplayerscache.json");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
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(JsonConfiguration.class)
.load(new File(bungee.getDataFolder(), "nonvotedplayerscache.json"));
} catch (IOException e) {
e.printStackTrace();
}
}
public String playerExists(String playerName) {
if (getData().getSection("NonVotedPlayers").getKeys().contains(playerName)) {
return getData().getString("NonVotedPlayers." + playerName + ".UUID", "");
}
return "";
}
private void remove(String player) {
bungee.debug("Removing nonvotedplayer: " + player);
getData().set("NonVotedPlayers." + player, null);
}
public void save() {
try {
ConfigurationProvider.getProvider(JsonConfiguration.class).save(data,
new File(bungee.getDataFolder(), "nonvotedplayerscache.json"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -1,161 +0,0 @@
package com.bencodez.votingplugin.bungee;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
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 {
private VotingPluginBungee bungee;
@Getter
private Configuration data;
public VoteCache(VotingPluginBungee bungee) {
this.bungee = bungee;
}
public void addTimedVote(int num, VoteTimeQueue voteTimedQueue) {
Configuration section = getData().getSection("TimedVoteCache." + num);
section.set("Name", voteTimedQueue.getName());
section.set("Service", voteTimedQueue.getService());
section.set("Time", voteTimedQueue.getTime());
}
public void addVote(String server, int num, OfflineBungeeVote voteData) {
Configuration section = getData().getSection("VoteCache." + server + "." + num);
section.set("Name", voteData.getPlayerName());
section.set("Service", voteData.getService());
section.set("UUID", voteData.getUuid());
section.set("Time", voteData.getTime());
section.set("Real", voteData.isRealVote());
section.set("Text", voteData.getText());
}
public void addVoteOnline(String player, int num, OfflineBungeeVote voteData) {
Configuration section = getData().getSection("OnlineCache." + player + "." + num);
section.set("Name", voteData.getPlayerName());
section.set("Service", voteData.getService());
section.set("UUID", voteData.getUuid());
section.set("Time", voteData.getTime());
section.set("Real", voteData.isRealVote());
section.set("Text", voteData.getText());
}
public void clearData() {
getData().set("VoteCache", null);
getData().set("OnlineCache", null);
getData().set("TimedVoteCache", null);
save();
}
public Collection<String> getOnlineVotes(String name) {
return getData().getSection("OnlineCache." + name).getKeys();
}
public Configuration getOnlineVotes(String name, String num) {
return getData().getSection("OnlineCache." + name + "." + num);
}
public Collection<String> getPlayers() {
return getData().getSection("OnlineCache").getKeys();
}
public Collection<String> getServers() {
return getData().getSection("VoteCache").getKeys();
}
public Collection<String> getServerVotes(String server) {
return getData().getSection("VoteCache." + server).getKeys();
}
public Configuration getServerVotes(String server, String num) {
return getData().getSection("VoteCache." + server + "." + num);
}
public Collection<String> getTimedVoteCache() {
return getData().getSection("TimedVoteCache").getKeys();
}
public Configuration getTimedVoteCache(String key) {
return getData().getSection("TimedVoteCache." + key);
}
public int getVotePartyCache(String server) {
return getData().getInt("VoteParty.Cache." + server, 0);
}
public int getVotePartyCurrentVotes() {
return getData().getInt("VoteParty.CurrentVotes", 0);
}
public int getVotePartyInreaseVotesRequired() {
return getData().getInt("VoteParty.IncreaseVotes", 0);
}
public void load() {
if (!bungee.getDataFolder().exists()) {
bungee.getDataFolder().mkdir();
}
File yamlFile = new File(bungee.getDataFolder(), "votecache.yml");
File file = new File(bungee.getDataFolder(), "votecache.json");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
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(JsonConfiguration.class)
.load(new File(bungee.getDataFolder(), "votecache.json"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void save() {
try {
ConfigurationProvider.getProvider(JsonConfiguration.class).save(data,
new File(bungee.getDataFolder(), "votecache.json"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void setVotePartyCache(String server, int amount) {
getData().set("VoteParty.Cache." + server, amount);
}
public void setVotePartyCurrentVotes(int amount) {
getData().set("VoteParty.CurrentVotes", amount);
}
public void setVotePartyInreaseVotesRequired(int amount) {
getData().set("VoteParty.IncreaseVotes", amount);
}
}
@@ -33,10 +33,10 @@ import com.bencodez.advancedcore.bungeeapi.sockets.ClientHandler;
import com.bencodez.advancedcore.bungeeapi.sockets.SocketHandler;
import com.bencodez.advancedcore.bungeeapi.sockets.SocketReceiver;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.bungee.BungeeVersion;
import com.bencodez.votingplugin.objects.VoteSite;
import com.bencodez.votingplugin.proxy.BungeeMessageData;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.bencodez.votingplugin.proxy.BungeeVersion;
import com.bencodez.votingplugin.user.VotingPluginUser;
import lombok.Getter;
@@ -324,10 +324,6 @@ public class BungeeHandler implements Listener {
.getVotingPluginUser(UUID.fromString(uuid), player);
user.cache();
if (plugin.getBungeeSettings().isPerServerPoints()) {
user.addPoints(plugin.getConfigFile().getPointsOnVote());
}
boolean setTotals = Boolean.valueOf(args.get(7));
boolean wasOnline = Boolean.valueOf(args.get(4));
@@ -51,6 +51,7 @@ import com.bencodez.votingplugin.commands.gui.admin.AdminVoteHelp;
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.AdminVoteTopPoints;
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;
@@ -295,6 +296,18 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(plugin, new String[] { "TopPoints" },
"VotingPlugin.Commands.AdminVote.TopPoints|" + adminPerm, "Open the top points GUI", false) {
@Override
public void execute(CommandSender sender, String[] args) {
sendMessage(sender, "&cLoading top points, please wait...");
new AdminVoteTopPoints(plugin, sender,
plugin.getVotingPluginUserManager().getVotingPluginUser((Player) sender), 1).open();
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(plugin, new String[] { "PauseRewards" },
"VotingPlugin.Commands.AdminVote.PauseRewards|" + adminPerm, "Pause rewards globally") {
@@ -0,0 +1,171 @@
package com.bencodez.votingplugin.commands.gui.admin;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
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;
import com.bencodez.advancedcore.api.inventory.BInventory.ClickEvent;
import com.bencodez.advancedcore.api.inventory.BInventoryButton;
import com.bencodez.advancedcore.api.item.ItemBuilder;
import com.bencodez.advancedcore.api.rewards.RewardBuilder;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.commands.gui.player.VoteGUI;
import com.bencodez.votingplugin.topvoter.TopVoterPlayer;
import com.bencodez.votingplugin.user.VotingPluginUser;
public class AdminVoteTopPoints extends GUIHandler {
private int page;
private VotingPluginMain plugin;
private VotingPluginUser user;
public AdminVoteTopPoints(VotingPluginMain plugin, CommandSender player, VotingPluginUser user, int page) {
super(plugin, player);
this.plugin = plugin;
this.user = user;
this.page = page;
}
@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) {
try {
Set<Entry<TopVoterPlayer, Integer>> users = null;
LinkedHashMap<TopVoterPlayer, Integer> topPoints1 = new LinkedHashMap<TopVoterPlayer, Integer>();
for (String uuid : plugin.getVotingPluginUserManager().getAllUUIDs()) {
VotingPluginUser vpUser = plugin.getVotingPluginUserManager()
.getVotingPluginUser(UUID.fromString(uuid));
vpUser.dontCache();
int points = vpUser.getPoints();
if (points > 0) {
topPoints1.put(vpUser.getTopVoterPlayer(), points);
}
}
LinkedHashMap<TopVoterPlayer, Integer> topPoints = plugin.getTopVoterHandler().sortByValues(topPoints1,
false);
users = topPoints.entrySet();
ConfigurationSection customization = plugin.getGui().getChestVoteTopCustomization();
boolean customzationEnabled = false;
Queue<Integer> playerSlots = new ConcurrentLinkedQueue<>();
if (customization != null) {
customzationEnabled = customization.getBoolean("Enabled");
List<Integer> customizationPlayerSlots = customization.getIntegerList("PlayerSlots");
playerSlots.addAll(customizationPlayerSlots);
}
BInventory inv = new BInventory("Top Points");
if (!plugin.getConfigFile().isAlwaysCloseInventory()) {
inv.dontClose();
}
int pos = 1;
for (Entry<TopVoterPlayer, Integer> entry : users) {
ItemBuilder playerItem = new ItemBuilder(Material.PAPER);
if (plugin.getGui().isChestVoteTopUseSkull()) {
playerItem = new ItemBuilder(entry.getKey().getPlayerHead());
} else {
playerItem = new ItemBuilder(Material.valueOf(plugin.getGui().getChestVoteTopPlayerItemMaterial()));
}
playerItem.setLore(new ArrayList<>());
BInventoryButton button = new BInventoryButton(playerItem
.setName(plugin.getGui().getChestVoteTopItemName())
.addLoreLine(plugin.getGui().getChestVoteTopItemLore()).addPlaceholder("position", "" + pos)
.addPlaceholder("player", entry.getKey().getPlayerName())
.addPlaceholder("votes", "" + entry.getValue())) {
@Override
public void onClick(ClickEvent clickEvent) {
if (plugin.getGui().isChestVoteTopOpenMainGUIOnClick()) {
TopVoterPlayer user = (TopVoterPlayer) getData("User");
new VoteGUI(plugin, player, user.getUser())
.open(GUIMethod.valueOf(plugin.getGui().getGuiMethodGUI().toUpperCase()));
}
}
}.addData("player", entry.getKey().getPlayerName()).addData("User", entry.getKey());
if (customzationEnabled && !playerSlots.isEmpty()) {
button.setSlot(playerSlots.remove());
}
inv.setCloseInv(plugin.getGui().isChestVoteTopCloseGUIOnClick());
inv.addButton(button);
pos++;
}
if (plugin.getGui().isChestVoteTopBackButton()) {
if (customzationEnabled) {
inv.addButton(plugin.getCommandLoader().getBackButton(user)
.setSlot(customization.getInt("BackButtonSlot", 0)));
} else {
inv.getPageButtons().add(plugin.getCommandLoader().getBackButton(user).setSlot(1));
}
}
String guiPath = "VoteTop.Customization";
for (final String str : plugin.getGui().getChestGUIExtraItems(guiPath)) {
inv.addButton(
new BInventoryButton(new ItemBuilder(plugin.getGui().getChestGUIExtraItemsItem(guiPath, str))) {
@Override
public void onClick(ClickEvent clickEvent) {
plugin.getCommandLoader().processSlotClick(player, user, str);
new RewardBuilder(plugin.getGui().getData(),
"CHEST." + guiPath + ".ExtraItems." + str + ".Rewards").setGiveOffline(false)
.send(clickEvent.getPlayer());
}
});
}
if (customization == null || !customzationEnabled || !customization.getBoolean("RemoveBottomBar")) {
inv.setPages(true);
}
inv.setMaxInvSize(plugin.getGui().getChestVoteTopSize());
inv.openInventory(player);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void open() {
open(GUIMethod.CHEST);
}
}
@@ -3,8 +3,8 @@ package com.bencodez.votingplugin.events;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.objects.VoteSite;
import com.bencodez.votingplugin.proxy.BungeeMessageData;
import com.bencodez.votingplugin.user.VotingPluginUser;
import lombok.Getter;
@@ -3,8 +3,8 @@ package com.bencodez.votingplugin.events;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.objects.VoteSite;
import com.bencodez.votingplugin.proxy.BungeeMessageData;
import com.bencodez.votingplugin.user.VotingPluginUser;
import lombok.Getter;
@@ -8,7 +8,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
import com.bencodez.advancedcore.listeners.AdvancedCoreLoginEvent;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.bencodez.votingplugin.user.VotingPluginUser;
// TODO: Auto-generated Javadoc
@@ -13,10 +13,10 @@ import org.bukkit.event.Listener;
import com.bencodez.advancedcore.api.misc.PlayerManager;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.events.PlayerPostVoteEvent;
import com.bencodez.votingplugin.events.PlayerVoteEvent;
import com.bencodez.votingplugin.objects.VoteSite;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.bencodez.votingplugin.user.VotingPluginUser;
@@ -50,14 +50,25 @@ public class PlayerVoteListener implements Listener {
}
String playerName = event.getPlayer();
plugin.debug("Processing PlayerVoteEvent: " + playerName + "/" + event.getServiceSite());
if (!PlayerManager.getInstance().isValidUser(playerName, plugin.getConfigFile().isAllowUnJoinedCheckServer())) {
if (!plugin.getConfigFile().isAllowUnjoined()) {
plugin.getLogger().warning("Player " + playerName
+ " has not joined before, disregarding vote, set AllowUnjoined to true to prevent this");
if (event.isBungee() && plugin.getBungeeSettings().isRemoveInvalidUsers()) {
plugin.getVotingPluginUserManager().getVotingPluginUser(playerName).remove();
if (!playerName.startsWith(plugin.getOptions().getBedrockPlayerPrefix())
&& !plugin.getOptions().getBedrockPlayerPrefix().isEmpty()) {
if (!event.isBungee() && PlayerManager.getInstance().isValidUser(
plugin.getOptions().getBedrockPlayerPrefix() + playerName,
plugin.getConfigFile().isAllowUnJoinedCheckServer())) {
plugin.debug("Detected a bedrock user without bedrock prefix, adjusting");
playerName = plugin.getOptions().getBedrockPlayerPrefix() + playerName;
}
} else {
if (!plugin.getConfigFile().isAllowUnjoined()) {
plugin.getLogger().warning("Player " + playerName
+ " has not joined before, disregarding vote, set AllowUnjoined to true to prevent this");
if (event.isBungee() && plugin.getBungeeSettings().isRemoveInvalidUsers()) {
plugin.getVotingPluginUserManager().getVotingPluginUser(playerName).remove();
}
return;
}
return;
}
}
@@ -8,8 +8,8 @@ import org.bukkit.event.Listener;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.events.PlayerVoteEvent;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.vexsoftware.votifier.model.Vote;
import com.vexsoftware.votifier.model.VotifierEvent;
@@ -16,7 +16,7 @@ import com.bencodez.advancedcore.api.rewards.RewardBuilder;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.simpleapi.messages.MessageAPI;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.bencodez.votingplugin.user.VotingPluginUser;
import lombok.Getter;
@@ -541,6 +541,14 @@ public class PlaceHolders {
}
}.withDescription("Get number of sites available to be voted on").updateDataKey("LastVotes"));
placeholders.add(new PlaceHolder<VotingPluginUser>("SitesAvailableTotal") {
@Override
public String placeholderRequest(VotingPluginUser user, String identifier) {
return "" + user.getTotalNumberOfSites();
}
}.withDescription("Get total number of sites available to be voted on"));
for (final VoteSite voteSite : plugin.getVoteSitesEnabled()) {
placeholders.add(new CalculatingPlaceholder<VotingPluginUser>("Next_" + voteSite.getKey()) {
@@ -642,7 +650,7 @@ public class PlaceHolders {
}
return "";
}
}.useStartsWith().withDescription("Get user at postion in top voter"));
}.useStartsWith().withDescription("Get username at postion in top voter"));
placeholders.add(new PlaceHolder<VotingPluginUser>("Top_Month_Position") {
@@ -658,7 +666,7 @@ public class PlaceHolders {
}
return "";
}
}.withDescription("Get user top voter position"));
}.withDescription("Get user's current top voter position"));
if (plugin.getGui().isLastMonthGUI()) {
placeholders.add(new PlaceHolder<VotingPluginUser>("Top_LastMonth_Position") {
@@ -730,7 +738,7 @@ public class PlaceHolders {
}
return "";
}
}.useStartsWith().withDescription("Get user at position in top voter"));
}.useStartsWith().withDescription("Get username at position in top voter"));
nonPlayerPlaceholders.add(new NonPlayerPlaceHolder<VotingPluginUser>("Top_MonthVotes_") {
@@ -781,7 +789,7 @@ public class PlaceHolders {
}
return "";
}
}.useStartsWith().withDescription("Get user at postion in top voter"));
}.useStartsWith().withDescription("Get username at postion in top voter"));
nonPlayerPlaceholders.add(new NonPlayerPlaceHolder<VotingPluginUser>("Top_WeekVotes_") {
@@ -832,7 +840,7 @@ public class PlaceHolders {
}
return "";
}
}.useStartsWith().withDescription("Get user at postion in top voter"));
}.useStartsWith().withDescription("Get username at postion in top voter"));
placeholders.add(new PlaceHolder<VotingPluginUser>("VotePartyContributedVotes") {
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy;
import java.util.regex.Pattern;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy;
public enum BungeeMethod {
MYSQL, PLUGINMESSAGING, SOCKETS, REDIS;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy;
public class BungeeVersion {
public static int getPluginMessageVersion() {
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy;
import lombok.Getter;
@@ -1,11 +1,10 @@
package com.bencodez.votingplugin.bungee.proxy;
package com.bencodez.votingplugin.proxy;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
@@ -42,14 +41,10 @@ import com.bencodez.advancedcore.bungeeapi.sockets.SocketReceiver;
import com.bencodez.advancedcore.bungeeapi.time.BungeeTimeChecker;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.simpleapi.json.JsonParser;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.bungee.BungeeVersion;
import com.bencodez.votingplugin.bungee.OfflineBungeeVote;
import com.bencodez.votingplugin.bungee.global.multiproxy.MultiProxyHandler;
import com.bencodez.votingplugin.bungee.global.multiproxy.MultiProxyMethod;
import com.bencodez.votingplugin.bungee.global.multiproxy.MultiProxyServerSocketConfiguration;
import com.bencodez.votingplugin.bungee.global.multiproxy.MultiProxyServerSocketConfigurationBungee;
import com.bencodez.votingplugin.proxy.global.multiproxy.MultiProxyHandler;
import com.bencodez.votingplugin.proxy.global.multiproxy.MultiProxyMethod;
import com.bencodez.votingplugin.proxy.global.multiproxy.MultiProxyServerSocketConfiguration;
import com.bencodez.votingplugin.proxy.global.multiproxy.MultiProxyServerSocketConfigurationBungee;
import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -59,6 +54,7 @@ import lombok.Setter;
public abstract class VotingPluginProxy {
@Getter
@Setter
private int votePartyVotes = 0;
@Getter
@@ -72,9 +68,11 @@ public abstract class VotingPluginProxy {
private EncryptionHandler encryptionHandler;
@Getter
@Setter
private ConcurrentHashMap<String, ArrayList<OfflineBungeeVote>> cachedOnlineVotes = new ConcurrentHashMap<>();
@Getter
@Setter
private ConcurrentHashMap<String, ArrayList<OfflineBungeeVote>> cachedVotes = new ConcurrentHashMap<>();
private HashMap<String, ClientHandler> clientHandles;
@@ -98,6 +96,7 @@ public abstract class VotingPluginProxy {
private boolean enabled;
@Getter
@Setter
private MultiProxyHandler multiProxyHandler;
@Getter
@@ -230,8 +229,6 @@ public abstract class VotingPluginProxy {
}
};
loadMultiProxySupport();
}
public void addCurrentVotePartyVotes(int amount) {
@@ -326,7 +323,8 @@ public abstract class VotingPluginProxy {
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedOnlineVotes.entrySet()) {
ArrayList<OfflineBungeeVote> votes = entry.getValue();
for (int i = votes.size() - 1; i >= 0; i--) {
if (cTime - votes.get(i).getTime() > getConfig().getVoteCacheTime() * 24 * 60 * 60 * 1000) {
if (votes.get(i).getTime() + (getConfig().getVoteCacheTime() * 24 * 60 * 60 * 1000) < cTime) {
debug("Removing vote from cache: " + votes.get(i).toString());
votes.remove(i);
}
}
@@ -335,7 +333,8 @@ public abstract class VotingPluginProxy {
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedVotes.entrySet()) {
ArrayList<OfflineBungeeVote> votes = entry.getValue();
for (int i = votes.size() - 1; i >= 0; i--) {
if (cTime - votes.get(i).getTime() > getConfig().getVoteCacheTime() * 24 * 60 * 60 * 1000) {
if (votes.get(i).getTime() + (getConfig().getVoteCacheTime() * 24 * 60 * 60 * 1000) < cTime) {
debug("Removing vote from cache: " + votes.get(i).toString());
votes.remove(i);
}
}
@@ -360,15 +359,16 @@ public abstract class VotingPluginProxy {
runConsoleCommand(command);
}
/*
* if (method.equals(BungeeMethod.PLUGINMESSAGING)) { if
* (getConfig().getVotePartySendToAllServers()) { for (Entry<String, ServerInfo>
* entry : getProxy().getServers().entrySet()) { //sendVoteParty(entry.getKey(),
* entry.getValue()); } } else { for (String server :
* getConfig().getVotePartyServersToSend()) { ServerInfo serverInfo =
* getProxy().getServerInfo(server); if (serverInfo != null) {
* //sendVoteParty(server, serverInfo); } } } }
*/
if (getConfig().getVotePartySendToAllServers()) {
for (String server : getAllAvailableServers()) {
sendVoteParty(server);
}
} else {
for (String server : getConfig().getVotePartyServersToSend()) {
sendVoteParty(server);
}
}
}
saveVoteCacheFile();
}
@@ -483,7 +483,7 @@ public abstract class VotingPluginProxy {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
if (getConfig().getPluginMessageEncryption()) {
encryptionHandler = new EncryptionHandler(new File(getDataFolderPlugin(), "secretkey.key"));
}
}
} else if (method.equals(BungeeMethod.SOCKETS)) {
encryptionHandler = new EncryptionHandler(new File(getDataFolderPlugin(), "secretkey.key"));
@@ -583,8 +583,9 @@ public abstract class VotingPluginProxy {
});
}
currentVotePartyVotesRequired = getConfig().getVotePartyVotesRequired()
+ getVoteCacheVotePartyIncreaseVotesRequired();
currentVotePartyVotesRequired =
getConfig().getVotePartyVotesRequired() + getVoteCacheVotePartyIncreaseVotesRequired();
votePartyVotes = getVoteCacheCurrentVotePartyVotes();
loadMultiProxySupport();
@@ -761,66 +762,73 @@ public abstract class VotingPluginProxy {
enabled = false;
}
public void onPluginMessageReceived(DataInputStream in) throws IOException {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outstream);
String subchannel = "";
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
subchannel = encryptionHandler.decrypt(in.readUTF());
} else {
subchannel = in.readUTF();
}
int size = in.readInt();
public void onPluginMessageReceived(DataInputStream in) {
runAsync(new Runnable() {
debug("Received plugin message, processing...");
try {
String data = "";
if (size > 0) {
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
data = encryptionHandler.decrypt(in.readUTF());
} else {
data = in.readUTF();
}
}
String[] list = data.split("/a/");
// check for status message returns
if (subchannel.equalsIgnoreCase("statusokay")) {
String server = list[0];
log("Status okay for " + server);
return;
} else if (subchannel.equalsIgnoreCase("TimeChangeFinished")) {
// not used currently
} else if (subchannel.equalsIgnoreCase("login")) {
String player = list[0];
String uuid = list[1];
String server = list[2];
debug("Login: " + player + "/" + uuid + " " + server);
login(player, uuid, server);
return;
} else if (subchannel.equalsIgnoreCase("VoteUpdate")) {
out.writeUTF(subchannel);
out.writeInt(size);
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
out.writeUTF(encryptionHandler.encrypt(data));
} else {
out.writeUTF(data);
}
for (String send : getAllAvailableServers()) {
if (isSomeoneOnlineServer(send)) {
sendPluginMessageData(send, getConfig().getPluginMessageChannel().toLowerCase(),
outstream.toByteArray(), false);
@Override
public void run() {
try {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outstream);
String subchannel = "";
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
subchannel = encryptionHandler.decrypt(in.readUTF());
} else {
subchannel = in.readUTF();
}
int size = in.readInt();
debug("Received plugin message, processing...");
String data = "";
if (size > 0) {
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
data = encryptionHandler.decrypt(in.readUTF());
} else {
data = in.readUTF();
}
}
String[] list = data.split("/a/");
// check for status message returns
if (subchannel.equalsIgnoreCase("statusokay")) {
String server = list[0];
log("Status okay for " + server);
return;
} else if (subchannel.equalsIgnoreCase("TimeChangeFinished")) {
// not used currently
} else if (subchannel.equalsIgnoreCase("login")) {
String player = list[0];
String uuid = list[1];
String server = list[2];
debug("Login: " + player + "/" + uuid + " " + server);
login(player, uuid, server);
return;
} else if (subchannel.equalsIgnoreCase("VoteUpdate")) {
out.writeUTF(subchannel);
out.writeInt(size);
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
out.writeUTF(encryptionHandler.encrypt(data));
} else {
out.writeUTF(data);
}
for (String send : getAllAvailableServers()) {
if (isSomeoneOnlineServer(send)) {
sendPluginMessageData(send, getConfig().getPluginMessageChannel().toLowerCase(),
outstream.toByteArray(), false);
}
}
} else {
debug("Ignoring plugin message: " + subchannel);
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
debug("Ignoring plugin message: " + subchannel);
}
} catch (Exception e) {
e.printStackTrace();
}
});
}
private UUID parseUUIDFromString(String uuidAsString) {
@@ -1039,6 +1047,14 @@ public abstract class VotingPluginProxy {
if (uuid == null || uuid.isEmpty()) {
uuid = getUUID(player);
if (uuid.isEmpty() && !player.startsWith(getConfig().getBedrockPlayerPrefix())) {
String uuid1 = getUUID(getConfig().getBedrockPlayerPrefix() + player);
if (!uuid1.isEmpty()) {
debug("Detected bedrock player without prefix, adjusting...");
player = getConfig().getBedrockPlayerPrefix() + player;
uuid = uuid1;
}
}
}
if (uuid.isEmpty()) {
@@ -1,7 +1,6 @@
package com.bencodez.votingplugin.bungee.proxy;
package com.bencodez.votingplugin.proxy;
import com.bencodez.advancedcore.api.time.TimeType;
import com.bencodez.votingplugin.bungee.BungeeMethod;
public class VotingPluginProxyCommand {
private VotingPluginProxy plugin;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.proxy;
package com.bencodez.votingplugin.proxy;
import java.util.Collection;
import java.util.List;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy.bungee;
import java.io.BufferedReader;
import java.io.BufferedWriter;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy.bungee;
import java.io.File;
import java.io.IOException;
@@ -9,7 +9,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bencodez.votingplugin.bungee.proxy.VotingPluginProxyConfig;
import com.bencodez.votingplugin.proxy.VotingPluginProxyConfig;
import lombok.Getter;
import net.md_5.bungee.config.Configuration;
@@ -0,0 +1,73 @@
package com.bencodez.votingplugin.proxy.bungee;
import java.io.File;
import com.bencodez.simpleapi.file.BungeeJsonFile;
import com.velocitypowered.api.proxy.Player;
import lombok.Getter;
import net.md_5.bungee.config.Configuration;
public class NonVotedPlayersCache extends BungeeJsonFile {
private VotingPluginBungee plugin;
@Getter
private Configuration data;
public NonVotedPlayersCache(VotingPluginBungee plugin) {
super(new File(plugin.getDataFolder(), "nonvotedplayerscache.json"));
this.plugin = plugin;
}
public void addPlayer(Player player) {
if (!plugin.getVotingPluginProxy().getProxyMySQL().containsKeyQuery(player.getUniqueId().toString())) {
addPlayer(player.getUniqueId().toString(), player.getUsername());
}
}
public void addPlayer(String uuid, String playerName) {
setString("NonVotedPlayers." + playerName + ".UUID", uuid);
setLong("NonVotedPlayers." + playerName + ".LastTime", System.currentTimeMillis());
save();
}
public void addPlayerCheck(String uuid, String playerName) {
if (!plugin.getVotingPluginProxy().getProxyMySQL().containsKeyQuery(uuid)) {
addPlayer(uuid, playerName);
}
}
public void check() {
for (String player : getKeys("NonVotedPlayers")) {
long time = getLong("NonVotedPlayers." + player + ".LastTime", 0);
if ((System.currentTimeMillis() - time) > 1000 * 60 * 60 * 24 * 5) {
removePlayer(player);
} else {
String uuid = getString("NonVotedPlayers." + player + ".UUID", "");
if (!uuid.isEmpty()) {
if (plugin.getVotingPluginProxy().getProxyMySQL().containsKeyQuery(uuid)) {
removePlayer(player);
}
} else {
removePlayer(player);
}
}
}
save();
}
public String playerExists(String playerName) {
String uuid = getString("NonVotedPlayers." + playerName + ".UUID", "");
if (!uuid.isEmpty()) {
return uuid;
}
return "";
}
private void removePlayer(String player) {
plugin.debug("Removing nonvotedplayer: " + player);
remove("NonVotedPlayers." + player);
save();
}
}
@@ -0,0 +1,127 @@
package com.bencodez.votingplugin.proxy.bungee;
import java.io.File;
import java.util.Collection;
import com.bencodez.simpleapi.file.BungeeJsonFile;
import com.bencodez.votingplugin.proxy.OfflineBungeeVote;
import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import com.google.gson.JsonElement;
public class VoteCache extends BungeeJsonFile {
private VotingPluginBungee bungee;
public VoteCache(VotingPluginBungee bungee) {
super(new File(bungee.getDataFolder(), "votecache.json"));
this.bungee = bungee;
initialize();
}
private void initialize() {
if (!bungee.getDataFolder().exists()) {
bungee.getDataFolder().mkdir();
}
// Reload the JSON file to ensure latest data
reload();
}
public void addTimedVote(int num, VoteTimeQueue voteTimedQueue) {
String path = "TimedVoteCache." + num;
setString(path + ".Name", voteTimedQueue.getName());
setString(path + ".Service", voteTimedQueue.getService());
setLong(path + ".Time", voteTimedQueue.getTime());
}
public void addVote(String server, int num, OfflineBungeeVote voteData) {
String path = "VoteCache." + server + "." + num;
setString(path + ".Name", voteData.getPlayerName());
setString(path + ".Service", voteData.getService());
setString(path + ".UUID", voteData.getUuid());
setLong(path + ".Time", voteData.getTime());
setBoolean(path + ".Real", voteData.isRealVote());
setString(path + ".Text", voteData.getText());
}
public void addVoteOnline(String player, int num, OfflineBungeeVote voteData) {
String path = "OnlineCache." + player + "." + num;
setString(path + ".Name", voteData.getPlayerName());
setString(path + ".Service", voteData.getService());
setString(path + ".UUID", voteData.getUuid());
setLong(path + ".Time", voteData.getTime());
setBoolean(path + ".Real", voteData.isRealVote());
setString(path + ".Text", voteData.getText());
}
public void clearData() {
setString("VoteCache", null);
setString("OnlineCache", null);
setString("TimedVoteCache", null);
save();
}
public Collection<String> getOnlineVotes(String name) {
return getKeys("OnlineCache." + name);
}
public JsonElement getOnlineVotes(String name, String num) {
return getNode("OnlineCache." + name + "." + num);
}
public Collection<String> getPlayers() {
return getKeys("OnlineCache");
}
public Collection<String> getServers() {
return getKeys("VoteCache");
}
public Collection<String> getServerVotes(String server) {
return getKeys("VoteCache." + server);
}
public JsonElement getServerVotes(String server, String num) {
return getNode("VoteCache." + server + "." + num);
}
public Collection<String> getTimedVoteCache() {
return getKeys("TimedVoteCache");
}
public JsonElement getTimedVoteCache(String key) {
return getNode("TimedVoteCache." + key);
}
public int getVotePartyCache(String server) {
return getInt("VoteParty.Cache." + server, 0);
}
public int getVotePartyCurrentVotes() {
return getInt("VoteParty.CurrentVotes", 0);
}
public int getVotePartyInreaseVotesRequired() {
return getInt("VoteParty.IncreaseVotes", 0);
}
public void setVotePartyCache(String server, int amount) {
setInt("VoteParty.Cache." + server, amount);
}
public void setVotePartyCurrentVotes(int amount) {
setInt("VoteParty.CurrentVotes", amount);
}
public void setVotePartyInreaseVotesRequired(int amount) {
setInt("VoteParty.IncreaseVotes", amount);
}
@Override
public void save() {
super.save();
}
@Override
public void reload() {
super.reload();
}
}
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy.bungee;
import com.vexsoftware.votifier.bungee.events.VotifierEvent;
import com.vexsoftware.votifier.model.Vote;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy.bungee;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
@@ -25,10 +25,15 @@ import com.bencodez.advancedcore.api.user.userstorage.mysql.api.config.MysqlConf
import com.bencodez.advancedcore.bungeeapi.globaldata.GlobalDataHandlerProxy;
import com.bencodez.advancedcore.bungeeapi.globaldata.GlobalMySQL;
import com.bencodez.advancedcore.bungeeapi.mysql.BungeeMySQL;
import com.bencodez.votingplugin.bungee.proxy.VotingPluginProxy;
import com.bencodez.votingplugin.bungee.proxy.VotingPluginProxyConfig;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.bencodez.votingplugin.proxy.BungeeVersion;
import com.bencodez.votingplugin.proxy.OfflineBungeeVote;
import com.bencodez.votingplugin.proxy.VotingPluginProxy;
import com.bencodez.votingplugin.proxy.VotingPluginProxyConfig;
import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import lombok.Getter;
import net.md_5.bungee.api.ChatColor;
@@ -490,22 +495,22 @@ public class VotingPluginBungee extends Plugin implements Listener {
@Override
public long getVoteCacheLastUpdated() {
return voteCacheFile.getData().getLong("Time.LastUpdated");
return voteCacheFile.getLong("Time.LastUpdated", 0L);
}
@Override
public int getVoteCachePrevDay() {
return voteCacheFile.getData().getInt("Time.Day");
return voteCacheFile.getInt("Time.Day", 0);
}
@Override
public String getVoteCachePrevMonth() {
return voteCacheFile.getData().getString("Time.Month");
return voteCacheFile.getString("Time.Month", "");
}
@Override
public int getVoteCachePrevWeek() {
return voteCacheFile.getData().getInt("Time.Week");
return voteCacheFile.getInt("Time.Week", 0);
}
@Override
@@ -531,7 +536,7 @@ public class VotingPluginBungee extends Plugin implements Listener {
@Override
public boolean isVoteCacheIgnoreTime() {
return voteCacheFile.getData().getBoolean("Time.IgnoreTime");
return voteCacheFile.getBoolean("Time.IgnoreTime", false);
}
@Override
@@ -561,36 +566,36 @@ public class VotingPluginBungee extends Plugin implements Listener {
@Override
public void sendPluginMessageData(String server, String channel, byte[] data, boolean queue) {
getProxy().getServers().get(server).sendData(channel, data, queue);
getProxy().getServerInfo(server).sendData(channel, data, queue);
}
@Override
public void setVoteCacheLastUpdated() {
voteCacheFile.getData().set("Time.LastUpdated", System.currentTimeMillis());
voteCacheFile.setLong("Time.LastUpdated", System.currentTimeMillis());
voteCacheFile.save();
}
@Override
public void setVoteCachePrevDay(int day) {
voteCacheFile.getData().set("Time.Day", day);
voteCacheFile.setInt("Time.Day", day);
voteCacheFile.save();
}
@Override
public void setVoteCachePrevMonth(String text) {
voteCacheFile.getData().set("Time.Month", text);
voteCacheFile.setString("Time.Month", text);
voteCacheFile.save();
}
@Override
public void setVoteCachePrevWeek(int week) {
voteCacheFile.getData().set("Time.Week", week);
voteCacheFile.setInt("Time.Week", week);
voteCacheFile.save();
}
@Override
public void setVoteCacheVoteCacheIgnoreTime(boolean ignore) {
voteCacheFile.getData().set("Time.IgnoreTime", ignore);
voteCacheFile.setBoolean("Time.IgnoreTime", ignore);
voteCacheFile.save();
}
@@ -609,7 +614,7 @@ public class VotingPluginBungee extends Plugin implements Listener {
public void warn(String message) {
getLogger().warning(message);
}
@Override
public void reloadCore(boolean mysql) {
reloadPlugin(mysql);
@@ -648,18 +653,25 @@ public class VotingPluginBungee extends Plugin implements Listener {
if (mysqlLoaded) {
voteCacheFile = new VoteCache(this);
voteCacheFile.load();
// voteCacheFile.load();
nonVotedPlayersCache = new NonVotedPlayersCache(this);
nonVotedPlayersCache.load();
// nonVotedPlayersCache.load();
getVotingPluginProxy().load();
try {
for (String key : voteCacheFile.getTimedVoteCache()) {
Configuration data = voteCacheFile.getTimedVoteCache(key);
getVotingPluginProxy().getTimeChangeQueue().add(
new VoteTimeQueue(data.getString("Name"), data.getString("Service"), data.getLong("Time")));
JsonElement dataElement = voteCacheFile.getTimedVoteCache(key);
if (dataElement != null && dataElement.isJsonObject()) {
JsonObject data = dataElement.getAsJsonObject();
String name = data.has("Name") ? data.get("Name").getAsString() : "";
String service = data.has("Service") ? data.get("Service").getAsString() : "";
long time = data.has("Time") ? data.get("Time").getAsLong() : 0L;
getVotingPluginProxy().getTimeChangeQueue().add(new VoteTimeQueue(name, service, time));
}
}
getVotingPluginProxy().processQueue();
@@ -669,14 +681,24 @@ public class VotingPluginBungee extends Plugin implements Listener {
try {
for (String server : voteCacheFile.getServers()) {
ArrayList<OfflineBungeeVote> vote = new ArrayList<>();
ArrayList<OfflineBungeeVote> votes = new ArrayList<>();
for (String num : voteCacheFile.getServerVotes(server)) {
Configuration data = voteCacheFile.getServerVotes(server, num);
vote.add(new OfflineBungeeVote(data.getString("Name"), data.getString("UUID"),
data.getString("Service"), data.getLong("Time"), data.getBoolean("Real"),
data.getString("Text")));
JsonElement dataElement = voteCacheFile.getServerVotes(server, num);
if (dataElement != null && dataElement.isJsonObject()) {
JsonObject data = dataElement.getAsJsonObject();
String name = data.has("Name") ? data.get("Name").getAsString() : "";
String uuid = data.has("UUID") ? data.get("UUID").getAsString() : "";
String service = data.has("Service") ? data.get("Service").getAsString() : "";
long time = data.has("Time") ? data.get("Time").getAsLong() : 0L;
boolean real = data.has("Real") && data.get("Real").getAsBoolean();
String text = data.has("Text") ? data.get("Text").getAsString() : "";
votes.add(new OfflineBungeeVote(name, uuid, service, time, real, text));
}
}
getVotingPluginProxy().getCachedVotes().put(server, vote);
getVotingPluginProxy().getCachedVotes().put(server, votes);
}
} catch (Exception e) {
e.printStackTrace();
@@ -684,14 +706,25 @@ public class VotingPluginBungee extends Plugin implements Listener {
try {
for (String player : voteCacheFile.getPlayers()) {
ArrayList<OfflineBungeeVote> vote = new ArrayList<>();
ArrayList<OfflineBungeeVote> votes = new ArrayList<>();
for (String num : voteCacheFile.getOnlineVotes(player)) {
Configuration data = voteCacheFile.getOnlineVotes(player, num);
vote.add(new OfflineBungeeVote(data.getString("Name"), data.getString("UUID"),
data.getString("Service"), data.getLong("Time"), data.getBoolean("Real"),
data.getString("Text")));
JsonElement dataElement = voteCacheFile.getOnlineVotes(player, num);
if (dataElement != null && dataElement.isJsonObject()) {
JsonObject data = dataElement.getAsJsonObject();
String name = data.has("Name") ? data.get("Name").getAsString() : "";
String uuid = data.has("UUID") ? data.get("UUID").getAsString() : "";
String service = data.has("Service") ? data.get("Service").getAsString() : "";
long time = data.has("Time") ? data.get("Time").getAsLong() : 0L;
boolean real = data.has("Real") && data.get("Real").getAsBoolean();
String text = data.has("Text") ? data.get("Text").getAsString() : "";
votes.add(new OfflineBungeeVote(name, uuid, service, time, real, text));
}
}
getVotingPluginProxy().getCachedOnlineVotes().put(player, vote);
getLogger().info("VoteCache: " + player);
getVotingPluginProxy().getCachedOnlineVotes().put(player, votes);
}
} catch (Exception e) {
e.printStackTrace();
@@ -709,8 +742,10 @@ public class VotingPluginBungee extends Plugin implements Listener {
}
for (String player : getVotingPluginProxy().getCachedOnlineVotes().keySet()) {
getVotingPluginProxy().checkOnlineVotes(getProxy().getPlayer(UUID.fromString(player)).getName(),
player, null);
ProxiedPlayer p = getProxy().getPlayer(UUID.fromString(player));
if (p != null) {
getVotingPluginProxy().checkOnlineVotes(p.getName(), player, null);
}
}
}
}, 120l, 60l, TimeUnit.SECONDS);
@@ -1,6 +1,6 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy.bungee;
import com.bencodez.votingplugin.bungee.proxy.VotingPluginProxyCommand;
import com.bencodez.votingplugin.proxy.VotingPluginProxyCommand;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
@@ -22,7 +22,7 @@ public class VotingPluginBungeeCommand extends Command {
sender.sendMessage(new TextComponent(result.replace("&", "§")));
}
} else {
sender.sendMessage(new TextComponent("&cYou do not have permission to do this!"));
sender.sendMessage(new TextComponent("&cYou do not have permission to do this!".replace("&", "§")));
}
}
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.global.multiproxy;
import java.io.File;
import java.util.Collection;
@@ -11,7 +11,7 @@ import com.bencodez.advancedcore.bungeeapi.redis.RedisListener;
import com.bencodez.advancedcore.bungeeapi.sockets.ClientHandler;
import com.bencodez.advancedcore.bungeeapi.sockets.SocketHandler;
import com.bencodez.advancedcore.bungeeapi.sockets.SocketReceiver;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.proxy.BungeeMessageData;
import lombok.Getter;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.global.multiproxy;
public enum MultiProxyMethod {
SOCKETS, REDIS;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.global.multiproxy;
public interface MultiProxyServerSocketConfiguration {
String getHost();
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.global.multiproxy;
import java.util.Map;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.global.multiproxy;
import ninja.leaping.configurate.ConfigurationNode;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.velocity;
package com.bencodez.votingplugin.proxy.velocity;
import java.io.File;
import java.util.ArrayList;
@@ -9,7 +9,7 @@ import java.util.Map;
import org.checkerframework.checker.nullness.qual.NonNull;
import com.bencodez.simpleapi.file.velocity.VelocityYMLFile;
import com.bencodez.votingplugin.bungee.proxy.VotingPluginProxyConfig;
import com.bencodez.votingplugin.proxy.VotingPluginProxyConfig;
import ninja.leaping.configurate.ConfigurationNode;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.velocity;
package com.bencodez.votingplugin.proxy.velocity;
import java.io.File;
@@ -1,10 +1,10 @@
package com.bencodez.votingplugin.bungee.velocity;
package com.bencodez.votingplugin.proxy.velocity;
import java.io.File;
import java.util.Collection;
import com.bencodez.simpleapi.file.velocity.VelocityJSONFile;
import com.bencodez.votingplugin.bungee.OfflineBungeeVote;
import com.bencodez.votingplugin.proxy.OfflineBungeeVote;
import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import ninja.leaping.configurate.ConfigurationNode;
Loaded 100 of 135 files, more files were not shown because too many files have changed in this diff. Show more