Войти или зарегистрироваться

[Tutorial] Сообщения при наводе на список игроков

StealerSlain

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
StealerSlain
Сразу к делу. В 1.7, благодаря новым нововведениям можно делать сообщения в списке серверов, при наведения курсора на список игроков. Примерно так:
FhykU1U.png

78b0dd2925d7c6af2563deea9a92c47b.png

Для того, чтобы сделать это, вам обязательно понадобится ProtocolLib.

Пример кода из первого изображения:

Код:
@Override
public void onEnable() {
ProtocolLibrary.getProtocolManager().addPacketListener(
new PacketAdapter(this, ListenerPriority.NORMAL,
Arrays.asList(PacketType.Status.Server.OUT_SERVER_INFO), ListenerOptions.ASYNC) {
@Override
public void onPacketSending(PacketEvent event) { //регистрируем event, отправляющий пакеты
handlePing(event.getPacket().getServerPings().read(0));
}
});
}
private void handlePing(WrappedServerPing ping) {
ping.setPlayers(Arrays.asList(
new WrappedGameProfile("id1", ChatColor.RED + "rubukkit " + ChatColor.RESET + //добавляем 1 строку
"tutorial"),
new WrappedGameProfile("id2", "Hello. This is line number two."), //добавляем 2 строку
new WrappedGameProfile("id3", "Hello. This is line number three.") //добавляем 3 строку
));
}

Удачи :)

извините за кривое оформление, торопился
 
Код:
[18:19:09 ERROR]: [GuiServerInfo] Unhandled exception occured in onPacketSending(PacketEvent) for GuiServerInfo
java.lang.ArrayStoreException: net.minecraft.util.com.mojang.authlib.GameProfile
    at com.comphenix.protocol.wrappers.BukkitConverters$2.getGenericValue(BukkitConverters.java:287) ~[ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.wrappers.BukkitConverters$2.getGenericValue(BukkitConverters.java:261) ~[ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.wrappers.BukkitConverters$IgnoreNullConverter.getGeneric(BukkitConverters.java:111) ~[ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.wrappers.WrappedServerPing.setPlayers(WrappedServerPing.java:188) ~[ProtocolLib-3.0.1.jar:?]
    at ServerInfo.ServerInfo.handlePing(ServerInfo.java:34) ~[GuiServerInfo.jar:?]
    at ServerInfo.ServerInfo.access$0(ServerInfo.java:33) ~[GuiServerInfo.jar:?]
    at ServerInfo.ServerInfo$1.onPacketSending(ServerInfo.java:25) ~[GuiServerInfo.jar:?]
    at com.comphenix.protocol.injector.SortedPacketListenerList.invokeSendingListener(SortedPacketListenerList.java:195) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.SortedPacketListenerList.invokePacketSending(SortedPacketListenerList.java:149) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.PacketFilterManager.handlePacket(PacketFilterManager.java:576) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.PacketFilterManager.invokePacketSending(PacketFilterManager.java:552) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.netty.NettyProtocolInjector.packetQueued(NettyProtocolInjector.java:251) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.netty.NettyProtocolInjector.onPacketSending(NettyProtocolInjector.java:202) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.netty.ChannelInjector.processSending(ChannelInjector.java:260) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.netty.ChannelInjector.encode(ChannelInjector.java:317) [ProtocolLib-3.0.1.jar:?]
    at com.comphenix.protocol.injector.netty.ChannelInjector$1.encode(ChannelInjector.java:227) [ProtocolLib-3.0.1.jar:?]
    at net.minecraft.util.io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:111) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at com.comphenix.protocol.injector.netty.ChannelProxy.writeAndFlush(ChannelProxy.java:268) [ProtocolLib-3.0.1.jar:?]
    at net.minecraft.server.v1_7_R1.NetworkManager.b(NetworkManager.java:108) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.NetworkManager.handle(NetworkManager.java:88) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.PacketStatusListener.a(PacketStatusListener.java:55) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.PacketStatusInStart.a(SourceFile:25) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.PacketStatusInStart.handle(SourceFile:8) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.NetworkManager.a(NetworkManager.java:72) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.NetworkManager.channelRead0(NetworkManager.java:192) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:173) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.server.v1_7_R1.LegacyPingHandler.channelRead(SourceFile:89) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.handler.timeout.ReadTimeoutHandler.channelRead(ReadTimeoutHandler.java:149) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:100) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at net.minecraft.util.io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [craftbukkit.jar:git-Bukkit-1.7.2-R0.1-b2969jnks]
    at java.lang.Thread.run(Thread.java:744) [?:1.7.0_45]
[18:19:09 ERROR]: Parameters:
  net.minecraft.server.v1_7_R1.PacketStatusOutServerInfo@6611e305[
    b=net.minecraft.server.v1_7_R1.ServerPing@22bf8de6
    timestamp=1387462749475
  ]
Версия 1.7.2, ProtocolLib 3.0.1
 
Сразу к делу. В 1.7, благодаря новым нововведениям можно делать сообщения в списке серверов, при наведения курсора на список игроков. Примерно так:
FhykU1U.png

78b0dd2925d7c6af2563deea9a92c47b.png

Для того, чтобы сделать это, вам обязательно понадобится ProtocolLib.

Пример кода из первого изображения:

Код:
@Override
public void onEnable() {
ProtocolLibrary.getProtocolManager().addPacketListener(
new PacketAdapter(this, ListenerPriority.NORMAL,
Arrays.asList(PacketType.Status.Server.OUT_SERVER_INFO), ListenerOptions.ASYNC) {
@Override
public void onPacketSending(PacketEvent event) { //регистрируем event, отправляющий пакеты
handlePing(event.getPacket().getServerPings().read(0));
}
});
}
private void handlePing(WrappedServerPing ping) {
ping.setPlayers(Arrays.asList(
new WrappedGameProfile("id1", ChatColor.RED + "rubukkit " + ChatColor.RESET + //добавляем 1 строку
"tutorial"),
new WrappedGameProfile("id2", "Hello. This is line number two."), //добавляем 2 строку
new WrappedGameProfile("id3", "Hello. This is line number three.") //добавляем 3 строку
));
}

Удачи :)

извините за кривое оформление, торопился
Вот! Вот под что я жду раздел на этом недофоруме.
 
Интересно... Надо бы попробовать сделать такое на сервере, а в моем-то случае это может мне помочь!
 
Как пишет Comphenix, тебе нужно скачать девелоперскую версию протокола с его Jenkins'a.
Спасибо, работает
Как пишет Comphenix, тебе нужно скачать девелоперскую версию протокола с его Jenkins'a.
Могу ли я сделать и выложить такой плагин?
Сделал уже:
http://www.rubukkit.org/threads/mech-guiserverinfo-v1-0-Ваш-текст-вместо-списка-игроков-1-7-2-r0-2.55782/
 
serega6531, молодец, я тоже сегодня добрался - добавил в FakePlayersOnline эту фишку.
 
Назад
Верх