diff --git a/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java b/src/main/java/vice/magnesium_extras/config/MagnesiumExtrasConfig.java index a8eb5ec..6d963de 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,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); }); 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); + } + }