From 93e54f8d268fdc1402831074c63225eb76a0dd1a Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Fri, 3 Dec 2021 17:10:46 +0800 Subject: [PATCH] Configurable goal selector update interval Correspond to new vanilla optimization mechanic --- .../general/MobMixin_Optimization.java | 16 ++++++++++++++++ .../mixins.arclight.impl.forge.optimization.json | 1 + .../arclight/i18n/conf/OptimizationSpec.java | 7 +++++++ .../src/main/resources/META-INF/arclight.conf | 2 +- .../src/main/resources/META-INF/i18n/en_us.conf | 5 +++++ .../src/main/resources/META-INF/i18n/zh_cn.conf | 5 +++++ 6 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/MobMixin_Optimization.java diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/MobMixin_Optimization.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/MobMixin_Optimization.java new file mode 100644 index 00000000..bbdaa667 --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/MobMixin_Optimization.java @@ -0,0 +1,16 @@ +package io.izzel.arclight.common.mixin.optimization.general; + +import io.izzel.arclight.i18n.ArclightConfig; +import net.minecraft.world.entity.Mob; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; + +@Mixin(Mob.class) +public class MobMixin_Optimization { + + @ModifyConstant(method = "serverAiStep", constant = @Constant(intValue = 2)) + private int arclight$goalUpdateInterval(int orig) { + return ArclightConfig.spec().getOptimization().getGoalSelectorInterval(); + } +} diff --git a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json index 85f771d8..f87ff0d6 100644 --- a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json +++ b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json @@ -7,6 +7,7 @@ "mixins": [ "ClassInheritanceMultiMapMixin", "EntityDataManagerMixin_Optimize", + "MobMixin_Optimization", "VoxelShapesMixin", "activationrange.ActivationRangeMixin", "activationrange.EntityMixin_ActivationRange", diff --git a/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/OptimizationSpec.java b/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/OptimizationSpec.java index bd21c20f..eadc7411 100644 --- a/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/OptimizationSpec.java +++ b/i18n-config/src/main/java/io/izzel/arclight/i18n/conf/OptimizationSpec.java @@ -12,6 +12,9 @@ public class OptimizationSpec { @Setting("disable-data-fixer") private boolean disableDFU; + @Setting("goal-selector-update-interval") + private int goalSelectorInterval; + public boolean isCachePluginClass() { return cachePluginClass; } @@ -19,4 +22,8 @@ public class OptimizationSpec { public boolean isDisableDFU() { return disableDFU; } + + public int getGoalSelectorInterval() { + return goalSelectorInterval; + } } diff --git a/i18n-config/src/main/resources/META-INF/arclight.conf b/i18n-config/src/main/resources/META-INF/arclight.conf index 94fafed6..253381c0 100644 --- a/i18n-config/src/main/resources/META-INF/arclight.conf +++ b/i18n-config/src/main/resources/META-INF/arclight.conf @@ -4,9 +4,9 @@ locale { fallback = "zh_cn" } optimization { - remove-stream = true cache-plugin-class = true disable-data-fixer = false + goal-selector-update-interval = 2 } compatibility { material-property-overrides { diff --git a/i18n-config/src/main/resources/META-INF/i18n/en_us.conf b/i18n-config/src/main/resources/META-INF/i18n/en_us.conf index fa36a6b3..7110de39 100644 --- a/i18n-config/src/main/resources/META-INF/i18n/en_us.conf +++ b/i18n-config/src/main/resources/META-INF/i18n/en_us.conf @@ -88,6 +88,11 @@ comments { "Arclight and its developers are not reponsible for any data loss or corruption" "DO NOT USE IN PRODUCTION!" ] + goal-selector-update-interval.comment = [ + "Interval in ticks to update the goal selector" + "Higher values costs less resources" + "Cause mobs changing their goals less often" + ] } async-catcher.comment = [ "Async Catcher related settings" diff --git a/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf b/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf index 180fcbda..8b082b23 100644 --- a/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf +++ b/i18n-config/src/main/resources/META-INF/i18n/zh_cn.conf @@ -89,6 +89,11 @@ comments { "Arclight 及其开发者不对任何数据丢失或损害负责" "请不要在生产环境中使用" ] + goal-selector-update-interval.comment = [ + "实体目标选择器的更新间隔" + "数值越高消耗资源越少" + "导致实体更改目标速度变慢" + ] } async-catcher.comment = [ "异步捕获相关设置"