diff --git a/fabric/gradle.properties b/fabric/gradle.properties index 1287dfd..95bad1c 100644 --- a/fabric/gradle.properties +++ b/fabric/gradle.properties @@ -3,16 +3,16 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://modmuss50.me/fabric.html - minecraft_version=1.21.1 - loader_version=0.16.0 + minecraft_version=1.21.4 + loader_version=0.16.14 # Mod Properties - mod_version = 1.21-f1.0.2 + mod_version = 1.21.4-f1.0.2 maven_group = github.pitbox46 archives_base_name = HiddenNames # Dependencies # check this on https://modmuss50.me/fabric.html - fabric_version=0.102.1+1.21.1 - fcapi_version=21.1.0 - modmenu_version=11.0.1 + fabric_version=0.119.2+1.21.4 + fcapi_version=21.4.1 + modmenu_version=13.0.3 diff --git a/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/LivingEntityRendererMixin.java b/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/LivingEntityRendererMixin.java index 8332b54..40015cc 100644 --- a/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/LivingEntityRendererMixin.java +++ b/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/LivingEntityRendererMixin.java @@ -11,17 +11,16 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(LivingEntityRenderer.class) -public class LivingEntityRendererMixin { - @Inject(method = "shouldShowName(Lnet/minecraft/world/entity/LivingEntity;)Z", at = @At(value = "RETURN", ordinal = 6), cancellable = true) - private void shouldShowName(LivingEntity livingEntity, CallbackInfoReturnable cir) { +public abstract class LivingEntityRendererMixin { + @Inject(method = "shouldShowName(Lnet/minecraft/world/entity/LivingEntity;D)Z", at = @At(value = "RETURN", ordinal = 6), cancellable = true) + private void shouldShowName(LivingEntity livingEntity, double d, CallbackInfoReturnable cir) { Minecraft minecraft = Minecraft.getInstance(); LocalPlayer localPlayer = minecraft.player; - boolean bl = !livingEntity.isInvisibleTo(localPlayer); cir.setReturnValue( - Minecraft.renderNames() && - (livingEntity != minecraft.getCameraEntity() || Config.SHOW_OWN.get()) && - bl && - !livingEntity.isVehicle() + Minecraft.renderNames() + && (livingEntity != minecraft.getCameraEntity() || Config.SHOW_OWN.get()) + && !livingEntity.isInvisibleTo(localPlayer) + && !livingEntity.isVehicle() ); } } diff --git a/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/PlayerRendererMixin.java b/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/PlayerRendererMixin.java index abceb13..9b49b87 100644 --- a/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/PlayerRendererMixin.java +++ b/fabric/src/client/java/github/pitbox46/hiddennames/client/mixin/PlayerRendererMixin.java @@ -1,6 +1,5 @@ package github.pitbox46.hiddennames.client.mixin; -import com.mojang.blaze3d.vertex.PoseStack; import github.pitbox46.hiddennames.Config; import github.pitbox46.hiddennames.HiddenNames; import github.pitbox46.hiddennames.client.ClientPayloadHandler; @@ -9,60 +8,64 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.player.PlayerRenderer; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.Entity; +import net.minecraft.client.renderer.entity.state.PlayerRenderState; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.ClipContext; import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import net.minecraft.world.scores.Team; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(PlayerRenderer.class) -public abstract class PlayerRendererMixin extends LivingEntityRenderer> { - public PlayerRendererMixin(EntityRendererProvider.Context context, PlayerModel entityModel, float f) { +public abstract class PlayerRendererMixin extends LivingEntityRenderer { + public PlayerRendererMixin(EntityRendererProvider.Context context, PlayerModel entityModel, float f) { super(context, entityModel, f); } - @Redirect( - method = "renderNameTag(Lnet/minecraft/client/player/AbstractClientPlayer;Lnet/minecraft/network/chat/Component;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;IF)V", - at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/LivingEntityRenderer;renderNameTag(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/network/chat/Component;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;IF)V", ordinal = 1) - ) - private void renderNameTag(LivingEntityRenderer instance, Entity entity, Component component, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, float partialTick) { - Player localPlayer = Minecraft.getInstance().player; - - if (entity instanceof AbstractClientPlayer player) { - NameData nameData = NameData.DATA.get(player.getUUID()); + @Inject(method = "extractRenderState", + at = @At("TAIL")) + public void extractRenderState(AbstractClientPlayer player, PlayerRenderState playerRenderState, float partialTick, CallbackInfo info) { + var nameData = NameData.DATA.get(player.getUUID()); + if (nameData == null || (!Config.RENDER_ANIMATIONS.get() && !nameData.getAnimation().isHidden())) { + return; + } - if (nameData==null || (!Config.RENDER_ANIMATIONS.get() && !nameData.getAnimation().isHidden())) { - super.renderNameTag((AbstractClientPlayer) entity, component, poseStack, multiBufferSource, i, partialTick); - return; - } - if (!nameData.getAnimation().isHidden() && ClientPayloadHandler.doBlocksHide()) { - Vec3 vector3d = localPlayer.getEyePosition(partialTick); - Vec3 vector3d1 = entity.getEyePosition(partialTick); - if (localPlayer.level().clip(new ClipContext(vector3d, vector3d1, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, localPlayer)).getType()!=HitResult.Type.MISS) { - return; - } + Player localPlayer = Minecraft.getInstance().player; + if (localPlayer != null && !nameData.getAnimation().isHidden() && ClientPayloadHandler.doBlocksHide()) { + Vec3 vector3d = localPlayer.getEyePosition(partialTick); + Vec3 vector3d1 = player.getEyePosition(partialTick); + if (localPlayer.level().clip(new ClipContext(vector3d, vector3d1, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, localPlayer)).getType() != HitResult.Type.MISS) { + hideNameTag(playerRenderState); } + } + Team team = player.getTeam(); - Team team = player.getTeam(); + Animation.Return returnData = nameData.getAnimation() + .renderer() + .apply(new Animation.Input( + player, + playerRenderState.nameTag, + HiddenNames.getCorrectedName(nameData.getDisplayName(), team), + Minecraft.getInstance().level.getGameTime() + player.getId() * 21L + )); - Animation.Return returnData = nameData.getAnimation().renderer().apply(new Animation.Input( - player, - component, - HiddenNames.getCorrectedName(NameData.DATA.get(player.getUUID()).getDisplayName(), team), - Minecraft.getInstance().level.getGameTime() + player.getId() * 21L - )); - if (returnData.show()) { - super.renderNameTag(player, HiddenNames.getFullNameplate(returnData.name(), team), poseStack, multiBufferSource, i, partialTick); - } + if (returnData.show()) { + playerRenderState.nameTag = HiddenNames.getFullNameplate(returnData.name(), team); + } else { + hideNameTag(playerRenderState); } } + + @Unique + private void hideNameTag(PlayerRenderState playerRenderState) { + playerRenderState.nameTag = null; + playerRenderState.nameTagAttachment = null; + } } diff --git a/fabric/src/main/java/github/pitbox46/hiddennames/commands/AnimationArgument.java b/fabric/src/main/java/github/pitbox46/hiddennames/commands/AnimationArgument.java index 13ea4e3..5417930 100644 --- a/fabric/src/main/java/github/pitbox46/hiddennames/commands/AnimationArgument.java +++ b/fabric/src/main/java/github/pitbox46/hiddennames/commands/AnimationArgument.java @@ -34,7 +34,7 @@ public Animation parse(StringReader reader) throws CommandSyntaxException { if (!HiddenNames.ANIMATION_REGISTRY.keySet().contains(key)) { throw INVALID_ANIMATION.create(key, HiddenNames.ANIMATION_REGISTRY.keySet().stream().map(ResourceLocation::toString).toList()); } - return HiddenNames.ANIMATION_REGISTRY.get(key); + return HiddenNames.ANIMATION_REGISTRY.getValue(key); } @Override diff --git a/fabric/src/main/java/github/pitbox46/hiddennames/data/Animations.java b/fabric/src/main/java/github/pitbox46/hiddennames/data/Animations.java index 53d3a11..c0ff826 100644 --- a/fabric/src/main/java/github/pitbox46/hiddennames/data/Animations.java +++ b/fabric/src/main/java/github/pitbox46/hiddennames/data/Animations.java @@ -8,7 +8,7 @@ import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.FastColor; +import net.minecraft.util.ARGB; import net.minecraft.util.Mth; import org.apache.commons.lang3.RandomStringUtils; @@ -41,9 +41,9 @@ public static void init() {} color = TextColor.fromLegacyFormat(ChatFormatting.WHITE); } int primaryColor = color.getValue(); - int red = FastColor.ARGB32.red(primaryColor); - int green = FastColor.ARGB32.green(primaryColor); - int blue = FastColor.ARGB32.blue(primaryColor); + int red = ARGB.red(primaryColor); + int green = ARGB.green(primaryColor); + int blue = ARGB.blue(primaryColor); double sin = Math.sin((input.tick() % 360) * 2 * Math.PI / cycle); double newRed = red + (amp * sin); @@ -51,7 +51,7 @@ public static void init() {} double newBlue = blue + (amp * sin); MutableComponent newName = displayName.copy(); - newName.setStyle(displayName.getStyle().withColor(TextColor.fromRgb(FastColor.ARGB32.color(255, roundToByte(newRed), roundToByte(newGreen), roundToByte(newBlue))))); + newName.setStyle(displayName.getStyle().withColor(TextColor.fromRgb(ARGB.color(255, roundToByte(newRed), roundToByte(newGreen), roundToByte(newBlue))))); return new Animation.Return(newName, true); } @@ -121,10 +121,10 @@ private static int roundToByte(double number) { private static TextColor blendColors(TextColor primary, TextColor secondary, float percent) { if (percent > 1) percent = 1; if (percent < 0) percent = 0; - int red = (int) (FastColor.ARGB32.red(primary.getValue()) * percent + FastColor.ARGB32.red(secondary.getValue()) * (1 - percent)); - int green = (int) (FastColor.ARGB32.green(primary.getValue()) * percent + FastColor.ARGB32.green(secondary.getValue()) * (1 - percent)); - int blue = (int) (FastColor.ARGB32.blue(primary.getValue()) * percent + FastColor.ARGB32.blue(secondary.getValue()) * (1 - percent)); + int red = (int) (ARGB.red(primary.getValue()) * percent + ARGB.red(secondary.getValue()) * (1 - percent)); + int green = (int) (ARGB.green(primary.getValue()) * percent + ARGB.green(secondary.getValue()) * (1 - percent)); + int blue = (int) (ARGB.blue(primary.getValue()) * percent + ARGB.blue(secondary.getValue()) * (1 - percent)); - return TextColor.fromRgb(FastColor.ARGB32.color(255, red, green, blue)); + return TextColor.fromRgb(ARGB.color(255, red, green, blue)); } } diff --git a/fabric/src/main/java/github/pitbox46/hiddennames/data/NameData.java b/fabric/src/main/java/github/pitbox46/hiddennames/data/NameData.java index 4d29c7e..967e7de 100644 --- a/fabric/src/main/java/github/pitbox46/hiddennames/data/NameData.java +++ b/fabric/src/main/java/github/pitbox46/hiddennames/data/NameData.java @@ -85,7 +85,7 @@ public JsonObject serialize(JsonObject json) { public static NameData deserialize(JsonObject json) { UUID uuid = UUID.fromString(json.getAsJsonPrimitive("uuid").getAsString()); Component component = COMPONENT_SERIALIZER.deserialize(json.get("displayName"), Component.class, null); - Animation animation = HiddenNames.ANIMATION_REGISTRY.get(ResourceLocation.parse(json.getAsJsonPrimitive("animation").getAsString())); + Animation animation = HiddenNames.ANIMATION_REGISTRY.getValue(ResourceLocation.parse(json.getAsJsonPrimitive("animation").getAsString())); return new NameData(uuid, component, animation); } diff --git a/fabric/src/main/java/github/pitbox46/hiddennames/network/NameDataSyncPacket.java b/fabric/src/main/java/github/pitbox46/hiddennames/network/NameDataSyncPacket.java index 1c29705..bb61704 100644 --- a/fabric/src/main/java/github/pitbox46/hiddennames/network/NameDataSyncPacket.java +++ b/fabric/src/main/java/github/pitbox46/hiddennames/network/NameDataSyncPacket.java @@ -8,6 +8,7 @@ import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; public record NameDataSyncPacket(NameData data) implements CustomPacketPayload { public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(HiddenNames.MODID, "name_data_sync")); @@ -18,7 +19,7 @@ public record NameDataSyncPacket(NameData data) implements CustomPacketPayload { packet -> packet.data().getDisplayName(), ResourceLocation.STREAM_CODEC, packet -> packet.data().getAnimation().key(), - (uuid, component, key) -> new NameDataSyncPacket(new NameData(uuid, component, HiddenNames.ANIMATION_REGISTRY.get(key))) + (uuid, component, key) -> new NameDataSyncPacket(new NameData(uuid, component, HiddenNames.ANIMATION_REGISTRY.getValue(key))) ); @Override