feat: implemented MotdModule
This commit is contained in:
parent
516129e898
commit
08c8aa43b8
@ -1,8 +1,10 @@
|
|||||||
package ru.dragonestia.msb3.api;
|
package ru.dragonestia.msb3.api;
|
||||||
|
|
||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import net.minestom.server.coordinate.Pos;
|
||||||
import net.minestom.server.entity.GameMode;
|
import net.minestom.server.entity.GameMode;
|
||||||
import ru.dragonestia.msb3.api.module.FlatWorldModule;
|
import ru.dragonestia.msb3.api.module.FlatWorldModule;
|
||||||
|
import ru.dragonestia.msb3.api.module.MotdModule;
|
||||||
import ru.dragonestia.msb3.api.module.ResourcePackRepositoryModule;
|
import ru.dragonestia.msb3.api.module.ResourcePackRepositoryModule;
|
||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
@ -11,6 +13,7 @@ public class Bootstrap {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
var boot = new ServerBootstrap();
|
var boot = new ServerBootstrap();
|
||||||
|
|
||||||
|
MotdModule.init("logo.png", "<gradient:#ff0059:#e06806><bold>msb3 server</bold></gradient>");
|
||||||
FlatWorldModule.init(GameMode.ADVENTURE);
|
FlatWorldModule.init(GameMode.ADVENTURE);
|
||||||
|
|
||||||
ResourcePackRepositoryModule.init(boot, "0.0.0.0", 7270);
|
ResourcePackRepositoryModule.init(boot, "0.0.0.0", 7270);
|
||||||
|
|||||||
@ -0,0 +1,63 @@
|
|||||||
|
package ru.dragonestia.msb3.api.module;
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
import net.minestom.server.event.server.ServerListPingEvent;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public class MotdModule {
|
||||||
|
|
||||||
|
private static boolean used = false;
|
||||||
|
|
||||||
|
private MotdModule() {}
|
||||||
|
|
||||||
|
public static void init(String internalResourceFile, String minimessage) {
|
||||||
|
var component = MiniMessage.miniMessage().deserialize(minimessage);
|
||||||
|
try (var stream = MotdModule.class.getClassLoader().getResourceAsStream(internalResourceFile)) {
|
||||||
|
assert stream != null;
|
||||||
|
init(stream.readAllBytes(), () -> component);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init(File icon, String minimessage) {
|
||||||
|
var component = MiniMessage.miniMessage().deserialize(minimessage);
|
||||||
|
init(icon, () -> component);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void init(File icon, Supplier<Component> serverName) {
|
||||||
|
try {
|
||||||
|
var image = ImageIO.read(icon);
|
||||||
|
var stream = new ByteArrayOutputStream();
|
||||||
|
ImageIO.write(image, "png", stream);
|
||||||
|
init(stream.toByteArray(), serverName);
|
||||||
|
stream.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static synchronized void init(byte[] imageBytes, Supplier<Component> serverName) {
|
||||||
|
if (used) return;
|
||||||
|
used = true;
|
||||||
|
|
||||||
|
MinecraftServer.getGlobalEventHandler().addListener(ServerListPingEvent.class, event -> {
|
||||||
|
var data = event.getResponseData();
|
||||||
|
|
||||||
|
data.setDescription(serverName.get());
|
||||||
|
data.setFavicon(favicon(imageBytes));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String favicon(byte[] bytes) {
|
||||||
|
return "data:image/png;base64," + Base64.getEncoder().encodeToString(bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user