From f5ba5e065f5c5c2b9e89646f1601d110acc30865 Mon Sep 17 00:00:00 2001 From: Syric <76715986+Syrikal@users.noreply.github.com> Date: Wed, 18 Jan 2023 21:35:59 -0500 Subject: [PATCH 1/2] Added entity whitelist Added the ability to whitelist entities, exempting them from distance-based culling --- .../magnesium_extras/config/MagnesiumExtrasConfig.java | 6 ++++++ .../mixins/EntityDistance/MaxDistanceEntity.java | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java b/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java index a8eb5ec..d2939c8 100644 --- a/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java +++ b/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java @@ -4,8 +4,11 @@ import com.electronwill.nightconfig.core.io.WritingMode; import lombok.val; import me.jellysquid.mods.sodium.client.gui.options.TextProvider; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.ForgeConfigSpec; import java.nio.file.Path; +import java.util.Collections; +import java.util.List; import static net.minecraftforge.common.ForgeConfigSpec.ConfigValue; public class MagnesiumExtrasConfig @@ -24,6 +27,7 @@ public class MagnesiumExtrasConfig public static ConfigValue maxEntityRenderDistanceSquare; public static ConfigValue maxEntityRenderDistanceY; + public static ConfigValue> entityWhitelist; public static ConfigValue fog; public static ConfigValue enableDistanceChecks; @@ -86,6 +90,8 @@ public class MagnesiumExtrasConfig maxEntityRenderDistanceSquare = b.define("(Entity) Max Horizontal Render Distance [Squared, Default 64^2]", 4096); maxEntityRenderDistanceY = b.define("(Entity) Max Vertical Render Distance [Raw, Default 32]", 32); + entityWhitelist = b.comment("List of entities to not cull based on distance." + + "Example: \"minecraft:bat\"").defineListAllowEmpty(Collections.singletonList("Entity Whitelist"), Collections::emptyList, (s) -> ResourceLocation.tryParse((String) s) != null); }); builder.Block("Zoom", b -> { diff --git a/src/main/java/vice/magnesium_extras/mixins/EntityDistance/MaxDistanceEntity.java b/src/main/java/vice/magnesium_extras/mixins/EntityDistance/MaxDistanceEntity.java index fb9755d..75999a3 100644 --- a/src/main/java/vice/magnesium_extras/mixins/EntityDistance/MaxDistanceEntity.java +++ b/src/main/java/vice/magnesium_extras/mixins/EntityDistance/MaxDistanceEntity.java @@ -3,6 +3,7 @@ import net.minecraft.client.renderer.culling.ClippingHelper; import net.minecraft.client.renderer.entity.EntityRendererManager; import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -26,10 +27,15 @@ public void shouldDoRender(E entity, ClippingHelper clippingH cameraZ, MagnesiumExtrasConfig.maxEntityRenderDistanceY.get(), MagnesiumExtrasConfig.maxEntityRenderDistanceSquare.get() - )) + ) && !entityWhitelisted(entity.getType().getRegistryName())) { cir.cancel(); } } + + private boolean entityWhitelisted(ResourceLocation s) { + return s != null && MagnesiumExtrasConfig.entityWhitelist.get().stream().anyMatch(s.toString()::equals); + } + } From bed93eb757bafd3c563bfd4f3be4b9f7632eff73 Mon Sep 17 00:00:00 2001 From: Syric <76715986+Syrikal@users.noreply.github.com> Date: Wed, 18 Jan 2023 21:38:41 -0500 Subject: [PATCH 2/2] Fixed an unnecessary newline --- .../vice/magnesium_extras/config/MagnesiumExtrasConfig.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java b/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java index d2939c8..6d963de 100644 --- a/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java +++ b/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java @@ -90,8 +90,7 @@ public class MagnesiumExtrasConfig maxEntityRenderDistanceSquare = b.define("(Entity) Max Horizontal Render Distance [Squared, Default 64^2]", 4096); maxEntityRenderDistanceY = b.define("(Entity) Max Vertical Render Distance [Raw, Default 32]", 32); - entityWhitelist = b.comment("List of entities to not cull based on distance." + - "Example: \"minecraft:bat\"").defineListAllowEmpty(Collections.singletonList("Entity Whitelist"), Collections::emptyList, (s) -> ResourceLocation.tryParse((String) s) != null); + entityWhitelist = b.comment("List of entities to not cull based on distance. Example: \"minecraft:bat\"").defineListAllowEmpty(Collections.singletonList("Entity Whitelist"), Collections::emptyList, (s) -> ResourceLocation.tryParse((String) s) != null); }); builder.Block("Zoom", b -> {