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

51 lines
2.2 KiB
Java

package io.gitlab.jfronny.dynres.mixin;
import io.gitlab.jfronny.dynres.*;
import io.gitlab.jfronny.libjf.web.api.*;
import io.gitlab.jfronny.libjf.web.impl.util.*;
import net.minecraft.server.*;
import net.minecraft.server.dedicated.*;
import net.minecraft.text.*;
import org.jetbrains.annotations.*;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.injection.callback.*;
import java.io.*;
import java.nio.file.*;
import java.security.*;
import java.util.*;
@Mixin(ServerPropertiesHandler.class)
public abstract class ServerPropertiesHandlerMixin {
@Shadow @Nullable
private static Text parseResourcePackPrompt(String prompt) {
throw new IllegalStateException("Mixin not applied");
}
@Inject(method = "getServerResourcePackProperties(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 url, String sha1, @Nullable String hash, boolean required, String prompt, CallbackInfoReturnable<Optional<MinecraftServer.ServerResourcePackProperties>> cir) {
if (DynRes.packFile != null) {
sha1 = "";
if (Cfg.hashResources) {
try {
StringBuilder result = new StringBuilder();
for (byte b : MessageDigest.getInstance("SHA-1").digest(Files.readAllBytes(DynRes.packFile))) {
result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
}
sha1 = result.toString();
DynRes.LOGGER.info("Set hash to " + sha1);
} catch (IOException | NoSuchAlgorithmException e) {
DynRes.LOGGER.error("Failed to get hash, continuing with empty", e);
}
}
cir.setReturnValue(Optional.of(new MinecraftServer.ServerResourcePackProperties(
WebPaths.concat(WebServer.getInstance().getServerRoot(), "resources.zip"),
sha1,
required,
parseResourcePackPrompt(prompt)
)));
}
}
}