mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-13 08:14:23 +01:00
Fixed more cases of item glows not working
This commit is contained in:
parent
e613886c71
commit
3e01252f62
9 changed files with 91 additions and 75 deletions
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue