From 0dd79c29f3b131fe6ffe46674a3c2d5b36e4ca62 Mon Sep 17 00:00:00 2001 From: JFronny <33260128+JFronny@users.noreply.github.com> Date: Tue, 8 Sep 2020 13:41:43 +0200 Subject: [PATCH] Fix issue in previous builds and create ClientDebug client mod --- .../io/gitlab/jfronny/dynres/DebugClient.java | 10 ++++++ .../java/io/gitlab/jfronny/dynres/DynRes.java | 9 ++--- .../java/io/gitlab/jfronny/dynres/Logger.java | 7 ++++ .../mixin/ClientPlayNetworkHandlerMixin.java | 31 +++++++++++++++++ .../dynres/mixin/MinecraftServerMixin.java | 20 +++++++++++ .../jfronny/dynres/mixin/ServerInfoMixin.java | 17 ++++++++++ .../mixin/ServerPropertiesHandlerMixin.java | 33 +++++++------------ .../jfronny/dynres/web/RequestHandler.java | 9 ++--- .../web/bluemapcore/HttpConnection.java | 5 +-- .../dynres/web/bluemapcore/WebServer.java | 13 ++++---- src/main/resources/dynres.mixins.json | 11 +++++-- src/main/resources/fabric.mod.json | 5 ++- 12 files changed, 127 insertions(+), 43 deletions(-) create mode 100644 src/main/java/io/gitlab/jfronny/dynres/DebugClient.java create mode 100644 src/main/java/io/gitlab/jfronny/dynres/Logger.java create mode 100644 src/main/java/io/gitlab/jfronny/dynres/mixin/ClientPlayNetworkHandlerMixin.java create mode 100644 src/main/java/io/gitlab/jfronny/dynres/mixin/MinecraftServerMixin.java create mode 100644 src/main/java/io/gitlab/jfronny/dynres/mixin/ServerInfoMixin.java diff --git a/src/main/java/io/gitlab/jfronny/dynres/DebugClient.java b/src/main/java/io/gitlab/jfronny/dynres/DebugClient.java new file mode 100644 index 0000000..9f1259d --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/dynres/DebugClient.java @@ -0,0 +1,10 @@ +package io.gitlab.jfronny.dynres; + +import net.fabricmc.api.ClientModInitializer; + +public class DebugClient implements ClientModInitializer { + @Override + public void onInitializeClient() { + Logger.l.info("[DynRes DebugClient] This mod is not needed on clients. All it does here is log additional info"); + } +} diff --git a/src/main/java/io/gitlab/jfronny/dynres/DynRes.java b/src/main/java/io/gitlab/jfronny/dynres/DynRes.java index a06f1ab..07e93f5 100644 --- a/src/main/java/io/gitlab/jfronny/dynres/DynRes.java +++ b/src/main/java/io/gitlab/jfronny/dynres/DynRes.java @@ -14,8 +14,6 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.gui.FabricGuiEntry; import net.minecraft.server.command.CommandManager; import net.minecraft.text.LiteralText; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import java.io.File; import java.io.FileNotFoundException; @@ -26,7 +24,6 @@ public class DynRes implements DedicatedServerModInitializer { static WebServer server; public static File resFile; public static Cfg cfg; - public static Logger logger = LogManager.getLogger("DynRes"); static { AutoConfig.register(Cfg.class, JanksonConfigSerializer::new); @@ -44,7 +41,7 @@ public class DynRes implements DedicatedServerModInitializer { server.close(); server.join(); } catch (Throwable e) { - logger.error("Failed to stop web server", e); + Logger.l.error("Failed to stop web server", e); } }); @@ -64,14 +61,14 @@ public class DynRes implements DedicatedServerModInitializer { restartServer(); } catch (Exception e) { - logger.error("Failed to run restart command", e); + Logger.l.error("Failed to run restart command", e); context.getSource().sendError(new LiteralText(e.getMessage())); } return Command.SINGLE_SUCCESS; }))); } else { - DynRes.logger.error("DYNRES SHOULD NOT BE RUN ON INTERNAL SERVERS!"); + Logger.l.error("DYNRES SHOULD NOT BE RUN ON INTERNAL SERVERS!"); } }); diff --git a/src/main/java/io/gitlab/jfronny/dynres/Logger.java b/src/main/java/io/gitlab/jfronny/dynres/Logger.java new file mode 100644 index 0000000..8c7819c --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/dynres/Logger.java @@ -0,0 +1,7 @@ +package io.gitlab.jfronny.dynres; + +import org.apache.logging.log4j.LogManager; + +public class Logger { + public static final org.apache.logging.log4j.Logger l = LogManager.getLogger("DynRes"); +} diff --git a/src/main/java/io/gitlab/jfronny/dynres/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/io/gitlab/jfronny/dynres/mixin/ClientPlayNetworkHandlerMixin.java new file mode 100644 index 0000000..05b7e80 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/dynres/mixin/ClientPlayNetworkHandlerMixin.java @@ -0,0 +1,31 @@ +package io.gitlab.jfronny.dynres.mixin; + +import io.gitlab.jfronny.dynres.DynRes; +import io.gitlab.jfronny.dynres.Logger; +import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.network.packet.c2s.play.ResourcePackStatusC2SPacket; +import net.minecraft.network.packet.s2c.play.ResourcePackSendS2CPacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ClientPlayNetworkHandler.class) +public class ClientPlayNetworkHandlerMixin { + @Inject(at = @At("HEAD"), method = "sendResourcePackStatus(Lnet/minecraft/network/packet/c2s/play/ResourcePackStatusC2SPacket$Status;)V") + public void logSentResourcePackStatus(ResourcePackStatusC2SPacket.Status packStatus, CallbackInfo info) { + Logger.l.info("[SEND] ResourcePackStatus=" + packStatus); + } + + @Inject(at = @At("HEAD"), method = "onResourcePackSend(Lnet/minecraft/network/packet/s2c/play/ResourcePackSendS2CPacket;)V") + public void logResourcePackStatus(ResourcePackSendS2CPacket status, CallbackInfo info) { + Logger.l.info("[RECEIVE] ResourcePackUrl=" + status.getURL()); + Logger.l.info("[RECEIVE] ResourcePackSha1=" + status.getSHA1()); + } + + @Inject(at = @At("RETURN"), method = "validateResourcePackUrl(Ljava/lang/String;)Z") + public void logUrlValid(String url, CallbackInfoReturnable info) { + Logger.l.info("[CHECK] ResourcePackUrlValid=" + info.getReturnValue()); + } +} diff --git a/src/main/java/io/gitlab/jfronny/dynres/mixin/MinecraftServerMixin.java b/src/main/java/io/gitlab/jfronny/dynres/mixin/MinecraftServerMixin.java new file mode 100644 index 0000000..c4b177d --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/dynres/mixin/MinecraftServerMixin.java @@ -0,0 +1,20 @@ +package io.gitlab.jfronny.dynres.mixin; + +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MinecraftServer.class) +public class MinecraftServerMixin { + /** + * @author JFronny + * @reason loadWorldResourcePack overrides the custom resource pack link which would cause this mod to break + */ + @Overwrite + public void loadWorldResourcePack() { + + } +} diff --git a/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerInfoMixin.java b/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerInfoMixin.java new file mode 100644 index 0000000..8e1e174 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerInfoMixin.java @@ -0,0 +1,17 @@ +package io.gitlab.jfronny.dynres.mixin; + +import io.gitlab.jfronny.dynres.Logger; +import net.minecraft.client.network.ServerInfo; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ServerInfo.class) +public class ServerInfoMixin { + @Inject(at = @At("RETURN"), method = "getResourcePack()Lnet/minecraft/client/network/ServerInfo$ResourcePackState;") + public void getResPackState(CallbackInfoReturnable info) { + Logger.l.info("[RECEIVE] ResourcePackStatus=" + info.getReturnValue()); + } +} diff --git a/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerPropertiesHandlerMixin.java b/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerPropertiesHandlerMixin.java index ee86888..35fdbc0 100644 --- a/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerPropertiesHandlerMixin.java +++ b/src/main/java/io/gitlab/jfronny/dynres/mixin/ServerPropertiesHandlerMixin.java @@ -1,6 +1,7 @@ package io.gitlab.jfronny.dynres.mixin; import io.gitlab.jfronny.dynres.DynRes; +import io.gitlab.jfronny.dynres.Logger; import io.gitlab.jfronny.dynres.ServerPropertiesHandlerExt; import net.minecraft.server.dedicated.ServerPropertiesHandler; import net.minecraft.util.registry.DynamicRegistryManager; @@ -24,9 +25,6 @@ public class ServerPropertiesHandlerMixin implements ServerPropertiesHandlerExt @Shadow public String resourcePackSha1; - private String resourcePackSha1Temp; - private String resourcePackTemp; - @Inject(at = @At("RETURN"), method = "(Ljava/util/Properties;Lnet/minecraft/util/registry/DynamicRegistryManager;)V") public void init(Properties properties, DynamicRegistryManager dynamicRegistryManager, CallbackInfo info) { applyChanges(true); @@ -36,25 +34,18 @@ public class ServerPropertiesHandlerMixin implements ServerPropertiesHandlerExt public void applyChanges(boolean print) { resourcePack = DynRes.removePort(DynRes.simplifyElement(DynRes.cfg.baseLink)) + ":" + DynRes.getPort() + "/resources.zip"; if (print) - DynRes.logger.info("Pack link: " + resourcePack); - if (!Objects.equals(resourcePackTemp, resourcePack)) { - resourcePackTemp = resourcePack; - resourcePackSha1 = ""; - if (DynRes.cfg.hashResources) { - try { - FileInputStream fs = new FileInputStream(DynRes.resFile); - resourcePackSha1 = DigestUtils.sha1Hex(fs); - if (print) - DynRes.logger.info("Set hash to " + resourcePackSha1); - fs.close(); - } catch (IOException e) { - DynRes.logger.error("Failed to get hash, continuing with empty", e); - } + Logger.l.info("Pack link: " + resourcePack); + resourcePackSha1 = ""; + if (DynRes.cfg.hashResources) { + try { + FileInputStream fs = new FileInputStream(DynRes.resFile); + resourcePackSha1 = DigestUtils.sha1Hex(fs); + if (print) + Logger.l.info("Set hash to " + resourcePackSha1); + fs.close(); + } catch (IOException e) { + Logger.l.error("Failed to get hash, continuing with empty", e); } - resourcePackSha1Temp = resourcePackSha1; - } - else { - resourcePackSha1 = resourcePackSha1Temp; } resourcePackHash = resourcePackSha1; } diff --git a/src/main/java/io/gitlab/jfronny/dynres/web/RequestHandler.java b/src/main/java/io/gitlab/jfronny/dynres/web/RequestHandler.java index e795071..f867454 100644 --- a/src/main/java/io/gitlab/jfronny/dynres/web/RequestHandler.java +++ b/src/main/java/io/gitlab/jfronny/dynres/web/RequestHandler.java @@ -1,6 +1,7 @@ package io.gitlab.jfronny.dynres.web; import io.gitlab.jfronny.dynres.DynRes; +import io.gitlab.jfronny.dynres.Logger; import io.gitlab.jfronny.dynres.web.bluemapcore.HttpRequest; import io.gitlab.jfronny.dynres.web.bluemapcore.HttpRequestHandler; import io.gitlab.jfronny.dynres.web.bluemapcore.HttpResponse; @@ -17,10 +18,10 @@ public class RequestHandler implements HttpRequestHandler { public HttpResponse handle(HttpRequest request) { try { //TODO remove debug statement - DynRes.logger.info("Got connection"); + Logger.l.info("Got connection"); String method = request.getMethod().toUpperCase(); if (!method.equals("GET") && !method.equals("HEAD") && !method.equals("POST")) { - DynRes.logger.error("Invalid method: " + method); + Logger.l.error("Invalid method: " + method); HttpResponse resp = new HttpResponse(HttpStatusCode.BAD_REQUEST); resp.setData(method + " method not supported"); return resp; @@ -38,10 +39,10 @@ public class RequestHandler implements HttpRequestHandler { resp.setData(fs); return resp; } - DynRes.logger.error("An invalid file was requested: " + path); + Logger.l.error("An invalid file was requested: " + path); return new HttpResponse(HttpStatusCode.NOT_FOUND); } catch (Throwable e) { - DynRes.logger.error("Cough error while sending", e); + Logger.l.error("Cough error while sending", e); return new HttpResponse(HttpStatusCode.INTERNAL_SERVER_ERROR); } } diff --git a/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/HttpConnection.java b/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/HttpConnection.java index 1a92c37..32abd47 100644 --- a/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/HttpConnection.java +++ b/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/HttpConnection.java @@ -25,6 +25,7 @@ package io.gitlab.jfronny.dynres.web.bluemapcore; import io.gitlab.jfronny.dynres.DynRes; +import io.gitlab.jfronny.dynres.Logger; import java.io.IOException; import java.io.InputStream; @@ -78,7 +79,7 @@ public class HttpConnection implements Runnable { } catch (ConnectionClosedException e){ break; } catch (IOException e) { - DynRes.logger.error("Unexpected error while processing a HttpRequest!", e); + Logger.l.error("Unexpected error while processing a HttpRequest!", e); break; } } @@ -86,7 +87,7 @@ public class HttpConnection implements Runnable { try { close(); } catch (IOException e){ - DynRes.logger.error("Error while closing HttpConnection!", e); + Logger.l.error("Error while closing HttpConnection!", e); } } diff --git a/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/WebServer.java b/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/WebServer.java index 2190378..7ba541b 100644 --- a/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/WebServer.java +++ b/src/main/java/io/gitlab/jfronny/dynres/web/bluemapcore/WebServer.java @@ -25,6 +25,7 @@ package io.gitlab.jfronny.dynres.web.bluemapcore; import io.gitlab.jfronny.dynres.DynRes; +import io.gitlab.jfronny.dynres.Logger; import java.io.IOException; import java.net.InetAddress; @@ -69,11 +70,11 @@ public class WebServer extends Thread { server = new ServerSocket(port, maxConnections, bindAdress); server.setSoTimeout(0); } catch (IOException e){ - DynRes.logger.error("Error while starting the WebServer!", e); + Logger.l.error("Error while starting the WebServer!", e); return; } - DynRes.logger.info("WebServer started."); + Logger.l.info("WebServer started."); while (!server.isClosed() && server.isBound()){ @@ -84,18 +85,18 @@ public class WebServer extends Thread { connectionThreads.execute(new HttpConnection(server, connection, handler, 10, TimeUnit.SECONDS)); } catch (RejectedExecutionException e){ connection.close(); - DynRes.logger.error("Dropped an incoming HttpConnection! (Too many connections?)"); + Logger.l.error("Dropped an incoming HttpConnection! (Too many connections?)"); } } catch (SocketException e){ // this mainly occurs if the socket got closed, so we ignore this error } catch (IOException e){ - DynRes.logger.error("Error while creating a new HttpConnection!", e); + Logger.l.error("Error while creating a new HttpConnection!", e); } } - DynRes.logger.info("WebServer closed."); + Logger.l.info("WebServer closed."); } public int getPort() { @@ -118,7 +119,7 @@ public class WebServer extends Thread { server.close(); } } catch (IOException e) { - DynRes.logger.error("Error while closing WebServer!", e); + Logger.l.error("Error while closing WebServer!", e); } } diff --git a/src/main/resources/dynres.mixins.json b/src/main/resources/dynres.mixins.json index 3479b77..eea3b34 100644 --- a/src/main/resources/dynres.mixins.json +++ b/src/main/resources/dynres.mixins.json @@ -3,12 +3,17 @@ "minVersion": "0.8", "package": "io.gitlab.jfronny.dynres.mixin", "compatibilityLevel": "JAVA_8", - "mixins": [ + "client": [ + "ClientPlayNetworkHandlerMixin", + "ServerInfoMixin" ], "server": [ - "ServerPropertiesHandlerMixin" + "ServerPropertiesHandlerMixin", + "MinecraftServerMixin" ], "injectors": { "defaultRequire": 1 - } + }, + "mixins": [ + ] } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 1de747a..1d2d62b 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,10 +13,13 @@ }, "license": "MIT", "icon": "assets/dynres/icon.png", - "environment": "server", + "environment": "*", "entrypoints": { "server": [ "io.gitlab.jfronny.dynres.DynRes" + ], + "client": [ + "io.gitlab.jfronny.dynres.DebugClient" ] }, "mixins": [