|
17 | 17 |
|
18 | 18 | package com.lambda.mixin.render; |
19 | 19 |
|
| 20 | +import com.lambda.Lambda; |
| 21 | +import com.lambda.module.modules.client.Capes; |
20 | 22 | import com.lambda.module.modules.render.NoRender; |
21 | | -import com.llamalad7.mixinextras.injector.ModifyReturnValue; |
| 23 | +import com.lambda.network.CapeManager; |
| 24 | +import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; |
| 25 | +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; |
| 26 | +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; |
22 | 27 | import net.minecraft.client.render.VertexConsumerProvider; |
23 | 28 | import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer; |
24 | 29 | import net.minecraft.client.render.entity.state.BipedEntityRenderState; |
| 30 | +import net.minecraft.client.render.entity.state.PlayerEntityRenderState; |
25 | 31 | import net.minecraft.client.util.math.MatrixStack; |
26 | 32 | import net.minecraft.entity.LivingEntity; |
27 | 33 | import net.minecraft.util.Identifier; |
28 | 34 | import org.spongepowered.asm.mixin.Mixin; |
29 | 35 | import org.spongepowered.asm.mixin.injection.At; |
30 | | -import org.spongepowered.asm.mixin.injection.Inject; |
31 | | -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; |
32 | 36 |
|
33 | 37 | @Mixin(ElytraFeatureRenderer.class) |
34 | 38 | public class ElytraFeatureRendererMixin<T extends LivingEntity> { |
35 | | - @ModifyReturnValue(method = "getTexture(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)Lnet/minecraft/util/Identifier;", at = @At("TAIL")) |
36 | | - private static Identifier getTexture(Identifier original, BipedEntityRenderState state) { |
37 | | - // FixMe: fuck you mojang |
38 | | - /*var entity = StreamSupport.stream(Lambda.getMc().world.getEntities().spliterator(), false) |
39 | | - .filter(e -> e.getDisplayName() == state.displayName) |
40 | | - .findFirst().get(); |
| 39 | + @WrapOperation(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/ElytraFeatureRenderer;getTexture(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)Lnet/minecraft/util/Identifier;")) |
| 40 | + Identifier injectElytra(BipedEntityRenderState state, Operation<Identifier> original) { |
| 41 | + if (!(state instanceof PlayerEntityRenderState)) |
| 42 | + return original.call(state); |
41 | 43 |
|
42 | | - if (!Capes.INSTANCE.isEnabled() || !CapeManager.INSTANCE.containsKey(entity.getUuid())) return original; |
| 44 | + var entry = Lambda.getMc().getNetworkHandler().getPlayerListEntry(((PlayerEntityRenderState) state).name); |
| 45 | + if (entry == null) return original.call(state); |
43 | 46 |
|
44 | | - return Identifier.of("lambda", CapeManager.INSTANCE.get(entity.getUuid()));*/ |
| 47 | + var profile = entry.getProfile(); |
45 | 48 |
|
46 | | - return original; |
| 49 | + if (!Capes.INSTANCE.isEnabled() || !CapeManager.INSTANCE.getCache().containsKey(profile.getId())) |
| 50 | + return original.call(state); |
| 51 | + |
| 52 | + return Identifier.of("lambda", CapeManager.INSTANCE.getCache().get(profile.getId())); |
47 | 53 | } |
48 | 54 |
|
49 | | - @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) |
50 | | - private void injectRender(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, BipedEntityRenderState bipedEntityRenderState, float f, float g, CallbackInfo ci) { |
51 | | - if (NoRender.INSTANCE.isEnabled() && NoRender.getNoElytra()) ci.cancel(); |
| 55 | + @WrapMethod(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V") |
| 56 | + private void injectRender(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, BipedEntityRenderState bipedEntityRenderState, float f, float g, Operation<Void> original) { |
| 57 | + if (NoRender.INSTANCE.isDisabled() && !NoRender.getNoElytra()) |
| 58 | + original.call(matrixStack, vertexConsumerProvider, i, bipedEntityRenderState, f, g); |
52 | 59 | } |
53 | 60 | } |
0 commit comments