diff --git a/src/main/java/ru/nanit/limbo/configuration/LimboConfig.java b/src/main/java/ru/nanit/limbo/configuration/LimboConfig.java index 21d5032..17cef9f 100644 --- a/src/main/java/ru/nanit/limbo/configuration/LimboConfig.java +++ b/src/main/java/ru/nanit/limbo/configuration/LimboConfig.java @@ -7,7 +7,10 @@ import org.spongepowered.configurate.yaml.YamlConfigurationLoader; import ru.nanit.limbo.server.data.*; import ru.nanit.limbo.util.Colors; -import java.io.*; +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; import java.net.SocketAddress; import java.nio.file.Files; import java.nio.file.Path; @@ -25,9 +28,11 @@ public final class LimboConfig { private Position spawnPosition; private int gameMode; + private boolean useBrandName; private boolean useJoinMessage; private boolean useBossBar; private boolean useTitle; + private String brandName; private String joinMessage; private BossBar bossBar; private Title title; @@ -59,10 +64,14 @@ public final class LimboConfig { dimensionType = conf.node("dimension").getString(); spawnPosition = conf.node("spawnPosition").get(Position.class); gameMode = conf.node("gameMode").getInt(); + useBrandName = conf.node("brandName", "enable").getBoolean(); useJoinMessage = conf.node("joinMessage", "enable").getBoolean(); useBossBar = conf.node("bossBar", "enable").getBoolean(); useTitle = conf.node("title", "enable").getBoolean(); + if(useBrandName) + brandName = conf.node("brandName", "content").getString(); + if (useJoinMessage) joinMessage = Colors.of(conf.node("joinMessage", "text").getString("")); @@ -144,6 +153,10 @@ public final class LimboConfig { return debugLevel; } + public boolean isUseBrandName() { + return useBrandName; + } + public boolean isUseJoinMessage() { return useJoinMessage; } @@ -156,6 +169,10 @@ public final class LimboConfig { return useTitle; } + public String getBrandName() { + return brandName; + } + public String getJoinMessage() { return joinMessage; } diff --git a/src/main/java/ru/nanit/limbo/configuration/SocketAddressSerializer.java b/src/main/java/ru/nanit/limbo/configuration/SocketAddressSerializer.java index 613f9c2..f5ff626 100644 --- a/src/main/java/ru/nanit/limbo/configuration/SocketAddressSerializer.java +++ b/src/main/java/ru/nanit/limbo/configuration/SocketAddressSerializer.java @@ -2,7 +2,6 @@ package ru.nanit.limbo.configuration; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.configurate.ConfigurationNode; -import org.spongepowered.configurate.serialize.SerializationException; import org.spongepowered.configurate.serialize.TypeSerializer; import java.lang.reflect.Type; diff --git a/src/main/java/ru/nanit/limbo/connection/ClientChannelInitializer.java b/src/main/java/ru/nanit/limbo/connection/ClientChannelInitializer.java index 827fc99..879eca1 100644 --- a/src/main/java/ru/nanit/limbo/connection/ClientChannelInitializer.java +++ b/src/main/java/ru/nanit/limbo/connection/ClientChannelInitializer.java @@ -4,9 +4,9 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.handler.timeout.ReadTimeoutHandler; -import ru.nanit.limbo.connection.pipeline.VarIntFrameDecoder; import ru.nanit.limbo.connection.pipeline.PacketDecoder; import ru.nanit.limbo.connection.pipeline.PacketEncoder; +import ru.nanit.limbo.connection.pipeline.VarIntFrameDecoder; import ru.nanit.limbo.connection.pipeline.VarIntLengthEncoder; import ru.nanit.limbo.server.LimboServer; diff --git a/src/main/java/ru/nanit/limbo/connection/ClientConnection.java b/src/main/java/ru/nanit/limbo/connection/ClientConnection.java index 9f8b142..e0b7473 100644 --- a/src/main/java/ru/nanit/limbo/connection/ClientConnection.java +++ b/src/main/java/ru/nanit/limbo/connection/ClientConnection.java @@ -10,13 +10,13 @@ import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import ru.nanit.limbo.LimboConstants; -import ru.nanit.limbo.protocol.ByteMessage; -import ru.nanit.limbo.protocol.PreEncodedPacket; -import ru.nanit.limbo.protocol.packets.login.*; -import ru.nanit.limbo.protocol.packets.play.*; import ru.nanit.limbo.connection.pipeline.PacketDecoder; import ru.nanit.limbo.connection.pipeline.PacketEncoder; +import ru.nanit.limbo.protocol.ByteMessage; +import ru.nanit.limbo.protocol.PreEncodedPacket; import ru.nanit.limbo.protocol.packets.PacketHandshake; +import ru.nanit.limbo.protocol.packets.login.*; +import ru.nanit.limbo.protocol.packets.play.*; import ru.nanit.limbo.protocol.packets.status.PacketStatusPing; import ru.nanit.limbo.protocol.packets.status.PacketStatusRequest; import ru.nanit.limbo.protocol.packets.status.PacketStatusResponse; @@ -41,6 +41,7 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { private static PreEncodedPacket PACKET_LOGIN_SUCCESS; private static PreEncodedPacket PACKET_JOIN_GAME; + private static PreEncodedPacket PACKET_PLUGIN_MESSAGE; private static PreEncodedPacket PACKET_PLAYER_ABILITIES; private static PreEncodedPacket PACKET_PLAYER_INFO; private static PreEncodedPacket PACKET_DECLARE_COMMANDS; @@ -221,6 +222,9 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { if (clientVersion.moreOrEqual(Version.V1_13)){ writePacket(PACKET_DECLARE_COMMANDS); + + if(PACKET_PLUGIN_MESSAGE != null) + writePacket(PACKET_PLUGIN_MESSAGE); } if (PACKET_BOSS_BAR != null && clientVersion.moreOrEqual(Version.V1_9)) @@ -411,6 +415,13 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { PACKET_PLAYER_INFO = PreEncodedPacket.of(info); PACKET_DECLARE_COMMANDS = PreEncodedPacket.of(declareCommands); + if (server.getConfig().isUseBrandName()){ + PacketPluginMessage pluginMessage = new PacketPluginMessage(); + pluginMessage.setChannel("minecraft:brand"); + pluginMessage.setMessage(server.getConfig().getBrandName()); + PACKET_PLUGIN_MESSAGE = PreEncodedPacket.of(pluginMessage); + } + if (server.getConfig().isUseJoinMessage()) { PacketChatMessage joinMessage = new PacketChatMessage(); joinMessage.setJsonData(server.getConfig().getJoinMessage()); diff --git a/src/main/java/ru/nanit/limbo/connection/pipeline/PacketDecoder.java b/src/main/java/ru/nanit/limbo/connection/pipeline/PacketDecoder.java index e25eff8..62d499b 100644 --- a/src/main/java/ru/nanit/limbo/connection/pipeline/PacketDecoder.java +++ b/src/main/java/ru/nanit/limbo/connection/pipeline/PacketDecoder.java @@ -3,7 +3,8 @@ package ru.nanit.limbo.connection.pipeline; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToMessageDecoder; -import ru.nanit.limbo.protocol.*; +import ru.nanit.limbo.protocol.ByteMessage; +import ru.nanit.limbo.protocol.Packet; import ru.nanit.limbo.protocol.registry.State; import ru.nanit.limbo.protocol.registry.Version; import ru.nanit.limbo.util.Logger; diff --git a/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginStart.java b/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginStart.java index eed9e08..3f768fa 100644 --- a/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginStart.java +++ b/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginStart.java @@ -1,6 +1,7 @@ package ru.nanit.limbo.protocol.packets.login; -import ru.nanit.limbo.protocol.*; +import ru.nanit.limbo.protocol.ByteMessage; +import ru.nanit.limbo.protocol.PacketIn; import ru.nanit.limbo.protocol.registry.Version; public class PacketLoginStart implements PacketIn { diff --git a/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketPluginMessage.java b/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketPluginMessage.java new file mode 100644 index 0000000..86997d9 --- /dev/null +++ b/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketPluginMessage.java @@ -0,0 +1,23 @@ +package ru.nanit.limbo.protocol.packets.play; + +import ru.nanit.limbo.protocol.ByteMessage; +import ru.nanit.limbo.protocol.PacketOut; +import ru.nanit.limbo.protocol.registry.Version; + +public class PacketPluginMessage implements PacketOut { + private String channel; + private String message; + + public void setChannel(String channel){ + this.channel = channel; + } + public void setMessage(String message){ + this.message = message; + } + + @Override + public void encode(ByteMessage msg, Version version) { + msg.writeString(channel); + msg.writeString(message); + } +} diff --git a/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusRequest.java b/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusRequest.java index ed18d34..ff3b92e 100644 --- a/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusRequest.java +++ b/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusRequest.java @@ -1,6 +1,7 @@ package ru.nanit.limbo.protocol.packets.status; -import ru.nanit.limbo.protocol.*; +import ru.nanit.limbo.protocol.ByteMessage; +import ru.nanit.limbo.protocol.PacketIn; import ru.nanit.limbo.protocol.registry.Version; public class PacketStatusRequest implements PacketIn { diff --git a/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusResponse.java b/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusResponse.java index bacbfd1..df08142 100644 --- a/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusResponse.java +++ b/src/main/java/ru/nanit/limbo/protocol/packets/status/PacketStatusResponse.java @@ -1,6 +1,7 @@ package ru.nanit.limbo.protocol.packets.status; -import ru.nanit.limbo.protocol.*; +import ru.nanit.limbo.protocol.ByteMessage; +import ru.nanit.limbo.protocol.PacketOut; import ru.nanit.limbo.protocol.registry.Version; import ru.nanit.limbo.server.LimboServer; diff --git a/src/main/java/ru/nanit/limbo/protocol/registry/State.java b/src/main/java/ru/nanit/limbo/protocol/registry/State.java index ce938ff..115d87f 100644 --- a/src/main/java/ru/nanit/limbo/protocol/registry/State.java +++ b/src/main/java/ru/nanit/limbo/protocol/registry/State.java @@ -1,18 +1,18 @@ package ru.nanit.limbo.protocol.registry; import ru.nanit.limbo.protocol.Packet; -import ru.nanit.limbo.protocol.packets.*; +import ru.nanit.limbo.protocol.packets.PacketHandshake; import ru.nanit.limbo.protocol.packets.login.*; import ru.nanit.limbo.protocol.packets.play.*; import ru.nanit.limbo.protocol.packets.status.PacketStatusPing; import ru.nanit.limbo.protocol.packets.status.PacketStatusRequest; import ru.nanit.limbo.protocol.packets.status.PacketStatusResponse; -import static ru.nanit.limbo.protocol.registry.Version.*; - import java.util.*; import java.util.function.Supplier; +import static ru.nanit.limbo.protocol.registry.Version.*; + public enum State { HANDSHAKING(0) { @@ -87,6 +87,14 @@ public enum State { map(0x24, V1_16_2, V1_16_4), map(0x26, V1_17, V1_18) ); + clientBound.register(PacketPluginMessage::new, + map(0x19, V1_13, V1_13_2), + map(0x18, V1_14, V1_14_4), + map(0x19, V1_15,V1_15_2), + map(0x18, V1_16, V1_16_1), + map(0x17, V1_16_2, V1_16_4), + map(0x18, V1_17, V1_18) + ); clientBound.register(PacketPlayerAbilities::new, map(0x39, V1_8, V1_8), map(0x2B, V1_9, V1_12), diff --git a/src/main/java/ru/nanit/limbo/server/LimboServer.java b/src/main/java/ru/nanit/limbo/server/LimboServer.java index 578b527..12dcb34 100644 --- a/src/main/java/ru/nanit/limbo/server/LimboServer.java +++ b/src/main/java/ru/nanit/limbo/server/LimboServer.java @@ -13,7 +13,6 @@ import io.netty.util.ResourceLeakDetector; import ru.nanit.limbo.configuration.LimboConfig; import ru.nanit.limbo.connection.ClientChannelInitializer; import ru.nanit.limbo.connection.ClientConnection; -import ru.nanit.limbo.protocol.registry.State; import ru.nanit.limbo.util.Logger; import ru.nanit.limbo.world.DimensionRegistry; diff --git a/src/main/java/ru/nanit/limbo/server/data/Title.java b/src/main/java/ru/nanit/limbo/server/data/Title.java index 9697f84..3519a25 100644 --- a/src/main/java/ru/nanit/limbo/server/data/Title.java +++ b/src/main/java/ru/nanit/limbo/server/data/Title.java @@ -2,7 +2,6 @@ package ru.nanit.limbo.server.data; import org.checkerframework.checker.nullness.qual.Nullable; import org.spongepowered.configurate.ConfigurationNode; -import org.spongepowered.configurate.serialize.SerializationException; import org.spongepowered.configurate.serialize.TypeSerializer; import ru.nanit.limbo.util.Colors; diff --git a/src/main/resources/settings.yml b/src/main/resources/settings.yml index 5345dd9..d9c78cf 100644 --- a/src/main/resources/settings.yml +++ b/src/main/resources/settings.yml @@ -34,6 +34,11 @@ spawnPosition: # 3 - Spectator (hide all UI bars) gameMode: 3 +# Server name which is shown under F3 +brandName: + enable: true + content: 'NanoLimbo' + # Message sends when player join to server joinMessage: enable: true