From 31fdf9fa436f8e20262e6f8105ab4e19930caeaf Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Sun, 6 Oct 2024 01:44:56 +0500 Subject: [PATCH] Fix unhandled message spam in replay mod --- .../core/level/DhClientLevel.java | 5 ++ .../core/logging/ConfigBasedLogger.java | 4 +- .../client/ClientNetworkState.java | 69 ++++++++++++------- 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java index 290ef1083..6319b4bfd 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhClientLevel.java @@ -130,6 +130,11 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel this.networkEventSource.registerHandler(FullDataPartialUpdateMessage.class, message -> { + if (MC_CLIENT.connectedToReplay()) + { + return; + } + try { FullDataSourceV2DTO dataSourceDto = this.networkState.decodeDataSourceAndReleaseBuffer(message.payload); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/logging/ConfigBasedLogger.java b/core/src/main/java/com/seibel/distanthorizons/core/logging/ConfigBasedLogger.java index ab59d0eab..7954d3ebf 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/logging/ConfigBasedLogger.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/logging/ConfigBasedLogger.java @@ -90,8 +90,10 @@ public class ConfigBasedLogger public void log(Level level, String str, Object... param) { + Message msg = param.length > 0 + ? this.logger.getMessageFactory().newMessage(str, param) + : this.logger.getMessageFactory().newMessage("{}", str); - Message msg = logger.getMessageFactory().newMessage(str, param); String msgStr = msg.getFormattedMessage(); if (mode.levelForFile.isLessSpecificThan(level)) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/ClientNetworkState.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/ClientNetworkState.java index cc5e646c5..c24bff051 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/ClientNetworkState.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/ClientNetworkState.java @@ -2,6 +2,7 @@ package com.seibel.distanthorizons.core.multiplayer.client; import com.google.common.cache.CacheBuilder; import com.seibel.distanthorizons.core.config.Config; +import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.logging.ConfigBasedLogger; import com.seibel.distanthorizons.core.multiplayer.config.SessionConfig; import com.seibel.distanthorizons.core.network.INetworkObject; @@ -10,12 +11,14 @@ import com.seibel.distanthorizons.core.network.event.internal.CloseInternalEvent import com.seibel.distanthorizons.core.network.event.internal.IncompatibleMessageInternalEvent; import com.seibel.distanthorizons.core.network.messages.base.CurrentLevelKeyMessage; import com.seibel.distanthorizons.core.network.messages.base.SessionConfigMessage; +import com.seibel.distanthorizons.core.network.messages.fullData.FullDataSourceResponseMessage; import com.seibel.distanthorizons.core.network.messages.fullData.FullDataSplitMessage; import com.seibel.distanthorizons.core.network.messages.fullData.FullDataPartialUpdateMessage; import com.seibel.distanthorizons.core.network.messages.fullData.FullDataPayload; import com.seibel.distanthorizons.core.network.session.NetworkSession; import com.seibel.distanthorizons.core.sql.dto.FullDataSourceV2DTO; import com.seibel.distanthorizons.core.util.LodUtil; +import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper; import com.seibel.distanthorizons.coreapi.ModInfo; import io.netty.buffer.ByteBufAllocator; import io.netty.buffer.CompositeByteBuf; @@ -32,6 +35,8 @@ public class ClientNetworkState implements Closeable protected static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(), () -> Config.Client.Advanced.Logging.logNetworkEvent.get()); + private static final IMinecraftClientWrapper MC_CLIENT = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); + private final ConcurrentMap fullDataBufferById = CacheBuilder.newBuilder() .expireAfterAccess(10, TimeUnit.SECONDS) @@ -85,41 +90,53 @@ public class ClientNetworkState implements Closeable } }); - this.networkSession.registerHandler(SessionConfigMessage.class, message -> - { - this.serverSupportStatus = EServerSupportStatus.FULL; - - LOGGER.info("Connection config has been changed: ["+message.config+"]."); - this.sessionConfig = message.config; - this.configReceived = true; - }); - this.networkSession.registerHandler(CloseInternalEvent.class, message -> { this.configReceived = false; }); - this.networkSession.registerHandler(FullDataSplitMessage.class, message -> - { - if (message.isFirst) - { - CompositeByteBuf composite = this.fullDataBufferById.remove(message.bufferId); - if (composite != null) - { - composite.release(); - LOGGER.debug("Released full data buffer ["+message.bufferId+"]: ["+composite+"]"); - } - } - - CompositeByteBuf byteBuffer = this.fullDataBufferById.computeIfAbsent(message.bufferId, bufferId -> ByteBufAllocator.DEFAULT.compositeBuffer()); - byteBuffer.addComponent(true, message.buffer); - LOGGER.debug("Full data buffer ["+message.bufferId+"]: ["+byteBuffer+"]."); - }); - this.networkSession.registerHandler(FullDataPartialUpdateMessage.class, msg -> { // Dummy handler to prevent unhandled message warnings }); + + if (MC_CLIENT.connectedToReplay()) + { + // Prevent handling specific messages because replay server is not interactive. + // Level keys are still good because they don't affect anything other than level loading. + + this.networkSession.registerHandler(SessionConfigMessage.class, message -> { }); + this.networkSession.registerHandler(FullDataSourceResponseMessage.class, message -> { }); + this.networkSession.registerHandler(FullDataSplitMessage.class, message -> { }); + } + else + { + this.networkSession.registerHandler(SessionConfigMessage.class, message -> + { + this.serverSupportStatus = EServerSupportStatus.FULL; + + LOGGER.info("Connection config has been changed: [" + message.config + "]."); + this.sessionConfig = message.config; + this.configReceived = true; + }); + + this.networkSession.registerHandler(FullDataSplitMessage.class, message -> + { + if (message.isFirst) + { + CompositeByteBuf composite = this.fullDataBufferById.remove(message.bufferId); + if (composite != null) + { + composite.release(); + LOGGER.debug("Released full data buffer [" + message.bufferId + "]: [" + composite + "]"); + } + } + + CompositeByteBuf byteBuffer = this.fullDataBufferById.computeIfAbsent(message.bufferId, bufferId -> ByteBufAllocator.DEFAULT.compositeBuffer()); + byteBuffer.addComponent(true, message.buffer); + LOGGER.debug("Full data buffer [" + message.bufferId + "]: [" + byteBuffer + "]."); + }); + } }