Compare commits

..
31 Commits
Author SHA1 Message Date
Ben12345rocks d96490e60b Update version number 2020-10-03 20:18:55 -04:00
Ben12345rocks 2198c5d4a0 Bug fix 2020-10-03 20:13:31 -04:00
Ben12345rocks 776179e41d Little improvements 2020-10-03 19:31:14 -04:00
Ben12345rocks 7bda38ff48 Little improvement 2020-10-03 07:56:09 -04:00
Ben12345rocks a23ead4d9c Little command improvement 2020-10-02 19:42:37 -04:00
Ben12345rocks 0f820738c6 Add safe guard for milestones with config option 2020-10-02 19:14:52 -04:00
Ben12345rocks 30d912114d Improvements to book GUI 2020-09-29 19:45:04 -04:00
Ben12345rocks 567288309c Bug fix 2020-09-29 17:22:12 -04:00
Ben12345rocks 7cd67f55f1 Little improvement 2020-09-29 16:44:52 -04:00
Ben12345rocks 59e7dcd8e8 Bug fix and little improvements 2020-09-28 19:21:54 -04:00
Ben12345rocks 90e55a0a7d Add command /av resyncmilestonesalreadygiven 2020-09-25 20:04:25 -04:00
Ben12345rocks a280d91c05 Add book GUI for /vote 2020-09-24 19:27:21 -04:00
Ben12345rocks feb54aeb9e Undo test commit 2020-09-20 13:24:06 -04:00
Ben12345rocks ee96bf500e Test commit 2020-09-20 13:23:26 -04:00
Ben12345rocks 91a266889f Code cleanup 2020-09-20 12:39:59 -04:00
Ben12345rocks 6051138613 Test change 2020-09-14 17:03:17 -04:00
Ben12345rocks d9780f9954 Add a command to force top voter awards 2020-09-13 14:23:31 -04:00
Ben12345rocks 453287dc1c Fix logging votes to file 2020-09-12 18:23:21 -04:00
Ben12345rocks 8f119862d0 Update to 1.16.3 2020-09-10 19:22:46 -04:00
Ben12345rocks df1fc4a734 Little change 2020-09-07 14:51:35 -04:00
Ben12345rocks a545462410 Update version number 2020-09-06 20:01:13 -04:00
Ben12345rocks bb7cc4d6e7 Change default config option 2020-09-05 18:24:01 -04:00
Ben12345rocks eb69cf41a5 Add config options 2020-09-05 16:22:59 -04:00
Ben12345rocks 642164b1b4 Little fix 2020-09-03 16:29:38 -04:00
Ben12345rocks ff99a462d7 Add /av user (player) ForceVoteShop (Shop) 2020-09-03 16:27:56 -04:00
Ben12345rocks e7de87e8aa Merge branch 'master' of https://github.com/Ben12345rocks/VotingPlugin 2020-09-03 15:17:46 -04:00
Ben12345rocks e5d91037cb Bug fix 2020-09-03 15:16:47 -04:00
Ben e7db5b8aa2 Merge pull request #937 from DrBot7/master
More reminding options
2020-09-03 15:13:02 -04:00
DrBot7 551c962cd2 More reminding options
With this change, players with the votingplugin.login.remindvotes.any permission will be reminded to vote as long as they can vote on any of their voting sites.
2020-09-02 23:33:39 -05:00
Ben12345rocks 5ada4e05a2 Bug fix 2020-09-01 15:22:52 -04:00
Ben12345rocks 1f3243e362 Bug fix 2020-08-31 15:10:06 -04:00
27 changed files with 1077 additions and 758 deletions

No files matched your search

+25
View File
@@ -113,6 +113,8 @@ Commands:
# disable /vote reward commands
# Effective after restart
DisableVoteRewardGUIs: false
# Enable to use book GUI instead of normal GUI
VoteBookGUI: false
Format:
# CommandHandler help message
@@ -417,6 +419,17 @@ GUI:
Amount: 1
URLText: '%VoteUrl%'
VoteURLBookGUI:
Title: '&cVoteURL'
SiteName: '&c%name%'
CanVoteText: 'Click me'
CanVoteColor: 'GREEN'
AlreadyVotedText: 'Click me'
AlreadyVotedColor: 'RED'
Layout:
- '&c%Sitename%'
- '[UrlText]'
VoteRewardBackButton: false
# Customize /vote reward
# Show players what you get when you vote on each site
@@ -699,6 +712,11 @@ UseJavascriptPlaceholders: true
# Limit monthly votes to number of days of a month multipled by the number of sites
LimitMonthlyVotes: false
# This is an extra safe guard to prevent milestones
# from being executed more than once
# Shoudn't be needed, but enable if you have trouble with milestones
PreventRepeatMilestones: false
######################
# Debug
######################
@@ -817,6 +835,13 @@ DisabledCommands: []
# Enable to true for extra player checks
ExtraBackgroundUpdate: false
# This will prevent spam clicking GUI's to prevent exploits
# Number is time in between clicking in milliseconds
SpamClickTime: 350
# Message to send when inventory forced closed when spam clicking
# Uncomment to use
#SpamClickMessage: '&cDetected spam clicking GUI, closing to prevent exploits'
# ---------------------------------------------------------
# Mysql cache options
# Clearing cache forces the plugin to pull from database
+1 -4
View File
@@ -3,7 +3,7 @@ version: ${project.version}
main: com.Ben12345rocks.VotingPlugin.Main
description: Highly Customizable Voting Listener!
website: https://www.spigotmc.org/resources/votingplugin.15358/
author: Ben12345rocks
author: BenCodez
softdepend: [MVdWPlaceholders, Votifier, VotifierPlus, NuVotifier, CMI, Vault, PlaceholderAPI, ProtocolLib, MVdWPlaceholderAPI, AuthMe]
api-version: 1.13
commands:
@@ -195,9 +195,6 @@ commands:
adminvoteForceVoteParty:
description: Command Alias
aliases: avForceVoteParty
adminvoteUserEditValue:
description: Command Alias
aliases: avUserEditValue
adminvoteSetRequestMethod:
description: Command Alias
aliases: avSetRequestMethod
+7 -2
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.Ben12345rocks</groupId>
<artifactId>VotingPlugin</artifactId>
<version>5.23.2</version>
<version>5.24</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -259,7 +259,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.16.2-R0.1-SNAPSHOT</version>
<version>1.16.3-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -320,5 +320,10 @@
<artifactId>ConfigUpdater</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>xyz.upperlevel.spigot.book</groupId>
<artifactId>spigot-book-api</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
</project>
@@ -342,7 +342,7 @@ public class CommandLoader {
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "ResyncMilestones" },
"VotingPlugin.Commands.AdminVote.SetResyncMilestones|" + adminPerm, "Resync Milestones") {
"VotingPlugin.Commands.AdminVote.ResyncMilestones|" + adminPerm, "Resync Milestones") {
@Override
public void execute(CommandSender sender, String[] args) {
@@ -356,6 +356,44 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "ResyncMilestonesAlreadyGiven" },
"VotingPlugin.Commands.AdminVote.ResyncMilestonesGiven|" + adminPerm,
"Resync Milestones already given") {
@Override
public void execute(CommandSender sender, String[] args) {
sendMessage(sender, "&cStarting...");
ArrayList<Integer> nums = new ArrayList<Integer>();
for (String str : SpecialRewardsConfig.getInstance().getMilestoneVotes()) {
try {
nums.add(Integer.parseInt(str));
} catch (Exception e) {
plugin.getLogger().warning("Failed to get number from " + str);
}
}
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
int milestoneCount = user.getMilestoneCount();
for (int num : nums) {
if (milestoneCount >= num) {
if (!user.hasGottenMilestone(num)) {
sendMessage(sender,
"&cMilestone " + num + " for " + user.getPlayerName()
+ " not already given when it should be, Current AllTimeTotal: "
+ user.getTotal(TopVoter.AllTime) + ", Current MileStoneCount: "
+ user.getMilestoneCount());
user.setHasGotteMilestone(num, true);
}
}
}
}
sendMessage(sender, "&cFinished");
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "ResetPoints" },
"VotingPlugin.Commands.AdminVote.ResetPoints|" + adminPerm, "Clears all points of all players",
@@ -1125,6 +1163,19 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "ForceVoteShop", "(VoteShop)" },
"VotingPlugin.Commands.AdminVote.ForceVoteShop|" + adminPerm, "Force a voteshop reward") {
@Override
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
RewardHandler.getInstance().giveReward(user, Config.getInstance().getData(),
Config.getInstance().getIdentifierRewardsPath(args[3]), new RewardOptions());
sendMessage(sender, "&cVoteShop " + args[3] + " forced");
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "ForceMilestone", "(Number)" },
"VotingPlugin.Commands.AdminVote.ForceMilestone|" + adminPerm, "Force a milestone") {
@@ -1137,6 +1188,68 @@ public class CommandLoader {
}
});
for (final TopVoter top : TopVoter.valuesMinusAllTime()) {
plugin.getAdminVoteCommand()
.add(new CommandHandler(
new String[] { "User", "(player)", "ForceTopVoter", top.toString(), "(Number)" },
"VotingPlugin.Commands.AdminVote.ForceTopVoter." + top.toString() + "|" + adminPerm,
"Force a top voter reward") {
@Override
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
int place = parseInt(args[4]);
switch (top) {
case Daily:
user.giveDailyTopVoterAward(place, args[4]);
break;
case Monthly:
user.giveMonthlyTopVoterAward(place, args[4]);
break;
case Weekly:
user.giveWeeklyTopVoterAward(place, args[4]);
break;
default:
break;
}
sendMessage(sender, "&cTopVoter " + top.toString() + " " + args[4] + " forced");
}
});
String text = "";
switch (top) {
case Daily:
text = "Day";
break;
case Monthly:
text = "Month";
break;
case Weekly:
text = "Week";
break;
default:
break;
}
final String str = text;
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "ForceVoteStreak", str, "(Number)" },
"VotingPlugin.Commands.AdminVote.ForceVoteStreak|" + adminPerm,
"Force a votestreak reward for " + str) {
@Override
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
SpecialRewards.getInstance().giveVoteStreakReward(user, user.isOnline(), str, args[4],
parseInt(args[4]));
sendMessage(sender, "&cVoteStreak " + str + " " + args[4] + " forced");
}
});
}
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "ForceCummulative", "(Number)" },
"VotingPlugin.Commands.AdminVote.ForceCummulative|" + adminPerm, "Force a cummulative reward") {
@@ -1171,19 +1284,6 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "ForceVoteStreak", "(Text)", "(Number)" },
"VotingPlugin.Commands.AdminVote.ForceVoteStreak|" + adminPerm, "Force a votestreak reward") {
@Override
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
SpecialRewards.getInstance().giveVoteStreakReward(user, user.isOnline(), args[3], args[4],
parseInt(args[4]));
sendMessage(sender, "&cVoteStreak " + args[3] + " " + args[4] + " forced");
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "Placeholders", "(player)" },
"VotingPlugin.Commands.AdminVote.Placeholders.Players|" + adminPerm,
@@ -1252,6 +1352,7 @@ public class CommandLoader {
plugin.getCommand("vote" + arg)
.setTabCompleter(new AliasesTabCompleter().setCMDHandle(cmdHandle, false));
plugin.getCommand("vote" + arg).setPermission(cmdHandle.getPerm().split("|")[0]);
for (String str : plugin.getCommand("vote" + arg).getAliases()) {
commands.put(str, cmdHandle);
}
@@ -1273,6 +1374,7 @@ public class CommandLoader {
plugin.getCommand("adminvote" + arg)
.setTabCompleter(new AliasesTabCompleter().setCMDHandle(cmdHandle, true));
plugin.getCommand("adminvote" + arg).setPermission(cmdHandle.getPerm().split("|")[0]);
for (String str : plugin.getCommand("adminvote" + arg).getAliases()) {
commands.put(str, cmdHandle);
}
@@ -1343,7 +1445,8 @@ public class CommandLoader {
Player player = event.getWhoClicked();
String playerName = (String) event.getMeta(player, "Player");
BInventory inv = new BInventory("MileStones: " + playerName);
for (String mileStoneName : SpecialRewardsConfig.getInstance().getMilestoneVotes()) {
for (String mileStoneName : SpecialRewardsConfig.getInstance()
.getMilestoneVotes()) {
if (StringParser.getInstance().isInt(mileStoneName)) {
int mileStone = Integer.parseInt(mileStoneName);
@@ -1430,6 +1533,22 @@ public class CommandLoader {
public void updateReplacements() {
}
});
TabCompleteHandler.getInstance().addTabCompleteOption(new TabCompleteHandle("(VoteShop)", sites) {
@Override
public void reload() {
ArrayList<String> sites = new ArrayList<String>();
for (String str : Config.getInstance().getIdentifiers()) {
sites.add(str);
}
setReplace(sites);
}
@Override
public void updateReplacements() {
}
});
}
/**
@@ -2251,7 +2370,7 @@ public class CommandLoader {
User user = UserManager.getInstance().getVotingPluginUser((Player) sender);
user.sendMessage(Commands.getInstance().voteURLs(user, true));
} else {
sender.sendMessage(Commands.getInstance().voteURLs(null, true));
sender.sendMessage(Commands.getInstance().voteURLs(null, false));
}
}
});
@@ -723,54 +723,6 @@ public class Commands {
return ArrayUtils.getInstance().convert(msg);
}
public long voteNextDurationTime(User user, VoteSite voteSite) {
long time = user.getTime(voteSite);
LocalDateTime now = TimeChecker.getInstance().getTime();
;
LocalDateTime lastVote = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault())
.plusHours(Main.plugin.getOptions().getTimeHourOffSet());
if (!voteSite.isVoteDelayDaily()) {
double votedelay = voteSite.getVoteDelay();
if (votedelay == 0 && voteSite.getVoteDelayMin() == 0) {
return 0;
} else {
LocalDateTime nextvote = lastVote.plusHours((long) votedelay)
.plusMinutes((long) voteSite.getVoteDelayMin());
if (time == 0 || now.isAfter(nextvote)) {
return 0;
} else {
Duration dur = Duration.between(now, nextvote);
return dur.getSeconds();
}
}
} else {
LocalDateTime offsetoclockyesterday = TimeChecker.getInstance().getTime().plusDays(-1).withHour(0)
.withMinute(0).plusHours((long) voteSite.getTimeOffSet());
LocalDateTime offsetoclocktoday = TimeChecker.getInstance().getTime().withHour(0).withMinute(0)
.plusHours((long) voteSite.getTimeOffSet());
LocalDateTime offsetoclocktomorrow = TimeChecker.getInstance().getTime().plusDays(1).withHour(0)
.withMinute(0).plusHours((long) voteSite.getTimeOffSet());
if (!now.isBefore(offsetoclocktoday)) {
if (!lastVote.isBefore(offsetoclocktoday)) {
Duration dur = Duration.between(now, offsetoclocktomorrow);
return dur.getSeconds();
} else {
return 0;
}
} else {
if (!lastVote.isBefore(offsetoclockyesterday)) {
Duration dur = Duration.between(now, offsetoclocktoday);
return dur.getSeconds();
} else {
return 0;
}
}
}
}
/**
* Vote command next info.
*
@@ -974,6 +926,54 @@ public class Commands {
return texts;
}
public long voteNextDurationTime(User user, VoteSite voteSite) {
long time = user.getTime(voteSite);
LocalDateTime now = TimeChecker.getInstance().getTime();
;
LocalDateTime lastVote = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault())
.plusHours(Main.plugin.getOptions().getTimeHourOffSet());
if (!voteSite.isVoteDelayDaily()) {
double votedelay = voteSite.getVoteDelay();
if (votedelay == 0 && voteSite.getVoteDelayMin() == 0) {
return 0;
} else {
LocalDateTime nextvote = lastVote.plusHours((long) votedelay)
.plusMinutes((long) voteSite.getVoteDelayMin());
if (time == 0 || now.isAfter(nextvote)) {
return 0;
} else {
Duration dur = Duration.between(now, nextvote);
return dur.getSeconds();
}
}
} else {
LocalDateTime offsetoclockyesterday = TimeChecker.getInstance().getTime().plusDays(-1).withHour(0)
.withMinute(0).plusHours((long) voteSite.getTimeOffSet());
LocalDateTime offsetoclocktoday = TimeChecker.getInstance().getTime().withHour(0).withMinute(0)
.plusHours((long) voteSite.getTimeOffSet());
LocalDateTime offsetoclocktomorrow = TimeChecker.getInstance().getTime().plusDays(1).withHour(0)
.withMinute(0).plusHours((long) voteSite.getTimeOffSet());
if (!now.isBefore(offsetoclocktoday)) {
if (!lastVote.isBefore(offsetoclocktoday)) {
Duration dur = Duration.between(now, offsetoclocktomorrow);
return dur.getSeconds();
} else {
return 0;
}
} else {
if (!lastVote.isBefore(offsetoclockyesterday)) {
Duration dur = Duration.between(now, offsetoclocktoday);
return dur.getSeconds();
} else {
return 0;
}
}
}
}
/**
* Vote today.
*
@@ -8,6 +8,7 @@ import java.util.Map.Entry;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
@@ -34,6 +35,10 @@ import com.Ben12345rocks.VotingPlugin.TopVoter.TopVoter;
import com.Ben12345rocks.VotingPlugin.TopVoter.TopVoterHandler;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.TextComponent;
import xyz.upperlevel.spigot.book.BookUtil;
public class PlayerGUIs {
static PlayerGUIs instance = new PlayerGUIs();
@@ -692,84 +697,163 @@ public class PlayerGUIs {
*/
public void openVoteURL(Player player) {
setSelectedPlayer(player, null);
BInventory inv = new BInventory(Config.getInstance().getGUIVoteURLName());
User user = UserManager.getInstance().getVotingPluginUser(player);
if (!Config.getInstance().isCommandsVoteBookGUI()) {
// normal GUI
BInventory inv = new BInventory(Config.getInstance().getGUIVoteURLName());
int count = 0;
if (Config.getInstance().getVoteURLViewAllUrlsButtonEnabled()) {
ItemBuilder builderAll = new ItemBuilder(
Config.getInstance().getVoteURLAlreadyVotedAllUrlsButtonItemSection());
if (Config.getInstance().isGuiVoteURLAllUrlsButtonrequireAllSitesVoted()) {
if (user.canVoteAny()) {
builderAll = new ItemBuilder(Config.getInstance().getVoteURLCanVoteAllUrlsButtonItemSection());
int count = 0;
if (Config.getInstance().getVoteURLViewAllUrlsButtonEnabled()) {
ItemBuilder builderAll = new ItemBuilder(
Config.getInstance().getVoteURLAlreadyVotedAllUrlsButtonItemSection());
if (Config.getInstance().isGuiVoteURLAllUrlsButtonrequireAllSitesVoted()) {
if (user.canVoteAny()) {
builderAll = new ItemBuilder(Config.getInstance().getVoteURLCanVoteAllUrlsButtonItemSection());
}
} else {
if (user.canVoteAll()) {
builderAll = new ItemBuilder(Config.getInstance().getVoteURLCanVoteAllUrlsButtonItemSection());
}
}
} else {
if (user.canVoteAll()) {
builderAll = new ItemBuilder(Config.getInstance().getVoteURLCanVoteAllUrlsButtonItemSection());
if (!builderAll.hasCustomDisplayName()) {
builderAll.setName("&4All Voting Sites");
}
}
if (!builderAll.hasCustomDisplayName()) {
builderAll.setName("&4All Voting Sites");
}
if (!builderAll.hasCustomLore()) {
builderAll.setLore("&cClick Me");
}
inv.addButton(count, new BInventoryButton(builderAll) {
@Override
public void onClick(ClickEvent event) {
User user = UserManager.getInstance().getVotingPluginUser(event.getPlayer());
user.sendMessage(Commands.getInstance().voteURLs(user, true));
if (!builderAll.hasCustomLore()) {
builderAll.setLore("&cClick Me");
}
});
count++;
}
inv.addButton(count, new BInventoryButton(builderAll) {
for (final VoteSite voteSite : plugin.getVoteSites()) {
ItemBuilder builder = new ItemBuilder(Config.getInstance().getVoteURLAlreadyVotedItemSection());
if (user.canVoteSite(voteSite)) {
builder = new ItemBuilder(Config.getInstance().getVoteURLCanVoteItemSection());
} else {
builder.addLoreLine(Config.getInstance().getVoteURLNextVote().replace("%Info%",
Commands.getInstance().voteCommandNextInfo(user, voteSite)));
@Override
public void onClick(ClickEvent event) {
User user = UserManager.getInstance().getVotingPluginUser(event.getPlayer());
user.sendMessage(Commands.getInstance().voteURLs(user, true));
}
});
count++;
}
builder.setName(Config.getInstance().getVoteURLSiteName().replace("%Name%", voteSite.getDisplayName()));
for (final VoteSite voteSite : plugin.getVoteSites()) {
ItemBuilder builder = new ItemBuilder(Config.getInstance().getVoteURLAlreadyVotedItemSection());
if (user.canVoteSite(voteSite)) {
builder = new ItemBuilder(Config.getInstance().getVoteURLCanVoteItemSection());
} else {
builder.addLoreLine(Config.getInstance().getVoteURLNextVote().replace("%Info%",
Commands.getInstance().voteCommandNextInfo(user, voteSite)));
}
inv.addButton(count, new BInventoryButton(builder) {
builder.setName(Config.getInstance().getVoteURLSiteName().replace("%Name%", voteSite.getDisplayName()));
@Override
public void onClick(ClickEvent event) {
Player player = event.getPlayer();
if (player != null) {
if (Config.getInstance().isCommandsVoteRewardFromVoteURL()
&& event.getClick().equals(ClickType.RIGHT)) {
voteReward(player, voteSite.getKey());
inv.addButton(count, new BInventoryButton(builder) {
@Override
public void onClick(ClickEvent event) {
Player player = event.getPlayer();
if (player != null) {
if (Config.getInstance().isCommandsVoteRewardFromVoteURL()
&& event.getClick().equals(ClickType.RIGHT)) {
voteReward(player, voteSite.getKey());
} else {
User user = UserManager.getInstance().getVotingPluginUser(player);
user.sendMessage(
StringParser.getInstance()
.replacePlaceHolder(
StringParser.getInstance()
.replacePlaceHolder(
StringParser.getInstance().replacePlaceHolder(
Config.getInstance()
.getGUIVoteURLURLText(),
"voteurl", voteSite.getVoteURL()),
"sitename", voteSite.getDisplayName()),
"player", player.getName()));
}
}
}
});
count++;
}
if (Config.getInstance().getGUIVoteURLBackButton()) {
inv.addButton(getBackButton());
}
inv.openInventory(player);
} else {
// book gui
ArrayList<BaseComponent[]> builder = new ArrayList<BaseComponent[]>();
BookUtil.PageBuilder currentPage = new BookUtil.PageBuilder();
int lines = 0;
for (final VoteSite site : plugin.getVoteSites()) {
try {
ArrayList<String> layout = Config.getInstance().getGUIVoteURLBookGUILayout();
lines += layout.size();
if (lines > 14) {
builder.add(currentPage.build());
currentPage = new BookUtil.PageBuilder();
lines = layout.size();
plugin.debug("New page");
}
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("Sitename", site.getDisplayName());
ChatColor color = ChatColor.valueOf(Config.getInstance().getGUIVoteURLBookGUIAlreadyVotedColor());
String text = Config.getInstance().getGUIVoteURLBookGUIAlreadyVotedText();
if (user.canVoteSite(site)) {
color = ChatColor.valueOf(Config.getInstance().getGUIVoteURLBookGUICanVoteColor());
text = Config.getInstance().getGUIVoteURLBookGUICanVoteText();
}
String url = ChatColor.stripColor(StringParser.getInstance()
.colorize(StringParser.getInstance().parseJson(site.getVoteURL(false)).toPlainText()));
if (!url.startsWith("http")) {
if (!url.startsWith("www.")) {
url = "https://www." + url;
} else {
User user = UserManager.getInstance().getVotingPluginUser(player);
user.sendMessage(StringParser.getInstance().replacePlaceHolder(StringParser.getInstance()
.replacePlaceHolder(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getGUIVoteURLURLText(), "voteurl",
voteSite.getVoteURL()), "sitename", voteSite.getDisplayName()),
"player", player.getName()));
url = "https://" + url;
}
}
for (String str : layout) {
str = StringParser.getInstance().replacePlaceHolder(str, placeholders);
if (StringParser.getInstance().containsIgnorecase(str, "[UrlText]")) {
String[] split = str.split("[UrlText]");
String s = split[0].substring(0, split[0].length() - 1);
BaseComponent comp = new TextComponent(StringParser.getInstance().colorize(s));
comp.addExtra(BookUtil.TextBuilder.of(text).color(color)
.onClick(BookUtil.ClickAction.openUrl(url))
.onHover(BookUtil.HoverAction.showText(url)).build());
comp.addExtra(StringParser.getInstance().colorize(str.substring(s.length() + 9)));
currentPage.add(comp);
} else {
currentPage.add(StringParser.getInstance().colorize(str));
}
currentPage.newLine();
}
} catch (Exception e) {
e.printStackTrace();
}
}
builder.add(currentPage.build());
ItemStack book = BookUtil.writtenBook().author(player.getName())
.title(StringParser.getInstance().colorize(Config.getInstance().getGUIVoteURLBookGUITitle()))
.pages(builder).build();
Bukkit.getScheduler().runTask(plugin, new Runnable() {
@Override
public void run() {
BookUtil.openPlayer(player, book);
}
});
count++;
}
if (Config.getInstance().getGUIVoteURLBackButton()) {
inv.addButton(getBackButton());
}
inv.openInventory(player);
}
public void openVoteURL(Player player, String voteSite) {
@@ -27,19 +27,6 @@ public class BungeeSettings extends YMLFile {
return instance;
}
public BungeeSettings() {
super(new File(Main.plugin.getDataFolder(), "BungeeSettings.yml"));
}
public void loadValues() {
new AnnotationHandler().load(getData(), this);
}
@Override
public void onFileCreation() {
plugin.saveResource("BungeeSettings.yml", true);
}
@ConfigDataBoolean(path = "UseBungeecord", secondPath = "UseBungeecoord")
@Getter
private boolean useBungeecoord = false;
@@ -79,4 +66,17 @@ public class BungeeSettings extends YMLFile {
@ConfigDataInt(path = "SpigotServer.Port")
@Getter
private int spigotServerPort = 1298;
public BungeeSettings() {
super(new File(Main.plugin.getDataFolder(), "BungeeSettings.yml"));
}
public void loadValues() {
new AnnotationHandler().load(getData(), this);
}
@Override
public void onFileCreation() {
plugin.saveResource("BungeeSettings.yml", true);
}
}
@@ -13,6 +13,7 @@ import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataConfigurationSec
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataInt;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataListString;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataString;
import com.Ben12345rocks.AdvancedCore.Util.Misc.ArrayUtils;
import com.Ben12345rocks.AdvancedCore.YML.YMLFile;
import com.Ben12345rocks.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.TopVoter.TopVoter;
@@ -316,15 +317,23 @@ public class Config extends YMLFile {
@Getter
private boolean allowUnJoinedCheckServer = true;
@ConfigDataBoolean(path = "Commands.VoteBookGUI")
@Getter
private boolean commandsVoteBookGUI = false;
@ConfigDataBoolean(path = "UseJavascriptPlaceholders")
@Getter
private boolean useJavascriptPlaceholders = true;
@ConfigDataBoolean(path = "UseBungeecord", secondPath = "UseBungeecoord")
@Getter
@Deprecated
private boolean useBungeecoord = false;
@ConfigDataBoolean(path = "PreventRepeatMilestones")
@Getter
private boolean preventRepeatMilestones = false;
@ConfigDataListString(path = "DisabledCommands")
@Getter
private ArrayList<String> disabledCommands = new ArrayList<String>();
@@ -333,6 +342,35 @@ public class Config extends YMLFile {
@Getter
private ArrayList<String> votingBroadcastBlacklist = new ArrayList<String>();
@ConfigDataListString(path = "GUI.VoteURLBookGUI.Layout")
@Getter
private ArrayList<String> GUIVoteURLBookGUILayout = ArrayUtils.getInstance()
.convert(new String[] { "&c%Sitename%", "[UrlText]" });
@ConfigDataString(path = "GUI.VoteURLBookGUI.Title")
@Getter
private String GUIVoteURLBookGUITitle = "&cVoteURL";
@ConfigDataString(path = "GUI.VoteURLBookGUI.SiteName")
@Getter
private String GUIVoteURLBookGUISiteName = "&c%name%";
@ConfigDataString(path = "GUI.VoteURLBookGUI.CanVoteText")
@Getter
private String GUIVoteURLBookGUICanVoteText = "Click me";
@ConfigDataString(path = "GUI.VoteURLBookGUI.AlreadyVotedText")
@Getter
private String GUIVoteURLBookGUIAlreadyVotedText = "Click me";
@ConfigDataString(path = "GUI.VoteURLBookGUI.CanVoteColor")
@Getter
private String GUIVoteURLBookGUICanVoteColor = "GREEN";
@ConfigDataString(path = "GUI.VoteURLBookGUI.AlreadyVotedColor")
@Getter
private String GUIVoteURLBookGUIAlreadyVotedColor = "RED";
/**
* Instantiates a new config.
*/
@@ -1129,20 +1167,20 @@ public class Config extends YMLFile {
return getData().getBoolean("Shop." + shop + ".NotBuyable", false);
}
public boolean getVoteShopResetDaily(String shop) {
return getData().getBoolean("Shop." + shop + ".Reset.Daily", false);
public String getVoteShopPermission(String ident) {
return getData().getString("Shop." + ident + ".Permission", "");
}
public boolean getVoteShopResetWeekly(String shop) {
return getData().getBoolean("Shop." + shop + ".Reset.Weekly", false);
public boolean getVoteShopResetDaily(String shop) {
return getData().getBoolean("Shop." + shop + ".Reset.Daily", false);
}
public boolean getVoteShopResetMonthly(String shop) {
return getData().getBoolean("Shop." + shop + ".Reset.Monthly", false);
}
public String getVoteShopPermission(String ident) {
return getData().getString("Shop." + ident + ".Permission", "");
public boolean getVoteShopResetWeekly(String shop) {
return getData().getBoolean("Shop." + shop + ".Reset.Weekly", false);
}
/**
@@ -137,6 +137,10 @@ public class ConfigVoteSites extends YMLFile {
return getData(siteName).getString("ServiceSite");
}
public int getTimeOffSet(String siteName) {
return getData(siteName).getInt("TimeOffSet", 0);
}
/**
* Gets the vote delay.
*
@@ -148,10 +152,6 @@ public class ConfigVoteSites extends YMLFile {
return getData(siteName).getInt("VoteDelay");
}
public int getTimeOffSet(String siteName) {
return getData(siteName).getInt("TimeOffSet", 0);
}
public int getVoteDelayMin(String siteName) {
return getData(siteName).getInt("VoteDelayMin", 0);
}
@@ -29,26 +29,150 @@ public class SpecialRewardsConfig extends YMLFile {
return instance;
}
@ConfigDataBoolean(path = "EnableWeeklyAwards")
@Getter
private boolean enableWeeklyAwards = false;
@ConfigDataBoolean(path = "EnableDailyRewards")
@Getter
private boolean enableDailyRewards = false;
@ConfigDataBoolean(path = "EnableMonthlyAwards")
@Getter
private boolean enableMonthlyAwards = false;
@Getter
private String anySiteRewardsPath = "AnySiteRewards";
@ConfigDataDouble(path = "VoteStreak.Requirement.Day")
@Getter
private double voteStreakRequirementDay = 50;
@ConfigDataDouble(path = "VoteStreak.Requirement.Week")
@Getter
private double voteStreakRequirementWeek = 50;
@ConfigDataDouble(path = "VoteStreak.Requirement.Month")
@Getter
private double voteStreakRequirementMonth = 50;
@ConfigDataBoolean(path = "VoteStreak.Requirement.UsePercentage")
@Getter
private boolean voteStreakRequirementUsePercentage = false;
@ConfigDataBoolean(path = "VoteParty.ResetExtraVotesMonthly")
@Getter
private boolean votePartyResetExtraVotesMonthly = false;
@Getter
private String allSitesRewardPath = "AllSites";
@Getter
private String votePartyRewardsPath = "VoteParty.Rewards";
@Getter
private String firstVoteRewardsPath = "FirstVote";
public SpecialRewardsConfig() {
super(new File(Main.plugin.getDataFolder(), "SpecialRewards.yml"));
}
public void loadValues() {
new AnnotationHandler().load(getData(), this);
public boolean getCumulativeRewardEnabled(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".Enabled");
}
public String getWeeklyAwardRewardsPath(String path) {
return "WeeklyAwards." + path + ".Rewards";
public String getCumulativeRewardsPath(int cumulative) {
return "Cumulative." + cumulative + ".Rewards";
}
/**
* Gets the weekly possible reward places.
* Gets the cumulative votes.
*
* @return the weekly possible reward places
* @return the cumulative votes
*/
public Set<String> getWeeklyPossibleRewardPlaces() {
public Set<String> getCumulativeVotes() {
try {
return getData().getConfigurationSection("WeeklyAwards").getKeys(false);
Set<String> set = getData().getConfigurationSection("Cumulative").getKeys(false);
if (set != null) {
return set;
}
return new HashSet<String>();
} catch (Exception ex) {
return new HashSet<String>();
}
}
/**
* Gets the cumulative votes in same day.
*
* @param cumulative
* the cumulative
* @return the cumulative votes in same day
*/
public boolean getCumulativeVotesInSameDay(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".VotesInSameDay");
}
public boolean getCumulativeVotesInSameMonth(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".VotesInSameMonth");
}
public boolean getCumulativeVotesInSameWeek(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".VotesInSameWeek");
}
public String getDailyAwardRewardsPath(String path) {
return "DailyAwards." + path + ".Rewards";
}
/**
* Gets the daily possible reward places.
*
* @return the daily possible reward places
*/
public Set<String> getDailyPossibleRewardPlaces() {
try {
return getData().getConfigurationSection("DailyAwards").getKeys(false);
} catch (Exception ex) {
return new HashSet<String>();
}
}
/**
* Gets the milestone reward enabled.
*
* @param milestones
* the milestones
* @return the milestone reward enabled
*/
public boolean getMilestoneRewardEnabled(int milestones) {
return getData().getBoolean("MileStones." + milestones + ".Enabled");
}
/**
* Gets the milestone rewards.
*
* @param milestones
* the milestones
* @return the milestone rewards
*/
public String getMilestoneRewardsPath(int milestones) {
return "MileStones." + milestones + ".Rewards";
}
/**
* Gets the milestone votes.
*
* @return the milestone votes
*/
public Set<String> getMilestoneVotes() {
try {
Set<String> set = getData().getConfigurationSection("MileStones").getKeys(false);
if (set != null) {
return set;
}
return new HashSet<String>();
} catch (Exception ex) {
return new HashSet<String>();
}
@@ -71,47 +195,8 @@ public class SpecialRewardsConfig extends YMLFile {
}
}
public String getDailyAwardRewardsPath(String path) {
return "DailyAwards." + path + ".Rewards";
}
/**
* Gets the daily possible reward places.
*
* @return the daily possible reward places
*/
public Set<String> getDailyPossibleRewardPlaces() {
try {
return getData().getConfigurationSection("DailyAwards").getKeys(false);
} catch (Exception ex) {
return new HashSet<String>();
}
}
@ConfigDataBoolean(path = "EnableWeeklyAwards")
@Getter
private boolean enableWeeklyAwards = false;
@ConfigDataBoolean(path = "EnableDailyRewards")
@Getter
private boolean enableDailyRewards = false;
@ConfigDataBoolean(path = "EnableMonthlyAwards")
@Getter
private boolean enableMonthlyAwards = false;
@Override
public void onFileCreation() {
plugin.saveResource("SpecialRewards.yml", true);
}
public boolean getCumulativeRewardEnabled(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".Enabled");
}
public String getCumulativeRewardsPath(int cumulative) {
return "Cumulative." + cumulative + ".Rewards";
public boolean getResetMilestonesMonthly() {
return getData().getBoolean("ResetMilestonesMonthly");
}
public String getVotePartyBroadcast() {
@@ -170,25 +255,6 @@ public class SpecialRewardsConfig extends YMLFile {
return getData().getInt("VoteParty.VotesRequired");
}
@Getter
private String anySiteRewardsPath = "AnySiteRewards";
@ConfigDataDouble(path = "VoteStreak.Requirement.Day")
@Getter
private double voteStreakRequirementDay = 50;
@ConfigDataDouble(path = "VoteStreak.Requirement.Week")
@Getter
private double voteStreakRequirementWeek = 50;
@ConfigDataDouble(path = "VoteStreak.Requirement.Month")
@Getter
private double voteStreakRequirementMonth = 50;
@ConfigDataBoolean(path = "VoteStreak.Requirement.UsePercentage")
@Getter
private boolean voteStreakRequirementUsePercentage = false;
public boolean getVoteStreakRewardEnabled(String type, String s) {
return getData().getBoolean("VoteStreak." + type + "." + s + ".Enabled");
}
@@ -197,10 +263,6 @@ public class SpecialRewardsConfig extends YMLFile {
return "VoteStreak." + type + "." + string + ".Rewards";
}
public boolean getResetMilestonesMonthly() {
return getData().getBoolean("ResetMilestonesMonthly");
}
public Set<String> getVoteStreakVotes(String type) {
try {
Set<String> set = getData().getConfigurationSection("VoteStreak." + type).getKeys(false);
@@ -213,91 +275,29 @@ public class SpecialRewardsConfig extends YMLFile {
}
}
public String getWeeklyAwardRewardsPath(String path) {
return "WeeklyAwards." + path + ".Rewards";
}
/**
* Gets the cumulative votes.
* Gets the weekly possible reward places.
*
* @return the cumulative votes
* @return the weekly possible reward places
*/
public Set<String> getCumulativeVotes() {
public Set<String> getWeeklyPossibleRewardPlaces() {
try {
Set<String> set = getData().getConfigurationSection("Cumulative").getKeys(false);
if (set != null) {
return set;
}
return new HashSet<String>();
return getData().getConfigurationSection("WeeklyAwards").getKeys(false);
} catch (Exception ex) {
return new HashSet<String>();
}
}
/**
* Gets the milestone reward enabled.
*
* @param milestones
* the milestones
* @return the milestone reward enabled
*/
public boolean getMilestoneRewardEnabled(int milestones) {
return getData().getBoolean("MileStones." + milestones + ".Enabled");
public void loadValues() {
new AnnotationHandler().load(getData(), this);
}
/**
* Gets the milestone rewards.
*
* @param milestones
* the milestones
* @return the milestone rewards
*/
public String getMilestoneRewardsPath(int milestones) {
return "MileStones." + milestones + ".Rewards";
@Override
public void onFileCreation() {
plugin.saveResource("SpecialRewards.yml", true);
}
@ConfigDataBoolean(path = "VoteParty.ResetExtraVotesMonthly")
@Getter
private boolean votePartyResetExtraVotesMonthly = false;
/**
* Gets the milestone votes.
*
* @return the milestone votes
*/
public Set<String> getMilestoneVotes() {
try {
Set<String> set = getData().getConfigurationSection("MileStones").getKeys(false);
if (set != null) {
return set;
}
return new HashSet<String>();
} catch (Exception ex) {
return new HashSet<String>();
}
}
/**
* Gets the cumulative votes in same day.
*
* @param cumulative
* the cumulative
* @return the cumulative votes in same day
*/
public boolean getCumulativeVotesInSameDay(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".VotesInSameDay");
}
public boolean getCumulativeVotesInSameWeek(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".VotesInSameWeek");
}
public boolean getCumulativeVotesInSameMonth(int cumulative) {
return getData().getBoolean("Cumulative." + cumulative + ".VotesInSameMonth");
}
@Getter
private String allSitesRewardPath = "AllSites";
@Getter
private String votePartyRewardsPath = "VoteParty.Rewards";
@Getter
private String firstVoteRewardsPath = "FirstVote";
}
@@ -127,22 +127,6 @@ public class ServerData {
getData().getDouble("Signs." + sign + ".Z"));
}
/**
* Gets the sign location.
*
* @param sign
* the sign
* @return the sign location
*/
public Location getSignSkullLocation(String sign) {
if (getData().getString("Signs." + sign + ".Skull.World", "").isEmpty()) {
return null;
}
return new Location(Bukkit.getWorld(getData().getString("Signs." + sign + ".Skull.World")),
getData().getDouble("Signs." + sign + ".Skull.X"), getData().getDouble("Signs." + sign + ".Skull.Y"),
getData().getDouble("Signs." + sign + ".Skull.Z"));
}
/**
* Gets the sign position.
*
@@ -167,6 +151,22 @@ public class ServerData {
}
}
/**
* Gets the sign location.
*
* @param sign
* the sign
* @return the sign location
*/
public Location getSignSkullLocation(String sign) {
if (getData().getString("Signs." + sign + ".Skull.World", "").isEmpty()) {
return null;
}
return new Location(Bukkit.getWorld(getData().getString("Signs." + sign + ".Skull.World")),
getData().getDouble("Signs." + sign + ".Skull.X"), getData().getDouble("Signs." + sign + ".Skull.Y"),
getData().getDouble("Signs." + sign + ".Skull.Z"));
}
public int getVotePartyExtraRequired() {
return getData().getInt("VotePartyExtraRequired", 0);
}
@@ -54,6 +54,14 @@ public class PlayerVoteEvent extends Event {
@Setter
private long time;
@Getter
@Setter
private boolean bungee = false;
@Getter
@Setter
private boolean forceBungee = false;
public PlayerVoteEvent(VoteSite voteSite, String voteUsername, String serviceSite, boolean realVote) {
super(true);
this.player = voteUsername;
@@ -71,12 +79,4 @@ public class PlayerVoteEvent extends Event {
return handlers;
}
@Getter
@Setter
private boolean bungee = false;
@Getter
@Setter
private boolean forceBungee = false;
}
@@ -1,5 +1,7 @@
package com.Ben12345rocks.VotingPlugin.Listeners;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import org.bukkit.Bukkit;
@@ -104,7 +106,8 @@ public class PlayerVoteListener implements Listener {
VoteParty.getInstance().vote(user, event.isRealVote());
// broadcast vote if enabled in config
if (config.isBroadcastVotesEnabled() && (BungeeSettings.getInstance().isBungeeBroadcast() || !event.isBungee())) {
if (config.isBroadcastVotesEnabled()
&& (BungeeSettings.getInstance().isBungeeBroadcast() || !event.isBungee())) {
if (!Config.getInstance().getFormatBroadcastWhenOnline() || user.isOnline()) {
voteSite.broadcastVote(user);
}
@@ -118,6 +121,16 @@ public class PlayerVoteListener implements Listener {
}
user.setLastVoteCoolDownCheck(false, voteSite);
// try logging to file
if (Config.getInstance().isLogVotesToFile()) {
try {
Main.plugin.logVote(LocalDateTime.now().atZone(ZoneId.systemDefault()).toLocalDateTime(),
playerName, voteSite.getKey());
} catch (Exception e) {
e.printStackTrace();
}
}
// check first vote rewards
SpecialRewards.getInstance().checkFirstVote(user);
@@ -168,7 +181,6 @@ public class PlayerVoteListener implements Listener {
}
}, 40);
}
}
}
@@ -2,11 +2,10 @@ package com.Ben12345rocks.VotingPlugin;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -149,6 +148,15 @@ public class Main extends AdvancedCorePlugin {
@Getter
private BungeeSettings bungeeSettings;
public void basicBungeeUpdate() {
for (Player player : Bukkit.getOnlinePlayers()) {
User user = UserManager.getInstance().getVotingPluginUser(player);
user.clearCache();
user.offVote();
user.checkOfflineRewards();
}
}
/**
* Check votifier.
*/
@@ -301,15 +309,6 @@ 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.
*
@@ -405,6 +404,15 @@ public class Main extends AdvancedCorePlugin {
return false;
}
public boolean isVoteSite(String voteSite) {
for (VoteSite site : getVoteSites()) {
if (site.getKey().equalsIgnoreCase(voteSite)) {
return true;
}
}
return false;
}
private void loadTimer() {
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@@ -477,9 +485,10 @@ public class Main extends AdvancedCorePlugin {
* @param voteSite
* the vote site
*/
public void logVote(Date date, String playerName, String voteSite) {
public void logVote(LocalDateTime date, String playerName, String voteSite) {
if (Config.getInstance().isLogVotesToFile()) {
String str = new SimpleDateFormat("EEE, d MMM yyyy HH:mm").format(date);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
String str = formatter.format(date);
voteLog.logToFile(str + ": " + playerName + " voted on " + voteSite);
}
}
@@ -878,7 +887,6 @@ public class Main extends AdvancedCorePlugin {
getMysql().alterColumnType("MonthVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("Points", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestDailyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MileStoneTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("AllTimeTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestMonthlyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MilestoneCount", "INT DEFAULT '0'");
@@ -1217,15 +1225,6 @@ public class Main extends AdvancedCorePlugin {
}
}
public void basicBungeeUpdate() {
for (Player player : Bukkit.getOnlinePlayers()) {
User user = UserManager.getInstance().getVotingPluginUser(player);
user.clearCache();
user.offVote();
user.checkOfflineRewards();
}
}
public void updateAdvancedCoreHook() {
getJavascriptEngine().put("VotingPlugin", this);
allowDownloadingFromSpigot(15358);
@@ -177,6 +177,62 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
setWeekVoteStreak(getWeekVoteStreak() + 1);
}
public void bungeeVote(String service) {
if (BungeeSettings.getInstance().isUseBungeecoord()) {
Main.plugin.debug("Bungee vote for " + getPlayerName() + " on " + service);
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(true);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
public void bungeeVoteOnline(String service) {
if (BungeeSettings.getInstance().isUseBungeecoord()) {
Main.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);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
public void bungeeVotePluginMessaging(String service, long time) {
if (BungeeSettings.getInstance().isUseBungeecoord()) {
Main.plugin.debug("Pluginmessaging vote for " + getPlayerName() + " on " + service);
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(true);
voteEvent.setTime(time);
voteEvent.setAddTotals(false);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
/**
* Can vote all.
*
@@ -202,16 +258,6 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
return false;
}
public int getSitesVotedOn() {
int amount = 0;
for (VoteSite site : plugin.getVoteSites()) {
if (!canVoteSite(site)) {
amount++;
}
}
return amount;
}
/**
* Can vote site.
*
@@ -491,6 +537,16 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
return getUserData().getInt("Points");
}
public int getSitesVotedOn() {
int amount = 0;
for (VoteSite site : plugin.getVoteSites()) {
if (!canVoteSite(site)) {
amount++;
}
}
return amount;
}
/**
* Gets the time.
*
@@ -611,62 +667,6 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
.setOnline(isOnline()).send(this);
}
public void bungeeVotePluginMessaging(String service, long time) {
if (BungeeSettings.getInstance().isUseBungeecoord()) {
Main.plugin.debug("Pluginmessaging vote for " + getPlayerName() + " on " + service);
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(true);
voteEvent.setTime(time);
voteEvent.setAddTotals(false);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
public void bungeeVote(String service) {
if (BungeeSettings.getInstance().isUseBungeecoord()) {
Main.plugin.debug("Bungee vote for " + getPlayerName() + " on " + service);
PlayerVoteEvent voteEvent = new PlayerVoteEvent(plugin.getVoteSite(service), getPlayerName(), service,
true);
voteEvent.setBungee(true);
voteEvent.setForceBungee(true);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
public void bungeeVoteOnline(String service) {
if (BungeeSettings.getInstance().isUseBungeecoord()) {
Main.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);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
plugin.getServer().getPluginManager().callEvent(voteEvent);
}
});
}
}
/**
* Checks for gotten first vote.
*
@@ -924,7 +924,7 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
* the new points
*/
public void setPoints(int value) {
getUserData().setInt("Points", value);
getUserData().setInt("Points", value, !BungeeSettings.getInstance().isUseBungeecoord());
}
public void setReminded(boolean reminded) {
@@ -45,21 +45,6 @@ public class VoteSite {
@Setter
private String voteURL;
public String getVoteURL(boolean json) {
if (!Config.getInstance().isFormatCommandsVoteForceLinks() || !json) {
return voteURL;
} else {
if (!voteURL.startsWith("http")) {
return "[Text=\"" + voteURL + "\",url=\"http://" + voteURL + "\"]";
}
return "[Text=\"" + voteURL + "\",url=\"" + voteURL + "\"]";
}
}
public String getVoteURL() {
return getVoteURL(true);
}
@Getter
@Setter
private String serviceSite;
@@ -203,6 +188,21 @@ public class VoteSite {
return configVoteSites.getData(key);
}
public String getVoteURL() {
return getVoteURL(true);
}
public String getVoteURL(boolean json) {
if (!Config.getInstance().isFormatCommandsVoteForceLinks() || !json) {
return voteURL;
} else {
if (!voteURL.startsWith("http")) {
return "[Text=\"" + voteURL + "\",url=\"http://" + voteURL + "\"]";
}
return "[Text=\"" + voteURL + "\",url=\"" + voteURL + "\"]";
}
}
public void giveRewards(User user, boolean online, boolean bungee) {
new RewardBuilder(configVoteSites.getData(), configVoteSites.getRewardsPath(key)).setOnline(online)
.withPlaceHolder("ServiceSite", getServiceSite()).withPlaceHolder("SiteName", getDisplayName())
@@ -87,10 +87,6 @@ public class SignHandler {
return false;
}
public boolean isSkullSet() {
return skullLocation != null;
}
/**
* Check skulls.
*/
@@ -152,6 +148,10 @@ public class SignHandler {
return loc.equals(getLocation());
}
public boolean isSkullSet() {
return skullLocation != null;
}
/**
* Removes the sign.
*/
@@ -1,5 +1,6 @@
package com.Ben12345rocks.VotingPlugin.SpecialRewards;
import java.util.ArrayList;
import java.util.Set;
import org.bukkit.Bukkit;
@@ -147,6 +148,31 @@ public class SpecialRewards {
* @return true, if successful
*/
public boolean checkMilestone(User user) {
if (Config.getInstance().isPreventRepeatMilestones()) {
ArrayList<Integer> nums = new ArrayList<Integer>();
for (String str : SpecialRewardsConfig.getInstance().getMilestoneVotes()) {
try {
nums.add(Integer.parseInt(str));
} catch (Exception e) {
plugin.getLogger().warning("Failed to get number from " + str);
}
}
int milestoneCount = user.getMilestoneCount();
for (int num : nums) {
if (milestoneCount >= num) {
if (!user.hasGottenMilestone(num)) {
plugin.getLogger().info("Milestone " + num + " for " + user.getPlayerName()
+ " not already given when it should be, Current AllTimeTotal: "
+ user.getTotal(TopVoter.AllTime) + ", Current MileStoneCount: "
+ user.getMilestoneCount());
user.setHasGotteMilestone(num, true);
}
}
}
}
boolean gotMilestone = false;
Set<String> votes = SpecialRewardsConfig.getInstance().getMilestoneVotes();
for (String vote : votes) {
@@ -15,6 +15,10 @@ public enum TopVoter {
return AllTime;
}
public static TopVoter[] valuesMinusAllTime() {
return new TopVoter[] { TopVoter.Daily, TopVoter.Weekly, TopVoter.Monthly };
}
public static TopVoter getTopVoter(String str) {
for (TopVoter value : values()) {
if (value.toString().equalsIgnoreCase(str)) {
@@ -279,7 +279,7 @@ public class PlaceHolders {
}
times.put(t, site);
}
for (Entry<Long,VoteSite> entry : times.entrySet()) {
for (Entry<Long, VoteSite> entry : times.entrySet()) {
if (entry.getKey().longValue() == smallest) {
return Commands.getInstance().voteCommandNextInfo(user, entry.getValue());
}
@@ -184,9 +184,11 @@ public class VoteParty implements Listener {
}
public void giveReward(User user, boolean online) {
new RewardBuilder(SpecialRewardsConfig.getInstance().getData(), SpecialRewardsConfig.getInstance().getVotePartyRewardsPath())
.setOnline(online)
.withPlaceHolder("VotesRequired", "" + SpecialRewardsConfig.getInstance().getVotePartyVotesRequired()).send(user);
new RewardBuilder(SpecialRewardsConfig.getInstance().getData(),
SpecialRewardsConfig.getInstance().getVotePartyRewardsPath()).setOnline(online)
.withPlaceHolder("VotesRequired",
"" + SpecialRewardsConfig.getInstance().getVotePartyVotesRequired())
.send(user);
}
/**
@@ -205,12 +207,13 @@ public class VoteParty implements Listener {
}
if (SpecialRewardsConfig.getInstance().getVotePartyGiveAllPlayers()) {
plugin.debug("Giving all players vote party");
plugin.debug("Trying to give all players vote party");
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
giveReward(user);
}
} else {
plugin.debug("Trying to give all online players vote party");
plugin.debug(ArrayUtils.getInstance().makeStringList(getVotedUsers()));
for (String uuid : getVotedUsers()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
@@ -58,7 +58,7 @@ public class VoteReminding {
if (PlayerUtils.getInstance().hasServerPermission(playerName, "VotingPlugin.Login.RemindVotes")
|| PlayerUtils.getInstance().hasServerPermission(playerName, "VotingPlugin.Player")) {
if (user.canVoteAll()) {
if (user.canVoteAll() || (user.canVoteAny() && user.hasPermission("VotingPlugin.Login.RemindVotes.Any"))) {
Player player = Bukkit.getPlayer(playerName);
if (player != null) {
if (!Config.getInstance().getVoteRemindingRemindOnlyOnce()) {
@@ -65,31 +65,21 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
private VoteCache voteCacheFile;
@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());
public void checkCachedVotes(String server) {
if (getProxy().getServerInfo(server) != null) {
if (!getProxy().getServerInfo(server).getPlayers().isEmpty()) {
if (cachedVotes.containsKey(server)) {
ArrayList<OfflineBungeeVote> c = cachedVotes.get(server);
if (!c.isEmpty()) {
for (OfflineBungeeVote cache : c) {
sendPluginMessageServer(server, "Vote", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote());
}
cachedVotes.put(server, new ArrayList<OfflineBungeeVote>());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@@ -107,35 +97,53 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
}
}
public void checkCachedVotes(String server) {
if (!getProxy().getServerInfo(server).getPlayers().isEmpty()) {
if (cachedVotes.containsKey(server)) {
ArrayList<OfflineBungeeVote> c = cachedVotes.get(server);
if (!c.isEmpty()) {
for (OfflineBungeeVote cache : c) {
sendPluginMessageServer(server, "Vote", cache.getPlayerName(), cache.getUuid(),
cache.getService(), "" + cache.getTime(), Boolean.FALSE.toString(),
"" + cache.isRealVote());
}
cachedVotes.put(server, new ArrayList<OfflineBungeeVote>());
}
}
public void debug(String msg) {
if (config.getDebug()) {
getLogger().info("Debug: " + msg);
}
}
@EventHandler
public void onServerConnected(ServerConnectedEvent event) {
final String server = event.getServer().getInfo().getName();
final String uuid = event.getPlayer().getUniqueId().toString();
getProxy().getScheduler().schedule(this, new Runnable() {
public UUID fetchUUID(String playerName) throws Exception {
// Get response from Mojang API
URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + playerName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
@Override
public void run() {
checkCachedVotes(server);
checkOnlineVotes(event.getPlayer(), uuid);
}
if (connection.getResponseCode() == 400) {
getProxy().getLogger().info("There is no player with the name \"" + playerName + "\"!");
return null;
}
}, 2, TimeUnit.SECONDS);
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// Parse JSON response and get UUID
JsonElement element = new JsonParser().parse(bufferedReader);
JsonObject object = element.getAsJsonObject();
String uuidAsString = object.get("id").getAsString();
// Return UUID
return parseUUIDFromString(uuidAsString);
}
public String getProperName(String uuid, String currentName) {
ProxiedPlayer p = getProxy().getPlayer(UUID.fromString(uuid));
if (p != null && p.isConnected()) {
return p.getName();
}
return currentName;
}
public String getUUID(String playerName) {
ProxiedPlayer p = getProxy().getPlayer(playerName);
if (p != null && p.isConnected()) {
return p.getUniqueId().toString();
}
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
}
return "";
}
@Override
@@ -185,7 +193,6 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
getMysql().alterColumnType("MonthVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("Points", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestDailyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MileStoneTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("AllTimeTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestMonthlyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MilestoneCount", "INT DEFAULT '0'");
@@ -235,7 +242,7 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
voteCacheFile.clearData();
getProxy().getScheduler().runAsync(this, new Runnable() {
getProxy().getScheduler().schedule(this, new Runnable() {
@Override
public void run() {
@@ -247,7 +254,7 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
checkOnlineVotes(getProxy().getPlayer(UUID.fromString(player)), player);
}
}
});
}, 15l, TimeUnit.SECONDS);
this.getProxy().registerChannel("VotingPlugin:VotingPlugin".toLowerCase());
} else if (method.equals(BungeeMethod.SOCKETS)) {
@@ -299,8 +306,47 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
getLogger().info("VotingPlugin loaded, using method: " + method.toString());
}
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();
}
}
@EventHandler
public void onServerConnected(ServerConnectedEvent event) {
final String server = event.getServer().getInfo().getName();
final String uuid = event.getPlayer().getUniqueId().toString();
getProxy().getScheduler().schedule(this, new Runnable() {
@Override
public void run() {
checkCachedVotes(server);
checkOnlineVotes(event.getPlayer(), uuid);
}
}, 2, TimeUnit.SECONDS);
}
@EventHandler
@@ -312,13 +358,102 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
}
public void debug(String msg) {
if (config.getDebug()) {
getLogger().info("Debug: " + msg);
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),
"0x" + uuidAsString.substring(20, 32) };
long mostSigBits = Long.decode(parts[0]).longValue();
mostSigBits <<= 16;
mostSigBits |= Long.decode(parts[1]).longValue();
mostSigBits <<= 16;
mostSigBits |= Long.decode(parts[2]).longValue();
long leastSigBits = Long.decode(parts[3]).longValue();
leastSigBits <<= 48;
leastSigBits |= Long.decode(parts[4]).longValue();
return new UUID(mostSigBits, leastSigBits);
}
public void reload() {
config.load();
}
public void sendPluginMessageServer(String server, 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);
}
if (getProxy().getServers().get(server).getPlayers().size() > 0) {
getProxy().getServers().get(server).sendData("VotingPlugin:VotingPlugin".toLowerCase(),
byteOutStream.toByteArray(), false);
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
debug("Sending plugin message " + server + " " + channel + " "
+ ArrayUtils.getInstance().makeStringList(ArrayUtils.getInstance().convert(messageData)));
}
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);
}
}
public void sendSocketVote(String name, String service) {
String uuid = getUUID(name);
if (config.getSendVotesToAllServers()) {
sendServerMessage("bungeevote", uuid, name, service);
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
} else {
// online server only
ProxiedPlayer p = getProxy().getPlayer(name);
String server = "";
if (p != null && p.isConnected()) {
server = p.getServer().getInfo().getName();
} else {
server = config.getFallBack();
}
if (config.getBlockedServers().contains(server)) {
server = config.getFallBack();
}
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service);
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
sendServerMessage("BungeeUpdate");
}
}
public void status(CommandSender sender) {
sendServerMessage("status");
}
public void vote(String player, String service, boolean realVote) {
if (player == null || player.isEmpty()) {
getLogger().info("No name from vote on " + service);
return;
}
if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service);
} else if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
@@ -348,7 +483,7 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
for (Column d : data) {
if (d.getName().equalsIgnoreCase("alltimetotal") || d.getName().equalsIgnoreCase("monthtotal")
|| d.getName().equalsIgnoreCase("weeklytotal") || d.getName().equalsIgnoreCase("dailytotal")
|| d.getName().equalsIgnoreCase("Points") || d.getName().equalsIgnoreCase("milestonecount")) {
|| d.getName().equalsIgnoreCase("Points") || d.getName().equalsIgnoreCase("MilestoneCount")) {
Object value = d.getValue();
int num = 0;
if (value instanceof Integer) {
@@ -415,134 +550,4 @@ public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listene
}
}
public UUID fetchUUID(String playerName) throws Exception {
// Get response from Mojang API
URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + playerName);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
if (connection.getResponseCode() == 400) {
System.err.println("There is no player with the name \"" + playerName + "\"!");
return null;
}
InputStream inputStream = connection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
// Parse JSON response and get UUID
JsonElement element = new JsonParser().parse(bufferedReader);
JsonObject object = element.getAsJsonObject();
String uuidAsString = object.get("id").getAsString();
// Return UUID
return parseUUIDFromString(uuidAsString);
}
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),
"0x" + uuidAsString.substring(20, 32) };
long mostSigBits = Long.decode(parts[0]).longValue();
mostSigBits <<= 16;
mostSigBits |= Long.decode(parts[1]).longValue();
mostSigBits <<= 16;
mostSigBits |= Long.decode(parts[2]).longValue();
long leastSigBits = Long.decode(parts[3]).longValue();
leastSigBits <<= 48;
leastSigBits |= Long.decode(parts[4]).longValue();
return new UUID(mostSigBits, leastSigBits);
}
public String getProperName(String uuid, String currentName) {
ProxiedPlayer p = getProxy().getPlayer(UUID.fromString(uuid));
if (p != null && p.isConnected()) {
return p.getName();
}
return currentName;
}
public String getUUID(String playerName) {
ProxiedPlayer p = getProxy().getPlayer(playerName);
if (p != null && p.isConnected()) {
return p.getUniqueId().toString();
}
String str = mysql.getUUID(playerName);
if (str != null) {
return str;
}
return "";
}
public void sendSocketVote(String name, String service) {
String uuid = getUUID(name);
if (config.getSendVotesToAllServers()) {
sendServerMessage("bungeevote", uuid, name, service);
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
} else {
// online server only
ProxiedPlayer p = getProxy().getPlayer(name);
String server = "";
if (p != null && p.isConnected()) {
server = p.getServer().getInfo().getName();
} else {
server = config.getFallBack();
}
if (config.getBlockedServers().contains(server)) {
server = config.getFallBack();
}
sendServerMessageServer(server, "bungeevoteonline", uuid, name, service);
if (config.getBroadcast()) {
sendServerMessage("BungeeBroadcast", service, uuid, name);
}
sendServerMessage("BungeeUpdate");
}
}
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);
}
}
public void sendPluginMessageServer(String server, 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);
}
if (getProxy().getServers().get(server).getPlayers().size() > 0) {
getProxy().getServers().get(server).sendData("VotingPlugin:VotingPlugin".toLowerCase(),
byteOutStream.toByteArray(), false);
}
out.close();
} catch (Exception e) {
e.printStackTrace();
}
debug("Sending plugin message " + server + " " + channel + " "
+ ArrayUtils.getInstance().makeStringList(ArrayUtils.getInstance().convert(messageData)));
}
public void status(CommandSender sender) {
sendServerMessage("status");
}
}
@@ -130,36 +130,6 @@ public class BungeeMySQL {
}
}
public String getUUID(String playerName) {
String query = "SELECT uuid FROM " + getName() + " WHERE " + "PlayerName" + "='" + playerName + "';";
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(query);
rs = sql.executeQuery();
/*
* Query sql = new Query(mysql, query);
* ResultSet rs = sql.executeQuery();
*/
if (rs.next()) {
String uuid = rs.getString("uuid");
if (uuid != null && !uuid.isEmpty()) {
sql.close();
conn.close();
return uuid;
}
}
sql.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
return null;
}
public void checkColumn(String column, DataType dataType) {
synchronized (object4) {
if (!getColumns().contains(column)) {
@@ -379,6 +349,36 @@ public class BungeeMySQL {
return result;
}
public String getUUID(String playerName) {
String query = "SELECT uuid FROM " + getName() + " WHERE " + "PlayerName" + "='" + playerName + "';";
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(query);
rs = sql.executeQuery();
/*
* Query sql = new Query(mysql, query);
* ResultSet rs = sql.executeQuery();
*/
if (rs.next()) {
String uuid = rs.getString("uuid");
if (uuid != null && !uuid.isEmpty()) {
sql.close();
conn.close();
return uuid;
}
}
sql.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
return null;
}
public Set<String> getUuids() {
if (uuids == null || uuids.size() == 0) {
uuids.clear();
@@ -21,9 +21,54 @@ public class Config {
this.bungee = bungee;
}
public List<String> getBlockedServers() {
return getData().getStringList("BlockedServers");
}
public boolean getBroadcast() {
return getData().getBoolean("Broadcast", false);
}
public String getBungeeHost() {
return getData().getString("BungeeServer.Host", "");
}
public String getBungeeMethod() {
return getData().getString("BungeeMethod", "SOCKETS");
}
public int getBungeePort() {
return getData().getInt("BungeeServer.Port", 1297);
}
public boolean getDebug() {
return getData().getBoolean("Debug", false);
}
public String getFallBack() {
return getData().getString("FallBackServer", "");
}
public boolean getSendToOnlineServer() {
return getData().getBoolean("SendToOnlineServer");
}
public boolean getSendVotesToAllServers() {
return getData().getBoolean("SendVotesToAllServers");
}
public Configuration getSpigotServerConfiguration(String s) {
return getData().getSection("SpigotServers." + s);
}
public Collection<String> getSpigotServers() {
return getData().getSection("SpigotServers").getKeys();
}
public void load() {
if (!bungee.getDataFolder().exists())
if (!bungee.getDataFolder().exists()) {
bungee.getDataFolder().mkdir();
}
File file = new File(bungee.getDataFolder(), "bungeeconfig.yml");
@@ -51,48 +96,4 @@ public class Config {
}
}
public boolean getSendVotesToAllServers() {
return getData().getBoolean("SendVotesToAllServers");
}
public boolean getSendToOnlineServer() {
return getData().getBoolean("SendToOnlineServer");
}
public String getBungeeMethod() {
return getData().getString("BungeeMethod", "SOCKETS");
}
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 boolean getDebug() {
return getData().getBoolean("Debug", false);
}
public String getFallBack() {
return getData().getString("FallBackServer", "");
}
public Configuration getSpigotServerConfiguration(String s) {
return getData().getSection("SpigotServers." + s);
}
}
@@ -18,60 +18,6 @@ public class VoteCache {
this.bungee = bungee;
}
public void load() {
if (!bungee.getDataFolder().exists())
bungee.getDataFolder().mkdir();
File file = new File(bungee.getDataFolder(), "votecache.yml");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "votecache.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void save() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "votecache.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public Collection<String> getServers() {
return getData().getSection("VoteCache").getKeys();
}
public Collection<String> getPlayers() {
return getData().getSection("OnlineCache").getKeys();
}
public Configuration getServerVotes(String server, String num) {
return getData().getSection("VoteCache." + server + "." + num);
}
public Configuration getOnlineVotes(String name, String num) {
return getData().getSection("OnlineCache." + name + "." + num);
}
public Collection<String> getServerVotes(String server) {
return getData().getSection("VoteCache." + server).getKeys();
}
public Collection<String> getOnlineVotes(String name) {
return getData().getSection("OnlineCache." + name).getKeys();
}
public void addVote(String server, int num, OfflineBungeeVote voteData) {
Configuration section = getData().getSection("VoteCache." + server + "." + num);
section.set("Name", voteData.getPlayerName());
@@ -98,4 +44,59 @@ public class VoteCache {
save();
}
public Collection<String> getOnlineVotes(String name) {
return getData().getSection("OnlineCache." + name).getKeys();
}
public Configuration getOnlineVotes(String name, String num) {
return getData().getSection("OnlineCache." + name + "." + num);
}
public Collection<String> getPlayers() {
return getData().getSection("OnlineCache").getKeys();
}
public Collection<String> getServers() {
return getData().getSection("VoteCache").getKeys();
}
public Collection<String> getServerVotes(String server) {
return getData().getSection("VoteCache." + server).getKeys();
}
public Configuration getServerVotes(String server, String num) {
return getData().getSection("VoteCache." + server + "." + num);
}
public void load() {
if (!bungee.getDataFolder().exists()) {
bungee.getDataFolder().mkdir();
}
File file = new File(bungee.getDataFolder(), "votecache.yml");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "votecache.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void save() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "votecache.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -24,7 +24,7 @@ public class VotingPluginBungeeCommand extends Command {
if (args.length >= 2) {
String user = args[1];
String site = args[2];
bungee.vote(user, site,false);
bungee.vote(user, site, false);
sender.sendMessage(new TextComponent("Sending vote"));
}
}