feat: pass cosmetic data through avatar render state
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
package de.fullrisk.citrusDev.mixin;
|
||||
|
||||
import de.fullrisk.citrusDev.client.cosmetic.CosmeticData;
|
||||
import de.fullrisk.citrusDev.client.cosmetic.CosmeticRenderData;
|
||||
import de.fullrisk.citrusDev.client.cosmetic.CosmeticRenderStateKeys;
|
||||
import de.fullrisk.citrusDev.client.cosmetic.PlayerCosmeticManager;
|
||||
import net.minecraft.client.renderer.entity.player.AvatarRenderer;
|
||||
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
|
||||
import net.minecraft.world.entity.Avatar;
|
||||
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.CallbackInfo;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
@Mixin(AvatarRenderer.class)
|
||||
abstract class AvatarRendererMixin {
|
||||
@Inject(
|
||||
method = "extractRenderState(Lnet/minecraft/world/entity/Avatar;Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;F)V",
|
||||
at = @At("TAIL")
|
||||
)
|
||||
private void citrus$extractCosmetic(
|
||||
Avatar avatar,
|
||||
AvatarRenderState state,
|
||||
float partialTick,
|
||||
CallbackInfo callbackInfo
|
||||
) {
|
||||
UUID playerId = avatar.getUUID();
|
||||
CosmeticData cosmetic = PlayerCosmeticManager.getCosmetic(playerId)
|
||||
.filter(CosmeticData::visible)
|
||||
.orElse(null);
|
||||
state.setData(
|
||||
CosmeticRenderStateKeys.COSMETIC,
|
||||
cosmetic == null ? null : new CosmeticRenderData(playerId, cosmetic, partialTick)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package de.fullrisk.citrusDev.mixin;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import de.fullrisk.citrusDev.client.cosmetic.CosmeticRenderStateKeys;
|
||||
import net.minecraft.client.renderer.SubmitNodeCollector;
|
||||
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
|
||||
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
|
||||
import net.minecraft.client.renderer.entity.state.LivingEntityRenderState;
|
||||
import net.minecraft.client.renderer.state.level.CameraRenderState;
|
||||
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.CallbackInfo;
|
||||
|
||||
@Mixin(LivingEntityRenderer.class)
|
||||
abstract class LivingEntityRendererMixin {
|
||||
@Inject(
|
||||
method = "submit(Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V",
|
||||
at = @At("HEAD")
|
||||
)
|
||||
private void citrus$captureAvatarCamera(
|
||||
LivingEntityRenderState state,
|
||||
PoseStack poseStack,
|
||||
SubmitNodeCollector nodeCollector,
|
||||
CameraRenderState cameraRenderState,
|
||||
CallbackInfo callbackInfo
|
||||
) {
|
||||
if (state instanceof AvatarRenderState avatarState) {
|
||||
avatarState.setData(CosmeticRenderStateKeys.CAMERA, cameraRenderState);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,8 +6,10 @@
|
||||
"mixins": [
|
||||
],
|
||||
"client": [
|
||||
"AvatarRendererMixin",
|
||||
"HitboxColorMixin",
|
||||
"LightmapRenderStateExtractorMixin",
|
||||
"LivingEntityRendererMixin",
|
||||
"MouseHandlerMixin",
|
||||
"OwnNametagMixin",
|
||||
"PlayerNametagMixin",
|
||||
|
||||
Reference in New Issue
Block a user