Compare commits

...
45 Commits
Author SHA1 Message Date
Ben12345rocks a59a98f8cb Update version number 2020-02-23 12:15:45 -05:00
Ben12345rocks e62213bfd5 Bug fix 2020-02-19 16:41:38 -05:00
Ben12345rocks 61b77c4754 Little improvement 2020-02-15 16:33:59 -05:00
Ben12345rocks 758aaa3dd7 Improvements 2020-02-15 16:24:22 -05:00
Ben12345rocks 51389a27fb Bug fix 2020-02-12 17:01:18 -05:00
Ben12345rocks 37b94cc36c Add console message on bungeecoord when vote received 2020-02-09 17:02:18 -05:00
Ben12345rocks 1e4796d418 Add option 2020-02-03 20:56:49 -05:00
Ben12345rocks 62b0d6012d Fix spelling mistake 2020-02-03 16:43:50 -05:00
Ben12345rocks 52726c8bb3 Fix warning message 2020-02-02 13:58:26 -05:00
Ben12345rocks ede06e0923 Fix warning message 2020-01-29 17:11:44 -05:00
Ben12345rocks 6eb2c95cc0 Change config comments 2020-01-26 12:16:32 -05:00
Ben12345rocks 835dff8620 Update version number 2020-01-21 17:03:12 -05:00
Ben12345rocks 1019b0b83b Update to 1.15.2 2020-01-21 16:59:12 -05:00
Ben12345rocks a44070b505 Bug fix 2020-01-19 12:39:14 -05:00
Ben12345rocks 58bd4e2d9d Little change 2020-01-17 16:45:07 -05:00
Ben12345rocks cff346e6a4 Add loadbefore 2020-01-13 16:54:18 -05:00
Ben 0331e34e91 Create stale.yml 2020-01-11 15:27:26 -05:00
Ben12345rocks 26ff8d8588 Add try/catch 2020-01-11 14:59:39 -05:00
Ben12345rocks 9a38826cf7 Improvement 2020-01-11 08:34:48 -05:00
Ben12345rocks b854631990 Little warning message 2020-01-04 11:44:07 -05:00
Ben12345rocks 5d1cd97ebd Update to 1.15.1 2019-12-17 19:42:34 -05:00
Ben12345rocks c21feb74d1 Update to 1.15 2019-12-10 18:57:25 -05:00
Ben12345rocks 052e2f2541 Update version number 2019-12-07 19:11:34 -05:00
Ben12345rocks 1270b57afa Add option to reset extra voteparty votes monthly and command to do so 2019-12-01 12:34:45 -05:00
Ben12345rocks cf8b219b9d Add ability to remove VotingPlugin.Player permission on a command 2019-11-27 20:27:14 -05:00
Ben12345rocks 689133aab8 Change default backbutton item to barrier 2019-11-23 19:45:57 -05:00
Ben12345rocks 019c0f01eb Add bungee communication encryption 2019-11-17 15:38:56 -05:00
Ben12345rocks 743cac217b Little improvement to bungee command 2019-11-03 17:07:59 -05:00
Ben12345rocks 5f19cb1ec8 Update version number 2019-11-02 21:08:21 -04:00
Ben12345rocks ac5ffa0f7c Bug fix 2019-10-31 17:20:40 -04:00
Ben12345rocks 114e07eb01 Improvements 2019-10-30 21:30:49 -04:00
Ben12345rocks 8ba1d75ab3 Bug fix 2019-10-30 20:30:59 -04:00
Ben12345rocks b3555918ed Improvements 2019-10-30 20:12:56 -04:00
Ben12345rocks 0759c05ed1 Bug fix 2019-10-29 21:35:26 -04:00
Ben12345rocks 278a8f70f2 Config improvements 2019-10-29 16:59:32 -04:00
Ben12345rocks fb5dc9923f Bug fix 2019-10-28 16:49:34 -04:00
Ben12345rocks f942505e62 Redo bungee system 2019-10-27 14:14:41 -04:00
Ben12345rocks 2d2b2db0a7 Bug fix 2019-10-27 12:52:40 -04:00
Ben 18d5078842 Update issue templates 2019-10-24 17:08:57 -04:00
Ben12345rocks 074b2c51e2 Another bug fix 2019-10-24 16:53:45 -04:00
Ben12345rocks 539194720a Possible bug fix 2019-10-24 16:50:06 -04:00
Ben 19fc5865fa Update issue templates 2019-10-20 15:51:09 -04:00
Ben f0d58e0c6a Update issue templates 2019-10-20 12:45:12 -04:00
Ben ddc2bea418 Update issue templates 2019-10-20 12:44:08 -04:00
Ben 24da6893ac Update issue templates 2019-10-20 12:39:37 -04:00
25 changed files with 516 additions and 186 deletions

No files matched your search

+30
View File
@@ -0,0 +1,30 @@
---
name: Bug report
about: Bug report for VotingPlugin
title: ''
labels: Possible Bug
assignees: ''
---
**Versions**
Plugin version and spigot version.
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots/Configs**
If applicable, add screenshots to help explain your problem and/or configs relating to the issue.
**Additional context**
Add any other context about the problem here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea
title: ''
labels: Possible Feature
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
@@ -0,0 +1,17 @@
---
name: Question/Concerns
about: Ask about a question or a concern about the plugin
title: ''
labels: Question/Concern
assignees: ''
---
**Versions**
Plugin version and spigot version
**Relevant information**
Configs that relate to the issue in a pastebin.
**Context**
Context about the question/concern
+16
View File
@@ -0,0 +1,16 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 20
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- Priority
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
+25 -8
View File
@@ -454,8 +454,8 @@ GUI:
Name: '&3&l%position%: &3%player%'
Lore: '&3&lVotes: &3%votes%'
SwitchItem:
Name: 'Switch TopVoter'
Lore: 'Currently: %Top%'
Name: '&3Switch TopVoter'
Lore: '&bCurrently: %Top%'
Material: 'SIGN'
Amount: 1
# 8 Slots over from the bottom left
@@ -561,7 +561,7 @@ GUI:
VoteShopName: 'VoteShop'
BackButton:
Material: 'PAPER'
Material: 'BARRIER'
Data: 0
Amount: 1
Name: '&8Back to VoteGUI'
@@ -608,13 +608,12 @@ Shop:
# To disable reward set value to []
# Eg:
# FirstVote: [] (All in one line)
# By default all rewards are disabled
# Rewards will be given if there is a reward to give
# First vote rewards
FirstVote:
Messages:
Player: '&aYou voted for your first time!'
Money: 100
# All vote rewards
# Reward for voting on all sites in one day
@@ -652,6 +651,8 @@ VoteParty:
ResetEachDay: false
# Reset at the end of the month
ResetMonthly: false
# Reset extra votes
ResetExtraVotesMonthly: false
# Count votes from /av vote?
CountFakeVotes: true
# Number of user votes that apply to vote party total the user needs to get rewards
@@ -886,6 +887,10 @@ CountFakeVotes: true
# Requires restart to take affect
GiveDefaultPermission: true
# Permissions given by VotingPlugin.Player by default
# Permissions listed here will no be accessible with the default permission
DisabledDefaultPermissions: []
# Remove old player files
# Happens on startup or /av purge
PurgeOldData: false
@@ -950,6 +955,16 @@ UseBungeecoord: false
# Also can be applied to rewards
Server: PleaseSet
# Bungee communication, add bungee host/port here
BungeeServer:
Host: '127.0.0.1'
Port: 1297
# Bungee communication, add this to bungee server
SpigotServer:
Host: '127.0.0.1'
POrt: 1298
# Get the plugin to broadcast to all servers
BungeeBroadcast: false
@@ -962,9 +977,11 @@ DisabledCommands: []
# ---------------------------------------------------------
# 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 mysql on player join always
@@ -975,12 +992,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
# Will force GUI's to close on every click
AlwaysCloseInventory: false
# Options for request api
# Current methods:
# ANVIL
+22
View File
@@ -7,6 +7,28 @@
SendVotesToAllServers: true
# Have a reward on 1 server on the network
SendToOnlineServer: false
# Tell servers to broadcast
Broadcast: true
# List of servers the plugin won't send the vote to
BlockedServers:
- hub
FallBackServer: factions
# Bungee communication, Add this to each spigot server
BungeeServer:
Host: '127.0.0.1'
Port: 1297
# Bungee communication, add each spigot server here
SpigotServers:
lobby:
Host: '127.0.0.1'
Port: 1298
factions:
Host: '127.0.0.1'
Port: 1999
# MYSQL Required
# MYSQL INFO --------------------------
Host: ''
+3 -1
View File
@@ -4,7 +4,7 @@ main: com.Ben12345rocks.VotingPlugin.Main
description: Highly Customizable Voting Listener!
website: https://www.spigotmc.org/resources/votingplugin.15358/
author: Ben12345rocks
softdepend: [MVdWPlaceholders, Votifier]
softdepend: [MVdWPlaceholders, Votifier, CMI, Vault, PlaceholderAPI]
api-version: 1.13
commands:
vote:
@@ -225,4 +225,6 @@ permissions:
default: false
VotingPlugin.Sign.Create:
description: Permission to create sign
VotingPlugin.Admin.GenerateServiceSite:
description: Permission for generating votesite message
+2 -2
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.Ben12345rocks</groupId>
<artifactId>VotingPlugin</artifactId>
<version>5.20.3</version>
<version>5.20.7</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -259,7 +259,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<version>1.15.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -1,14 +1,21 @@
package com.Ben12345rocks.VotingPlugin;
import java.util.ArrayList;
import java.io.File;
import java.util.UUID;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessage;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessageHandler;
import org.bukkit.Bukkit;
import com.Ben12345rocks.AdvancedCore.Util.Encryption.EncryptionHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.ClientHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.SocketHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.SocketReceiver;
import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Objects.User;
import com.Ben12345rocks.VotingPlugin.Objects.VoteSite;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
import lombok.Getter;
public class BungeeHandler {
private static BungeeHandler instance = new BungeeHandler();
@@ -16,32 +23,103 @@ public class BungeeHandler {
return instance;
}
@Getter
private SocketHandler socketHandler;
@Getter
private ClientHandler clientHandler;
private EncryptionHandler encryptionHandler;
public void close() {
socketHandler.closeConnection();
clientHandler.stopConnection();
}
public void load() {
PluginMessage.getInstance().add(new PluginMessageHandler("bungeevote") {
encryptionHandler = new EncryptionHandler(new File(Main.plugin.getDataFolder(), "secretkey.key"));
Bukkit.getScheduler().runTask(Main.plugin, new Runnable() {
@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();
public void run() {
clientHandler = new ClientHandler(Config.getInstance().getBungeeServerHost(),
Config.getInstance().getBungeeServerPort(), encryptionHandler);
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 3) {
if (data[0].equalsIgnoreCase("bungeevote")) {
String uuid = data[1];
User user = null;
if (!uuid.isEmpty()) {
user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
} else {
user = UserManager.getInstance().getVotingPluginUser(data[2]);
}
user.clearCache();
user.bungeeVote(data[3]);
}
}
}
});
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 3) {
if (data[0].equalsIgnoreCase("bungeevoteonline")) {
String uuid = data[1];
User user = null;
if (!uuid.isEmpty()) {
user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
} else {
user = UserManager.getInstance().getVotingPluginUser(data[2]);
}
user.clearCache();
user.bungeeVoteOnline(data[3]);
}
}
}
});
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 2) {
if (data[0].equalsIgnoreCase("BungeeBroadcast")) {
VoteSite site = Main.plugin.getVoteSite(data[1]);
String p = data[3];
User user = UserManager.getInstance().getVotingPluginUser(p);
if (site != null) {
site.broadcastVote(user, false);
} else {
Main.plugin.getLogger().warning("No votesite for " + data[1]);
}
Main.plugin.setUpdate(true);
}
}
}
});
}
});
PluginMessage.getInstance().add(new PluginMessageHandler("Broadcast") {
socketHandler = new SocketHandler(Main.plugin.getVersion(), Config.getInstance().getSpigotServerHost(),
Config.getInstance().getSpigotServerPort(), encryptionHandler);
@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);
}
});
}
public void sendData(String... strings) {
clientHandler.sendMessage(strings);
}
}
@@ -1065,6 +1065,18 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "VotePartyExtraRequired", "(Number)" },
"VotingPlugin.Commands.AdminVote.VoteParty.SetExtraRequired|" + adminPerm,
"Force a voteparty reward, resets vote count") {
@Override
public void execute(CommandSender sender, String[] args) {
ServerData.getInstance().setVotePartyExtraRequired(Integer.parseInt(args[1]));
sendMessage(sender, "&cSet VotePartyExtraRequired to " + args[1]);
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "ForceMilestone", "(Number)" },
"VotingPlugin.Commands.AdminVote.ForceMilestone|" + adminPerm, "Force a milestone") {
@@ -1408,7 +1420,7 @@ public class CommandLoader {
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "URL", "(SiteName)" },
"VotingPlugin.Commands.Vote.URL.VoteSite|" + playerPerm, "Open VoteURL GUI", false) {
"VotingPlugin.Commands.Vote.URL.VoteSite", "Open VoteURL GUI", false) {
@Override
public void execute(CommandSender sender, String[] args) {
@@ -2134,6 +2146,20 @@ public class CommandLoader {
list.remove(i);
}
}
ArrayList<String> disabledDefaultPerms = config.getDisabledDefaultPermissions();
for (CommandHandler cmd : list) {
boolean contains = false;
for (String dis : disabledDefaultPerms) {
if (cmd.getPerm().contains(dis + "|")) {
contains = true;
}
}
if (contains) {
cmd.setPerm(cmd.getPerm().replace("|" + playerPerm, ""));
plugin.debug("Disabling VotingPlugin.Player permission on " + cmd.getPerm());
}
}
}
/**
@@ -598,6 +598,9 @@ public class Commands {
if (time > 0) {
Date date = new Date(time);
String timeString = new SimpleDateFormat(config.getFormatTimeFormat()).format(date);
if (StringParser.getInstance().containsIgnorecase(timeString, "YamlConfiguration")) {
plugin.getLogger().warning("Detected issue parsing time, check time format");
}
return timeString;
}
return "";
@@ -921,7 +924,7 @@ public class Commands {
MessageBuilder message = new MessageBuilder(config.getFormatCommandsVoteURLS());
message.replacePlaceholder("num", Integer.toString(counter)).replacePlaceholder("url", voteURL)
.replacePlaceholder("SiteName", voteSite.getDisplayName())
.replacePlaceholder("player", user.getPlayerName())
.replacePlaceholder("player", "" + user.getPlayerName())
.replacePlaceholder("Next", "" + voteCommandNextInfo(user, voteSite)).colorize();
sites.add(message.getText());
}
@@ -59,7 +59,7 @@ public class PlayerGUIs {
if (sec != null) {
item = new ItemBuilder(sec);
} else {
item = new ItemBuilder(Material.PAPER, 1).setName("&8Back to VoteGUI");
item = new ItemBuilder(Material.BARRIER, 1).setName("&8Back to VoteGUI");
}
BInventoryButton b = new BInventoryButton(item) {
@@ -309,6 +309,7 @@ public class PlayerGUIs {
@Override
public void onClick(ClickEvent event) {
Player player = event.getWhoClicked();
event.getButton().getInv().closeInv(player, null);
User user = UserManager.getInstance().getVotingPluginUser(player);
user.clearCache();
@@ -704,6 +705,10 @@ public class PlayerGUIs {
}
public void openVoteURL(Player player, String voteSite) {
if (!plugin.isVoteSite(voteSite)) {
player.sendMessage("Not a valid votesite");
return;
}
User user = UserManager.getInstance().getVotingPluginUser(player);
VoteSite site = plugin.getVoteSite(voteSite);
BInventory inv = new BInventory(StringParser.getInstance()
@@ -69,9 +69,9 @@ public class Config extends YMLFile {
@Getter
private String formatCommandsVoteLastNeverVoted;
@ConfigDataString(path = "Format.Commands.Vote.Last.LastVoted", defaultValue = "%times% ago")
@ConfigDataString(path = "Format.Commands.Vote.Last.LastVoted")
@Getter
private String formatCommandsVoteLastLastVoted;
private String formatCommandsVoteLastLastVoted = "%times% ago";
@ConfigDataString(path = "Format.TimeFormats.Days", defaultValue = "Days")
@Getter
@@ -125,6 +125,10 @@ public class Config extends YMLFile {
@Getter
private boolean addTotals = true;
@ConfigDataBoolean(path = "AlterColumns")
@Getter
private boolean alterColumns = true;
@Getter
private String allSitesRewardPath = "AllSites";
@@ -207,6 +211,10 @@ public class Config extends YMLFile {
@Getter
private int convertDelay;
@ConfigDataInt(path = "ConvertAmount")
@Getter
private int convertAmount = 250;
@ConfigDataBoolean(path = "EnableDailyRewards")
@Getter
private boolean enableDailyRewards = false;
@@ -223,6 +231,14 @@ public class Config extends YMLFile {
@Getter
private boolean disableNoServiceSiteMessage = false;
@ConfigDataListString(path = "DisabledDefaultPermissions")
@Getter
private ArrayList<String> disabledDefaultPermissions = new ArrayList<String>();
@ConfigDataBoolean(path = "VoteParty.ResetExtraVotesMonthly")
@Getter
private boolean votePartyResetExtraVotesMonthly = false;
@ConfigDataBoolean(path = "DisableAdvancedTab")
@Getter
private boolean disableAdvancedTab = false;
@@ -311,11 +327,27 @@ public class Config extends YMLFile {
@ConfigDataBoolean(path = "AllowUnJoinedCheckServer")
@Getter
private boolean allowUnJoinedCheckServer = true;
@ConfigDataListString(path = "DisabledCommands")
@Getter
private ArrayList<String> disabledCommands = new ArrayList<String>();
@ConfigDataString(path = "BungeeServer.Host")
@Getter
private String bungeeServerHost = "";
@ConfigDataString(path = "SpigotServer.Host")
@Getter
private String spigotServerHost = "";
@ConfigDataInt(path = "BungeeServer.Port")
@Getter
private int bungeeServerPort = 1297;
@ConfigDataInt(path = "SpigotServer.Port")
@Getter
private int spigotServerPort = 1298;
/**
* Instantiates a new config.
*/
@@ -6,11 +6,14 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import com.Ben12345rocks.AdvancedCore.Util.Messages.StringParser;
import com.Ben12345rocks.AdvancedCore.Util.Misc.ArrayUtils;
import com.Ben12345rocks.AdvancedCore.YML.YMLFile;
import com.Ben12345rocks.VotingPlugin.Main;
@@ -65,6 +68,13 @@ public class ConfigVoteSites extends YMLFile {
set(siteName, "Rewards.Messages.Player", "&aThanks for voting on %ServiceSite%!");
plugin.loadVoteSites();
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.hasPermission("VotingPlugin.Admin.GenerateServiceSite")) {
p.sendMessage(StringParser.getInstance().colorize("&cGenerating votesite for service site "
+ siteName + ", please check console for details"));
}
}
}
}
@@ -70,5 +70,9 @@ public class PlayerVoteEvent extends Event {
@Getter
@Setter
private boolean bungee = false;
@Getter
@Setter
private boolean forceBungee = false;
}
@@ -8,7 +8,6 @@ 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;
@@ -52,9 +51,6 @@ public class PlayerJoinEvent implements Listener {
}
boolean data = user.getData().hasData();
if (Main.plugin.getOptions().isProcessRewards() && Config.getInstance().isUseBungeeCoord() && data) {
user.bungeeVote();
}
// run remind
user.loginMessage();
@@ -99,7 +99,7 @@ public class PlayerVoteListener implements Listener {
VoteParty.getInstance().vote(user, event.isRealVote());
// broadcast vote if enabled in config
if (config.isBroadcastVotesEnabled()) {
if (config.isBroadcastVotesEnabled() && (!Config.getInstance().isBungeeBroadcast() || !event.isBungee())) {
if (!Config.getInstance().getFormatBroadcastWhenOnline() || user.isOnline()) {
voteSite.broadcastVote(user);
}
@@ -124,7 +124,7 @@ public class PlayerVoteListener implements Listener {
if (((user.isOnline() || voteSite.isGiveOffline()) && Main.plugin.getOptions().isProcessRewards())
|| event.isBungee()) {
user.playerVote(voteSite, true, false, event.isBungee());
user.playerVote(voteSite, true, false, event.isForceBungee());
user.closeInv();
} else {
user.addOfflineVote(voteSite.getKey());
@@ -69,7 +69,7 @@ public class VotiferEvent implements Listener {
}
plugin.getLogger()
.info("Recieved a vote from service site '" + voteSite + "' by player '" + voteUsername + "'!");
.info("Received a vote from service site '" + voteSite + "' by player '" + voteUsername + "'!");
plugin.debug("PlayerUsername: " + voteUsername);
plugin.debug("VoteSite: " + voteSite);
@@ -144,8 +144,12 @@ public class Main extends AdvancedCorePlugin {
try {
Class.forName("com.vexsoftware.votifier.model.VotifierEvent");
} catch (ClassNotFoundException e) {
plugin.getLogger()
.warning("No VotifierEvent found, install Votifier, NuVotifier, or another Votifier plugin");
if (!Config.getInstance().isUseBungeeCoord()) {
plugin.getLogger()
.warning("No VotifierEvent found, install Votifier, NuVotifier, or another Votifier plugin");
} else {
plugin.debug("No VotifierEvent found, but usebungeecoord enabled");
}
}
}
@@ -213,7 +217,7 @@ public class Main extends AdvancedCorePlugin {
ArrayList<String> converted = new ArrayList<String>();
int i = 0;
while (i < 250 && i < uuids.size()) {
while (i < Config.getInstance().getConvertAmount() && i < uuids.size()) {
String uuid = uuids.get(i);
try {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
@@ -284,6 +288,15 @@ public class Main extends AdvancedCorePlugin {
return VoteParty.getInstance();
}
public boolean isVoteSite(String voteSite) {
for (VoteSite site : getVoteSites()) {
if (site.getKey().equalsIgnoreCase(voteSite)) {
return true;
}
}
return false;
}
/**
* Gets the vote site.
*
@@ -748,7 +761,6 @@ 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")) {
@@ -822,7 +834,7 @@ public class Main extends AdvancedCorePlugin {
}
// set columns
if (getStorageType().equals(UserStorage.MYSQL)) {
if (getStorageType().equals(UserStorage.MYSQL) && Config.getInstance().isAlterColumns()) {
getMysql().alterColumnType("TopVoterIgnore", "VARCHAR(5)");
getMysql().alterColumnType("CheckWorld", "VARCHAR(5)");
getMysql().alterColumnType("Reminded", "VARCHAR(5)");
@@ -997,6 +1009,9 @@ public class Main extends AdvancedCorePlugin {
}
}, 0);
HandlerList.unregisterAll(plugin);
if (Config.getInstance().isUseBungeeCoord()) {
BungeeHandler.getInstance().close();
}
plugin = null;
}
@@ -1139,13 +1154,9 @@ public class Main extends AdvancedCorePlugin {
ServerData.getInstance().updateValues();
Signs.getInstance().updateSigns();
boolean bungee = Config.getInstance().isUseBungeeCoord();
for (Player player : Bukkit.getOnlinePlayers()) {
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");
@@ -1,6 +1,7 @@
package com.Ben12345rocks.VotingPlugin.Objects;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
@@ -222,26 +223,31 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
if (time == 0) {
return true;
}
LocalDateTime now = TimeChecker.getInstance().getTime();
LocalDateTime lastVote = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault())
.plusHours(Main.plugin.getOptions().getTimeHourOffSet());
try {
LocalDateTime now = TimeChecker.getInstance().getTime();
LocalDateTime lastVote = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault())
.plusHours(Main.plugin.getOptions().getTimeHourOffSet());
if (!voteSite.isVoteDelayDaily()) {
int votedelay = ConfigVoteSites.getInstance().getVoteDelay(siteName);
if (!voteSite.isVoteDelayDaily()) {
int votedelay = ConfigVoteSites.getInstance().getVoteDelay(siteName);
if (votedelay == 0) {
if (votedelay == 0) {
return false;
}
LocalDateTime nextvote = lastVote.plusHours(votedelay);
return now.isAfter(nextvote);
} else {
if (now.getDayOfYear() != lastVote.getDayOfYear() || now.getYear() != lastVote.getYear()) {
return true;
}
return false;
}
LocalDateTime nextvote = lastVote.plusHours(votedelay);
return now.isAfter(nextvote);
} else {
if (now.getDayOfYear() != lastVote.getDayOfYear() || now.getYear() != lastVote.getYear()) {
return true;
}
return false;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@@ -599,44 +605,39 @@ 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) {
public void bungeeVote(String service) {
if (Config.getInstance().isUseBungeeCoord()) {
if (clearCache) {
Main.plugin.getMysql().clearCache(getUUID());
}
Main.plugin.debug("Bungee vote for " + getPlayerName() + " on " + service);
checkBungeeData(getData().getString("Proxy_" + Main.plugin.getOptions().getServer()));
getData().setString("Proxy_" + Main.plugin.getOptions().getServer(), "");
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(true);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
checkBungeeData(getData().getString("Proxy_Online"));
getData().setString("Proxy_Online", "");
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
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() {
public void bungeeVoteOnline(String service) {
if (Config.getInstance().isUseBungeeCoord()) {
Main.plugin.debug("Bungee online vote for " + getPlayerName() + " on " + service);
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(false);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
}
});
}
}
@@ -924,8 +925,8 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
break;
case Monthly:
if (Config.getInstance().isLimitMonthlyVotes()) {
int days = TimeChecker.getInstance().getTime().getMonth().maxLength();
if (value > days) {
int days = LocalDate.now().lengthOfMonth();
if (value >= days * plugin.getVoteSites().size()) {
value = days * plugin.getVoteSites().size();
}
}
@@ -14,8 +14,7 @@ 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.BungeeHandler;
import com.Ben12345rocks.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Config.ConfigVoteSites;
@@ -118,8 +117,7 @@ public class VoteSite {
public void broadcastVote(User user, boolean checkBungee) {
if (!user.isVanished()) {
if (checkBungee && Config.getInstance().isBungeeBroadcast()) {
PluginMessage.getInstance().sendPluginMessage(PlayerUtils.getInstance().getRandomPlayer(), "Broadcast",
getServiceSite(), user.getPlayerName());
BungeeHandler.getInstance().sendData("Broadcast", getServiceSite(), user.getPlayerName());
} else {
String playerName = user.getPlayerName();
String bc = StringParser.getInstance().colorize(config.getFormatBroadCastMsg());
@@ -231,6 +231,10 @@ public class VoteParty implements Listener {
if (Config.getInstance().getVotePartyResetMontly()) {
reset();
}
if (Config.getInstance().isVotePartyResetExtraVotesMonthly()) {
ServerData.getInstance().setVotePartyExtraRequired(0);
}
}
public void register() {
@@ -1,21 +1,20 @@
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 java.io.File;
import java.util.HashMap;
import java.util.List;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.DataType;
import com.Ben12345rocks.AdvancedCore.Util.Encryption.EncryptionHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.ClientHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.SocketHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.SocketReceiver;
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;
import net.md_5.bungee.config.Configuration;
public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listener {
@@ -25,10 +24,15 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
@Getter
private BungeeMySQL mysql;
private SocketHandler socketHandler;
private HashMap<String, ClientHandler> clientHandles;
private EncryptionHandler encryptionHandler;
@Override
public void onEnable() {
getProxy().getPluginManager().registerListener(this, this);
this.getProxy().registerChannel("VotingPlugin:VotingPlugin".toLowerCase());
config = new Config(this);
config.load();
@@ -60,43 +64,42 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
getMysql().alterColumnType("LastMonthTotal", "INT DEFAULT '0'");
getProxy().getPluginManager().registerCommand(this, new VotingPluginBungeeCommand(this));
encryptionHandler = new EncryptionHandler(new File(getDataFolder(), "secretkey.key"));
socketHandler = new SocketHandler(getDescription().getVersion(), config.getBungeeHost(), config.getBungeePort(),
encryptionHandler);
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 2) {
if (data[0].equalsIgnoreCase("Broadcast")) {
sendServerMessage(data);
}
}
}
});
clientHandles = new HashMap<String, ClientHandler>();
List<String> l = config.getBlockedServers();
for (String s : config.getSpigotServers()) {
if (!l.contains(s)) {
Configuration d = config.getSpigotServerConfiguration(s);
clientHandles.put(s,
new ClientHandler(d.getString("Host", ""), d.getInt("Port", 1298), encryptionHandler));
}
}
}
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());
getLogger().info("Vote received " + vote.getUsername() + " from service site " + vote.getServiceName());
}
public String getUUID(String playerName) {
@@ -115,43 +118,44 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
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);
// for (String send : getProxy().getServers().keySet()) {
// mysql.update(uuid, "Proxy_" + send, finalData, DataType.STRING);
// }
sendServerMessage("bungeevote", uuid, name, service);
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
} else if (config.getSendToOnlineServer()) {
mysql.update(uuid, "Proxy_Online", finalData, DataType.STRING);
sendPluginMessage("bungeevote", uuid, name);
ProxiedPlayer p = getProxy().getPlayer(name);
String server = "";
if (p.isConnected()) {
server = p.getServer().getInfo().getName();
} else {
server = p.getReconnectServer().getName();
}
if (config.getBlockedServers().contains(server)) {
server = config.getFallBack();
}
// mysql.update(uuid, "Proxy_Online", finalData, DataType.STRING);
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service);
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, 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();
public void sendServerMessage(String... messageData) {
for (ClientHandler h : clientHandles.values()) {
h.sendMessage(messageData);
}
}
public void sendServerMessageServer(String server, String... messageData) {
if (clientHandles.containsKey(server)) {
clientHandles.get(server).sendMessage(messageData);
}
}
@@ -4,6 +4,8 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.util.Collection;
import java.util.List;
import lombok.Getter;
import net.md_5.bungee.config.Configuration;
@@ -57,4 +59,32 @@ public class Config {
return getData().getBoolean("SendVotesToAllServers");
}
public String getBungeeHost() {
return getData().getString("BungeeServer.Host", "");
}
public int getBungeePort() {
return getData().getInt("BungeeServer.Port", 1297);
}
public Collection<String> getSpigotServers() {
return getData().getSection("SpigotServers").getKeys();
}
public List<String> getBlockedServers() {
return getData().getStringList("BlockedServers");
}
public boolean getBroadcast() {
return getData().getBoolean("Broadcast", false);
}
public String getFallBack() {
return getData().getString("FallBackServer", "");
}
public Configuration getSpigotServerConfiguration(String s) {
return getData().getSection("SpigotServers." + s);
}
}
@@ -8,24 +8,28 @@ public class VotingPluginBungeeCommand extends Command {
private Bungee bungee;
public VotingPluginBungeeCommand(Bungee bungee) {
super("votingpluginbungee");
super("votingpluginbungee", "votingplugin.admin");
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);
if (sender.hasPermission("votingplugin.admin")) {
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);
}
}
}
} else {
sender.sendMessage(new TextComponent("You do not have permission to do this!"));
}
}
}