feat: implemented resource pack local repository
This commit is contained in:
parent
e32b047d47
commit
fadc170c62
@ -3,6 +3,7 @@ package ru.dragonestia.msb3.api;
|
|||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
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.ResourcePackRepositoryModule;
|
||||||
|
|
||||||
@Log4j2
|
@Log4j2
|
||||||
public class Bootstrap {
|
public class Bootstrap {
|
||||||
@ -12,7 +13,8 @@ public class Bootstrap {
|
|||||||
|
|
||||||
FlatWorldModule.init(GameMode.ADVENTURE);
|
FlatWorldModule.init(GameMode.ADVENTURE);
|
||||||
|
|
||||||
boot.getResourcePackManager().compile();
|
ResourcePackRepositoryModule.init(boot, "0.0.0.0", 7270);
|
||||||
|
|
||||||
boot.start("0.0.0.0", 25565);
|
boot.start("0.0.0.0", 25565);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,76 @@
|
|||||||
|
package ru.dragonestia.msb3.api.module;
|
||||||
|
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import net.kyori.adventure.resource.ResourcePackCallback;
|
||||||
|
import net.kyori.adventure.resource.ResourcePackInfo;
|
||||||
|
import net.kyori.adventure.resource.ResourcePackRequest;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.minestom.server.MinecraftServer;
|
||||||
|
import net.minestom.server.event.player.PlayerSpawnEvent;
|
||||||
|
import ru.dragonestia.msb3.api.ServerBootstrap;
|
||||||
|
import team.unnamed.creative.BuiltResourcePack;
|
||||||
|
import team.unnamed.creative.base.Writable;
|
||||||
|
import team.unnamed.creative.server.ResourcePackServer;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.util.Formatter;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static net.kyori.adventure.text.format.NamedTextColor.RED;
|
||||||
|
|
||||||
|
public class ResourcePackRepositoryModule {
|
||||||
|
|
||||||
|
private static boolean used = false;
|
||||||
|
|
||||||
|
private ResourcePackRepositoryModule() {}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public static synchronized void init(ServerBootstrap bootstrap, String address, int port) {
|
||||||
|
if (used) return;
|
||||||
|
used = true;
|
||||||
|
|
||||||
|
bootstrap.getResourcePackManager().compile();
|
||||||
|
|
||||||
|
var file = new File("./resource-pack.zip");
|
||||||
|
var hash = calculateHash(file);
|
||||||
|
var uuid = UUID.randomUUID();
|
||||||
|
var server = ResourcePackServer.server()
|
||||||
|
.address(address, port)
|
||||||
|
.pack(BuiltResourcePack.of(Writable.file(file), hash))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
MinecraftServer.getGlobalEventHandler().addListener(PlayerSpawnEvent.class, event -> {
|
||||||
|
var player = event.getPlayer();
|
||||||
|
|
||||||
|
player.sendResourcePacks(ResourcePackRequest.resourcePackRequest()
|
||||||
|
.packs(ResourcePackInfo.resourcePackInfo(uuid, URI.create("http://" + address + ":" + port), hash))
|
||||||
|
.replace(false)
|
||||||
|
.prompt(Component.text("Пакет ресурсов необходим для продолжения игры.", RED))
|
||||||
|
.required(true)
|
||||||
|
.callback(ResourcePackCallback.noOp())
|
||||||
|
.build());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
private static String calculateHash(File file) {
|
||||||
|
MessageDigest digest = MessageDigest.getInstance("SHA-1");
|
||||||
|
|
||||||
|
try (InputStream fis = new FileInputStream(file)) {
|
||||||
|
byte[] bytes = fis.readAllBytes();
|
||||||
|
return byteArray2Hex(digest.digest(bytes));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String byteArray2Hex(final byte[] hash) {
|
||||||
|
Formatter formatter = new Formatter();
|
||||||
|
for (byte b: hash) formatter.format("%02x", b);
|
||||||
|
return formatter.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user