51 lines
2.2 KiB
Java
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)
|
|
)));
|
|
}
|
|
}
|
|
}
|