Fixed more cases of item glows not working

This commit is contained in:
Sollace 2019-11-30 12:14:24 +02:00
parent e613886c71
commit 3e01252f62
9 changed files with 91 additions and 75 deletions

View file

@ -12,8 +12,16 @@ import com.minelittlepony.client.render.LevitatingItemRenderer;
@Mixin(class_4722.class) @Mixin(class_4722.class)
abstract class MixinClass_4722 { abstract class MixinClass_4722 {
@Inject(method = "method_24074()Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true)
private static void onGetItemOpaque(CallbackInfoReturnable<RenderLayer> info) {
if (LevitatingItemRenderer.usesTransparency()) {
info.setReturnValue(LevitatingItemRenderer.getRenderLayer());
}
}
@Inject(method = "method_24075()Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true) @Inject(method = "method_24075()Lnet/minecraft/client/render/RenderLayer;", at = @At("HEAD"), cancellable = true)
private static void onGetEntityTranslucent(CallbackInfoReturnable<RenderLayer> info) { private static void onGetItemTranslucent(CallbackInfoReturnable<RenderLayer> info) {
if (LevitatingItemRenderer.usesTransparency()) { if (LevitatingItemRenderer.usesTransparency()) {
info.setReturnValue(LevitatingItemRenderer.getRenderLayer()); info.setReturnValue(LevitatingItemRenderer.getRenderLayer());
} }

View file

@ -0,0 +1,36 @@
package com.minelittlepony.client.mixin;
import net.minecraft.class_4730;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.util.Identifier;
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.CallbackInfoReturnable;
import com.minelittlepony.client.render.LevitatingItemRenderer;
import java.util.function.Function;
@Mixin(class_4730.class)
abstract class MixinClass_4730 {
@Inject(method = "method_24145("
+ "Lnet/minecraft/client/render/VertexConsumerProvider;"
+ "Ljava/util/function/Function;"
+ ")"
+ "Lnet/minecraft/client/render/VertexConsumer;",
at = @At("HEAD"),
cancellable = true
)
public void onGetBuffer(VertexConsumerProvider provider, Function<Identifier, RenderLayer> layerFunction, CallbackInfoReturnable<VertexConsumer> info) {
if (LevitatingItemRenderer.usesTransparency()) {
class_4730 self = (class_4730)(Object)this;
info.setReturnValue(self.method_24148().method_24108(provider.getBuffer(LevitatingItemRenderer.getRenderLayer(self.method_24144()))));
}
}
}

View file

@ -11,32 +11,38 @@ import javax.annotation.Nullable;
import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.FirstPersonRenderer; import net.minecraft.client.render.FirstPersonRenderer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.render.model.json.ModelTransformation.Type;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraft.client.render.item.ItemRenderer;
@Mixin(FirstPersonRenderer.class) @Mixin(FirstPersonRenderer.class)
abstract class MixinFirstPersonRenderer { abstract class MixinFirstPersonRenderer {
@Redirect(method = "renderFirstPersonItem(" private static final String LivingEntity = "Lnet/minecraft/entity/LivingEntity;";
+ "Lnet/minecraft/client/network/AbstractClientPlayerEntity;FF" private static final String MatrixStack = "Lnet/minecraft/client/util/math/MatrixStack;";
+ "Lnet/minecraft/util/Hand;F" private static final String ItemStack = "Lnet/minecraft/item/ItemStack;";
+ "Lnet/minecraft/item/ItemStack;F)V", private static final String Type = "Lnet/minecraft/client/render/model/json/ModelTransformation$Type;";
private static final String VertexConsumerProvider = "Lnet/minecraft/client/render/VertexConsumerProvider;";
private static final String World = "Lnet/minecraft/world/World;";
private static final String ItemRenderer = "Lnet/minecraft/client/render/item/ItemRenderer;";
private static final String Boolean = "Z";
private static final String Int = "I";
@Redirect(method = "renderItem(" + LivingEntity + ItemStack + Type + Boolean + MatrixStack + VertexConsumerProvider + Int + ")V",
at = @At(value = "INVOKE", at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/render/item/ItemRenderer;method_23177(" target = ItemRenderer + "method_23177(" + LivingEntity + ItemStack + Type + Boolean + MatrixStack + VertexConsumerProvider + World + Int + Int + ")V"))
+ "Lnet/minecraft/entity/LivingEntity;" private void redirectRenderItem(ItemRenderer target,
+ "Lnet/minecraft/item/ItemStack;" @Nullable LivingEntity entity,
+ "Lnet/minecraft/client/render/model/json/ModelTransformation$Type;" ItemStack item,
+ "Z" Type transform,
+ "Lnet/minecraft/client/util/math/MatrixStack;" boolean left,
+ "Lnet/minecraft/client/render/VertexConsumerProvider;" MatrixStack stack,
+ "Lnet/minecraft/world/World;" VertexConsumerProvider renderContext,
+ "I" @Nullable World world,
+ "I)V")) int lightUv, int overlayUv) {
private void redirectRenderItemSide(FirstPersonRenderer self, PonyRenderManager.getInstance().getMagicRenderer().renderItemInFirstPerson(target, (AbstractClientPlayerEntity)entity, item, transform, left, stack, renderContext, world, lightUv);
@Nullable LivingEntity entity, ItemStack item, ModelTransformation.Type transform, boolean left,
MatrixStack stack, VertexConsumerProvider renderContext, @Nullable World world, int lightUv, int overlayUv) {
PonyRenderManager.getInstance().getMagicRenderer().renderItemInFirstPerson(self, (AbstractClientPlayerEntity)entity, item, transform, left, stack, renderContext, world, lightUv);
} }
} }

View file

@ -1,41 +0,0 @@
package com.minelittlepony.client.mixin;
import com.minelittlepony.client.render.LevitatingItemRenderer;
import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.texture.TextureManager;
import net.minecraft.resource.SynchronousResourceReloadListener;
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.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ItemRenderer.class)
abstract class MixinItemRenderer implements SynchronousResourceReloadListener {
@Inject(method = "Lnet/minecraft/client/render/item/ItemRenderer;renderGlint("
+ "Lnet/minecraft/client/texture/TextureManager;"
+ "Ljava/lang/Runnable;I)V",
at = @At("HEAD"),
cancellable = true)
private static void onRenderGlint(TextureManager manager, Runnable task, int i, CallbackInfo info) {
if (LevitatingItemRenderer.usesTransparency()) {
info.cancel();
}
}
@ModifyArg(method = "renderQuads("
+ "Lnet/minecraft/client/render/BufferBuilder;"
+ "Ljava/util/List;I"
+ "Lnet/minecraft/item/ItemStack;)V",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/render/item/ItemRenderer;renderQuad("
+ "Lnet/minecraft/client/render/BufferBuilder;"
+ "Lnet/minecraft/client/render/model/BakedQuad;I)V"),
index = 2)
private int modifyItemRenderTint(int color) {
return LevitatingItemRenderer.usesTransparency() ? -1 : color;
}
}

View file

@ -8,17 +8,18 @@ import javax.annotation.Nullable;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.FirstPersonRenderer;
import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.item.ItemRenderer;
import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.texture.SpriteAtlasTexture;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f; import net.minecraft.client.util.math.Vector3f;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Arm; import net.minecraft.util.Arm;
import net.minecraft.util.Identifier;
import net.minecraft.util.UseAction; import net.minecraft.util.UseAction;
import net.minecraft.world.World; import net.minecraft.world.World;
@ -31,8 +32,15 @@ public class LevitatingItemRenderer {
return usingTransparency; return usingTransparency;
} }
public static RenderLayer getRenderLayer(Identifier texture) {
if (!usesTransparency()) {
return RenderLayer.getEntityTranslucent(texture);
}
return MagicGlow.getTintedTexturedLayer(texture, Color.r(tint), Color.g(tint), Color.b(tint), 0.8F);
}
public static RenderLayer getRenderLayer() { public static RenderLayer getRenderLayer() {
return MagicGlow.getTintedLayer(Color.r(tint), Color.g(tint), Color.b(tint), 0.8F); return getRenderLayer(SpriteAtlasTexture.BLOCK_ATLAS_TEX);
} }
/** /**
@ -68,15 +76,13 @@ public class LevitatingItemRenderer {
/** /**
* Renders an item in first person optionally with a magical overlay. * Renders an item in first person optionally with a magical overlay.
*/ */
public void renderItemInFirstPerson(FirstPersonRenderer renderer, @Nullable AbstractClientPlayerEntity entity, ItemStack stack, ModelTransformation.Type transform, boolean left, MatrixStack matrix, VertexConsumerProvider renderContext, @Nullable World world, int lightUv) { public void renderItemInFirstPerson(ItemRenderer itemRenderer, @Nullable AbstractClientPlayerEntity entity, ItemStack stack, ModelTransformation.Type transform, boolean left, MatrixStack matrix, VertexConsumerProvider renderContext, @Nullable World world, int lightUv) {
IPony pony = MineLittlePony.getInstance().getManager().getPony(entity); IPony pony = MineLittlePony.getInstance().getManager().getPony(entity);
matrix.push(); matrix.push();
boolean doMagic = MineLittlePony.getInstance().getConfig().fpsmagic.get() && pony.getMetadata().hasMagic(); boolean doMagic = MineLittlePony.getInstance().getConfig().fpsmagic.get() && pony.getMetadata().hasMagic();
ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer();
if (doMagic) { if (doMagic) {
setupPerspective(itemRenderer, entity, stack, left, matrix); setupPerspective(itemRenderer, entity, stack, left, matrix);
} }

View file

@ -3,7 +3,7 @@ package com.minelittlepony.client.render;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.RenderPhase;
import net.minecraft.client.render.VertexFormats; import net.minecraft.client.render.VertexFormats;
import net.minecraft.client.texture.SpriteAtlasTexture; import net.minecraft.util.Identifier;
import com.mojang.blaze3d.platform.GlStateManager.DestFactor; import com.mojang.blaze3d.platform.GlStateManager.DestFactor;
import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; import com.mojang.blaze3d.platform.GlStateManager.SourceFactor;
@ -36,9 +36,9 @@ public class MagicGlow extends RenderPhase {
return MAGIC; return MAGIC;
} }
public static RenderLayer getTintedLayer(float red, float green, float blue, float alpha) { public static RenderLayer getTintedTexturedLayer(Identifier texture, float red, float green, float blue, float alpha) {
return RenderLayer.method_24049("mlp_tint_layer", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, true, RenderLayer.MultiPhaseData.builder() return RenderLayer.method_24049("mlp_tint_layer", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, 7, 256, true, true, RenderLayer.MultiPhaseData.builder()
.texture(new Color(red, green, blue, alpha)) .texture(new Color(texture, red, green, blue, alpha))
.writeMaskState(COLOR_MASK) .writeMaskState(COLOR_MASK)
.alpha(ONE_TENTH_ALPHA) .alpha(ONE_TENTH_ALPHA)
.transparency(GLOWING_TRANSPARENCY) .transparency(GLOWING_TRANSPARENCY)
@ -55,8 +55,8 @@ public class MagicGlow extends RenderPhase {
private final float blue; private final float blue;
private final float alpha; private final float alpha;
public Color(float red, float green, float blue, float alpha) { public Color(Identifier texture, float red, float green, float blue, float alpha) {
super(SpriteAtlasTexture.BLOCK_ATLAS_TEX, false, false); super(texture, false, false);
this.red = red; this.red = red;
this.green = green; this.green = green;
this.blue = blue; this.blue = blue;

View file

@ -2,6 +2,7 @@ package com.minelittlepony.client.render.blockentity.skull;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.minelittlepony.client.MineLittlePony; import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.render.LevitatingItemRenderer;
import com.minelittlepony.client.render.entity.MobRenderers; import com.minelittlepony.client.render.entity.MobRenderers;
import com.minelittlepony.client.render.entity.RenderPonySkeleton; import com.minelittlepony.client.render.entity.RenderPonySkeleton;
import com.minelittlepony.client.render.entity.RenderPonyZombie; import com.minelittlepony.client.render.entity.RenderPonyZombie;
@ -13,7 +14,6 @@ import com.mojang.authlib.GameProfile;
import net.minecraft.block.SkullBlock; import net.minecraft.block.SkullBlock;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
@ -81,7 +81,7 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
stack.scale(-1, -1, 1); stack.scale(-1, -1, 1);
VertexConsumer vertices = renderContext.getBuffer(RenderLayer.getEntityTranslucent(skin)); VertexConsumer vertices = renderContext.getBuffer(LevitatingItemRenderer.getRenderLayer(skin));
skull.setAngles(angle, poweredTicks); skull.setAngles(angle, poweredTicks);
skull.render(stack, vertices, lightUv, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1); skull.render(stack, vertices, lightUv, OverlayTexture.DEFAULT_UV, 1, 1, 1, 1);

View file

@ -5,6 +5,7 @@ import com.minelittlepony.client.render.IPonyRenderContext;
import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.BodyPart;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.model.EntityModel;
import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.render.model.json.ModelTransformation;
@ -72,7 +73,7 @@ public class LayerHeldPonyItem<T extends LivingEntity, M extends EntityModel<T>
stack.translate(left * -0.2F, 0, 0); stack.translate(left * -0.2F, 0, 0);
preItemRender(entity, drop, transform, arm, stack); preItemRender(entity, drop, transform, arm, stack);
MinecraftClient.getInstance().getFirstPersonRenderer().renderItem(entity, drop, transform, arm == Arm.LEFT, stack, renderContext, lightUv); MinecraftClient.getInstance().getItemRenderer().method_23177(entity, drop, transform, arm == Arm.LEFT, stack, renderContext, entity.world, lightUv, OverlayTexture.DEFAULT_UV);
postItemRender(entity, drop, transform, arm, stack, renderContext); postItemRender(entity, drop, transform, arm, stack, renderContext);
stack.pop(); stack.pop();

View file

@ -11,8 +11,8 @@
"MixinEntityRenderDispatcher", "MixinEntityRenderDispatcher",
"MixinSkullBlockEntityRenderer", "MixinSkullBlockEntityRenderer",
"MixinFirstPersonRenderer", "MixinFirstPersonRenderer",
"MixinItemRenderer",
"MixinClass_4722", "MixinClass_4722",
"MixinClass_4730",
"MixinClientPlayerEntity", "MixinClientPlayerEntity",
"MixinPlayerMoveC2SPacket_Both", "MixinPlayerMoveC2SPacket_Both",
"MixinPlayerMoveC2SPacket_LookOnly" "MixinPlayerMoveC2SPacket_LookOnly"