diff --git a/build.gradle b/build.gradle index e540db7..e5b7eca 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,7 @@ ext { netty: ['io.netty:netty-all:4.1.22.Final'], slf4j: ["org.slf4j:slf4j-api:$slf4j_version", "org.slf4j:jcl-over-slf4j:$slf4j_version"], + commons: ['commons-io:commons-io:2.6'] ] } @@ -41,5 +42,6 @@ dependencies { /* COMPONENTS */ implementation library.guice implementation library.netty + implementation library.commons implementation project(':protocol') } \ No newline at end of file diff --git a/src/main/java/mc/server/network/impl/handler/StatusHandler.java b/src/main/java/mc/server/network/impl/handler/StatusHandler.java index b7bb44e..9289e1b 100644 --- a/src/main/java/mc/server/network/impl/handler/StatusHandler.java +++ b/src/main/java/mc/server/network/impl/handler/StatusHandler.java @@ -1,21 +1,24 @@ package mc.server.network.impl.handler; -import com.google.inject.Inject; import io.netty.channel.ChannelHandlerContext; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import mc.protocol.ProtocolConstant; import mc.protocol.dto.ServerInfo; import mc.protocol.status.client.StatusServerRequest; import mc.protocol.status.server.StatusServerResponse; import mc.protocol.text.Text; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.util.Base64; @Slf4j -@RequiredArgsConstructor(onConstructor = @__({ @Inject })) public class StatusHandler extends AbstractPacketHandler { + private static final String FAVICON_HEADER = "data:image/png;base64,"; + @Override - protected void channelRead1(ChannelHandlerContext ctx, StatusServerRequest packet) { + protected void channelRead1(ChannelHandlerContext ctx, StatusServerRequest packet) throws Exception { log.info("{}", packet); final ServerInfo.Version version = new ServerInfo.Version(); @@ -25,10 +28,16 @@ public class StatusHandler extends AbstractPacketHandler { final ServerInfo serverInfo = new ServerInfo(); serverInfo.setVersion(version); serverInfo.setDescription(Text.of("MC-SERVER 1.8.8")); + serverInfo.setFaviconBase64(getEmbeddedIconBase64()); StatusServerResponse response = new StatusServerResponse(); response.setServerInfoDto(serverInfo); ctx.channel().writeAndFlush(response); } + + private String getEmbeddedIconBase64() throws IOException { + return FAVICON_HEADER + Base64.getEncoder() + .encodeToString(IOUtils.toByteArray(getClass().getResourceAsStream("/icon.png"))); + } } diff --git a/src/main/resources/icon.png b/src/main/resources/icon.png new file mode 100644 index 0000000..d512fc5 Binary files /dev/null and b/src/main/resources/icon.png differ