From 8fdaab9214e25cfa4573c4e053b78740aa442fd8 Mon Sep 17 00:00:00 2001 From: FalsePattern <30945458+FalsePattern@users.noreply.github.com> Date: Sat, 12 Aug 2023 14:39:28 +0200 Subject: [PATCH] Fix some fatal errors when config validation fails in coremods --- .../lib/config/event/AllConfigSyncEvent.java | 7 +-- .../lib/config/event/ConfigSyncEvent.java | 9 ++- .../config/event/ConfigSyncRequestEvent.java | 6 +- .../event/ConfigValidationFailureEvent.java | 56 ++++++++----------- .../falsepattern/lib/internal/EventUtil.java | 36 ++++++++++++ .../lib/internal/FalsePatternLib.java | 1 + .../com/falsepattern/lib/internal/Share.java | 2 + 7 files changed, 73 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/falsepattern/lib/internal/EventUtil.java diff --git a/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java b/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java index 497a977..41d3ea0 100644 --- a/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/AllConfigSyncEvent.java @@ -21,9 +21,9 @@ package com.falsepattern.lib.config.event; import com.falsepattern.lib.StableAPI; +import com.falsepattern.lib.internal.EventUtil; import lombok.val; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -44,13 +44,12 @@ public class AllConfigSyncEvent extends Event { @StableAPI.Internal public static boolean postStart() { val event = new Start(); - FMLCommonHandler.instance().bus().post(event); - return !event.isCanceled(); + return EventUtil.postOnCommonBus(event); } @StableAPI.Internal public static void postEnd() { - FMLCommonHandler.instance().bus().post(new End()); + EventUtil.postOnCommonBus(new End()); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java index fb0de41..b2ca091 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncEvent.java @@ -21,9 +21,9 @@ package com.falsepattern.lib.config.event; import com.falsepattern.lib.StableAPI; +import com.falsepattern.lib.internal.EventUtil; import lombok.val; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -47,18 +47,17 @@ public class ConfigSyncEvent extends Event { @StableAPI.Internal public static boolean postStart(Class configClass) { val event = new Start(configClass); - FMLCommonHandler.instance().bus().post(event); - return !event.isCanceled(); + return EventUtil.postOnCommonBus(event); } @StableAPI.Internal public static void postEndSuccess(Class configClass) { - FMLCommonHandler.instance().bus().post(new End(configClass, true, null)); + EventUtil.postOnCommonBus(new End(configClass, true, null)); } @StableAPI.Internal public static void postEndFailure(Class configClass, Throwable error) { - FMLCommonHandler.instance().bus().post(new End(configClass, false, error)); + EventUtil.postOnCommonBus(new End(configClass, false, error)); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java index 8133bdc..22a8aa3 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigSyncRequestEvent.java @@ -21,9 +21,9 @@ package com.falsepattern.lib.config.event; import com.falsepattern.lib.StableAPI; +import com.falsepattern.lib.internal.EventUtil; import net.minecraft.entity.player.EntityPlayerMP; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.Event; import java.util.ArrayList; @@ -43,12 +43,12 @@ public class ConfigSyncRequestEvent extends Event { @StableAPI.Expose public static void postClient() { - FMLCommonHandler.instance().bus().post(new Client()); + EventUtil.postOnCommonBus(new Client()); } @StableAPI.Expose public static void postServer(List players) { - FMLCommonHandler.instance().bus().post(new Server(new ArrayList<>(players))); + EventUtil.postOnCommonBus(new Server(new ArrayList<>(players))); } @StableAPI(since = "0.10.0") diff --git a/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java b/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java index ea6855d..7a38cb7 100644 --- a/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java +++ b/src/main/java/com/falsepattern/lib/config/event/ConfigValidationFailureEvent.java @@ -22,6 +22,7 @@ package com.falsepattern.lib.config.event; import com.falsepattern.lib.StableAPI; import com.falsepattern.lib.config.Config; +import com.falsepattern.lib.internal.EventUtil; import com.falsepattern.lib.internal.Share; import com.falsepattern.lib.text.FormattedText; import com.falsepattern.lib.toasts.GuiToast; @@ -30,7 +31,6 @@ import com.falsepattern.lib.toasts.icon.ToastBG; import lombok.val; import net.minecraft.util.EnumChatFormatting; -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -61,53 +61,45 @@ public class ConfigValidationFailureEvent extends Event { @StableAPI.Internal public static void postNumericRangeOutOfBounds(Field field, int listIndex, String value, String min, String max) { - FMLCommonHandler.instance() - .bus() - .post(new NumericRangeOutOfBounds(field.getDeclaringClass(), - field.getName(), - listIndex, - value, - min, - max)); + EventUtil.postOnCommonBus(new NumericRangeOutOfBounds(field.getDeclaringClass(), + field.getName(), + listIndex, + value, + min, + max)); } @StableAPI.Internal public static void postSize(Field field, int requestedSize, boolean fixedSize, int maxSize, int defaultSize) { - FMLCommonHandler.instance() - .bus() - .post(new ListSizeOutOfBounds(field.getDeclaringClass(), - field.getName(), - requestedSize, - fixedSize, - maxSize, - defaultSize)); + EventUtil.postOnCommonBus(new ListSizeOutOfBounds(field.getDeclaringClass(), + field.getName(), + requestedSize, + fixedSize, + maxSize, + defaultSize)); } @StableAPI.Internal public static void postStringSizeOutOfBounds(Field field, int listIndex, String text, int maxSize) { - FMLCommonHandler.instance() - .bus() - .post(new StringSizeOutOfBounds(field.getDeclaringClass(), - field.getName(), - listIndex, - text, - maxSize)); + EventUtil.postOnCommonBus(new StringSizeOutOfBounds(field.getDeclaringClass(), + field.getName(), + listIndex, + text, + maxSize)); } @StableAPI.Internal public static void fieldIsNull(Field field, int listIndex) { - FMLCommonHandler.instance().bus().post(new FieldIsNull(field.getDeclaringClass(), field.getName(), listIndex)); + EventUtil.postOnCommonBus(new FieldIsNull(field.getDeclaringClass(), field.getName(), listIndex)); } @StableAPI.Internal public static void postStringPatternMismatch(Field field, int listIndex, String text, String pattern) { - FMLCommonHandler.instance() - .bus() - .post(new StringPatternMismatch(field.getDeclaringClass(), - field.getName(), - listIndex, - text, - pattern)); + EventUtil.postOnCommonBus(new StringPatternMismatch(field.getDeclaringClass(), + field.getName(), + listIndex, + text, + pattern)); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/falsepattern/lib/internal/EventUtil.java b/src/main/java/com/falsepattern/lib/internal/EventUtil.java new file mode 100644 index 0000000..2089a8b --- /dev/null +++ b/src/main/java/com/falsepattern/lib/internal/EventUtil.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2022-2023 FalsePattern + * All Rights Reserved + * + * The above copyright notice and this permission notice + * shall be included in all copies or substantial portions of the Software. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +package com.falsepattern.lib.internal; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.Event; + +public class EventUtil { + public static boolean postOnCommonBus(Event event) { + if (!Share.EARLY_INIT_DONE) { + return false; + } + return FMLCommonHandler.instance() + .bus() + .post(event); + } +} diff --git a/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java b/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java index a957d24..3b986aa 100644 --- a/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java +++ b/src/main/java/com/falsepattern/lib/internal/FalsePatternLib.java @@ -57,6 +57,7 @@ public class FalsePatternLib { @Mod.EventHandler public void construct(FMLConstructionEvent e) { proxy.construct(e); + Share.EARLY_INIT_DONE = true; } @Mod.EventHandler diff --git a/src/main/java/com/falsepattern/lib/internal/Share.java b/src/main/java/com/falsepattern/lib/internal/Share.java index 23fc49b..98a3474 100644 --- a/src/main/java/com/falsepattern/lib/internal/Share.java +++ b/src/main/java/com/falsepattern/lib/internal/Share.java @@ -46,6 +46,8 @@ public final class Share { } } + public static boolean EARLY_INIT_DONE = false; + public static void deprecatedWarning(Throwable stacktrace) { LOG.warn("DEPRECATED API CALLED!", stacktrace); }