Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -16,25 +20,53 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(EffectRenderingInventoryScreen.class)
public abstract class EffectRenderingInventoryScreenMixin implements IAbstractContainerScreen {
public abstract class EffectRenderingInventoryScreenMixin<T extends AbstractContainerMenu> extends AbstractContainerScreen<T> 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;
return TriState.DEFAULT;
}

@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<MobEffectInstance> 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;
}

Expand Down