Compare commits

..
13 Commits
Author SHA1 Message Date
Ben12345rocks 7268017dc1 Javadoc fix 2019-10-19 20:22:30 -04:00
Ben12345rocks 4133480750 Update version number 2019-10-19 20:08:25 -04:00
Ben12345rocks 006a265c7a Improvements 2019-10-16 19:29:50 -04:00
Ben12345rocks 6850ef8a7d Improvements 2019-10-13 20:37:46 -04:00
Ben12345rocks 497f556ba6 Improvements 2019-10-13 19:21:38 -04:00
Ben12345rocks d62da744cd Add ability to disable commands 2019-10-12 17:08:20 -04:00
Ben12345rocks 864482e393 Bug fix 2019-10-12 15:27:12 -04:00
Ben12345rocks e41c25ed5d More bungeecoord improvements 2019-10-09 19:20:26 -04:00
Ben12345rocks 3e429b83a8 Bug fix 2019-10-09 17:01:03 -04:00
Ben12345rocks cd1af401ba Added config update command 2019-10-06 19:10:45 -04:00
Ben12345rocks 26e04bd890 Remove config update, requires more testing 2019-10-06 17:03:51 -04:00
Ben12345rocks b6d70fac9c Add config update to update config 2019-10-06 17:02:09 -04:00
Ben12345rocks 9e572c786c Add ability for plugin to run on bungeecoord, WIP 2019-10-06 15:00:53 -04:00
18 changed files with 1001 additions and 63 deletions

No files matched your search

+22 -7
View File
@@ -2,7 +2,9 @@
# Main Config
# See wiki for help:
# https://github.com/Ben12345rocks/VotingPlugin/wiki
# Config is sorted in sections
# Use Control + F to search with Notepad++
#
# Valid Options:
# - SQLITE
# - FLAT
@@ -941,6 +943,22 @@ LoadSkulls: true
# May not work on some plugins
UseVaultPermissions: false
# Plugin using bungee, requires plugin on bungee server
UseBungeecoord: false
# What server this is in bungee (must match)
# Also can be applied to rewards
Server: PleaseSet
# Get the plugin to broadcast to all servers
BungeeBroadcast: false
# List of disabled commands from /vote
# List the specific permission
# E.g:
# - PERMISSION
DisabledCommands: []
# ---------------------------------------------------------
# Mysql cache options
# Clearing cache forces the plugin to pull from database
@@ -957,11 +975,12 @@ ClearCacheOnJoin: false
# Would recommend for some bungee setups
ClearCacheOnVote: false
# Will force GUI's to close on every click
AlwaysCloseInventory: false
# ###############################################################
# Deprecated options, don't recommend using any of these
AlwaysCloseInventory: false
# Options for request api
# Current methods:
# ANVIL
@@ -972,10 +991,6 @@ RequestAPI:
DefaultMethod: 'Anvil'
DisabledMethods: []
# Whether or not to disable checking names on mojang, disable if you hit the rate limit
# Shouldn't make a noticeable impact if set to false
#CheckNameMojang: false
# Shouldn't need to change this
#AutoKillInvs: true
+3 -1
View File
@@ -25,6 +25,8 @@ VoteSites:
# vote url for /vote
# Format for this can be set in Format.yml
# Do not include colors here
# If you need to force a url set the url as this:
# VoteURL: '[Text="ANY TEXT TO CLICK ON HERE",url="URLHERE"]'
VoteURL: 'link to vote URL here, used in /vote'
# Time between votes in hours (used for /vote next)
@@ -44,7 +46,7 @@ VoteSites:
# This basiclly disables offline voting if set to true, don't misinterpret this option
ForceOffline: false
# VoteSite Material for GUI's
# VoteSite Material for some GUI's
# Removing this may result in an error, required on each site
Item:
Material: 'DIAMOND'
+4
View File
@@ -0,0 +1,4 @@
name: ${project.name}
version: ${project.version}
main: com.Ben12345rocks.VotingPlugin.bungee.Bungee
author: Ben12345rocks
+27
View File
@@ -0,0 +1,27 @@
# STILL A WORK IN PROGRESS, USE AT YOUR OWN RISK
#
# Set bungeecoord to true on servers on the network
# Set server name in each server related to what it is on bungee
#
# Have a reward on each server
SendVotesToAllServers: true
# Have a reward on 1 server on the network
SendToOnlineServer: false
# MYSQL Required
# MYSQL INFO --------------------------
Host: ''
# Default port is 3306
Port: 3306
Database: ''
Username: ''
Password: ''
# Max number of connections
MaxConnections: 1
# Maxium size of caching mysql
# -1 for no limit
# Affecting this value may affect performance
MaxSize: -1
# Table name prefix, for use with mutliple servers
Prefix: ''
#UseSSL: true
#########################################
+32 -1
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.Ben12345rocks</groupId>
<artifactId>VotingPlugin</artifactId>
<version>5.20.2</version>
<version>5.20.3</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -27,6 +27,7 @@
<filtering>true</filtering>
<includes>
<include>plugin.yml</include>
<include>bungee.yml</include>
</includes>
</resource>
<resource>
@@ -233,6 +234,18 @@
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>maven-central</id>
<url>https://oss.sonatype.org/content/groups/public</url>
</repository>
<repository>
<id>bungeecord-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
<repository>
<id>bintray-repo</id>
<url>https://dl.bintray.com/nuvotifier/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
@@ -240,6 +253,7 @@
<artifactId>AdvancedCore</artifactId>
<version>master-SNAPSHOT</version>
</dependency>
<!-- <dependency> <groupId>com.Ben12345rocks</groupId> <artifactId>AdvancedCore</artifactId>
<version>LATEST</version> <scope>compile</scope> </dependency> -->
<dependency>
@@ -289,5 +303,22 @@
<scope>system</scope>
<systemPath>${project.basedir}/Jars/MVdWPlaceholderAPI.jar</systemPath>
</dependency>
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>LATEST</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.vexsoftware</groupId>
<artifactId>nuvotifier-universal</artifactId>
<version>2.3.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.tchristofferson</groupId>
<artifactId>ConfigUpdater</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,47 @@
package com.Ben12345rocks.VotingPlugin;
import java.util.ArrayList;
import java.util.UUID;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessage;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessageHandler;
import com.Ben12345rocks.VotingPlugin.Objects.User;
import com.Ben12345rocks.VotingPlugin.Objects.VoteSite;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
public class BungeeHandler {
private static BungeeHandler instance = new BungeeHandler();
public static BungeeHandler getInstance() {
return instance;
}
public void load() {
PluginMessage.getInstance().add(new PluginMessageHandler("bungeevote") {
@Override
public void onRecieve(String subchannel, ArrayList<String> data) {
String uuid = data.get(0);
Main.plugin.getMysql().clearCache(uuid);
User user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
user.bungeeVote();
}
});
PluginMessage.getInstance().add(new PluginMessageHandler("Broadcast") {
@Override
public void onRecieve(String subchannel, ArrayList<String> data) {
VoteSite site = Main.plugin.getVoteSite(data.get(0));
String p = data.get(1);
User user = UserManager.getInstance().getVotingPluginUser(p);
if (site != null) {
site.broadcastVote(user, false);
} else {
Main.plugin.getLogger().warning("No votesite for " + data.get(0));
}
Main.plugin.setUpdate(true);
}
});
}
}
@@ -1,5 +1,7 @@
package com.Ben12345rocks.VotingPlugin.Commands;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -58,6 +60,7 @@ import com.mythicacraft.voteroulette.Voter;
import com.swifteh.GAL.GAL;
import com.swifteh.GAL.GALVote;
import com.swifteh.GAL.VoteType;
import com.tchristofferson.configupdater.ConfigUpdater;
import io.minimum.minecraft.superbvote.SuperbVote;
import io.minimum.minecraft.superbvote.util.PlayerVotes;
@@ -768,6 +771,37 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "Config", "Update" },
"VotingPlugin.Commands.AdminVote.Config.Edit|" + adminPerm, "Updates config with missing values") {
@Override
public void execute(CommandSender sender, String[] args) {
ArrayList<String> ignoreSections = new ArrayList<String>();
ignoreSections.add("VoteReminding");
ignoreSections.add("GUI");
ignoreSections.add("Shop");
ignoreSections.add("FirstVote");
ignoreSections.add("AllSites");
ignoreSections.add("Cummulative");
ignoreSections.add("VoteParty");
ignoreSections.add("MileStones");
ignoreSections.add("VoteStreak");
ignoreSections.add("MonthlyAwards");
ignoreSections.add("WeeklyAwards");
ignoreSections.add("DailyAwards");
File file = new File(plugin.getDataFolder(), "Config.yml");
try {
ConfigUpdater.update(plugin, "Config.yml", file, ignoreSections);
} catch (IOException e) {
e.printStackTrace();
}
config.reloadData();
config.loadValues();
sendMessage(sender, "&cUpdated config with new values");
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "Config", "TempExtraDebug" },
"VotingPlugin.Commands.AdminVote.Config.Edit|" + adminPerm,
@@ -2082,6 +2116,24 @@ public class CommandLoader {
cmd.setPerm(cmd.getPerm() + "|" + playerPerm);
}
plugin.getVoteCommand().addAll(avCommands);
ArrayList<CommandHandler> list = plugin.getVoteCommand();
ArrayList<String> disabledCommands = Config.getInstance().getDisabledCommands();
for (int i = list.size() - 1; i >= 0; i--) {
boolean remove = false;
for (String disabled : disabledCommands) {
CommandHandler handle = list.get(i);
if (handle.getPerm().contains(disabled)) {
remove = true;
}
}
if (remove) {
plugin.debug("Disabling: " + ArrayUtils.getInstance()
.makeStringList(ArrayUtils.getInstance().convert(list.get(i).getArgs())));
list.remove(i);
}
}
}
/**
@@ -11,6 +11,7 @@ import com.Ben12345rocks.AdvancedCore.Util.Annotation.AnnotationHandler;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataBoolean;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataDouble;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataInt;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataListString;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataString;
import com.Ben12345rocks.AdvancedCore.YML.YMLFile;
import com.Ben12345rocks.VotingPlugin.Main;
@@ -137,7 +138,15 @@ public class Config extends YMLFile {
@ConfigDataBoolean(path = "AutoCreateVoteSites")
@Getter
private boolean autoCreateVoteSites = true;
@ConfigDataBoolean(path = "UseBungeecoord")
@Getter
private boolean useBungeeCoord = false;
@ConfigDataBoolean(path = "BungeeBroadcast")
@Getter
private boolean bungeeBroadcast = false;
@ConfigDataBoolean(path = "GUI.VoteURL.AllUrlsButton.RequireAllSitesVoted")
@Getter
private boolean guiVoteURLAllUrlsButtonrequireAllSitesVoted = true;
@@ -302,6 +311,10 @@ public class Config extends YMLFile {
@ConfigDataBoolean(path = "AllowUnJoinedCheckServer")
@Getter
private boolean allowUnJoinedCheckServer = true;
@ConfigDataListString(path = "DisabledCommands")
@Getter
private ArrayList<String> disabledCommands = new ArrayList<String>();
/**
* Instantiates a new config.
@@ -45,6 +45,10 @@ public class PlayerVoteEvent extends Event {
@Getter
@Setter
private String serviceSite = "";
@Getter
@Setter
private long time;
public PlayerVoteEvent(VoteSite voteSite, String voteUsername, String serviceSite, boolean realVote) {
super(true);
@@ -63,4 +67,8 @@ public class PlayerVoteEvent extends Event {
return handlers;
}
@Getter
@Setter
private boolean bungee = false;
}
@@ -8,6 +8,7 @@ import org.bukkit.event.Listener;
import com.Ben12345rocks.AdvancedCore.Listeners.AdvancedCoreLoginEvent;
import com.Ben12345rocks.AdvancedCore.UserManager.UserStorage;
import com.Ben12345rocks.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Objects.User;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
@@ -50,10 +51,15 @@ public class PlayerJoinEvent implements Listener {
user.sendMessage("&cVotingPlugin: Detected yml error, please check console for details");
}
boolean data = user.getData().hasData();
if (Main.plugin.getOptions().isProcessRewards() && Config.getInstance().isUseBungeeCoord() && data) {
user.bungeeVote();
}
// run remind
user.loginMessage();
if (user.getData().hasData()) {
if (data) {
// give offline vote (if they voted offline)
user.offVote();
}
@@ -84,7 +84,7 @@ public class PlayerVoteListener implements Listener {
User user = UserManager.getInstance().getVotingPluginUser(playerName);
user.updateName();
if (Config.getInstance().isClearCacheOnVote()) {
if (Config.getInstance().isClearCacheOnVote() || Config.getInstance().isUseBungeeCoord()) {
user.clearCache();
}
@@ -106,7 +106,11 @@ public class PlayerVoteListener implements Listener {
}
// update last vote time
user.setTime(voteSite);
if (event.getTime() != 0) {
user.setTime(voteSite, event.getTime());
} else {
user.setTime(voteSite);
}
user.setLastVoteCoolDownCheck(false, voteSite);
// check first vote rewards
@@ -118,8 +122,9 @@ public class PlayerVoteListener implements Listener {
// check if player has voted on all sites in one day
if ((user.isOnline() || voteSite.isGiveOffline()) && Main.plugin.getOptions().isProcessRewards()) {
user.playerVote(voteSite, true, false);
if (((user.isOnline() || voteSite.isGiveOffline()) && Main.plugin.getOptions().isProcessRewards())
|| event.isBungee()) {
user.playerVote(voteSite, true, false, event.isBungee());
user.closeInv();
} else {
user.addOfflineVote(voteSite.getKey());
@@ -243,8 +243,8 @@ public class Main extends AdvancedCorePlugin {
uuids.removeAll(converted);
plugin.getLogger()
.info("Finished getting data from " + from.toString() + " Converting " + data.size() + " users");
plugin.getLogger().info("Finished getting data from " + from.toString() + " Converting " + data.size()
+ " users, " + uuids.size() + " left to convert");
getOptions().setStorageType(to);
loadUserAPI(getOptions().getStorageType());
@@ -747,6 +747,17 @@ public class Main extends AdvancedCorePlugin {
@Override
public void onPostLoad() {
if (Config.getInstance().isUseBungeeCoord()) {
registerBungeeChannels();
BungeeHandler.getInstance().load();
if (Config.getInstance().isUseBungeeCoord()) {
if (getOptions().getServer().equalsIgnoreCase("PleaseSet")) {
getLogger().warning(
"Bungeecoord is true and server name is not set, bungeecoord features may not work");
}
}
}
registerCommands();
registerEvents();
checkVotifier();
@@ -1087,7 +1098,7 @@ public class Main extends AdvancedCorePlugin {
* Update.
*/
public void update() {
if (update || Config.getInstance().isAlwaysUpdate()) {
if (update || Config.getInstance().isAlwaysUpdate() || Config.getInstance().isUseBungeeCoord()) {
if (!updateStarted && plugin != null) {
if (!Config.getInstance().isUpdateWithPlayersOnlineOnly() || Bukkit.getOnlinePlayers().size() != 0) {
updateStarted = true;
@@ -1098,7 +1109,8 @@ public class Main extends AdvancedCorePlugin {
if (getMysql() == null) {
plugin.debug("MySQL not loaded yet");
return;
} else if (Config.getInstance().isClearCacheOnUpdate()) {
} else if (Config.getInstance().isClearCacheOnUpdate()
|| Config.getInstance().isUseBungeeCoord()) {
getMysql().clearCache();
} else {
getMysql().clearCacheBasic();
@@ -1127,13 +1139,18 @@ public class Main extends AdvancedCorePlugin {
ServerData.getInstance().updateValues();
Signs.getInstance().updateSigns();
boolean bungee = Config.getInstance().isUseBungeeCoord();
for (Player player : Bukkit.getOnlinePlayers()) {
UserManager.getInstance().getVotingPluginUser(player).offVote();
User user = UserManager.getInstance().getVotingPluginUser(player);
user.offVote();
if (bungee) {
user.bungeeVote(false);
}
}
time1 = ((System.currentTimeMillis() - time) / 1000);
plugin.debug("Background task finished in " + time1 + " seconds");
} catch (Exception ex) {
plugin.getLogger().info("Looks like something went wrong.");
plugin.getLogger().info("Looks like something went wrong");
ex.printStackTrace();
}
}
@@ -1170,8 +1187,8 @@ public class Main extends AdvancedCorePlugin {
}
} catch (Exception e) {
e.printStackTrace();
plugin.getLogger().warning("Exception occoured for '" + entry.getKey().getUUID() + "': "
+ e.getMessage() + ", turn debug on to see full stack traces");
plugin.getLogger()
.warning("Exception occoured for '" + entry.getKey().getUUID() + "': " + e.getMessage());
}
}
}
@@ -26,6 +26,7 @@ import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Config.ConfigVoteSites;
import com.Ben12345rocks.VotingPlugin.Events.PlayerReceivePointsEvent;
import com.Ben12345rocks.VotingPlugin.Events.PlayerVoteCoolDownEndEvent;
import com.Ben12345rocks.VotingPlugin.Events.PlayerVoteEvent;
import com.Ben12345rocks.VotingPlugin.SpecialRewards.SpecialRewards;
import com.Ben12345rocks.VotingPlugin.TopVoter.TopVoter;
import com.Ben12345rocks.VotingPlugin.VoteParty.VoteParty;
@@ -598,6 +599,47 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
.withPlaceHolder("votes", "" + getTotal(TopVoter.Weekly)).setOnline(isOnline()).send(this);
}
public void bungeeVote() {
bungeeVote(true);
}
public void bungeeVote(boolean clearCache) {
if (Config.getInstance().isUseBungeeCoord()) {
if (clearCache) {
Main.plugin.getMysql().clearCache(getUUID());
}
checkBungeeData(getData().getString("Proxy_" + Main.plugin.getOptions().getServer()));
getData().setString("Proxy_" + Main.plugin.getOptions().getServer(), "");
checkBungeeData(getData().getString("Proxy_Online"));
getData().setString("Proxy_Online", "");
}
}
private void checkBungeeData(String data) {
if (!data.isEmpty()) {
for (String serviceData : data.split("%line%")) {
String[] d = serviceData.split("%time%");
if (d.length == 2) {
String service = d[0];
String time = d[1];
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(),
service, false);
voteEvent.setBungee(true);
voteEvent.setTime(Long.parseLong(time));
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
}
}
/**
* Checks for gotten first vote.
*
@@ -661,6 +703,7 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
Main.plugin.debug("Processing rewards is disabled");
return;
}
Main.plugin.extraDebug("Checking offline vote site votes");
Player player = getPlayer();
if (player != null) {
@@ -679,7 +722,7 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
for (int i = 0; i < offlineVotes.size(); i++) {
if (plugin.hasVoteSite(offlineVotes.get(i))) {
plugin.debug("Giving offline site reward: " + offlineVotes.get(i));
playerVote(plugin.getVoteSite(offlineVotes.get(i)), false, true);
playerVote(plugin.getVoteSite(offlineVotes.get(i)), false, true, false);
} else {
plugin.debug("Site doesn't exist: " + offlineVotes.get(i));
}
@@ -689,22 +732,12 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
}
}
/**
* Player vote.
*
* @param voteSite
* the vote site
* @param online
* the online
* @param broadcast
* the broadcast
*/
public void playerVote(VoteSite voteSite, boolean online, boolean broadcast) {
public void playerVote(VoteSite voteSite, boolean online, boolean broadcast, boolean bungee) {
if (Config.getInstance().getFormatBroadcastWhenOnline() && Config.getInstance().isBroadcastVotesEnabled()
&& broadcast) {
voteSite.broadcastVote(this);
}
voteSite.giveRewards(this, online);
voteSite.giveRewards(this, online, bungee);
}
/**
@@ -14,6 +14,8 @@ import com.Ben12345rocks.AdvancedCore.Util.Item.ItemBuilder;
import com.Ben12345rocks.AdvancedCore.Util.Messages.StringParser;
import com.Ben12345rocks.AdvancedCore.Util.Misc.ArrayUtils;
import com.Ben12345rocks.AdvancedCore.Util.Misc.MiscUtils;
import com.Ben12345rocks.AdvancedCore.Util.Misc.PlayerUtils;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessage;
import com.Ben12345rocks.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Config.ConfigVoteSites;
@@ -101,31 +103,42 @@ public class VoteSite {
init();
}
public void broadcastVote(User user) {
broadcastVote(user, true);
}
/**
* Broadcast vote.
*
* @param user
* the user
* @param checkBungee
* check bungee broadcast
*/
public void broadcastVote(User user) {
public void broadcastVote(User user, boolean checkBungee) {
if (!user.isVanished()) {
String playerName = user.getPlayerName();
String bc = StringParser.getInstance().colorize(config.getFormatBroadCastMsg());
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("player", playerName);
placeholders.put("nickname",
(user.getPlayer() != null) ? user.getPlayer().getDisplayName() : user.getPlayerName());
placeholders.put("sitename", getDisplayName());
placeholders.put("servicesite", getServiceSite());
bc = StringParser.getInstance().replacePlaceHolder(bc, placeholders);
ArrayList<Player> players = new ArrayList<Player>();
for (Player p : Bukkit.getOnlinePlayers()) {
if (!UserManager.getInstance().getVotingPluginUser(p).getDisableBroadcast()) {
players.add(p);
if (checkBungee && Config.getInstance().isBungeeBroadcast()) {
PluginMessage.getInstance().sendPluginMessage(PlayerUtils.getInstance().getRandomPlayer(), "Broadcast",
getServiceSite(), user.getPlayerName());
} else {
String playerName = user.getPlayerName();
String bc = StringParser.getInstance().colorize(config.getFormatBroadCastMsg());
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("player", playerName);
placeholders.put("nickname",
(user.getPlayer() != null) ? user.getPlayer().getDisplayName() : user.getPlayerName());
placeholders.put("sitename", getDisplayName());
placeholders.put("servicesite", getServiceSite());
bc = StringParser.getInstance().replacePlaceHolder(bc, placeholders);
ArrayList<Player> players = new ArrayList<Player>();
for (Player p : Bukkit.getOnlinePlayers()) {
if (!UserManager.getInstance().getVotingPluginUser(p).getDisableBroadcast()) {
players.add(p);
}
}
}
MiscUtils.getInstance().broadcast(bc, players);
MiscUtils.getInstance().broadcast(bc, players);
}
} else {
plugin.debug(user.getPlayerName() + " is vanished, not broadcasting");
}
@@ -148,22 +161,16 @@ public class VoteSite {
return configVoteSites.getData(key);
}
/**
* Give rewards.
*
* @param user
* the user
* @param online
* the online
*/
public void giveRewards(User user, boolean online) {
public void giveRewards(User user, boolean online, boolean bungee) {
new RewardBuilder(configVoteSites.getData(), configVoteSites.getRewardsPath(key)).setOnline(online)
.withPlaceHolder("ServiceSite", getServiceSite()).withPlaceHolder("SiteName", getDisplayName())
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL()).send(user);
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL())
.setServer(bungee).send(user);
new RewardBuilder(configVoteSites.getData(), configVoteSites.getEverySiteRewardPath()).setOnline(online)
.withPlaceHolder("ServiceSite", getServiceSite()).withPlaceHolder("SiteName", getDisplayName())
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL()).send(user);
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL())
.setServer(bungee).send(user);
}
public boolean hasRewards() {
@@ -0,0 +1,158 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.time.LocalDateTime;
import java.time.ZoneId;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.DataType;
import com.vexsoftware.votifier.bungee.events.VotifierEvent;
import com.vexsoftware.votifier.model.Vote;
import lombok.Getter;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.event.EventHandler;
public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listener {
@Getter
private Config config;
@Getter
private BungeeMySQL mysql;
@Override
public void onEnable() {
getProxy().getPluginManager().registerListener(this, this);
this.getProxy().registerChannel("VotingPlugin:VotingPlugin".toLowerCase());
config = new Config(this);
config.load();
mysql = new BungeeMySQL("VotingPlugin_Users", config.getData());
// column types
getMysql().alterColumnType("TopVoterIgnore", "VARCHAR(5)");
getMysql().alterColumnType("CheckWorld", "VARCHAR(5)");
getMysql().alterColumnType("Reminded", "VARCHAR(5)");
getMysql().alterColumnType("DisableBroadcast", "VARCHAR(5)");
getMysql().alterColumnType("LastOnline", "VARCHAR(20)");
getMysql().alterColumnType("PlayerName", "VARCHAR(30)");
getMysql().alterColumnType("DailyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("WeeklyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("DayVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("BestDayVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("WeekVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("BestWeekVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("VotePartyVotes", "INT DEFAULT '0'");
getMysql().alterColumnType("MonthVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("Points", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestDailyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MileStoneTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("AllTimeTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestMonthlyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MilestoneCount", "INT DEFAULT '0'");
getMysql().alterColumnType("MonthTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestWeeklyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("LastMonthTotal", "INT DEFAULT '0'");
getProxy().getPluginManager().registerCommand(this, new VotingPluginBungeeCommand(this));
}
public void reload() {
config.load();
}
@EventHandler
public void onPluginMessage(PluginMessageEvent ev) {
if (!ev.getTag().equals("VotingPlugin:VotingPlugin".toLowerCase())) {
return;
}
ByteArrayInputStream instream = new ByteArrayInputStream(ev.getData());
DataInputStream in = new DataInputStream(instream);
try {
ByteArrayOutputStream outstream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(outstream);
String subchannel = in.readUTF();
int size = in.readInt();
out.writeUTF(subchannel);
out.writeInt(size);
for (int i = 0; i < size; i++) {
out.writeUTF(in.readUTF());
}
for (String send : getProxy().getServers().keySet()) {
if (getProxy().getServers().get(send).getPlayers().size() > 0) {
getProxy().getServers().get(send).sendData("VotingPlugin:VotingPlugin".toLowerCase(),
outstream.toByteArray());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void onVote(VotifierEvent event) {
Vote vote = event.getVote();
saveVote(vote.getUsername(), vote.getServiceName());
}
public String getUUID(String playerName) {
ProxiedPlayer p = getProxy().getPlayer(playerName);
if (p != null && p.isConnected()) {
return p.getUniqueId().toString();
}
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
}
return "";
}
public void saveVote(String name, String service) {
String uuid = getUUID(name);
if (!uuid.isEmpty()) {
String data = mysql.getProxyVotes(uuid, "online");
String finalData = service + "%time%"
+ LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
if (data != null && !data.isEmpty()) {
finalData = data + "%line%" + service + "%time%"
+ LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
if (config.getSendVotesToAllServers()) {
for (String send : getProxy().getServers().keySet()) {
mysql.update(uuid, "Proxy_" + send, finalData, DataType.STRING);
sendPluginMessage("bungeevote", uuid, name);
}
} else if (config.getSendToOnlineServer()) {
mysql.update(uuid, "Proxy_Online", finalData, DataType.STRING);
sendPluginMessage("bungeevote", uuid, name);
}
}
}
public void sendPluginMessage(String channel, String... messageData) {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(byteOutStream);
try {
out.writeUTF(channel);
out.writeInt(messageData.length);
for (String message : messageData) {
out.writeUTF(message);
}
for (String send : getProxy().getServers().keySet()) {
if (getProxy().getServers().get(send).getPlayers().size() > 0) {
getProxy().getServers().get(send).sendData("VotingPlugin:VotingPlugin".toLowerCase(),
byteOutStream.toByteArray());
}
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,422 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.Ben12345rocks.AdvancedCore.UserStorage.mysql.api.queries.Query;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.Column;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.DataType;
import net.md_5.bungee.config.Configuration;
public class BungeeMySQL {
private com.Ben12345rocks.AdvancedCore.UserStorage.mysql.api.MySQL mysql;
private List<String> columns = Collections.synchronizedList(new ArrayList<String>());
// private HashMap<String, ArrayList<Column>> table;
// ConcurrentMap<String, ArrayList<Column>> table = new
// ConcurrentHashMap<String, ArrayList<Column>>();
private String name;
private Set<String> uuids = Collections.synchronizedSet(new HashSet<String>());
private Object object2 = new Object();
private Object object3 = new Object();
private Object object4 = new Object();
private List<String> intColumns = new ArrayList<String>();
public BungeeMySQL(String tableName, Configuration section) {
String tablePrefix = section.getString("Prefix");
String hostName = section.getString("Host");
int port = section.getInt("Port");
String user = section.getString("Username");
String pass = section.getString("Password");
String database = section.getString("Database");
long lifeTime = section.getLong("MaxLifeTime", -1);
int maxThreads = section.getInt("MaxConnections", 1);
if (maxThreads < 1) {
maxThreads = 1;
}
boolean useSSL = section.getBoolean("UseSSL", false);
if (!section.getString("Name", "").isEmpty()) {
tableName = section.getString("Name", "");
}
name = tableName;
if (tablePrefix != null) {
name = tablePrefix + tableName;
}
mysql = new com.Ben12345rocks.AdvancedCore.UserStorage.mysql.api.MySQL(maxThreads);
if (!mysql.connect(hostName, "" + port, user, pass, database, useSSL, lifeTime)) {
}
try {
Query q = new Query(mysql, "USE " + database + ";");
q.executeUpdateAsync();
} catch (SQLException e) {
e.printStackTrace();
}
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.executeUpdateAsync();
} 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);
if (newType.contains("INT")) {
try {
new Query(mysql, "UPDATE " + getName() + " SET " + column + " = '0' where trim(coalesce(" + column
+ ", '')) = '';").executeUpdateAsync();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
;
if (!intColumns.contains(column)) {
intColumns.add(column);
}
}
try {
new Query(mysql, "ALTER TABLE " + getName() + " MODIFY " + column + " " + newType + ";")
.executeUpdateAsync();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getUUID(String playerName) {
String query = "SELECT uuid FROM " + getName() + " WHERE " + "PlayerName" + "='" + playerName + "';";
try {
Query sql = new Query(mysql, query);
ResultSet rs = sql.executeQuery();
rs.next();
String uuid = rs.getString("uuid");
if (uuid != null && !uuid.isEmpty()) {
return uuid;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
return null;
}
public String getProxyVotes(String uuid, String server) {
checkColumn("Proxy_" + server, DataType.STRING);
String query = "SELECT Proxy_" + server + " FROM " + getName() + " WHERE " + "uuid" + "='" + uuid + "';";
try {
Query sql = new Query(mysql, query);
ResultSet rs = sql.executeQuery();
rs.next();
String str = rs.getString("Proxy_" + server);
if (str != null && !str.isEmpty()) {
return str;
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
return null;
}
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 sql = "SELECT uuid FROM " + getName() + ";";
try {
Query query = new Query(mysql, sql);
ResultSet rs = query.executeQuery();
while (rs.next()) {
if (rs.getString("uuid").equals(index)) {
return true;
}
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return false;
}
public List<String> getColumns() {
if (columns == null || columns.size() == 0) {
loadData();
}
return columns;
}
public ArrayList<String> getColumnsQueury() {
ArrayList<String> columns = new ArrayList<String>();
try {
Query query = new Query(mysql, "SELECT * FROM " + getName() + ";");
ResultSet rs = query.executeQuery();
ResultSetMetaData metadata = rs.getMetaData();
int columnCount = 0;
if (metadata != null) {
columnCount = metadata.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String columnName = metadata.getColumnName(i);
columns.add(columnName);
}
return columns;
}
} catch (SQLException e) {
e.printStackTrace();
}
return columns;
}
public ArrayList<Column> getExactQuery(Column column) {
ArrayList<Column> result = new ArrayList<>();
String query = "SELECT * FROM " + getName() + " WHERE `" + column.getName() + "`=?" + ";";
try {
Query sql = new Query(mysql, query);
sql.setParameter(1, column.getValue().toString());
ResultSet rs = sql.executeQuery();
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);
} else {
rCol = new Column(columnName, DataType.STRING);
}
// System.out.println(i + " " +
// rs.getMetaData().getColumnLabel(i));
rCol.setValue(rs.getString(i));
// System.out.println(rCol.getValue());
result.add(rCol);
}
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<String>();
checkColumn("PlayerName", DataType.STRING);
ArrayList<Column> rows = getRowsNameQuery();
if (rows != null) {
for (Column c : rows) {
uuids.add((String) c.getValue());
}
}
return uuids;
}
public ArrayList<Column> getRowsNameQuery() {
ArrayList<Column> result = new ArrayList<Column>();
String sql = "SELECT PlayerName FROM " + getName() + ";";
try {
Query query = new Query(mysql, sql);
ResultSet rs = query.executeQuery();
while (rs.next()) {
Column rCol = new Column("PlayerName", rs.getString("PlayerName"), DataType.STRING);
result.add(rCol);
}
} catch (SQLException e) {
}
return result;
}
public ArrayList<Column> getRowsQuery() {
ArrayList<Column> result = new ArrayList<Column>();
String sql = "SELECT uuid FROM " + getName() + ";";
try {
Query query = new Query(mysql, sql);
ResultSet rs = query.executeQuery();
while (rs.next()) {
Column rCol = new Column("uuid", rs.getString("uuid"), DataType.STRING);
result.add(rCol);
}
} catch (SQLException e) {
return null;
}
return result;
}
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<String>();
ArrayList<Column> rows = getRowsQuery();
for (Column c : rows) {
uuids.add((String) c.getValue());
}
return uuids;
}
public void insert(String index, String column, Object value, DataType dataType) {
insertQuery(index, column, value, dataType);
}
public void insertQuery(String index, String column, Object value, DataType dataType) {
synchronized (object2) {
String query = "INSERT " + getName() + " ";
query += "set uuid='" + index + "', ";
query += column + "='" + value.toString() + "';";
// AdvancedCorePlugin.getInstance().extraDebug(query);
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();
try {
Connection con = mysql.getConnectionManager().getConnection();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void update(String index, String column, Object value, DataType dataType) {
checkColumn(column, dataType);
if (getUuids().contains(index)) {
synchronized (object2) {
String query = "UPDATE " + getName() + " SET ";
if (dataType == DataType.STRING) {
query += column + "='" + value.toString() + "'";
} else {
query += column + "=" + value;
}
query += " WHERE `uuid`=";
query += "'" + index + "';";
try {
Query q = new Query(mysql, query);
q.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
} else {
insert(index, column, value, dataType);
}
}
}
@@ -0,0 +1,60 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import lombok.Getter;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
public class Config {
private Bungee bungee;
@Getter
private Configuration data;
public Config(Bungee bungee) {
this.bungee = bungee;
}
public void load() {
if (!bungee.getDataFolder().exists())
bungee.getDataFolder().mkdir();
File file = new File(bungee.getDataFolder(), "bungeeconfig.yml");
if (!file.exists()) {
try (InputStream in = bungee.getResourceAsStream("bungeeconfig.yml")) {
Files.copy(in, file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "bungeeconfig.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void save() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "bungeeconfig.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean getSendVotesToAllServers() {
return getData().getBoolean("SendVotesToAllServers");
}
public boolean getSendToOnlineServer() {
return getData().getBoolean("SendVotesToAllServers");
}
}
@@ -0,0 +1,31 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Command;
public class VotingPluginBungeeCommand extends Command {
private Bungee bungee;
public VotingPluginBungeeCommand(Bungee bungee) {
super("votingpluginbungee");
this.bungee = bungee;
}
@Override
public void execute(CommandSender sender, String[] args) {
if (args.length > 0) {
if (args[0].equalsIgnoreCase("reload")) {
bungee.reload();
sender.sendMessage(new TextComponent("Reloading VotingPluginBungee"));
}
if (args[0].equalsIgnoreCase("vote")) {
if (args.length >= 2) {
String user = args[1];
String site = args[2];
bungee.saveVote(user, site);
}
}
}
}
}