diff --git a/ConfluenceOtherworld/src/main/java/org/confluence/mod/mixin/client/gui/screens/inventory/EffectRenderingInventoryScreenMixin.java b/ConfluenceOtherworld/src/main/java/org/confluence/mod/mixin/client/gui/screens/inventory/EffectRenderingInventoryScreenMixin.java index d78fbb8f7..414033f10 100644 --- a/ConfluenceOtherworld/src/main/java/org/confluence/mod/mixin/client/gui/screens/inventory/EffectRenderingInventoryScreenMixin.java +++ b/ConfluenceOtherworld/src/main/java/org/confluence/mod/mixin/client/gui/screens/inventory/EffectRenderingInventoryScreenMixin.java @@ -4,9 +4,13 @@ import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.EffectRenderingInventoryScreen; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; import net.neoforged.neoforge.common.util.TriState; import org.confluence.mod.mixed.IAbstractContainerScreen; import org.spongepowered.asm.mixin.Mixin; @@ -16,10 +20,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(EffectRenderingInventoryScreen.class) -public abstract class EffectRenderingInventoryScreenMixin implements IAbstractContainerScreen { +public abstract class EffectRenderingInventoryScreenMixin extends AbstractContainerScreen implements IAbstractContainerScreen { @Unique private boolean confluence$mouseClicked = false; + public EffectRenderingInventoryScreenMixin(T menu, Inventory playerInventory, Component title) { + super(menu, playerInventory, title); + } + @Override public TriState confluence$onMouseClicked(double mouseX, double mouseY, int button) { this.confluence$mouseClicked = true; @@ -27,14 +35,38 @@ public abstract class EffectRenderingInventoryScreenMixin implements IAbstractCo } @Inject(method = "renderEffects", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;renderTooltip(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;II)V", shift = At.Shift.AFTER)) - private void switchEnabled(CallbackInfo ci, @Local(ordinal = 0) MobEffectInstance instance) { + private void switchEnabled(GuiGraphics guiGraphics, int mouseX, int mouseY, CallbackInfo ci, @Local(ordinal = 0) MobEffectInstance instance) { if (confluence$mouseClicked) { IAbstractContainerScreen.switchEnabled(instance); } } + @Inject( + method = "renderEffects", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/gui/screens/inventory/EffectRenderingInventoryScreen;renderLabels(Lnet/minecraft/client/gui/GuiGraphics;IILjava/lang/Iterable;)V", + shift = At.Shift.AFTER + ) + ) + private void switchEnabled(GuiGraphics guiGraphics, int mouseX, int mouseY, CallbackInfo ci, @Local Iterable iterable, @Local(name = "k") int k) { + int l = this.topPos; + MobEffectInstance instance = null; + for(MobEffectInstance ins : iterable) { + if (mouseY >= l && mouseY <= l + k) { + instance = ins; + } + l += k; + } + if(instance != null) { + if (confluence$mouseClicked) { + IAbstractContainerScreen.switchEnabled(instance); + } + } + } + @Inject(method = "renderEffects", at = @At("TAIL")) - private void reset(CallbackInfo ci) { + private void reset(GuiGraphics guiGraphics, int mouseX, int mouseY, CallbackInfo ci) { this.confluence$mouseClicked = false; }