From 2a3aadc2fa516cc5257266299f2e7904585da5ff Mon Sep 17 00:00:00 2001 From: s809 <11816467-s809@users.noreply.gitlab.com> Date: Sat, 10 Aug 2024 19:49:40 +0500 Subject: [PATCH] Make error handling somewhat work --- .../common/AbstractModInitializer.java | 31 +++++++++++++++++++ .../common/AbstractPluginPacketSender.java | 11 ++++--- coreSubProjects | 2 +- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java index 6f926c9fb..3d68bc824 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractModInitializer.java @@ -9,6 +9,7 @@ import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterDh import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; import com.seibel.distanthorizons.common.wrappers.DependencySetup; import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftDedicatedServerWrapper; +import com.seibel.distanthorizons.common.wrappers.misc.ServerPlayerWrapper; import com.seibel.distanthorizons.core.api.internal.SharedApi; import com.seibel.distanthorizons.core.config.Config; import com.seibel.distanthorizons.core.config.ConfigBase; @@ -19,7 +20,11 @@ import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; import com.seibel.distanthorizons.core.jar.ModJarInfo; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; +import com.seibel.distanthorizons.core.network.messages.MessageRegistry; +import com.seibel.distanthorizons.core.network.messages.base.CodecCrashMessage; import com.seibel.distanthorizons.core.util.objects.Pair; +import com.seibel.distanthorizons.core.world.DhServerWorld; +import com.seibel.distanthorizons.core.wrapperInterfaces.misc.IPluginPacketSender; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModAccessor; import com.seibel.distanthorizons.core.wrapperInterfaces.modAccessor.IModChecker; import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; @@ -31,6 +36,7 @@ import org.apache.logging.log4j.Logger; import java.lang.invoke.MethodHandles; import java.util.HashMap; +import java.util.Objects; import java.util.function.BiFunction; import java.util.function.Consumer; import java.util.function.Function; @@ -284,6 +290,31 @@ public abstract class AbstractModInitializer } this.commandDispatcher.register(builder); + + //noinspection ConstantValue + if (true) + { + MessageRegistry.INSTANCE.registerMessage(CodecCrashMessage.class, CodecCrashMessage::new); + LiteralArgumentBuilder dhcrash = literal("dhcrash") + .requires(source -> source.hasPermission(4)) + .then(literal("encode") + .executes(c -> { + assert SharedApi.getIDhServerWorld() != null; + ((DhServerWorld) SharedApi.getIDhServerWorld()).remotePlayerConnectionHandler + .getConnectedPlayer(ServerPlayerWrapper.getWrapper(Objects.requireNonNull(c.getSource().getPlayer()))) + .session.sendMessage(new CodecCrashMessage(CodecCrashMessage.ECrashPhase.ENCODE)); + return 1; + })) + .then(literal("decode") + .executes(c -> { + assert SharedApi.getIDhServerWorld() != null; + ((DhServerWorld) SharedApi.getIDhServerWorld()).remotePlayerConnectionHandler + .getConnectedPlayer(ServerPlayerWrapper.getWrapper(Objects.requireNonNull(c.getSource().getPlayer()))) + .session.sendMessage(new CodecCrashMessage(CodecCrashMessage.ECrashPhase.DECODE)); + return 1; + })); + this.commandDispatcher.register(dhcrash); + } } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java index d034742d2..1ce9a4748 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/AbstractPluginPacketSender.java @@ -68,8 +68,8 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender catch (Exception e) { LOGGER.error("Failed to decode message", e); - LOGGER.error("Buffer: {}", in); - LOGGER.error("Buffer contents: {}", ByteBufUtil.hexDump(in)); + LOGGER.error("Buffer:", in); + LOGGER.error("Buffer contents:", ByteBufUtil.hexDump(in)); return new ProtocolErrorEvent(e, message); } @@ -95,12 +95,13 @@ public abstract class AbstractPluginPacketSender implements IPluginPacketSender catch (Exception e) { LOGGER.error("Failed to encode message", e); - LOGGER.error("Message: {}", message); - message.session.tryHandleMessage(new ProtocolErrorEvent(e, message)); + LOGGER.error("Message:", message); + + message.getSession().tryHandleMessage(new ProtocolErrorEvent(e, message)); // Encode close reason message instead out.resetWriterIndex(); - message = new CloseReasonMessage("Internal error on opposing side"); + message = new CloseReasonMessage("Internal error on other side"); out.writeShort(MessageRegistry.INSTANCE.getMessageId(message)); message.encode(out); } diff --git a/coreSubProjects b/coreSubProjects index dee13a4ec..ba3677b64 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit dee13a4ec470e8ef1b098f8a6569b90033144830 +Subproject commit ba3677b6419aaa53fed3045cbc8f3fc18c66ce54