:shipit: SeriousVote 4.8.4 ―Your one stop Votifier Listener API 5/6/7

@Khaoz Do you know if this got fixed?

My guess is no, I’m gonna try to get this resolved today. It seems to be a common problem with pixelmon servers, and has happened in the past a bunch.

SeriousVote 3.1 Bug Fixes

–Fixed some serious NPE’s when milestones are not loaded.
https://raw.githubusercontent.com/curscascis/SeriousVote/master/build/libs/seriousvote-3.1.jar

Yea, was having the same problem with simple votifier listener, before I started using SV; hopefully you can find a fix, it’s really annoying seeing it spam the console.

yep I understand, I was talking with blood it seems to be triggered by nuVotifier running async. That’s what my whole fix for it was doing, which seems to have improved the situation, but not enough.I’ll do my best.

1 Like

Would you care to test a build for me?

https://github.com/curscascis/SeriousVote/raw/bleeding/build/libs/seriousvote-3.2-Bleeding.jar

@Khaoz

I’ve added bleeding to my server to test it. will provide feedback shortly.

Thank you very much I appreciate it. It’s difficult since I can’t reproduce the error.

[02:43:59] [pool-2-thread-1/INFO] [seriousvote]: Vote Registered From pixelmonservers.com for Tridaak
[02:43:59] [pool-2-thread-1/INFO] [seriousvote]: Choosing a random reward.
[02:43:59] [pool-2-thread-1/INFO] [seriousvote]: Chose Reward from Table4000
[02:43:59] [pool-2-thread-1/INFO] [seriousvote]: Player Tridaak voted and received Premier Balls &
[02:43:59] [pool-2-thread-1/INFO] [seriousvote]: Player Tridaak voted and received Premier Balls &
[02:44:19] [User Authenticator #1/INFO]: UUID of player Tridaak is 57838f9a-6cfe-4873-aa81-3337d1ff3d04
[02:44:21] [Netty Epoll Server IO #6/INFO] [FML]: Client protocol version 2
[02:44:21] [Netty Epoll Server IO #6/INFO] [FML]: Client attempting to join with 5 mods : [email protected],[email protected],[email protected],[email protected],[email protected]
[02:44:21] [Netty Epoll Server IO #6/INFO] [FML]: Attempting connection with missing mods [spongeapi, sponge, nucleus-mixin, economylite, gameshark, griefprevention, mysterygift, nucleus, nuvotifier, permissionsex, pixelannouncer, pixelextras, pixelmoneconomybridge, pixelshout, seriousvote, wondertrade, worldedit] at CLIENT
[02:44:21] [Server thread/INFO] [FML]: [Server thread] Server side modded connection established
[02:44:21] [Server thread/INFO]: Tridaak[/104.158.35.3:63413] logged in with entity id 244 in Poke-Craft(0) at (12733.204451453035, 77.0, -10978.142491790837)
[02:44:22] [Server thread/INFO] [seriousvote]: Choosing a random reward.
[02:44:22] [Server thread/INFO] [seriousvote]: Chose Reward from Table4000
[02:44:22] [Server thread/INFO] [seriousvote]: Player Tridaak voted and received Shiny stone shards &
[02:44:22] [Server thread/INFO] [seriousvote]: Player Tridaak voted and received Shiny stone shards &
[02:44:22] [Server thread/INFO] [nucleus]: Server ran the command: /give Tridaak pixelmon:premier_ball 6
[02:44:22] [Server thread/INFO]: Given [Premier Ball] * 6 to Tridaak
[02:44:22] [Server thread/INFO] [nucleus]: Server ran the command: /econ add Tridaak 200
[02:44:22] [Server thread/INFO] [nucleus]: Server ran the command: /tellraw Tridaak {"text":"Thank you for voting, you got 200 PokeDollars and possibly an item!", "color":"green"}
[02:44:22] [Server thread/INFO] [nucleus]: Server ran the command: /give Tridaak pixelmon:shiny_stone_shard 2
[02:44:22] [Server thread/INFO]: Given [Shiny Stone Shard] * 2 to Tridaak
[02:44:22] [Server thread/INFO] [nucleus]: Server ran the command: /econ add Tridaak 200
[02:44:22] [Server thread/INFO] [nucleus]: Server ran the command: /tellraw Tridaak {"text":"Thank you for voting, you got 200 PokeDollars and possibly an item!", "color":"green"}
[02:44:22] [Server thread/INFO] [seriousvote]: Creating a new record for 57838f9a-6cfe-4873-aa81-3337d1ff3d04.
[02:44:22] [pool-2-thread-4/INFO]: Successfully added currency to the balance of Tridaak!
[02:44:22] [pool-2-thread-1/INFO]: Successfully added currency to the balance of Tridaak!
[02:44:22] [Server thread/INFO]: + Tridaak

Offline votes are counting twice.

I’ll take a look at that, I was a fraid that might happen. Thanks for testing. Did you stop receiving the other error?

Nope… well, I voted 6 times, received rewards for 4 of those.
For 2 of the ones I received rewards, they were offline votes, and did not get the error message.
For the other two (ones when I was online), I did get the error message.

I’m not sure if it’s coincidence or something’s up, so figured I’d let you know which did which.

can i see a copy of the log with the error message please? It would come in handy

Also can you verify that offline votes are counting twice, and that you already had an offline vote stored?

[03:06:50] [pool-2-thread-5/INFO]: Successfully added currency to the balance of Tridaak!
[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Vote Registered From Minepick.com for tridaak
[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Choosing a random reward.
[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Chose Reward from Table2700
[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Player tridaak voted and received Fossil 4 &
[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Player tridaak voted and received Fossil 4 &
[03:07:11] [pool-2-thread-3/INFO] [nucleus]: Server ran the command: /give tridaak pixelmon:covered_fossil_4 1
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]: java.lang.Exception: Stack trace
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at java.lang.Thread.dumpStack(Thread.java:1333)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.entity.EntityTracker.handler$onAddEntityToTracker$zda000(EntityTracker.
java:576)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.entity.EntityTracker.func_72785_a(EntityTracker.java)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.entity.EntityTracker.func_72786_a(EntityTracker.java:139)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.ServerWorldEventHandler.func_72703_a(ServerWorldEventHandler.java
:33)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.World.func_72923_a(World.java:1142)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.WorldServer.func_72923_a(WorldServer.java:1118)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.WorldServer.onSpongeEntityAdded(WorldServer.java:2822)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.WorldServer.forceSpawnEntity(WorldServer.java:2868)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.WorldServer.forceSpawnEntity(WorldServer.java:2851)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.event.tracking.phase.TrackingPhase.spawnEntityOrCapture(Trac
kingPhase.java:284)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.event.tracking.phase.general.GeneralPhase.spawnEntityOrCaptu
re(GeneralPhase.java:357)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.event.tracking.CauseTracker.spawnEntity(CauseTracker.java:55
8)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.world.WorldServer.func_72838_d(WorldServer.java:2593)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.entity.EntityUtil.dropItemAndGetStack(EntityUtil.java:1115)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.entity.EntityUtil.playerDropItem(EntityUtil.java:1075)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.entity.player.EntityPlayer.func_146097_a(EntityPlayer.java:3561)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.entity.player.EntityPlayer.func_71019_a(EntityPlayer.java:3502)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.command.CommandGive.func_184881_a(SourceFile:75)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.minecraft.command.CommandHandler.func_175786_a(CommandHandler.java:104)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.command.MinecraftCommandWrapper.tryExecute(MinecraftCommandWrapper.java:143)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.command.MinecraftCommandWrapper.process(MinecraftCommandWrapper.java:129)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.api.command.dispatcher.SimpleDispatcher.process(SimpleDispatcher.java:333)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.command.SpongeCommandManager.process(SpongeCommandManager.java:295)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.adamsanchez.seriousvote.SeriousVote.giveReward(SeriousVote.java:549)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.adamsanchez.seriousvote.SeriousVote.giveVote(SeriousVote.java:590)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at net.adamsanchez.seriousvote.SeriousVote.onVote(SeriousVote.java:513)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.event.listener.VotifierEventListener_SeriousVote_onVote27.handle(Unknown Source)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:301)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:330)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:314)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at com.vexsoftware.votifier.sponge.VotifierPlugin$3.run(VotifierPlugin.java:356)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.api.scheduler.Task$Builder.lambda$execute$0(Task.java:138)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at org.spongepowered.common.scheduler.SchedulerBase.lambda$startTask$0(SchedulerBase.java:183)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at java.util.concurrent.FutureTask.run(FutureTask.java:266)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[03:07:11] [pool-2-thread-3/INFO] [STDERR]: [java.lang.Thread:dumpStack:1333]:  at java.lang.Thread.run(Thread.java:745)
[03:07:11] [pool-2-thread-3/ERROR] [Sponge]: Detected attempt to add entity 'EntityItem['item.item.covered_fossil_4'/1435, l='Poke-Craft', x=502.33, y=86.24, z=93.42]' to tracker asynchronously.
 This is very bad as it can cause ConcurrentModificationException's during a server tick.
 Skipping...
[03:07:11] [pool-2-thread-3/INFO]: Given [Covered Fossil] * 1 to Tridaak

Also, forgot to mention, it displays the reward you get twice. As you can see.

[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Player tridaak voted and received Fossil 4 &
[03:07:11] [pool-2-thread-3/INFO] [seriousvote]: Player tridaak voted and received Fossil 4 &

And have a question about the ongoing vote rewards thing. If I vote for a week, I can get a reward… but what happens when I vote for 2 weeks, do I get anything or would I need to wait to get to the 30 day vote reward?

You get the reward every week.

Can you quickly verify that you are using the bleeding build?

When I updated the mod, I did the following (I had no votes stored previous to this, always vote when online).
-Voted offline

Got 2 rewards
-Voted online
Got 1 reward and error
-Voted offline
Got 2 rewards (well, one that said I got nothing and then another that gave me an item)
-Voted online
Got nothing
-Voted online
Got nothing
-Voted online
Got 1 reward and error.

“seriousvote-3.2-Bleeding.jar” Yup

Alright, can you please give me your config, I’m gonna run it on my test server.

Muh unique vote tables :’(

config:
{
    #//Variables - {player} : the person who voted
    #//            {rewards} : The list of random rewards the player received

    #//Leaving this empty will disable messages from being shown publicly: Supports color and formatting codes
    broadcast-message: ""

    #//-1 will have the system select a number of rewards between rewards-min and rewards-max;
    random-rewards-number: 1
    rewards-min:1
    rewards-max:2


    #//There are two kinds of rewards set and random. Set rewards will run a command and nothing else
    #//these commands are run every time a vote is had. Random Rewards are chosen well..Randomly.
    #//
    #//        "12", "reward2", "say Reward2",  --All Random reward Lines should look like this
    #//
    #//  First Entry is a "percentage" the numbers should be an integer between 1 and 100, but if it's
    #//       Going to be a 100 might as well just set it as a set command. Note that the percentage
    #//       Dictates what "Loot Table" the reward goes to internally, multiple of the same percentage is fine,
    #//       They will simply share a loot table. It is recommended to keep the total value of all the
    #//       percentage values added up to 100 (Duplicate values are ignored in the sum since, items share
    #//       loot Tables).
    #//  Second Entry is the name of the reward, this name gets added to the {rewards} variable. Items in the same
    #//       loot table cannot have the same name!!.
    #//  Third Entry is the command you want to be run. You are free to use the {player} variable in there.
    #//
    #//This should be pretty straight forward. Number,Name,Reward. If you have any questions ask me on the forum.
    #//I am happy to help!


     Rewards{
                random:[
                    "4000", "Thunder stone shards", "give {player} pixelmon:thunder_stone_shard 2",
                    "4000", "Leaf stone shards", "give {player} pixelmon:leaf_stone_shard 2",
                    "4000", "Water stone shards", "give {player} pixelmon:water_stone_shard 2",
                    "4000", "Fire stone shards", "give {player} pixelmon:fire_stone_shard 2",
                    "4000", "Sun stone shards", "give {player} pixelmon:sun_stone_shard 2",
                    "4000", "Moon stone shards", "give {player} pixelmon:moon_stone_shard 2",
                    "4000", "Dawn stone shards", "give {player} pixelmon:dawn_stone_shard 2",
                    "4000", "Dusk stone shards", "give {player} pixelmon:dusk_stone_shard 2",
                    "4000", "Shiny stone shards", "give {player} pixelmon:shiny_stone_shard 2",
                    "4000", "Super Potions", "give {player} pixelmon:super_potion 2",
                    "4000", "a Hyper potion", "give {player} pixelmon:hyper_potion 1",
                    "4000", "Premier Balls", "give {player} pixelmon:premier_ball 6",
                    "2700", "Fossil 0", "give {player} pixelmon:covered_fossil_0 1",
                    "2700", "Fossil 1", "give {player} pixelmon:covered_fossil_1 1",
                    "2700", "Fossil 2", "give {player} pixelmon:covered_fossil_2 1",
                    "2700", "Fossil 3", "give {player} pixelmon:covered_fossil_3 1",
                    "2700", "Fossil 4", "give {player} pixelmon:covered_fossil_4 1",
                    "2700", "Fossil 5", "give {player} pixelmon:covered_fossil_5 1",
                    "2700", "Fossil 6", "give {player} pixelmon:covered_fossil_6 1",
                    "2700", "Fossil 7", "give {player} pixelmon:covered_fossil_7 1",
                    "2700", "Fossil 8", "give {player} pixelmon:covered_fossil_8 1",
                    "2700", "Great balls", "give {player} pixelmon:great_ball 4",
                    "2700", "Ultra balls", "give {player} pixelmon:ultra_ball 2",
                    "2700", "Timer balls", "give {player} pixelmon:timer_ball 2",
                    "2700", "Heavy balls", "give {player} pixelmon:heavy_ball 2",
                    "2700", "Books", "give {player} minecraft:book 3",
                    "2700", "Slime ball", "give {player} minecraft:slime_ball 2",
                    "2700", "Blaze rod", "give {player} minecraft:blaze_rod 2",
                    "2700", "Iron ingot", "give {player} minecraft:iron_ingot 4",
                    "2700", "Amulet Coin", "give {player} pixelmon:amulet_coin 1",  
                    "800", "a Max Revive", "give {player} pixelmon:max_revive 1",
                    "800", "Rare candy", "give {player} pixelmon:rare_candy 1",
                    "800", "Exp. share", "give {player} pixelmon:exp_share 1",                
                    "800", "a Skeleton skull", "give {player} minecraft:skull 1 0",
                    "800", "a Zombie skull", "give {player} minecraft:skull 1 2",
                    "800", "a Creeper skull", "give {player} minecraft:skull 1 4",
                    "800", "Obsidian", "give {player} minecraft:obsidian 1",
                    "800", "Diamond", "give {player} minecraft:diamond 1",
                    "240", "a Player skull", "give {player} skull 1 3 {SkullOwner:\"{player}\"}",
                    "240", "Diamond pickaxe", "give {player} minecraft:diamond_pickaxe 1 0 {ench:[{id:32,lvl:2}]}",
                    "240", "Diamond axe", "give {player} minecraft:diamond_axe 1 0 {ench:[{id:32,lvl:2}]}",
                    "240", "Thunder stone", "give {player} pixelmon:thunder_stone 1",
                    "240", "Leaf stone", "give {player} pixelmon:leaf_stone 1",
                    "240", "Water stone", "give {player} pixelmon:water_stone 1",
                    "240", "Fire stone", "give {player} pixelmon:fire_stone 1",
                    "240", "Sun stone", "give {player} pixelmon:sun_stone 1",
                    "240", "Moon stone", "give {player} pixelmon:moon_stone 1",
                    "240", "Dawn stone", "give {player} pixelmon:dawn_stone 1",
                    "240", "Dusk stone", "give {player} pixelmon:dusk_stone 1",
                    "240", "Shiny stone", "give {player} pixelmon:shiny_stone 1",
                    "45", "Thunder stone pickaxe", "give {player} pixelmon:thunder_stone_pickaxe 1 0 {ench:[{id:34,lvl:2}]}",
                    "45", "Thunder stone axe", "give {player} pixelmon:thunder_stone_axe 1 0 {ench:[{id:34,lvl:2}]}",
                    "45", "Any Pokemon ticket", "give {player} pixelmon:red_card 1 0 {ench:[{id:48,lvl:2000}],display:{Name:\"Any Pokemon* Ticket\",Lore:[\"Give this to an admin to\", \"exchange for any Pokemon!\", \"*Shinies/Legendaries excluded.\"]}}",
                    "10", "HM02:Fly", "give {player} pixelmon:hm2 1",
                    "10", "HM03:Surf", "give {player} pixelmon:hm3 1",
                    "3", "Uxie", "pokegive {player} uxie",
                    "3", "Mesprit", "pokegive {player} mesprite",
                    "3", "Azelf", "pokegive {player} azelf",
                    "3", "Raikou", "pokegive {player} raikou",
                    "3", "Entei", "pokegive {player} entei",
                    "3", "Suicune", "pokegive {player} suicune",
                    "3", "Regirock", "pokegive {player} regirock",
                    "3", "Regice", "pokegive {player} regice",
                    "3", "Registeel", "pokegive {player} registeel",
                    "3", "Latias", "pokegive {player} latias",
                    "3", "Latios", "pokegive {player} latios",
                    "3", "Jirachi", "pokegive {player} jirachi",
                    "3", "Kyogre", "pokegive {player} kyogre",
                    "3", "Mew", "pokegive {player} mew",
                    "3", "Groudon", "pokegive {player} groudon",
                    "3", "Lugia", "pokegive {player} lugia",
                    "3", "Ho-Oh", "pokegive {player} ho-oh",
                    "3", "Celebi", "pokegive {player} celebi",
                    "1", "Orb", "give {player} pixelmon:orb 1",
                    "1", "Master ball", "give {player} pixelmon:master_ball 1",
                    "1", "Burnt Magikarp ticket", "give {player} pixelmon:red_card 1 0 {ench:[{id:48,lvl:2000}],display:{Name:\"Burnt Magikarp Ticket\",Lore:[\"Give this to an admin to\", \"exchange for a burnt magikarp!\"]}}",
                    "2201", "Nothing", "tellraw {player} {\"text\":\":( You didn't get an item this time.\", \"color\":\"gray\"}"
                 ]
                set:[
                    "econ add {player} 200",
                    "tellraw {player} {\"text\":\"Thank you for voting, you got 200 PokeDollars and possibly an item!\", \"color\":\"green\"}"
                ]

            }


    #// Your website voting links, displayed by /vote, these support color formatting. Creates clickable links.
    #//seriousvotes.commands.vote
    vote-sites:[
                    "&n&fhttp://pixelmonservers.com/server/EVk9GG38/vote",
                    "&n&fhttp://minecraft-server-list.com/server/379940/vote/",
                    "&n&fhttp://minecraft-mp.com/server/144470/vote/",
                    "&n&fhttp://minecraftservers.org/vote/409078",
                    "&n&fhttp://www.minepick.com/servers/14145/vote/",
                    "&n&fhttps://topminecraftservers.org/vote/1505"
               ]
 #// If you want to disable the Milestones module set hostname to ""
    database:{
      hostname: "localhost"
      port: "3306"
      name: "mc-mods"
      prefix: "SV_"
      username: "root"
      password: "Don't steel"
    }

  #// Currently we have monthly weekly and yearly, put what you need in the set rewards. these commands will be run
  #// When a player votes X amount of days in a row, 365,30, 7
    milestones: {
      weekly: {
        set:[
          "say This is a set weekly {player} Reward",
        ]
      }
      monthly: {
        set:[
          "say This is a set Monthly {player} Reward"
        ]
      }
      yearly: {
        set:[
           "say This is a set Yearly {player} Reward",
          "say Crap, you must play alot"
        ]
      }
    }
}