Compare commits

...
89 Commits
Author SHA1 Message Date
BenCodez caa7058363 Update version number to 6.18.7 2025-06-30 18:41:45 -06:00
BenCodez b67f6a509c Fix waituntilvotedelay on proxy with better handling 2025-06-30 16:53:00 -06:00
BenCodez 0edc09dc80 Update to 1.21.7 2025-06-30 16:14:27 -06:00
BenCodez 19e597e094 Remove version check on startup 2025-06-30 15:53:54 -06:00
BenCodez bfc838bfaa Add wait until vote delay feature on proxy
- Implemented vote delay checks in `VotingPluginProxy`.
- Added methods to handle vote delay logic in `Config` classes.
- Updated `VotingPluginProxyConfig` with new vote delay methods.
- Extended `bungeeconfig.yml` with `WaitUntilVoteDelay` settings.
- Improved vote handling to skip votes if delay conditions are unmet.
- Enhanced logging for skipped votes due to delay.
2025-06-29 15:57:32 -06:00
BenCodez 9cda17e89e Update version number to 6.18.7-SNAPSHOT 2025-06-22 15:50:59 -06:00
BenCodez 54a573a445 Update version number to 6.18.6 2025-06-22 15:32:45 -06:00
BenCodez 5432b2a0d3 Update to 1.21.6 2025-06-22 13:03:30 -06:00
Ben 13d3a614ed Merge pull request #1441 from Kawi16/master
Update AdvancedCore version
2025-06-20 15:49:55 -06:00
Alessandro f9641e158d Update plugin.yml to include NLogin 2025-06-20 06:24:14 +00:00
Alessandro a0c1f64aac Update config to include NLogin 2025-06-20 06:23:44 +00:00
BenCodez 1f88cb0261 Improve vote site generation by replacing spaces with underscores. 2025-06-19 16:03:05 -06:00
BenCodez 47a42d2bc8 Add configuration option to enable /av javascript command
- Introduced `EnableJavascriptCommand` in `Config.yml`
- Default value for `EnableJavascriptCommand` set to `false`
2025-06-03 20:04:12 -06:00
BenCodez ac41787c1e Simplify internal api for mysql on proxy 2025-05-26 20:05:35 -06:00
BenCodez ed4e3968da Add requiresPlayerOnline check to improve vote caching logic.
- Added `requiresPlayerOnline` method to `BungeeMethod` enum.
- Updated vote caching logic to use `requiresPlayerOnline` check.
- Ensured caching occurs only when required by the method.
- Improved clarity of conditions in `VotingPluginProxy`.
- Enhanced flexibility for different `BungeeMethod` implementations.
2025-05-26 18:31:54 -06:00
BenCodez 09da81cc4e Add MQTT proxy method, internal rewrites to cross server communication 2025-05-25 17:06:23 -06:00
BenCodez fd35c43c16 Update version to 6.18.6-SNAPSHOT 2025-05-23 20:54:02 -06:00
BenCodez 8060f594c3 Add filters to exclude specific META-INF files in Maven shade plugin 2025-05-23 20:37:19 -06:00
BenCodez 39aa7062a5 Update version number to 6.18.5 2025-05-23 20:18:56 -06:00
BenCodez 7ff7fbb7cb Update to AdvancedCore changes 2025-05-17 21:29:49 -06:00
BenCodez 231817314b Modify handling of nonvoted players to not cache in offline mode
- change package name of multi-proxy
2025-05-13 17:59:07 -06:00
BenCodez a20f10d978 Use mysql/sqlite from simpleapi 2025-05-13 12:58:55 -06:00
BenCodez 997beaae28 Modify handling of offline reward checking in offline mode 2025-05-11 21:07:55 -06:00
BenCodez 9acc5861b7 Modified handling of placeholder cache for offline mode 2025-05-02 11:30:17 -06:00
BenCodez f299847d46 Modify handling of caching for offline mode 2025-05-02 08:23:45 -06:00
BenCodez 87ff48366c Modofy handling of getting VotingPluginUser to account for offline mode 2025-04-26 12:26:14 -06:00
BenCodez 3dde76dcde Fix voteparty velocity broadcast 2025-04-22 14:08:42 -06:00
BenCodez 237713a799 Fix velocity voteparty broadcast not being colorized 2025-04-22 13:35:16 -06:00
BenCodez 23141d4ec1 Fix handling of allowunjoined on backend servers 2025-04-21 09:48:48 -06:00
Ben 2cfbaf4de8 Merge pull request #1434 from BenCodez/dependabot/maven/VotingPlugin/org.junit.jupiter-junit-jupiter-engine-5.12.2
Bump org.junit.jupiter:junit-jupiter-engine from 5.12.1 to 5.12.2 in /VotingPlugin
2025-04-14 12:30:47 -06:00
dependabot[bot] c31b83fcd3 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.1 to 5.12.2.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 06:07:25 +00:00
BenCodez 4cfd887c33 Update version number to 6.18.5-SNAPSHOT 2025-04-13 15:52:53 -06:00
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
136 changed files with 2809 additions and 1008 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/
+35 -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.7</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>
@@ -93,6 +95,14 @@
<include>**</include>
</includes>
</filter>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<relocations>
<relocation>
@@ -209,19 +219,19 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.21.4-R0.1-SNAPSHOT</version>
<version>1.21.7-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 +267,21 @@
<dependency>
<groupId>com.bencodez</groupId>
<artifactId>advancedcore</artifactId>
<version>3.7.14-SNAPSHOT</version>
<version>3.7.18-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.12.2</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 +382,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 +599,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);
}
}
@@ -13,30 +13,34 @@ import java.util.concurrent.TimeUnit;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.eclipse.paho.client.mqttv3.MqttException;
import com.bencodez.advancedcore.api.misc.MiscUtils;
import com.bencodez.advancedcore.api.misc.encryption.EncryptionHandler;
import com.bencodez.advancedcore.api.rewards.RewardBuilder;
import com.bencodez.advancedcore.api.time.TimeType;
import com.bencodez.advancedcore.api.user.UserStorage;
import com.bencodez.advancedcore.api.user.usercache.value.DataValue;
import com.bencodez.advancedcore.api.user.usercache.value.DataValueBoolean;
import com.bencodez.advancedcore.api.user.userstorage.mysql.api.config.MysqlConfigSpigot;
import com.bencodez.advancedcore.bungeeapi.GlobalMessage.GlobalMessageHandler;
import com.bencodez.advancedcore.bungeeapi.GlobalMessage.GlobalMessageListener;
import com.bencodez.advancedcore.bungeeapi.globaldata.GlobalDataHandler;
import com.bencodez.advancedcore.bungeeapi.globaldata.GlobalMySQL;
import com.bencodez.advancedcore.bungeeapi.pluginmessage.PluginMessageHandler;
import com.bencodez.advancedcore.bungeeapi.redis.RedisHandler;
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.simpleapi.array.ArrayUtils;
import com.bencodez.votingplugin.bungee.BungeeMessageData;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.bungee.BungeeVersion;
import com.bencodez.simpleapi.encryption.EncryptionHandler;
import com.bencodez.simpleapi.servercomm.global.GlobalMessageHandler;
import com.bencodez.simpleapi.servercomm.global.GlobalMessageListener;
import com.bencodez.simpleapi.servercomm.mqtt.MqttHandler;
import com.bencodez.simpleapi.servercomm.mqtt.MqttServerComm;
import com.bencodez.simpleapi.servercomm.mqtt.MqttHandler.MessageHandler;
import com.bencodez.simpleapi.servercomm.pluginmessage.PluginMessageHandler;
import com.bencodez.simpleapi.servercomm.redis.RedisHandler;
import com.bencodez.simpleapi.servercomm.redis.RedisListener;
import com.bencodez.simpleapi.servercomm.sockets.ClientHandler;
import com.bencodez.simpleapi.servercomm.sockets.SocketHandler;
import com.bencodez.simpleapi.servercomm.sockets.SocketReceiver;
import com.bencodez.simpleapi.sql.data.DataValue;
import com.bencodez.simpleapi.sql.data.DataValueBoolean;
import com.bencodez.simpleapi.sql.mysql.config.MysqlConfigSpigot;
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;
@@ -202,6 +206,17 @@ public class BungeeHandler implements Listener {
list.addAll(ArrayUtils.convert(messageData));
redisHandler.sendMessage(plugin.getBungeeSettings().getRedisPrefix() + "VotingPlugin",
ArrayUtils.convert(list));
} else if (method.equals(BungeeMethod.MQTT)) {
ArrayList<String> list = new ArrayList<>();
list.add(subChannel);
list.addAll(ArrayUtils.convert(messageData));
try {
mqttHandler.publish(plugin.getBungeeSettings().getMqttPrefix() + "votingplugin/servers/proxy",
String.join(":", list));
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
@@ -324,10 +339,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));
@@ -547,7 +558,8 @@ public class BungeeHandler implements Listener {
plugin.registerBungeeChannels(plugin.getBungeeSettings().getPluginMessagingChannel());
if (plugin.getBungeeSettings().isPluginMessageEncryption()) {
encryptionHandler = new EncryptionHandler(new File(plugin.getDataFolder(), "secretkey.key"));
encryptionHandler = new EncryptionHandler(plugin.getName(),
new File(plugin.getDataFolder(), "secretkey.key"));
plugin.getPluginMessaging().setEncryptionHandler(encryptionHandler);
}
@@ -556,79 +568,17 @@ public class BungeeHandler implements Listener {
plugin.getPluginMessaging().setDebug(plugin.getBungeeSettings().isBungeeDebug());
plugin.getPluginMessaging().add(new PluginMessageHandler("Vote") {
plugin.getPluginMessaging().add(new PluginMessageHandler() {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("Vote", args);
}
});
globalMessageHandler.onMessage(subChannel, args);
plugin.getPluginMessaging().add(new PluginMessageHandler("VoteOnline") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("VoteOnline", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("VoteUpdate") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("VoteUpdate", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("BungeeTimeChange") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("BungeeTimeChange", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("VoteBroadcast") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("VoteBroadcast", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("VoteBroadcastOffline") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("VoteBroadcastOffline", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("Status") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("Status", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("ServerName") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("ServerName", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("VotePartyBungee") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("VotePartyBungee", args);
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("VotePartyBroadcast") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
globalMessageHandler.onMessage("VotePartyBroadcast", args);
}
});
} else if (method.equals(BungeeMethod.SOCKETS)) {
encryptionHandler = new EncryptionHandler(new File(plugin.getDataFolder(), "secretkey.key"));
encryptionHandler = new EncryptionHandler(plugin.getName(),
new File(plugin.getDataFolder(), "secretkey.key"));
clientHandler = new ClientHandler(plugin.getBungeeSettings().getBungeeServerHost(),
plugin.getBungeeSettings().getBungeeServerPort(), encryptionHandler,
@@ -644,158 +594,52 @@ public class BungeeHandler implements Listener {
}
};
socketHandler.add(new SocketReceiver("bungeevote") {
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 5) {
plugin.extraDebug("BungeeVote from " + data[2] + ", processing");
String uuid = data[1];
VotingPluginUser user = null;
if (!uuid.isEmpty()) {
user = plugin.getVotingPluginUserManager().getVotingPluginUser(UUID.fromString(uuid));
} else {
user = plugin.getVotingPluginUserManager().getVotingPluginUser(data[2]);
}
user.cache();
if (plugin.getBungeeSettings().isPerServerPoints()) {
user.addPoints(plugin.getConfigFile().getPointsOnVote());
}
user.bungeeVote(data[3], new BungeeMessageData(data[4]), !Boolean.valueOf(data[5]));
}
globalMessageHandler.onMessage(data[0], ArrayUtils.convertAndRemoveFirst(data));
}
});
socketHandler.add(new SocketReceiver("BungeeTimeChange") {
@Override
public void onReceive(String[] data) {
checkGlobalData();
} else if (method.equals(BungeeMethod.MQTT)) {
try {
String id = plugin.getBungeeSettings().getMqttClientID();
if (id.isEmpty()) {
id = plugin.getOptions().getServer();
}
});
mqttHandler = new MqttHandler(new MqttServerComm(plugin.getBungeeSettings().getMqttClientID(),
plugin.getBungeeSettings().getMqttBrokerURL(), plugin.getBungeeSettings().getMqttUsername(),
plugin.getBungeeSettings().getMqttPassword()), 2);
mqttHandler.subscribe(plugin.getBungeeSettings().getMqttPrefix() + "votingplugin/servers/"
+ plugin.getOptions().getServer(), new MessageHandler() {
socketHandler.add(new SocketReceiver("bungeevoteonline") {
@Override
public void onMessage(String topic, String payload) {
String[] message = payload.split(":");
@Override
public void onReceive(String[] data) {
if (data.length > 5) {
plugin.extraDebug("BungeeVoteOnline from " + data[2] + ", processing");
String uuid = data[1];
VotingPluginUser user = null;
if (!uuid.isEmpty()) {
user = plugin.getVotingPluginUserManager().getVotingPluginUser(UUID.fromString(uuid));
} else {
user = plugin.getVotingPluginUserManager().getVotingPluginUser(data[2]);
}
user.cache();
if (plugin.getBungeeSettings().isPerServerPoints()) {
user.addPoints(plugin.getConfigFile().getPointsOnVote());
}
user.bungeeVoteOnline(data[3], new BungeeMessageData(data[4]), !Boolean.valueOf(data[5]));
}
}
});
socketHandler.add(new SocketReceiver("BroadcastOffline") {
@Override
public void onReceive(String[] data) {
if (data.length > 2) {
String votes = data[0];
String p = data[1];
VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(p);
user.offlineBroadcast(user, false, Integer.parseInt(votes));
}
}
});
socketHandler.add(new SocketReceiver("BungeeBroadcast") {
@Override
public void onReceive(String[] data) {
if (data.length > 2) {
VoteSite site = plugin.getVoteSite(data[1], true);
String p = data[3];
VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(p);
if (site != null) {
site.broadcastVote(user, false);
} else {
plugin.getLogger().warning("No votesite for " + data[1]);
}
}
}
});
socketHandler.add(new SocketReceiver("Broadcast") {
@Override
public void onReceive(String[] data) {
if (data.length > 2) {
VoteSite site = plugin.getVoteSite(data[1], true);
String p = data[2];
VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(p);
if (site != null) {
site.broadcastVote(user, false);
} else {
plugin.getLogger().warning("No votesite for " + data[1]);
}
}
}
});
socketHandler.add(new SocketReceiver("Status") {
@Override
public void onReceive(String[] data) {
if (data.length > 0) {
plugin.getLogger().info("Received status command, sending status back");
sendData("StatusOkay", plugin.getOptions().getServer());
}
}
});
socketHandler.add(new SocketReceiver("BungeeUpdate") {
@Override
public void onReceive(String[] data) {
plugin.setUpdate(true);
}
});
socketHandler.add(new SocketReceiver("VotePartyBungee") {
@Override
public void onReceive(String[] data) {
for (Player p : Bukkit.getOnlinePlayers()) {
new RewardBuilder(plugin.getBungeeSettings().getData(), "BungeeVotePartyRewards").send(p);
}
}
});
socketHandler.add(new SocketReceiver("VotePartyBroadcast") {
@Override
public void onReceive(String[] data) {
String broadcast = data[0];
MiscUtils.getInstance().broadcast(broadcast);
}
});
if (plugin.getOptions().getServer().equalsIgnoreCase("pleaseset")) {
plugin.getLogger().warning("Server name for bungee voting is not set, please set it");
if (message.length > 0) {
globalMessageHandler.onMessage(message[0],
ArrayUtils.convertAndRemoveFirst(message));
}
}
});
} catch (MqttException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (plugin.getOptions().getServer().equalsIgnoreCase("pleaseset")) {
plugin.getLogger().warning("Server name for bungee voting is not set, please set it");
}
}
@Getter
private MqttHandler mqttHandler;
public void loadGlobalMysql() {
if (plugin.getBungeeSettings().isGloblalDataEnabled()) {
if (timer != null) {
@@ -832,12 +676,12 @@ public class BungeeHandler implements Listener {
new GlobalMySQL("VotingPlugin_GlobalData", plugin.getMysql().getMysql()) {
@Override
public void debug(Exception e) {
public void debugEx(Exception e) {
plugin.debug(e);
}
@Override
public void debug(String text) {
public void debugLog(String text) {
plugin.debug(text);
}
@@ -847,7 +691,7 @@ public class BungeeHandler implements Listener {
}
@Override
public void severe(String text) {
public void logSevere(String text) {
plugin.getLogger().severe(text);
}
@@ -862,12 +706,12 @@ public class BungeeHandler implements Listener {
plugin.getBungeeSettings().getData().getConfigurationSection("GlobalData"))) {
@Override
public void debug(Exception e) {
public void debugEx(Exception e) {
plugin.debug(e);
}
@Override
public void debug(String text) {
public void debugLog(String text) {
plugin.debug(text);
}
@@ -877,7 +721,7 @@ public class BungeeHandler implements Listener {
}
@Override
public void severe(String text) {
public void logSevere(String text) {
plugin.getLogger().severe(text);
}
@@ -55,11 +55,11 @@ import com.bencodez.advancedcore.api.rewards.injected.RewardInjectInt;
import com.bencodez.advancedcore.api.rewards.injected.RewardInjectValidator;
import com.bencodez.advancedcore.api.rewards.injectedrequirement.RequirementInjectConfigurationSection;
import com.bencodez.advancedcore.api.user.AdvancedCoreUser;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.advancedcore.logger.Logger;
import com.bencodez.simpleapi.file.YMLConfig;
import com.bencodez.simpleapi.nms.NMSManager;
import com.bencodez.simpleapi.skull.SkullCache;
import com.bencodez.simpleapi.sql.Column;
import com.bencodez.simpleapi.updater.Updater;
import com.bencodez.votingplugin.broadcast.BroadcastHandler;
import com.bencodez.votingplugin.commands.CommandLoader;
@@ -339,6 +339,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
* @param uuid the uuid
* @return the user
*/
@Deprecated
public VotingPluginUser getUser(UUID uuid) {
return getVotingPluginUserManager().getVotingPluginUser(uuid);
}
@@ -1384,18 +1385,6 @@ public class VotingPluginMain extends AdvancedCorePlugin {
public void onPreLoad() {
plugin = this;
// disable plugin for older versions below 1.12
if (NMSManager.getInstance().isVersion("1.7", "1.8", "1.9", "1.10", "1.11")) {
plugin.getLogger().severe("Detected running " + Bukkit.getVersion()
+ ", this version is not supported on this build, read the plugin page. Disabling...");
if (!configFile.isOverrideVersionDisable()) {
Bukkit.getPluginManager().disablePlugin(this);
return;
}
plugin.getLogger().warning("Overriding version disable, beware of using this! This may cause issues!");
}
setupFiles();
loadVoteSites();
@@ -31,8 +31,6 @@ import com.bencodez.advancedcore.api.messages.PlaceholderUtils;
import com.bencodez.advancedcore.api.misc.PlayerManager;
import com.bencodez.advancedcore.api.rewards.RewardOptions;
import com.bencodez.advancedcore.api.user.UserStorage;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.advancedcore.api.user.userstorage.DataType;
import com.bencodez.advancedcore.api.valuerequest.ValueRequest;
import com.bencodez.advancedcore.api.valuerequest.listeners.BooleanListener;
import com.bencodez.advancedcore.api.valuerequest.listeners.StringListener;
@@ -43,6 +41,8 @@ import com.bencodez.simpleapi.command.TabCompleteHandle;
import com.bencodez.simpleapi.command.TabCompleteHandler;
import com.bencodez.simpleapi.debug.DebugLevel;
import com.bencodez.simpleapi.messages.MessageAPI;
import com.bencodez.simpleapi.sql.Column;
import com.bencodez.simpleapi.sql.DataType;
import com.bencodez.simpleapi.updater.Updater;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.commands.executers.CommandAliases;
@@ -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") {
@@ -1056,7 +1069,7 @@ public class CommandLoader {
sender.sendMessage(MessageAPI.colorize("&cClearing gotten milestones for all players..."));
plugin.getUserManager().removeAllKeyValues(path, DataType.STRING);
for (Player p : Bukkit.getOnlinePlayers()) {
plugin.getUserManager().getDataManager().cacheUser(p.getUniqueId());
plugin.getUserManager().getDataManager().cacheUser(p.getUniqueId(), p.getName());
}
sender.sendMessage(
MessageAPI.colorize("&cFinished clearing gotten milestones for all players"));
@@ -0,0 +1,172 @@
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 {
@SuppressWarnings("unused")
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);
}
}
@@ -58,6 +58,26 @@ public class BungeeSettings extends YMLFile {
@ConfigDataInt(path = "Redis.Port")
@Getter
private int RedisPort = 6379;
@ConfigDataString(path = "MQTT.ClientID")
@Getter
private String mqttClientID = "";
@ConfigDataString(path = "MQTT.BrokerURL")
@Getter
private String mqttBrokerURL = "tcp://localhost:1883";
@ConfigDataString(path = "MQTT.Username")
@Getter
private String mqttUsername = "";
@ConfigDataString(path = "MQTT.Password")
@Getter
private String mqttPassword = "";
@ConfigDataString(path = "MQTT.Prefix")
@Getter
private String mqttPrefix = "";
@ConfigDataString(path = "BungeeServer.Host")
@Getter
@@ -41,7 +41,7 @@ public class ConfigVoteSites extends YMLFile {
public void generateVoteSite(String siteName) {
if (plugin.getConfigFile().isAutoCreateVoteSites()) {
String org = siteName;
siteName = siteName.replace(".", "_");
siteName = siteName.replace(".", "_").replace(" ", "_");
plugin.getLogger().warning("VoteSite " + siteName + " does not exist with the servicesite '" + org
+ "', creating one, set AutoCreateVoteSites to false to prevent this");
setEnabled(siteName, true);
@@ -16,7 +16,7 @@ import org.bukkit.event.Listener;
import com.bencodez.advancedcore.api.rewards.RewardOptions;
import com.bencodez.advancedcore.api.user.AdvancedCoreUser;
import com.bencodez.advancedcore.api.user.UserStartup;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.simpleapi.sql.Column;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.events.PlayerVoteCoolDownEndEvent;
import com.bencodez.votingplugin.events.PlayerVoteSiteCoolDownEndEvent;
@@ -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,6 @@ 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.user.VotingPluginUser;
// TODO: Auto-generated Javadoc
@@ -50,9 +49,7 @@ public class PlayerJoinEvent implements Listener {
plugin.getPlaceholders().onUpdate(user, true);
if (plugin.getBungeeSettings().isUseBungeecoord()
&& (plugin.getBungeeHandler().getMethod().equals(BungeeMethod.PLUGINMESSAGING)
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.REDIS))) {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
plugin.getBungeeHandler().getGlobalMessageHandler().sendMessage("Login", user.getPlayerName(),
user.getUUID(), plugin.getBungeeSettings().getServer());
}
@@ -76,14 +73,14 @@ public class PlayerJoinEvent implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerQuit(PlayerQuitEvent event) {
if (plugin != null && plugin.isEnabled()) {
final java.util.UUID uuid = event.getPlayer().getUniqueId();
final Player player = event.getPlayer();
plugin.getLoginTimer().execute(new Runnable() {
@Override
public void run() {
VotingPluginMain.plugin.getAdvancedTab().remove(uuid);
VotingPluginMain.plugin.getAdvancedTab().remove(player.getUniqueId());
VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(uuid);
VotingPluginUser user = plugin.getVotingPluginUserManager().getVotingPluginUser(player);
user.dontCache();
user.logoutRewards();
plugin.getPlaceholders().onLogout(user);
@@ -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,7 +50,25 @@ public class PlayerVoteListener implements Listener {
}
String playerName = event.getPlayer();
plugin.debug("Processing PlayerVoteEvent: " + playerName + "/" + event.getServiceSite());
boolean notValid = false;
if (!PlayerManager.getInstance().isValidUser(playerName, plugin.getConfigFile().isAllowUnJoinedCheckServer())) {
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 {
notValid = true;
}
} else {
notValid = true;
}
}
if (notValid) {
if (!plugin.getConfigFile().isAllowUnjoined()) {
plugin.getLogger().warning("Player " + playerName
+ " has not joined before, disregarding vote, set AllowUnjoined to true to prevent this");
@@ -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;
@@ -72,9 +72,11 @@ public class VotiferEvent implements Listener {
plugin.getServerData().addServiceSite(voteSite);
if (plugin.getBungeeSettings().isUseBungeecoord() && !plugin.getBungeeSettings().isVotifierBypass()
&& (plugin.getBungeeHandler().getMethod().equals(BungeeMethod.PLUGINMESSAGING)
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.SOCKETS))) {
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.SOCKETS)
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.MQTT)
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.REDIS))) {
plugin.getLogger().severe(
"Ignoring vote from votifier since pluginmessaging or socket bungee method is enabled, this means you aren't setup correctly for those methods, please check: https://github.com/BenCodez/VotingPlugin/wiki/Bungeecord-Setups");
"Ignoring vote from votifier since pluginmessaging, socket, redis, or mqtt bungee method is enabled, this means you aren't setup correctly for those methods, please check: https://github.com/BenCodez/VotingPlugin/wiki/Bungeecord-Setups");
return;
}
String matchSite = "";
@@ -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;
@@ -180,6 +180,8 @@ public class PlaceHolders {
}
}
UUID uuid = user.getJavaUUID();
for (PlaceHolder<VotingPluginUser> placeholder : placeholders) {
try {
if (placeholder.matches(identifier)) {
@@ -190,11 +192,11 @@ public class PlaceHolders {
CalculatingPlaceholder<VotingPluginUser> cPlaceholder = (CalculatingPlaceholder<VotingPluginUser>) placeholder;
if (placeholder.isUsesCache() && placeholder.isCached(identifier)) {
ConcurrentHashMap<UUID, String> cache = placeholder.getCache().get(identifier);
if (cache.containsKey(p.getUniqueId())) {
if (cPlaceholder.getCacheData().containsKey(user.getJavaUUID())) {
if (cache.containsKey(uuid)) {
if (cPlaceholder.getCacheData().containsKey(uuid)) {
return cPlaceholder.placeholderRequest(user, identifier);
}
return cache.get(p.getUniqueId());
return cache.get(uuid);
} else if (!forceProcess) {
schedulePlaceholderCheck(user);
return "...";
@@ -226,8 +228,9 @@ public class PlaceHolders {
}
if (placeholder.isUsesCache() && placeholder.isCached(identifier)) {
ConcurrentHashMap<UUID, String> cache = placeholder.getCache().get(identifier);
if (cache.containsKey(p.getUniqueId())) {
return cache.get(p.getUniqueId());
if (cache.containsKey(uuid)) {
return cache.get(uuid);
} else if (!forceProcess) {
schedulePlaceholderCheck(user);
return "...";
@@ -541,6 +544,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 +653,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 +669,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 +741,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 +792,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 +843,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,7 +1,11 @@
package com.bencodez.votingplugin.bungee;
package com.bencodez.votingplugin.proxy;
public enum BungeeMethod {
MYSQL, PLUGINMESSAGING, SOCKETS, REDIS;
MYSQL, PLUGINMESSAGING, SOCKETS, REDIS, MQTT;
public boolean requiresPlayerOnline() {
return this == MYSQL || this == PLUGINMESSAGING;
}
public static BungeeMethod getByName(String str) {
for (BungeeMethod method : values()) {
@@ -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;
@@ -0,0 +1,549 @@
package com.bencodez.votingplugin.proxy;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import com.bencodez.simpleapi.sql.Column;
import com.bencodez.simpleapi.sql.DataType;
import com.bencodez.simpleapi.sql.data.DataValue;
import com.bencodez.simpleapi.sql.data.DataValueInt;
import com.bencodez.simpleapi.sql.data.DataValueString;
import com.bencodez.simpleapi.sql.mysql.config.MysqlConfig;
import com.bencodez.simpleapi.sql.mysql.queries.Query;
import lombok.Getter;
public abstract class ProxyMysqlUserTable {
private List<String> columns = Collections.synchronizedList(new ArrayList<String>());
private List<String> intColumns = new ArrayList<>();
// private HashMap<String, ArrayList<Column>> table;
// ConcurrentMap<String, ArrayList<Column>> table = new
// ConcurrentHashMap<String, ArrayList<Column>>();
@Getter
private com.bencodez.simpleapi.sql.mysql.MySQL mysql;
private String name;
private Object object2 = new Object();
private Object object3 = new Object();
private Object object4 = new Object();
private Set<String> uuids = Collections.synchronizedSet(new HashSet<String>());
public abstract void logSevere(String string);
public abstract void logInfo(String string);
public ProxyMysqlUserTable(String tableName, MysqlConfig config, boolean debug) {
if (config.hasTableNameSet()) {
tableName = config.getTableName();
}
name = tableName;
if (config.getTablePrefix() != null) {
name = config.getTablePrefix() + tableName;
}
mysql = new com.bencodez.simpleapi.sql.mysql.MySQL(config.getMaxThreads()) {
@Override
public void debug(SQLException e) {
if (debug) {
e.printStackTrace();
}
}
@Override
public void severe(String string) {
logSevere(string);
}
@Override
public void debug(String msg) {
if (debug) {
logInfo("MYSQL DEBUG: " + msg);
}
}
};
if (!mysql.connect(config)) {
}
try {
Query q = new Query(mysql, "USE `" + config.getDatabase() + "`;");
q.executeUpdateAsync();
} catch (SQLException e) {
severe("Failed to send use database query: " + config.getDatabase() + " Error: " + e.getMessage());
debug(e);
}
String sql = "CREATE TABLE IF NOT EXISTS " + getName() + " (";
sql += "uuid VARCHAR(37),";
sql += "PRIMARY KEY ( uuid )";
sql += ");";
Query query;
try {
query = new Query(mysql, sql);
query.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
loadData();
// tempoary to improve performance from old tables
// addToQue("ALTER TABLE " + getName() + " MODIFY uuid VARCHAR(37);");
alterColumnType("uuid", "VARCHAR(37)");
}
public void addColumn(String column, DataType dataType) {
synchronized (object3) {
String sql = "ALTER TABLE " + getName() + " ADD COLUMN `" + column + "` text" + ";";
try {
Query query = new Query(mysql, sql);
query.executeUpdate();
getColumns().add(column);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void alterColumnType(String column, String newType) {
checkColumn(column, DataType.STRING);
try {
new Query(mysql, "ALTER TABLE " + getName() + " MODIFY `" + column + "` " + newType + ";")
.executeUpdateAsync();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (newType.contains("INT")) {
if (!intColumns.contains(column)) {
intColumns.add(column);
}
}
}
public void checkColumn(String column, DataType dataType) {
synchronized (object4) {
if (!getColumns().contains(column)) {
if (!getColumnsQueury().contains(column)) {
addColumn(column, dataType);
}
}
}
}
public void clearCache() {
clearCacheBasic();
}
public void clearCacheBasic() {
columns.clear();
columns.addAll(getColumnsQueury());
uuids.clear();
uuids.addAll(getUuidsQuery());
}
public void close() {
mysql.disconnect();
}
public boolean containsKeyQuery(String index) {
String sqlStr = "SELECT uuid FROM " + getName() + ";";
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr)) {
ResultSet rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql); ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
if (rs.getString("uuid").equals(index)) {
rs.close();
return true;
}
}
rs.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
return false;
}
public void copyColumnData(String columnFromName, String columnToName) {
checkColumn(columnFromName, DataType.STRING);
checkColumn(columnToName, DataType.STRING);
String sql = "UPDATE `" + getName() + "` SET `" + columnToName + "` = `" + columnFromName + "`;";
try {
Query query = new Query(mysql, sql);
query.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
public abstract void debug(SQLException e);
public List<String> getColumns() {
if (columns == null || columns.size() == 0) {
loadData();
}
return columns;
}
public ArrayList<String> getColumnsQueury() {
ArrayList<String> columns = new ArrayList<>();
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement("SHOW COLUMNS FROM `" + getName() + "`;")) {
ResultSet rs = sql.executeQuery();
while (rs.next()) {
String columnName = rs.getString(1);
columns.add(columnName);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
return columns;
}
public ArrayList<Column> getExactQuery(Column column) {
ArrayList<Column> result = new ArrayList<>();
String query = "SELECT * FROM " + getName() + " WHERE `" + column.getName() + "`='"
+ column.getValue().getString() + "';";
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(query)) {
ResultSet rs = sql.executeQuery();
/*
* Query sql = new Query(mysql, query); sql.setParameter(1,
* column.getValue().toString()); ResultSet rs = sql.executeQuery();
*/
if (rs.next()) {
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
String columnName = rs.getMetaData().getColumnLabel(i);
Column rCol = null;
if (intColumns.contains(columnName)) {
rCol = new Column(columnName, DataType.INTEGER);
rCol.setValue(new DataValueInt(rs.getInt(i)));
} else {
rCol = new Column(columnName, DataType.STRING);
rCol.setValue(new DataValueString(rs.getString(i)));
}
result.add(rCol);
}
}
rs.close();
return result;
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
for (String col : getColumns()) {
result.add(new Column(col, DataType.STRING));
}
return result;
}
public String getName() {
return name;
}
public ArrayList<String> getNamesQuery() {
ArrayList<String> uuids = new ArrayList<>();
checkColumn("PlayerName", DataType.STRING);
ArrayList<Column> rows = getRowsNameQuery();
if (rows != null) {
for (Column c : rows) {
if (c.getValue().isString()) {
uuids.add(c.getValue().getString());
}
}
}
return uuids;
}
public ArrayList<Column> getRowsNameQuery() {
ArrayList<Column> result = new ArrayList<>();
String sqlStr = "SELECT PlayerName FROM " + getName() + ";";
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr)) {
ResultSet rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql); ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
Column rCol = new Column("PlayerName", new DataValueString(rs.getString("PlayerName")));
result.add(rCol);
}
sql.close();
conn.close();
} catch (SQLException e) {
}
return result;
}
public ArrayList<Column> getRowsQuery() {
ArrayList<Column> result = new ArrayList<>();
String sqlStr = "SELECT uuid FROM " + getName() + ";";
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr)) {
ResultSet rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql); ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
Column rCol = new Column("uuid", new DataValueString(rs.getString("uuid")));
result.add(rCol);
}
rs.close();
} catch (SQLException e) {
return null;
}
return result;
}
public ConcurrentHashMap<UUID, String> getRowsUUIDNameQuery() {
ConcurrentHashMap<UUID, String> uuidNames = new ConcurrentHashMap<>();
String sqlStr = "SELECT UUID, PlayerName FROM " + getName() + ";";
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr)) {
ResultSet rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql); ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
String uuid = rs.getString("uuid");
String playerName = rs.getString("PlayerName");
if (uuid != null && !uuid.isEmpty() && !uuid.equals("null") && playerName != null) {
uuidNames.put(UUID.fromString(uuid), playerName);
}
}
sql.close();
conn.close();
} catch (SQLException e) {
}
return uuidNames;
}
public String getUUID(String playerName) {
String query = "SELECT uuid FROM " + getName() + " WHERE " + "PlayerName" + "='" + playerName + "';";
try (Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(query)) {
ResultSet rs = sql.executeQuery();
/*
* Query sql = new Query(mysql, query); ResultSet rs = sql.executeQuery();
*/
if (rs.next()) {
String uuid = rs.getString("uuid");
if (uuid != null && !uuid.isEmpty()) {
rs.close();
return uuid;
}
}
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
return null;
}
public Set<String> getUuids() {
if (uuids == null || uuids.size() == 0) {
uuids.clear();
uuids.addAll(getUuidsQuery());
return uuids;
}
return uuids;
}
public ArrayList<String> getUuidsQuery() {
ArrayList<String> uuids = new ArrayList<>();
ArrayList<Column> rows = getRowsQuery();
for (Column c : rows) {
if (c.getValue().isString()) {
uuids.add(c.getValue().getString());
}
}
return uuids;
}
public void insert(String index, String column, DataValue value) {
insertQuery(index, Arrays.asList(new Column(column, value)));
}
public void insertQuery(String index, List<Column> cols) {
String query = "INSERT IGNORE " + getName() + " ";
query += "set uuid='" + index + "', ";
for (int i = 0; i < cols.size(); i++) {
Column col = cols.get(i);
if (i == cols.size() - 1) {
if (col.getValue().isString()) {
query += "`" + col.getName() + "`='" + col.getValue().getString() + "';";
} else if (col.getValue().isBoolean()) {
query += "`" + col.getName() + "`='" + col.getValue().getBoolean() + "';";
} else if (col.getValue().isInt()) {
query += "`" + col.getName() + "`='" + col.getValue().getInt() + "';";
}
} else {
if (col.getValue().isString()) {
query += "`" + col.getName() + "`='" + col.getValue().getString() + "', ";
} else if (col.getValue().isBoolean()) {
query += "`" + col.getName() + "`='" + col.getValue().getBoolean() + "', ";
} else if (col.getValue().isInt()) {
query += "`" + col.getName() + "`='" + col.getValue().getInt() + "', ";
}
}
}
try {
uuids.add(index);
new Query(mysql, query).executeUpdateAsync();
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean isIntColumn(String key) {
return intColumns.contains(key);
}
public void loadData() {
columns = getColumnsQueury();
}
public abstract void severe(String str);
public void shutdown() {
mysql.disconnect();
}
public void update(String index, List<Column> cols) {
for (Column col : cols) {
checkColumn(col.getName(), col.getDataType());
}
if (getUuids().contains(index)) {
synchronized (object2) {
String query = "UPDATE " + getName() + " SET ";
for (int i = 0; i < cols.size(); i++) {
Column col = cols.get(i);
if (i == cols.size() - 1) {
if (col.getValue().isString()) {
query += "`" + col.getName() + "`='" + col.getValue().getString() + "'";
} else if (col.getValue().isBoolean()) {
query += "`" + col.getName() + "`='" + col.getValue().getBoolean() + "'";
} else if (col.getValue().isInt()) {
query += "`" + col.getName() + "`='" + col.getValue().getInt() + "'";
}
} else {
if (col.getValue().isString()) {
query += "`" + col.getName() + "`='" + col.getValue().getString() + "', ";
} else if (col.getValue().isBoolean()) {
query += "`" + col.getName() + "`='" + col.getValue().getBoolean() + "', ";
} else if (col.getValue().isInt()) {
query += "`" + col.getName() + "`='" + col.getValue().getInt() + "', ";
}
}
}
query += " WHERE `uuid`=";
query += "'" + index + "';";
try {
Query q = new Query(mysql, query);
q.executeUpdateAsync();
} catch (SQLException e) {
e.printStackTrace();
}
}
} else {
insertQuery(index, cols);
}
}
public void update(String index, String column, DataValue value) {
checkColumn(column, value.getType());
if (getUuids().contains(index)) {
synchronized (object2) {
String query = "UPDATE " + getName() + " SET ";
if (value.isString()) {
query += column + "='" + value.getString() + "'";
} else if (value.isBoolean()) {
query += column + "='" + value.getBoolean() + "'";
} else if (value.isInt()) {
query += column + "='" + value.getInt() + "'";
}
query += " WHERE `uuid`=";
query += "'" + index + "';";
try {
Query q = new Query(mysql, query);
q.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
} else {
insert(index, column, value);
}
}
public void wipeColumnData(String columnName, DataType dataType) {
checkColumn(columnName, dataType);
String sql = "UPDATE " + getName() + " SET " + columnName + " = " + dataType.getNoValue() + ";";
try {
Query query = new Query(mysql, sql);
query.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@@ -1,15 +1,15 @@
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;
import java.net.URL;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
@@ -25,31 +25,33 @@ import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import com.bencodez.advancedcore.api.misc.encryption.EncryptionHandler;
import org.eclipse.paho.client.mqttv3.MqttException;
import com.bencodez.advancedcore.api.time.TimeType;
import com.bencodez.advancedcore.api.user.usercache.value.DataValue;
import com.bencodez.advancedcore.api.user.usercache.value.DataValueBoolean;
import com.bencodez.advancedcore.api.user.usercache.value.DataValueInt;
import com.bencodez.advancedcore.api.user.usercache.value.DataValueString;
import com.bencodez.advancedcore.api.user.userstorage.Column;
import com.bencodez.advancedcore.bungeeapi.globaldata.GlobalDataHandlerProxy;
import com.bencodez.advancedcore.bungeeapi.mysql.ProxyMySQL;
import com.bencodez.advancedcore.bungeeapi.redis.RedisHandler;
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.advancedcore.bungeeapi.time.BungeeTimeChecker;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.simpleapi.encryption.EncryptionHandler;
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.simpleapi.servercomm.global.GlobalMessageListener;
import com.bencodez.simpleapi.servercomm.global.GlobalMessageProxyHandler;
import com.bencodez.simpleapi.servercomm.mqtt.MqttHandler;
import com.bencodez.simpleapi.servercomm.mqtt.MqttHandler.MessageHandler;
import com.bencodez.simpleapi.servercomm.mqtt.MqttServerComm;
import com.bencodez.simpleapi.servercomm.redis.RedisHandler;
import com.bencodez.simpleapi.servercomm.redis.RedisListener;
import com.bencodez.simpleapi.servercomm.sockets.ClientHandler;
import com.bencodez.simpleapi.servercomm.sockets.SocketHandler;
import com.bencodez.simpleapi.servercomm.sockets.SocketReceiver;
import com.bencodez.simpleapi.sql.Column;
import com.bencodez.simpleapi.sql.data.DataValue;
import com.bencodez.simpleapi.sql.data.DataValueBoolean;
import com.bencodez.simpleapi.sql.data.DataValueInt;
import com.bencodez.simpleapi.sql.data.DataValueString;
import com.bencodez.votingplugin.proxy.multiproxy.MultiProxyHandler;
import com.bencodez.votingplugin.proxy.multiproxy.MultiProxyMethod;
import com.bencodez.votingplugin.proxy.multiproxy.MultiProxyServerSocketConfiguration;
import com.bencodez.votingplugin.proxy.multiproxy.MultiProxyServerSocketConfigurationBungee;
import com.bencodez.votingplugin.timequeue.VoteTimeQueue;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -59,6 +61,7 @@ import lombok.Setter;
public abstract class VotingPluginProxy {
@Getter
@Setter
private int votePartyVotes = 0;
@Getter
@@ -67,14 +70,16 @@ public abstract class VotingPluginProxy {
@Getter
@Setter
private ProxyMySQL proxyMySQL;
private ProxyMysqlUserTable proxyMySQL;
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 +103,7 @@ public abstract class VotingPluginProxy {
private boolean enabled;
@Getter
@Setter
private MultiProxyHandler multiProxyHandler;
@Getter
@@ -110,6 +116,12 @@ public abstract class VotingPluginProxy {
@Getter
private Queue<VoteTimeQueue> timeChangeQueue = new ConcurrentLinkedQueue<>();
@Getter
private MqttHandler mqttHandler;
@Getter
private GlobalMessageProxyHandler globalMessageProxyHandler;
public VotingPluginProxy() {
enabled = true;
@@ -230,8 +242,6 @@ public abstract class VotingPluginProxy {
}
};
loadMultiProxySupport();
}
public void addCurrentVotePartyVotes(int amount) {
@@ -273,9 +283,9 @@ public abstract class VotingPluginProxy {
}
if (toSend) {
sendMessageServer(server, "Vote", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote(), cache.getText(),
globalMessageProxyHandler.sendMessage(server, "Vote", cache.getPlayerName(),
cache.getUuid(), cache.getService(), "" + cache.getTime(),
Boolean.FALSE.toString(), "" + cache.isRealVote(), cache.getText(),
"" + getConfig().getBungeeManageTotals(),
"" + BungeeVersion.getPluginMessageVersion(), "" + getConfig().getBroadcast(),
"" + num, "" + numberOfVotes);
@@ -305,8 +315,8 @@ public abstract class VotingPluginProxy {
int num = 1;
int numberOfVotes = c.size();
for (OfflineBungeeVote cache : c) {
sendMessageServer(server, "VoteOnline", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
globalMessageProxyHandler.sendMessage(server, "VoteOnline", cache.getPlayerName(),
cache.getUuid(), cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote(), cache.getText(), "" + getConfig().getBungeeManageTotals(),
"" + BungeeVersion.getPluginMessageVersion(), "" + getConfig().getBroadcast(), "" + num,
"" + numberOfVotes);
@@ -326,7 +336,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 +346,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 +372,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();
}
@@ -482,10 +495,11 @@ public abstract class VotingPluginProxy {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
if (getConfig().getPluginMessageEncryption()) {
encryptionHandler = new EncryptionHandler(new File(getDataFolderPlugin(), "secretkey.key"));
}
encryptionHandler = new EncryptionHandler("VotingPlugin",
new File(getDataFolderPlugin(), "secretkey.key"));
}
} else if (method.equals(BungeeMethod.SOCKETS)) {
encryptionHandler = new EncryptionHandler(new File(getDataFolderPlugin(), "secretkey.key"));
encryptionHandler = new EncryptionHandler("VotingPlugin", new File(getDataFolderPlugin(), "secretkey.key"));
socketHandler = new SocketHandler(getPluginVersion(), getConfig().getBungeeHost(),
getConfig().getBungeePort(), encryptionHandler, getConfig().getDebug()) {
@@ -501,27 +515,9 @@ public abstract class VotingPluginProxy {
@Override
public void onReceive(String[] data) {
if (data.length > 1) {
if (data.length > 2) {
if (data[0].equalsIgnoreCase("Broadcast")) {
sendServerMessage(data);
}
}
globalMessageProxyHandler.onMessage(data[0].toLowerCase(),
ArrayUtils.convertAndRemoveFirst(data));
}
}
});
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 1) {
if (data[0].equalsIgnoreCase("StatusOkay")) {
String server = data[1];
log("Voting communicaton okay with " + server);
}
}
}
});
@@ -553,22 +549,9 @@ public abstract class VotingPluginProxy {
@Override
protected void onMessage(String channel, String[] message) {
if (message.length > 0) {
if (message[0].equalsIgnoreCase("statusokay")) {
String server = message[1];
log("Status okay for " + server);
} else if (message[0].equalsIgnoreCase("TimeChangeFinished")) {
} else if (message[0].equalsIgnoreCase("login")) {
String player = message[1];
String uuid = message[2];
String server = "";
if (message.length > 3) {
server = message[3];
}
debug("Login: " + player + "/" + uuid + " " + server);
addNonVotedPlayer(uuid, player);
login(player, uuid, server);
if (message.length > 0) {
globalMessageProxyHandler.onMessage(message[0].toLowerCase(),
ArrayUtils.convertAndRemoveFirst(message));
}
}
}
@@ -582,11 +565,110 @@ public abstract class VotingPluginProxy {
}
});
} else if (method.equals(BungeeMethod.MQTT))
{
// use MqttHander
try {
mqttHandler = new MqttHandler(new MqttServerComm(getConfig().getMqttClientID(),
getConfig().getMqttBrokerURL(), getConfig().getMqttUsername(), getConfig().getMqttPassword()),
2);
mqttHandler.subscribe(getConfig().getMqttPrefix() + "votingplugin/servers/proxy", new MessageHandler() {
@Override
public void onMessage(String topic, String payload) {
debug("Received mqtt message: " + topic + " - " + payload);
String[] message = payload.split(":");
if (message.length > 0) {
globalMessageProxyHandler.onMessage(message[0].toLowerCase(),
ArrayUtils.convertAndRemoveFirst(message));
}
}
});
} catch (MqttException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
currentVotePartyVotesRequired = getConfig().getVotePartyVotesRequired()
+ getVoteCacheVotePartyIncreaseVotesRequired();
currentVotePartyVotesRequired =
getConfig().getVotePartyVotesRequired() + getVoteCacheVotePartyIncreaseVotesRequired();
votePartyVotes = getVoteCacheCurrentVotePartyVotes();
globalMessageProxyHandler = new GlobalMessageProxyHandler() {
@Override
public void sendMessage(String server, String channel, String... messageData) {
switch (method) {
case MQTT:
sendMqttMessageServer(server, channel, messageData);
break;
case MYSQL:
sendPluginMessageServer(server, channel, messageData);
break;
case PLUGINMESSAGING:
sendPluginMessageServer(server, channel, messageData);
break;
case REDIS:
sendRedisMessageServer(server, channel, messageData);
break;
case SOCKETS:
ArrayList<String> data = new ArrayList<>();
data.add(channel);
data.addAll(ArrayUtils.convert(messageData));
sendServerMessageServer(server, ArrayUtils.convert(data));
break;
default:
break;
}
}
};
globalMessageProxyHandler.addListener(new GlobalMessageListener("login") {
@Override
public void onReceive(ArrayList<String> message) {
if (message.size() < 2) {
logSevere("Invalid login message received: " + message);
return;
}
String player = message.get(0);
String uuid = message.get(1);
String server = "";
if (message.size() > 2) {
server = message.get(2);
}
debug("Login: " + player + "/" + uuid + " " + server);
login(player, uuid, server);
}
});
globalMessageProxyHandler.addListener(new GlobalMessageListener("statusokay") {
@Override
public void onReceive(ArrayList<String> message) {
String server = message.get(0);
log("Status okay for " + server);
}
});
globalMessageProxyHandler.addListener(new GlobalMessageListener("voteupdate") {
@Override
public void onReceive(ArrayList<String> message) {
for (String send : getAllAvailableServers()) {
globalMessageProxyHandler.sendMessage(send, "VoteUpdate", ArrayUtils.convert(message));
}
}
});
loadMultiProxySupport();
}
@@ -729,7 +811,9 @@ public abstract class VotingPluginProxy {
public abstract void log(String message);
public void login(String playerName, String uuid, String serverName) {
addNonVotedPlayer(uuid, playerName);
if (getConfig().getOnlineMode()) { // no need to cache in offline mode
addNonVotedPlayer(uuid, playerName);
}
if (isPlayerOnline(playerName)) {
if (getConfig().getGlobalDataEnabled()) {
if (getGlobalDataHandler().isTimeChangedHappened()) {
@@ -761,66 +845,41 @@ 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 {
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..." + subchannel + " " + size);
String data = "";
if (size > 0) {
if (getConfig().getPluginMessageEncryption() && encryptionHandler != null) {
data = encryptionHandler.decrypt(in.readUTF());
} else {
data = in.readUTF();
}
}
String[] list = data.split("/a/");
if (list.length > 0) {
globalMessageProxyHandler.onMessage(subchannel.toLowerCase(), ArrayUtils.convert(list));
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
debug("Ignoring plugin message: " + subchannel);
}
} catch (Exception e) {
e.printStackTrace();
}
});
}
private UUID parseUUIDFromString(String uuidAsString) {
@@ -868,13 +927,14 @@ public abstract class VotingPluginProxy {
public abstract void reloadCore(boolean mysql);
public void sendMessageServer(String server, String channel, String... messageData) {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
sendPluginMessageServer(server, channel, messageData);
} else if (method.equals(BungeeMethod.REDIS)) {
sendRedisMessageServer(server, channel, messageData);
}
}
/*
* public void sendMessageServer(String server, String channel, String...
* messageData) { if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
* sendPluginMessageServer(server, channel, messageData); } else if
* (method.equals(BungeeMethod.REDIS)) { sendRedisMessageServer(server, channel,
* messageData); } else if (method.equals(BungeeMethod.MQTT)) {
* sendMqttMessageServer(server, channel, messageData); } }
*/
public abstract void sendPluginMessageData(String server, String channel, byte[] data, boolean queue);
@@ -917,6 +977,18 @@ public abstract class VotingPluginProxy {
redisHandler.sendMessage(getConfig().getRedisPrefix() + "VotingPlugin_" + server, ArrayUtils.convert(list));
}
public void sendMqttMessageServer(String server, String channel, String... messageData) {
ArrayList<String> list = new ArrayList<>();
list.add(channel);
list.addAll(ArrayUtils.convert(messageData));
try {
mqttHandler.publish(getConfig().getMqttPrefix() + "votingplugin/servers/" + server, String.join(":", list));
} catch (Exception e) {
e.printStackTrace();
}
}
public void sendServerMessage(String... messageData) {
for (ClientHandler h : clientHandles.values()) {
h.sendMessage(messageData);
@@ -938,45 +1010,9 @@ public abstract class VotingPluginProxy {
}
public void sendSocketVote(String name, String service, BungeeMessageData text) {
String uuid = getUUID(name);
if (getConfig().getSendVotesToAllServers()) {
sendServerMessage("bungeevote", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (getConfig().getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
} else {
// online server only
String server = "";
if (isPlayerOnline(name)) {
server = getCurrentPlayerServer(name);
} else {
server = getConfig().getFallBack();
}
if (getConfig().getBlockedServers().contains(server)) {
server = getConfig().getFallBack();
}
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (getConfig().getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
sendServerMessage("BungeeUpdate");
}
}
public void sendVoteParty(String server) {
if (isSomeoneOnlineServer(server)) {
if (method.equals(BungeeMethod.PLUGINMESSAGING) || method.equals(BungeeMethod.REDIS)) {
sendMessageServer(server, "VotePartyBungee");
} else if (method.equals(BungeeMethod.SOCKETS)) {
sendServerMessageServer(server, "VotePartyBungee");
}
globalMessageProxyHandler.sendMessage(server, "VotePartyBungee", "");
}
}
@@ -1001,20 +1037,117 @@ public abstract class VotingPluginProxy {
public abstract void setVoteCacheVotePartyIncreaseVotesRequired(int votes);
public void status() {
if (method.equals(BungeeMethod.SOCKETS)) {
sendServerMessage("status");
} else if (method.equals(BungeeMethod.PLUGINMESSAGING) || method.equals(BungeeMethod.REDIS)) {
for (String s : getAllAvailableServers()) {
if (!isSomeoneOnlineServer(s)) {
log("No players on server " + s
+ " to send test status message, please retest with someone online");
} else {
// send
log("Sending request for status message on " + s);
sendMessageServer(s, "Status", s);
for (String s : getAllAvailableServers()) {
if (!isSomeoneOnlineServer(s)) {
log("No players on server " + s + " to send test status message, please retest with someone online");
} else {
// send
log("Sending request for status message on " + s);
globalMessageProxyHandler.sendMessage(s, "Status", s);
}
}
}
public String getWaitUntilDelaySiteFromService(String service) {
for (String site : getConfig().getWaitUntilVoteDelaySites()) {
if (getConfig().getWaitUntilVoteDelayService(site).equalsIgnoreCase(service)) {
return site;
}
}
return "";
}
private long getLastVotesTime(String uuid, ArrayList<Column> cols, String site, String service) {
long mostRecentTime = 0;
// Check cached online votes
if (cachedOnlineVotes.containsKey(uuid)) {
ArrayList<OfflineBungeeVote> onlineVotes = cachedOnlineVotes.get(uuid);
for (OfflineBungeeVote vote : onlineVotes) {
if (vote.getService().equalsIgnoreCase(service)) {
mostRecentTime = Math.max(mostRecentTime, vote.getTime());
}
}
}
// Check cached votes
for (ArrayList<OfflineBungeeVote> votes : cachedVotes.values()) {
for (OfflineBungeeVote vote : votes) {
if (vote.getUuid().equals(uuid) && vote.getService().equalsIgnoreCase(service)) {
mostRecentTime = Math.max(mostRecentTime, vote.getTime());
}
}
}
for (Column d : cols) {
if (d.getName().equalsIgnoreCase("LastVotes")) {
DataValue value = d.getValue();
String[] list = value.getString().split("%line%");
for (String str : list) {
String[] data = str.split("//");
if (data[0].equalsIgnoreCase(site)) {
mostRecentTime = Math.max(mostRecentTime, Long.valueOf(data[1]));
}
}
}
}
return mostRecentTime;
}
public boolean checkVoteDelay(String uuid, String service, ArrayList<Column> data) {
String site = getWaitUntilDelaySiteFromService(service);
if (site.isEmpty()) {
debug("No service site set for " + service + ", skipping vote delay check");
return true;
}
int voteDelay = getConfig().getWaitUntilVoteDelayVoteDelay(site);
int voteDelayMin = getConfig().getWaitUntilVoteDelayVoteDelayMin(site);
long lastVote = getLastVotesTime(uuid, data, site, service);
if (lastVote == 0) {
debug("No last vote time found for " + uuid + "/" + service + ", skipping vote delay check");
return true;
}
try {
LocalDateTime now = getBungeeTimeChecker().getTime();
LocalDateTime lastVoteTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(lastVote), ZoneId.systemDefault())
.plusHours(getConfig().getTimeHourOffSet());
if (!getConfig().getWaitUntilVoteDelayVoteDelayDaily(site)) {
if (voteDelay == 0 && voteDelayMin == 0) {
debug("Vote delay is 0 for " + site + ", skipping vote delay check");
return true;
}
LocalDateTime nextvote = lastVoteTime.plusHours((long) voteDelay).plusMinutes((long) voteDelayMin);
return now.isAfter(nextvote);
}
LocalDateTime resetTime = lastVoteTime.withHour(getConfig().getWaitUntilVoteDelayVoteDelayHour(site))
.withMinute(0).withSecond(0);
LocalDateTime resetTimeTomorrow = resetTime.plusHours(24);
if (lastVoteTime.isBefore(resetTime)) {
if (now.isAfter(resetTime)) {
debug("Vote delay is met for " + uuid + "/" + service + ", vote can be processed");
return true;
}
} else {
if (now.isAfter(resetTimeTomorrow)) {
debug("Vote delay is met for " + uuid + "/" + service + ", vote can be processed");
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
debug("Vote delay is not met for " + uuid + "/" + service + ", skipping vote");
return false;
}
public synchronized void vote(String player, String service, boolean realVote, boolean timeQueue, long queueTime,
@@ -1039,6 +1172,15 @@ public abstract class VotingPluginProxy {
if (uuid == null || uuid.isEmpty()) {
uuid = getUUID(player);
if (uuid.isEmpty() && !getConfig().getBedrockPlayerPrefix().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()) {
@@ -1091,6 +1233,11 @@ public abstract class VotingPluginProxy {
ArrayList<Column> data = getProxyMySQL()
.getExactQuery(new Column("uuid", new DataValueString(uuid)));
if (!checkVoteDelay(uuid, service, data)) {
log("Vote delay is not met for " + player + "/" + service + ", skipping vote");
return;
}
int allTimeTotal = getValue(data, "AllTimeTotal", 1);
int monthTotal = getValue(data, "MonthTotal", 1);
int dateMonthTotal = -1;
@@ -1144,71 +1291,68 @@ public abstract class VotingPluginProxy {
time = queueTime;
}
if (method.equals(BungeeMethod.PLUGINMESSAGING) || method.equals(BungeeMethod.REDIS)) {
if (getConfig().getSendVotesToAllServers()) {
for (String s : getAllAvailableServers()) {
boolean forceCache = false;
if (!isPlayerOnline(player) && getConfig().getWaitForUserOnline()) {
forceCache = true;
debug("Forcing vote to cache");
}
if (getConfig().getBroadcast()) {
sendMessageServer(s, "VoteBroadcast", uuid, player, service);
}
if (!isSomeoneOnlineServer(s) || forceCache) {
// cache
if (!cachedVotes.containsKey(s)) {
cachedVotes.put(s, new ArrayList<>());
}
ArrayList<OfflineBungeeVote> list = cachedVotes.get(s);
list.add(new OfflineBungeeVote(player, uuid, service, time, realVote, text.toString()));
cachedVotes.put(s, list);
debug("Caching vote for " + player + " on " + service + " for " + s);
} else {
// send
sendMessageServer(s, "Vote", player, uuid, service, "" + time, Boolean.TRUE.toString(),
"" + realVote, text.toString(), "" + getConfig().getBungeeManageTotals(),
"" + BungeeVersion.getPluginMessageVersion(), "" + getConfig().getBroadcast(), "1",
"1");
}
if (getConfig().getSendVotesToAllServers()) {
for (String s : getAllAvailableServers()) {
boolean forceCache = false;
if (!isPlayerOnline(player) && getConfig().getWaitForUserOnline()) {
forceCache = true;
debug("Forcing vote to cache");
}
} else {
if (isPlayerOnline(player) && getAllAvailableServers().contains(getCurrentPlayerServer(player))) {
sendMessageServer(getCurrentPlayerServer(player), "VoteOnline", player, uuid, service,
"" + time, Boolean.TRUE.toString(), "" + realVote, text.toString(),
if (getConfig().getBroadcast()) {
globalMessageProxyHandler.sendMessage(s, "VoteBroadcast", uuid, player, service);
}
if ((!isSomeoneOnlineServer(s) && method.requiresPlayerOnline()) || forceCache) {
// cache
if (!cachedVotes.containsKey(s)) {
cachedVotes.put(s, new ArrayList<>());
}
ArrayList<OfflineBungeeVote> list = cachedVotes.get(s);
list.add(new OfflineBungeeVote(player, uuid, service, time, realVote, text.toString()));
cachedVotes.put(s, list);
debug("Caching vote for " + player + " on " + service + " for " + s);
} else {
// send
globalMessageProxyHandler.sendMessage(s, "Vote", player, uuid, service, "" + time,
Boolean.TRUE.toString(), "" + realVote, text.toString(),
"" + getConfig().getBungeeManageTotals(), "" + BungeeVersion.getPluginMessageVersion(),
"" + getConfig().getBroadcast(), "1", "1");
if (getConfig().getMultiProxySupport() && getConfig().getMultiProxyOneGlobalReward()) {
multiProxyHandler.sendMultiProxyServerMessage("ClearVote", player, uuid);
}
} else {
if (!cachedOnlineVotes.containsKey(uuid)) {
cachedOnlineVotes.put(uuid, new ArrayList<>());
}
ArrayList<OfflineBungeeVote> list = cachedOnlineVotes.get(uuid);
if (list == null) {
list = new ArrayList<>();
}
list.add(new OfflineBungeeVote(player, uuid, service, time, realVote, text.toString()));
cachedOnlineVotes.put(uuid, list);
debug("Caching online vote for " + player + " on " + service);
}
for (String s : getAllAvailableServers()) {
if (getConfig().getBroadcast()) {
sendMessageServer(s, "VoteBroadcast", uuid, player, service);
}
sendMessageServer(s, "VoteUpdate", uuid, "" + votePartyVotes,
"" + currentVotePartyVotesRequired, text.toString());
}
}
} else if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service, text);
} else {
if (isPlayerOnline(player) && getAllAvailableServers().contains(getCurrentPlayerServer(player))) {
globalMessageProxyHandler.sendMessage(getCurrentPlayerServer(player), "VoteOnline", player, uuid,
service, "" + time, Boolean.TRUE.toString(), "" + realVote, text.toString(),
"" + getConfig().getBungeeManageTotals(), "" + BungeeVersion.getPluginMessageVersion(),
"" + getConfig().getBroadcast(), "1", "1");
if (getConfig().getMultiProxySupport() && getConfig().getMultiProxyOneGlobalReward()) {
multiProxyHandler.sendMultiProxyServerMessage("ClearVote", player, uuid);
}
} else {
if (!cachedOnlineVotes.containsKey(uuid)) {
cachedOnlineVotes.put(uuid, new ArrayList<>());
}
ArrayList<OfflineBungeeVote> list = cachedOnlineVotes.get(uuid);
if (list == null) {
list = new ArrayList<>();
}
list.add(new OfflineBungeeVote(player, uuid, service, time, realVote, text.toString()));
cachedOnlineVotes.put(uuid, list);
debug("Caching online vote for " + player + " on " + service);
}
for (String s : getAllAvailableServers()) {
if (getConfig().getBroadcast()) {
globalMessageProxyHandler.sendMessage(s, "VoteBroadcast", uuid, player, service);
}
globalMessageProxyHandler.sendMessage(s, "VoteUpdate", uuid, "" + votePartyVotes,
"" + currentVotePartyVotesRequired, text.toString());
}
}
if (getConfig().getMultiProxySupport() && getConfig().getPrimaryServer()) {
if (!getConfig().getMultiProxyOneGlobalReward()) {
debug("Seending global proxy vote message");
@@ -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;
@@ -28,6 +28,16 @@ public interface VotingPluginProxyConfig {
public boolean getDebug();
public String getMqttClientID();
public String getMqttBrokerURL();
public String getMqttUsername();
public String getMqttPassword();
public String getMqttPrefix();
public String getFallBack();
public boolean getGlobalDataEnabled();
@@ -120,6 +130,18 @@ public interface VotingPluginProxyConfig {
public List<String> getWhiteListedServers();
public Collection<String> getWaitUntilVoteDelaySites();
public String getWaitUntilVoteDelayService(String site);
public int getWaitUntilVoteDelayVoteDelay(String site);
public int getWaitUntilVoteDelayVoteDelayMin(String site);
public int getWaitUntilVoteDelayVoteDelayHour(String site);
public boolean getWaitUntilVoteDelayVoteDelayDaily(String site);
public void load();
public void save();
@@ -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;
@@ -33,226 +33,306 @@ public class Config implements VotingPluginProxyConfig {
return map;
}
@Override
public boolean getAllowUnJoined() {
return getData().getBoolean("AllowUnJoined", false);
}
@Override
public String getBedrockPlayerPrefix() {
return getData().getString("BedrockPlayerPrefix", ".");
}
@Override
public List<String> getBlockedServers() {
return getData().getStringList("BlockedServers");
}
@Override
public boolean getBroadcast() {
return getData().getBoolean("Broadcast", false);
}
@Override
public String getBungeeHost() {
return getData().getString("BungeeServer.Host", "");
}
@Override
public boolean getBungeeManageTotals() {
return getData().getBoolean("BungeeManageTotals", true);
}
@Override
public String getBungeeMethod() {
return getData().getString("BungeeMethod", "SOCKETS");
}
@Override
public int getBungeePort() {
return getData().getInt("BungeeServer.Port", 1297);
}
@Override
public boolean getDebug() {
return getData().getBoolean("Debug", false);
}
@Override
public String getFallBack() {
return getData().getString("FallBackServer", "");
}
@Override
public boolean getGlobalDataEnabled() {
return getData().getBoolean("GlobalData.Enabled", false);
}
@Override
public boolean getGlobalDataUseMainMySQL() {
return getData().getBoolean("GlobalData.UseMainMySQL", true);
}
@Override
public int getLimitVotePoints() {
return getData().getInt("LimitVotePoints", -1);
}
@Override
public int getMaxAmountOfVotesPerDay() {
return getData().getInt("MaxAmountOfVotesPerDay", -1);
}
@Override
public String getMultiProxyMethod() {
return getData().getString("MultiProxyMethod", "SOCKET");
}
@Override
public boolean getMultiProxyOneGlobalReward() {
return getData().getBoolean("MultiProxyOneGlobalReward", false);
}
@Override
public String getMultiProxyRedisHost() {
return getData().getString("MultiProxyRedis.Host", "");
}
@Override
public String getMultiProxyRedisPassword() {
return getData().getString("MultiProxyRedis.Password", "");
}
@Override
public int getMultiProxyRedisPort() {
return getData().getInt("MultiProxyRedis.Port", 6379);
}
@Override
public boolean getMultiProxyRedisUseExistingConnection() {
return getData().getBoolean("MultiProxyRedis.UseExistingConnection", false);
}
@Override
public String getMultiProxyRedisUsername() {
return getData().getString("MultiProxyRedis.Username", "");
}
@Override
public Collection<String> getMultiProxyServers() {
return getData().getSection("MultiProxyServers").getKeys();
}
@Override
public Map<String, Object> getMultiProxyServersConfiguration(String s) {
return configToMap(getData().getSection("MultiProxyServers." + s));
}
@Override
public String getMultiProxySocketHostHost() {
return getData().getString("MultiProxySocketHost.Host", "");
}
@Override
public int getMultiProxySocketHostPort() {
return getData().getInt("MultiProxySocketHost.Port", 1297);
}
@Override
public boolean getMultiProxySupport() {
return getData().getBoolean("MultiProxySupport", false);
}
@Override
public boolean getOnlineMode() {
return getData().getBoolean("OnlineMode", true);
}
@Override
public int getPointsOnVote() {
return getData().getInt("PointsOnVote", 1);
}
@Override
public boolean getPrimaryServer() {
return getData().getBoolean("PrimaryServer", false);
}
@Override
public String getProxyServerName() {
return getData().getString("ProxyServerName", "SOCKET");
}
@Override
public List<String> getProxyServers() {
return getData().getStringList("ProxyServers");
}
@Override
public String getRedisHost() {
return getData().getString("Redis.Host", "");
}
@Override
public String getRedisPassword() {
return getData().getString("Redis.Password", "");
}
@Override
public int getRedisPort() {
return getData().getInt("Redis.Port", 6379);
}
@Override
public String getRedisPrefix() {
return getData().getString("Redis.Prefix", "");
}
@Override
public String getRedisUsername() {
return getData().getString("Redis.Username", "");
}
@Override
public boolean getSendVotesToAllServers() {
return getData().getBoolean("SendVotesToAllServers");
}
@Override
public Map<String, Object> getSpigotServerConfiguration(String s) {
return configToMap(getData().getSection("SpigotServers." + s));
}
@Override
public Collection<String> getSpigotServers() {
return getData().getSection("SpigotServers").getKeys();
}
@Override
public boolean getStoreMonthTotalsWithDate() {
return getData().getBoolean("StoreMonthTotalsWithDate", false);
}
@Override
public boolean getTimeChangeFailSafeBypass() {
return getData().getBoolean("TimeChangeFailSafeBypass", false);
}
@Override
public int getTimeHourOffSet() {
return getData().getInt("TimeHourOffSet");
}
@Override
public String getTimeZone() {
return getData().getString("TimeZone", "");
}
@Override
public boolean getUseMonthDateTotalsAsPrimaryTotal() {
return getData().getBoolean("UseMonthDateTotalsAsPrimaryTotal", false);
}
@Override
public boolean getUUIDLookup() {
return getData().getBoolean("UUIDLookup", true);
}
@Override
public int getVoteCacheTime() {
return getData().getInt("VoteCacheTime", -1);
}
@Override
public String getVotePartyBroadcast() {
return getData().getString("VoteParty.Broadcast", "");
}
@Override
public List<String> getVotePartyBungeeCommands() {
return getData().getStringList("VoteParty.BungeeCommands");
}
@Override
public boolean getVotePartyEnabled() {
return getData().getBoolean("VoteParty.Enabled", false);
}
@Override
public int getVotePartyIncreaseVotesRequired() {
return getData().getInt("VoteParty.IncreaseVotesRequired", 0);
}
@Override
public boolean getVotePartySendToAllServers() {
return getData().getBoolean("VoteParty.SendToAllServers", true);
}
@Override
public List<String> getVotePartyServersToSend() {
return getData().getStringList("VoteParty.ServersToSend");
}
@Override
public int getVotePartyVotesRequired() {
return getData().getInt("VoteParty.VotesRequired", 100);
}
@Override
public boolean getWaitForUserOnline() {
return getData().getBoolean("WaitForUserOnline", false);
}
@Override
public List<String> getWhiteListedServers() {
return getData().getStringList("WhiteListedServers");
}
@Override
public String getMqttClientID() {
return getData().getString("MQTT.ClientID", "proxy");
}
@Override
public String getMqttBrokerURL() {
return getData().getString("MQTT.BrokerURL", "tcp://localhost:1883");
}
@Override
public String getMqttUsername() {
return getData().getString("MQTT.Username", "");
}
@Override
public String getMqttPassword() {
return getData().getString("MQTT.Password", "");
}
@Override
public String getMqttPrefix() {
return getData().getString("MQTT.Prefix", "");
}
public void load() {
if (!bungee.getDataFolder().exists()) {
bungee.getDataFolder().mkdir();
@@ -294,4 +374,34 @@ public class Config implements VotingPluginProxyConfig {
return getData().getBoolean("PluginMessageEncryption", false);
}
@Override
public Collection<String> getWaitUntilVoteDelaySites() {
return getData().getSection("WaitUntilVoteDelay").getKeys();
}
@Override
public String getWaitUntilVoteDelayService(String site) {
return getData().getString("WaitUntilVoteDelay." + site + ".ServiceSite", "");
}
@Override
public int getWaitUntilVoteDelayVoteDelay(String site) {
return getData().getInt("WaitUntilVoteDelay." + site + ".VoteDelay", 24);
}
@Override
public boolean getWaitUntilVoteDelayVoteDelayDaily(String site) {
return getData().getBoolean("WaitUntilVoteDelay." + site + ".VoteDelayDaily", false);
}
@Override
public int getWaitUntilVoteDelayVoteDelayHour(String site) {
return getData().getInt("WaitUntilVoteDelay." + site + ".VoteDelayDailyHour", 0);
}
@Override
public int getWaitUntilVoteDelayVoteDelayMin(String site) {
return getData().getInt("WaitUntilVoteDelay." + site + ".VoteDelayMin", 0);
}
}
@@ -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;
@@ -20,15 +20,20 @@ import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import com.bencodez.advancedcore.api.time.TimeType;
import com.bencodez.advancedcore.api.user.userstorage.DataType;
import com.bencodez.advancedcore.api.user.userstorage.mysql.api.config.MysqlConfigBungee;
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.simpleapi.sql.DataType;
import com.bencodez.simpleapi.sql.mysql.config.MysqlConfigBungee;
import com.bencodez.votingplugin.proxy.BungeeMethod;
import com.bencodez.votingplugin.proxy.BungeeVersion;
import com.bencodez.votingplugin.proxy.OfflineBungeeVote;
import com.bencodez.votingplugin.proxy.ProxyMysqlUserTable;
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;
@@ -131,7 +136,8 @@ public class VotingPluginBungee extends Plugin implements Listener {
}
private void loadMysql() {
votingPluginProxy.setProxyMySQL(new BungeeMySQL(this, "VotingPlugin_Users", config.getData()) {
votingPluginProxy.setProxyMySQL(new ProxyMysqlUserTable("VotingPlugin_Users",
new MysqlConfigBungee(config.getData()), config.getDebug()) {
@Override
public void debug(SQLException e) {
@@ -139,6 +145,23 @@ public class VotingPluginBungee extends Plugin implements Listener {
e.printStackTrace();
}
}
@Override
public void logSevere(String string) {
getLogger().severe(string);
}
@Override
public void logInfo(String string) {
getLogger().info(string);
}
@Override
public void severe(String string) {
getLogger().severe(string);
}
});
ArrayList<String> servers = new ArrayList<>();
@@ -152,14 +175,14 @@ public class VotingPluginBungee extends Plugin implements Listener {
new GlobalMySQL("VotingPlugin_GlobalData", getVotingPluginProxy().getProxyMySQL().getMysql()) {
@Override
public void debug(Exception e) {
public void debugEx(Exception e) {
if (config.getDebug()) {
e.printStackTrace();
}
}
@Override
public void debug(String text) {
public void debugLog(String text) {
debug2(text);
}
@@ -170,7 +193,7 @@ public class VotingPluginBungee extends Plugin implements Listener {
}
@Override
public void severe(String text) {
public void logSevere(String text) {
getLogger().severe(text);
}
@@ -218,14 +241,14 @@ public class VotingPluginBungee extends Plugin implements Listener {
new MysqlConfigBungee(config.getData().getSection("GlobalData"))) {
@Override
public void debug(Exception e) {
public void debugEx(Exception e) {
if (config.getDebug()) {
e.printStackTrace();
}
}
@Override
public void debug(String text) {
public void debugLog(String text) {
debug2(text);
}
@@ -236,7 +259,7 @@ public class VotingPluginBungee extends Plugin implements Listener {
}
@Override
public void severe(String text) {
public void logSevere(String text) {
getLogger().severe(text);
}
@@ -490,22 +513,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 +554,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 +584,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 +632,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 +671,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 +699,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 +724,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 +760,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,17 +1,17 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.multiproxy;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import com.bencodez.advancedcore.api.misc.encryption.EncryptionHandler;
import com.bencodez.advancedcore.bungeeapi.redis.RedisHandler;
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.simpleapi.encryption.EncryptionHandler;
import com.bencodez.simpleapi.servercomm.redis.RedisHandler;
import com.bencodez.simpleapi.servercomm.redis.RedisListener;
import com.bencodez.simpleapi.servercomm.sockets.ClientHandler;
import com.bencodez.simpleapi.servercomm.sockets.SocketHandler;
import com.bencodez.simpleapi.servercomm.sockets.SocketReceiver;
import com.bencodez.votingplugin.proxy.BungeeMessageData;
import lombok.Getter;
@@ -83,7 +83,7 @@ public abstract class MultiProxyHandler {
if (getMultiProxySupportEnabled()) {
if (getMultiProxyMethod().equals(MultiProxyMethod.SOCKETS)) {
if (getEncryptionHandler() == null) {
setEncryptionHandler(new EncryptionHandler(new File(getPluginDataFolder(), "secretkey.key")));
setEncryptionHandler(new EncryptionHandler("VotingPlugin",new File(getPluginDataFolder(), "secretkey.key")));
}
if (multiproxySocketHandler != null) {
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.multiproxy;
public enum MultiProxyMethod {
SOCKETS, REDIS;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.multiproxy;
public interface MultiProxyServerSocketConfiguration {
String getHost();
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.multiproxy;
import java.util.Map;
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.global.multiproxy;
package com.bencodez.votingplugin.proxy.multiproxy;
import ninja.leaping.configurate.ConfigurationNode;
@@ -1,7 +1,8 @@
package com.bencodez.votingplugin.bungee.velocity;
package com.bencodez.votingplugin.proxy.velocity;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -9,7 +10,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;
@@ -19,90 +20,113 @@ public class Config extends VelocityYMLFile implements VotingPluginProxyConfig {
super(file);
}
@Override
public boolean getAllowUnJoined() {
return getBoolean(getNode("AllowUnJoined"), false);
}
@Override
public String getBedrockPlayerPrefix() {
return getString(getNode("BedrockPlayerPrefix"), ".");
}
@Override
public List<String> getBlockedServers() {
return getStringList(getNode("BlockedServers"), new ArrayList<>());
}
@Override
public boolean getBroadcast() {
return getBoolean(getNode("Broadcast"), false);
}
@Override
public String getBungeeHost() {
return getString(getNode("BungeeServer", "Host"), "");
}
@Override
public boolean getBungeeManageTotals() {
return getBoolean(getNode("BungeeManageTotals"), true);
}
@Override
public String getBungeeMethod() {
return getString(getNode("BungeeMethod"), "PLUGINMESSAGING");
}
@Override
public int getBungeePort() {
return getInt(getNode("BungeeServer", "Port"), 1297);
}
@Override
public boolean getDebug() {
return getBoolean(getNode("Debug"), false);
}
@Override
public String getFallBack() {
return getString(getNode("FallBackServer"), "");
}
@Override
public boolean getGlobalDataEnabled() {
return getBoolean(getNode("GlobalData", "Enabled"), false);
}
@Override
public boolean getGlobalDataUseMainMySQL() {
return getBoolean(getNode("GlobalData", "UseMainMySQL"), true);
}
@Override
public int getLimitVotePoints() {
return getInt(getNode("LimitVotePoints"), -1);
}
@Override
public int getMaxAmountOfVotesPerDay() {
return getInt(getNode("MaxAmountOfVotesPerDay"), -1);
}
@Override
public String getMultiProxyMethod() {
return getString(getNode("MultiProxyMethod"), "SOCKET");
}
@Override
public boolean getMultiProxyOneGlobalReward() {
return getBoolean(getNode("MultiProxyOneGlobalReward"), false);
}
@Override
public String getMultiProxyRedisHost() {
return getString(getNode("MultiProxyRedis", "Host"), "");
}
@Override
public String getMultiProxyRedisPassword() {
return getString(getNode("MultiProxyRedis", "Password"), "");
}
@Override
public int getMultiProxyRedisPort() {
return getInt(getNode("MultiProxyRedis", "Port"), 6379);
}
@Override
public boolean getMultiProxyRedisUseExistingConnection() {
return getBoolean(getNode("MultiProxyRedis", "UseExistingConnection"), false);
}
@Override
public String getMultiProxyRedisUsername() {
return getString(getNode("MultiProxyRedis", "Username"), "");
}
@Override
public @NonNull List<String> getMultiProxyServers() {
return getChildrenAsList(getNode("MultiProxyServers"));
}
@@ -117,18 +141,22 @@ public class Config extends VelocityYMLFile implements VotingPluginProxyConfig {
return children;
}
@Override
public Map<String, Object> getMultiProxyServersConfiguration(String s) {
return configToMap(getNode("MultiProxyServers", s));
}
@Override
public String getMultiProxySocketHostHost() {
return getString(getNode("MultiProxySocketHost", "Host"), "");
}
@Override
public int getMultiProxySocketHostPort() {
return getInt(getNode("MultiProxySocketHost", "Port"), 1297);
}
@Override
public boolean getMultiProxySupport() {
return getBoolean(getNode("MultiProxySupport"), false);
}
@@ -137,54 +165,91 @@ public class Config extends VelocityYMLFile implements VotingPluginProxyConfig {
return getNode("MySQL");
}
@Override
public boolean getOnlineMode() {
return getBoolean(getNode("OnlineMode"), true);
}
@Override
public int getPointsOnVote() {
return getInt(getNode("PointsOnVote"), 1);
}
@Override
public boolean getPrimaryServer() {
return getBoolean(getNode("PrimaryServer"), false);
}
@Override
public String getProxyServerName() {
return getString(getNode("ProxyServerName"), "SOCKET");
}
@Override
public List<String> getProxyServers() {
return getStringList(getNode("ProxyServers"), new ArrayList<>());
}
@Override
public String getRedisHost() {
return getString(getNode("Redis", "Host"), "");
}
@Override
public String getRedisPassword() {
return getString(getNode("Redis", "Password"), "");
}
@Override
public int getRedisPort() {
return getInt(getNode("Redis", "Port"), 6379);
}
@Override
public String getRedisPrefix() {
return getString(getNode("Redis", "Prefix"), "");
}
@Override
public String getRedisUsername() {
return getString(getNode("Redis", "Username"), "");
}
@Override
public boolean getSendVotesToAllServers() {
return getBoolean(getNode("SendVotesToAllServers"), true);
}
@Override
public Map<String, Object> getSpigotServerConfiguration(String s) {
return configToMap(getNode("SpigotServers", s));
}
@Override
public String getMqttClientID() {
return getString(getNode("MQTT", "ClientID"), "proxy");
}
@Override
public String getMqttBrokerURL() {
return getString(getNode("MQTT", "BrokerURL"), "tcp://localhost:1883");
}
@Override
public String getMqttUsername() {
return getString(getNode("MQTT", "Username"), "");
}
@Override
public String getMqttPassword() {
return getString(getNode("MQTT", "Password"), "");
}
@Override
public String getMqttPrefix() {
return getString(getNode("MQTT", "Prefix"), "");
}
public Map<String, Object> configToMap(ConfigurationNode config) {
Map<String, Object> map = new HashMap<>();
if (config != null) {
@@ -195,42 +260,52 @@ public class Config extends VelocityYMLFile implements VotingPluginProxyConfig {
return map;
}
@Override
public @NonNull List<String> getSpigotServers() {
return getChildrenAsList(getNode("SpigotServers"));
}
@Override
public boolean getStoreMonthTotalsWithDate() {
return getBoolean(getNode("StoreMonthTotalsWithDate"), false);
}
@Override
public boolean getTimeChangeFailSafeBypass() {
return getBoolean(getNode("TimeChangeFailSafeBypass"), false);
}
@Override
public boolean getUseMonthDateTotalsAsPrimaryTotal() {
return getBoolean(getNode("UseMonthDateTotalsAsPrimaryTotal"), false);
}
@Override
public boolean getUUIDLookup() {
return getBoolean(getNode("UUIDLookup"), true);
}
@Override
public int getVoteCacheTime() {
return getInt(getNode("VoteCacheTime"), -1);
}
@Override
public String getVotePartyBroadcast() {
return getString(getVotePartyNode().getNode("Broadcast"), "");
}
@Override
public List<String> getVotePartyBungeeCommands() {
return getStringList(getVotePartyNode().getNode("BungeeCommands"), new ArrayList<>());
}
@Override
public boolean getVotePartyEnabled() {
return getBoolean(getVotePartyNode().getNode("Enabled"), false);
}
@Override
public int getVotePartyIncreaseVotesRequired() {
return getInt(getVotePartyNode().getNode("IncreaseVotesRequired"), 0);
}
@@ -239,22 +314,27 @@ public class Config extends VelocityYMLFile implements VotingPluginProxyConfig {
return getNode("VoteParty");
}
@Override
public boolean getVotePartySendToAllServers() {
return getBoolean(getVotePartyNode().getNode("SendToAllServers"), false);
}
@Override
public List<String> getVotePartyServersToSend() {
return getStringList(getVotePartyNode().getNode("ServersToSend"), new ArrayList<>());
}
@Override
public int getVotePartyVotesRequired() {
return getInt(getVotePartyNode().getNode("VotesRequired"), 100);
}
@Override
public boolean getWaitForUserOnline() {
return getBoolean(getNode("WaitForUserOnline"), false);
}
@Override
public List<String> getWhiteListedServers() {
return getStringList(getNode("WhiteListedServers"), new ArrayList<>());
}
@@ -285,4 +365,34 @@ public class Config extends VelocityYMLFile implements VotingPluginProxyConfig {
return getBoolean(getNode("PluginMessageEncryption"), false);
}
@Override
public Collection<String> getWaitUntilVoteDelaySites() {
return getChildrenAsList(getNode("WaitUntilVoteDelay"));
}
@Override
public String getWaitUntilVoteDelayService(String site) {
return getString(getNode("WaitUntilVoteDelay", site, "ServiceSite"), "");
}
@Override
public int getWaitUntilVoteDelayVoteDelay(String site) {
return getInt(getNode("WaitUntilVoteDelay", site, "VoteDelay"), 24);
}
@Override
public boolean getWaitUntilVoteDelayVoteDelayDaily(String site) {
return getBoolean(getNode("WaitUntilVoteDelay", site, "VoteDelayDaily"), false);
}
@Override
public int getWaitUntilVoteDelayVoteDelayHour(String site) {
return getInt(getNode("WaitUntilVoteDelay", site, "VoteDelayDailyHour"), 0);
}
@Override
public int getWaitUntilVoteDelayVoteDelayMin(String site) {
return getInt(getNode("WaitUntilVoteDelay", site, "VoteDelayMin"), 0);
}
}
@@ -1,4 +1,4 @@
package com.bencodez.votingplugin.bungee.velocity;
package com.bencodez.votingplugin.proxy.velocity;
import java.io.File;
Loaded 100 of 136 files, more files were not shown because too many files have changed in this diff. Show more