minecrell / serverlistplus Goto Github PK
View Code? Open in Web Editor NEWA flexible Minecraft plugin to customize the appearance of your server in the server list
Home Page: https://git.io/slp
License: GNU General Public License v3.0
A flexible Minecraft plugin to customize the appearance of your server in the server list
Home Page: https://git.io/slp
License: GNU General Public License v3.0
Dear devolper,
When i try to setup the Players content, nothing changes but it still shows the players that are online and not the text that I made. I hope you can help me
Kind regards
So one number from the range is chosen. Not yet sure how to do it within the configuration.
I keep getting "Unknown configuration property: URLs/Files/Folders @ FaviconConf", since its a sponge plugin it resides in the mods folder, and its config in the Config folder. Not sure where to target the files
From BukkitDev: http://dev.bukkit.org/bukkit-plugins/serverlistplus/#c1
Please add commands to change the MOTD etc in game! :)
this should really be fixed at some point
Hi, I have troubles with ServerListPlus = Not work. Plugin isn't loaded, in log I see the following error:
http://pastebin.com/rtdiTYiz
I have latest version of ProtocolLib, Spigot 1.8.3 R0.1. I don't know, why plugin not works, I read it many times...
Please, Help!
Sincerely,
TheAcastus
Hey @Minecrell
First of all: awesome plugin, works like a charm and its very well documented. Superb!
I have one suggestion, though. At the moment, if you use the favicon feature, you won't see personalized favicons if you restart your server.
Would be nice if you could cache and store them locally for, let's say 24h before you need to refresh via a HTTP request.
Thanks in advance!
Edit: I'm using the Spigot build.
For example: %online@hub% %online@hub%
won't work. The regex allows all characters as server name and this is causing this problem.
nevermind fixed. Lock
I'm using the following configuration part for my virtual hosts:
Hosts:
frd.mn:
Default:
Description:
- |-
&a&lYEAHWHAT?!&r&6 Minecraft server.
&6Still using &4&lfrd.mn&6, eh?
Personalized:
Description:
- |-
&6Welcome back to &a&lYEAHWHAT?!&r&6, &c%player%&6!
&6Still using &4&lfrd.mn&6, eh?
However, if I connect to "frd.mn
", which is using an SRV to "obi-wan.yeahwh.at:25575
":
$ dig srv _minecraft._tcp.frd.mn +short
1 1 25575 obi-wan.yeahwh.at.
... It still show's me the default Description, and not the "per-host" one i've set for "frd.mn"
Anything I done wrong?
Thanks in advance
If I add command shortcuts I should also add tab complete so it is even more faster to use!
You need to remove the mention of unsupported builds.
Possibly remove this to fix it? https://github.com/Minecrell/ServerListPlus/blob/master/Bukkit/src/main/java/net/minecrell/serverlistplus/bukkit/BukkitPlugin.java#L106
http://www.spigotmc.org/threads/serverlistplus.7371/page-17#post-396871
[20:17:23] [Netty IO #0/ERROR]: [ServerListPlus] Unhandled exception occured in onPacketSending(PacketEvent) for ServerListPlus
java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) ~[?:1.7.0_65]
at java.util.ArrayList$Itr.next(ArrayList.java:831) ~[?:1.7.0_65]
at org.bukkit.craftbukkit.v1_7_R4.CraftWorld.getPlayers(CraftWorld.java:675) ~[spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin.getOnlinePlayersAt(BukkitPlugin.java:231) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.replacement.DefaultPatternPlaceholder$1.replace(DefaultPatternPlaceholder.java:45) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.replacement.DefaultPatternPlaceholder.replace(DefaultPatternPlaceholder.java:76) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.replacement.ReplacementManager.replaceDynamic(ReplacementManager.java:70) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.status.StatusManager.prepare(StatusManager.java:236) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.status.PersonalizedStatusPatch.prepareRandomEntry(PersonalizedStatusPatch.java:144) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.status.PersonalizedStatusPatch.getPlayerHover(PersonalizedStatusPatch.java:106) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.core.status.StatusResponse.getPlayerHover(StatusResponse.java:163) ~[ServerListPlusUniversal-3.3.1.jar:?]
at net.minecrell.serverlistplus.bukkit.handlers.ProtocolLibHandler$StatusPacketListener.onPacketSending(ProtocolLibHandler.java:127) ~[ServerListPlusUniversal-3.3.1.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokeSendingListener(SortedPacketListenerList.java:195) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:149) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:626) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.invokePacketSending(PacketFilterManager.java:602) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.NettyProtocolInjector.packetQueued(NettyProtocolInjector.java:281) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.NettyProtocolInjector.onPacketSending(NettyProtocolInjector.java:249) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.ChannelInjector.processSending(ChannelInjector.java:384) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.ChannelInjector.encode(ChannelInjector.java:433) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.ChannelInjector$3.encode(ChannelInjector.java:245) [ProtocolLib.jar:?]
at net.minecraft.util.io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:111) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at com.comphenix.protocol.injector.netty.ChannelInjector$3.write(ChannelInjector.java:250) [ProtocolLib.jar:?]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at com.comphenix.protocol.injector.netty.ChannelProxy.writeAndFlush(ChannelProxy.java:269) [ProtocolLib.jar:?]
at net.minecraft.server.v1_7_R4.NetworkManager.b(NetworkManager.java:149) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.server.v1_7_R4.NetworkManager.handle(NetworkManager.java:129) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.server.v1_7_R4.PacketStatusListener.a(PacketStatusListener.java:128) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.server.v1_7_R4.PacketStatusInStart.a(SourceFile:25) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.server.v1_7_R4.PacketStatusInStart.handle(SourceFile:8) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:113) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.server.v1_7_R4.NetworkManager.channelRead0(NetworkManager.java:238) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at com.comphenix.protocol.injector.netty.ChannelInjector$4.channelRead(ChannelInjector.java:260) [ProtocolLib.jar:?]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:149) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at net.minecraft.util.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [spigot.jar:git-Spigot-1.7.9-R0.2-207-g03373bb]
at java.lang.Thread.run(Thread.java:745) [?:1.7.0_65]
[20:17:23] [Netty IO #0/ERROR]: Parameters:
net.minecraft.server.v1_7_R4.PacketStatusOutServerInfo@7736a2e5[
b=net.minecraft.server.v1_7_R4.ServerPing@4c50cd24
timestamp=1415495843476
]
For example if one description is used, then use a specific player hover message.
Receiving this exception upon server start:
Could you add UUID favicon support? Or is there all ready such a thing and I just don't know how to do it?
Here is my config: http://pastebin.com/DuUJpz0a
Thanks for your time.
Using dev build 254 - ServerListPlusBukkit-3.4-SNAPSHOT.jar version. http://ci.minecrell.net/job/ServerListPlus/254/
Downgrading to dev build 247. No errors.
http://ci.minecrell.net/job/ServerListPlus/247/
[13:56:26] [Netty Server IO #3/ERROR]: [ServerListPlus] Unhandled exception occured in onPacketReceiving(PacketEvent) for ServerListPlus
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache.get(LocalCache.java:3934) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin.getRequest(BukkitPlugin.java:228) ~[ServerListPlusBukkit-3.4-SNAPSHOT.jar:?]
at net.minecrell.serverlistplus.bukkit.handlers.ProtocolLibHandler$StatusPacketListener.onPacketReceiving(ProtocolLibHandler.java:66) ~[ServerListPlusBukkit-3.4-SNAPSHOT.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokeReceivingListener(SortedPacketListenerList.java:114) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketRecieving(SortedPacketListenerList.java:67) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:639) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.invokePacketRecieving(PacketFilterManager.java:606) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.NettyProtocolInjector.packetReceived(NettyProtocolInjector.java:300) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.NettyProtocolInjector.onPacketReceiving(NettyProtocolInjector.java:266) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.ChannelInjector.decode(ChannelInjector.java:513) [ProtocolLib.jar:?]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:241) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:149) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.comphenix.protocol.injector.netty.ChannelInjector$4.channelRead(ChannelInjector.java:246) [ProtocolLib.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at net.minecraft.server.v1_8_R1.LegacyPingHandler.channelRead(SourceFile:94) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:125) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:507) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:464) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:378) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]
Caused by: java.lang.NullPointerException
at net.minecrell.serverlistplus.bukkit.core.player.JSONIdentificationStorage.resolve(JSONIdentificationStorage.java:79) ~[?:?]
at net.minecrell.serverlistplus.bukkit.core.ServerListPlusCore.resolveClient(ServerListPlusCore.java:186) ~[?:?]
at net.minecrell.serverlistplus.bukkit.core.ServerListPlusCore.createRequest(ServerListPlusCore.java:190) ~[?:?]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin$2.load(BukkitPlugin.java:114) ~[?:?]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin$2.load(BukkitPlugin.java:111) ~[?:?]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
... 37 more
[13:56:26] [Netty Server IO #0/ERROR]: [ServerListPlus] Unhandled exception occured in onPacketReceiving(PacketEvent) for ServerListPlus
com.google.common.util.concurrent.UncheckedExecutionException: java.lang.NullPointerException
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2201) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache.get(LocalCache.java:3934) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin.getRequest(BukkitPlugin.java:228) ~[ServerListPlusBukkit-3.4-SNAPSHOT.jar:?]
at net.minecrell.serverlistplus.bukkit.handlers.ProtocolLibHandler$StatusPacketListener.onPacketReceiving(ProtocolLibHandler.java:66) ~[ServerListPlusBukkit-3.4-SNAPSHOT.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokeReceivingListener(SortedPacketListenerList.java:114) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketRecieving(SortedPacketListenerList.java:67) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:639) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.PacketFilterManager.invokePacketRecieving(PacketFilterManager.java:606) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.NettyProtocolInjector.packetReceived(NettyProtocolInjector.java:300) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.NettyProtocolInjector.onPacketReceiving(NettyProtocolInjector.java:266) [ProtocolLib.jar:?]
at com.comphenix.protocol.injector.netty.ChannelInjector.decode(ChannelInjector.java:513) [ProtocolLib.jar:?]
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:241) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:149) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.comphenix.protocol.injector.netty.ChannelInjector$4.channelRead(ChannelInjector.java:246) [ProtocolLib.jar:?]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at net.minecraft.server.v1_8_R1.LegacyPingHandler.channelRead(SourceFile:94) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:125) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:507) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:464) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:378) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [spigot.jar:git-Spigot-8a983f9-9ae3381]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_31]
Caused by: java.lang.NullPointerException
at net.minecrell.serverlistplus.bukkit.core.player.JSONIdentificationStorage.resolve(JSONIdentificationStorage.java:79) ~[?:?]
at net.minecrell.serverlistplus.bukkit.core.ServerListPlusCore.resolveClient(ServerListPlusCore.java:186) ~[?:?]
at net.minecrell.serverlistplus.bukkit.core.ServerListPlusCore.createRequest(ServerListPlusCore.java:190) ~[?:?]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin$2.load(BukkitPlugin.java:114) ~[?:?]
at net.minecrell.serverlistplus.bukkit.BukkitPlugin$2.load(BukkitPlugin.java:111) ~[?:?]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) ~[spigot.jar:git-Spigot-8a983f9-9ae3381]
... 37 more
[13:56:26] [Netty Server IO #0/ERROR]: Parameters:
net.minecraft.server.v1_8_R1.PacketHandshakingInSetProtocol@174f7dad[
a=47
b=server-ip
c=25565
d=STATUS
]
[13:56:26] [Netty Server IO #3/ERROR]: Parameters:
net.minecraft.server.v1_8_R1.PacketHandshakingInSetProtocol@256f3a03[
a=47
b=server-ip
c=25565
d=STATUS
]
I get this error when I use the "Sponge" one, any idea on how I can fix this and or what my stupidity is missing. (I've had no sleep so my problem solving isn't the best right now. http://prntscr.com/7l6efm
Maybe a outdated Sponge compared to the version your using?
http://prntscr.com/7l6hsg
Also they are incompatible with the custom outdated version name.
Add NMS / Reflection based modification, but use ProtocolLib if it is installed.
Will display a list of players currently playing on the server.
Would need some kind of caching because there is no way to get the count without pinging the specific server.
%max@Server%
Hi, today I downgraded to 3.3.2 (for Spigot 1.8) and while I click Multiplayer and server's motd started to load. In server console (log) I saw this error. It has two negative effects to the motd, when my cursor is hovering over the player count, nothing have been showed and player count online/max isn't edited.
And the console error... long error... Spamy spamy spam :D
Sincerely,
TheAcastus
For example to colorize the player slots in the server list.
This was removed from 3.4 and I may add it later.
it would be cool if someone made something like %online@world+5%, %online@server+5% or %online+5% and it would result the player count with 5 players added!(e.g. online = 4, then it would result in 9)
http://pastebin.com/V5pQ535g
Using dev Build #247 and newest Spigot Build(compiled 10 minutes ago)
The placeholder %players% would be replaced with a list of the online players.
20:07:52 [SCHWERWIEGEND] Aug 24, 2014 8:07:52 PM net.md_5.bungee.event.EventBus post
WARNUNG: Error dispatching event ProxyPingEvent(connection=[/127.0.0.1:6519] <-> InitialHandler, response=ServerPing(version=ServerPing.Protocol(name=1.7.9, protocol=14), players=ServerPing.Players(max=1, online=0, sample=null), description=?1Another Bungee server, favicon=null)) to listener net.minecrell.serverlistplus.bungee.BungeePlugin$PingListener@2034b64c
java.lang.NullPointerException: host
at net.minecrell.serverlistplus.bungee.core.status.StatusRequest$Target.<init>(StatusRequest.java:105)
at net.minecrell.serverlistplus.bungee.core.status.StatusRequest.setTarget(StatusRequest.java:77)
at net.minecrell.serverlistplus.bungee.BungeePlugin$PingListener.onProxyPing(BungeePlugin.java:139)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at net.md_5.bungee.event.EventHandlerMethod.invoke(EventHandlerMethod.java:19)
at net.md_5.bungee.event.EventBus.post(EventBus.java:47)
at net.md_5.bungee.api.plugin.PluginManager.callEvent(PluginManager.java:364)
at net.md_5.bungee.connection.InitialHandler.handle(InitialHandler.java:137)
at net.md_5.bungee.protocol.packet.LegacyPing.handle(LegacyPing.java:25)
at net.md_5.bungee.netty.HandlerBoss.channelRead(HandlerBoss.java:75)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:168)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:168)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:222)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:233)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:219)
at io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:75)
at io.netty.handler.timeout.ReadTimeoutHandler.channelInactive(ReadTimeoutHandler.java:144)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:233)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:219)
at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:769)
at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:567)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at java.lang.Thread.run(Unknown Source)
This should be avoided as SpigotMC/BungeeCord@5d1b660 points out.
java.security.AccessControlException: Plugin violation: Thread Creation: Use scheduler
at net.md_5.bungee.BungeeSecurityManager.checkRestricted(BungeeSecurityManager.java:29)
at net.md_5.bungee.BungeeSecurityManager.getThreadGroup(BungeeSecurityManager.java:50)
at java.lang.Thread.init(Unknown Source)
at java.lang.Thread.init(Unknown Source)
at java.lang.Thread.<init>(Unknown Source)
at java.util.TimerThread.<init>(Unknown Source)
at java.util.Timer.<init>(Unknown Source)
at java.util.Timer.<init>(Unknown Source)
at net.minecrell.serverlistplus.bungee.metrics.BungeeMetrics.<init>(BungeeMetrics.java:60)
at net.minecrell.serverlistplus.bungee.BungeePlugin.configChanged(BungeePlugin.java:225)
at net.minecrell.serverlistplus.bungee.core.ConfigurationManager.reload(ConfigurationManager.java:128)
at net.minecrell.serverlistplus.bungee.core.ServerListPlusCore.reload(ServerListPlusCore.java:154)
at net.minecrell.serverlistplus.bungee.core.ServerListPlusCore.<init>(ServerListPlusCore.java:80)
at net.minecrell.serverlistplus.bungee.BungeePlugin.onEnable(BungeePlugin.java:68)
at net.md_5.bungee.api.plugin.PluginManager.enablePlugins(PluginManager.java:207)
at net.md_5.bungee.BungeeCord.start(BungeeCord.java:223)
at net.md_5.bungee.Bootstrap.main(Bootstrap.java:65)
Probably because Mojang does not update https://s3.amazonaws.com/MinecraftSkins/
anymore. Probably need to switch to http://skins.minecraft.net/MinecraftSkins/
but char is not available there.
The pull request was merged so it is logged to the server log file but the old ServerListPlus.log
will not be removed.
08.07 17:04:42 [Server] WARNING Plugin performed restricted action, please inform them to use proper API methods: Thread Creation: Use scheduler
08.07 17:04:42 [Server] INFO java.security.AccessControlException: Plugin violation: Thread Creation: Use scheduler
08.07 17:04:42 [Server] INFO at net.md_5.bungee.BungeeSecurityManager.checkRestricted(BungeeSecurityManager.java:29)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.BungeeSecurityManager.getThreadGroup(BungeeSecurityManager.java:50)
08.07 17:04:42 [Server] INFO at java.lang.Thread.init(Unknown Source)
08.07 17:04:42 [Server] INFO at java.lang.Thread.init(Unknown Source)
08.07 17:04:42 [Server] INFO at java.lang.Thread.<init>(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.security.ssl.SSLSocketImpl$NotifyHandshakeThread.<init>(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
08.07 17:04:42 [Server] INFO at java.net.URL.openStream(Unknown Source)
08.07 17:04:42 [Server] INFO at javax.imageio.ImageIO.read(Unknown Source)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.core.favicon.FaviconHelper.fromURL(FaviconHelper.java:42)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.core.favicon.DefaultFaviconLoader$2.load(DefaultFaviconLoader.java:48)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.core.favicon.FaviconHelper.load(FaviconHelper.java:46)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.core.favicon.FaviconHelper.loadSafely(FaviconHelper.java:51)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.BungeePlugin$1.load(BungeePlugin.java:218)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.BungeePlugin$1.load(BungeePlugin.java:214)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
08.07 17:04:42 [Server] INFO at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827)
08.07 17:04:42 [Server] INFO at net.minecrell.serverlistplus.bungee.BungeePlugin$PingListener.onProxyPing(BungeePlugin.java:166)
08.07 17:04:42 [Server] INFO at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
08.07 17:04:42 [Server] INFO at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
08.07 17:04:42 [Server] INFO at java.lang.reflect.Method.invoke(Unknown Source)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.event.EventHandlerMethod.invoke(EventHandlerMethod.java:19)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.event.EventBus.post(EventBus.java:47)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.api.plugin.PluginManager.callEvent(PluginManager.java:354)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.connection.InitialHandler$2.done(InitialHandler.java:169)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.connection.InitialHandler$2.done(InitialHandler.java:159)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.connection.InitialHandler.handle(InitialHandler.java:183)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.protocol.packet.StatusRequest.handle(StatusRequest.java:29)
08.07 17:04:42 [Server] INFO at net.md_5.bungee.netty.HandlerBoss.channelRead(HandlerBoss.java:75)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318)
08.07 17:04:42 [Server] INFO at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318)
08.07 17:04:42 [Server] INFO at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:163)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318)
08.07 17:04:42 [Server] INFO at io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:150)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:332)
08.07 17:04:42 [Server] INFO at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:318)
08.07 17:04:42 [Server] INFO at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787)
08.07 17:04:42 [Server] INFO at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:125)
08.07 17:04:42 [Server] INFO at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:507)
08.07 17:04:42 [Server] INFO at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:464)
08.07 17:04:42 [Server] INFO at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:378)
08.07 17:04:42 [Server] INFO at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:350)
08.07 17:04:42 [Server] INFO at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
at java.lang.Thread.run(Unknown Source)
%online%
- Displays the online player count from the status packet.%max%
- Displays the max player count from the status packet.Required for the implementation of #3.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.