Compare commits

..
31 Commits
Author SHA1 Message Date
BenCodez 80455d68e2 Update version number 2021-02-21 14:31:00 -05:00
BenCodez 0d8dd6eb60 Changes to allsites reward checks 2021-02-21 13:52:31 -05:00
BenCodez 7cfd3e5a94 Fix hidden votesite option, a lot of other fixes from recent changes 2021-02-21 13:44:46 -05:00
BenCodez 46d9b07db3 Modify voteurl a little more 2021-02-20 17:39:56 -05:00
BenCodez ac4f5a4b02 Modify VoteURL to be more configurable 2021-02-20 17:35:08 -05:00
BenCodez 5bfa59508a Keep bungee from failing to load on bungee without votifier 2021-02-20 17:16:57 -05:00
BenCodez 9d53af3059 Organize config file 2021-02-17 19:33:40 -05:00
BenCodez 82c32c6ed1 Little fix for spigot setting totals on bungee methods 2021-02-17 19:12:15 -05:00
BenCodez af5b4231c2 Add option for what server handles totals 2021-02-17 19:11:08 -05:00
BenCodez 00c1830ced Add option to hide votesites 2021-02-17 18:37:00 -05:00
BenCodez 335888d0ad Add option for extra allsites check, works per server 2021-02-15 17:19:27 -05:00
BenCodez 397f71020c Modify yml error messages 2021-02-14 12:49:35 -05:00
BenCodez 31ea9f8413 Add WaitForUserOnline, modify bungee handling 2021-02-13 21:12:16 -05:00
BenCodez bfcbcb8802 Broadcast on force voteparty command 2021-02-13 13:40:20 -05:00
BenCodez 30bf07edc7 Actually set per server rewards option 2021-02-12 18:50:41 -05:00
BenCodez be3de852ce Add per server rewards option 2021-02-12 18:49:28 -05:00
BenCodez d9f3c4a465 Add bypass option for votifier 2021-02-12 17:53:16 -05:00
BenCodez b3c3a30ea4 Bug fix 2021-02-11 20:39:33 -05:00
BenCodez f785b1256d Bug fix 2021-02-11 20:13:48 -05:00
BenCodez 5b4d93197c Update version number 2021-02-07 13:41:40 -05:00
BenCodez d1d159ba90 Modify socket method to work more like pluginmessaging 2021-02-07 13:13:56 -05:00
BenCodez 8501c351dd Background check votes on bungee 2021-02-06 21:45:01 -05:00
BenCodez a61d8bbd04 Ignore votes from votifier when using bungeemethod pluginmessaging 2021-02-06 19:04:11 -05:00
BenCodez ccd39ebc89 Permission fixes 2021-02-06 15:57:32 -05:00
BenCodez da04ddad7d Improve status command to show blocked servers 2021-02-05 22:13:03 -05:00
BenCodez 498210d709 Bungee change 2021-02-05 21:53:30 -05:00
BenCodez c128bec2af Add ability to execute rewards on clicking vote gui 2021-02-05 19:32:02 -05:00
BenCodez 84ce9275f0 Little change to help with perms 2021-02-04 16:47:35 -05:00
BenCodez 66bdd9b5c7 Add option 2021-02-03 18:32:23 -05:00
BenCodez b02ab916cd Store all top voters on top voter storing 2021-02-02 19:23:44 -05:00
BenCodez a2068da36b Update spigot api version 2021-02-01 17:42:09 -05:00
29 changed files with 636 additions and 484 deletions

No files matched your search

+11 -4
View File
@@ -7,10 +7,6 @@
# Plugin using bungee, requires plugin on bungee server
UseBungeecord: false
# For pluginmessaging method only
# Whether to broadcast on cached votes
BungeeBroadcastAlways: false
# What type of bungee setup
# Requires restart and set on all servers
# https://github.com/Ben12345rocks/VotingPlugin/wiki/Bungeecoord-Setups
@@ -26,8 +22,19 @@ BungeeDebug: false
# Get the plugin to broadcast to all servers
# If false you need to enable
# Only use for global rewards (one per network), otherwise you will get double broadcasts
BungeeBroadcast: false
# For pluginmessaging method only
# Whether to broadcast on cached votes
BungeeBroadcastAlways: false
# If true, offline rewards will be stored per server, rather than global
# This shouldn't need to be set unless you get alot of cross server rewards issues
# You can also specify the server within the rewards
# Requires server name below to be correct
PerServerRewards: false
# What server this is in bungee (must match)
# Also can be applied to rewards
Server: PleaseSet
+35 -23
View File
@@ -30,6 +30,35 @@ MySQL:
Prefix: ''
#UseSSL: true
#PublicKeyRetrieval: false
# ---------------------------------------------------------
# Mysql cache options
# Clearing cache forces the plugin to pull from database
# Not needed unless you are using multiple servers
# If using a bungee setup most of these options are overriden automatically
# ---------------------------------------------------------
# Clear cache on update, setting to true reduces update speed
# Also may require AlwaysUpdate set to true
ClearCacheOnUpdate: false
# Clear cache on player join always
ClearCacheOnJoin: false
# Clears cache for the player who voted only
# Only effects if using mysql
# Would recommend for some bungee setups
ClearCacheOnVote: false
# Clear cache when player leaves
ClearCacheOnLeave: false
ClearCacheOnVoteShopPurchase: true
# --------------------
# AllowUnJoined options
# May need to set to true for bungee setup
# --------------------
# Let players who never joined before vote
# Recommend: False (Will prevent creating random user data)
@@ -241,6 +270,9 @@ Format:
# See https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
TimeFormat: 'EEE, d MMM yyyy HH:mm'
# Reward time format for %date% placeholder (Time of giving reward)
RewardTimeFormat: 'EEE, d MMM yyyy HH:mm'
TimeFormats:
Day: 'Day'
Days: 'Days'
@@ -364,6 +396,9 @@ AddTotals: true
# If false, items will be given when there is space
DropOnFullInv: true
# If true, allsites will have an extra check to prevent duplicate allsites from being given
ExtraAllSitesCheck: false
# Click sound when using gui
# Set to none for no sound
ClickSound:
@@ -538,29 +573,6 @@ SpamClickTime: 350
# Uncomment to use
#SpamClickMessage: '&cDetected spam clicking GUI, closing to prevent exploits'
# ---------------------------------------------------------
# Mysql cache options
# Clearing cache forces the plugin to pull from database
# Not needed unless you are using multiple servers
# ---------------------------------------------------------
# Clear cache on update, setting to true reduces update speed
# Also may require AlwaysUpdate set to true
ClearCacheOnUpdate: false
# Clear cache on player join always
ClearCacheOnJoin: false
# Clears cache for the player who voted only
# Only effects if using mysql
# Would recommend for some bungee setups
ClearCacheOnVote: false
# Clear cache when player leaves
ClearCacheOnLeave: false
ClearCacheOnVoteShopPurchase: true
# ###############################################################
# Deprecated options, don't recommend using any of these
+32 -10
View File
@@ -24,12 +24,13 @@ LastMonthGUI: false
CHEST:
# GUI for /vote gui, /vgui, /votegui
VoteGUI:
# Items will be orders as it is below
# Items will be ordered as listed here
# You can add items following this format, even set slots
# See extra item below. GUI will auto resize to what is needed
URL:
# Standard item format, lore is automaticly applied
Item:
Material: 'BOW'
Data: 0
Amount: 1
Name: '&4URL'
Lore:
@@ -40,41 +41,45 @@ CHEST:
Next:
Item:
Material: 'COMPASS'
Data: 0
Amount: 1
Name: '&4Next'
Last:
Item:
Material: 'CLOCK'
Data: 0
Amount: 1
Name: '&4Last'
Total:
Item:
Material: 'CHEST'
Data: 0
Amount: 1
Name: '&4Total'
Top:
Item:
Material: 'OAK_SIGN'
Data: 0
Amount: 1
Name: '&4Top'
Today:
Item:
Material: 'BOOK'
Data: 0
Amount: 1
Name: '&4Today'
Shop:
Item:
Material: 'DIAMOND'
Data: 0
Amount: 1
Name: '&4Vote Shop'
Lore:
- '&aYou currently have %points% points'
# 'ExtraName' below is an identifier, can be whatever
# ExtraItem:
# Item:
# Material: 'DIRT'
# Amount: 1
# Name: 'Extra item'
## Works on most GUI items
# Slot: 10
## Send rewards on click, run commands, check conditions, etc
# Rewards: []
# GUI for /vote url, /vote
VoteURL:
@@ -84,8 +89,12 @@ CHEST:
SiteName: '&c%Name%'
SeeURL: '&cClick to see URL'
NextVote: '&cCan Vote In: %Info%'
#Start slot for specific site buttons
#StartSlot: 1
ViewAllUrlsButtonEnabled: true
AllUrlsButton:
#Set slot for AllUrlsButton
#Slot: 0
RequireAllSitesVoted: true
AlreadyVotedItem:
Material: 'REDSTONE_BLOCK'
@@ -110,6 +119,14 @@ CHEST:
Data: 0
Amount: 1
URLText: '%VoteUrl%'
# #Add Extra items
# ExtraItems:
# Item1:
# Material: DIRT
# Amount: 1
# Slot: 1
# #Can run commands or effects
# Rewards: []
VoteLast:
Name: 'VoteLast: %player%'
@@ -139,9 +156,10 @@ CHEST:
Material: 'OAK_SIGN'
Amount: 1
# 8 Slots over from the bottom left
# Bottom of GUI
Slot: 7
# Number of topvoters to display on page +9
# 9 Slots on the botton are used for page buttons
# Number of topvoters to display on each GUI page
# 9 Slots on the botton are used for page buttons (added on top)
Size: 27
# If true, /vote top will show player heads
UseSkull: true
@@ -258,6 +276,7 @@ CHEST:
# Identifier
# Used in placeholders for formats
# Do not have spaces in the identifier
# Change the identifier for each shop item
Diamond:
Identifier_Name: 'Diamond'
# Item
@@ -291,6 +310,9 @@ CHEST:
#NotBuyable: false
# Rewards to run if player buys successfully
Rewards:
# Run command on purchase
#Commands:
#- 'command here'
Items:
Diamond:
Material: 'DIAMOND'
+1 -1
View File
@@ -70,7 +70,7 @@ VoteParty:
Commands: []
# Rewards to give per player
Rewards:
# Uncomment below for online player rewards only
# Uncomment below for online players to be rewarded only
#RewardType: ONLINE
Commands:
- say %player%
+6
View File
@@ -15,6 +15,9 @@ VoteSites:
# Used for sorted list
# High prority, higher on the list
Priority: 5
# If true, voteside will be hidden from some GUI's, similar to being disabled
Hidden: false
# The serviceName from the vote, has to be correct to work correctly
# Gotten from voting on the site (will be in console/log)
@@ -44,6 +47,9 @@ VoteSites:
# Recommend: false
VoteDelayDaily: false
#Offset time for /vote next caculations
#TimeOffSet: 0
# If true, rewards can be executed offline (requires ForceOffline to be true in the reward)
# Setting this to true will execute the reward offline while the player is offline
# This basiclly disables offline voting if set to true, don't misinterpret this option
+21 -3
View File
@@ -38,18 +38,36 @@ BlockedServers:
# MYSQL
BungeeMethod: PLUGINMESSAGING
FallBackServer: factions
# If false, votes will be checked if user is a valid player that has joined to server
# Works for PLUGINMESSAGING and SOCKETS methods only
# This requires spigot servers AllowUnJoined to be set to true in Config.yml
AllowUnJoined: false
# If true, bungee will handle adding totals
# If false, spigot servers will EACH set their own totals
# If false, AllowUnJoined should false on bungee, spigot servers will handle that
# Recommened to leave true, setting to false setups are currently unsupported
BungeeManageTotals: true
# ----------------------------
# SOCKET METHOD Settings
# PLUGINMESSAGING Settings
# ----------------------------
# Applies to PLUGINMESSAGING & when SendVotesToAllServers is true
# Votes will be forwarded when specific player is online
WaitForUserOnline: false
# ----------------------------
# SOCKET Settings, do not touch otherwise
# ----------------------------
# Tell servers to broadcast
# For socket method
Broadcast: true
# Server to send vote to if player is offline
FallBackServer: factions
# Bungee communication, Add this to each spigot server
# For socket method
BungeeServer:
+2 -2
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.bencodez</groupId>
<artifactId>VotingPlugin</artifactId>
<version>6.1.2</version>
<version>6.1.4</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -256,7 +256,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.4-R0.1-SNAPSHOT</version>
<version>1.16.5-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -67,9 +67,14 @@ public class BungeeHandler {
BungeeMessageData text = new BungeeMessageData(args.get(6));
boolean setTotals = false;
if (args.size() > 7) {
setTotals = Boolean.valueOf(args.get(7));
}
user.clearCache();
user.bungeeVotePluginMessaging(service, time, text);
user.bungeeVotePluginMessaging(service, time, text, !setTotals);
if (!plugin.getBungeeSettings().isBungeeBroadcast()) {
if (wasOnline || plugin.getBungeeSettings().isBungeeBroadcastAlways()) {
@@ -102,7 +107,12 @@ public class BungeeHandler {
player);
user.clearCache();
user.bungeeVotePluginMessaging(service, time, text);
boolean setTotals = false;
if (args.size() > 7) {
setTotals = Boolean.valueOf(args.get(7));
}
user.bungeeVotePluginMessaging(service, time, text, !setTotals);
if (!plugin.getBungeeSettings().isBungeeBroadcast()) {
if (Boolean.valueOf(args.get(4)) || plugin.getBungeeSettings().isBungeeBroadcastAlways()) {
@@ -149,7 +159,7 @@ public class BungeeHandler {
}
}
});
plugin.getPluginMessaging().add(new PluginMessageHandler("Status") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
@@ -174,7 +184,7 @@ public class BungeeHandler {
@Override
public void onReceive(String[] data) {
if (data.length > 3) {
if (data.length > 5) {
plugin.extraDebug("BungeeVote from " + data[2] + ", processing");
String uuid = data[1];
VotingPluginUser user = null;
@@ -186,7 +196,7 @@ public class BungeeHandler {
user.clearCache();
user.bungeeVote(data[3]);
user.bungeeVote(data[3], new BungeeMessageData(data[4]), !Boolean.valueOf(data[5]));
}
}
});
@@ -195,7 +205,7 @@ public class BungeeHandler {
@Override
public void onReceive(String[] data) {
if (data.length > 3) {
if (data.length > 5) {
plugin.extraDebug("BungeeVoteOnline from " + data[2] + ", processing");
String uuid = data[1];
VotingPluginUser user = null;
@@ -207,7 +217,7 @@ public class BungeeHandler {
user.clearCache();
user.bungeeVoteOnline(data[3]);
user.bungeeVoteOnline(data[3], new BungeeMessageData(data[4]), !Boolean.valueOf(data[5]));
}
}
});
@@ -236,32 +236,22 @@ public class VotingPluginMain extends AdvancedCorePlugin {
}
private void checkYMLError() {
if (configFile.isFailedToRead() || configVoteSites.isFailedToRead()) {
if (configFile.isFailedToRead() || configVoteSites.isFailedToRead() || specialRewardsConfig.isFailedToRead()
|| bungeeSettings.isFailedToRead() || gui.isFailedToRead()) {
ymlError = true;
} else if (!configFile.isFailedToRead() && !configVoteSites.isFailedToRead()) {
} else {
ymlError = false;
}
if (configFile.isFailedToRead()) {
if (ymlError) {
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getLogger().severe("Failed to load Config.yml");
plugin.getLogger().severe("Failed to load a file, check startup log");
}
}, 10);
}
if (configVoteSites.isFailedToRead()) {
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getLogger().severe("Failed to load VoteSites.yml");
}
}, 10);
}
}
public void convertDataStorage(UserStorage from, UserStorage to) {
@@ -1045,6 +1035,7 @@ public class VotingPluginMain extends AdvancedCorePlugin {
setConfigData(configFile.getData());
if (bungeeSettings.isUseBungeecoord()) {
getOptions().setClearCacheOnJoin(true);
getOptions().setPerServerRewards(getBungeeSettings().isPerServerRewards());
}
}
@@ -1054,13 +1045,15 @@ public class VotingPluginMain extends AdvancedCorePlugin {
for (VotingPluginUser user : users) {
HashMap<VoteSite, LocalDateTime> times = new HashMap<VoteSite, LocalDateTime>();
for (VoteSite voteSite : plugin.getVoteSites()) {
long time = user.getTime(voteSite);
if ((LocalDateTime.now().getDayOfMonth() == MiscUtils.getInstance().getDayFromMili(time))
&& (LocalDateTime.now().getMonthValue() == MiscUtils.getInstance().getMonthFromMili(time))
&& (LocalDateTime.now().getYear() == MiscUtils.getInstance().getYearFromMili(time))) {
times.put(voteSite, LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()));
if (!voteSite.isHidden()) {
long time = user.getTime(voteSite);
if ((LocalDateTime.now().getDayOfMonth() == MiscUtils.getInstance().getDayFromMili(time))
&& (LocalDateTime.now().getMonthValue() == MiscUtils.getInstance().getMonthFromMili(time))
&& (LocalDateTime.now().getYear() == MiscUtils.getInstance().getYearFromMili(time))) {
times.put(voteSite,
LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()));
}
}
}
if (times.keySet().size() > 0) {
@@ -28,9 +28,17 @@ public class Config {
public boolean getBroadcast() {
return getData().getBoolean("Broadcast", false);
}
public boolean getWaitForUserOnline() {
return getData().getBoolean("WaitForUserOnline", false);
}
public boolean getBungeeManageTotals() {
return getData().getBoolean("BungeeManageTotals", true);
}
public boolean getAllowUnJoined() {
return getData().getBoolean("AllowUnJoined",false);
return getData().getBoolean("AllowUnJoined", false);
}
public String getBungeeHost() {
@@ -26,4 +26,9 @@ public class OfflineBungeeVote {
this.text = text;
}
@Override
public String toString() {
return "VoteCache:" + playerName + "/" + uuid + "/" + service + "/" + time + "/" + realVote + "/" + text;
}
}
@@ -0,0 +1,23 @@
package com.bencodez.votingplugin.bungee;
import com.vexsoftware.votifier.bungee.events.VotifierEvent;
import com.vexsoftware.votifier.model.Vote;
import net.md_5.bungee.event.EventHandler;
public class VoteEventBungee implements net.md_5.bungee.api.plugin.Listener {
private VotingPluginBungee plugin;
public VoteEventBungee(VotingPluginBungee plugin) {
this.plugin = plugin;
}
@EventHandler
public void onVote(VotifierEvent event) {
Vote vote = event.getVote();
plugin.getLogger().info("Vote received " + vote.getUsername() + " from service site " + vote.getServiceName());
plugin.vote(vote.getUsername(), vote.getServiceName(), true);
}
}
@@ -29,8 +29,6 @@ import com.bencodez.advancedcore.bungeeapi.sockets.SocketReceiver;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.vexsoftware.votifier.bungee.events.VotifierEvent;
import com.vexsoftware.votifier.model.Vote;
import lombok.Getter;
import net.md_5.bungee.api.CommandSender;
@@ -44,7 +42,7 @@ import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.event.EventHandler;
public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.plugin.Listener {
public class VotingPluginBungee extends Plugin {
private HashMap<String, ArrayList<OfflineBungeeVote>> cachedOnlineVotes = new HashMap<String, ArrayList<OfflineBungeeVote>>();
@@ -74,30 +72,51 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
if (!getProxy().getServerInfo(server).getPlayers().isEmpty()) {
if (cachedVotes.containsKey(server) && !config.getBlockedServers().contains(server)) {
ArrayList<OfflineBungeeVote> c = cachedVotes.get(server);
ArrayList<OfflineBungeeVote> newSet = new ArrayList<OfflineBungeeVote>();
if (!c.isEmpty()) {
for (OfflineBungeeVote cache : c) {
sendPluginMessageServer(server, "Vote", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote(), cache.getText());
boolean toSend = true;
if (getConfig().getWaitForUserOnline()) {
ProxiedPlayer p = getProxy().getPlayer(UUID.fromString(cache.getUuid()));
if (p == null || !p.isConnected()) {
toSend = false;
} else if (p != null && p.isConnected()
&& !p.getServer().getInfo().getName().equals(server)) {
toSend = false;
}
}
if (toSend) {
sendPluginMessageServer(server, "Vote", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote(), cache.getText(),
"" + getConfig().getBungeeManageTotals());
} else {
debug("Not sending vote because user isn't on server " + server + ": "
+ cache.toString());
newSet.add(cache);
}
}
cachedVotes.put(server, new ArrayList<OfflineBungeeVote>());
cachedVotes.put(server, newSet);
}
}
}
}
}
public void checkOnlineVotes(ProxiedPlayer player, String uuid) {
public void checkOnlineVotes(ProxiedPlayer player, String uuid, String server) {
if (player != null && player.isConnected() && cachedOnlineVotes.containsKey(uuid)) {
ArrayList<OfflineBungeeVote> c = cachedOnlineVotes.get(uuid);
if (!c.isEmpty()) {
String server = getProxy().getPlayer(UUID.fromString(uuid)).getServer().getInfo().getName();
if (server == null) {
server = getProxy().getPlayer(UUID.fromString(uuid)).getServer().getInfo().getName();
}
if (!config.getBlockedServers().contains(server)) {
for (OfflineBungeeVote cache : c) {
sendPluginMessageServer(server, "VoteOnline", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote(), cache.getText());
"" + cache.isRealVote(), cache.getText(), "" + getConfig().getBungeeManageTotals());
}
cachedOnlineVotes.put(uuid, new ArrayList<OfflineBungeeVote>());
}
@@ -147,9 +166,11 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
if (p != null && p.isConnected()) {
return p.getUniqueId().toString();
}
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
if (mysql != null) {
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
}
}
if (nonVotedPlayersCache != null) {
return nonVotedPlayersCache.playerExists(playerName);
@@ -212,36 +233,44 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
@Override
public void onEnable() {
getProxy().getPluginManager().registerListener(this, this);
try {
getProxy().getPluginManager().registerListener(this, new VoteEventBungee(this));
} catch (Exception e) {
getLogger().warning("Votifier event failed to enable");
}
config = new Config(this);
config.load();
mysql = new BungeeMySQL("VotingPlugin_Users", config.getData());
try {
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("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'");
getMysql().alterColumnType("OfflineRewards", "MEDIUMTEXT");
// 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("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'");
getMysql().alterColumnType("OfflineRewards", "MEDIUMTEXT");
} catch (Exception e) {
e.printStackTrace();
}
getProxy().getPluginManager().registerCommand(this, new VotingPluginBungeeCommand(this));
@@ -303,10 +332,10 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
}
for (String player : cachedOnlineVotes.keySet()) {
checkOnlineVotes(getProxy().getPlayer(UUID.fromString(player)), player);
checkOnlineVotes(getProxy().getPlayer(UUID.fromString(player)), player, null);
}
}
}, 15l, TimeUnit.SECONDS);
}, 15l, 30l, TimeUnit.SECONDS);
getProxy().getScheduler().schedule(this, new Runnable() {
@@ -380,12 +409,12 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
if (!ev.getTag().equals("vp:vp".toLowerCase())) {
return;
}
ev.setCancelled(true);
if (!(ev.getSender() instanceof Server))
return;
ByteArrayInputStream instream = new ByteArrayInputStream(ev.getData());
DataInputStream in = new DataInputStream(instream);
try {
@@ -433,21 +462,12 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
@Override
public void run() {
checkCachedVotes(server);
checkOnlineVotes(event.getPlayer(), uuid);
checkOnlineVotes(event.getPlayer(), uuid, server);
}
}, 2, TimeUnit.SECONDS);
}
@EventHandler
public void onVote(VotifierEvent event) {
Vote vote = event.getVote();
getLogger().info("Vote received " + vote.getUsername() + " from service site " + vote.getServiceName());
vote(vote.getUsername(), vote.getServiceName(), true);
}
private UUID parseUUIDFromString(String uuidAsString) {
String[] parts = { "0x" + uuidAsString.substring(0, 8), "0x" + uuidAsString.substring(8, 12),
"0x" + uuidAsString.substring(12, 16), "0x" + uuidAsString.substring(16, 20),
@@ -503,11 +523,12 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
}
}
public void sendSocketVote(String name, String service) {
public void sendSocketVote(String name, String service, BungeeMessageData text) {
String uuid = getUUID(name);
if (config.getSendVotesToAllServers()) {
sendServerMessage("bungeevote", uuid, name, service);
sendServerMessage("bungeevote", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
@@ -525,7 +546,8 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
server = config.getFallBack();
}
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service);
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service, text.toString(),
"" + getConfig().getBungeeManageTotals());
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
@@ -548,6 +570,8 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
getLogger().info("Sending request for status message on " + s);
sendPluginMessageServer(s, "Status", s);
}
} else {
getLogger().info("Ignoring blocked server " + s);
}
}
}
@@ -558,32 +582,34 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
getLogger().info("No name from vote on " + service);
return;
}
if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service);
} else if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
String uuid = getUUID(player);
if (uuid.isEmpty()) {
if (config.getAllowUnJoined()) {
UUID u = null;
try {
u = fetchUUID(player);
} catch (Exception e) {
if (getConfig().getDebug()) {
e.printStackTrace();
}
String uuid = getUUID(player);
if (uuid.isEmpty()) {
if (config.getAllowUnJoined()) {
UUID u = null;
try {
u = fetchUUID(player);
} catch (Exception e) {
if (getConfig().getDebug()) {
e.printStackTrace();
}
if (u == null) {
debug("Failed to get uuid for " + player);
return;
}
uuid = u.toString();
} else {
getLogger().info("Ignoring vote from " + player);
}
if (u == null) {
debug("Failed to get uuid for " + player);
return;
}
uuid = u.toString();
} else {
getLogger().info("Ignoring vote from " + player);
return;
}
}
player = getProperName(uuid, player);
player = getProperName(uuid, player);
BungeeMessageData text = null;
if (getConfig().getBungeeManageTotals()) {
if (!mysql.getUuids().contains(uuid)) {
mysql.update(uuid, "PlayerName", player, DataType.STRING);
@@ -591,26 +617,37 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
ArrayList<Column> data = mysql.getExactQuery(new Column("uuid", uuid, DataType.STRING));
BungeeMessageData text = new BungeeMessageData(mysqlUpdate(data, uuid, "AllTimeTotal", 1),
text = new BungeeMessageData(mysqlUpdate(data, uuid, "AllTimeTotal", 1),
mysqlUpdate(data, uuid, "MonthTotal", 1), mysqlUpdate(data, uuid, "WeeklyTotal", 1),
mysqlUpdate(data, uuid, "DailyTotal", 1), mysqlUpdate(data, uuid, "Points", 1),
mysqlUpdate(data, uuid, "MilestoneCount", 1));
} else {
text = new BungeeMessageData(0, 0, 0, 0, 0, 0);
}
/*
* String text = mysqlUpdate(data, uuid, "AllTimeTotal", 1) + "//" +
* mysqlUpdate(data, uuid, "MonthTotal", 1) + "//" + mysqlUpdate(data, uuid,
* "WeeklyTotal", 1) + "//" + mysqlUpdate(data, uuid, "DailyTotal", 1) + "//" +
* mysqlUpdate(data, uuid, "Points", 1) + "//" + mysqlUpdate(data, uuid,
* "MilestoneCount", 1);
*/
/*
* String text = mysqlUpdate(data, uuid, "AllTimeTotal", 1) + "//" +
* mysqlUpdate(data, uuid, "MonthTotal", 1) + "//" + mysqlUpdate(data, uuid,
* "WeeklyTotal", 1) + "//" + mysqlUpdate(data, uuid, "DailyTotal", 1) + "//" +
* mysqlUpdate(data, uuid, "Points", 1) + "//" + mysqlUpdate(data, uuid,
* "MilestoneCount", 1);
*/
long time = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
long time = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
if (config.getSendVotesToAllServers()) {
for (String s : getProxy().getServers().keySet()) {
if (!config.getBlockedServers().contains(s)) {
ServerInfo info = getProxy().getServerInfo(s);
if (info.getPlayers().isEmpty()) {
boolean forceCache = false;
ProxiedPlayer p = getProxy().getPlayer(UUID.fromString(uuid));
if ((p == null || !p.isConnected()) && getConfig().getWaitForUserOnline()) {
forceCache = true;
debug("Forcing vote to cache");
}
if (info.getPlayers().isEmpty() || forceCache) {
// cache
if (!cachedVotes.containsKey(s)) {
cachedVotes.put(s, new ArrayList<OfflineBungeeVote>());
@@ -624,7 +661,8 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
} else {
// send
sendPluginMessageServer(s, "Vote", player, uuid, service, "" + time,
Boolean.TRUE.toString(), "" + realVote, text.toString());
Boolean.TRUE.toString(), "" + realVote, text.toString(),
"" + getConfig().getBungeeManageTotals());
}
}
}
@@ -633,7 +671,8 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
if (p != null && p.isConnected()
&& !config.getBlockedServers().contains(p.getServer().getInfo().getName())) {
sendPluginMessageServer(p.getServer().getInfo().getName(), "VoteOnline", player, uuid, service,
"" + time, Boolean.TRUE.toString(), "" + realVote, text.toString());
"" + time, Boolean.TRUE.toString(), "" + realVote, text.toString(),
"" + getConfig().getBungeeManageTotals());
} else {
if (!cachedOnlineVotes.containsKey(uuid)) {
cachedOnlineVotes.put(uuid, new ArrayList<OfflineBungeeVote>());
@@ -647,8 +686,10 @@ public class VotingPluginBungee extends Plugin implements net.md_5.bungee.api.pl
debug("Caching online vote for " + player + " on " + service);
}
}
} else if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service, text);
}
}
}
@@ -750,8 +750,6 @@ public class CommandLoader {
plugin.getServer().getPluginManager().callEvent(voteEvent);
if (plugin.isYmlError()) {
sendMessage(sender,
"&4" + plugin.getName() + " v" + plugin.getDescription().getVersion() + " reloaded!");
sendMessage(sender, "&3Detected yml error, please check server log for details");
}
@@ -1055,7 +1053,7 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
plugin.getVoteParty().giveRewards();
plugin.getVoteParty().giveRewards(plugin.getBungeeSettings().isUseBungeecoord());
}
});
@@ -1091,7 +1089,8 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
plugin.getSpecialRewards().giveMilestoneVoteReward(user, user.isOnline(), parseInt(args[3]));
plugin.getSpecialRewards().giveMilestoneVoteReward(user, user.isOnline(), parseInt(args[3]),
plugin.getBungeeSettings().isUseBungeecoord());
sendMessage(sender, "&cMilestone " + args[3] + " forced");
}
});
@@ -1152,7 +1151,7 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
plugin.getSpecialRewards().giveVoteStreakReward(user, user.isOnline(), str, args[4],
parseInt(args[4]));
parseInt(args[4]), plugin.getBungeeSettings().isUseBungeecoord());
sendMessage(sender, "&cVoteStreak " + str + " " + args[4] + " forced");
}
});
@@ -1165,7 +1164,8 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
plugin.getSpecialRewards().giveCumulativeVoteReward(user, user.isOnline(), parseInt(args[3]));
plugin.getSpecialRewards().giveCumulativeVoteReward(user, user.isOnline(), parseInt(args[3]),
plugin.getBungeeSettings().isUseBungeecoord());
sendMessage(sender, "&cCumulative " + args[3] + " forced");
}
});
@@ -1176,7 +1176,8 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
plugin.getSpecialRewards().giveAllSitesRewards(user, user.isOnline());
plugin.getSpecialRewards().giveAllSitesRewards(user, user.isOnline(),
plugin.getBungeeSettings().isUseBungeecoord());
sendMessage(sender, "&cAllSites forced");
}
});
@@ -1187,7 +1188,8 @@ public class CommandLoader {
@Override
public void execute(CommandSender sender, String[] args) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(args[1]);
plugin.getSpecialRewards().giveFirstVoteRewards(user, user.isOnline());
plugin.getSpecialRewards().giveFirstVoteRewards(user, user.isOnline(),
plugin.getBungeeSettings().isUseBungeecoord());
sendMessage(sender, "&cFirstVote forced");
}
});
@@ -1232,32 +1234,39 @@ public class CommandLoader {
return;
}
for (CommandHandler cmdHandle : plugin.getVoteCommand()) {
if (cmdHandle.getArgs().length > 0) {
int argLength = cmdHandle.getArgs().length;
String arg0 = "";
if (argLength > 0) {
arg0 = cmdHandle.getArgs()[0];
}
String[] perms = cmdHandle.getPerm().split(Pattern.quote("|"));
try {
if (perms.length > 1) {
// has another perm
plugin.devDebug("Adding child perm " + perms[0] + " to " + perms[1] + " from /vote" + arg0);
Permission p = Bukkit.getPluginManager().getPermission(perms[1]);
p.getChildren().put(perms[0], true);
p.recalculatePermissibles();
}
} catch (Exception e) {
plugin.debug("Failed to set permission for /vote" + arg0);
}
if (argLength > 0) {
String[] args = cmdHandle.getArgs()[0].split("&");
for (String arg : args) {
commands.put("vote" + arg, cmdHandle);
try {
String[] perms = cmdHandle.getPerm().split(Pattern.quote("|"));
if (perms.length > 1) {
// has another perm
plugin.devDebug("Adding child perm " + perms[0] + " to " + perms[1]);
Permission p = Bukkit.getPluginManager().getPermission(perms[1]);
p.getChildren().put(perms[0], true);
p.recalculatePermissibles();
}
} catch (Exception e) {
plugin.debug("Failed to set permission for /vote" + arg);
}
try {
plugin.getCommand("vote" + arg).setExecutor(new CommandAliases(cmdHandle, false));
plugin.getCommand("vote" + arg)
.setTabCompleter(new AliasesTabCompleter().setCMDHandle(cmdHandle, false));
plugin.getCommand("vote" + arg).setPermission(cmdHandle.getPerm().split(Pattern.quote("|"))[0]);
String currentPerm = plugin.getCommand("vote" + arg).getPermission();
if (currentPerm == null || currentPerm.length() > perms[0].length()) {
plugin.getCommand("vote" + arg).setPermission(perms[0]);
}
for (String str : plugin.getCommand("vote" + arg).getAliases()) {
commands.put(str, cmdHandle);
@@ -1266,50 +1275,43 @@ public class CommandLoader {
plugin.devDebug("Failed to load command and tab completer for /vote" + arg);
}
}
} else {
try {
String[] perms = cmdHandle.getPerm().split(Pattern.quote("|"));
if (perms.length > 1) {
// has another perm
plugin.devDebug("Adding child perm " + perms[0] + " to " + perms[1]);
Permission p = Bukkit.getPluginManager().getPermission(perms[1]);
p.getChildren().put(perms[0], true);
p.recalculatePermissibles();
}
} catch (Exception e) {
plugin.debug("Failed to set permission for /vote");
}
}
}
for (CommandHandler cmdHandle : plugin.getAdminVoteCommand()) {
if (cmdHandle.getArgs().length > 0) {
int argLength = cmdHandle.getArgs().length;
String arg0 = "";
if (argLength > 0) {
arg0 = cmdHandle.getArgs()[0];
}
String[] perms = cmdHandle.getPerm().split(Pattern.quote("|"));
try {
if (perms.length > 1) {
// has another perm
plugin.devDebug("Adding child perm " + perms[0] + " to " + perms[1] + " from /adminvote" + arg0);
Permission p = Bukkit.getPluginManager().getPermission(perms[1]);
p.getChildren().put(perms[0], true);
p.recalculatePermissibles();
}
} catch (Exception e) {
plugin.debug("Failed to set permission for /adminvote" + arg0);
}
if (argLength > 0) {
String[] args = cmdHandle.getArgs()[0].split("&");
for (String arg : args) {
commands.put("adminvote" + arg, cmdHandle);
try {
String[] perms = cmdHandle.getPerm().split(Pattern.quote("|"));
if (perms.length > 1) {
// has another perm
plugin.devDebug("Adding child perm " + perms[0] + " to " + perms[1]);
Permission p = Bukkit.getPluginManager().getPermission(perms[1]);
p.getChildren().put(perms[0], true);
p.recalculatePermissibles();
}
} catch (Exception e) {
plugin.debug("Failed to set permission for /adminvote" + arg);
}
try {
plugin.getCommand("adminvote" + arg).setExecutor(new CommandAliases(cmdHandle, true));
plugin.getCommand("adminvote" + arg)
.setTabCompleter(new AliasesTabCompleter().setCMDHandle(cmdHandle, true));
plugin.getCommand("adminvote" + arg)
.setPermission(cmdHandle.getPerm().split(Pattern.quote("|"))[0]);
String currentPerm = plugin.getCommand("adminvote" + arg).getPermission();
if (currentPerm == null || currentPerm.length() > perms[0].length()) {
plugin.getCommand("adminvote" + arg).setPermission(perms[0]);
}
for (String str : plugin.getCommand("adminvote" + arg).getAliases()) {
commands.put(str, cmdHandle);
@@ -1321,20 +1323,6 @@ public class CommandLoader {
}
}
} else {
try {
String[] perms = cmdHandle.getPerm().split(Pattern.quote("|"));
if (perms.length > 1) {
// has another perm
plugin.devDebug("Adding child perm " + perms[0] + " to " + perms[1]);
Permission p = Bukkit.getPluginManager().getPermission(perms[1]);
p.getChildren().put(perms[0], true);
p.recalculatePermissibles();
}
} catch (Exception e) {
plugin.debug("Failed to set permission for /vote");
}
}
}
}
@@ -1658,6 +1646,16 @@ public class CommandLoader {
});
}
plugin.getVoteCommand().add(new CommandHandler(new String[] { "URL", "(SiteName)" },
"VotingPlugin.Commands.Vote.URL.VoteSite", "Open VoteURL GUI for VoteSite", false) {
@Override
public void execute(CommandSender sender, String[] args) {
new VoteURLVoteSite(plugin, sender, UserManager.getInstance().getVotingPluginUser((Player) sender),
args[1]).open();
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "URL" },
"VotingPlugin.Commands.Vote.URL|" + playerPerm, "Open VoteURL GUI", false) {
@@ -1668,15 +1666,6 @@ public class CommandLoader {
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "URL", "(SiteName)" },
"VotingPlugin.Commands.Vote.URL.VoteSite", "Open VoteURL GUI for VoteSite", false) {
@Override
public void execute(CommandSender sender, String[] args) {
new VoteURLVoteSite(plugin, sender, UserManager.getInstance().getVotingPluginUser((Player) sender),
args[1]).open();
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "Last", "(player)" },
"VotingPlugin.Commands.Vote.Last.Other|" + modPerm, "See other players last votes") {
@@ -1777,15 +1766,6 @@ public class CommandLoader {
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "GUI" },
"VotingPlugin.Commands.Vote.GUI|" + playerPerm, "Open VoteGUI", false) {
@Override
public void execute(CommandSender sender, String[] args) {
new VoteGUI(plugin, sender, UserManager.getInstance().getVotingPluginUser((Player) sender)).open();
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "GUI", "(player)" },
"VotingPlugin.Commands.Vote.GUI.Other|" + modPerm, "Open VoteGUI", false) {
@@ -1801,6 +1781,15 @@ public class CommandLoader {
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "GUI" },
"VotingPlugin.Commands.Vote.GUI|" + playerPerm, "Open VoteGUI", false) {
@Override
public void execute(CommandSender sender, String[] args) {
new VoteGUI(plugin, sender, UserManager.getInstance().getVotingPluginUser((Player) sender)).open();
}
});
if (plugin.getGui().isLastMonthGUI()) {
plugin.getVoteCommand()
.add(new CommandHandler(new String[] { "LastMonthTop" },
@@ -11,8 +11,9 @@ import com.bencodez.advancedcore.api.inventory.BInventory;
import com.bencodez.advancedcore.api.inventory.BInventory.ClickEvent;
import com.bencodez.advancedcore.api.inventory.UpdatingBInventoryButton;
import com.bencodez.advancedcore.api.item.ItemBuilder;
import com.bencodez.advancedcore.api.messages.StringParser;
import com.bencodez.advancedcore.api.misc.ArrayUtils;
import com.bencodez.advancedcore.api.rewards.RewardHandler;
import com.bencodez.advancedcore.api.rewards.RewardOptions;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.topvoter.TopVoter;
import com.bencodez.votingplugin.user.UserManager;
@@ -122,15 +123,6 @@ public class VoteGUI extends GUIHandler {
if (this.user == null) {
user = UserManager.getInstance().getVotingPluginUser((Player) player);
}
if ((!player.getName().equals(user.getPlayerName())
&& !player.hasPermission("VotingPlugin.Commands.Vote.GUI.Other")
&& !player.hasPermission("VotingPlugin.Mod"))
|| (!player.hasPermission("VotingPlugin.Commands.Vote.GUI")
&& !player.hasPermission("VotingPlugin.Player"))) {
player.sendMessage(
StringParser.getInstance().colorize(VotingPluginMain.plugin.getOptions().getFormatNoPerms()));
return;
}
BInventory inv = new BInventory(plugin.getGui().getChestVoteGUIName());
if (!plugin.getConfigFile().isAlwaysCloseInventory()) {
inv.dontClose();
@@ -181,6 +173,13 @@ public class VoteGUI extends GUIHandler {
new VoteTopVoterLastMonth(plugin, player, user).open(GUIMethod.CHEST);
}
}
if (RewardHandler.getInstance().hasRewards(plugin.getGui().getData(),
plugin.getGui().getChestVoteGUISlotRewardsPath(slot))) {
RewardHandler.getInstance().giveReward(UserManager.getInstance().getVotingPluginUser(player),
plugin.getGui().getData(), plugin.getGui().getChestVoteGUISlotRewardsPath(slot),
new RewardOptions().addPlaceholder("identifier", slot));
}
}
@Override
@@ -38,7 +38,9 @@ public class VoteLast extends GUIHandler {
"%player%", playerName));
for (VoteSite voteSite : plugin.getVoteSites()) {
msg.add(user.voteCommandLastLine(voteSite));
if (!voteSite.isHidden()) {
msg.add(user.voteCommandLastLine(voteSite));
}
}
return ArrayUtils.getInstance().colorize(msg);
@@ -59,20 +61,23 @@ public class VoteLast extends GUIHandler {
BInventory inv = new BInventory(plugin.getGui().getChestVoteLastName());
inv.addPlaceholder("player", user.getPlayerName());
for (VoteSite site : plugin.getVoteSites()) {
inv.addButton(inv.getNextSlot(), new UpdatingBInventoryButton(site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandLastLine(site)).setAmountNone(1), 1000, 1000) {
if (!site.isHidden()) {
inv.addButton(inv.getNextSlot(),
new UpdatingBInventoryButton(site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandLastLine(site)).setAmountNone(1), 1000, 1000) {
@Override
public void onClick(ClickEvent clickEvent) {
@Override
public void onClick(ClickEvent clickEvent) {
}
}
@Override
public ItemBuilder onUpdate(Player p) {
return site.getItem().setName(site.getDisplayName()).setLore(user.voteCommandLastLine(site))
.setAmountNone(1);
}
});
@Override
public ItemBuilder onUpdate(Player p) {
return site.getItem().setName(site.getDisplayName())
.setLore(user.voteCommandLastLine(site)).setAmountNone(1);
}
});
}
}
if (plugin.getGui().getChestVoteLastBackButton()) {
@@ -42,15 +42,17 @@ public class VoteNext extends GUIHandler {
.replaceIgnoreCase(plugin.getConfigFile().getFormatCommandsVoteNextTitle(), "%player%", playerName)));
for (VoteSite voteSite : plugin.getVoteSites()) {
if (!voteSite.isHidden()) {
String msgLine = plugin.getConfigFile().getFormatCommandsVoteNextLayout();
String msgLine = plugin.getConfigFile().getFormatCommandsVoteNextLayout();
msgLine = StringParser.getInstance().replaceIgnoreCase(msgLine, "%info%",
user.voteCommandNextInfo(voteSite));
msgLine = StringParser.getInstance().replaceIgnoreCase(msgLine, "%SiteName%", voteSite.getDisplayName());
msg.add(StringParser.getInstance().colorize(msgLine));
msgLine = StringParser.getInstance().replaceIgnoreCase(msgLine, "%info%",
user.voteCommandNextInfo(voteSite));
msgLine = StringParser.getInstance().replaceIgnoreCase(msgLine, "%SiteName%",
voteSite.getDisplayName());
msg.add(StringParser.getInstance().colorize(msgLine));
}
}
return msg;
}
@@ -13,12 +13,14 @@ import com.bencodez.advancedcore.api.bookgui.Layout;
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.BInventoryButton;
import com.bencodez.advancedcore.api.inventory.BInventory.ClickEvent;
import com.bencodez.advancedcore.api.inventory.UpdatingBInventoryButton;
import com.bencodez.advancedcore.api.item.ItemBuilder;
import com.bencodez.advancedcore.api.messages.MessageBuilder;
import com.bencodez.advancedcore.api.messages.StringParser;
import com.bencodez.advancedcore.api.misc.ArrayUtils;
import com.bencodez.advancedcore.api.rewards.RewardBuilder;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.objects.VoteSite;
import com.bencodez.votingplugin.topvoter.TopVoter;
@@ -59,16 +61,18 @@ public class VoteURL extends GUIHandler {
if (plugin.getConfigFile().getFormatCommandsVoteAutoInputSites()) {
int counter = 0;
for (VoteSite voteSite : plugin.getVoteSites()) {
counter++;
String voteURL = voteSite.getVoteURL(json);
MessageBuilder message = new MessageBuilder(plugin.getConfigFile().getFormatCommandsVoteURLS());
message.replacePlaceholder("num", Integer.toString(counter)).replacePlaceholder("url", voteURL)
.replacePlaceholder("SiteName", voteSite.getDisplayName());
if (user != null && user.getPlayerName() != null) {
message.replacePlaceholder("player", "" + user.getPlayerName()).replacePlaceholder("Next",
"" + user.voteCommandNextInfo(voteSite));
if (!voteSite.isHidden()) {
counter++;
String voteURL = voteSite.getVoteURL(json);
MessageBuilder message = new MessageBuilder(plugin.getConfigFile().getFormatCommandsVoteURLS());
message.replacePlaceholder("num", Integer.toString(counter)).replacePlaceholder("url", voteURL)
.replacePlaceholder("SiteName", voteSite.getDisplayName());
if (user != null && user.getPlayerName() != null) {
message.replacePlaceholder("player", "" + user.getPlayerName()).replacePlaceholder("Next",
"" + user.voteCommandNextInfo(voteSite));
}
sites.add(message.colorize().getText());
}
sites.add(message.colorize().getText());
}
}
if (user != null) {
@@ -102,6 +106,10 @@ public class VoteURL extends GUIHandler {
if (!builderAll.hasCustomLore()) {
builderAll.setLore("&cClick Me");
}
int slot = plugin.getGui().getChestVoteURLAllUrlsButtonSlot();
if (slot >= 0) {
builderAll.setSlot(slot);
}
return builderAll;
}
@@ -151,12 +159,10 @@ public class VoteURL extends GUIHandler {
public void onChest(Player player) {
// normal GUI
BInventory inv = new BInventory(plugin.getGui().getChestVoteURLName());
int count = 0;
if (plugin.getGui().getChestVoteURLViewAllUrlsButtonEnabled()) {
ItemBuilder builderAll = getItemAll();
inv.addButton(count, new UpdatingBInventoryButton(builderAll, 1000, 1000) {
inv.addButton(new UpdatingBInventoryButton(builderAll, 1000, 1000) {
@Override
public void onClick(ClickEvent event) {
@@ -170,38 +176,53 @@ public class VoteURL extends GUIHandler {
return getItemAll();
}
});
count++;
}
int startSlot = plugin.getGui().getChestVoteURLAllUrlsButtonStartSlot();
for (final VoteSite voteSite : plugin.getVoteSites()) {
ItemBuilder builder = getItemVoteSite(voteSite);
if (!voteSite.isHidden()) {
ItemBuilder builder = getItemVoteSite(voteSite);
if (startSlot >= 0) {
builder.setSlot(startSlot);
startSlot++;
}
inv.addButton(count, new UpdatingBInventoryButton(builder, 1000, 1000) {
inv.addButton(new UpdatingBInventoryButton(builder, 1000, 1000) {
@Override
public void onClick(ClickEvent event) {
Player player = event.getPlayer();
if (player != null) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(player);
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
StringParser.getInstance()
.replacePlaceHolder(StringParser.getInstance().replacePlaceHolder(
plugin.getGui().getChestVoteURLURLText(), "voteurl",
voteSite.getVoteURL()), "sitename", voteSite.getDisplayName()),
"player", player.getName()));
@Override
public void onClick(ClickEvent event) {
Player player = event.getPlayer();
if (player != null) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(player);
user.sendMessage(StringParser.getInstance().replacePlaceHolder(StringParser.getInstance()
.replacePlaceHolder(StringParser.getInstance().replacePlaceHolder(
plugin.getGui().getChestVoteURLURLText(), "voteurl", voteSite.getVoteURL()),
"sitename", voteSite.getDisplayName()),
"player", player.getName()));
}
}
}
@Override
public ItemBuilder onUpdate(Player player) {
return getItemVoteSite(voteSite);
}
});
}
}
for (final String str : plugin.getGui().getChestVoteURLExtraItems()) {
inv.addButton(new BInventoryButton(new ItemBuilder(plugin.getGui().getChestVoteURLExtraItemsItem(str))) {
@Override
public ItemBuilder onUpdate(Player player) {
return getItemVoteSite(voteSite);
public void onClick(ClickEvent clickEvent) {
new RewardBuilder(plugin.getGui().getData(), "CHEST.VoteURL.ExtraItems." + str + ".Rewards")
.setGiveOffline(false).send(clickEvent.getPlayer());
;
}
});
count++;
}
if (plugin.getGui().getChestVoteURLBackButton()) {
@@ -25,6 +25,10 @@ public class BungeeSettings extends YMLFile {
@Getter
private boolean bungeeDebug = false;
@ConfigDataBoolean(path = "VotifierBypass")
@Getter
private boolean votifierBypass = false;
@ConfigDataString(path = "BungeeMethod")
@Getter
private String bungeeMethod = "PLUGINMESSAGING";
@@ -41,6 +45,10 @@ public class BungeeSettings extends YMLFile {
@Getter
private boolean removeInvalidUsers = false;
@ConfigDataBoolean(path = "PerServerRewards")
@Getter
private boolean perServerRewards = false;
@ConfigDataString(path = "Server")
@Getter
private String server = "PleaseSet";
@@ -39,6 +39,10 @@ public class Config extends YMLFile {
@ConfigDataBoolean(path = "UseVoteGUIMainCommand")
@Getter
private boolean useVoteGUIMainCommand = false;
@ConfigDataBoolean(path = "ExtraAllSitesCheck")
@Getter
private boolean extraAllSitesCheck = false;
@ConfigDataBoolean(path = "AllowUnJoinedCheckServer")
@Getter
@@ -144,6 +144,10 @@ public class ConfigVoteSites extends YMLFile {
public boolean getVoteSiteEnabled(String siteName) {
return getData(siteName).getBoolean("Enabled");
}
public boolean getVoteSiteHidden(String siteName) {
return getData(siteName).getBoolean("Hidden");
}
/**
* Gets the vote site file.
@@ -143,9 +143,10 @@ public class GUI extends YMLFile {
private boolean lastMonthGUI = false;
private VotingPluginMain plugin;
public String getCHESTVoteShopPurchase(String identifier) {
return getData().getString("CHEST.Shop." + identifier +".PurchaseMessage", plugin.getConfigFile().getFormatShopPurchaseMsg());
return getData().getString("CHEST.Shop." + identifier + ".PurchaseMessage",
plugin.getConfigFile().getFormatShopPurchaseMsg());
}
public GUI(VotingPluginMain plugin) {
@@ -217,6 +218,10 @@ public class GUI extends YMLFile {
return getData().getString("CHEST.VoteGUI." + slot + ".Command", "");
}
public String getChestVoteGUISlotRewardsPath(String slot) {
return "CHEST.VoteGUI." + slot + ".Rewards";
}
/**
* Gets the vote GUI slot lore.
*
@@ -427,6 +432,25 @@ public class GUI extends YMLFile {
return getData().getConfigurationSection("CHEST.VoteURL.AlreadyVotedItem");
}
public int getChestVoteURLAllUrlsButtonSlot() {
return getData().getInt("CHEST.VoteURL.AllUrlsButton.Slot", -1);
}
public int getChestVoteURLAllUrlsButtonStartSlot() {
return getData().getInt("CHEST.VoteURL.StartSlot", -1);
}
public Set<String> getChestVoteURLExtraItems() {
if (getData().isConfigurationSection("CHEST.VoteURL.ExtraItems")) {
return getData().getConfigurationSection("CHEST.VoteURL.ExtraItems").getKeys(false);
}
return new HashSet<String>();
}
public ConfigurationSection getChestVoteURLExtraItemsItem(String item) {
return getData().getConfigurationSection("CHEST.VoteURL.ExtraItems." + item);
}
public boolean getChestVoteURLBackButton() {
return getData().getBoolean("CHEST.VoteURL.BackButton");
}
@@ -103,7 +103,7 @@ public class PlayerVoteListener implements Listener {
synchronized (object) {
// vote party
plugin.getVoteParty().vote(user, event.isRealVote());
plugin.getVoteParty().vote(user, event.isRealVote(), event.isForceBungee());
// broadcast vote if enabled in config
if (plugin.getConfigFile().isBroadcastVotesEnabled()
@@ -133,7 +133,7 @@ public class PlayerVoteListener implements Listener {
}
// check first vote rewards
plugin.getSpecialRewards().checkFirstVote(user);
plugin.getSpecialRewards().checkFirstVote(user, event.isForceBungee());
if (user.isReminded()) {
user.setReminded(false);
@@ -162,12 +162,12 @@ public class PlayerVoteListener implements Listener {
user.addPoints();
}
user.checkDayVoteStreak();
user.checkDayVoteStreak(event.isForceBungee());
// other rewards
plugin.getSpecialRewards().checkAllSites(user);
plugin.getSpecialRewards().checkCumualativeVotes(user, event.getBungeeTextTotals());
plugin.getSpecialRewards().checkMilestone(user, event.getBungeeTextTotals());
plugin.getSpecialRewards().checkAllSites(user, event.isForceBungee());
plugin.getSpecialRewards().checkCumualativeVotes(user, event.getBungeeTextTotals(), event.isForceBungee());
plugin.getSpecialRewards().checkMilestone(user, event.getBungeeTextTotals(), event.isForceBungee());
if (plugin.getBungeeSettings().isUseBungeecoord()) {
if (plugin.getBungeeHandler().getMethod().equals(BungeeMethod.MYSQL)) {
@@ -9,8 +9,8 @@ import org.bukkit.event.Listener;
import com.bencodez.advancedcore.api.misc.ArrayUtils;
import com.bencodez.votingplugin.VotingPluginMain;
import com.bencodez.votingplugin.bungee.BungeeMethod;
import com.bencodez.votingplugin.events.PlayerVoteEvent;
import com.bencodez.votingplugin.objects.VoteSite;
import com.vexsoftware.votifier.model.Vote;
import com.vexsoftware.votifier.model.VotifierEvent;
@@ -68,6 +68,14 @@ public class VotiferEvent implements Listener {
@Override
public void run() {
if (plugin.getBungeeSettings().isUseBungeecoord() && !plugin.getBungeeSettings().isVotifierBypass()
&& (plugin.getBungeeHandler().getMethod().equals(BungeeMethod.PLUGINMESSAGING)
|| plugin.getBungeeHandler().getMethod().equals(BungeeMethod.SOCKETS))) {
plugin.getLogger().severe(
"Ignoring vote from votifier since pluginmessaging or socket bungee method is enabled");
return;
}
String voteSiteName = plugin.getVoteSiteName(voteSite);
ArrayList<String> sites = plugin.getConfigVoteSites().getVoteSitesNames();
@@ -84,13 +92,9 @@ public class VotiferEvent implements Listener {
plugin.getLogger().warning("VoteSite with service site '" + voteSiteName
+ "' does not exist, attempting to generaterate...");
plugin.getConfigVoteSites().generateVoteSite(voteSiteName);
ArrayList<String> services = new ArrayList<String>();
for (VoteSite site : plugin.getVoteSites()) {
services.add(site.getServiceSite());
}
plugin.getLogger()
.info("Current known service sites: " + ArrayUtils.getInstance().makeStringList(services));
.info("Current known service sites: " + ArrayUtils.getInstance().makeStringList(plugin.getServerData().getServiceSites()));
}
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(voteSiteName), voteUsername,
@@ -36,6 +36,10 @@ public class VoteSite {
@Setter
private boolean enabled;
@Getter
@Setter
private boolean hidden;
@Getter
@Setter
private boolean giveOffline;
@@ -223,6 +227,7 @@ public class VoteSite {
giveOffline = plugin.getConfigVoteSites().getVoteSiteGiveOffline(key);
waitUntilVoteDelay = plugin.getConfigVoteSites().getWaitUntilVoteDelay(key);
timeOffSet = plugin.getConfigVoteSites().getTimeOffSet(key);
hidden = plugin.getConfigVoteSites().getVoteSiteHidden(key);
}
public boolean isVaidServiceSite() {
@@ -1,5 +1,6 @@
package com.bencodez.votingplugin.specialrewards;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Set;
@@ -28,21 +29,28 @@ public class SpecialRewards {
this.plugin = plugin;
}
/**
* Check all sites.
*
* @param user the user
* @return true, if successful
*/
public boolean checkAllSites(VotingPluginUser user) {
public boolean checkAllSites(VotingPluginUser user, boolean forceBungee) {
boolean checkAllVotes = user.checkAllVotes();
if (checkAllVotes
&& (plugin.getConfigFile().isExtraAllSitesCheck() || plugin.getBungeeSettings().isUseBungeecoord())) {
int currentDay = LocalDateTime.now().getDayOfYear();
int day = user.getGottenAllSitesDay();
if (currentDay == day) {
checkAllVotes = false;
plugin.debug("Not giving allsites, already gotten today");
} else {
user.setGottenAllSitesDay(currentDay);
}
}
if (checkAllVotes) {
giveAllSitesRewards(user, user.isOnline());
giveAllSitesRewards(user, user.isOnline(), forceBungee);
}
return checkAllVotes;
}
public boolean checkCumualativeVotes(VotingPluginUser user, BungeeMessageData bungeeMessageData) {
public boolean checkCumualativeVotes(VotingPluginUser user, BungeeMessageData bungeeMessageData,
boolean forceBungee) {
boolean gotCumulativeAny = false;
Set<String> votes = plugin.getSpecialRewardsConfig().getCumulativeVotes();
for (String vote : votes) {
@@ -89,7 +97,7 @@ public class SpecialRewards {
if (gotCumulative) {
gotCumulativeAny = true;
giveCumulativeVoteReward(user, user.isOnline(), votesRequired);
giveCumulativeVoteReward(user, user.isOnline(), votesRequired, forceBungee);
plugin.debug(user.getPlayerName() + " got cumulative " + votesRequired);
} else {
plugin.devDebug(user.getPlayerName() + " not able to get cumulative " + votesRequired);
@@ -103,17 +111,11 @@ public class SpecialRewards {
return gotCumulativeAny;
}
/**
* Check first vote.
*
* @param user the user
* @return true, if successful
*/
public boolean checkFirstVote(VotingPluginUser user) {
public boolean checkFirstVote(VotingPluginUser user, boolean forceBungee) {
if (RewardHandler.getInstance().hasRewards(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getFirstVoteRewardsPath())) {
if (!user.hasGottenFirstVote()) {
giveFirstVoteRewards(user, user.isOnline());
giveFirstVoteRewards(user, user.isOnline(), forceBungee);
return true;
}
@@ -121,7 +123,7 @@ public class SpecialRewards {
return false;
}
public boolean checkMilestone(VotingPluginUser user, BungeeMessageData bungeeMessageData) {
public boolean checkMilestone(VotingPluginUser user, BungeeMessageData bungeeMessageData, boolean forceBungee) {
int milestoneCount = user.getMilestoneCount();
if (bungeeMessageData != null) {
try {
@@ -168,7 +170,7 @@ public class SpecialRewards {
int userVotesTotal = milestoneCount;
if (userVotesTotal >= votesRequired && !user.hasGottenMilestone(votesRequired)) {
giveMilestoneVoteReward(user, user.isOnline(), votesRequired);
giveMilestoneVoteReward(user, user.isOnline(), votesRequired, forceBungee);
user.setHasGotteMilestone(votesRequired, true);
plugin.debug(user.getPlayerName() + " got milestone " + votesRequired);
@@ -182,7 +184,7 @@ public class SpecialRewards {
return gotMilestone;
}
public boolean checkVoteStreak(VotingPluginUser user, String type) {
public boolean checkVoteStreak(VotingPluginUser user, String type, boolean forceBungee) {
boolean gotReward = false;
Set<String> streaks = plugin.getSpecialRewardsConfig().getVoteStreakVotes(type);
@@ -209,14 +211,16 @@ public class SpecialRewards {
}
if (!multiple) {
if (curStreak == streakRequired) {
giveVoteStreakReward(user, user.isOnline(), type, "" + streakRequired, curStreak);
giveVoteStreakReward(user, user.isOnline(), type, "" + streakRequired, curStreak,
forceBungee);
gotReward = true;
plugin.debug(
user.getPlayerName() + " got VoteStreak " + streakRequired + " for " + type);
}
} else {
if (curStreak != 0 && curStreak % streakRequired == 0) {
giveVoteStreakReward(user, user.isOnline(), type, streakRequired + "-", curStreak);
giveVoteStreakReward(user, user.isOnline(), type, streakRequired + "-", curStreak,
forceBungee);
gotReward = true;
plugin.debug(
user.getPlayerName() + " got VoteStreak " + streakRequired + "* for " + type);
@@ -232,13 +236,7 @@ public class SpecialRewards {
}
/**
* Give all sites rewards.
*
* @param user the user
* @param online the online
*/
public void giveAllSitesRewards(VotingPluginUser user, boolean online) {
public void giveAllSitesRewards(VotingPluginUser user, boolean online, boolean forceBungee) {
PlayerSpecialRewardEvent event = new PlayerSpecialRewardEvent(user, SpecialRewardType.ALLSITE);
Bukkit.getPluginManager().callEvent(event);
@@ -246,17 +244,11 @@ public class SpecialRewards {
return;
}
RewardHandler.getInstance().giveReward(user, plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getAllSitesRewardPath(), new RewardOptions().setOnline(online));
plugin.getSpecialRewardsConfig().getAllSitesRewardPath(),
new RewardOptions().setServer(forceBungee).setOnline(online));
}
/**
* Give cumulative vote reward.
*
* @param user the user
* @param online the online
* @param cumulative the cumulative
*/
public void giveCumulativeVoteReward(VotingPluginUser user, boolean online, int cumulative) {
public void giveCumulativeVoteReward(VotingPluginUser user, boolean online, int cumulative, boolean forceBungee) {
PlayerSpecialRewardEvent event = new PlayerSpecialRewardEvent(user,
SpecialRewardType.CUMMULATIVE.setAmount(cumulative));
Bukkit.getPluginManager().callEvent(event);
@@ -266,17 +258,11 @@ public class SpecialRewards {
}
new RewardBuilder(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getCumulativeRewardsPath(cumulative)).setOnline(online)
.withPlaceHolder("Cumulative", "" + cumulative).send(user);
plugin.getSpecialRewardsConfig().getCumulativeRewardsPath(cumulative)).setServer(forceBungee)
.setOnline(online).withPlaceHolder("Cumulative", "" + cumulative).send(user);
}
/**
* Give first vote rewards.
*
* @param user the user
* @param online the online
*/
public void giveFirstVoteRewards(VotingPluginUser user, boolean online) {
public void giveFirstVoteRewards(VotingPluginUser user, boolean online, boolean forceBungee) {
PlayerSpecialRewardEvent event = new PlayerSpecialRewardEvent(user, SpecialRewardType.FIRSTVOTE);
Bukkit.getPluginManager().callEvent(event);
@@ -284,17 +270,11 @@ public class SpecialRewards {
return;
}
RewardHandler.getInstance().giveReward(user, plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getFirstVoteRewardsPath(), new RewardOptions().setOnline(online));
plugin.getSpecialRewardsConfig().getFirstVoteRewardsPath(),
new RewardOptions().setServer(forceBungee).setOnline(online));
}
/**
* Give milestone vote reward.
*
* @param user the user
* @param online the online
* @param milestone the milestone
*/
public void giveMilestoneVoteReward(VotingPluginUser user, boolean online, int milestone) {
public void giveMilestoneVoteReward(VotingPluginUser user, boolean online, int milestone, boolean forceBungee) {
PlayerSpecialRewardEvent event = new PlayerSpecialRewardEvent(user,
SpecialRewardType.MILESTONE.setAmount(milestone));
Bukkit.getPluginManager().callEvent(event);
@@ -304,10 +284,11 @@ public class SpecialRewards {
}
new RewardBuilder(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getMilestoneRewardsPath(milestone)).setOnline(online)
.withPlaceHolder("Milestone", "" + milestone).send(user);
.withPlaceHolder("Milestone", "" + milestone).setServer(forceBungee).send(user);
}
public void giveVoteStreakReward(VotingPluginUser user, boolean online, String type, String string, int votes) {
public void giveVoteStreakReward(VotingPluginUser user, boolean online, String type, String string, int votes,
boolean forceBungee) {
PlayerSpecialRewardEvent event = new PlayerSpecialRewardEvent(user,
SpecialRewardType.VOTESTREAK.setType(type).setAmount(votes));
Bukkit.getPluginManager().callEvent(event);
@@ -317,7 +298,8 @@ public class SpecialRewards {
}
new RewardBuilder(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getVoteStreakRewardsPath(type, string)).setOnline(online)
.withPlaceHolder("Type", type).withPlaceHolder("Streak", "" + votes).send(user);
.withPlaceHolder("Type", type).setServer(forceBungee).withPlaceHolder("Streak", "" + votes)
.send(user);
}
}
@@ -195,7 +195,8 @@ public class TopVoterHandler implements Listener {
plugin.getSpecialRewardsConfig().getVoteStreakRequirementMonth(),
LocalDateTime.now().minusDays(1))) {
user.addMonthVoteStreak();
plugin.getSpecialRewards().checkVoteStreak(user, "Month");
plugin.getSpecialRewards().checkVoteStreak(user, "Month",
plugin.getBungeeSettings().isUseBungeecoord());
}
}
}
@@ -288,7 +289,8 @@ public class TopVoterHandler implements Listener {
|| user.hasPercentageTotal(TopVoter.Weekly,
plugin.getSpecialRewardsConfig().getVoteStreakRequirementWeek(), null)) {
user.addWeekVoteStreak();
plugin.getSpecialRewards().checkVoteStreak(user, "Week");
plugin.getSpecialRewards().checkVoteStreak(user, "Week",
plugin.getBungeeSettings().isUseBungeecoord());
}
}
}
@@ -409,13 +411,15 @@ public class TopVoterHandler implements Listener {
YMLFileHandler file = new YMLFileHandler(plugin, new File(plugin.getDataFolder(), fileName));
file.setup();
ArrayList<String> topVoters = new ArrayList<String>();
int count = 1;
for (Entry<VotingPluginUser, Integer> entry : plugin.getTopVoter(top).entrySet()) {
topVoters.add(count + ": " + entry.getKey().getPlayerName() + ": " + entry.getValue());
count++;
for (TopVoter cTop : TopVoter.values()) {
ArrayList<String> topVoters = new ArrayList<String>();
int count = 1;
for (Entry<VotingPluginUser, Integer> entry : plugin.getTopVoter(cTop).entrySet()) {
topVoters.add(count + ": " + entry.getKey().getPlayerName() + ": " + entry.getValue());
count++;
}
file.getData().set(cTop.toString(), topVoters);
}
file.getData().set(top.toString(), topVoters);
file.saveData();
}
@@ -88,12 +88,6 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
setMonthVoteStreak(getMonthVoteStreak() + 1);
}
public void addOfflineOtherReward(String reward) {
ArrayList<String> offlineOtherRewards = getOfflineOtherRewards();
offlineOtherRewards.add(reward);
setOfflineOtherRewards(offlineOtherRewards);
}
public void addOfflineVote(String voteSiteName) {
ArrayList<String> offlineVotes = getOfflineVotes();
offlineVotes.add(voteSiteName);
@@ -157,7 +151,7 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
setWeekVoteStreak(getWeekVoteStreak() + 1);
}
public void bungeeVote(String service) {
public void bungeeVote(String service, BungeeMessageData text, boolean setTotals) {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
VotingPluginMain.plugin.debug("Bungee vote for " + getPlayerName() + " on " + service);
@@ -165,6 +159,9 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(true);
voteEvent.setAddTotals(setTotals);
voteEvent.setBungeeTextTotals(text);
voteEvent.setVotingPluginUser(this);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
@@ -175,14 +172,17 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
}
}
public void bungeeVoteOnline(String service) {
public void bungeeVoteOnline(String service, BungeeMessageData text, boolean setTotals) {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
VotingPluginMain.plugin.debug("Bungee online vote for " + getPlayerName() + " on " + service);
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(false);
voteEvent.setForceBungee(true);
voteEvent.setAddTotals(setTotals);
voteEvent.setBungeeTextTotals(text);
voteEvent.setVotingPluginUser(this);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
@@ -193,7 +193,7 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
}
}
public void bungeeVotePluginMessaging(String service, long time, BungeeMessageData text) {
public void bungeeVotePluginMessaging(String service, long time, BungeeMessageData text, boolean setTotals) {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
VotingPluginMain.plugin.debug("Pluginmessaging vote for " + getPlayerName() + " on " + service);
@@ -203,7 +203,7 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
voteEvent.setVotingPluginUser(this);
voteEvent.setForceBungee(true);
voteEvent.setTime(time);
voteEvent.setAddTotals(false);
voteEvent.setAddTotals(setTotals);
voteEvent.setBungeeTextTotals(text);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@@ -240,6 +240,22 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
return false;
}
public int getGottenAllSitesDay() {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
return getData().getInt("AllSitesLast_" + plugin.getBungeeSettings().getServer(), 0, true);
} else {
return getData().getInt("AllSitesLast", 0, true);
}
}
public void setGottenAllSitesDay(int day) {
if (plugin.getBungeeSettings().isUseBungeecoord()) {
getData().setInt("AllSitesLast_" + plugin.getBungeeSettings().getServer(), day);
} else {
getData().setInt("AllSitesLast", day);
}
}
/**
* Can vote site.
*
@@ -330,12 +346,12 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
}
}
public void checkDayVoteStreak() {
public void checkDayVoteStreak(boolean forceBungee) {
if (!voteStreakUpdatedToday(LocalDateTime.now())) {
if (!plugin.getSpecialRewardsConfig().isVoteStreakRequirementUsePercentage() || hasPercentageTotal(
TopVoter.Daily, plugin.getSpecialRewardsConfig().getVoteStreakRequirementDay(), null)) {
addDayVoteStreak();
plugin.getSpecialRewards().checkVoteStreak(this, "Day");
plugin.getSpecialRewards().checkVoteStreak(this, "Day", forceBungee);
setDayVoteStreakLastUpdate(System.currentTimeMillis());
}
}
@@ -501,10 +517,6 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
return getData().getInt("MonthVoteStreak", isWaitForCache());
}
public ArrayList<String> getOfflineOtherRewards() {
return getUserData().getStringList("OfflineOtherRewards");
}
public ArrayList<String> getOfflineVotes() {
return getUserData().getStringList("OfflineVotes");
}
@@ -618,57 +630,6 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
.withPlaceHolder("votes", "" + getTotal(TopVoter.Monthly)).setOnline(isOnline()).send(this);
}
public void giveOfflineOtherRewards() {
// old reward api, will be removed in the future
ArrayList<String> offlineRewards = getOfflineOtherRewards();
for (String str : offlineRewards) {
if (str.equalsIgnoreCase("FirstVote")) {
plugin.getSpecialRewards().giveFirstVoteRewards(this, false);
} else if (str.equalsIgnoreCase("AllSites")) {
plugin.getSpecialRewards().giveAllSitesRewards(this, false);
} else if (str.equalsIgnoreCase("VoteParty")) {
plugin.getVoteParty().giveReward(this, false);
} else if (str.contains("Cumulative")) {
String st = str.substring("Cumulative".length());
if (StringParser.getInstance().isInt(st)) {
int votesRequired = Integer.parseInt(st);
if (votesRequired != 0) {
if (plugin.getSpecialRewardsConfig().getCumulativeRewardEnabled(votesRequired)) {
plugin.getSpecialRewards().giveCumulativeVoteReward(this, false, votesRequired);
}
}
}
} else if (str.contains("MileStone")) {
String st = str.substring("MileStone".length());
if (StringParser.getInstance().isInt(st)) {
int votesRequired = Integer.parseInt(st);
if (votesRequired > 0) {
if (plugin.getSpecialRewardsConfig().getMilestoneRewardEnabled(votesRequired)) {
plugin.getSpecialRewards().giveMilestoneVoteReward(this, true, votesRequired);
}
}
}
} else if (str.contains("VoteStreak")) {
String[] args = str.split("_");
if (args.length > 2) {
String type = args[1];
String st = args[2];
if (plugin.getSpecialRewardsConfig().getVoteStreakRewardEnabled(type, st)) {
plugin.getSpecialRewards().giveVoteStreakReward(this, false, type, "" + st, -1);
}
}
} else {
plugin.debug("Reward handle for " + str + " does not exist!");
}
}
if (!offlineRewards.isEmpty()) {
setOfflineOtherRewards(new ArrayList<String>());
}
}
public void giveWeeklyTopVoterAward(int place, String path) {
new RewardBuilder(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getWeeklyAwardRewardsPath(path)).withPlaceHolder("place", "" + place)
@@ -777,8 +738,6 @@ public class VotingPluginUser extends com.bencodez.advancedcore.api.user.Advance
plugin.debug("Site doesn't exist: " + offlineVotes.get(i));
}
}
giveOfflineOtherRewards();
}
}
@@ -56,10 +56,7 @@ public class VoteParty implements Listener {
}
}
/**
* Check.
*/
public void check() {
public void check(boolean forceBungee) {
if (getTotalVotes() >= getVotesRequired() && ((plugin.getSpecialRewardsConfig().getVotePartyOnlyOncePerDay()
&& plugin.getServerData().isLastVotePartySameDay())
|| !plugin.getSpecialRewardsConfig().getVotePartyOnlyOncePerDay())) {
@@ -72,8 +69,8 @@ public class VoteParty implements Listener {
if (event.isCancelled()) {
return;
}
MiscUtils.getInstance().broadcast(plugin.getSpecialRewardsConfig().getVotePartyBroadcast());
giveRewards();
giveRewards(forceBungee);
if (plugin.getSpecialRewardsConfig().getVotePartyIncreaseVotesRquired() > 0) {
plugin.getServerData().setVotePartyExtraRequired(plugin.getServerData().getVotePartyExtraRequired()
@@ -153,27 +150,27 @@ public class VoteParty implements Listener {
return required;
}
public void giveReward(VotingPluginUser user) {
public void giveReward(VotingPluginUser user, boolean useBungee) {
if (plugin.getSpecialRewardsConfig().getVotePartyUserVotesRequired() > 0) {
if (user.getVotePartyVotes() < plugin.getSpecialRewardsConfig().getVotePartyUserVotesRequired()) {
return;
}
}
giveReward(user, user.isOnline());
giveReward(user, user.isOnline(), useBungee);
}
public void giveReward(VotingPluginUser user, boolean online) {
public void giveReward(VotingPluginUser user, boolean online, boolean useBungee) {
new RewardBuilder(plugin.getSpecialRewardsConfig().getData(),
plugin.getSpecialRewardsConfig().getVotePartyRewardsPath()).setOnline(online)
plugin.getSpecialRewardsConfig().getVotePartyRewardsPath())
.setOnline(online)
.withPlaceHolder("VotesRequired",
"" + plugin.getSpecialRewardsConfig().getVotePartyVotesRequired())
.send(user);
.setServer(useBungee).send(user);
}
/**
* Give rewards.
*/
public void giveRewards() {
public void giveRewards(boolean forceBungee) {
MiscUtils.getInstance().broadcast(plugin.getSpecialRewardsConfig().getVotePartyBroadcast());
for (final String cmd : plugin.getSpecialRewardsConfig().getVotePartyCommands()) {
Bukkit.getScheduler().runTask(plugin, new Runnable() {
@@ -189,14 +186,14 @@ public class VoteParty implements Listener {
plugin.debug("Trying to give all players vote party");
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
giveReward(user);
giveReward(user, forceBungee);
}
} else {
plugin.debug("Trying to give all online players vote party");
plugin.debug("Trying to give all voted players vote party");
plugin.debug(ArrayUtils.getInstance().makeStringList(getVotedUsers()));
for (String uuid : getVotedUsers()) {
VotingPluginUser user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
giveReward(user);
giveReward(user, forceBungee);
}
}
reset(false);
@@ -265,13 +262,13 @@ public class VoteParty implements Listener {
plugin.getServerData().saveData();
}
public synchronized void vote(VotingPluginUser user, boolean realVote) {
public synchronized void vote(VotingPluginUser user, boolean realVote, boolean forceBungee) {
if (plugin.getSpecialRewardsConfig().getVotePartyEnabled()) {
if (plugin.getSpecialRewardsConfig().getVotePartyCountFakeVotes() || realVote) {
if (plugin.getSpecialRewardsConfig().getVotePartyCountOfflineVotes() || user.isOnline()) {
addTotal(user);
addVotePlayer(user);
check();
check(forceBungee);
}
}
}