DynRes/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerPropertiesHandlerMixi...

59 lines
2.7 KiB
Java
Raw Normal View History

2020-09-07 13:29:44 +02:00
package io.gitlab.jfronny.dynres.mixin;
2023-09-22 20:59:35 +02:00
import io.gitlab.jfronny.dynres.Cfg;
import io.gitlab.jfronny.dynres.DynRes;
import io.gitlab.jfronny.libjf.web.api.v1.WebServer;
import io.gitlab.jfronny.libjf.web.impl.util.WebPaths;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.dedicated.ServerPropertiesHandler;
import net.minecraft.text.Text;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
2020-09-07 13:29:44 +02:00
2023-09-22 20:59:35 +02:00
import java.io.IOException;
2023-12-07 20:51:27 +01:00
import java.nio.charset.StandardCharsets;
2023-09-22 20:59:35 +02:00
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Optional;
2023-12-07 20:51:27 +01:00
import java.util.UUID;
2020-09-07 13:29:44 +02:00
@Mixin(ServerPropertiesHandler.class)
2022-06-08 13:51:43 +02:00
public abstract class ServerPropertiesHandlerMixin {
@Shadow @Nullable
private static Text parseResourcePackPrompt(String prompt) {
throw new IllegalStateException("Mixin not applied");
}
2020-09-07 13:29:44 +02:00
2023-12-07 20:51:27 +01:00
@Inject(method = "getServerResourcePackProperties(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLjava/lang/String;)Ljava/util/Optional;", at = @At("HEAD"), cancellable = true)
private static void getServerResourcePackProperties(String id, String url, String sha1, String hash, boolean required, String prompt, CallbackInfoReturnable<Optional<MinecraftServer.ServerResourcePackProperties>> cir) {
2022-03-01 15:02:48 +01:00
if (DynRes.packFile != null) {
2022-06-08 13:51:43 +02:00
sha1 = "";
2021-11-30 20:53:13 +01:00
if (Cfg.hashResources) {
2021-12-30 13:36:10 +01:00
try {
2021-12-31 11:28:19 +01:00
StringBuilder result = new StringBuilder();
2022-03-01 15:02:48 +01:00
for (byte b : MessageDigest.getInstance("SHA-1").digest(Files.readAllBytes(DynRes.packFile))) {
2021-12-31 11:28:19 +01:00
result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
}
2022-06-08 13:51:43 +02:00
sha1 = result.toString();
2024-04-25 19:46:53 +02:00
DynRes.LOGGER.info("Set hash to {0}", sha1);
2021-12-30 13:36:10 +01:00
} catch (IOException | NoSuchAlgorithmException e) {
2021-11-30 20:53:13 +01:00
DynRes.LOGGER.error("Failed to get hash, continuing with empty", e);
}
2020-09-07 15:03:15 +02:00
}
2023-12-07 20:51:27 +01:00
url = WebPaths.concat(WebServer.getInstance().getServerRoot(), "resources.zip");
2022-06-08 13:51:43 +02:00
cir.setReturnValue(Optional.of(new MinecraftServer.ServerResourcePackProperties(
2023-12-07 20:51:27 +01:00
UUID.nameUUIDFromBytes(url.getBytes(StandardCharsets.UTF_8)),
url,
2022-06-08 13:51:43 +02:00
sha1,
required,
parseResourcePackPrompt(prompt)
)));
2020-09-07 15:03:15 +02:00
}
2020-09-07 13:29:44 +02:00
}
}