diff --git a/README.md b/README.md
index ff814a7..3eb35ad 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,12 @@

[](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