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 e45de6e..42bdd75 100644 --- a/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java +++ b/src/main/java/me/melontini/commander/impl/expression/EvalUtils.java @@ -67,8 +67,9 @@ public class EvalUtils { "DT_FORMAT_LOCAL_DATE", StringValue.of("yyyy-MM-dd")))); static { + LootContextDataAccessor dataAccessor = new LootContextDataAccessor(); var builder = ExpressionConfiguration.builder() - .dataAccessorSupplier(LootContextDataAccessor::new) + .dataAccessorSupplier(() -> dataAccessor) .parameterMapSupplier(Object2ReferenceOpenHashMap::new) .evaluationValueConverter(new ReflectiveValueConverter()) .allowOverwriteConstants(false) diff --git a/src/main/java/me/melontini/commander/impl/expression/LootContextDataAccessor.java b/src/main/java/me/melontini/commander/impl/expression/LootContextDataAccessor.java index aaadeaf..097ae19 100644 --- a/src/main/java/me/melontini/commander/impl/expression/LootContextDataAccessor.java +++ b/src/main/java/me/melontini/commander/impl/expression/LootContextDataAccessor.java @@ -23,7 +23,7 @@ public class LootContextDataAccessor implements DataAccessorIfc { new Identifier("luck"), LootContext::getLuck, new Identifier("library"), context -> ExpressionLibrary.get(context.getWorld().getServer())))); - // In most cases the expression is reused, so caching this helps us avoid some big overhead. + // We use the same instance for all expressions, so this can help save some overhead. private final Map> varCache = new Object2ReferenceOpenHashMap<>(); @@ -33,7 +33,7 @@ public class LootContextDataAccessor implements DataAccessorIfc { var supplier = varCache.get(variable); if (supplier != null) return supplier.apply( - (LootContext) context.context()[0]); // Parameters are cached by setData, so this is fine. + (LootContext) context.context()[0]); var r = Identifier.validate(variable); if (r.error().isPresent()) {