diff --git a/docs/en_us.md b/docs/en_us.md index f9d5b4b..f12954c 100644 --- a/docs/en_us.md +++ b/docs/en_us.md @@ -53,6 +53,14 @@ yeet the server crash caused by ClassCastException. - Default value: `false` - Categories: `VULPEUS` +### disableIAECrash + +yeet the server crash caused by IllegalArgumentException. + +- Type: `boolean` +- Default value: `false` +- Categories: `VULPEUS` + ### disableSOECrash yeet the server crash caused by StackOverflowError. diff --git a/docs/ja_jp.md b/docs/ja_jp.md index 32c53e6..b00edbe 100644 --- a/docs/ja_jp.md +++ b/docs/ja_jp.md @@ -54,6 +54,14 @@ ClassCastException によるサーバーのクラッシュの無効化。 - 既定値: `false` - 分類: `VULPEUS` +### disableIAECrash + +IllegalArgumentException によるサーバーのクラッシュの無効化。 + +- Type: `boolean` +- Default value: `false` +- Categories: `VULPEUS` + ### disableSOECrash StackOverflowError によるサーバーのクラッシュの無効化。 diff --git a/src/main/java/com/vulpeus/vulpeus_carpet/VulpeusCarpetSettings.java b/src/main/java/com/vulpeus/vulpeus_carpet/VulpeusCarpetSettings.java index 12a992e..593f046 100644 --- a/src/main/java/com/vulpeus/vulpeus_carpet/VulpeusCarpetSettings.java +++ b/src/main/java/com/vulpeus/vulpeus_carpet/VulpeusCarpetSettings.java @@ -49,6 +49,9 @@ public class VulpeusCarpetSettings { @Rule(categories = {VULPEUS}) public static boolean disableSOECrash = false; + @Rule(categories = {VULPEUS}) + public static boolean disableIAECrash = false; + //#if MC<=12101 //$$ @Rule(categories = {BUGFIX, VULPEUS}) //#endif diff --git a/src/main/java/com/vulpeus/vulpeus_carpet/mixins/disableCrash/MixinMinecraftServer.java b/src/main/java/com/vulpeus/vulpeus_carpet/mixins/disableCrash/MixinMinecraftServer.java index aced867..4473706 100644 --- a/src/main/java/com/vulpeus/vulpeus_carpet/mixins/disableCrash/MixinMinecraftServer.java +++ b/src/main/java/com/vulpeus/vulpeus_carpet/mixins/disableCrash/MixinMinecraftServer.java @@ -20,25 +20,23 @@ package com.vulpeus.vulpeus_carpet.mixins.disableCrash; +import com.llamalad7.mixinextras.sugar.Local; import com.vulpeus.vulpeus_carpet.VulpeusCarpetSettings; import com.vulpeus.vulpeus_carpet.utils.sendMessage; -import java.util.Iterator; import java.util.function.BooleanSupplier; import net.minecraft.server.MinecraftServer; -import net.minecraft.server.world.ServerWorld; 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.LocalCapture; @Mixin(MinecraftServer.class) public class MixinMinecraftServer { @Inject(method = {"tickWorlds"}, at = { - @At(value = "INVOKE", target = "Lnet/minecraft/util/crash/CrashReport;create(Ljava/lang/Throwable;Ljava/lang/String;)Lnet/minecraft/util/crash/CrashReport;")}, locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) + @At(value = "INVOKE", target = "Lnet/minecraft/util/crash/CrashReport;create(Ljava/lang/Throwable;Ljava/lang/String;)Lnet/minecraft/util/crash/CrashReport;")}, cancellable = true) public void injectTickWorlds(BooleanSupplier shouldKeepTicking, CallbackInfo ci, - @SuppressWarnings("all") Iterator var2, ServerWorld serverWorld, Throwable throwable) { + @Local Throwable throwable) { Throwable causeErr = throwable.getCause(); @@ -51,5 +49,9 @@ public void injectTickWorlds(BooleanSupplier shouldKeepTicking, CallbackInfo ci, ci.cancel(); sendMessage.sendGlobalMessage((MinecraftServer) (Object) this, "now SOE Crashed."); } + if (VulpeusCarpetSettings.disableIAECrash && causeErr instanceof IllegalArgumentException) { + ci.cancel(); + sendMessage.sendGlobalMessage((MinecraftServer) (Object) this, "now SOE Crashed."); + } } } \ No newline at end of file diff --git a/src/main/resources/assets/vulpeus_carpet/lang/en_us.yml b/src/main/resources/assets/vulpeus_carpet/lang/en_us.yml index c03ced1..f5cc156 100644 --- a/src/main/resources/assets/vulpeus_carpet/lang/en_us.yml +++ b/src/main/resources/assets/vulpeus_carpet/lang/en_us.yml @@ -21,6 +21,9 @@ carpet: disableCCECrash: desc: yeet the server crash caused by ClassCastException. + disableIAECrash: + desc: yeet the server crash caused by IllegalArgumentException. + disableSOECrash: desc: yeet the server crash caused by StackOverflowError.