From fd77224ff800adb476ffb95839cd9530190a31e8 Mon Sep 17 00:00:00 2001 From: Tom Boshoven Date: Mon, 1 Jan 2024 17:15:14 +0100 Subject: [PATCH 1/3] Add dye modifier to the Magic Mirror Squashed commit of the following: commit 6520bedeb6d9f65afd2de56f457101963cc7203d Author: Tom Boshoven Date: Mon Jan 1 17:01:20 2024 +0100 Missing comment commit 2fa32259c0defb93490b628821ca02dd9c537cb7 Merge: eec464b 5365db1 Author: Tom Boshoven Date: Mon Jan 1 16:54:07 2024 +0100 Merge remote-tracking branch 'origin/1.20.1' into 1.20.1-dye-modifier commit eec464bb9a783e6431b8af19905d58383fddad9e Author: Tom Boshoven Date: Sun Nov 26 19:55:48 2023 -0500 Apply changes from modifier rework commit 15a001ffb11395400a9c7a11735770a2f8d106a7 Merge: 15dacda 594edb8 Author: Tom Boshoven Date: Sun Nov 26 18:56:41 2023 -0500 Merge branch '1.20.1' into 1.20.1-dye-modifier commit 15dacda487ecfe7a3a84beb8a0a983da0f79bb31 Author: Tom Boshoven Date: Sat Nov 25 11:54:57 2023 -0500 Fix up imports commit 673f0fb7987d821815a5bfc3db13c8bfecb354d6 Author: Tom Boshoven Date: Sat Nov 25 01:43:33 2023 -0500 Add a dye modifier to the magic mirror --- .../minecraft/magicmirror/MagicMirrorMod.java | 2 + .../DyeMagicMirrorBlockEntityModifier.java | 47 +++++++++++++++++ .../modifiers/DyeMagicMirrorModifier.java | 50 +++++++++++++++++++ .../modifiers/DyeReflectionModifier.java | 25 ++++++++++ .../modifiers/ReflectionModifiers.java | 2 + .../renderers/ReflectionRenderer.java | 36 ++++++++++++- .../renderers/ReflectionRendererBase.java | 21 ++++++-- .../ArmorReflectionRendererModifier.java | 6 ++- .../BannerReflectionRendererModifier.java | 5 +- .../CreatureReflectionRendererModifier.java | 6 ++- .../DyeReflectionRendererModifier.java | 34 +++++++++++++ .../modifiers/ReflectionRendererModifier.java | 6 ++- 12 files changed, 227 insertions(+), 13 deletions(-) create mode 100644 MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java create mode 100644 MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java create mode 100644 MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/DyeReflectionModifier.java create mode 100644 MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/MagicMirrorMod.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/MagicMirrorMod.java index 8097bafd..88f40e7a 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/MagicMirrorMod.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/MagicMirrorMod.java @@ -5,6 +5,7 @@ import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.ArmorMagicMirrorModifier; import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.BannerMagicMirrorModifier; import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.CreatureMagicMirrorModifier; +import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.DyeMagicMirrorModifier; import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.MagicMirrorModifier; import com.tomboshoven.minecraft.magicmirror.client.ClientEvents; import com.tomboshoven.minecraft.magicmirror.commands.Commands; @@ -40,6 +41,7 @@ public MagicMirrorMod(IEventBus modEventBus) { MagicMirrorModifier.register(new ArmorMagicMirrorModifier()); MagicMirrorModifier.register(new BannerMagicMirrorModifier()); MagicMirrorModifier.register(new CreatureMagicMirrorModifier()); + MagicMirrorModifier.register(new DyeMagicMirrorModifier()); if (FMLEnvironment.dist == Dist.CLIENT) { ClientEvents.init(modEventBus); diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java new file mode 100644 index 00000000..afef0576 --- /dev/null +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java @@ -0,0 +1,47 @@ +package com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers; + +import com.tomboshoven.minecraft.magicmirror.blocks.entities.MagicMirrorCoreBlockEntity; +import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.MagicMirrorModifier; +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.DyeItem; +import net.minecraft.world.item.ItemStack; + +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class DyeMagicMirrorBlockEntityModifier extends ItemBasedMagicMirrorBlockEntityModifier { + /** + * @param modifier The modifier that applied this object to the block entity. + */ + public DyeMagicMirrorBlockEntityModifier(MagicMirrorModifier modifier, ItemStack item) { + super(modifier, item); + } + + public DyeMagicMirrorBlockEntityModifier(MagicMirrorModifier modifier, CompoundTag nbt) { + super(modifier, nbt); + } + + @Override + public boolean tryPlayerActivate(MagicMirrorCoreBlockEntity blockEntity, Player playerIn, InteractionHand hand) { + // No behavior right now. + return false; + } + + /** + * @return the color of the dye that was used. + */ + public float[] getColor() { + float[] color; + if (item.getItem() instanceof DyeItem dyeItem) { + float[] textureDiffuseColors = dyeItem.getDyeColor().getTextureDiffuseColors(); + color = new float[]{textureDiffuseColors[0], textureDiffuseColors[1], textureDiffuseColors[2], 1f}; + } else { + color = new float[]{1f, 1f, 1f, 1f}; + } + return color; + } +} diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java new file mode 100644 index 00000000..09407dae --- /dev/null +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java @@ -0,0 +1,50 @@ +package com.tomboshoven.minecraft.magicmirror.blocks.modifiers; + +import com.tomboshoven.minecraft.magicmirror.blocks.entities.MagicMirrorCoreBlockEntity; +import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.DyeMagicMirrorBlockEntityModifier; +import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier; +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.DyeItem; +import net.minecraft.world.item.ItemStack; + +import javax.annotation.ParametersAreNonnullByDefault; + +/** + * A magic mirror modifier that dyes the reflected entity. + */ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class DyeMagicMirrorModifier extends MagicMirrorModifier { + /** + * The name of the modifier. + * This should be stable as it gets written with save data. + */ + public static final String NAME = "dye"; + + @Override + public String getName() { + return NAME; + } + + @Override + public boolean canModify(ItemStack heldItem, MagicMirrorCoreBlockEntity blockEntity) { + // Must be activated using a dye item. + if (!(heldItem.getItem() instanceof DyeItem)) { + return false; + } + + // Must not have a dye modifier yet. + return !hasModifierOfType(blockEntity); + } + + @Override + MagicMirrorBlockEntityModifier createBlockEntityModifier(CompoundTag nbt) { + return new DyeMagicMirrorBlockEntityModifier(this, nbt); + } + + @Override + MagicMirrorBlockEntityModifier createBlockEntityModifier(ItemStack usedItem) { + return new DyeMagicMirrorBlockEntityModifier(this, usedItem); + } +} diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/DyeReflectionModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/DyeReflectionModifier.java new file mode 100644 index 00000000..f47fafb5 --- /dev/null +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/DyeReflectionModifier.java @@ -0,0 +1,25 @@ +package com.tomboshoven.minecraft.magicmirror.client.reflection.modifiers; + +import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.DyeMagicMirrorBlockEntityModifier; +import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier; +import com.tomboshoven.minecraft.magicmirror.client.reflection.renderers.ReflectionRendererBase; +import com.tomboshoven.minecraft.magicmirror.client.reflection.renderers.modifiers.DyeReflectionRendererModifier; + +import java.util.stream.IntStream; + +/** + * A reflection modifier that changes the color of the rendered model. + */ +public class DyeReflectionModifier extends ReflectionModifier { + @Override + public ReflectionRendererBase apply(MagicMirrorBlockEntityModifier modifier, ReflectionRendererBase reflectionRenderer) { + if (modifier instanceof DyeMagicMirrorBlockEntityModifier dyeModifier) { + float[] color = dyeModifier.getColor(); + // Since this is essentially a color filter, we tend to get very dim colors. + // We can simply make them brighter for a nicer effect. + IntStream.range(0, 3).forEach(i -> color[i] *= 2); + return new DyeReflectionRendererModifier(reflectionRenderer, color); + } + return reflectionRenderer; + } +} diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/ReflectionModifiers.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/ReflectionModifiers.java index b9e7bf7f..38590e2e 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/ReflectionModifiers.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/modifiers/ReflectionModifiers.java @@ -3,6 +3,7 @@ import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.ArmorMagicMirrorModifier; import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.BannerMagicMirrorModifier; import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.CreatureMagicMirrorModifier; +import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.DyeMagicMirrorModifier; import java.util.HashMap; import java.util.Map; @@ -20,5 +21,6 @@ public class ReflectionModifiers { MODIFIERS.put(ArmorMagicMirrorModifier.NAME, new ArmorReflectionModifier()); MODIFIERS.put(BannerMagicMirrorModifier.NAME, new BannerReflectionModifier()); MODIFIERS.put(CreatureMagicMirrorModifier.NAME, new CreatureReflectionModifier()); + MODIFIERS.put(DyeMagicMirrorModifier.NAME, new DyeReflectionModifier()); } } diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRenderer.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRenderer.java index a4dbaa3d..3cbbb75c 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRenderer.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRenderer.java @@ -1,5 +1,6 @@ package com.tomboshoven.minecraft.magicmirror.client.reflection.renderers; +import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexSorting; @@ -10,6 +11,8 @@ import net.minecraft.world.entity.Entity; import org.joml.Matrix4f; +import javax.annotation.Nullable; + /** * Renderer for reflections in the mirror. */ @@ -53,6 +56,8 @@ public void setUp() { RenderSystem.backupProjectionMatrix(); // Aspect is .5 to compensate for the rectangular mirror RenderSystem.setProjectionMatrix(new Matrix4f().setPerspective((float)(Math.PI / 2), .5f, .05f, 50f), VertexSorting.DISTANCE_TO_ORIGIN); + + Lighting.setupForEntityInInventory(); } @Override @@ -62,7 +67,7 @@ public void tearDown() { } @Override - public void render(float facing, float partialTicks, MultiBufferSource renderTypeBuffer) { + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize) { if (entityRenderer == null) { return; } @@ -70,12 +75,39 @@ public void render(float facing, float partialTicks, MultiBufferSource renderTyp PoseStack reflectionMatrixStack = new PoseStack(); // Head's up - reflectionMatrixStack.mulPose(Axis.XP.rotationDegrees(180)); + reflectionMatrixStack.mulPose(Axis.XP.rotation((float) Math.PI)); // Position within the frame reflectionMatrixStack.translate(0, -1, 1.5); // Face toward the front of the mirror reflectionMatrixStack.mulPose(Axis.YP.rotationDegrees(facing)); + if (colorize == null) { + // Skip the buffer manipulation + renderEntity(partialTicks, renderTypeBuffer, reflectionMatrixStack); + } else { + // Finish up what we already rendered because we'll change the shader color and want to make sure it only + // applies to the entity. + renderTypeBuffer.endBatch(); + float[] shaderColor = RenderSystem.getShaderColor().clone(); + RenderSystem.setShaderColor(colorize[0], colorize[1], colorize[2], colorize[3]); + renderEntity(partialTicks, renderTypeBuffer, reflectionMatrixStack); + // Now finish up this batch and reset the color + renderTypeBuffer.endBatch(); + RenderSystem.setShaderColor(shaderColor[0], shaderColor[1], shaderColor[2], shaderColor[3]); + } + } + + /** + * Perform the actual entity rendering. + * + * @param partialTicks The partial ticks, for smooth rendering. + * @param renderTypeBuffer The buffer to render to. + * @param reflectionMatrixStack The initialized matrix stack. + */ + private void renderEntity(float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, PoseStack reflectionMatrixStack) { + if (entityRenderer == null) { + return; + } // The typing of these classes works out a little weird, so instead of complicating things too much, let's go // with the unchecked cast. //noinspection unchecked diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRendererBase.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRendererBase.java index 9c6f87ef..3b75404f 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRendererBase.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/ReflectionRendererBase.java @@ -4,6 +4,8 @@ import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.world.entity.Entity; +import javax.annotation.Nullable; + /** * Base class for reflection renderers. */ @@ -35,8 +37,21 @@ public abstract class ReflectionRendererBase { /** * Render the reflection. * - * @param facing The rotation (in degrees) for the entity that is being rendered. - * @param partialTicks The partial ticks, for smooth rendering. + * @param facing The rotation (in degrees) for the entity that is being rendered. + * @param partialTicks The partial ticks, for smooth rendering. + * @param renderTypeBuffer The buffer to render to. + * @param colorize If not null, render the entity in a specific color. + */ + public abstract void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize); + + /** + * Render the reflection. + * + * @param facing The rotation (in degrees) for the entity that is being rendered. + * @param partialTicks The partial ticks, for smooth rendering. + * @param renderTypeBuffer The buffer to render to. */ - public abstract void render(float facing, float partialTicks, MultiBufferSource renderTypeBuffer); + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer) { + render(facing, partialTicks, renderTypeBuffer, null); + } } diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ArmorReflectionRendererModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ArmorReflectionRendererModifier.java index 1faa73d1..f60d28b8 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ArmorReflectionRendererModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ArmorReflectionRendererModifier.java @@ -8,6 +8,8 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import javax.annotation.Nullable; + /** * A modifier for a reflection renderer which replaces the armor that is worn by the reflected entity. */ @@ -27,7 +29,7 @@ public ArmorReflectionRendererModifier(ReflectionRendererBase baseRenderer, Repl } @Override - public void render(float facing, float partialTicks, MultiBufferSource renderTypeBuffer) { + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize) { Entity entity = getEntity(); if (entity instanceof Player) { NonNullList inventoryToSwap = ((Player) entity).getInventory().armor; @@ -35,7 +37,7 @@ public void render(float facing, float partialTicks, MultiBufferSource renderTyp // Simply swap out the armor inventory twice replacementArmor.swap(inventoryToSwap); - super.render(facing, partialTicks, renderTypeBuffer); + super.render(facing, partialTicks, renderTypeBuffer, colorize); replacementArmor.swap(inventoryToSwap); } diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/BannerReflectionRendererModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/BannerReflectionRendererModifier.java index 77894df4..b8acc754 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/BannerReflectionRendererModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/BannerReflectionRendererModifier.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.entity.BannerPattern; import org.apache.commons.lang3.tuple.Pair; +import javax.annotation.Nullable; import java.util.Collection; import java.util.Optional; @@ -36,8 +37,8 @@ public BannerReflectionRendererModifier(ReflectionRendererBase baseRenderer, Col } @Override - public void render(float facing, float partialTicks, MultiBufferSource renderTypeBuffer) { - super.render(facing, partialTicks, renderTypeBuffer); + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize) { + super.render(facing, partialTicks, renderTypeBuffer, colorize); for (Pair, DyeColor> patternColor : patternColorList) { float[] rgb = patternColor.getRight().getTextureDiffuseColors(); diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/CreatureReflectionRendererModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/CreatureReflectionRendererModifier.java index a4dd7016..bfd8a52c 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/CreatureReflectionRendererModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/CreatureReflectionRendererModifier.java @@ -7,6 +7,8 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import javax.annotation.Nullable; + /** * Reflection renderer modifier that replaces the rendered entity by a different one. *

@@ -24,13 +26,13 @@ public CreatureReflectionRendererModifier(ReflectionRendererBase baseRenderer, E } @Override - public void render(float facing, float partialTicks, MultiBufferSource renderTypeBuffer) { + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize) { EntityRenderer originalRenderer = getRenderer(); EntityRenderer replacementRenderer = OffModelPlayerRenderers.getInstance().get(entityType); if (replacementRenderer != null) { setRenderer(replacementRenderer); } - super.render(facing, partialTicks, renderTypeBuffer); + super.render(facing, partialTicks, renderTypeBuffer, colorize); setRenderer(originalRenderer); } } diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java new file mode 100644 index 00000000..df29c1f8 --- /dev/null +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java @@ -0,0 +1,34 @@ +package com.tomboshoven.minecraft.magicmirror.client.reflection.renderers.modifiers; + +import com.tomboshoven.minecraft.magicmirror.client.reflection.renderers.ReflectionRendererBase; +import net.minecraft.MethodsReturnNonnullByDefault; +import net.minecraft.client.renderer.MultiBufferSource; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +/** + * A modifier for a reflection renderer which colorizes the reflected entity. + */ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class DyeReflectionRendererModifier extends ReflectionRendererModifier { + /** + * The color for the reflection. + */ + protected final float[] color; + + /** + * @param baseRenderer The renderer that is being proxied. + * @param color The color (RGBA) for the reflected entity. + */ + public DyeReflectionRendererModifier(ReflectionRendererBase baseRenderer, float[] color) { + super(baseRenderer); + this.color = color; + } + + @Override + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize) { + super.render(facing, partialTicks, renderTypeBuffer, color); + } +} diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ReflectionRendererModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ReflectionRendererModifier.java index 8dbcb8dd..9d7e7c56 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ReflectionRendererModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/ReflectionRendererModifier.java @@ -5,6 +5,8 @@ import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.world.entity.Entity; +import javax.annotation.Nullable; + /** * Modifier for how the reflection is rendered. * Contains some basic functionality for overriding part of the rendering behavior. @@ -48,7 +50,7 @@ public void tearDown() { } @Override - public void render(float facing, float partialTicks, MultiBufferSource renderTypeBuffer) { - baseRenderer.render(facing, partialTicks, renderTypeBuffer); + public void render(float facing, float partialTicks, MultiBufferSource.BufferSource renderTypeBuffer, @Nullable float[] colorize) { + baseRenderer.render(facing, partialTicks, renderTypeBuffer, colorize); } } From 1cb65e834a0b1513970643534ab0edcfff4caef4 Mon Sep 17 00:00:00 2001 From: Tom Boshoven Date: Mon, 1 Jan 2024 17:19:07 +0100 Subject: [PATCH 2/3] Remove annotations that are now no longer necessary --- .../modifiers/DyeMagicMirrorBlockEntityModifier.java | 5 ----- .../magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java | 5 ----- .../renderers/modifiers/DyeReflectionRendererModifier.java | 4 ---- 3 files changed, 14 deletions(-) diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java index afef0576..c3ac87c9 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/entities/modifiers/DyeMagicMirrorBlockEntityModifier.java @@ -2,17 +2,12 @@ import com.tomboshoven.minecraft.magicmirror.blocks.entities.MagicMirrorCoreBlockEntity; import com.tomboshoven.minecraft.magicmirror.blocks.modifiers.MagicMirrorModifier; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.ItemStack; -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault public class DyeMagicMirrorBlockEntityModifier extends ItemBasedMagicMirrorBlockEntityModifier { /** * @param modifier The modifier that applied this object to the block entity. diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java index 09407dae..d95eac7d 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java @@ -3,18 +3,13 @@ import com.tomboshoven.minecraft.magicmirror.blocks.entities.MagicMirrorCoreBlockEntity; import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.DyeMagicMirrorBlockEntityModifier; import com.tomboshoven.minecraft.magicmirror.blocks.entities.modifiers.MagicMirrorBlockEntityModifier; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.ItemStack; -import javax.annotation.ParametersAreNonnullByDefault; - /** * A magic mirror modifier that dyes the reflected entity. */ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault public class DyeMagicMirrorModifier extends MagicMirrorModifier { /** * The name of the modifier. diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java index df29c1f8..444c7f56 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/client/reflection/renderers/modifiers/DyeReflectionRendererModifier.java @@ -1,17 +1,13 @@ package com.tomboshoven.minecraft.magicmirror.client.reflection.renderers.modifiers; import com.tomboshoven.minecraft.magicmirror.client.reflection.renderers.ReflectionRendererBase; -import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.client.renderer.MultiBufferSource; import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; /** * A modifier for a reflection renderer which colorizes the reflected entity. */ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault public class DyeReflectionRendererModifier extends ReflectionRendererModifier { /** * The color for the reflection. From f0e58dcca244595c7782c7399b57924df4160cdd Mon Sep 17 00:00:00 2001 From: Tom Boshoven Date: Mon, 1 Jan 2024 17:40:30 +0100 Subject: [PATCH 3/3] Don't dupe dye --- .../magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java index d95eac7d..95dfacb9 100644 --- a/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java +++ b/MagicMirror/src/main/java/com/tomboshoven/minecraft/magicmirror/blocks/modifiers/DyeMagicMirrorModifier.java @@ -40,6 +40,6 @@ MagicMirrorBlockEntityModifier createBlockEntityModifier(CompoundTag nbt) { @Override MagicMirrorBlockEntityModifier createBlockEntityModifier(ItemStack usedItem) { - return new DyeMagicMirrorBlockEntityModifier(this, usedItem); + return new DyeMagicMirrorBlockEntityModifier(this, usedItem.split(1)); } }