From 4c6c644f6b0093df4c1751cb6a5535eb56d29255 Mon Sep 17 00:00:00 2001 From: Matthew Messinger Date: Tue, 26 Jan 2016 03:17:08 -0500 Subject: [PATCH] Fix some mixins --- build.gradle | 9 ++++--- .../mixin/MixinImageBufferDownload.java | 17 ++++++++++--- .../mixin/MixinRenderPlayer.java | 24 +++++++++++++++++-- src/main/resources/mixin.minelp.json | 4 +++- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 9b71b3b9..4d2675f8 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } dependencies { classpath 'net.minecraftforge.gradle:ForgeGradle:2.0-SNAPSHOT' - classpath 'org.spongepowered:mixingradle:0.1-SNAPSHOT' + classpath 'org.spongepowered:mixingradle:0.3-SNAPSHOT' } } plugins { @@ -51,8 +51,7 @@ sourceSets { compileClasspath += hdskins.output } forge { - compileClasspath += deps - compileClasspath += [main.output, api.output] + compileClasspath += files(deps + [ main.output, api.output ]) } } project('LiteLoader'){ @@ -84,8 +83,8 @@ dependencies { compile project('LiteLoader') } jar { - manifest.attributes.remove 'TweakClass' - from sourceSets.findAll{it.name != "api"}*.output + afterEvaluate { manifest.attributes.remove 'TweakClass'} + from sourceSets.findAll { it.name != 'api' }*.output extension 'litemod' } diff --git a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinImageBufferDownload.java b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinImageBufferDownload.java index 5c438fc4..5e3c161e 100644 --- a/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinImageBufferDownload.java +++ b/src/hdskins/java/com/voxelmodpack/hdskins/mixin/MixinImageBufferDownload.java @@ -5,8 +5,9 @@ import java.awt.image.BufferedImage; 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.At.Shift; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Surrogate; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -19,10 +20,11 @@ import net.minecraft.client.renderer.ImageBufferDownload; public abstract class MixinImageBufferDownload implements IImageBuffer { @Inject(method = "parseUserSkin", - locals = LocalCapture.CAPTURE_FAILHARD, + locals = LocalCapture.CAPTURE_FAILSOFT, at = @At(value = "INVOKE", shift = Shift.BEFORE, - target = "Ljava/awt/Graphics;dispose()V") ) + target = "Ljava/awt/Graphics;dispose()V", + remap = false) ) private void update(BufferedImage image, CallbackInfo ci, BufferedImage image2, Graphics graphics) { // convert skins from mojang server if (image.getHeight() == 32) { @@ -30,4 +32,13 @@ public abstract class MixinImageBufferDownload implements IImageBuffer { } } + // for optifine + @Surrogate + private void update(BufferedImage image, CallbackInfo ci, int w, int h, int k, BufferedImage image2, Graphics graphics) { + // convert skins from mojang server + if (image.getHeight() == 32) { + HDSkinManager.INSTANCE.convertSkin(image2, graphics); + } + } + } diff --git a/src/main/java/com/brohoof/minelittlepony/mixin/MixinRenderPlayer.java b/src/main/java/com/brohoof/minelittlepony/mixin/MixinRenderPlayer.java index 4debd1f8..d30d1bcf 100644 --- a/src/main/java/com/brohoof/minelittlepony/mixin/MixinRenderPlayer.java +++ b/src/main/java/com/brohoof/minelittlepony/mixin/MixinRenderPlayer.java @@ -35,6 +35,9 @@ import net.minecraft.util.ResourceLocation; @Mixin(RenderPlayer.class) public abstract class MixinRenderPlayer extends RendererLivingEntity implements IRenderPony { + private static final String RenderManager = "Lnet/minecraft/client/renderer/entity/RenderManager;"; + private static final String AbstractClientPlayer = "Lnet/minecraft/client/entity/AbstractClientPlayer;"; + @Shadow private boolean smallArms; private PlayerModel playerModel; @@ -45,7 +48,7 @@ public abstract class MixinRenderPlayer extends RendererLivingEntity implements } @Inject( - method = "(Lnet/minecraft/client/renderer/entity/RenderManager;Z)V", + method = "(" + RenderManager + "Z)V", at = @At("RETURN") ) private void init(RenderManager renderManager, boolean useSmallArms, CallbackInfo ci) { this.playerModel = smallArms ? PMAPI.ponySmall : PMAPI.pony; @@ -60,6 +63,10 @@ public abstract class MixinRenderPlayer extends RendererLivingEntity implements this.addLayer(new LayerPonyCape(this)); } + /** + * @reason render a pony instead of a human + * @author JoyJoy + */ @Overwrite public void doRender(AbstractClientPlayer player, double x, double y, double z, float yaw, float partialTicks) { ItemStack currentItemStack = player.inventory.getCurrentItem(); @@ -80,6 +87,7 @@ public abstract class MixinRenderPlayer extends RendererLivingEntity implements this.playerModel.getModel().isSneak = player.isSneaking(); this.playerModel.getModel().isFlying = thePony.isPegasusFlying(player); + this.playerModel.getModel().isRiding = player.isRiding(); if (MineLittlePony.getConfig().showscale) { if (this.playerModel.getModel().metadata.getRace() != null) { @@ -106,7 +114,6 @@ public abstract class MixinRenderPlayer extends RendererLivingEntity implements this.playerModel.getModel().isSleeping = player.isPlayerSleeping(); this.playerModel.getModel().swingProgress = getSwingProgress(player, partialTicks); - this.playerModel.getModel().isVillager = false; super.doRender(player, x, yOrigin1, z, yaw, partialTicks); @@ -127,11 +134,24 @@ public abstract class MixinRenderPlayer extends RendererLivingEntity implements } } + @Inject(method = "renderRightArm(" + AbstractClientPlayer + ")V", at = @At("HEAD") ) + private void onRenderRightArm(AbstractClientPlayer player, CallbackInfo ci) { + bindEntityTexture(player); + } + + @Inject(method = "renderLeftArm(" + AbstractClientPlayer + ")V", at = @At("HEAD") ) + private void onRenderLeftArm(AbstractClientPlayer player, CallbackInfo ci) { + bindEntityTexture(player); + } + private ResourceLocation getEntityTexture(AbstractClientPlayer player) { Pony thePony = MineLittlePony.getInstance().getManager().getPonyFromResourceRegistry(player); return thePony.getTextureResourceLocation(); } + /** + * @reason Change the skin in case of non-pony skin + */ @Override public final ResourceLocation getEntityTexture(Entity entity) { return this.getEntityTexture((AbstractClientPlayer) entity); diff --git a/src/main/resources/mixin.minelp.json b/src/main/resources/mixin.minelp.json index ca85db1b..cc6a736e 100644 --- a/src/main/resources/mixin.minelp.json +++ b/src/main/resources/mixin.minelp.json @@ -1,7 +1,9 @@ { + "required": true, + "minVersion": "0.4.10", "package": "com.brohoof.minelittlepony.mixin", "refmap": "mixin.minelp.refmap.json", "mixins": [ "MixinRenderPlayer" ] -} \ No newline at end of file +}