diff --git a/build.gradle b/build.gradle index 6e34dc6..43ddf68 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.7-SNAPSHOT' + id 'fabric-loom' version '1.8-SNAPSHOT' id 'maven-publish' } diff --git a/gradle.properties b/gradle.properties index 6a4a940..00c9eb7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,16 +4,16 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21 -yarn_mappings=1.21+build.9 -loader_version=0.16.3 +minecraft_version=1.21.2 +yarn_mappings=1.21.2+build.1 +loader_version=0.16.7 # Mod Properties -mod_version=0.1.2+mc1.21.0 +mod_version=0.1.2+mc1.21.2 maven_group=tobinio.visibleentities archives_base_name=visible-entities # Dependencies -fabric_version=0.102.0+1.21 -yacl_version=3.5.0+1.21-fabric -modmenu_version=11.0.2 \ No newline at end of file +fabric_version=0.106.1+1.21.2 +yacl_version=3.6.1+1.21.2-fabric +modmenu_version=12.0.0-beta.1 \ No newline at end of file diff --git a/src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java b/src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java index ddbe0dc..267e8c9 100644 --- a/src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java +++ b/src/client/java/tobinio/visibleentities/entity/InteractionEntityRenderer.java @@ -3,9 +3,12 @@ package tobinio.visibleentities.entity; import net.minecraft.client.render.*; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.decoration.DisplayEntity; import net.minecraft.entity.decoration.InteractionEntity; import net.minecraft.util.Identifier; +import net.minecraft.util.math.Box; import tobinio.visibleentities.VisibleEntities; import tobinio.visibleentities.VisibleEntitiesClient; import tobinio.visibleentities.settings.Config; @@ -15,27 +18,33 @@ import tobinio.visibleentities.settings.Config; * * @author Tobias Frischmann */ -public class InteractionEntityRenderer extends EntityRenderer { +public class InteractionEntityRenderer extends EntityRenderer { public InteractionEntityRenderer(EntityRendererFactory.Context ctx) { super(ctx); } @Override - public Identifier getTexture(InteractionEntity entity) { - return null; + public InteractionEntityRenderState createRenderState() { + return new InteractionEntityRenderState(); } @Override - public void render(InteractionEntity entity, float yaw, float tickDelta, MatrixStack matrices, - VertexConsumerProvider vertexConsumers, int light) { - super.render(entity, yaw, tickDelta, matrices, vertexConsumers, light); + public void updateRenderState(InteractionEntity entity, InteractionEntityRenderState state, float tickDelta) { + super.updateRenderState(entity, state, tickDelta); + state.boundingBox = entity.getBoundingBox(); + } + + @Override + public void render(InteractionEntityRenderState state, MatrixStack matrices, VertexConsumerProvider vertexConsumers, + int light) { + super.render(state, matrices, vertexConsumers, light); if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showInteractions) { var vertexConsumer = vertexConsumers.getBuffer(RenderLayer.LINES); - WorldRenderer.drawBox( + VertexRendering.drawBox( matrices, vertexConsumer, - entity.getBoundingBox().offset(-entity.getX(), -entity.getY(), -entity.getZ()), + state.boundingBox.offset(-state.x, -state.y, -state.z), 1.0F, 1.0F, 1.0F, @@ -43,4 +52,8 @@ public class InteractionEntityRenderer extends EntityRenderer ); } } + + public static class InteractionEntityRenderState extends EntityRenderState { + public Box boundingBox; + } } diff --git a/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java b/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java index 4f872c5..b138538 100644 --- a/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java +++ b/src/client/java/tobinio/visibleentities/entity/MarkerEntityRenderer.java @@ -1,13 +1,12 @@ 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.*; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.MarkerEntity; +import net.minecraft.entity.decoration.InteractionEntity; import net.minecraft.util.Identifier; import net.minecraft.util.math.Box; import tobinio.visibleentities.VisibleEntitiesClient; @@ -18,30 +17,36 @@ import tobinio.visibleentities.settings.Config; * * @author Tobias Frischmann */ -public class MarkerEntityRenderer extends EntityRenderer { +public class MarkerEntityRenderer extends EntityRenderer { public MarkerEntityRenderer(EntityRendererFactory.Context ctx) { super(ctx); } @Override - public Identifier getTexture(MarkerEntity entity) { - return null; + public MarkerEntityRenderState createRenderState() { + return new MarkerEntityRenderState(); } @Override - public void render(MarkerEntity entity, float yaw, float tickDelta, MatrixStack matrices, - VertexConsumerProvider vertexConsumers, int light) { + public void updateRenderState(MarkerEntity entity, MarkerEntityRenderer.MarkerEntityRenderState state, + float tickDelta) { + super.updateRenderState(entity, state, tickDelta); + state.boundingBox = entity.getBoundingBox(); + } - super.render(entity, yaw, tickDelta, matrices, vertexConsumers, light); + @Override + public void render(MarkerEntityRenderState state, MatrixStack matrices, VertexConsumerProvider vertexConsumers, + int light) { + super.render(state, matrices, vertexConsumers, light); if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showMarker) { - Box box = entity.getBoundingBox().offset(-entity.getX(), -entity.getY(), -entity.getZ()); + Box box = state.boundingBox.offset(-state.x, -state.y, -state.z); var vertexConsumerLine = vertexConsumers.getBuffer(RenderLayer.LINES); - WorldRenderer.drawBox(matrices, vertexConsumerLine, box, 1.0F, 1.0F, 1.0F, 1.0F); + VertexRendering.drawBox(matrices, vertexConsumerLine, box, 1.0F, 1.0F, 1.0F, 1.0F); VertexConsumer vertexConsumerBox = vertexConsumers.getBuffer(RenderLayer.getDebugFilledBox()); - WorldRenderer.renderFilledBox(matrices, + VertexRendering.drawFilledBox(matrices, vertexConsumerBox, box.minX, box.minY, @@ -56,4 +61,8 @@ public class MarkerEntityRenderer extends EntityRenderer { } } + + public static class MarkerEntityRenderState extends EntityRenderState { + public Box boundingBox; + } } diff --git a/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java index 40dfec7..4f1968a 100644 --- a/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/ItemFrameEntityRendererMixin.java @@ -5,6 +5,7 @@ import net.minecraft.client.render.TexturedRenderLayers; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.entity.ItemFrameEntityRenderer; +import net.minecraft.client.render.entity.state.ItemFrameEntityRenderState; import net.minecraft.client.render.model.BakedModelManager; import net.minecraft.client.util.ModelIdentifier; import net.minecraft.client.util.math.MatrixStack; @@ -12,6 +13,7 @@ import net.minecraft.entity.EntityType; import net.minecraft.entity.decoration.ItemFrameEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.util.math.RotationAxis; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -30,20 +32,20 @@ public abstract class ItemFrameEntityRendererMixin { @Final private BlockRenderManager blockRenderManager; - @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, + @Inject (at = @At (value = "INVOKE_ASSIGN", target = "Lnet/minecraft/item/ItemStack;isEmpty()Z"), method = "render(Lnet/minecraft/client/render/entity/state/ItemFrameEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") + private void renderTransparent(ItemFrameEntityRenderState state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { - if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showItemFrames && itemFrameEntity.isInvisible()) { - ItemStack itemStack = itemFrameEntity.getHeldItemStack(); + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showItemFrames && state.invisible) { + ItemStack itemStack = state.contents; BakedModelManager bakedModelManager = this.blockRenderManager.getModels().getModelManager(); - ModelIdentifier modelIdentifier = this.getTransparentModelId(itemFrameEntity, itemStack); + ModelIdentifier modelIdentifier = this.getTransparentModelId(state, itemStack); matrixStack.push(); matrixStack.translate(-0.5F, -0.5F, -0.5F); this.blockRenderManager.getModelRenderer() .render(matrixStack.peek(), - vertexConsumerProvider.getBuffer(TexturedRenderLayers.getEntityTranslucentCull()), + vertexConsumerProvider.getBuffer(TexturedRenderLayers.getItemEntityTranslucentCull()), null, bakedModelManager.getModel(modelIdentifier), 1.0F, @@ -55,11 +57,11 @@ public abstract class ItemFrameEntityRendererMixin { } } - @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;getMapId(Lnet/minecraft/item/ItemStack;)Lnet/minecraft/component/type/MapIdComponent;"), method = "render(Lnet/minecraft/entity/decoration/ItemFrameEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") - private void offSetMap(T itemFrameEntity, float f, float g, MatrixStack matrixStack, + @Inject (at = @At (value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;multiply(Lorg/joml/Quaternionf;)V", ordinal = 2), method = "render(Lnet/minecraft/client/render/entity/state/ItemFrameEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V") + private void offSetMap(ItemFrameEntityRenderState state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { - if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showItemFrames && itemFrameEntity.isInvisible()) { + if (VisibleEntitiesClient.isActive && Config.HANDLER.instance().showItemFrames && state.invisible) { matrixStack.translate(0, 0, 0.4375F - 0.5F); } } @@ -79,13 +81,11 @@ public abstract class ItemFrameEntityRendererMixin { } @Unique - private ModelIdentifier getTransparentModelId(T entity, ItemStack stack) { - - boolean bl = entity.getType() == EntityType.GLOW_ITEM_FRAME; + private ModelIdentifier getTransparentModelId(ItemFrameEntityRenderState state, ItemStack stack) { if (stack.isOf(Items.FILLED_MAP)) { - return bl ? TRANSPARENT_MAP_GLOW_FRAME : TRANSPARENT_MAP_FRAME; + return state.glow ? TRANSPARENT_MAP_GLOW_FRAME : TRANSPARENT_MAP_FRAME; } else { - return bl ? TRANSPARENT_GLOW_FRAME : TRANSPARENT_NORMAL_FRAME; + return state.glow ? TRANSPARENT_GLOW_FRAME : TRANSPARENT_NORMAL_FRAME; } } } diff --git a/src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java b/src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java index 540ca15..6b3dd02 100644 --- a/src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java +++ b/src/client/java/tobinio/visibleentities/mixin/client/LivingEntityRendererMixin.java @@ -17,11 +17,11 @@ import tobinio.visibleentities.settings.Config; */ @Mixin (LivingEntityRenderer.class) public class LivingEntityRendererMixin { - @Redirect (method = "render(Lnet/minecraft/entity/LivingEntity;FFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At (value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;III)V")) + @Redirect (method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At (value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;III)V")) private void defineTransparency(EntityModel instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, int color) { if (color != -1) { - color = ColorHelper.Argb.getArgb(Config.HANDLER.instance().transparency, 255, 255, 255); + color = ColorHelper.getArgb(Config.HANDLER.instance().transparency, 255, 255, 255); } instance.render(matrixStack, vertexConsumer, light, overlay, color); diff --git a/src/main/java/tobinio/visibleentities/VisibleEntities.java b/src/main/java/tobinio/visibleentities/VisibleEntities.java index 0c4a263..c314217 100644 --- a/src/main/java/tobinio/visibleentities/VisibleEntities.java +++ b/src/main/java/tobinio/visibleentities/VisibleEntities.java @@ -10,6 +10,5 @@ public class VisibleEntities implements ModInitializer { @Override public void onInitialize() { - } } \ 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 index ff9b912..ad2b572 100644 --- a/src/main/java/tobinio/visibleentities/mixin/EntityTypeMixin.java +++ b/src/main/java/tobinio/visibleentities/mixin/EntityTypeMixin.java @@ -4,6 +4,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.MarkerEntity; import net.minecraft.entity.SpawnGroup; +import net.minecraft.registry.RegistryKey; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; @@ -21,21 +22,28 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin (EntityType.class) public abstract class EntityTypeMixin { @Shadow - @Mutable - @Final - public static EntityType MARKER; + protected static RegistryKey> keyOf(String id) { + return null; + } @Shadow - - private static EntityType register(String id, EntityType.Builder type) { + protected static EntityType register(RegistryKey> key, + 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)); + @Inject (method = "register(Ljava/lang/String;Lnet/minecraft/entity/EntityType$Builder;)Lnet/minecraft/entity/EntityType;", at = @At ("HEAD"), cancellable = true) + private static void registerMarker(String id, EntityType.Builder type, + CallbackInfoReturnable> cir) { + + if (id.equals("marker")) { + var result = register(keyOf(id), + EntityType.Builder.create(MarkerEntity::new, SpawnGroup.MISC) + .dimensions(0.15F, 0.15F) + .maxTrackingRange(4)); + + cir.setReturnValue((EntityType) result); + cir.cancel(); + } } } diff --git a/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java b/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java index fc3f919..da7859e 100644 --- a/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java +++ b/src/main/java/tobinio/visibleentities/mixin/MarkerEntityMixin.java @@ -26,5 +26,4 @@ public class MarkerEntityMixin { CallbackInfoReturnable> cir) { cir.setReturnValue(new EntitySpawnS2CPacket((Entity) (Object) this, entityTrackerEntry)); } - } \ No newline at end of file