diff --git a/README.md b/README.md index ff814a7..3eb35ad 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,12 @@ ![forge](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/unsupported/forge_vector.svg) [![modrinth](https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/available/modrinth_vector.svg)](https://modrinth.com/project/visible-entities) -A Fabric mod that makes map making easier by showing you by: -* showing mobs normally only visible in spectator -* rendering the bounding box of interactions -* render invisible itemFrames +A mostly clientside Fabric mod that makes map making easier by showing you: + +* mobs normally only visible in spectator +* the bounding box of interactions +* invisible itemFrames +* markers (requires server side) The mod can easily be toggled via the N Key diff --git a/build.gradle b/build.gradle index 6402a53..6e34dc6 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,18 @@ repositories { } } +loom { + splitEnvironmentSourceSets() + + mods { + "visible-entitites" { + sourceSet sourceSets.main + sourceSet sourceSets.client + } + } + +} + dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" diff --git a/src/client/java/tobinio/visibleentities/VisibleEntitiesClient.java b/src/client/java/tobinio/visibleentities/VisibleEntitiesClient.java new file mode 100644 index 0000000..78243e0 --- /dev/null +++ b/src/client/java/tobinio/visibleentities/VisibleEntitiesClient.java @@ -0,0 +1,50 @@ +package tobinio.visibleentities; + +import net.fabricmc.api.ClientModInitializer; + +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; +import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; +import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; +import net.minecraft.client.option.KeyBinding; +import net.minecraft.client.util.InputUtil; +import net.minecraft.entity.EntityType; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; +import org.lwjgl.glfw.GLFW; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import tobinio.visibleentities.entity.InteractionEntityRenderer; +import tobinio.visibleentities.entity.MarkerEntityRenderer; +import tobinio.visibleentities.settings.Config; + +import static tobinio.visibleentities.VisibleEntities.MOD_ID; + +public class VisibleEntitiesClient implements ClientModInitializer { + private static final KeyBinding TOGGLE_KEY = KeyBindingHelper.registerKeyBinding(new KeyBinding( + "key.visible-entities.toggle", + InputUtil.Type.KEYSYM, + GLFW.GLFW_KEY_N, + "category.visible-entities.visible-entities")); + + public static Boolean isActive = false; + + public static Identifier id(String path) { + return Identifier.of(MOD_ID, path); + } + + @Override + public void onInitializeClient() { + Config.HANDLER.load(); + EntityRendererRegistry.register(EntityType.INTERACTION, InteractionEntityRenderer::new); + EntityRendererRegistry.register(EntityType.MARKER, MarkerEntityRenderer::new); + + ClientTickEvents.END_CLIENT_TICK.register(client -> { + while (TOGGLE_KEY.wasPressed()) { + client.player.sendMessage(Text.translatable(isActive ? "visible-entities.disabled" : "visible-entities.enabled") + .formatted(Formatting.GRAY), true); + isActive = !isActive; + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java b/src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java similarity index 90% rename from src/main/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java rename to src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java index 94440a0..ddbe0dc 100644 --- a/src/main/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java +++ b/src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java @@ -7,6 +7,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.decoration.InteractionEntity; import net.minecraft.util.Identifier; import tobinio.visibleentities.VisibleEntities; +import tobinio.visibleentities.VisibleEntitiesClient; import tobinio.visibleentities.settings.Config; /** @@ -29,7 +30,7 @@ public class InteractionEntityRenderer extends EntityRenderer VertexConsumerProvider vertexConsumers, int light) { super.render(entity, yaw, tickDelta, matrices, vertexConsumers, light); - if (VisibleEntities.isActive && Config.HANDLER.instance().showInteractions) { + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showInteractions) { var vertexConsumer = vertexConsumers.getBuffer(RenderLayer.LINES); WorldRenderer.drawBox( matrices, diff --git a/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java b/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java new file mode 100644 index 0000000..4f872c5 --- /dev/null +++ b/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java @@ -0,0 +1,59 @@ +package tobinio.visibleentities.entity; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.WorldRenderer; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.MarkerEntity; +import net.minecraft.util.Identifier; +import net.minecraft.util.math.Box; +import tobinio.visibleentities.VisibleEntitiesClient; +import tobinio.visibleentities.settings.Config; + +/** + * Created: 01.09.24 + * + * @author Tobias Frischmann + */ +public class MarkerEntityRenderer extends EntityRenderer { + public MarkerEntityRenderer(EntityRendererFactory.Context ctx) { + super(ctx); + } + + @Override + public Identifier getTexture(MarkerEntity entity) { + return null; + } + + @Override + public void render(MarkerEntity entity, float yaw, float tickDelta, MatrixStack matrices, + VertexConsumerProvider vertexConsumers, int light) { + + super.render(entity, yaw, tickDelta, matrices, vertexConsumers, light); + + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showMarker) { + Box box = entity.getBoundingBox().offset(-entity.getX(), -entity.getY(), -entity.getZ()); + + var vertexConsumerLine = vertexConsumers.getBuffer(RenderLayer.LINES); + WorldRenderer.drawBox(matrices, vertexConsumerLine, box, 1.0F, 1.0F, 1.0F, 1.0F); + + VertexConsumer vertexConsumerBox = vertexConsumers.getBuffer(RenderLayer.getDebugFilledBox()); + WorldRenderer.renderFilledBox(matrices, + vertexConsumerBox, + box.minX, + box.minY, + box.minZ, + box.maxX, + box.maxY, + box.maxZ, + 0.8F, + 0.4F, + 1.0F, + 0.5F); + + } + } +} diff --git a/src/main/java/tobinio/visibleentities/mixin/BlockStatesLoaderMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java similarity index 82% rename from src/main/java/tobinio/visibleentities/mixin/BlockStatesLoaderMixin.java rename to src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java index 4c1af1f..370f3a0 100644 --- a/src/main/java/tobinio/visibleentities/mixin/BlockStatesLoaderMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/BlockStatesLoaderMixin.java @@ -1,4 +1,4 @@ -package tobinio.visibleentities.mixin; +package tobinio.visibleentities.mixin.client; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -9,7 +9,7 @@ import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tobinio.visibleentities.VisibleEntities; +import tobinio.visibleentities.VisibleEntitiesClient; import java.util.HashMap; import java.util.Map; @@ -36,9 +36,9 @@ public class BlockStatesLoaderMixin { STATIC_DEFINITIONS.put(Identifier.ofVanilla("item_frame"), ITEM_FRAME_STATE_MANAGER); STATIC_DEFINITIONS.put(Identifier.ofVanilla("glow_item_frame"), ITEM_FRAME_STATE_MANAGER); - STATIC_DEFINITIONS.put(VisibleEntities.id("transparent_item_frame"), + STATIC_DEFINITIONS.put(VisibleEntitiesClient.id("transparent_item_frame"), ITEM_FRAME_STATE_MANAGER); - STATIC_DEFINITIONS.put(VisibleEntities.id("transparent_glow_item_frame"), + STATIC_DEFINITIONS.put(VisibleEntitiesClient.id("transparent_glow_item_frame"), ITEM_FRAME_STATE_MANAGER); } } diff --git a/src/main/java/tobinio/visibleentities/mixin/EntityMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/EntityMixin.java similarity index 75% rename from src/main/java/tobinio/visibleentities/mixin/EntityMixin.java rename to src/client/java/tobinio/visibleentities/mixin/client/EntityMixin.java index 1e25098..98a0692 100644 --- a/src/main/java/tobinio/visibleentities/mixin/EntityMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/EntityMixin.java @@ -1,12 +1,13 @@ -package tobinio.visibleentities.mixin; +package tobinio.visibleentities.mixin.client; import net.minecraft.entity.Entity; +import net.minecraft.entity.MarkerEntity; import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import tobinio.visibleentities.VisibleEntities; +import tobinio.visibleentities.VisibleEntitiesClient; import tobinio.visibleentities.settings.Config; /** @@ -18,7 +19,7 @@ import tobinio.visibleentities.settings.Config; public class EntityMixin { @Inject (method = "isInvisibleTo", at = @At ("HEAD"), cancellable = true) private void overwriteVisibility(PlayerEntity player, CallbackInfoReturnable cir) { - if (VisibleEntities.isActive && Config.HANDLER.instance().showEntities) { + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showEntities) { cir.setReturnValue(false); cir.cancel(); } diff --git a/src/main/java/tobinio/visibleentities/mixin/ItemFrameEntityRendererMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java similarity index 90% rename from src/main/java/tobinio/visibleentities/mixin/ItemFrameEntityRendererMixin.java rename to src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java index 43eb8d5..40dfec7 100644 --- a/src/main/java/tobinio/visibleentities/mixin/ItemFrameEntityRendererMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java @@ -1,4 +1,4 @@ -package tobinio.visibleentities.mixin; +package tobinio.visibleentities.mixin.client; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.TexturedRenderLayers; @@ -16,7 +16,7 @@ import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import tobinio.visibleentities.VisibleEntities; +import tobinio.visibleentities.VisibleEntitiesClient; import tobinio.visibleentities.settings.Config; /** @@ -33,7 +33,8 @@ public abstract class ItemFrameEntityRendererMixin { @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;getHeldItemStack()Lnet/minecraft/item/ItemStack;"), method = "render(Lnet/minecraft/entity/decoration/ItemFrameEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") private void renderTransparent(T itemFrameEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { - if (VisibleEntities.isActive && Config.HANDLER.instance().showItemFrames && itemFrameEntity.isInvisible()) { + + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showItemFrames && itemFrameEntity.isInvisible()) { ItemStack itemStack = itemFrameEntity.getHeldItemStack(); BakedModelManager bakedModelManager = this.blockRenderManager.getModels().getModelManager(); @@ -58,7 +59,7 @@ public abstract class ItemFrameEntityRendererMixin { private void offSetMap(T itemFrameEntity, float f, float g, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { - if (VisibleEntities.isActive && Config.HANDLER.instance().showItemFrames && itemFrameEntity.isInvisible()) { + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showItemFrames && itemFrameEntity.isInvisible()) { matrixStack.translate(0, 0, 0.4375F - 0.5F); } } @@ -74,11 +75,12 @@ public abstract class ItemFrameEntityRendererMixin { @Unique private static ModelIdentifier of(String id, boolean map) { - return new ModelIdentifier(VisibleEntities.id(id), "map=%s".formatted(map)); + return new ModelIdentifier(VisibleEntitiesClient.id(id), "map=%s".formatted(map)); } @Unique private ModelIdentifier getTransparentModelId(T entity, ItemStack stack) { + boolean bl = entity.getType() == EntityType.GLOW_ITEM_FRAME; if (stack.isOf(Items.FILLED_MAP)) { return bl ? TRANSPARENT_MAP_GLOW_FRAME : TRANSPARENT_MAP_FRAME; diff --git a/src/main/java/tobinio/visibleentities/mixin/LivingEntityRendererMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java similarity index 96% rename from src/main/java/tobinio/visibleentities/mixin/LivingEntityRendererMixin.java rename to src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java index 55b5f3d..540ca15 100644 --- a/src/main/java/tobinio/visibleentities/mixin/LivingEntityRendererMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java @@ -1,4 +1,4 @@ -package tobinio.visibleentities.mixin; +package tobinio.visibleentities.mixin.client; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.entity.LivingEntityRenderer; diff --git a/src/main/java/tobinio/visibleentities/settings/Config.java b/src/client/java/tobinio/visibleentities/settings/Config.java similarity index 91% rename from src/main/java/tobinio/visibleentities/settings/Config.java rename to src/client/java/tobinio/visibleentities/settings/Config.java index 0e1dc2b..9caa78f 100644 --- a/src/main/java/tobinio/visibleentities/settings/Config.java +++ b/src/client/java/tobinio/visibleentities/settings/Config.java @@ -33,6 +33,10 @@ public class Config { @SerialEntry public boolean showInteractions = SHOW_INTERACTIONS_DEFAULT; + public static final boolean SHOW_MARKER_DEFAULT = true; + @SerialEntry + public boolean showMarker = SHOW_MARKER_DEFAULT; + public static final int TRANSPARENCY_DEFAULT = 38; @SerialEntry public int transparency = TRANSPARENCY_DEFAULT; diff --git a/src/main/java/tobinio/visibleentities/settings/ModMenuIntegration.java b/src/client/java/tobinio/visibleentities/settings/ModMenuIntegration.java similarity index 86% rename from src/main/java/tobinio/visibleentities/settings/ModMenuIntegration.java rename to src/client/java/tobinio/visibleentities/settings/ModMenuIntegration.java index f599f8c..c63b922 100644 --- a/src/main/java/tobinio/visibleentities/settings/ModMenuIntegration.java +++ b/src/client/java/tobinio/visibleentities/settings/ModMenuIntegration.java @@ -49,6 +49,13 @@ public class ModMenuIntegration implements ModMenuApi { newVal -> Config.HANDLER.instance().showInteractions = newVal) .controller(opt -> BooleanControllerBuilder.create(opt).coloured(true)) .build()) + .option(Option.createBuilder() + .name(Text.literal("Show Marker")) + .binding(Config.SHOW_MARKER_DEFAULT, + () -> Config.HANDLER.instance().showMarker, + newVal -> Config.HANDLER.instance().showMarker = newVal) + .controller(opt -> BooleanControllerBuilder.create(opt).coloured(true)) + .build()) .build()) .save(() -> { Config.HANDLER.save(); diff --git a/src/client/resources/visible-entities.client.mixins.json b/src/client/resources/visible-entities.client.mixins.json new file mode 100644 index 0000000..07cd6db --- /dev/null +++ b/src/client/resources/visible-entities.client.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "package": "tobinio.visibleentities.mixin.client", + "compatibilityLevel": "JAVA_21", + "client": [ + "BlockStatesLoaderMixin", + "EntityMixin", + "ItemFrameEntityRendererMixin", + "LivingEntityRendererMixin" + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/src/main/java/tobinio/visibleentities/VisibleEntities.java b/src/main/java/tobinio/visibleentities/VisibleEntities.java index 32b444d..0c4a263 100644 --- a/src/main/java/tobinio/visibleentities/VisibleEntities.java +++ b/src/main/java/tobinio/visibleentities/VisibleEntities.java @@ -1,49 +1,15 @@ package tobinio.visibleentities; -import net.fabricmc.api.ClientModInitializer; - -import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; -import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper; -import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; -import net.minecraft.client.option.KeyBinding; -import net.minecraft.client.util.InputUtil; -import net.minecraft.entity.EntityType; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; -import org.lwjgl.glfw.GLFW; +import net.fabricmc.api.ModInitializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tobinio.visibleentities.entity.InteractionEntityRenderer; -import tobinio.visibleentities.settings.Config; -public class VisibleEntities implements ClientModInitializer { +public class VisibleEntities implements ModInitializer { public static final String MOD_ID = "visible-entities"; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - private static final KeyBinding TOGGLE_KEY = KeyBindingHelper.registerKeyBinding(new KeyBinding( - "key.visible-entities.toggle", - InputUtil.Type.KEYSYM, - GLFW.GLFW_KEY_N, - "category.visible-entities.visible-entities")); - - public static Boolean isActive = false; - - public static Identifier id(String path) { - return Identifier.of(MOD_ID, path); - } - @Override - public void onInitializeClient() { - Config.HANDLER.load(); - EntityRendererRegistry.register(EntityType.INTERACTION, InteractionEntityRenderer::new); + public void onInitialize() { - ClientTickEvents.END_CLIENT_TICK.register(client -> { - while (TOGGLE_KEY.wasPressed()) { - client.player.sendMessage(Text.translatable(isActive ? "visible-entities.disabled" : "visible-entities.enabled") - .formatted(Formatting.GRAY), true); - isActive = !isActive; - } - }); } } \ No newline at end of file diff --git a/src/main/java/tobinio/visibleentities/mixin/EntityTypeMixin.java b/src/main/java/tobinio/visibleentities/mixin/EntityTypeMixin.java new file mode 100644 index 0000000..ff9b912 --- /dev/null +++ b/src/main/java/tobinio/visibleentities/mixin/EntityTypeMixin.java @@ -0,0 +1,41 @@ +package tobinio.visibleentities.mixin; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.MarkerEntity; +import net.minecraft.entity.SpawnGroup; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * Created: 26.09.24 + * + * @author Tobias Frischmann + */ +@Mixin (EntityType.class) +public abstract class EntityTypeMixin { + @Shadow + @Mutable + @Final + public static EntityType MARKER; + + @Shadow + + private static EntityType register(String id, EntityType.Builder type) { + return null; + } + + @Inject (method = "", at = @At ("TAIL")) + private static void setMarkerMaxTrackingRange(CallbackInfo ci) { + MARKER = register("marker", + EntityType.Builder.create(MarkerEntity::new, SpawnGroup.MISC) + .dimensions(0.15F, 0.15F) + .maxTrackingRange(4)); + } +} diff --git a/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java b/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java new file mode 100644 index 0000000..fc3f919 --- /dev/null +++ b/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java @@ -0,0 +1,30 @@ +package tobinio.visibleentities.mixin; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.MarkerEntity; +import net.minecraft.network.listener.ClientPlayPacketListener; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket; +import net.minecraft.server.network.EntityTrackerEntry; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * Created: 26.09.24 + * + * @author Tobias Frischmann + */ +@Mixin (MarkerEntity.class) +public class MarkerEntityMixin { + @Inject (method = "createSpawnPacket", at = @At ("HEAD"), cancellable = true) + public void createSpawnPacket(EntityTrackerEntry entityTrackerEntry, + CallbackInfoReturnable> cir) { + cir.setReturnValue(new EntitySpawnS2CPacket((Entity) (Object) this, entityTrackerEntry)); + } + +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 76dff7e..d8475ba 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -17,15 +17,22 @@ "icon": "assets/visible-entities/icon.png", "environment": "client", "entrypoints": { - "client": [ + "main": [ "tobinio.visibleentities.VisibleEntities" ], + "client": [ + "tobinio.visibleentities.VisibleEntitiesClient" + ], "modmenu": [ "tobinio.visibleentities.settings.ModMenuIntegration" ] }, "mixins": [ - "visible-entities.mixins.json" + "visible-entities.mixins.json", + { + "config": "visible-entities.client.mixins.json", + "environment": "client" + } ], "depends": { "fabricloader": ">=0.16.3", diff --git a/src/main/resources/visible-entities.mixins.json b/src/main/resources/visible-entities.mixins.json index 13ef083..320ed99 100644 --- a/src/main/resources/visible-entities.mixins.json +++ b/src/main/resources/visible-entities.mixins.json @@ -2,11 +2,9 @@ "required": true, "package": "tobinio.visibleentities.mixin", "compatibilityLevel": "JAVA_21", - "client": [ - "BlockStatesLoaderMixin", - "EntityMixin", - "ItemFrameEntityRendererMixin", - "LivingEntityRendererMixin" + "mixins": [ + "MarkerEntityMixin", + "EntityTypeMixin" ], "injectors": { "defaultRequire": 1