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)
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)
private static void onGetEntityTranslucent(CallbackInfoReturnable<RenderLayer> info) {
private static void onGetItemTranslucent(CallbackInfoReturnable<RenderLayer> info) {
if (LevitatingItemRenderer.usesTransparency()) {
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.render.FirstPersonRenderer;
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.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraft.client.render.item.ItemRenderer;
@Mixin(FirstPersonRenderer.class)
abstract class MixinFirstPersonRenderer {
@Redirect(method = "renderFirstPersonItem("
+ "Lnet/minecraft/client/network/AbstractClientPlayerEntity;FF"
+ "Lnet/minecraft/util/Hand;F"
+ "Lnet/minecraft/item/ItemStack;F)V",
private static final String LivingEntity = "Lnet/minecraft/entity/LivingEntity;";
private static final String MatrixStack = "Lnet/minecraft/client/util/math/MatrixStack;";
private static final String ItemStack = "Lnet/minecraft/item/ItemStack;";
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",
target = "Lnet/minecraft/client/render/item/ItemRenderer;method_23177("
+ "Lnet/minecraft/entity/LivingEntity;"
+ "Lnet/minecraft/item/ItemStack;"
+ "Lnet/minecraft/client/render/model/json/ModelTransformation$Type;"
+ "Z"
+ "Lnet/minecraft/client/util/math/MatrixStack;"
+ "Lnet/minecraft/client/render/VertexConsumerProvider;"
+ "Lnet/minecraft/world/World;"
+ "I"
+ "I)V"))
private void redirectRenderItemSide(FirstPersonRenderer self,
@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);
target = ItemRenderer + "method_23177(" + LivingEntity + ItemStack + Type + Boolean + MatrixStack + VertexConsumerProvider + World + Int + Int + ")V"))
private void redirectRenderItem(ItemRenderer target,
@Nullable LivingEntity entity,
ItemStack item,
Type transform,
boolean left,
MatrixStack stack,
VertexConsumerProvider renderContext,
@Nullable World world,
int lightUv, int overlayUv) {
PonyRenderManager.getInstance().getMagicRenderer().renderItemInFirstPerson(target, (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.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.FirstPersonRenderer;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.ItemRenderer;
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.Vector3f;
import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Arm;
import net.minecraft.util.Identifier;
import net.minecraft.util.UseAction;
import net.minecraft.world.World;
@ -31,8 +32,15 @@ public class LevitatingItemRenderer {
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() {
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.
*/
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);
matrix.push();
boolean doMagic = MineLittlePony.getInstance().getConfig().fpsmagic.get() && pony.getMetadata().hasMagic();
ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer();
if (doMagic) {
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.RenderPhase;
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.SourceFactor;
@ -36,9 +36,9 @@ public class MagicGlow extends RenderPhase {
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()
.texture(new Color(red, green, blue, alpha))
.texture(new Color(texture, red, green, blue, alpha))
.writeMaskState(COLOR_MASK)
.alpha(ONE_TENTH_ALPHA)
.transparency(GLOWING_TRANSPARENCY)
@ -55,8 +55,8 @@ public class MagicGlow extends RenderPhase {
private final float blue;
private final float alpha;
public Color(float red, float green, float blue, float alpha) {
super(SpriteAtlasTexture.BLOCK_ATLAS_TEX, false, false);
public Color(Identifier texture, float red, float green, float blue, float alpha) {
super(texture, false, false);
this.red = red;
this.green = green;
this.blue = blue;

View file

@ -2,6 +2,7 @@ package com.minelittlepony.client.render.blockentity.skull;
import com.google.common.collect.Maps;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.render.LevitatingItemRenderer;
import com.minelittlepony.client.render.entity.MobRenderers;
import com.minelittlepony.client.render.entity.RenderPonySkeleton;
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.entity.BlockEntityType;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
@ -81,7 +81,7 @@ public class PonySkullRenderer extends SkullBlockEntityRenderer {
stack.scale(-1, -1, 1);
VertexConsumer vertices = renderContext.getBuffer(RenderLayer.getEntityTranslucent(skin));
VertexConsumer vertices = renderContext.getBuffer(LevitatingItemRenderer.getRenderLayer(skin));
skull.setAngles(angle, poweredTicks);
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 net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.model.EntityModel;
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);
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);
stack.pop();

View file

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