Compare commits

..
192 Commits
Author SHA1 Message Date
Ben12345rocks af9e207012 Update version number 2020-08-15 19:20:53 -04:00
Ben12345rocks c667a6ba56 Improvements 2020-08-15 19:18:50 -04:00
Ben12345rocks 37c6888962 Improvements 2020-08-15 18:52:33 -04:00
Ben12345rocks 5729968630 Bug fix 2020-08-15 15:21:48 -04:00
Ben 5fb377da21 Merge pull request #902 from DrBot7/patch-1
Fix vnext
2020-08-13 16:50:00 -04:00
DrBot7 92f0c284cd Fix vnext
The current state with build 325 is telling me that I can't vote even though I can.
https://imgur.com/a/ueRrMao
I noticed that MCMP, which has a daily timer with no offset, tells me that I am able to vote in 8 hours. However, I should be able to vote now. I wrote up some code and tested locally. This seems to have fixed my issue.
2020-08-13 15:43:50 -05:00
Ben12345rocks 7c8be94d88 Bug fix 2020-08-13 15:43:36 -04:00
Ben12345rocks 19690712ba Bug fix 2020-08-12 19:28:16 -04:00
Ben12345rocks 7c32a0c883 Bug fix 2020-08-12 17:08:57 -04:00
Ben12345rocks df87848caa Another change 2020-08-12 17:05:56 -04:00
Ben12345rocks 534253fbfc Bug fix 2020-08-12 16:43:15 -04:00
Ben12345rocks afbbbcfd45 Code cleanup 2020-08-12 15:22:54 -04:00
Ben12345rocks f5ea7e8490 Bug fix 2020-08-12 15:21:52 -04:00
Ben12345rocks c0b1c82ec4 Little performance improvement 2020-08-11 19:33:10 -04:00
Ben12345rocks 99eb028a62 Update to 1.16.2 2020-08-11 19:13:11 -04:00
Ben12345rocks ce3a40a155 Little change 2020-08-11 19:06:16 -04:00
Ben12345rocks da5e71a614 Bug fix 2020-08-11 17:28:41 -04:00
Ben12345rocks c2e509e4c7 Bug fix 2020-08-11 17:19:00 -04:00
Ben12345rocks a068c0b1db Bug fix 2020-08-11 16:25:05 -04:00
Ben12345rocks b1fa69ed26 Little improvements 2020-08-10 20:24:27 -04:00
Ben12345rocks d91f485f1e Little improvements 2020-08-10 15:39:27 -04:00
Ben12345rocks 0252dd3535 Improvements 2020-08-09 12:53:45 -04:00
Ben12345rocks 21cf18f34e Little change 2020-08-08 20:30:27 -04:00
Ben12345rocks 892cae605b A lot of bungee improvements 2020-08-08 19:32:53 -04:00
Ben12345rocks c97fd708e0 Add more log info for bungee 2020-08-07 21:58:28 -04:00
Ben12345rocks 12dd52af3d Add another method to bungee voting, untested 2020-08-07 20:22:48 -04:00
Ben12345rocks 3a3d784d6d Bug fix 2020-07-24 15:25:12 -04:00
Ben12345rocks 86c98ccae1 Bug fix 2020-07-23 15:18:42 -04:00
Ben12345rocks e004121081 Little change 2020-07-19 19:14:40 -04:00
Ben12345rocks 27c3bf71ec Undo changes 2020-07-19 16:57:38 -04:00
Ben12345rocks c5da78712f Little change 2020-07-19 16:11:29 -04:00
Ben12345rocks 7cd12844fd Little change 2020-07-19 14:50:09 -04:00
Ben12345rocks f04d03fa90 Little fix 2020-07-19 14:27:01 -04:00
Ben12345rocks 10af3797d1 Little change 2020-07-19 12:28:15 -04:00
Ben12345rocks 5dd9de8310 Bug fix 2020-07-14 15:49:58 -04:00
Ben12345rocks 75c7b6b703 Change Item to DisplayItem to avoid confusion 2020-07-12 13:23:32 -04:00
Ben12345rocks 70ef27deb8 Some improvements 2020-07-12 12:07:40 -04:00
Ben12345rocks 007f2e7b73 Bug fix 2020-07-09 15:25:18 -04:00
Ben12345rocks f7cafaefdc Little more improvements 2020-07-08 15:19:38 -04:00
Ben12345rocks cb6e27e700 Little config change 2020-07-08 15:10:20 -04:00
Ben12345rocks fd5ba1f98e Add option to use an item instead of skull for vote today 2020-07-07 15:39:01 -04:00
Ben12345rocks e63fd4d79c Improvements 2020-07-06 17:05:00 -04:00
Ben12345rocks be2a7e2ee3 Add command for current plugin time 2020-07-04 14:50:52 -04:00
Ben12345rocks 85a8a29e69 Add option to clear cache for vote shop 2020-07-03 08:06:51 -04:00
Ben12345rocks b07fe783dd Improve bungee efficiency 2020-06-27 20:43:48 -04:00
Ben12345rocks 75e4f45e9f Little change 2020-06-26 16:24:33 -04:00
Ben12345rocks 826d353bfd Update version number 2020-06-25 19:26:22 -04:00
Ben12345rocks 2891607947 Update to 1.16.1 2020-06-24 21:15:05 -04:00
Ben12345rocks b7a4955766 Separate bungee debug 2020-06-20 08:42:42 -04:00
Ben12345rocks d1f7c78bbe Bug fix 2020-06-20 08:05:34 -04:00
Ben12345rocks 289980aa41 Improve debugging for sockets 2020-06-19 16:39:32 -04:00
Ben12345rocks 217d1b60a3 Bug fix 2020-06-14 12:12:09 -04:00
Ben12345rocks fce1b38a24 Bug fix 2020-06-11 16:45:32 -04:00
Ben12345rocks 6538465add Maven updates 2020-06-07 17:13:17 -04:00
Ben12345rocks a70b9e46a8 Change default color codes for /vote 2020-06-06 18:17:03 -04:00
Ben12345rocks 22d7c75261 Add bungee help command 2020-06-05 19:24:56 -04:00
Ben12345rocks 1cdf7a1033 Bug fix 2020-06-03 16:21:47 -04:00
Ben12345rocks 27afaf8e1b Add bungee status command 2020-06-01 19:35:14 -04:00
Ben12345rocks 019699ae75 Bug fix 2020-06-01 18:58:19 -04:00
Ben12345rocks 745df69024 Add a status command for bungee voting 2020-06-01 17:38:35 -04:00
Ben12345rocks 6e84130261 Little improvement 2020-05-31 14:01:16 -04:00
Ben12345rocks 124485b4f0 Little imrprovement 2020-05-31 12:26:03 -04:00
Ben12345rocks f6f9028680 Little improvement 2020-05-31 12:09:42 -04:00
Ben12345rocks 7fab7c5ca8 Add config option for vote shop 2020-05-30 15:34:53 -04:00
Ben12345rocks 355bcfa4d1 Fix perm 2020-05-29 18:50:46 -04:00
Ben12345rocks 87715a1e93 Add command to clear points 2020-05-29 18:49:42 -04:00
Ben12345rocks cf5faca040 Little fix 2020-05-28 21:25:54 -04:00
Ben12345rocks 099ceb3bca Improvement 2020-05-28 20:19:30 -04:00
Ben12345rocks 56dd38b6e0 little change 2020-05-28 16:18:01 -04:00
Ben12345rocks ad752e024a Improvement 2020-05-27 19:05:54 -04:00
Ben12345rocks fc6f1052d6 Little improvement 2020-05-26 19:01:20 -04:00
Ben12345rocks f663b06626 Improvement 2020-05-23 20:17:32 -04:00
Ben12345rocks 7a38a4d7f8 Little improvement 2020-05-23 17:35:28 -04:00
Ben12345rocks 28b8c04f95 Bug fix 2020-05-23 17:30:05 -04:00
Ben12345rocks 85bc09c3da Little config change 2020-05-23 15:23:29 -04:00
Ben12345rocks b817ea25e6 Added persite level offset for /vote next only 2020-05-22 16:34:41 -04:00
Ben12345rocks 25ba2f597e Improve debug message 2020-05-22 16:25:49 -04:00
Ben12345rocks 321b3fbf3a Add option 2020-05-21 21:20:29 -04:00
Ben12345rocks df6a4e4a35 Bug fix 2020-05-17 21:34:23 -04:00
Ben12345rocks 7c0031b265 Bug fix 2020-05-16 16:14:12 -04:00
Ben12345rocks e99ec75a0f Update version number 2020-05-12 19:14:04 -04:00
Ben12345rocks 15f851e825 Bug fix 2020-05-12 17:36:46 -04:00
Ben12345rocks 0579e7a2fd Bug fix 2020-05-12 17:33:26 -04:00
Ben12345rocks 1c0b7dc0b1 Bug fix 2020-05-12 17:29:38 -04:00
Ben12345rocks 40d002fbfa Update version number 2020-05-10 12:27:37 -04:00
Ben e665eb668f Update stale.yml 2020-05-03 12:08:51 -04:00
Ben12345rocks 05239717a5 Bug fix 2020-05-01 16:22:07 -04:00
Ben12345rocks b91f9bedfa Bug fix 2020-04-26 13:19:46 -04:00
Ben12345rocks 12261ece0e Change default value 2020-04-23 16:20:28 -04:00
Ben12345rocks bef017c12d Added ForceLinks 2020-04-22 19:35:25 -04:00
Ben12345rocks a6544a399f Little change 2020-04-18 09:24:33 -04:00
Ben12345rocks 60b61ae49d Improvements 2020-04-14 18:09:11 -04:00
Ben12345rocks 93ccd5f392 Little change 2020-04-13 14:31:28 -04:00
Ben12345rocks 8169ed413c Add ability for voteshop confirmation 2020-04-13 11:12:44 -04:00
Ben12345rocks 1a42dfadc0 Little change 2020-04-13 11:00:15 -04:00
Ben12345rocks c5a5573652 Added voteshop limit resets 2020-04-13 10:58:58 -04:00
Ben12345rocks f7c3093478 Update version number 2020-04-12 12:25:29 -04:00
Ben12345rocks 6000e1fab9 Add config option 2020-04-10 17:50:24 -04:00
Ben12345rocks 2ac42539aa Bug fix 2020-04-10 15:32:14 -04:00
Ben12345rocks 6d25b02975 Little config improvement 2020-04-10 15:18:31 -04:00
Ben12345rocks f3582627fb Add broadcast blacklist 2020-04-10 15:17:13 -04:00
Ben12345rocks 9e98c2db78 Parse placeholderapi placeholders on broadcast 2020-04-10 13:44:02 -04:00
Ben12345rocks d387b632dd Bug fix 2020-04-04 15:06:47 -04:00
Ben12345rocks 69d4a49462 Bug fix 2020-04-04 08:30:31 -04:00
Ben12345rocks 5f648983c8 Attempted bug fix 2020-04-04 08:28:01 -04:00
Ben12345rocks d98bfd45fc Add another option 2020-04-03 16:49:32 -04:00
Ben12345rocks a38931ca23 Add option for gui 2020-04-02 16:52:48 -04:00
Ben12345rocks 508fcb2f29 Add votedelaymin 2020-04-01 20:03:56 -04:00
Ben12345rocks d280e4b131 Test change 2020-04-01 19:41:55 -04:00
Ben12345rocks 48c014227d Improvements 2020-04-01 16:56:54 -04:00
Ben12345rocks 21c4be4148 Little bug fix 2020-03-29 12:26:46 -04:00
Ben12345rocks d44290dcdc Update version number 2020-03-29 12:24:04 -04:00
Ben12345rocks 702c739ec8 Bug fix 2020-03-24 16:44:54 -04:00
Ben12345rocks c1122bd939 Bug fix 2020-03-23 20:40:53 -04:00
Ben12345rocks bdaa896fc1 Bug fix 2020-03-23 20:23:56 -04:00
Ben12345rocks 3b1c051fd2 Bug fix 2020-03-23 20:23:16 -04:00
Ben12345rocks 11194f819e Disable other background task when other one is enabled 2020-03-23 18:52:16 -04:00
Ben12345rocks 662eb16fdd Add log 2020-03-23 18:35:28 -04:00
Ben12345rocks d65070973c Add extra feature 2020-03-23 17:14:21 -04:00
Ben12345rocks cef41348cc Added message 2020-03-22 21:16:04 -04:00
Ben12345rocks bcba694308 Little change 2020-03-22 20:36:19 -04:00
Ben12345rocks fbd7c6d3fc Little improvements 2020-03-20 18:53:55 -04:00
Ben12345rocks f842c08d62 Add voteshop command 2020-03-20 17:51:55 -04:00
Ben12345rocks 4e58a6915f Update version number 2020-03-15 13:53:33 -04:00
Ben12345rocks 4336644fbc Bug fix 2020-03-14 19:19:41 -04:00
Ben12345rocks e32909ac58 Add softdepend 2020-03-14 18:31:06 -04:00
Ben12345rocks bd16e2ccaf Add command 2020-03-13 21:15:44 -04:00
Ben12345rocks 36fa55139e Bug fix 2020-03-13 17:08:23 -04:00
Ben12345rocks b128280d5f Silence error 2020-03-13 17:05:50 -04:00
Ben12345rocks 51e3f05031 Minor improvement 2020-03-11 20:02:04 -04:00
Ben12345rocks 19b83070c6 Improvements to config 2020-03-11 19:49:59 -04:00
Ben12345rocks 5622956e75 Added points formatted placeholder 2020-03-06 16:48:45 -05:00
Ben12345rocks 1ac3ea4916 Minor improvement to force commands 2020-03-06 16:45:14 -05:00
Ben12345rocks 391cc0edf1 Add advancedcore info to /av version 2020-03-01 14:15:11 -05:00
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
Ben12345rocks 7268017dc1 Javadoc fix 2019-10-19 20:22:30 -04:00
Ben12345rocks 4133480750 Update version number 2019-10-19 20:08:25 -04:00
Ben12345rocks 006a265c7a Improvements 2019-10-16 19:29:50 -04:00
Ben12345rocks 6850ef8a7d Improvements 2019-10-13 20:37:46 -04:00
Ben12345rocks 497f556ba6 Improvements 2019-10-13 19:21:38 -04:00
Ben12345rocks d62da744cd Add ability to disable commands 2019-10-12 17:08:20 -04:00
Ben12345rocks 864482e393 Bug fix 2019-10-12 15:27:12 -04:00
Ben12345rocks e41c25ed5d More bungeecoord improvements 2019-10-09 19:20:26 -04:00
Ben12345rocks 3e429b83a8 Bug fix 2019-10-09 17:01:03 -04:00
Ben12345rocks cd1af401ba Added config update command 2019-10-06 19:10:45 -04:00
Ben12345rocks 26e04bd890 Remove config update, requires more testing 2019-10-06 17:03:51 -04:00
Ben12345rocks b6d70fac9c Add config update to update config 2019-10-06 17:02:09 -04:00
Ben12345rocks 9e572c786c Add ability for plugin to run on bungeecoord, WIP 2019-10-06 15:00:53 -04:00
39 changed files with 2960 additions and 363 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: 5
# 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
+1 -1
View File
@@ -6,7 +6,7 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.8.0_261">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
@@ -9,6 +9,7 @@ org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.doc.comment.support=disabled
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
@@ -24,4 +25,6 @@ org.eclipse.jdt.core.compiler.problem.missingJavadocTags=warning
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
+111 -16
View File
@@ -2,7 +2,9 @@
# Main Config
# See wiki for help:
# https://github.com/Ben12345rocks/VotingPlugin/wiki
# Config is sorted in sections
# Use Control + F to search with Notepad++
#
# Valid Options:
# - SQLITE
# - FLAT
@@ -129,7 +131,7 @@ Format:
# %url% = site URL
Vote:
Text:
- '&4&lVote for our server!'
- '&6&lVote for our server!'
# If you want to want to use the feature below where the plugin will
# automaticly list the sites then set the message in the text above
@@ -138,7 +140,10 @@ Format:
# make sure to set VoteURL in your VoteSites
# Requires above to be true
# Text will be sent before this
Sites: '&4%num%: &c&l%SiteName% - &c%url%'
Sites: '&6%num%: &e&l%SiteName% - &e%url%'
# If true, links will always be forced as urls
ForceLinks: true
# Format for /vote next
Next:
@@ -332,6 +337,8 @@ GUI:
Data: 0
Amount: 1
Name: '&4URL'
Lore:
- '&aClick me for links'
# You can set skulls of the player using the following
# Remove the # to enable
#Skull: '%Player%'
@@ -355,7 +362,7 @@ GUI:
Name: '&4Total'
Top:
Item:
Material: 'SIGN'
Material: 'OAK_SIGN'
Data: 0
Amount: 1
Name: '&4Top'
@@ -444,7 +451,14 @@ GUI:
BackButton: true
VoteToday:
Name: 'VoteToday'
Line: '&6%VoteSite% : %Time%'
IconTitle: '%player%'
BackButton: true
UseSkull: true
# If UseSkull is false, use this item
PlayerItem:
Material: 'PAPER'
Amount: 1
VoteTop:
Name: 'VoteTop %topvoter%'
BackButton: false
@@ -452,9 +466,9 @@ GUI:
Name: '&3&l%position%: &3%player%'
Lore: '&3&lVotes: &3%votes%'
SwitchItem:
Name: 'Switch TopVoter'
Lore: 'Currently: %Top%'
Material: 'SIGN'
Name: '&3Switch TopVoter'
Lore: '&bCurrently: %Top%'
Material: 'OAK_SIGN'
Amount: 1
# 8 Slots over from the bottom left
Slot: 7
@@ -559,7 +573,7 @@ GUI:
VoteShopName: 'VoteShop'
BackButton:
Material: 'PAPER'
Material: 'BARRIER'
Data: 0
Amount: 1
Name: '&8Back to VoteGUI'
@@ -570,10 +584,13 @@ VoteShopEnabled: true
VoteShopHideLimitedReached: true
# Requires above to be false
VoteShopLimitReached: '&aYou reached your limit'
VoteShopRequireConfirmation: false
Shop:
# Identifier
# Used in placeholders for formats
# Do not have spaces in the identifier
Diamond:
Identifier_Name: 'Diamond'
# Item
Material: 'DIAMOND'
Data: 0
@@ -590,6 +607,11 @@ Shop:
Permission: ''
# Limit how many times you can buy this
#Limit: 3
# Reset limit daily/weekly/monthly
#Reset:
#Daily: false
#Weekly: false
#Monthly: false
# If true, item is not buyable
#NotBuyable: false
# Rewards to run if player buys successfully
@@ -606,13 +628,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
@@ -650,6 +671,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
@@ -833,6 +856,14 @@ ClickSound:
Volume: 1.0
Pitch: 1.0
# Playernames to not be broadcasted when voting
# case sensitive
VotingBroadcastBlacklist: []
# Set to false to prevent javascript
# parsing on placeholderapi placeholders
UseJavascriptPlaceholders: true
# Limit monthly votes to number of days of a month multipled by the number of sites
LimitMonthlyVotes: false
@@ -884,6 +915,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
@@ -941,15 +976,73 @@ LoadSkulls: true
# May not work on some plugins
UseVaultPermissions: false
# List of disabled commands from /vote
# List the specific permission
# E.g:
# - PERMISSION
DisabledCommands: []
# Enable to true for extra player checks
ExtraBackgroundUpdate: false
# --------------------------
# Bungee Setup
# Only if using votingplugin bungee to send votes
# REQUIRES RESTART FOR CHANGES TO TAKE EFFECT
# --------------------------
# Plugin using bungee, requires plugin on bungee server
UseBungeecoord: false
# For pluginmessaging method only
# Whether to broadcast on cached votes
BungeeBroadcastAlways: false
# What type of bungee setup
# Requires restart and set on all servers
# https://github.com/Ben12345rocks/VotingPlugin/wiki/Bungeecoord-Setups
# Available:
# SOCKETS
# PLUGINMESSAGING
# MYSQL
BungeeMethod: SOCKETS
# Enables more debug messages for communication between servers
# Use /votingpluginbungee status for testing communication
BungeeDebug: false
# Get the plugin to broadcast to all servers
BungeeBroadcast: false
# -----------------------------
# For socket setup below only
# -----------------------------
# What server this is in bungee (must match)
# 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
# ---------------------------------------------------------
# Mysql cache options
# 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
# Clear cache on player join always
ClearCacheOnJoin: false
# Clears cache for the player who voted only
@@ -957,9 +1050,15 @@ ClearCacheOnJoin: false
# Would recommend for some bungee setups
ClearCacheOnVote: false
# Clear cache when player leaves
ClearCacheOnLeave: false
ClearCacheOnVoteShopPurchase: true
# ###############################################################
# Deprecated options, don't recommend using any of these
# Will force GUI's to close on every click
AlwaysCloseInventory: false
# Options for request api
@@ -972,10 +1071,6 @@ RequestAPI:
DefaultMethod: 'Anvil'
DisabledMethods: []
# Whether or not to disable checking names on mojang, disable if you hit the rate limit
# Shouldn't make a noticeable impact if set to false
#CheckNameMojang: false
# Shouldn't need to change this
#AutoKillInvs: true
+12 -4
View File
@@ -25,12 +25,17 @@ VoteSites:
# vote url for /vote
# Format for this can be set in Format.yml
# Do not include colors here
# If you need to force a url set the url as this:
# VoteURL: '[Text="ANY TEXT TO CLICK ON HERE",url="URLHERE"]'
VoteURL: 'link to vote URL here, used in /vote'
# Time between votes in hours (used for /vote next)
# Most sites are 24 hours
VoteDelay: 24
# Use to have a minute votedelay
#VoteDelayMin: 30
# Require waiting until votedelay time has pasted in order to accept vote
# Recommend: false
WaitUntilVoteDelay: false
@@ -44,9 +49,9 @@ VoteSites:
# This basiclly disables offline voting if set to true, don't misinterpret this option
ForceOffline: false
# VoteSite Material for GUI's
# VoteSite Material for some GUI's
# Removing this may result in an error, required on each site
Item:
DisplayItem:
Material: 'DIAMOND'
Amount: 1
@@ -66,7 +71,7 @@ VoteSites:
ServiceSite: 'PlanetMinecraft.com'
VoteURL: 'link to vote URL here, used in /vote'
VoteDelay: 24
Item:
DisplayItem:
Material: 'DIAMOND'
Amount: 1
Rewards:
@@ -82,7 +87,10 @@ VoteSites:
Reward1:
Chance: 50
# Any other requirement here
# If any requirement fails, the next will be attempted
# If any requirement fails, the next reward will be attempted
# Use permission requirement for rank based rewards
#RequirePermission: true
#Permission: 'permhere'
Messages:
Player: 'You got first reward'
Reward2:
+4
View File
@@ -0,0 +1,4 @@
name: ${project.name}
version: ${project.version}
main: com.Ben12345rocks.VotingPlugin.bungee.Bungee
author: Ben12345rocks
+60
View File
@@ -0,0 +1,60 @@
# Set bungeecoord to true on servers on the network (In VotingPlugin)
# Set server name in each server related to what it is on bungee
#
# MYSQL Required on all setups
# MYSQL INFO --------------------------
Host: ''
# Default port is 3306
Port: 3306
Database: ''
Username: ''
Password: ''
# Max number of connections
MaxConnections: 1
# Maxium size of caching mysql
# -1 for no limit
# Affecting this value may affect performance
MaxSize: -1
# Table name prefix, for use with mutliple servers
Prefix: ''
#UseSSL: true
Debug: false
# Have a reward on each server
# If false, will send to online server only
SendVotesToAllServers: true
# List of servers the plugin won't send the vote to
# Uses names from bungeecoord config if not using SOCKETS method
BlockedServers:
- hub
# What type of bungee setup
# Requires restart and set on all servers
# https://github.com/Ben12345rocks/VotingPlugin/wiki/Bungeecoord-Setups
# Available:
# SOCKETS
# PLUGINMESSAGING
# MYSQL
BungeeMethod: SOCKETS
# ----------------------------
# SOCKET METHOD Only, ignore otherwise
# ----------------------------
FallBackServer: factions
# Tell servers to broadcast
Broadcast: true
# 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
+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, ProtocolLib, MVdWPlaceholderAPI, AuthMe]
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
+35 -4
View File
@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.Ben12345rocks</groupId>
<artifactId>VotingPlugin</artifactId>
<version>5.20.2</version>
<version>5.23</version>
<packaging>jar</packaging>
<name>VotingPlugin</name>
<properties>
@@ -27,6 +27,7 @@
<filtering>true</filtering>
<includes>
<include>plugin.yml</include>
<include>bungee.yml</include>
</includes>
</resource>
<resource>
@@ -77,7 +78,7 @@
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.18.2.0</version>
<version>1.18.12.0</version>
<executions>
<execution>
<id>delombok</id>
@@ -233,6 +234,18 @@
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>maven-central</id>
<url>https://oss.sonatype.org/content/groups/public</url>
</repository>
<repository>
<id>bungeecord-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
<repository>
<id>bintray-repo</id>
<url>https://dl.bintray.com/nuvotifier/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
@@ -240,12 +253,13 @@
<artifactId>AdvancedCore</artifactId>
<version>master-SNAPSHOT</version>
</dependency>
<!-- <dependency> <groupId>com.Ben12345rocks</groupId> <artifactId>AdvancedCore</artifactId>
<!--<dependency> <groupId>com.Ben12345rocks</groupId> <artifactId>AdvancedCore</artifactId>
<version>LATEST</version> <scope>compile</scope> </dependency> -->
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<version>1.16.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
@@ -289,5 +303,22 @@
<scope>system</scope>
<systemPath>${project.basedir}/Jars/MVdWPlaceholderAPI.jar</systemPath>
</dependency>
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>LATEST</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.vexsoftware</groupId>
<artifactId>nuvotifier-universal</artifactId>
<version>2.3.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.tchristofferson</groupId>
<artifactId>ConfigUpdater</artifactId>
<version>1.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,232 @@
package com.Ben12345rocks.VotingPlugin;
import java.io.File;
import java.util.ArrayList;
import java.util.UUID;
import com.Ben12345rocks.AdvancedCore.Util.Encryption.EncryptionHandler;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessage;
import com.Ben12345rocks.AdvancedCore.Util.PluginMessage.PluginMessageHandler;
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 com.Ben12345rocks.VotingPlugin.bungee.BungeeMethod;
import lombok.Getter;
public class BungeeHandler {
private static BungeeHandler instance = new BungeeHandler();
public static BungeeHandler getInstance() {
return instance;
}
@Getter
private SocketHandler socketHandler;
@Getter
private ClientHandler clientHandler;
private EncryptionHandler encryptionHandler;
@Getter
private BungeeMethod method;
public void close() {
socketHandler.closeConnection();
clientHandler.stopConnection();
}
public void load() {
Main.plugin.debug("Loading bungee handler");
method = BungeeMethod.getByName(Config.getInstance().getBungeeMethod());
Main.plugin.getLogger().info("Using BungeeMethod: " + method.toString());
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
Main.plugin.registerBungeeChannels();
PluginMessage.getInstance().add(new PluginMessageHandler("Vote") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
String player = args.get(0);
String uuid = args.get(1);
String service = args.get(2);
long time = Long.parseLong(args.get(3));
Main.plugin.debug("pluginmessaging vote received from " + player + " on " + service);
User user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
user.clearCache();
user.bungeeVotePluginMessaging(service, time);
if (Boolean.valueOf(args.get(4)) || Config.getInstance().isBungeeBroadcastAlways()) {
VoteSite site = Main.plugin.getVoteSite(service);
if (site != null) {
site.broadcastVote(user, false);
} else {
Main.plugin.getLogger().warning("No votesite for " + service);
}
}
}
});
PluginMessage.getInstance().add(new PluginMessageHandler("VoteOnline") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
String player = args.get(0);
String uuid = args.get(1);
String service = args.get(2);
long time = Long.parseLong(args.get(3));
Main.plugin.debug("pluginmessaging voteonline received from " + player + " on " + service);
User user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
user.clearCache();
user.bungeeVotePluginMessaging(service, time);
if (Boolean.valueOf(args.get(4)) || Config.getInstance().isBungeeBroadcastAlways()) {
VoteSite site = Main.plugin.getVoteSite(service);
if (site != null) {
site.broadcastVote(user, false);
} else {
Main.plugin.getLogger().warning("No votesite for " + service);
}
}
}
});
PluginMessage.getInstance().add(new PluginMessageHandler("VoteUpdate") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
String player = args.get(0);
Main.plugin.debug("pluginmessaging voteupdate received for " + player);
User user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(player));
user.clearCache();
user.offVote();
Main.plugin.setUpdate(true);
}
});
PluginMessage.getInstance().add(new PluginMessageHandler("VoteBroadcast") {
@Override
public void onRecieve(String subChannel, ArrayList<String> args) {
String uuid = args.get(0);
String service = args.get(1);
User user = UserManager.getInstance().getVotingPluginUser(UUID.fromString(uuid));
VoteSite site = Main.plugin.getVoteSite(service);
if (site != null) {
site.broadcastVote(user, false);
} else {
Main.plugin.getLogger().warning("No votesite for " + service);
}
}
});
} else if (method.equals(BungeeMethod.SOCKETS)) {
encryptionHandler = new EncryptionHandler(new File(Main.plugin.getDataFolder(), "secretkey.key"));
clientHandler = new ClientHandler(Config.getInstance().getBungeeServerHost(),
Config.getInstance().getBungeeServerPort(), encryptionHandler,
Config.getInstance().isBungeeDebug());
socketHandler = new SocketHandler(Main.plugin.getVersion(), Config.getInstance().getSpigotServerHost(),
Config.getInstance().getSpigotServerPort(), encryptionHandler,
Config.getInstance().isBungeeDebug());
socketHandler.add(new SocketReceiver("bungeevote") {
@Override
public void onReceive(String[] data) {
if (data.length > 3) {
Main.plugin.extraDebug("BungeeVote from " + data[2] + ", processing");
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("bungeevoteonline") {
@Override
public void onReceive(String[] data) {
if (data.length > 3) {
Main.plugin.extraDebug("BungeeVoteOnline from " + data[2] + ", processing");
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("BungeeBroadcast") {
@Override
public void onReceive(String[] data) {
if (data.length > 2) {
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]);
}
}
}
});
socketHandler.add(new SocketReceiver("Status") {
@Override
public void onReceive(String[] data) {
if (data.length > 0) {
Main.plugin.getLogger().info("Received status command, sending status back");
sendData("StatusOkay", Main.plugin.getOptions().getServer());
}
}
});
socketHandler.add(new SocketReceiver("BungeeUpdate") {
@Override
public void onReceive(String[] data) {
Main.plugin.setUpdate(true);
}
});
if (Main.plugin.getOptions().getServer().equalsIgnoreCase("pleaseset")) {
Main.plugin.getLogger().warning("Server name for bungee voting is not set, please set it");
}
}
}
public void sendData(String... strings) {
clientHandler.sendMessage(strings);
}
}
@@ -1,9 +1,13 @@
package com.Ben12345rocks.VotingPlugin.Commands;
import java.io.File;
import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -19,6 +23,9 @@ import com.Ben12345rocks.AdvancedCore.CommandAPI.CommandHandler;
import com.Ben12345rocks.AdvancedCore.CommandAPI.TabCompleteHandle;
import com.Ben12345rocks.AdvancedCore.CommandAPI.TabCompleteHandler;
import com.Ben12345rocks.AdvancedCore.Commands.GUI.UserGUI;
import com.Ben12345rocks.AdvancedCore.Rewards.RewardHandler;
import com.Ben12345rocks.AdvancedCore.Rewards.RewardOptions;
import com.Ben12345rocks.AdvancedCore.TimeChecker.TimeChecker;
import com.Ben12345rocks.AdvancedCore.UserManager.UUID;
import com.Ben12345rocks.AdvancedCore.UserManager.UserStorage;
import com.Ben12345rocks.AdvancedCore.Util.Inventory.BInventory;
@@ -58,6 +65,7 @@ import com.mythicacraft.voteroulette.Voter;
import com.swifteh.GAL.GAL;
import com.swifteh.GAL.GALVote;
import com.swifteh.GAL.VoteType;
import com.tchristofferson.configupdater.ConfigUpdater;
import io.minimum.minecraft.superbvote.SuperbVote;
import io.minimum.minecraft.superbvote.util.PlayerVotes;
@@ -217,6 +225,16 @@ public class CommandLoader {
private void loadAdminVoteCommand() {
plugin.setAdminVoteCommand(new ArrayList<CommandHandler>());
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "CurrentPluginTime" },
"VotingPlugin.Commands.AdminVote.CurrentPluginTime|" + adminPerm, "Current plugin time") {
@Override
public void execute(CommandSender sender, String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Config.getInstance().getFormatTimeFormat());
sendMessage(sender, TimeChecker.getInstance().getTime().format(formatter));
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "ConvertFrom", "GAL" },
"VotingPlugin.Commands.AdminVote.ConvertFrom.GAL|" + adminPerm, "Convert from GAL") {
@@ -337,6 +355,36 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "ResetPoints" },
"VotingPlugin.Commands.AdminVote.ResetPoints|" + adminPerm, "Clears all points of all players",
true, false) {
@Override
public void execute(CommandSender sender, String[] args) {
sendMessage(sender, "&cStarting...");
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
user.setPoints(0);
}
sendMessage(sender, "&cFinished");
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "ResyncMilestones", "(player)" },
"VotingPlugin.Commands.AdminVote.SetResyncMilestones|" + adminPerm, "Resync Milestones") {
@Override
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
user.setMilestoneCount(user.getTotal(TopVoter.AllTime));
sendMessage(sender, "&cResynced milestones for " + args[1]);
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "User", "(player)", "AddPoints", "(number)" },
"VotingPlugin.Commands.AdminVote.AddPoints|" + adminPerm, "Add to players voting points") {
@@ -506,6 +554,8 @@ public class CommandLoader {
});
}
sendMessage(sender,
"Using AdvancedCore " + plugin.getVersion() + "' built on '" + plugin.getBuildTime());
}
});
@@ -768,6 +818,37 @@ public class CommandLoader {
}
});
plugin.getAdminVoteCommand().add(new CommandHandler(new String[] { "Config", "Update" },
"VotingPlugin.Commands.AdminVote.Config.Edit|" + adminPerm, "Updates config with missing values") {
@Override
public void execute(CommandSender sender, String[] args) {
ArrayList<String> ignoreSections = new ArrayList<String>();
ignoreSections.add("VoteReminding");
ignoreSections.add("GUI");
ignoreSections.add("Shop");
ignoreSections.add("FirstVote");
ignoreSections.add("AllSites");
ignoreSections.add("Cummulative");
ignoreSections.add("VoteParty");
ignoreSections.add("MileStones");
ignoreSections.add("VoteStreak");
ignoreSections.add("MonthlyAwards");
ignoreSections.add("WeeklyAwards");
ignoreSections.add("DailyAwards");
File file = new File(plugin.getDataFolder(), "Config.yml");
try {
ConfigUpdater.update(plugin, "Config.yml", file, ignoreSections);
} catch (IOException e) {
e.printStackTrace();
}
config.reloadData();
config.loadValues();
sendMessage(sender, "&cUpdated config with new values");
}
});
plugin.getAdminVoteCommand()
.add(new CommandHandler(new String[] { "Config", "TempExtraDebug" },
"VotingPlugin.Commands.AdminVote.Config.Edit|" + adminPerm,
@@ -1031,6 +1112,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") {
@@ -1039,6 +1132,7 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
SpecialRewards.getInstance().giveMilestoneVoteReward(user, user.isOnline(), parseInt(args[3]));
sendMessage(sender, "&cMilestone " + args[3] + " forced");
}
});
@@ -1050,6 +1144,7 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
SpecialRewards.getInstance().giveCumulativeVoteReward(user, user.isOnline(), parseInt(args[3]));
sendMessage(sender, "&cCummulative " + args[3] + " forced");
}
});
@@ -1060,6 +1155,7 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
SpecialRewards.getInstance().giveAllSitesRewards(user, user.isOnline());
sendMessage(sender, "&cAllSites forced");
}
});
@@ -1070,6 +1166,7 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
SpecialRewards.getInstance().giveFirstVoteRewards(user, user.isOnline());
sendMessage(sender, "&cFirstVote forced");
}
});
@@ -1082,6 +1179,7 @@ public class CommandLoader {
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");
}
});
@@ -1362,6 +1460,83 @@ public class CommandLoader {
PlayerGUIs.getInstance().openVoteShop((Player) sender);
}
});
plugin.getVoteCommand().add(new CommandHandler(new String[] { "Shop", "(Text)" },
"VotingPlugin.Commands.Vote.Shop|" + playerPerm, "Open VoteShop GUI", false) {
@Override
public void execute(CommandSender sender, String[] args) {
if (!Config.getInstance().getVoteShopEnabled()) {
sender.sendMessage(StringParser.getInstance().colorize("&cVote shop disabled"));
return;
}
String identifier = args[1];
Set<String> identifiers = Config.getInstance().getIdentifiers();
if (ArrayUtils.getInstance().containsIgnoreCase(identifiers, identifier)) {
for (String ident : identifiers) {
if (ident.equalsIgnoreCase(args[1])) {
identifier = ident;
}
}
String perm = Config.getInstance().getVoteShopPermission(identifier);
boolean hasPerm = false;
if (perm.isEmpty()) {
hasPerm = true;
} else {
hasPerm = sender.hasPermission(perm);
}
int limit = Config.getInstance().getIdentifierLimit(identifier);
User user = UserManager.getInstance().getVotingPluginUser(sender.getName());
boolean limitPass = true;
if (limit > 0) {
if (user.getVoteShopIdentifierLimit(identifier) >= limit) {
limitPass = false;
}
}
if (!Config.getInstance().getVoteShopNotBuyable(identifier)) {
if (hasPerm) {
user.clearCache();
int points = Config.getInstance().getIdentifierCost(identifier);
if (identifier != null) {
if (limitPass) {
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("identifier", identifier);
placeholders.put("points", "" + points);
placeholders.put("limit", "" + limit);
if (user.removePoints(points)) {
RewardHandler.getInstance().giveReward(user, Config.getInstance().getData(),
Config.getInstance().getIdentifierRewardsPath(identifier),
new RewardOptions().setPlaceholders(placeholders));
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getFormatShopPurchaseMsg(), placeholders));
if (limit > 0) {
user.setVoteShopIdentifierLimit(identifier,
user.getVoteShopIdentifierLimit(identifier) + 1);
}
} else {
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getFormatShopFailedMsg(), placeholders));
}
} else {
user.sendMessage(Config.getInstance().getVoteShopLimitReached());
}
}
}
}
} else {
sendMessage(sender, "&cWrong voteshop item");
}
}
});
}
plugin.getVoteCommand().add(new CommandHandler(new String[] { "URL" },
@@ -1374,7 +1549,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 for VoteSite", false) {
@Override
public void execute(CommandSender sender, String[] args) {
@@ -2029,14 +2204,18 @@ public class CommandLoader {
User user = UserManager.getInstance().getVotingPluginUser(args[1]);
int pointsToGive = Integer.parseInt(args[2]);
if (cPlayer.getPoints() >= pointsToGive) {
user.addPoints(pointsToGive);
cPlayer.removePoints(pointsToGive);
sendMessage(sender, "&c" + pointsToGive + " points given to " + user.getPlayerName());
user.sendMessage(
"&cYou received " + pointsToGive + " points from " + cPlayer.getPlayerName());
if (pointsToGive > 0) {
if (cPlayer.getPoints() >= pointsToGive) {
user.addPoints(pointsToGive);
cPlayer.removePoints(pointsToGive);
sendMessage(sender, "&c" + pointsToGive + " points given to " + user.getPlayerName());
user.sendMessage(
"&cYou received " + pointsToGive + " points from " + cPlayer.getPlayerName());
} else {
sendMessage(sender, "&cNot enough points");
}
} else {
sendMessage(sender, "&cNot enough points");
sendMessage(sender, "&cNumber of points needs to be greater than 0");
}
}
}
@@ -2051,9 +2230,9 @@ public class CommandLoader {
if (!Config.getInstance().isCommandsUseGUIVote() || !(sender instanceof Player)) {
if (isPlayer(sender)) {
User user = UserManager.getInstance().getVotingPluginUser((Player) sender);
user.sendMessage(Commands.getInstance().voteURLs(user));
user.sendMessage(Commands.getInstance().voteURLs(user, true));
} else {
sender.sendMessage(Commands.getInstance().voteURLs(null));
sender.sendMessage(Commands.getInstance().voteURLs(null, false));
}
} else {
PlayerGUIs.getInstance().openVoteURL((Player) sender);
@@ -2069,9 +2248,9 @@ public class CommandLoader {
public void execute(CommandSender sender, String[] args) {
if (isPlayer(sender)) {
User user = UserManager.getInstance().getVotingPluginUser((Player) sender);
user.sendMessage(Commands.getInstance().voteURLs(user));
user.sendMessage(Commands.getInstance().voteURLs(user, true));
} else {
sender.sendMessage(Commands.getInstance().voteURLs(null));
sender.sendMessage(Commands.getInstance().voteURLs(null, true));
}
}
});
@@ -2082,6 +2261,38 @@ public class CommandLoader {
cmd.setPerm(cmd.getPerm() + "|" + playerPerm);
}
plugin.getVoteCommand().addAll(avCommands);
ArrayList<CommandHandler> list = plugin.getVoteCommand();
ArrayList<String> disabledCommands = Config.getInstance().getDisabledCommands();
for (int i = list.size() - 1; i >= 0; i--) {
boolean remove = false;
for (String disabled : disabledCommands) {
CommandHandler handle = list.get(i);
if (handle.getPerm().contains(disabled)) {
remove = true;
}
}
if (remove) {
plugin.debug("Disabling: " + ArrayUtils.getInstance()
.makeStringList(ArrayUtils.getInstance().convert(list.get(i).getArgs())));
list.remove(i);
}
}
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 "";
@@ -734,17 +737,19 @@ public class Commands {
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) {
if (votedelay == 0 && voteSite.getVoteDelayMin() == 0) {
String errorMsg = config.getFormatCommandsVoteNextInfoError();
info = errorMsg;
} else {
LocalDateTime nextvote = lastVote.plusHours((long) votedelay);
LocalDateTime nextvote = lastVote.plusHours((long) votedelay)
.plusMinutes((long) voteSite.getVoteDelayMin());
if (time == 0 || now.isAfter(nextvote)) {
info = config.getFormatCommandsVoteNextInfoCanVote();
@@ -764,23 +769,64 @@ public class Commands {
}
}
} else {
if (lastVote.getDayOfYear() == now.getDayOfYear() && lastVote.getYear() == now.getYear()) {
LocalDateTime midnight = TimeChecker.getInstance().getTime().plusDays(1).withHour(0).withMinute(0);
Duration dur = Duration.between(now, midnight);
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());
int diffHours = (int) (dur.getSeconds() / (60 * 60));
long diffMinutes = dur.getSeconds() / 60 - diffHours * 60;
if (!now.isBefore(offsetoclocktoday)) {
if (!lastVote.isBefore(offsetoclocktoday)) {
Duration dur = Duration.between(now, offsetoclocktomorrow);
int diffHours = (int) (dur.getSeconds() / (60 * 60));
long diffMinutes = dur.getSeconds() / 60 - diffHours * 60;
String timeMsg = config.getFormatCommandsVoteNextInfoVoteDelayDaily();
timeMsg = StringParser.getInstance().replaceIgnoreCase(timeMsg, "%hours%", Integer.toString(diffHours));
timeMsg = StringParser.getInstance().replaceIgnoreCase(timeMsg, "%minutes%",
Long.toString(diffMinutes));
info = timeMsg;
if (diffHours < 0) {
diffHours = diffHours * -1;
}
if (diffHours >= 24) {
diffHours = diffHours - 24;
}
if (diffMinutes < 0) {
diffMinutes = diffMinutes * -1;
}
String timeMsg = config.getFormatCommandsVoteNextInfoVoteDelayDaily();
timeMsg = StringParser.getInstance().replaceIgnoreCase(timeMsg, "%hours%",
Integer.toString(diffHours));
timeMsg = StringParser.getInstance().replaceIgnoreCase(timeMsg, "%minutes%",
Long.toString(diffMinutes));
info = timeMsg;
} else {
info = config.getFormatCommandsVoteNextInfoCanVote();
}
} else {
info = config.getFormatCommandsVoteNextInfoCanVote();
}
if (!lastVote.isBefore(offsetoclockyesterday)) {
Duration dur = Duration.between(now, offsetoclocktoday);
int diffHours = (int) (dur.getSeconds() / (60 * 60));
long diffMinutes = dur.getSeconds() / 60 - diffHours * 60;
if (diffHours < 0) {
diffHours = diffHours * -1;
}
if (diffHours >= 24) {
diffHours = diffHours - 24;
}
if (diffMinutes < 0) {
diffMinutes = diffMinutes * -1;
}
String timeMsg = config.getFormatCommandsVoteNextInfoVoteDelayDaily();
timeMsg = StringParser.getInstance().replaceIgnoreCase(timeMsg, "%hours%",
Integer.toString(diffHours));
timeMsg = StringParser.getInstance().replaceIgnoreCase(timeMsg, "%minutes%",
Long.toString(diffMinutes));
info = timeMsg;
} else {
info = config.getFormatCommandsVoteNextInfoCanVote();
}
}
}
return info;
}
@@ -906,7 +952,7 @@ public class Commands {
return ArrayUtils.getInstance().convert(msg);
}
public String[] voteURLs(User user) {
public String[] voteURLs(User user, boolean json) {
ArrayList<String> sites = new ArrayList<String>();
List<String> title = config.getFormatCommandsVoteText();
@@ -917,13 +963,15 @@ public class Commands {
int counter = 0;
for (VoteSite voteSite : plugin.getVoteSites()) {
counter++;
String voteURL = voteSite.getVoteURL();
String voteURL = voteSite.getVoteURL(json);
MessageBuilder message = new MessageBuilder(config.getFormatCommandsVoteURLS());
message.replacePlaceholder("num", Integer.toString(counter)).replacePlaceholder("url", voteURL)
.replacePlaceholder("SiteName", voteSite.getDisplayName())
.replacePlaceholder("player", user.getPlayerName())
.replacePlaceholder("Next", "" + voteCommandNextInfo(user, voteSite)).colorize();
sites.add(message.getText());
.replacePlaceholder("SiteName", voteSite.getDisplayName());
if (user != null && user.getPlayerName() != null) {
message.replacePlaceholder("player", "" + user.getPlayerName()).replacePlaceholder("Next",
"" + voteCommandNextInfo(user, voteSite));
}
sites.add(message.colorize().getText());
}
}
if (user != null) {
@@ -935,6 +983,7 @@ public class Commands {
sites = ArrayUtils.getInstance().replacePlaceHolder(sites, phs);
}
sites = ArrayUtils.getInstance().colorize(sites);
return ArrayUtils.getInstance().convert(sites);
}
@@ -12,7 +12,9 @@ import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import com.Ben12345rocks.AdvancedCore.NMSManager.NMSManager;
import com.Ben12345rocks.AdvancedCore.Rewards.RewardHandler;
import com.Ben12345rocks.AdvancedCore.Rewards.RewardOptions;
import com.Ben12345rocks.AdvancedCore.Util.Inventory.BInventory;
@@ -21,7 +23,6 @@ import com.Ben12345rocks.AdvancedCore.Util.Inventory.BInventoryButton;
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.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.Commands.Commands;
@@ -59,7 +60,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) {
@@ -146,7 +147,7 @@ public class PlayerGUIs {
if (lore.length == 0) {
if (slot.equalsIgnoreCase("url")) {
lore = Commands.getInstance().voteURLs(user);
lore = new String[] { "&aClick me" };
} else if (slot.equalsIgnoreCase("next")) {
lore = Commands.getInstance().voteCommandNext(user);
} else if (slot.equalsIgnoreCase("last")) {
@@ -181,48 +182,44 @@ public class PlayerGUIs {
@Override
public void onClick(ClickEvent event) {
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
Player player = event.getWhoClicked();
String cmd = Config.getInstance().getVoteGUISlotCommand(slot);
User user = getSelectedPlayer(player);
if (cmd.equalsIgnoreCase("none")) {
return;
} else if (!cmd.equals("")) {
Bukkit.getScheduler().runTask(plugin, new Runnable() {
Player player = event.getWhoClicked();
String cmd = Config.getInstance().getVoteGUISlotCommand(slot);
User user = getSelectedPlayer(player);
if (cmd.equalsIgnoreCase("none")) {
return;
} else if (!cmd.equals("")) {
event.runSync(new Runnable() {
@Override
public void run() {
player.performCommand(cmd);
}
});
} else {
if (slot.equalsIgnoreCase("url")) {
openVoteURL(player);
} else if (slot.equalsIgnoreCase("next")) {
openVoteNext(player, user);
} else if (slot.equalsIgnoreCase("last")) {
openVoteLast(player, user);
} else if (slot.equalsIgnoreCase("total")) {
openVoteTotal(player, user);
} else if (slot.equalsIgnoreCase("top")) {
openVoteTop(player, null);
} else if (slot.equalsIgnoreCase("today")) {
openVoteToday(player);
} else if (slot.equalsIgnoreCase("help")) {
player.performCommand("vote help");
} else if (slot.equalsIgnoreCase("shop")) {
openVoteShop(player);
} else if (slot.equalsIgnoreCase("lastmonth")) {
openVoteTopLastMonth(player);
}
@Override
public void run() {
player.performCommand(cmd);
}
});
} else {
if (slot.equalsIgnoreCase("url")) {
user.sendMessage(Commands.getInstance().voteURLs(user, true));
event.closeInventory();
} else if (slot.equalsIgnoreCase("next")) {
openVoteNext(player, user);
} else if (slot.equalsIgnoreCase("last")) {
openVoteLast(player, user);
} else if (slot.equalsIgnoreCase("total")) {
openVoteTotal(player, user);
} else if (slot.equalsIgnoreCase("top")) {
openVoteTop(player, null);
} else if (slot.equalsIgnoreCase("today")) {
openVoteToday(player);
} else if (slot.equalsIgnoreCase("help")) {
player.performCommand("vote help");
} else if (slot.equalsIgnoreCase("shop")) {
openVoteShop(player);
} else if (slot.equalsIgnoreCase("lastmonth")) {
openVoteTopLastMonth(player);
}
});
}
}
});
}
@@ -309,9 +306,12 @@ 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();
if (Config.getInstance().isClearCacheOnVoteShopPurchase()) {
user.clearCache();
}
String identifier = (String) getData("identifier");
int limit = (int) getData("Limit");
int points = Config.getInstance().getIdentifierCost(identifier);
@@ -326,25 +326,30 @@ public class PlayerGUIs {
}
if (limitPass) {
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("identifier", identifier);
placeholders.put("points", "" + points);
placeholders.put("limit", "" + limit);
if (user.removePoints(points)) {
if (!Config.getInstance().isVoteShopRequireConfirmation()) {
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("identifier",
Config.getInstance().getIdentifierIdentifierName(identifier));
placeholders.put("points", "" + points);
placeholders.put("limit", "" + limit);
if (user.removePoints(points)) {
RewardHandler.getInstance().giveReward(user, Config.getInstance().getData(),
Config.getInstance().getIdentifierRewardsPath(identifier),
new RewardOptions().setPlaceholders(placeholders));
RewardHandler.getInstance().giveReward(user, Config.getInstance().getData(),
Config.getInstance().getIdentifierRewardsPath(identifier),
new RewardOptions().setPlaceholders(placeholders));
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getFormatShopPurchaseMsg(), placeholders));
if (limit > 0) {
user.setVoteShopIdentifierLimit(identifier,
user.getVoteShopIdentifierLimit(identifier) + 1);
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getFormatShopPurchaseMsg(), placeholders));
if (limit > 0) {
user.setVoteShopIdentifierLimit(identifier,
user.getVoteShopIdentifierLimit(identifier) + 1);
}
} else {
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getFormatShopFailedMsg(), placeholders));
}
} else {
user.sendMessage(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getFormatShopFailedMsg(), placeholders));
openVoteShopConfirmation(player, identifier);
}
} else {
user.sendMessage(Config.getInstance().getVoteShopLimitReached());
@@ -376,6 +381,56 @@ public class PlayerGUIs {
inv.openInventory(player);
}
public void openVoteShopConfirmation(Player player, String identifier) {
PlayerUtils.getInstance().setPlayerMeta(player, "ident", identifier);
BInventory inv = new BInventory("Confirm Purchase?");
inv.addButton(new BInventoryButton(new ItemBuilder(Material.EMERALD_BLOCK).setName("&aYes")) {
@Override
public void onClick(ClickEvent event) {
String ident = (String) PlayerUtils.getInstance().getPlayerMeta(event.getPlayer(), "ident");
User user = UserManager.getInstance().getVotingPluginUser(event.getPlayer());
int points = Config.getInstance().getIdentifierCost(ident);
int limit = Config.getInstance().getIdentifierLimit(identifier);
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("identifier", identifier);
placeholders.put("points", "" + points);
placeholders.put("limit", "" + limit);
if (user.removePoints(points)) {
RewardHandler.getInstance().giveReward(user, Config.getInstance().getData(),
Config.getInstance().getIdentifierRewardsPath(identifier),
new RewardOptions().setPlaceholders(placeholders));
user.sendMessage(StringParser.getInstance()
.replacePlaceHolder(Config.getInstance().getFormatShopPurchaseMsg(), placeholders));
if (limit > 0) {
user.setVoteShopIdentifierLimit(identifier, user.getVoteShopIdentifierLimit(identifier) + 1);
}
} else {
user.sendMessage(StringParser.getInstance()
.replacePlaceHolder(Config.getInstance().getFormatShopFailedMsg(), placeholders));
}
Bukkit.getScheduler().runTask(plugin, new Runnable() {
@Override
public void run() {
event.getPlayer().closeInventory();
}
});
}
});
inv.addButton(new BInventoryButton(new ItemBuilder(Material.BARRIER).setName("&cNo")) {
@Override
public void onClick(ClickEvent event) {
event.getPlayer().closeInventory();
}
});
inv.openInventory(player);
}
public void openVoteStreak(Player player, User user) {
setSelectedPlayer(player, user);
BInventory inv = new BInventory(StringParser.getInstance()
@@ -455,9 +510,21 @@ public class PlayerGUIs {
for (VoteSite voteSite : plugin.getVoteToday().get(user).keySet()) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(Config.getInstance().getFormatTimeFormat());
String timeString = plugin.getVoteToday().get(user).get(voteSite).format(formatter);
String msg = "&6" + voteSite.getDisplayName() + " : " + timeString;
inv.addButton(inv.getNextSlot(), new BInventoryButton(user.getPlayerName(), new String[] { msg },
MiscUtils.getInstance().setSkullOwner(user.getOfflinePlayer())) {
String msg = Config.getInstance().getGUIVoteTodayLine();
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("VoteSite", voteSite.getDisplayName());
placeholders.put("Time", timeString);
msg = StringParser.getInstance().replacePlaceHolder(msg, placeholders);
ItemBuilder item = null;
if (Config.getInstance().isGUIVoteTodayUseSkull() && !NMSManager.getInstance().isVersion("1.12")) {
item = new ItemBuilder(new ItemStack(Material.PLAYER_HEAD, 1)).setSkullOwner(player);
} else {
item = new ItemBuilder(Config.getInstance().getGUIVoteTodayPlayerItem());
}
item.setName(StringParser.getInstance().replacePlaceHolder(
Config.getInstance().getGUIVoteTodayIconTitle(), "player", user.getPlayerName()));
item.setLore(msg);
inv.addButton(inv.getNextSlot(), new BInventoryButton(item) {
@Override
public void onClick(ClickEvent clickEvent) {
@@ -653,7 +720,7 @@ public class PlayerGUIs {
@Override
public void onClick(ClickEvent event) {
User user = UserManager.getInstance().getVotingPluginUser(event.getPlayer());
user.sendMessage(Commands.getInstance().voteURLs(user));
user.sendMessage(Commands.getInstance().voteURLs(user, true));
}
});
@@ -704,6 +771,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()
@@ -9,8 +9,10 @@ import org.bukkit.configuration.ConfigurationSection;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.AnnotationHandler;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataBoolean;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataConfigurationSection;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataDouble;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataInt;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataListString;
import com.Ben12345rocks.AdvancedCore.Util.Annotation.ConfigDataString;
import com.Ben12345rocks.AdvancedCore.YML.YMLFile;
import com.Ben12345rocks.VotingPlugin.Main;
@@ -56,6 +58,14 @@ public class Config extends YMLFile {
@Getter
private boolean commandsVoteRewardFromVoteURL = false;
@ConfigDataBoolean(path = "ClearCacheOnVoteShopPurchase")
@Getter
private boolean clearCacheOnVoteShopPurchase = true;
@ConfigDataBoolean(path = "ExtraBackgroundUpdate")
@Getter
private boolean extraBackgroundUpdate = false;
@ConfigDataString(path = "Format.Commands.Vote.Last.TimeFormat", defaultValue = "%amount% %TimeType%")
@Getter
private String formatCommandsVoteLastTimeFormat;
@@ -68,9 +78,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
@@ -124,6 +134,10 @@ public class Config extends YMLFile {
@Getter
private boolean addTotals = true;
@ConfigDataBoolean(path = "AlterColumns")
@Getter
private boolean alterColumns = true;
@Getter
private String allSitesRewardPath = "AllSites";
@@ -137,7 +151,23 @@ public class Config extends YMLFile {
@ConfigDataBoolean(path = "AutoCreateVoteSites")
@Getter
private boolean autoCreateVoteSites = true;
@ConfigDataBoolean(path = "UseBungeecoord")
@Getter
private boolean useBungeecoord = false;
@ConfigDataBoolean(path = "BungeeBroadcast")
@Getter
private boolean bungeeBroadcast = false;
@ConfigDataBoolean(path = "BungeeBroadcastAlways")
@Getter
private boolean bungeeBroadcastAlways = false;
@ConfigDataBoolean(path = "BungeeDebug")
@Getter
private boolean bungeeDebug = false;
@ConfigDataBoolean(path = "GUI.VoteURL.AllUrlsButton.RequireAllSitesVoted")
@Getter
private boolean guiVoteURLAllUrlsButtonrequireAllSitesVoted = true;
@@ -198,6 +228,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;
@@ -214,10 +248,26 @@ 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;
@ConfigDataBoolean(path = "VoteShopRequireConfirmation")
@Getter
private boolean voteShopRequireConfirmation = false;
@ConfigDataBoolean(path = "Format.Commands.Vote.ForceLinks")
@Getter
private boolean formatCommandsVoteForceLinks = true;
@Getter
private String firstVoteRewardsPath = "FirstVote";
@@ -263,6 +313,10 @@ public class Config extends YMLFile {
@ConfigDataString(path = "GUI.VoteTop.PlayerItem.Material")
@Getter
private String guiVoteTopPlayerItemMaterial = "PAPER";
@ConfigDataString(path = "BungeeMethod")
@Getter
private String bungeeMethod = "SOCKETS";
@ConfigDataBoolean(path = "AllowVotePointTransfers")
@Getter
@@ -291,6 +345,22 @@ public class Config extends YMLFile {
@Getter
private String formatCommandsVoteTodayLine = "&6%player% : %VoteSite% : %Time%";
@ConfigDataString(path = "GUI.VoteToday.Line")
@Getter
private String GUIVoteTodayLine = "&6%VoteSite% : %Time%";
@ConfigDataBoolean(path = "GUI.VoteToday.UseSkull", defaultValue = true)
@Getter
private boolean GUIVoteTodayUseSkull = true;
@ConfigDataConfigurationSection(path = "GUI.VoteToday.PlayerItem")
@Getter
private ConfigurationSection GUIVoteTodayPlayerItem;
@ConfigDataString(path = "GUI.VoteToday.IconTitle")
@Getter
private String GUIVoteTodayIconTitle = "%player%";
@ConfigDataBoolean(path = "OverrideVersionDisable")
@Getter
private boolean overrideVersionDisable = false;
@@ -303,6 +373,34 @@ public class Config extends YMLFile {
@Getter
private boolean allowUnJoinedCheckServer = true;
@ConfigDataBoolean(path = "UseJavascriptPlaceholders")
@Getter
private boolean useJavascriptPlaceholders = true;
@ConfigDataListString(path = "DisabledCommands")
@Getter
private ArrayList<String> disabledCommands = new ArrayList<String>();
@ConfigDataListString(path = "VotingBroadcastBlacklist")
@Getter
private ArrayList<String> votingBroadcastBlacklist = 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.
*/
@@ -936,6 +1034,10 @@ public class Config extends YMLFile {
return getData().getInt("Shop." + identifier + ".Cost");
}
public String getIdentifierIdentifierName(String identifier) {
return getData().getString("Shop." + identifier + ".Identifier_Name", identifier);
}
public int getIdentifierLimit(String identifier) {
return getData().getInt("Shop." + identifier + ".Limit", -1);
}
@@ -1283,6 +1385,18 @@ 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 boolean getVoteShopResetWeekly(String shop) {
return getData().getBoolean("Shop." + shop + ".Reset.Weekly", 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", "");
}
@@ -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;
@@ -60,11 +63,18 @@ public class ConfigVoteSites extends YMLFile {
setServiceSite(siteName, org);
setVoteURL(siteName, "VoteURL");
setVoteDelay(siteName, 24);
set(siteName, "Item.Material", "GRASS");
set(siteName, "Item.Amount", 1);
set(siteName, "DisplayItem.Material", "GRASS");
set(siteName, "DisplayItem.Amount", 1);
set(siteName, "Rewards.Messages.Player", "&aThanks for voting on %ServiceSite%!");
plugin.loadVoteSites();
for (Player p : Bukkit.getOnlinePlayers()) {
if (p.hasPermission("VotingPlugin.Admin.GenerateServiceSite") || p.isOp()) {
p.sendMessage(StringParser.getInstance().colorize("&cGenerating votesite for service site "
+ siteName + ", please check console for details"));
}
}
}
}
@@ -88,6 +98,9 @@ public class ConfigVoteSites extends YMLFile {
}
public ConfigurationSection getItem(String site) {
if (getData(site).isConfigurationSection("DisplayItem")) {
return getData(site).getConfigurationSection("DisplayItem");
}
return getData(site).getConfigurationSection("Item");
}
@@ -135,6 +148,14 @@ 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);
}
/**
* Gets the vote site enabled.
*
@@ -1,6 +1,7 @@
package com.Ben12345rocks.VotingPlugin.CoolDown;
import org.bukkit.Bukkit;
import java.util.TimerTask;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@@ -53,20 +54,26 @@ public class CoolDownCheck implements Listener {
}
public void checkAll() {
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
Main.plugin.getTimer().schedule(new TimerTask() {
@Override
public void run() {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
if (Main.plugin != null) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (user.getUserData().hasData() && user.hasLoggedOnBefore()) {
user.checkCoolDownEvents();
if (Main.plugin != null) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
if (Main.plugin != null) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (user.getUserData().hasData() && user.hasLoggedOnBefore()) {
user.checkCoolDownEvents();
}
} else {
cancel();
}
}
} else {
cancel();
}
}
});
}, 1000 * 60 * 3);
}
@@ -42,10 +42,18 @@ public class PlayerVoteEvent extends Event {
@Setter
private boolean realVote = true;
@Getter
@Setter
private boolean addTotals = true;
@Getter
@Setter
private String serviceSite = "";
@Getter
@Setter
private long time;
public PlayerVoteEvent(VoteSite voteSite, String voteUsername, String serviceSite, boolean realVote) {
super(true);
this.player = voteUsername;
@@ -63,4 +71,12 @@ public class PlayerVoteEvent extends Event {
return handlers;
}
@Getter
@Setter
private boolean bungee = false;
@Getter
@Setter
private boolean forceBungee = false;
}
@@ -30,18 +30,24 @@ public class PlayerCommandSendListener implements Listener {
return;
}
ArrayList<String> removeCmds = new ArrayList<String>();
ArrayList<String> whiteListed = new ArrayList<String>();
for (String cmd : event.getCommands()) {
if (CommandLoader.getInstance().isVotingPluginCommand(event.getPlayer(), cmd)) {
if (!CommandLoader.getInstance().hasPermission(event.getPlayer(), cmd) && !whiteListed.contains(cmd)) {
removeCmds.add(cmd);
// plugin.debug("removed " + cmd);
} else {
removeCmds.remove(cmd);
whiteListed.add(cmd);
// plugin.debug("has " + cmd);
if (!Main.plugin.getAdvancedTab().containsKey(event.getPlayer().getUniqueId())) {
ArrayList<String> whiteListed = new ArrayList<String>();
for (String cmd : event.getCommands()) {
if (CommandLoader.getInstance().isVotingPluginCommand(event.getPlayer(), cmd)) {
if (!CommandLoader.getInstance().hasPermission(event.getPlayer(), cmd)
&& !whiteListed.contains(cmd)) {
removeCmds.add(cmd);
// plugin.debug("removed " + cmd);
} else {
removeCmds.remove(cmd);
whiteListed.add(cmd);
// plugin.debug("has " + cmd);
}
}
}
Main.plugin.getAdvancedTab().put(event.getPlayer().getUniqueId(), removeCmds);
} else {
removeCmds = Main.plugin.getAdvancedTab().get(event.getPlayer().getUniqueId());
}
event.getCommands().removeAll(removeCmds);
}
@@ -1,13 +1,16 @@
package com.Ben12345rocks.VotingPlugin.Listeners;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import com.Ben12345rocks.AdvancedCore.Listeners.AdvancedCoreLoginEvent;
import com.Ben12345rocks.AdvancedCore.UserManager.UserStorage;
import com.Ben12345rocks.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Objects.User;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
@@ -50,13 +53,30 @@ public class PlayerJoinEvent implements Listener {
user.sendMessage("&cVotingPlugin: Detected yml error, please check console for details");
}
boolean data = user.getData().hasData();
// run remind
user.loginMessage();
if (user.getData().hasData()) {
if (data) {
// give offline vote (if they voted offline)
user.offVote();
}
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerQuit(PlayerQuitEvent event) {
if (Config.getInstance().isDisableAdvancedTab()) {
return;
}
final java.util.UUID uuid = event.getPlayer().getUniqueId();
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
Main.plugin.getAdvancedTab().remove(uuid);
}
});
}
}
@@ -2,12 +2,15 @@ package com.Ben12345rocks.VotingPlugin.Listeners;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import com.Ben12345rocks.AdvancedCore.Util.Misc.ArrayUtils;
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;
@@ -17,6 +20,7 @@ import com.Ben12345rocks.VotingPlugin.Objects.VoteSite;
import com.Ben12345rocks.VotingPlugin.SpecialRewards.SpecialRewards;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
import com.Ben12345rocks.VotingPlugin.VoteParty.VoteParty;
import com.Ben12345rocks.VotingPlugin.bungee.BungeeMethod;
// TODO: Auto-generated Javadoc
/**
@@ -84,7 +88,7 @@ public class PlayerVoteListener implements Listener {
User user = UserManager.getInstance().getVotingPluginUser(playerName);
user.updateName();
if (Config.getInstance().isClearCacheOnVote()) {
if (Config.getInstance().isClearCacheOnVote() || Config.getInstance().isUseBungeecoord()) {
user.clearCache();
}
@@ -99,14 +103,18 @@ 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);
}
}
// update last vote time
user.setTime(voteSite);
if (event.getTime() != 0) {
user.setTime(voteSite, event.getTime());
} else {
user.setTime(voteSite);
}
user.setLastVoteCoolDownCheck(false, voteSite);
// check first vote rewards
@@ -118,8 +126,9 @@ public class PlayerVoteListener implements Listener {
// check if player has voted on all sites in one day
if ((user.isOnline() || voteSite.isGiveOffline()) && Main.plugin.getOptions().isProcessRewards()) {
user.playerVote(voteSite, true, false);
if (((user.isOnline() || voteSite.isGiveOffline()) && Main.plugin.getOptions().isProcessRewards())
|| event.isBungee()) {
user.playerVote(voteSite, true, false, event.isForceBungee());
user.closeInv();
} else {
user.addOfflineVote(voteSite.getKey());
@@ -128,7 +137,7 @@ public class PlayerVoteListener implements Listener {
}
// add to total votes
if (Config.getInstance().isCountFakeVotes() || event.isRealVote()) {
if ((Config.getInstance().isCountFakeVotes() || event.isRealVote()) && event.isAddTotals()) {
if (Config.getInstance().isAddTotals()) {
user.addTotal();
user.addTotalDaily();
@@ -143,6 +152,23 @@ public class PlayerVoteListener implements Listener {
SpecialRewards.getInstance().checkAllSites(user);
SpecialRewards.getInstance().checkCumualativeVotes(user);
SpecialRewards.getInstance().checkMilestone(user);
if (config.isUseBungeecoord()) {
if (BungeeHandler.getInstance().getMethod().equals(BungeeMethod.MYSQL)) {
final String uuid = user.getUUID();
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@Override
public void run() {
if (Bukkit.getOnlinePlayers().size() > 0) {
PluginMessage.getInstance().sendPluginMessage(
PlayerUtils.getInstance().getRandomOnlinePlayer(), "VoteUpdate", uuid);
}
}
}, 40);
}
}
}
plugin.setUpdate(true);
@@ -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);
@@ -12,7 +12,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import org.bukkit.Bukkit;
@@ -137,6 +136,11 @@ public class Main extends AdvancedCorePlugin {
@Getter
private boolean ymlError = false;
private boolean votifierLoaded = true;
@Getter
private LinkedHashMap<java.util.UUID, ArrayList<String>> advancedTab = new LinkedHashMap<java.util.UUID, ArrayList<String>>();
/**
* Check votifier.
*/
@@ -144,8 +148,13 @@ 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");
}
votifierLoaded = false;
}
}
@@ -213,7 +222,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));
@@ -243,8 +252,8 @@ public class Main extends AdvancedCorePlugin {
uuids.removeAll(converted);
plugin.getLogger()
.info("Finished getting data from " + from.toString() + " Converting " + data.size() + " users");
plugin.getLogger().info("Finished getting data from " + from.toString() + " Converting " + data.size()
+ " users, " + uuids.size() + " left to convert");
getOptions().setStorageType(to);
loadUserAPI(getOptions().getStorageType());
@@ -284,6 +293,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.
*
@@ -408,6 +426,18 @@ public class Main extends AdvancedCorePlugin {
}
}, 1000 * 60 * 10, 1000 * 60 * 5);
getTimer().schedule(new TimerTask() {
@Override
public void run() {
if (plugin != null && Config.getInstance().isExtraBackgroundUpdate()) {
basicBungeeUpdate();
} else {
cancel();
}
}
}, 1000, 1000 * 30);
}
}, 40L);
@@ -747,9 +777,19 @@ public class Main extends AdvancedCorePlugin {
@Override
public void onPostLoad() {
if (Config.getInstance().isUseBungeecoord()) {
BungeeHandler.getInstance().load();
if (getOptions().getServer().equalsIgnoreCase("PleaseSet")) {
getLogger()
.warning("Bungeecoord is true and server name is not set, bungeecoord features may not work");
}
}
registerCommands();
registerEvents();
checkVotifier();
registerEvents();
CheckUpdate.getInstance().startUp();
VoteReminding.getInstance().loadRemindChecking();
plugin.signs = new ArrayList<SignHandler>();
@@ -811,7 +851,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)");
@@ -952,7 +992,7 @@ public class Main extends AdvancedCorePlugin {
// disable plugin for older versions below 1.12
if (NMSManager.getInstance().isVersion("1.7", "1.8", "1.9", "1.10", "1.11", "1.12")) {
if (NMSManager.getInstance().isVersion("1.7", "1.8", "1.9", "1.10", "1.11")) {
plugin.getLogger().severe("Detected running " + Bukkit.getVersion()
+ ", this version is not supported on this build, read the plugin page. Disabling...");
if (!Config.getInstance().isOverrideVersionDisable()) {
@@ -978,14 +1018,15 @@ public class Main extends AdvancedCorePlugin {
*/
@Override
public void onUnLoad() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
Signs.getInstance().storeSigns();
}
}, 0);
Signs.getInstance().storeSigns();
HandlerList.unregisterAll(plugin);
if (Config.getInstance().isUseBungeecoord()) {
try {
BungeeHandler.getInstance().close();
} catch (Exception e) {
debug(e);
}
}
plugin = null;
}
@@ -1029,13 +1070,17 @@ public class Main extends AdvancedCorePlugin {
PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new PlayerJoinEvent(this), this);
pm.registerEvents(new VotiferEvent(this), this);
if (votifierLoaded) {
pm.registerEvents(new VotiferEvent(this), this);
}
pm.registerEvents(new PlayerVoteListener(this), this);
pm.registerEvents(new SignChange(this), this);
pm.registerEvents(new BlockBreak(this), this);
pm.registerEvents(new PlayerInteract(this), this);
pm.registerEvents(new VotingPluginUpdateEvent(this), this);
pm.registerEvents(new PlayerCommandSendListener(this), this);
if (!NMSManager.getInstance().isVersion("1.12")) {
pm.registerEvents(new PlayerCommandSendListener(this), this);
}
pm.registerEvents(new CoolDownCheck(this), this);
plugin.debug("Loaded Events");
@@ -1098,7 +1143,8 @@ public class Main extends AdvancedCorePlugin {
if (getMysql() == null) {
plugin.debug("MySQL not loaded yet");
return;
} else if (Config.getInstance().isClearCacheOnUpdate()) {
} else if (Config.getInstance().isClearCacheOnUpdate()
|| Config.getInstance().isUseBungeecoord()) {
getMysql().clearCache();
} else {
getMysql().clearCacheBasic();
@@ -1127,13 +1173,16 @@ public class Main extends AdvancedCorePlugin {
ServerData.getInstance().updateValues();
Signs.getInstance().updateSigns();
for (Player player : Bukkit.getOnlinePlayers()) {
UserManager.getInstance().getVotingPluginUser(player).offVote();
if (!Config.getInstance().isExtraBackgroundUpdate()) {
for (Player player : Bukkit.getOnlinePlayers()) {
User user = UserManager.getInstance().getVotingPluginUser(player);
user.offVote();
}
}
time1 = ((System.currentTimeMillis() - time) / 1000);
plugin.debug("Background task finished in " + time1 + " seconds");
} catch (Exception ex) {
plugin.getLogger().info("Looks like something went wrong.");
plugin.getLogger().info("Looks like something went wrong");
ex.printStackTrace();
}
}
@@ -1144,6 +1193,15 @@ 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);
@@ -1170,8 +1228,8 @@ public class Main extends AdvancedCorePlugin {
}
} catch (Exception e) {
e.printStackTrace();
plugin.getLogger().warning("Exception occoured for '" + entry.getKey().getUUID() + "': "
+ e.getMessage() + ", turn debug on to see full stack traces");
plugin.getLogger()
.warning("Exception occoured for '" + entry.getKey().getUUID() + "': " + e.getMessage());
}
}
}
@@ -2,6 +2,7 @@ package com.Ben12345rocks.VotingPlugin.Objects;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.YearMonth;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Collections;
@@ -21,15 +22,17 @@ import com.Ben12345rocks.AdvancedCore.TimeChecker.TimeChecker;
import com.Ben12345rocks.AdvancedCore.UserManager.UUID;
import com.Ben12345rocks.AdvancedCore.Util.Messages.StringParser;
import com.Ben12345rocks.AdvancedCore.Util.Misc.MiscUtils;
import com.Ben12345rocks.VotingPlugin.BungeeHandler;
import com.Ben12345rocks.VotingPlugin.Main;
import com.Ben12345rocks.VotingPlugin.Config.Config;
import com.Ben12345rocks.VotingPlugin.Config.ConfigVoteSites;
import com.Ben12345rocks.VotingPlugin.Events.PlayerReceivePointsEvent;
import com.Ben12345rocks.VotingPlugin.Events.PlayerVoteCoolDownEndEvent;
import com.Ben12345rocks.VotingPlugin.Events.PlayerVoteEvent;
import com.Ben12345rocks.VotingPlugin.SpecialRewards.SpecialRewards;
import com.Ben12345rocks.VotingPlugin.TopVoter.TopVoter;
import com.Ben12345rocks.VotingPlugin.VoteParty.VoteParty;
import com.Ben12345rocks.VotingPlugin.VoteReminding.VoteReminding;
import com.Ben12345rocks.VotingPlugin.bungee.BungeeMethod;
// TODO: Auto-generated Javadoc
/**
@@ -216,31 +219,36 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
*/
public boolean canVoteSite(VoteSite voteSite) {
String siteName = voteSite.getKey();
long time = getTime(voteSite);
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()) {
double votedelay = voteSite.getVoteDelay();
if (votedelay == 0) {
if (votedelay == 0) {
return false;
}
LocalDateTime nextvote = lastVote.plusHours((long) votedelay)
.plusMinutes((long) voteSite.getVoteDelayMin());
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;
}
@@ -598,12 +606,72 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
.withPlaceHolder("votes", "" + getTotal(TopVoter.Weekly)).setOnline(isOnline()).send(this);
}
public void bungeeVotePluginMessaging(String service, long time) {
if (Config.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 (Config.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 (Config.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.
*
* @return true if user got the first vote reward
*/
public boolean hasGottenFirstVote() {
if (Config.getInstance().isUseBungeecoord()
&& BungeeHandler.getInstance().getMethod().equals(BungeeMethod.PLUGINMESSAGING)) {
return getTotal(TopVoter.AllTime) > 1;
}
return getTotal(TopVoter.AllTime) != 0;
}
@@ -661,6 +729,7 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
Main.plugin.debug("Processing rewards is disabled");
return;
}
Main.plugin.extraDebug("Checking offline vote site votes");
Player player = getPlayer();
if (player != null) {
@@ -679,7 +748,7 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
for (int i = 0; i < offlineVotes.size(); i++) {
if (plugin.hasVoteSite(offlineVotes.get(i))) {
plugin.debug("Giving offline site reward: " + offlineVotes.get(i));
playerVote(plugin.getVoteSite(offlineVotes.get(i)), false, true);
playerVote(plugin.getVoteSite(offlineVotes.get(i)), false, true, false);
} else {
plugin.debug("Site doesn't exist: " + offlineVotes.get(i));
}
@@ -689,22 +758,12 @@ public class User extends com.Ben12345rocks.AdvancedCore.UserManager.User {
}
}
/**
* Player vote.
*
* @param voteSite
* the vote site
* @param online
* the online
* @param broadcast
* the broadcast
*/
public void playerVote(VoteSite voteSite, boolean online, boolean broadcast) {
public void playerVote(VoteSite voteSite, boolean online, boolean broadcast, boolean bungee) {
if (Config.getInstance().getFormatBroadcastWhenOnline() && Config.getInstance().isBroadcastVotesEnabled()
&& broadcast) {
voteSite.broadcastVote(this);
}
voteSite.giveRewards(this, online);
voteSite.giveRewards(this, online, bungee);
}
/**
@@ -891,8 +950,9 @@ 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) {
LocalDateTime time = TimeChecker.getInstance().getTime();
int days = YearMonth.of(time.getYear(), time.getMonth()).lengthOfMonth();
if (value >= days * plugin.getVoteSites().size()) {
value = days * plugin.getVoteSites().size();
}
}
@@ -14,11 +14,15 @@ 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;
import com.Ben12345rocks.VotingPlugin.Data.ServerData;
import com.Ben12345rocks.VotingPlugin.UserManager.UserManager;
import com.Ben12345rocks.VotingPlugin.bungee.BungeeMethod;
import lombok.Getter;
import lombok.Setter;
@@ -37,10 +41,21 @@ public class VoteSite {
/** The plugin. */
static Main plugin = Main.plugin;
@Getter
@Setter
private String voteURL;
public String getVoteURL(boolean json) {
if (!Config.getInstance().isFormatCommandsVoteForceLinks() || !json) {
return voteURL;
} else {
return "[Text=\"" + voteURL + "\",url=\"" + voteURL + "\"]";
}
}
public String getVoteURL() {
return getVoteURL(true);
}
@Getter
@Setter
private String serviceSite;
@@ -57,6 +72,14 @@ public class VoteSite {
@Setter
private double voteDelay;
@Getter
@Setter
private double voteDelayMin;
@Getter
@Setter
private double timeOffSet;
@Getter
@Setter
private boolean enabled;
@@ -101,31 +124,58 @@ public class VoteSite {
init();
}
public void broadcastVote(User user) {
broadcastVote(user, true);
}
/**
* Broadcast vote.
*
* @param user
* the user
* @param checkBungee
* check bungee broadcast
*/
public void broadcastVote(User user) {
public void broadcastVote(User user, boolean checkBungee) {
if (!user.isVanished()) {
String playerName = user.getPlayerName();
String bc = StringParser.getInstance().colorize(config.getFormatBroadCastMsg());
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("player", playerName);
placeholders.put("nickname",
(user.getPlayer() != null) ? user.getPlayer().getDisplayName() : user.getPlayerName());
placeholders.put("sitename", getDisplayName());
placeholders.put("servicesite", getServiceSite());
bc = StringParser.getInstance().replacePlaceHolder(bc, placeholders);
ArrayList<Player> players = new ArrayList<Player>();
for (Player p : Bukkit.getOnlinePlayers()) {
if (!UserManager.getInstance().getVotingPluginUser(p).getDisableBroadcast()) {
players.add(p);
}
}
if (checkBungee && Config.getInstance().isBungeeBroadcast() && Config.getInstance().isUseBungeecoord()) {
if (BungeeHandler.getInstance().getMethod().equals(BungeeMethod.SOCKETS)) {
BungeeHandler.getInstance().sendData("Broadcast", getServiceSite(), user.getPlayerName());
} else if (BungeeHandler.getInstance().getMethod().equals(BungeeMethod.MYSQL)
|| BungeeHandler.getInstance().getMethod().equals(BungeeMethod.PLUGINMESSAGING)) {
String uuid = user.getUUID();
String service = getServiceSite();
MiscUtils.getInstance().broadcast(bc, players);
if (Bukkit.getOnlinePlayers().size() > 0) {
PluginMessage.getInstance().sendPluginMessage(PlayerUtils.getInstance().getRandomOnlinePlayer(),
"VoteBroadcast", uuid, service);
}
}
} else {
String playerName = user.getPlayerName();
if (config.getVotingBroadcastBlacklist().contains(playerName)) {
plugin.getLogger().info("Not broadcasting for " + playerName + ", in blacklist");
return;
}
String bc = StringParser.getInstance().colorize(config.getFormatBroadCastMsg());
HashMap<String, String> placeholders = new HashMap<String, String>();
placeholders.put("player", playerName);
placeholders.put("nickname",
(user.getPlayer() != null) ? user.getPlayer().getDisplayName() : user.getPlayerName());
placeholders.put("sitename", getDisplayName());
placeholders.put("servicesite", getServiceSite());
bc = StringParser.getInstance().replacePlaceHolder(bc, placeholders);
bc = StringParser.getInstance().replacePlaceHolders(user.getOfflinePlayer(), bc);
ArrayList<Player> players = new ArrayList<Player>();
for (Player p : Bukkit.getOnlinePlayers()) {
if (!UserManager.getInstance().getVotingPluginUser(p).getDisableBroadcast()) {
players.add(p);
}
}
MiscUtils.getInstance().broadcast(bc, players);
}
} else {
plugin.debug(user.getPlayerName() + " is vanished, not broadcasting");
}
@@ -148,22 +198,16 @@ public class VoteSite {
return configVoteSites.getData(key);
}
/**
* Give rewards.
*
* @param user
* the user
* @param online
* the online
*/
public void giveRewards(User user, boolean online) {
public void giveRewards(User user, boolean online, boolean bungee) {
new RewardBuilder(configVoteSites.getData(), configVoteSites.getRewardsPath(key)).setOnline(online)
.withPlaceHolder("ServiceSite", getServiceSite()).withPlaceHolder("SiteName", getDisplayName())
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL()).send(user);
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL())
.setServer(bungee).send(user);
new RewardBuilder(configVoteSites.getData(), configVoteSites.getEverySiteRewardPath()).setOnline(online)
.withPlaceHolder("ServiceSite", getServiceSite()).withPlaceHolder("SiteName", getDisplayName())
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL()).send(user);
.withPlaceHolder("VoteDelay", "" + getVoteDelay()).withPlaceHolder("VoteURL", getVoteURL())
.setServer(bungee).send(user);
}
public boolean hasRewards() {
@@ -177,6 +221,7 @@ public class VoteSite {
setVoteURL(configVoteSites.getVoteURL(key));
setServiceSite(configVoteSites.getServiceSite(key));
setVoteDelay(configVoteSites.getVoteDelay(key));
setVoteDelayMin(configVoteSites.getVoteDelayMin(key));
setEnabled(configVoteSites.getVoteSiteEnabled(key));
setPriority(configVoteSites.getPriority(key));
displayName = configVoteSites.getDisplayName(key);
@@ -187,6 +232,7 @@ public class VoteSite {
voteDelayDaily = configVoteSites.getVoteSiteResetVoteDelayDaily(key);
giveOffline = configVoteSites.getVoteSiteGiveOffline(key);
waitUntilVoteDelay = configVoteSites.getWaitUntilVoteDelay(key);
timeOffSet = configVoteSites.getTimeOffSet(key);
}
public boolean isVaidServiceSite() {
@@ -11,6 +11,7 @@ import org.bukkit.block.Sign;
import org.bukkit.block.Skull;
import org.bukkit.block.data.Directional;
import com.Ben12345rocks.AdvancedCore.NMSManager.NMSManager;
import com.Ben12345rocks.AdvancedCore.Util.Misc.ArrayUtils;
import com.Ben12345rocks.AdvancedCore.Util.Misc.MiscUtils;
import com.Ben12345rocks.VotingPlugin.Main;
@@ -259,19 +260,21 @@ public class SignHandler {
}
public void updateSkulls(Location loc1, Location loc2) {
BlockState state = getLocation().getBlock().getState();
if (state instanceof Sign && state.getBlockData() instanceof Directional) {
Directional s = (Directional) state.getBlockData();
Block b = location.getBlock().getRelative(s.getFacing());
Block above = b.getRelative(BlockFace.UP);
if (checkSkull(above)) {
return;
if (!NMSManager.getInstance().isVersion("1.12")) {
BlockState state = getLocation().getBlock().getState();
if (state instanceof Sign && state.getBlockData() instanceof Directional) {
Directional s = (Directional) state.getBlockData();
Block b = location.getBlock().getRelative(s.getFacing());
Block above = b.getRelative(BlockFace.UP);
if (checkSkull(above)) {
return;
}
}
}
for (Block block : MiscUtils.getInstance().getRegionBlocks(location.getWorld(), loc1, loc2)) {
checkSkull(block);
for (Block block : MiscUtils.getInstance().getRegionBlocks(location.getWorld(), loc1, loc2)) {
checkSkull(block);
}
}
}
}
@@ -90,7 +90,8 @@ public class Signs {
int time = 0;
for (int i = plugin.getSigns().size() - 1; i >= 0; i--) {
if (!plugin.getSigns().get(i).isValid()) {
plugin.debug("Sign " + i + " invalid, removing from data.");
plugin.debug("Sign " + i + " invalid, removing from data: "
+ plugin.getSigns().get(i).getLocation().toString());
plugin.getSigns().get(i).removeSign();
plugin.getSigns().remove(i);
} else {
@@ -125,106 +125,138 @@ public class TopVoterHandler implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onDayChange(DayChangeEvent event) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (!user.voteStreakUpdatedToday(LocalDateTime.now().minusDays(1))) {
if (user.getDayVoteStreak() != 0) {
user.setDayVoteStreak(0);
synchronized (Main.plugin) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (!user.voteStreakUpdatedToday(LocalDateTime.now().minusDays(1))) {
if (user.getDayVoteStreak() != 0) {
user.setDayVoteStreak(0);
}
}
if (user.getHighestDailyTotal() < user.getTotal(TopVoter.Daily)) {
user.setHighestDailyTotal(user.getTotal(TopVoter.Daily));
}
for (String shopIdent : Config.getInstance().getIdentifiers()) {
if (Config.getInstance().getVoteShopResetDaily(shopIdent)) {
user.setVoteShopIdentifierLimit(shopIdent, 0);
}
}
}
if (user.getHighestDailyTotal() < user.getTotal(TopVoter.Daily)) {
user.setHighestDailyTotal(user.getTotal(TopVoter.Daily));
if (Config.getInstance().getStoreTopVotersDaily()) {
plugin.getLogger().info("Saving TopVoters Daily");
storeTopVoters(TopVoter.Daily);
}
}
if (Config.getInstance().getStoreTopVotersDaily()) {
plugin.getLogger().info("Saving TopVoters Daily");
storeTopVoters(TopVoter.Daily);
}
if (Config.getInstance().isEnableDailyRewards()) {
HashMap<Integer, String> places = handlePlaces(Config.getInstance().getDailyPossibleRewardPlaces());
int i = 0;
int lastTotal = -1;
for (User user : plugin.getTopVoter(TopVoter.Daily).keySet()) {
if (!Config.getInstance().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
if (Config.getInstance().getTopVoterAwardsTies()) {
if (user.getTotal(TopVoter.Daily) != lastTotal) {
i++;
try {
if (Config.getInstance().isEnableDailyRewards()) {
HashMap<Integer, String> places = handlePlaces(Config.getInstance().getDailyPossibleRewardPlaces());
int i = 0;
int lastTotal = -1;
@SuppressWarnings("unchecked")
LinkedHashMap<User, Integer> clone = (LinkedHashMap<User, Integer>) plugin
.getTopVoter(TopVoter.Daily).clone();
for (User user : clone.keySet()) {
if (!Config.getInstance().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
if (Config.getInstance().getTopVoterAwardsTies()) {
if (user.getTotal(TopVoter.Daily) != lastTotal) {
i++;
}
} else {
i++;
}
if (places.containsKey(i)) {
user.giveDailyTopVoterAward(i, places.get(i));
}
}
} else {
i++;
}
if (places.containsKey(i)) {
user.giveDailyTopVoterAward(i, places.get(i));
lastTotal = user.getTotal(TopVoter.Daily);
}
}
lastTotal = user.getTotal(TopVoter.Daily);
} catch (Exception e) {
e.printStackTrace();
}
}
resetTotals(TopVoter.Daily);
resetTotals(TopVoter.Daily);
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onMonthChange(MonthChangeEvent event) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (user.getTotal(TopVoter.Monthly) == 0 && user.getMonthVoteStreak() != 0) {
user.setMonthVoteStreak(0);
} else {
if (!Config.getInstance().isVoteStreakRequirementUsePercentage() || user.hasPercentageTotal(
TopVoter.Monthly, Config.getInstance().getVoteStreakRequirementMonth(),
LocalDateTime.now().minusDays(1))) {
user.addMonthVoteStreak();
SpecialRewards.getInstance().checkVoteStreak(user, "Month");
}
}
user.setLastMonthTotal(user.getTotal(TopVoter.Monthly));
if (user.getHighestMonthlyTotal() < user.getTotal(TopVoter.Monthly)) {
user.setHighestMonthlyTotal(user.getTotal(TopVoter.Monthly));
}
}
if (Config.getInstance().getStoreTopVotersMonthly()) {
plugin.getLogger().info("Saving TopVoters Monthly");
storeTopVoters(TopVoter.Monthly);
}
if (Config.getInstance().isEnableMonthlyAwards()) {
HashMap<Integer, String> places = handlePlaces(Config.getInstance().getMonthlyPossibleRewardPlaces());
int i = 0;
int lastTotal = -1;
for (User user : plugin.getTopVoter(TopVoter.Monthly).keySet()) {
if (!Config.getInstance().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
if (Config.getInstance().getTopVoterAwardsTies()) {
if (user.getTotal(TopVoter.Monthly) != lastTotal) {
i++;
}
} else {
i++;
}
if (places.containsKey(i)) {
user.giveMonthlyTopVoterAward(i, places.get(i));
}
}
lastTotal = user.getTotal(TopVoter.Monthly);
}
}
resetTotals(TopVoter.Monthly);
if (Config.getInstance().getResetMilestonesMonthly()) {
synchronized (Main.plugin) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
user.setMilestoneCount(0);
user.setHasGottenMilestone(new HashMap<String, Boolean>());
if (user.getTotal(TopVoter.Monthly) == 0 && user.getMonthVoteStreak() != 0) {
user.setMonthVoteStreak(0);
} else {
if (!Config.getInstance().isVoteStreakRequirementUsePercentage() || user.hasPercentageTotal(
TopVoter.Monthly, Config.getInstance().getVoteStreakRequirementMonth(),
LocalDateTime.now().minusDays(1))) {
user.addMonthVoteStreak();
SpecialRewards.getInstance().checkVoteStreak(user, "Month");
}
}
for (String shopIdent : Config.getInstance().getIdentifiers()) {
if (Config.getInstance().getVoteShopResetMonthly(shopIdent)) {
user.setVoteShopIdentifierLimit(shopIdent, 0);
}
}
user.setLastMonthTotal(user.getTotal(TopVoter.Monthly));
if (user.getHighestMonthlyTotal() < user.getTotal(TopVoter.Monthly)) {
user.setHighestMonthlyTotal(user.getTotal(TopVoter.Monthly));
}
}
if (Config.getInstance().getStoreTopVotersMonthly()) {
plugin.getLogger().info("Saving TopVoters Monthly");
storeTopVoters(TopVoter.Monthly);
}
try {
if (Config.getInstance().isEnableMonthlyAwards()) {
HashMap<Integer, String> places = handlePlaces(
Config.getInstance().getMonthlyPossibleRewardPlaces());
int i = 0;
int lastTotal = -1;
@SuppressWarnings("unchecked")
LinkedHashMap<User, Integer> clone = (LinkedHashMap<User, Integer>) plugin
.getTopVoter(TopVoter.Monthly).clone();
for (User user : clone.keySet()) {
if (!Config.getInstance().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
if (Config.getInstance().getTopVoterAwardsTies()) {
if (user.getTotal(TopVoter.Monthly) != lastTotal) {
i++;
}
} else {
i++;
}
if (places.containsKey(i)) {
user.giveMonthlyTopVoterAward(i, places.get(i));
}
}
lastTotal = user.getTotal(TopVoter.Monthly);
}
}
} catch (Exception e) {
e.printStackTrace();
}
resetTotals(TopVoter.Monthly);
if (Config.getInstance().getResetMilestonesMonthly()) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
user.setMilestoneCount(0);
user.setHasGottenMilestone(new HashMap<String, Boolean>());
}
}
}
}
@@ -236,50 +268,65 @@ public class TopVoterHandler implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onWeekChange(WeekChangeEvent event) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (user.getTotal(TopVoter.Weekly) == 0 && user.getWeekVoteStreak() != 0) {
user.setWeekVoteStreak(0);
} else {
if (!Config.getInstance().isVoteStreakRequirementUsePercentage() || user.hasPercentageTotal(
TopVoter.Weekly, Config.getInstance().getVoteStreakRequirementWeek(), null)) {
user.addWeekVoteStreak();
SpecialRewards.getInstance().checkVoteStreak(user, "Week");
synchronized (Main.plugin) {
for (String uuid : UserManager.getInstance().getAllUUIDs()) {
User user = UserManager.getInstance().getVotingPluginUser(new UUID(uuid));
if (user.getTotal(TopVoter.Weekly) == 0 && user.getWeekVoteStreak() != 0) {
user.setWeekVoteStreak(0);
} else {
if (!Config.getInstance().isVoteStreakRequirementUsePercentage() || user.hasPercentageTotal(
TopVoter.Weekly, Config.getInstance().getVoteStreakRequirementWeek(), null)) {
user.addWeekVoteStreak();
SpecialRewards.getInstance().checkVoteStreak(user, "Week");
}
}
for (String shopIdent : Config.getInstance().getIdentifiers()) {
if (Config.getInstance().getVoteShopResetWeekly(shopIdent)) {
user.setVoteShopIdentifierLimit(shopIdent, 0);
}
}
if (user.getHighestWeeklyTotal() < user.getTotal(TopVoter.Weekly)) {
user.setHighestWeeklyTotal(user.getTotal(TopVoter.Weekly));
}
}
if (user.getHighestWeeklyTotal() < user.getTotal(TopVoter.Weekly)) {
user.setHighestWeeklyTotal(user.getTotal(TopVoter.Weekly));
if (Config.getInstance().getStoreTopVotersWeekly()) {
plugin.getLogger().info("Saving TopVoters Weekly");
storeTopVoters(TopVoter.Weekly);
}
}
if (Config.getInstance().getStoreTopVotersWeekly()) {
plugin.getLogger().info("Saving TopVoters Weekly");
storeTopVoters(TopVoter.Weekly);
}
if (Config.getInstance().isEnableWeeklyAwards()) {
HashMap<Integer, String> places = handlePlaces(Config.getInstance().getWeeklyPossibleRewardPlaces());
int i = 0;
int lastTotal = -1;
for (User user : plugin.getTopVoter(TopVoter.Weekly).keySet()) {
if (!Config.getInstance().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
if (Config.getInstance().getTopVoterAwardsTies()) {
if (user.getTotal(TopVoter.Weekly) != lastTotal) {
i++;
try {
if (Config.getInstance().isEnableWeeklyAwards()) {
HashMap<Integer, String> places = handlePlaces(
Config.getInstance().getWeeklyPossibleRewardPlaces());
int i = 0;
int lastTotal = -1;
@SuppressWarnings("unchecked")
LinkedHashMap<User, Integer> clone = (LinkedHashMap<User, Integer>) plugin
.getTopVoter(TopVoter.Weekly).clone();
for (User user : clone.keySet()) {
if (!Config.getInstance().getTopVoterIgnorePermission() || !user.isTopVoterIgnore()) {
if (Config.getInstance().getTopVoterAwardsTies()) {
if (user.getTotal(TopVoter.Weekly) != lastTotal) {
i++;
}
} else {
i++;
}
if (places.containsKey(i)) {
user.giveWeeklyTopVoterAward(i, places.get(i));
}
}
} else {
i++;
}
if (places.containsKey(i)) {
user.giveWeeklyTopVoterAward(i, places.get(i));
lastTotal = user.getTotal(TopVoter.Weekly);
}
}
lastTotal = user.getTotal(TopVoter.Weekly);
} catch (Exception e) {
e.printStackTrace();
}
resetTotals(TopVoter.Weekly);
}
resetTotals(TopVoter.Weekly);
}
public void register() {
@@ -602,6 +649,8 @@ public class TopVoterHandler implements Listener {
}
}
plugin.debug("Number of users to check top voter: " + users.size());
for (TopVoter top : TopVoter.values()) {
plugin.getTopVoter(top).clear();
if (Config.getInstance().getLoadTopVoter(top)) {
@@ -1,6 +1,8 @@
package com.Ben12345rocks.VotingPlugin.Util.PlaceHolders;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Map.Entry;
import org.bukkit.OfflinePlayer;
@@ -63,7 +65,9 @@ public class PlaceHolders {
}
public String getPlaceHolder(OfflinePlayer p, String identifier) {
identifier = StringParser.getInstance().replaceJavascript(p, identifier);
if (Config.getInstance().isUseJavascriptPlaceholders()) {
identifier = StringParser.getInstance().replaceJavascript(p, identifier);
}
for (PlaceHolder<User> placeholder : nonPlayerPlaceholders) {
if (placeholder.matches(identifier)) {
@@ -83,7 +87,9 @@ public class PlaceHolders {
}
public String getPlaceHolder(Player p, String identifier) {
identifier = StringParser.getInstance().replaceJavascript(p, identifier);
if (Config.getInstance().isUseJavascriptPlaceholders()) {
identifier = StringParser.getInstance().replaceJavascript(p, identifier);
}
return getPlaceHolder((OfflinePlayer) p, identifier);
}
@@ -236,6 +242,15 @@ public class PlaceHolders {
}
}.withDescription("User points"));
placeholders.add(new PlaceHolder<User>("Points_Format") {
@Override
public String placeholderRequest(OfflinePlayer p, User user, String identifier) {
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.US);
return numberFormat.format(user.getPoints());
}
}.withDescription("User points"));
placeholders.add(new PlaceHolder<User>("CanVote") {
@Override
@@ -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() {
@@ -0,0 +1,554 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.Column;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.DataType;
import com.Ben12345rocks.AdvancedCore.Util.Encryption.EncryptionHandler;
import com.Ben12345rocks.AdvancedCore.Util.Misc.ArrayUtils;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.ClientHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.SocketHandler;
import com.Ben12345rocks.AdvancedCore.Util.Sockets.SocketReceiver;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.vexsoftware.votifier.bungee.events.VotifierEvent;
import com.vexsoftware.votifier.model.Vote;
import lombok.Getter;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.PluginMessageEvent;
import net.md_5.bungee.api.event.PostLoginEvent;
import net.md_5.bungee.api.event.ServerConnectedEvent;
import net.md_5.bungee.api.plugin.Plugin;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.event.EventHandler;
public class Bungee extends Plugin implements net.md_5.bungee.api.plugin.Listener {
@Getter
private Config config;
@Getter
private BungeeMySQL mysql;
private SocketHandler socketHandler;
private HashMap<String, ClientHandler> clientHandles;
private EncryptionHandler encryptionHandler;
private BungeeMethod method;
private HashMap<String, ArrayList<OfflineBungeeVote>> cachedVotes = new HashMap<String, ArrayList<OfflineBungeeVote>>();
private HashMap<String, ArrayList<OfflineBungeeVote>> cachedOnlineVotes = new HashMap<String, ArrayList<OfflineBungeeVote>>();
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());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void checkOnlineVotes(ProxiedPlayer player, String uuid) {
if (player != null && player.isConnected() && cachedOnlineVotes.containsKey(uuid)) {
ArrayList<OfflineBungeeVote> c = cachedOnlineVotes.get(uuid);
if (!c.isEmpty()) {
for (OfflineBungeeVote cache : c) {
sendPluginMessageServer(getProxy().getPlayer(UUID.fromString(uuid)).getServer().getInfo().getName(),
"VoteOnline", cache.getPlayerName(), cache.getUuid(), cache.getService(),
"" + cache.getTime(), Boolean.FALSE.toString());
}
cachedOnlineVotes.put(uuid, new ArrayList<OfflineBungeeVote>());
}
}
}
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());
}
cachedVotes.put(server, new ArrayList<OfflineBungeeVote>());
}
}
}
}
@EventHandler
public void onServerConnected(ServerConnectedEvent event) {
final String server = event.getServer().getInfo().getName();
getProxy().getScheduler().schedule(this, new Runnable() {
@Override
public void run() {
checkCachedVotes(server);
}
}, 2, TimeUnit.SECONDS);
}
@EventHandler
public void onPlayerJoin(PostLoginEvent event) {
final String uuid = event.getPlayer().getUniqueId().toString();
getProxy().getScheduler().schedule(this, new Runnable() {
@Override
public void run() {
checkOnlineVotes(event.getPlayer(), uuid);
}
}, 2, TimeUnit.SECONDS);
}
@Override
public void onDisable() {
if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedVotes.entrySet()) {
String server = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVote(server, num, voteData);
num++;
}
}
for (Entry<String, ArrayList<OfflineBungeeVote>> entry : cachedOnlineVotes.entrySet()) {
String name = entry.getKey();
int num = 0;
for (OfflineBungeeVote voteData : entry.getValue()) {
voteCacheFile.addVoteOnline(name, num, voteData);
num++;
}
}
}
}
@Override
public void onEnable() {
getProxy().getPluginManager().registerListener(this, this);
config = new Config(this);
config.load();
mysql = new BungeeMySQL("VotingPlugin_Users", config.getData());
// column types
getMysql().alterColumnType("TopVoterIgnore", "VARCHAR(5)");
getMysql().alterColumnType("CheckWorld", "VARCHAR(5)");
getMysql().alterColumnType("Reminded", "VARCHAR(5)");
getMysql().alterColumnType("DisableBroadcast", "VARCHAR(5)");
getMysql().alterColumnType("LastOnline", "VARCHAR(20)");
getMysql().alterColumnType("PlayerName", "VARCHAR(30)");
getMysql().alterColumnType("DailyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("WeeklyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("DayVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("BestDayVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("WeekVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("BestWeekVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("VotePartyVotes", "INT DEFAULT '0'");
getMysql().alterColumnType("MonthVoteStreak", "INT DEFAULT '0'");
getMysql().alterColumnType("Points", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestDailyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MileStoneTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("AllTimeTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestMonthlyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("MilestoneCount", "INT DEFAULT '0'");
getMysql().alterColumnType("MonthTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("HighestWeeklyTotal", "INT DEFAULT '0'");
getMysql().alterColumnType("LastMonthTotal", "INT DEFAULT '0'");
getProxy().getPluginManager().registerCommand(this, new VotingPluginBungeeCommand(this));
method = BungeeMethod.getByName(config.getBungeeMethod());
if (method.equals(BungeeMethod.MYSQL)) {
this.getProxy().registerChannel("VotingPlugin:VotingPlugin".toLowerCase());
} else if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
voteCacheFile = new VoteCache(this);
voteCacheFile.load();
try {
for (String server : voteCacheFile.getServers()) {
ArrayList<OfflineBungeeVote> vote = new ArrayList<OfflineBungeeVote>();
for (String num : voteCacheFile.getServerVotes(server)) {
Configuration data = voteCacheFile.getServerVotes(server, num);
vote.add(new OfflineBungeeVote(data.getString("Name"), data.getString("UUID"),
data.getString("Service"), data.getLong("Time")));
}
cachedVotes.put(server, vote);
}
} catch (Exception e) {
e.printStackTrace();
}
try {
for (String player : voteCacheFile.getPlayers()) {
ArrayList<OfflineBungeeVote> vote = new ArrayList<OfflineBungeeVote>();
for (String num : voteCacheFile.getServerVotes(player)) {
Configuration data = voteCacheFile.getOnlineVotes(player, num);
vote.add(new OfflineBungeeVote(data.getString("Name"), data.getString("UUID"),
data.getString("Service"), data.getLong("Time")));
}
cachedOnlineVotes.put(player, vote);
}
} catch (Exception e) {
e.printStackTrace();
}
voteCacheFile.clearData();
getProxy().getScheduler().runAsync(this, new Runnable() {
@Override
public void run() {
for (String server : cachedVotes.keySet()) {
checkCachedVotes(server);
}
for (String player : cachedOnlineVotes.keySet()) {
checkOnlineVotes(getProxy().getPlayer(UUID.fromString(player)), player);
}
}
});
this.getProxy().registerChannel("VotingPlugin:VotingPlugin".toLowerCase());
} else if (method.equals(BungeeMethod.SOCKETS)) {
encryptionHandler = new EncryptionHandler(new File(getDataFolder(), "secretkey.key"));
socketHandler = new SocketHandler(getDescription().getVersion(), config.getBungeeHost(),
config.getBungeePort(), encryptionHandler, config.getDebug());
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 1) {
if (data.length > 2) {
if (data[0].equalsIgnoreCase("Broadcast")) {
sendServerMessage(data);
}
}
}
}
});
socketHandler.add(new SocketReceiver() {
@Override
public void onReceive(String[] data) {
if (data.length > 1) {
if (data[0].equalsIgnoreCase("StatusOkay")) {
String server = data[1];
getLogger().info("Voting communicaton okay with " + server);
}
}
}
});
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, config.getDebug()));
}
}
}
getLogger().info("VotingPlugin loaded, using method: " + method.toString());
}
public void reload() {
config.load();
}
@EventHandler
public void onVote(VotifierEvent event) {
Vote vote = event.getVote();
getLogger().info("Vote received " + vote.getUsername() + " from service site " + vote.getServiceName());
vote(vote.getUsername(), vote.getServiceName());
}
public void debug(String msg) {
if (config.getDebug()) {
getLogger().info("Debug: " + msg);
}
}
public void vote(String player, String service) {
if (method.equals(BungeeMethod.SOCKETS)) {
sendSocketVote(player, service);
} else if (method.equals(BungeeMethod.PLUGINMESSAGING)) {
String uuid = getUUID(player);
if (uuid.isEmpty()) {
UUID u = null;
try {
u = fetchUUID(player);
} catch (Exception e) {
e.printStackTrace();
}
if (u == null) {
debug("Failed to get uuid for " + player);
return;
}
uuid = u.toString();
}
player = getProperName(uuid, player);
if (!mysql.getUuids().contains(uuid)) {
mysql.update(uuid, "PlayerName", player, DataType.STRING);
}
// add totals here
ArrayList<Column> data = mysql.getExactQuery(new Column("uuid", uuid, DataType.STRING));
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")) {
Object value = d.getValue();
int num = 0;
if (value instanceof Integer) {
try {
num = (int) value;
} catch (ClassCastException | NullPointerException ex) {
}
} else if (value instanceof String) {
try {
num = Integer.parseInt((String) value);
} catch (Exception e) {
}
}
mysql.update(uuid, d.getName(), num + 1, DataType.STRING);
debug("Setting " + d.getName() + " to " + (num + 1));
}
}
long time = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
if (config.getSendVotesToAllServers()) {
for (String s : getProxy().getServers().keySet()) {
if (!config.getBlockedServers().contains(s)) {
ServerInfo info = getProxy().getServerInfo(s);
if (info.getPlayers().isEmpty()) {
// cache
if (!cachedVotes.containsKey(s)) {
cachedVotes.put(s, new ArrayList<OfflineBungeeVote>());
}
ArrayList<OfflineBungeeVote> list = cachedVotes.get(s);
list.add(new OfflineBungeeVote(player, uuid, service, time));
cachedVotes.put(s, list);
debug("Caching vote for " + player + " on " + service);
} else {
// send
sendPluginMessageServer(s, "Vote", player, uuid, service, "" + time,
Boolean.TRUE.toString());
}
}
}
} else {
ProxiedPlayer p = getProxy().getPlayer(UUID.fromString(uuid));
if (p.isConnected()) {
sendPluginMessageServer(p.getServer().getInfo().getName(), "VoteOnline", player, uuid, service,
"" + time, Boolean.TRUE.toString());
} else {
if (!cachedOnlineVotes.containsKey(uuid)) {
cachedOnlineVotes.put(uuid, new ArrayList<OfflineBungeeVote>());
}
ArrayList<OfflineBungeeVote> list = cachedVotes.get(uuid);
list.add(new OfflineBungeeVote(player, uuid, service, time));
cachedOnlineVotes.put(uuid, list);
debug("Caching online vote for " + player + " on " + service);
}
}
}
}
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");
}
}
@@ -0,0 +1,14 @@
package com.Ben12345rocks.VotingPlugin.bungee;
public enum BungeeMethod {
SOCKETS, PLUGINMESSAGING, MYSQL;
public static BungeeMethod getByName(String str) {
for (BungeeMethod method : values()) {
if (method.toString().equalsIgnoreCase(str)) {
return method;
}
}
return SOCKETS;
}
}
@@ -0,0 +1,467 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.Ben12345rocks.AdvancedCore.UserStorage.mysql.api.queries.Query;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.Column;
import com.Ben12345rocks.AdvancedCore.UserStorage.sql.DataType;
import net.md_5.bungee.config.Configuration;
public class BungeeMySQL {
private com.Ben12345rocks.AdvancedCore.UserStorage.mysql.api.MySQL mysql;
private List<String> columns = Collections.synchronizedList(new ArrayList<String>());
// private HashMap<String, ArrayList<Column>> table;
// ConcurrentMap<String, ArrayList<Column>> table = new
// ConcurrentHashMap<String, ArrayList<Column>>();
private String name;
private Set<String> uuids = Collections.synchronizedSet(new HashSet<String>());
private Object object2 = new Object();
private Object object3 = new Object();
private Object object4 = new Object();
private List<String> intColumns = new ArrayList<String>();
public BungeeMySQL(String tableName, Configuration section) {
String tablePrefix = section.getString("Prefix");
String hostName = section.getString("Host");
int port = section.getInt("Port");
String user = section.getString("Username");
String pass = section.getString("Password");
String database = section.getString("Database");
long lifeTime = section.getLong("MaxLifeTime", -1);
int maxThreads = section.getInt("MaxConnections", 1);
String str = section.getString("Line", "");
if (maxThreads < 1) {
maxThreads = 1;
}
boolean useSSL = section.getBoolean("UseSSL", false);
if (!section.getString("Name", "").isEmpty()) {
tableName = section.getString("Name", "");
}
name = tableName;
if (tablePrefix != null) {
name = tablePrefix + tableName;
}
mysql = new com.Ben12345rocks.AdvancedCore.UserStorage.mysql.api.MySQL(maxThreads);
if (!mysql.connect(hostName, "" + port, user, pass, database, useSSL, lifeTime, str)) {
}
try {
Query q = new Query(mysql, "USE " + database + ";");
q.executeUpdateAsync();
} catch (SQLException e) {
e.printStackTrace();
}
String sql = "CREATE TABLE IF NOT EXISTS " + getName() + " (";
sql += "uuid VARCHAR(37),";
sql += "PRIMARY KEY ( uuid )";
sql += ");";
Query query;
try {
query = new Query(mysql, sql);
query.executeUpdateAsync();
} catch (SQLException e) {
e.printStackTrace();
}
loadData();
// tempoary to improve performance from old tables
// addToQue("ALTER TABLE " + getName() + " MODIFY uuid VARCHAR(37);");
alterColumnType("uuid", "VARCHAR(37)");
}
public void addColumn(String column, DataType dataType) {
synchronized (object3) {
String sql = "ALTER TABLE " + getName() + " ADD COLUMN " + column + " text" + ";";
try {
Query query = new Query(mysql, sql);
query.executeUpdate();
getColumns().add(column);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void alterColumnType(String column, String newType) {
checkColumn(column, DataType.STRING);
if (newType.contains("INT")) {
try {
new Query(mysql, "UPDATE " + getName() + " SET " + column + " = '0' where trim(coalesce(" + column
+ ", '')) = '';").executeUpdateAsync();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
;
if (!intColumns.contains(column)) {
intColumns.add(column);
}
}
try {
new Query(mysql, "ALTER TABLE " + getName() + " MODIFY " + column + " " + newType + ";")
.executeUpdateAsync();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getUUID(String playerName) {
String query = "SELECT uuid FROM " + getName() + " WHERE " + "PlayerName" + "='" + playerName + "';";
try {
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();
*/
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)) {
if (!getColumnsQueury().contains(column)) {
addColumn(column, dataType);
}
}
}
}
public void clearCache() {
clearCacheBasic();
}
public void clearCacheBasic() {
columns.clear();
columns.addAll(getColumnsQueury());
uuids.clear();
uuids.addAll(getUuidsQuery());
}
public void close() {
mysql.disconnect();
}
public boolean containsKeyQuery(String index) {
String sqlStr = "SELECT uuid FROM " + getName() + ";";
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr);
rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql);
* ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
if (rs.getString("uuid").equals(index)) {
sql.close();
conn.close();
return true;
}
}
sql.close();
conn.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
return false;
}
public List<String> getColumns() {
if (columns == null || columns.size() == 0) {
loadData();
}
return columns;
}
public ArrayList<String> getColumnsQueury() {
ArrayList<String> columns = new ArrayList<String>();
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement("SELECT * FROM " + getName() + ";");
rs = sql.executeQuery();
/*
* Query query = new Query(mysql, "SELECT * FROM " + getName() + ";");
* ResultSet rs = query.executeQuery();
*/
ResultSetMetaData metadata = rs.getMetaData();
int columnCount = 0;
if (metadata != null) {
columnCount = metadata.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
String columnName = metadata.getColumnName(i);
columns.add(columnName);
}
sql.close();
conn.close();
return columns;
}
sql.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return columns;
}
public ArrayList<Column> getExactQuery(Column column) {
ArrayList<Column> result = new ArrayList<>();
String query = "SELECT * FROM " + getName() + " WHERE `" + column.getName() + "`='"
+ column.getValue().toString() + "';";
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(query);
rs = sql.executeQuery();
/*
* Query sql = new Query(mysql, query);
* sql.setParameter(1, column.getValue().toString());
* ResultSet rs = sql.executeQuery();
*/
if (rs.next()) {
for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
String columnName = rs.getMetaData().getColumnLabel(i);
Column rCol = null;
if (intColumns.contains(columnName)) {
rCol = new Column(columnName, DataType.INTEGER);
} else {
rCol = new Column(columnName, DataType.STRING);
}
// System.out.println(i + " " +
// rs.getMetaData().getColumnLabel(i));
rCol.setValue(rs.getString(i));
// System.out.println(rCol.getValue());
result.add(rCol);
}
}
sql.close();
conn.close();
return result;
} catch (SQLException e) {
e.printStackTrace();
} catch (ArrayIndexOutOfBoundsException e) {
}
for (String col : getColumns()) {
result.add(new Column(col, DataType.STRING));
}
return result;
}
public String getName() {
return name;
}
public ArrayList<String> getNamesQuery() {
ArrayList<String> uuids = new ArrayList<String>();
checkColumn("PlayerName", DataType.STRING);
ArrayList<Column> rows = getRowsNameQuery();
if (rows != null) {
for (Column c : rows) {
uuids.add((String) c.getValue());
}
}
return uuids;
}
public ArrayList<Column> getRowsNameQuery() {
ArrayList<Column> result = new ArrayList<Column>();
String sqlStr = "SELECT PlayerName FROM " + getName() + ";";
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr);
rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql);
* ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
Column rCol = new Column("PlayerName", rs.getString("PlayerName"), DataType.STRING);
result.add(rCol);
}
sql.close();
conn.close();
} catch (SQLException e) {
}
return result;
}
public ArrayList<Column> getRowsQuery() {
ArrayList<Column> result = new ArrayList<Column>();
String sqlStr = "SELECT uuid FROM " + getName() + ";";
try {
ResultSet rs = null;
Connection conn = mysql.getConnectionManager().getConnection();
PreparedStatement sql = conn.prepareStatement(sqlStr);
rs = sql.executeQuery();
/*
* Query query = new Query(mysql, sql);
* ResultSet rs = query.executeQuery();
*/
while (rs.next()) {
Column rCol = new Column("uuid", rs.getString("uuid"), DataType.STRING);
result.add(rCol);
}
sql.close();
conn.close();
} catch (SQLException e) {
return null;
}
return result;
}
public Set<String> getUuids() {
if (uuids == null || uuids.size() == 0) {
uuids.clear();
uuids.addAll(getUuidsQuery());
return uuids;
}
return uuids;
}
public ArrayList<String> getUuidsQuery() {
ArrayList<String> uuids = new ArrayList<String>();
ArrayList<Column> rows = getRowsQuery();
for (Column c : rows) {
uuids.add((String) c.getValue());
}
return uuids;
}
public void insert(String index, String column, Object value, DataType dataType) {
insertQuery(index, column, value, dataType);
}
public void insertQuery(String index, String column, Object value, DataType dataType) {
synchronized (object2) {
String query = "INSERT " + getName() + " ";
query += "set uuid='" + index + "', ";
query += column + "='" + value.toString() + "';";
// AdvancedCorePlugin.getInstance().extraDebug(query);
try {
uuids.add(index);
new Query(mysql, query).executeUpdateAsync();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public boolean isIntColumn(String key) {
return intColumns.contains(key);
}
public void loadData() {
columns = getColumnsQueury();
try {
Connection con = mysql.getConnectionManager().getConnection();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void update(String index, String column, Object value, DataType dataType) {
checkColumn(column, dataType);
if (getUuids().contains(index)) {
synchronized (object2) {
String query = "UPDATE " + getName() + " SET ";
if (dataType == DataType.STRING) {
query += column + "='" + value.toString() + "'";
} else {
query += column + "=" + value;
}
query += " WHERE `uuid`=";
query += "'" + index + "';";
try {
Query q = new Query(mysql, query);
q.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
} else {
insert(index, column, value, dataType);
}
}
}
@@ -0,0 +1,98 @@
package com.Ben12345rocks.VotingPlugin.bungee;
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;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
public class Config {
private Bungee bungee;
@Getter
private Configuration data;
public Config(Bungee bungee) {
this.bungee = bungee;
}
public void load() {
if (!bungee.getDataFolder().exists())
bungee.getDataFolder().mkdir();
File file = new File(bungee.getDataFolder(), "bungeeconfig.yml");
if (!file.exists()) {
try (InputStream in = bungee.getResourceAsStream("bungeeconfig.yml")) {
Files.copy(in, file.toPath());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
data = ConfigurationProvider.getProvider(YamlConfiguration.class)
.load(new File(bungee.getDataFolder(), "bungeeconfig.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void save() {
try {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(data,
new File(bungee.getDataFolder(), "bungeeconfig.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean getSendVotesToAllServers() {
return getData().getBoolean("SendVotesToAllServers");
}
public boolean getSendToOnlineServer() {
return getData().getBoolean("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);
}
}
@@ -0,0 +1,23 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import lombok.Getter;
public class OfflineBungeeVote {
@Getter
private String playerName;
@Getter
private String uuid;
@Getter
private String service;
@Getter
private long time;
public OfflineBungeeVote(String playerName, String uuid, String service, long time) {
this.playerName = playerName;
this.uuid = uuid;
this.service = service;
this.time = time;
}
}
@@ -0,0 +1,99 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import lombok.Getter;
import net.md_5.bungee.config.Configuration;
import net.md_5.bungee.config.ConfigurationProvider;
import net.md_5.bungee.config.YamlConfiguration;
public class VoteCache {
private Bungee bungee;
@Getter
private Configuration data;
public VoteCache(Bungee bungee) {
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());
section.set("Service", voteData.getService());
section.set("UUID", voteData.getUuid());
section.set("Time", voteData.getTime());
save();
}
public void addVoteOnline(String player, int num, OfflineBungeeVote voteData) {
Configuration section = getData().getSection("OnlineCache." + player + "." + num);
section.set("Name", voteData.getPlayerName());
section.set("Service", voteData.getService());
section.set("UUID", voteData.getUuid());
section.set("Time", voteData.getTime());
save();
}
public void clearData() {
getData().set("VoteCache", null);
getData().set("OnlineCache", null);
save();
}
}
@@ -0,0 +1,47 @@
package com.Ben12345rocks.VotingPlugin.bungee;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Command;
public class VotingPluginBungeeCommand extends Command {
private Bungee bungee;
public VotingPluginBungeeCommand(Bungee bungee) {
super("votingpluginbungee", "votingplugin.admin");
this.bungee = bungee;
}
@Override
public void execute(CommandSender sender, String[] args) {
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.vote(user, site);
sender.sendMessage(new TextComponent("Sending vote"));
}
}
if (args[0].equalsIgnoreCase("status")) {
sender.sendMessage(new TextComponent("Checking status, waiting for response, check console, only for socket method"));
bungee.status(sender);
}
if (args[0].equalsIgnoreCase("help")) {
TextComponent[] msg = new TextComponent[3];
msg[0] = new TextComponent("&avotingpluginbungee reload - Reload plugin");
msg[1] = new TextComponent("&avotingpluginbungee vote (player) (servicesite) - Send bungee vote");
msg[2] = new TextComponent("&avotingplugin status - Check socket connection status");
sender.sendMessage(msg);
}
}
} else {
sender.sendMessage(new TextComponent("You do not have permission to do this!"));
}
}
}