From daef34065495da88cec4f0c7455ac432045bda57 Mon Sep 17 00:00:00 2001 From: TheDeathlyCow Date: Mon, 5 May 2025 01:41:12 -1000 Subject: [PATCH 1/4] basic enchantment glint for polluted items --- .../thirstful/client/TRenderLayers.java | 29 ++++++++ .../mixin/client/ExampleClientMixin.java | 15 ---- .../mixin/client/ItemRendererMixin.java | 66 ++++++++++++++++++ .../resources/thirstful.client.mixins.json | 2 +- .../textures/misc/contaminated_item_glint.png | Bin 0 -> 12310 bytes .../misc/contaminated_item_glint.png.mcmeta | 5 ++ 6 files changed, 101 insertions(+), 16 deletions(-) create mode 100644 src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java delete mode 100644 src/client/java/com/thedeathlycow/thirstful/mixin/client/ExampleClientMixin.java create mode 100644 src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java create mode 100644 src/main/resources/assets/thirstful/textures/misc/contaminated_item_glint.png create mode 100644 src/main/resources/assets/thirstful/textures/misc/contaminated_item_glint.png.mcmeta diff --git a/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java b/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java new file mode 100644 index 0000000..10e0904 --- /dev/null +++ b/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java @@ -0,0 +1,29 @@ +package com.thedeathlycow.thirstful.client; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.RenderPhase; +import net.minecraft.client.render.VertexFormat; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.render.item.ItemRenderer; + +public final class TRenderLayers { + private static final RenderLayer CONTAMINATED_GLINT = RenderLayer.of( + "glint", + VertexFormats.POSITION_TEXTURE, + VertexFormat.DrawMode.QUADS, + RenderLayer.DEFAULT_BUFFER_SIZE, + RenderLayer.MultiPhaseParameters.builder() + .program(RenderPhase.GLINT_PROGRAM) + .texture(new RenderPhase.Texture(ItemRenderer.ITEM_ENCHANTMENT_GLINT, true, false)) + .writeMaskState(RenderPhase.COLOR_MASK) + .cull(RenderPhase.DISABLE_CULLING) + .depthTest(RenderPhase.EQUAL_DEPTH_TEST) + .transparency(RenderPhase.GLINT_TRANSPARENCY) + .texturing(RenderPhase.GLINT_TEXTURING) + .build(false) + ); + + private TRenderLayers() { + + } +} \ No newline at end of file diff --git a/src/client/java/com/thedeathlycow/thirstful/mixin/client/ExampleClientMixin.java b/src/client/java/com/thedeathlycow/thirstful/mixin/client/ExampleClientMixin.java deleted file mode 100644 index 157cdab..0000000 --- a/src/client/java/com/thedeathlycow/thirstful/mixin/client/ExampleClientMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.thedeathlycow.thirstful.mixin.client; - -import net.minecraft.client.MinecraftClient; -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.CallbackInfo; - -@Mixin(MinecraftClient.class) -public class ExampleClientMixin { - @Inject(at = @At("HEAD"), method = "run") - private void init(CallbackInfo info) { - // This code is injected into the start of MinecraftClient.run()V - } -} \ No newline at end of file diff --git a/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java b/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java new file mode 100644 index 0000000..c287f9e --- /dev/null +++ b/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java @@ -0,0 +1,66 @@ +package com.thedeathlycow.thirstful.mixin.client; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.thedeathlycow.thirstful.item.component.PollutantComponent; +import com.thedeathlycow.thirstful.registry.TDataComponentTypes; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.VertexConsumers; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class ItemRendererMixin { + @WrapOperation( + method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/render/item/ItemRenderer;getDirectItemGlintConsumer(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/RenderLayer;ZZ)Lnet/minecraft/client/render/VertexConsumer;" + ) + ) + private VertexConsumer getDirectContaminatedGlintConsumer( + VertexConsumerProvider vertexConsumers, + RenderLayer layer, + boolean solid, + boolean glint, + Operation original, + ItemStack stack + ) { + PollutantComponent pollutants = stack.get(TDataComponentTypes.POLLUTANTS); + if (pollutants != null && !pollutants.clean()) { + return VertexConsumers.union( + vertexConsumers.getBuffer(solid ? RenderLayer.getGlint() : RenderLayer.getDirectEntityGlint()), + vertexConsumers.getBuffer(layer) + ); + } + return original.call(vertexConsumers, layer, solid, glint); + } + + @WrapOperation( + method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/render/item/ItemRenderer;getItemGlintConsumer(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/RenderLayer;ZZ)Lnet/minecraft/client/render/VertexConsumer;") + ) + private VertexConsumer getContaminatedGlintConsumer( + VertexConsumerProvider vertexConsumers, + RenderLayer layer, + boolean solid, + boolean glint, + Operation original, + ItemStack stack + ) { + PollutantComponent pollutants = stack.get(TDataComponentTypes.POLLUTANTS); + if (pollutants != null && !pollutants.clean()) { + return VertexConsumers.union( + vertexConsumers.getBuffer(solid ? RenderLayer.getGlint() : RenderLayer.getEntityGlint()), + vertexConsumers.getBuffer(layer) + ); + } + return original.call(vertexConsumers, layer, solid, glint); + } +} \ No newline at end of file diff --git a/src/client/resources/thirstful.client.mixins.json b/src/client/resources/thirstful.client.mixins.json index 66a6329..1d4a353 100644 --- a/src/client/resources/thirstful.client.mixins.json +++ b/src/client/resources/thirstful.client.mixins.json @@ -3,7 +3,7 @@ "package": "com.thedeathlycow.thirstful.mixin.client", "compatibilityLevel": "JAVA_21", "client": [ - "ExampleClientMixin" + "ItemRendererMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/assets/thirstful/textures/misc/contaminated_item_glint.png b/src/main/resources/assets/thirstful/textures/misc/contaminated_item_glint.png new file mode 100644 index 0000000000000000000000000000000000000000..a516b02f03cb549509d26a78728e6d148623ea22 GIT binary patch literal 12310 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 t#+GhFz$8*}VO78*q_~ME;9AhoDaPyI8Vj-s_ Date: Mon, 5 May 2025 02:25:22 -1000 Subject: [PATCH 2/4] funny green glint --- .gitattributes | 4 +- psds/contaminated glints.psd | 3 ++ .../thirstful/ThirstfulClient.java | 2 + .../thirstful/block/TBlockColors.java | 1 - .../thirstful/client/TRenderLayers.java | 29 +++++++++++-- .../client/BufferBuilderStorageMixin.java | 26 ++++++++++++ .../mixin/client/ItemRendererMixin.java | 38 ++++-------------- .../resources/thirstful.client.mixins.json | 17 ++++---- .../item/component/PollutantComponent.java | 7 ++++ .../mixin/common/item/ItemStackMixin.java | 13 ++++++ src/main/resources/assets/thirstful/icon.png | Bin 2006 -> 129 bytes .../textures/misc/contaminated_item_glint.png | Bin 12310 -> 130 bytes .../misc/contaminted_entity_glint.png | 3 ++ 13 files changed, 98 insertions(+), 45 deletions(-) create mode 100644 psds/contaminated glints.psd create mode 100644 src/client/java/com/thedeathlycow/thirstful/mixin/client/BufferBuilderStorageMixin.java create mode 100644 src/main/resources/assets/thirstful/textures/misc/contaminted_entity_glint.png diff --git a/.gitattributes b/.gitattributes index 097f9f9..73e4133 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,7 +3,7 @@ # # Linux start script should use lf /gradlew text eol=lf - # These are Windows script files and should use crlf *.bat text eol=crlf - +*.psd filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text diff --git a/psds/contaminated glints.psd b/psds/contaminated glints.psd new file mode 100644 index 0000000..5e405fc --- /dev/null +++ b/psds/contaminated glints.psd @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9553bed7868d9400ca924754d9fbc665342393912d08f3a1fbef1c4e9539d357 +size 182006 diff --git a/src/client/java/com/thedeathlycow/thirstful/ThirstfulClient.java b/src/client/java/com/thedeathlycow/thirstful/ThirstfulClient.java index 5b6d226..22f40f4 100644 --- a/src/client/java/com/thedeathlycow/thirstful/ThirstfulClient.java +++ b/src/client/java/com/thedeathlycow/thirstful/ThirstfulClient.java @@ -7,6 +7,8 @@ import me.fzzyhmstrs.fzzy_config.api.RegisterType; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; +import net.minecraft.client.render.RenderLayers; +import net.minecraft.client.render.TexturedRenderLayers; import java.util.function.Supplier; diff --git a/src/client/java/com/thedeathlycow/thirstful/block/TBlockColors.java b/src/client/java/com/thedeathlycow/thirstful/block/TBlockColors.java index 4b364ef..d9983e9 100644 --- a/src/client/java/com/thedeathlycow/thirstful/block/TBlockColors.java +++ b/src/client/java/com/thedeathlycow/thirstful/block/TBlockColors.java @@ -10,7 +10,6 @@ import net.minecraft.client.color.world.BiomeColors; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.ColorHelper; -import net.minecraft.util.math.MathHelper; import net.minecraft.world.BlockRenderView; import org.jetbrains.annotations.Nullable; diff --git a/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java b/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java index 10e0904..b0939eb 100644 --- a/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java +++ b/src/client/java/com/thedeathlycow/thirstful/client/TRenderLayers.java @@ -1,20 +1,27 @@ package com.thedeathlycow.thirstful.client; +import com.thedeathlycow.thirstful.Thirstful; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; -import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.util.BufferAllocator; +import net.minecraft.util.Identifier; + +import java.util.Map; public final class TRenderLayers { + private static final Identifier ITEM_CONTAMINATED_GLINT = Thirstful.id("textures/misc/contaminated_item_glint.png"); + private static final RenderLayer CONTAMINATED_GLINT = RenderLayer.of( - "glint", + "thirstful_glint", VertexFormats.POSITION_TEXTURE, VertexFormat.DrawMode.QUADS, RenderLayer.DEFAULT_BUFFER_SIZE, RenderLayer.MultiPhaseParameters.builder() .program(RenderPhase.GLINT_PROGRAM) - .texture(new RenderPhase.Texture(ItemRenderer.ITEM_ENCHANTMENT_GLINT, true, false)) + .texture(new RenderPhase.Texture(ITEM_CONTAMINATED_GLINT, true, false)) .writeMaskState(RenderPhase.COLOR_MASK) .cull(RenderPhase.DISABLE_CULLING) .depthTest(RenderPhase.EQUAL_DEPTH_TEST) @@ -23,6 +30,22 @@ public final class TRenderLayers { .build(false) ); + public static RenderLayer getDirectContaminatedGlint(boolean solid) { + return solid ? CONTAMINATED_GLINT : RenderLayer.getDirectEntityGlint(); + } + + public static RenderLayer getContaminatedGlint(boolean solid) { + return solid ? CONTAMINATED_GLINT : RenderLayer.getEntityGlint(); + } + + public static void buildMap(Map map) { + assignToAllocator(map, CONTAMINATED_GLINT); + } + + private static void assignToAllocator(Map map, RenderLayer layer) { + map.put(layer, new BufferAllocator(layer.getExpectedBufferSize())); + } + private TRenderLayers() { } diff --git a/src/client/java/com/thedeathlycow/thirstful/mixin/client/BufferBuilderStorageMixin.java b/src/client/java/com/thedeathlycow/thirstful/mixin/client/BufferBuilderStorageMixin.java new file mode 100644 index 0000000..7952dc6 --- /dev/null +++ b/src/client/java/com/thedeathlycow/thirstful/mixin/client/BufferBuilderStorageMixin.java @@ -0,0 +1,26 @@ +package com.thedeathlycow.thirstful.mixin.client; + +import com.thedeathlycow.thirstful.client.TRenderLayers; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; +import net.minecraft.client.render.BufferBuilderStorage; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.util.BufferAllocator; +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.CallbackInfo; + +@Mixin(BufferBuilderStorage.class) +public class BufferBuilderStorageMixin { + @Inject( + method = "assignBufferBuilder", + at = @At("RETURN") + ) + private static void buildRenderLayers( + Object2ObjectLinkedOpenHashMap map, + RenderLayer layer, + CallbackInfo ci + ) { + TRenderLayers.buildMap(map); + } +} \ No newline at end of file diff --git a/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java b/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java index c287f9e..ee5ca3e 100644 --- a/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java +++ b/src/client/java/com/thedeathlycow/thirstful/mixin/client/ItemRendererMixin.java @@ -2,8 +2,8 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.thedeathlycow.thirstful.client.TRenderLayers; import com.thedeathlycow.thirstful.item.component.PollutantComponent; -import com.thedeathlycow.thirstful.registry.TDataComponentTypes; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; @@ -22,45 +22,21 @@ public class ItemRendererMixin { target = "Lnet/minecraft/client/render/item/ItemRenderer;getDirectItemGlintConsumer(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/RenderLayer;ZZ)Lnet/minecraft/client/render/VertexConsumer;" ) ) - private VertexConsumer getDirectContaminatedGlintConsumer( - VertexConsumerProvider vertexConsumers, + private VertexConsumer getDirectConsumer( + VertexConsumerProvider provider, RenderLayer layer, boolean solid, boolean glint, Operation original, ItemStack stack ) { - PollutantComponent pollutants = stack.get(TDataComponentTypes.POLLUTANTS); - if (pollutants != null && !pollutants.clean()) { + if (!PollutantComponent.get(stack).clean()) { return VertexConsumers.union( - vertexConsumers.getBuffer(solid ? RenderLayer.getGlint() : RenderLayer.getDirectEntityGlint()), - vertexConsumers.getBuffer(layer) + provider.getBuffer(TRenderLayers.getDirectContaminatedGlint(solid)), + provider.getBuffer(layer) ); } - return original.call(vertexConsumers, layer, solid, glint); - } - @WrapOperation( - method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/render/item/ItemRenderer;getItemGlintConsumer(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/client/render/RenderLayer;ZZ)Lnet/minecraft/client/render/VertexConsumer;") - ) - private VertexConsumer getContaminatedGlintConsumer( - VertexConsumerProvider vertexConsumers, - RenderLayer layer, - boolean solid, - boolean glint, - Operation original, - ItemStack stack - ) { - PollutantComponent pollutants = stack.get(TDataComponentTypes.POLLUTANTS); - if (pollutants != null && !pollutants.clean()) { - return VertexConsumers.union( - vertexConsumers.getBuffer(solid ? RenderLayer.getGlint() : RenderLayer.getEntityGlint()), - vertexConsumers.getBuffer(layer) - ); - } - return original.call(vertexConsumers, layer, solid, glint); + return original.call(provider, layer, solid, glint); } } \ No newline at end of file diff --git a/src/client/resources/thirstful.client.mixins.json b/src/client/resources/thirstful.client.mixins.json index 1d4a353..c853114 100644 --- a/src/client/resources/thirstful.client.mixins.json +++ b/src/client/resources/thirstful.client.mixins.json @@ -1,11 +1,12 @@ { - "required": true, - "package": "com.thedeathlycow.thirstful.mixin.client", - "compatibilityLevel": "JAVA_21", - "client": [ - "ItemRendererMixin" - ], - "injectors": { - "defaultRequire": 1 + "required": true, + "package": "com.thedeathlycow.thirstful.mixin.client", + "compatibilityLevel": "JAVA_21", + "client": [ + "BufferBuilderStorageMixin", + "ItemRendererMixin" + ], + "injectors": { + "defaultRequire": 1 } } \ No newline at end of file diff --git a/src/main/java/com/thedeathlycow/thirstful/item/component/PollutantComponent.java b/src/main/java/com/thedeathlycow/thirstful/item/component/PollutantComponent.java index 996d5b6..c57f379 100644 --- a/src/main/java/com/thedeathlycow/thirstful/item/component/PollutantComponent.java +++ b/src/main/java/com/thedeathlycow/thirstful/item/component/PollutantComponent.java @@ -4,7 +4,9 @@ import com.mojang.serialization.codecs.RecordCodecBuilder; import com.thedeathlycow.thirstful.Thirstful; import com.thedeathlycow.thirstful.config.common.WaterPollutionConfig; +import com.thedeathlycow.thirstful.registry.TDataComponentTypes; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.item.tooltip.TooltipAppender; import net.minecraft.item.tooltip.TooltipType; import net.minecraft.network.RegistryByteBuf; @@ -14,6 +16,7 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; +import javax.management.openmbean.TabularData; import java.util.function.Consumer; public record PollutantComponent( @@ -96,6 +99,10 @@ public PollutantComponent mixWith(PollutantComponent other) { ); } + public static PollutantComponent get(ItemStack stack) { + return stack.getOrDefault(TDataComponentTypes.POLLUTANTS, DEFAULT); + } + public boolean checkedDirty(WaterPollutionConfig config) { return config.enableDirtiness() && this.dirty; } diff --git a/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java b/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java index e472fc6..4e0124d 100644 --- a/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java +++ b/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java @@ -4,6 +4,7 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.thedeathlycow.thirstful.item.ConsumeItemCallback; import com.thedeathlycow.thirstful.item.ItemStackCreationCallback; +import com.thedeathlycow.thirstful.item.component.PollutantComponent; import net.minecraft.component.ComponentHolder; import net.minecraft.component.ComponentMapImpl; import net.minecraft.component.DataComponentTypes; @@ -17,6 +18,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ItemStack.class) public abstract class ItemStackMixin implements ComponentHolder { @@ -48,4 +50,15 @@ private ItemStack invokeConsumeItem(World world, LivingEntity user, Operation cir) { + if (!PollutantComponent.get((ItemStack) (Object) this).clean()) { + cir.setReturnValue(true); + } + } } \ No newline at end of file diff --git a/src/main/resources/assets/thirstful/icon.png b/src/main/resources/assets/thirstful/icon.png index 57e96de2e50353914ad29b9b2be897c640c9cc4b..57425cb3f1c2283a9fc09dc635214ac2eb470d40 100644 GIT binary patch literal 129 zcmWN?K@!3s3;@78uiyiggg~JEO$i{(sC1r7TY`gWmRbXM_kl5MaEf#WVW$-yws)9K>j4>3l+vkC=db M$ZGa)(H4N!50qFYH2?qr literal 2006 zcmeH|=~oi?8pnS?Nx8LLoifKIPq#F6Xxvb0)EXfyuDP$HY1(x`L^91>vBeo{Mr%w_ zxhR+#poufCm71o;q^OCe7NKQV6d1||FgIlAocROh-FnV@gKu!WyuS|YwSWwqT0*n^57#v9GB~=ue~+bQXdGi3%i;&|zp5D3%M)Ktk3 z1;J*qtPmfKOicsvc)a8tw@9K||HN=oW3{G*!T_OASP3gGE>1{F`U;`5A;9ob?{hfy z-QBL%6bI+fbU7pI={+X%H+vzUU)`OnPTB!nre|gvb2e6@TIoz`et!OhM8dX%wRUzk zU@({qzlK@vph{o8eCZP&9v;}Z%aTf^Zgwd|l+w}+b!lnoAEo>4VN2riLx^wY-&MQ# zO}dvq=8PMS;o{{l>VsC35r>RJrUHC@=W11RbLW&wX%Ie{kD?lpzyBWYh(fWGh{SJm z1l73N>%x?VNToAsrd4U)`=t4@!y~@- zt%b5LO-xvYh5C=DiZY$18^<1M!Qla6VPQ4o8Z?o}VKbTD6bc2w!-KidAzTW%WuRz# z&!bBpB3j&g$sVl*Br&h$Oi5~R?!VOPRr$g!xEm`*5;87?cL@M}z#;m){Pk#+TlP|1 z+KJI|!xCFwEBu2M79?It&dyc|1pDCbcziv|*%|9#lGT?u6K9|83u$j{omYP ziwKUoqoZR{_QAo=$k^C#!euO#M0(qY*({r)B8d^Y&v>bZ1|Z%#q}aDB^3*U424goj zk4vw|$FMj}W9Rn)%OM;Nw*q~h_U+X@_J$S2eXEHLF!;*ALYLgH`tNGKjV(i846bi*n1J2{?&(HqeujkVN zIieFF@n8J?8p?oO5a+}=6WkXXDC~OG(+h{XWxyKU$vs}1Neu$ zVA%Acb+qRs#S diff --git a/src/main/resources/assets/thirstful/textures/misc/contaminated_item_glint.png b/src/main/resources/assets/thirstful/textures/misc/contaminated_item_glint.png index a516b02f03cb549509d26a78728e6d148623ea22..4143a6a969573e48a7c0a851873700e4932d1f89 100644 GIT binary patch literal 130 zcmWl~%MrpL5CG6SRnUNeg)B(AVfhF%DjApLVD-j#d1v`>A8*;_+<8;#(dX@1dAV)} zEor#k9D_}ld)39F&Iyc#YsBbb4N&P% LaQ_wwXq^*3{(dNF literal 12310 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 t#+GhFz$8*}VO78*q_~ME;9AhoDaPyI8Vj-s_ Date: Mon, 5 May 2025 02:34:55 -1000 Subject: [PATCH 3/4] remove hasGlint mixin --- psds/contaminated glints.psd | 4 ++-- .../thirstful/mixin/common/item/ItemStackMixin.java | 11 ----------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/psds/contaminated glints.psd b/psds/contaminated glints.psd index 5e405fc..6fe40d6 100644 --- a/psds/contaminated glints.psd +++ b/psds/contaminated glints.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9553bed7868d9400ca924754d9fbc665342393912d08f3a1fbef1c4e9539d357 -size 182006 +oid sha256:af00b6e9865cafd23d1bc0810647e2f007ecbe689c4b7d186b929d0f6254503f +size 182216 diff --git a/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java b/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java index 4e0124d..78a38e4 100644 --- a/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java +++ b/src/main/java/com/thedeathlycow/thirstful/mixin/common/item/ItemStackMixin.java @@ -50,15 +50,4 @@ private ItemStack invokeConsumeItem(World world, LivingEntity user, Operation cir) { - if (!PollutantComponent.get((ItemStack) (Object) this).clean()) { - cir.setReturnValue(true); - } - } } \ No newline at end of file From d042ff9b0028abfd7a08ae678bd6fbe2b67d7578 Mon Sep 17 00:00:00 2001 From: TheDeathlyCow <53499406+TheDeathlyCow@users.noreply.github.com> Date: Tue, 30 Sep 2025 22:45:21 +1300 Subject: [PATCH 4/4] fix water bucket pollutant collection --- .../thedeathlycow/thirstful/Thirstful.java | 1 - .../thirstful/item/WaterCollection.java | 2 +- .../thirstful/thirst/WaterPollution.java | 29 +------------------ 3 files changed, 2 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/thedeathlycow/thirstful/Thirstful.java b/src/main/java/com/thedeathlycow/thirstful/Thirstful.java index 0f94a0a..d1747d7 100644 --- a/src/main/java/com/thedeathlycow/thirstful/Thirstful.java +++ b/src/main/java/com/thedeathlycow/thirstful/Thirstful.java @@ -38,7 +38,6 @@ public static void initialize() { TItems.initialize(); TStatusEffects.initialize(); TDataComponentTypes.initialize(); - WaterPollution.initialize(); TPointsOfInterest.initialize(); if (ModIntegration.isScorchfulLoaded()) { ScorchfulIntegration.initialize(); diff --git a/src/main/java/com/thedeathlycow/thirstful/item/WaterCollection.java b/src/main/java/com/thedeathlycow/thirstful/item/WaterCollection.java index 26bdefc..b17089f 100644 --- a/src/main/java/com/thedeathlycow/thirstful/item/WaterCollection.java +++ b/src/main/java/com/thedeathlycow/thirstful/item/WaterCollection.java @@ -37,7 +37,7 @@ public static void polluteCollectedWater(ItemStack stack, World world, BlockPos TDataComponentTypes.POLLUTANTS, PollutantComponent.DEFAULT ); - PollutantComponent pollutants = WaterPollution.POLLUTANT_CONTAINER.find(world, sourcePos, null); + PollutantComponent pollutants = WaterPollution.findPollutants(world, sourcePos); Objects.requireNonNull(pollutants); stack.set(TDataComponentTypes.POLLUTANTS, current.mixWith(pollutants)); } diff --git a/src/main/java/com/thedeathlycow/thirstful/thirst/WaterPollution.java b/src/main/java/com/thedeathlycow/thirstful/thirst/WaterPollution.java index 6965f23..b2743ba 100644 --- a/src/main/java/com/thedeathlycow/thirstful/thirst/WaterPollution.java +++ b/src/main/java/com/thedeathlycow/thirstful/thirst/WaterPollution.java @@ -1,47 +1,20 @@ package com.thedeathlycow.thirstful.thirst; -import com.thedeathlycow.thirstful.Thirstful; -import com.thedeathlycow.thirstful.config.common.WaterPollutionConfig; import com.thedeathlycow.thirstful.item.component.PollutantComponent; import com.thedeathlycow.thirstful.registry.tag.TBiomeTags; import com.thedeathlycow.thirstful.registry.tag.TItemTags; -import net.fabricmc.fabric.api.lookup.v1.block.BlockApiLookup; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.entity.BlockEntity; import net.minecraft.item.ItemStack; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; -import org.jetbrains.annotations.Nullable; public final class WaterPollution { - public static final PollutantComponent FALLBACK = new PollutantComponent(true, true, false); - - public static final BlockApiLookup POLLUTANT_CONTAINER = BlockApiLookup.get( - Thirstful.id("water_pollutants"), - PollutantComponent.class, - Void.class - ); - - public static void initialize() { - Thirstful.LOGGER.debug("Initialized Thirstful pollutant lookup API"); - POLLUTANT_CONTAINER.registerForBlocks(WaterPollution::waterSourceLookup, Blocks.WATER); - POLLUTANT_CONTAINER.registerFallback((world, pos, state, blockEntity, context) -> FALLBACK); - } - public static boolean canCarryPollutants(ItemStack stack) { return stack.isIn(TItemTags.CAN_BE_POLLUTED) && !stack.isIn(TItemTags.CAN_NOT_BE_POLLUTED); } - private static PollutantComponent waterSourceLookup( - World world, - BlockPos pos, - BlockState state, - @Nullable BlockEntity blockEntity, - Void context - ) { + public static PollutantComponent findPollutants(World world, BlockPos pos) { boolean dirty = true; boolean contaminated = true; boolean salty = false;