From 69a255630383d20c58ff1fcd8e616bdc649d5b32 Mon Sep 17 00:00:00 2001 From: melontini <104443436+melontini@users.noreply.github.com> Date: Sat, 27 Apr 2024 14:11:26 +0700 Subject: [PATCH] Improve `cmd:arithmetica` error messages. --- CHANGELOG.md | 2 +- .../impl/event/data/types/ExtractionTypes.java | 7 +++---- .../commander/impl/expression/EvalUtils.java | 12 ++++++++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af2d1a1..22edb97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,3 @@ ### What's New: -* Added `hasContext` function to expressions. Allows checking if loot context has the required parameter: `if(hasContext("tool"), "Hi", "Bye")` \ No newline at end of file +* Slightly improved error messages returned by `cmd:arithmetica`. \ No newline at end of file diff --git a/src/main/java/me/melontini/commander/impl/event/data/types/ExtractionTypes.java b/src/main/java/me/melontini/commander/impl/event/data/types/ExtractionTypes.java index 4595383..726c259 100644 --- a/src/main/java/me/melontini/commander/impl/event/data/types/ExtractionTypes.java +++ b/src/main/java/me/melontini/commander/impl/event/data/types/ExtractionTypes.java @@ -6,16 +6,15 @@ import me.melontini.dark_matter.api.data.codecs.ExtraCodecs; import net.minecraft.loot.context.LootContextParameter; import net.minecraft.util.Identifier; - -import java.util.Objects; +import org.jetbrains.annotations.Nullable; public class ExtractionTypes { private static final BiMap> KNOWN_PARAMETERS = HashBiMap.create(); public static final Codec> CODEC = ExtraCodecs.mapLookup(Identifier.CODEC, KNOWN_PARAMETERS); - public static LootContextParameter getParameter(Identifier identifier) { - return Objects.requireNonNull(KNOWN_PARAMETERS.get(identifier), () -> "No such loot context parameter %s!".formatted(identifier)); + public static @Nullable LootContextParameter getParameter(Identifier identifier) { + return KNOWN_PARAMETERS.get(identifier); } public static void register(LootContextParameter parameter) { diff --git a/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java b/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java index 08afd93..9ba4471 100644 --- a/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java +++ b/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java @@ -157,11 +157,19 @@ public static class MapBasedDataAccessor implements DataAccessorIfc { @Override public @Nullable EvaluationValue getData(String variable) { - var id = new Identifier(variable.replace("__idcl__", ":")); + var r = Identifier.validate(variable.replace("__idcl__", ":")); + if (r.error().isPresent()) { + throw new CmdEvalException("%s - %s".formatted(variable.replace("__idcl__", ":"), r.error().orElseThrow().message())); + } + + var id = r.result().orElseThrow(); var func = overrides.get(id); if (func != null) return CONFIGURATION.getEvaluationValueConverter().convertObject(func.apply(LOCAL.get()), CONFIGURATION); - var object = LOCAL.get().get(ExtractionTypes.getParameter(id)); + var param = ExtractionTypes.getParameter(id); + if (param == null) throw new CmdEvalException("%s is not a registered loot context parameter!".formatted(id)); + + var object = LOCAL.get().get(param); if (object == null) return null; return CONFIGURATION.getEvaluationValueConverter().convertObject(object, CONFIGURATION); }