NuVotifier - Votifier with more robust code and vote forwarding

THIS PLUGIN HAS BEEN MIGRATED TO ORE - see Ore page for new releases.

NuVotifier is a Minecraft plugin whose purpose is to be notified (aka votified) when a vote is made on a Minecraft server top list for the server. NuVotifier creates a lightweight server that waits for connections by Minecraft server lists and uses a simple protocol to get the required information. NuVotifier is secure, and makes sure that all vote notifications are delivered by authentic top lists.

NuVotifier replaces most Votifier plugins but uses a different event (due to the need to keep compatibility with the old Bukkit Votifier plugin).

NuVotifier features several improvements over Votifier, including built-in vote forwarding (disabled by default) and more robust networking code, while still aiming to retain compatibility with server lists and plugins.

Currently, NuVotifier is available for Bukkit, Sponge, BungeeCord, and Velocity. Simply install the single JAR you download on this page.

A comprehensive usage guide is available on our Github repository.

:wrench: Source code

:arrow_down: Download

6 Likes

Just wondering if your going to release a listener for this? as the VoteRight doesn’t seem to work with it. :frowning:

The author of VoteRight would need to make it compatible with NuVotifier. The current plugin he depends on is actually descended from an old version of the code that became NuVotifier.

1 Like

Great plugin on Bukkit, glad to see you’ve brought it to Sponge!

Please, have a :pizza: and a tux jr :penguin:

You uploaded the wrong NuVotifier JAR for version 2.3.2.1, the version where you re-added getVote(), can you please upload the correct JAR

Are you sure? The linked JAR should have it (just verified by decompiling).

Hmm… people are saying it doesn’t have getVote(), I’ll verify it.

Make sure they’re downloading from the GitHub link in this post, not the well-known morally and legally dubious website that starts with an S.

2 Likes

They’re not the same the VotifierEvent.class has changed between the two jars and the modified time is about 2 hours different.

I’ve tested both versions offered… again unless there’s another version somewhere you may have issues with SpongeVanilla.

Wondering if you have any support from ServerLists to add the v2 protocol version?

1 Like

I attempted to set this up with several voting sites, and I get an error that the public key is in the wrong format, is there any way I can convert it so it’s what they like, or do I need to find other vote sites?

Any help would be appreciated.

Look in config/nuvotifier/rsa for the RSA keys you need.

v2.3.2.2 has been released. It features compatibility fixes for server lists.

I’ve now updated the plugin so it works with SpongeAPI 4.x.

I’m using simplevotifierlistener, v0.3 with the latest NuVotifier v2.3.2.2 for API 3.0.0 on spongeforge 1136, and I’m running into an issue where whenever a large volume of my players are voting at once (Usually caused by everyone seeing a first person vote, and following suit) that either NuVotifier or the Listener are crashing my server, causing it to exit in an error state.

Seeing as I don’t know which of the plugins may be causing this, I will post this same thing on simplevotifierlistener in case either of you know of this issue, and can point in the right direction. If you need anymore info, please let me know. I’m looking into this currently, but I am stuck as to what to do next.

Thanks,
-dp0226

Do you have any logs?

I doubt it’s NuVotifier causing the issue.

Server log:

Error Message Associated:

Hi there, I believe I’ve set up everything correctly server side, and when I try to pass a vote using the testing tool you provided in the op, I receive the following error:

[spoiler] 03/27/2016 20:17:31
20:17:31Votifier enabled on socket /158.69.122.32:8192.
Server thread/INFO - Sponge 03/27/2016 20:17:31
20:17:31Timings Reset
nioEventLoopGroup-2-1/ERROR - nuvotifier 03/27/2016 20:18:30
20:18:30Unable to process vote from /158.69.223.237:37124
Console 03/27/2016 20:18:30
20:18:30com.vexsoftware.votifier.netty.handler.codec.CorruptedFrameException: Signature is not valid (invalid token?)
at com.vexsoftware.votifier.net.protocol.VotifierProtocol2Decoder.decode(VotifierProtocol2Decoder.java:58) ~[VotifierProtocol2Decoder.class:?]
at com.vexsoftware.votifier.net.protocol.VotifierProtocol2Decoder.decode(VotifierProtocol2Decoder.java:26) ~[VotifierProtocol2Decoder.class:?]
at com.vexsoftware.votifier.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:89) ~[MessageToMessageDecoder.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [MessageToMessageDecoder.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244) [ByteToMessageDecoder.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:203) [ByteToMessageDecoder.class:?]
at com.vexsoftware.votifier.netty.channel.DefaultChannelPipeline.callHandlerRemoved0(DefaultChannelPipeline.java:527) [DefaultChannelPipeline.class:?]
at com.vexsoftware.votifier.netty.channel.DefaultChannelPipeline.callHandlerRemoved(DefaultChannelPipeline.java:521) [DefaultChannelPipeline.class:?]
at com.vexsoftware.votifier.netty.channel.DefaultChannelPipeline.remove0(DefaultChannelPipeline.java:351) [DefaultChannelPipeline.class:?]
at com.vexsoftware.votifier.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:322) [DefaultChannelPipeline.class:?]
at com.vexsoftware.votifier.netty.channel.DefaultChannelPipeline.remove(DefaultChannelPipeline.java:299) [DefaultChannelPipeline.class:?]
at com.vexsoftware.votifier.net.protocol.VotifierProtocolDifferentiator.decode(VotifierProtocolDifferentiator.java:55) [VotifierProtocolDifferentiator.class:?]
at com.vexsoftware.votifier.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:327) [ByteToMessageDecoder.class:?]
at com.vexsoftware.votifier.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:230) [ByteToMessageDecoder.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [ChannelInboundHandlerAdapter.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) [AbstractChannelHandlerContext.class:?]
at com.vexsoftware.votifier.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846) [DefaultChannelPipeline.class:?]
at com.vexsoftware.votifier.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) [AbstractNioByteChannel$NioByteUnsafe.class:?]
at com.vexsoftware.votifier.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) [NioEventLoop.class:?]
at com.vexsoftware.votifier.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) [NioEventLoop.class:?]
at com.vexsoftware.votifier.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) [NioEventLoop.class:?]
at com.vexsoftware.votifier.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) [NioEventLoop.class:?]
at com.vexsoftware.votifier.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112) [SingleThreadEventExecutor$2.class:?]
at com.vexsoftware.votifier.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) [DefaultThreadFactory$DefaultRunnableDecorator.class:?]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_77]

And the error from the votifier tester: There was an error with votifier: ‘CorruptedFrameException: undefined’. Please send this error to [email protected] so I can catalog it with quick tips to fix it! Date: Mon Mar 28 2016 00:18:28 GMT-0400 (EDT)

[/spoiler]

If anyone has any experience with this, or knows a fix, I would greatly appreciate the help.

Edit: Also, I’ve used a copied and pasted token from the public token file, so I dont think its that.

I’m having issues with players voting and the server crashing. Cant tell if its this plugin or the listener I have installed.
http://paste.ubuntu.com/15802887/

I seriously doubt NuVotifier itself is causing your server to crash.