aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker
diff options
context:
space:
mode:
authorKevin <92656833+kevinthegreat1@users.noreply.github.com>2023-12-07 20:53:33 -0500
committerGitHub <noreply@github.com>2023-12-07 20:53:33 -0500
commit6b9ed6855b34c57e8c5a557c640172ed341e6c26 (patch)
tree6114f4c282d37ea84056c71f37db6e24463c48c1 /src/main/java/de/hysky/skyblocker
parent3ce9d9ad246eaa38b37eb6f11385519528de7630 (diff)
downloadSkyblocker-6b9ed6855b34c57e8c5a557c640172ed341e6c26.tar.gz
Skyblocker-6b9ed6855b34c57e8c5a557c640172ed341e6c26.tar.bz2
Skyblocker-6b9ed6855b34c57e8c5a557c640172ed341e6c26.zip
Update Exeriment Solvers for 1.20.3/1.20.4 (#437)
Diffstat (limited to 'src/main/java/de/hysky/skyblocker')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/GenericContainerScreenHandlerMixin.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java22
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java24
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java5
5 files changed, 33 insertions, 23 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixin/GenericContainerScreenHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/GenericContainerScreenHandlerMixin.java
index 9929c5d4..2608b69f 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/GenericContainerScreenHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/GenericContainerScreenHandlerMixin.java
@@ -18,13 +18,13 @@ public abstract class GenericContainerScreenHandlerMixin extends ScreenHandler {
@Override
public void setStackInSlot(int slot, int revision, ItemStack stack) {
- SkyblockerMod.getInstance().containerSolverManager.markDirty();
super.setStackInSlot(slot, revision, stack);
+ SkyblockerMod.getInstance().containerSolverManager.markDirty();
}
@Override
public void updateSlotStacks(int revision, List<ItemStack> stacks, ItemStack cursorStack) {
- SkyblockerMod.getInstance().containerSolverManager.markDirty();
super.updateSlotStacks(revision, stacks, cursorStack);
+ SkyblockerMod.getInstance().containerSolverManager.markDirty();
}
}
diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
index b25db7cf..71203381 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.mixin;
+import com.llamalad7.mixinextras.sugar.Local;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver;
@@ -27,6 +28,7 @@ import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.text.Text;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@@ -72,11 +74,11 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
@SuppressWarnings("DataFlowIssue")
// makes intellij be quiet about this.focusedSlot maybe being null. It's already null checked in mixined method.
@Inject(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V"), cancellable = true)
- public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci) {
+ public void skyblocker$drawMouseOverTooltip(DrawContext context, int x, int y, CallbackInfo ci, @Local(ordinal = 0) ItemStack stack) {
if (!Utils.isOnSkyblock()) return;
// Hide Empty Tooltips
- if (SkyblockerConfigManager.get().general.hideEmptyTooltips && focusedSlot.getStack().getName().getString().equals(" ")) {
+ if (SkyblockerConfigManager.get().general.hideEmptyTooltips && stack.getName().getString().equals(" ")) {
ci.cancel();
}
@@ -88,7 +90,6 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
// Compactor Preview
if (SkyblockerConfigManager.get().general.compactorDeletorPreview) {
- ItemStack stack = focusedSlot.getStack();
Matcher matcher = CompactorDeletorPreview.NAME.matcher(ItemUtils.getItemId(stack));
if (matcher.matches() && CompactorDeletorPreview.drawPreview(context, stack, matcher.group("type"), matcher.group("size"), x, y)) {
ci.cancel();
@@ -96,25 +97,24 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
}
}
- @Redirect(method = "drawMouseoverTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/screen/slot/Slot;getStack()Lnet/minecraft/item/ItemStack;", ordinal = 0))
- private ItemStack skyblocker$experimentSolvers$replaceTooltipDisplayStack(Slot slot) {
- return skyblocker$experimentSolvers$getStack(slot, null);
+ @ModifyVariable(method = "drawMouseoverTooltip", at = @At(value = "LOAD", ordinal = 0))
+ private ItemStack skyblocker$experimentSolvers$replaceTooltipDisplayStack(ItemStack stack) {
+ return skyblocker$experimentSolvers$getStack(focusedSlot, stack);
}
- @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 4), ordinal = 0)
+ @ModifyVariable(method = "drawSlot", at = @At(value = "LOAD", ordinal = 3), ordinal = 0)
private ItemStack skyblocker$experimentSolvers$replaceDisplayStack(ItemStack stack, DrawContext context, Slot slot) {
return skyblocker$experimentSolvers$getStack(slot, stack);
}
-
@Unique
- private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, ItemStack stack) {
+ private ItemStack skyblocker$experimentSolvers$getStack(Slot slot, @NotNull ItemStack stack) {
ContainerSolver currentSolver = SkyblockerMod.getInstance().containerSolverManager.getCurrentSolver();
if ((currentSolver instanceof SuperpairsSolver || currentSolver instanceof UltrasequencerSolver) && ((ExperimentSolver) currentSolver).getState() == ExperimentSolver.State.SHOW && slot.inventory instanceof SimpleInventory) {
ItemStack itemStack = ((ExperimentSolver) currentSolver).getSlots().get(slot.getIndex());
- return itemStack == null ? slot.getStack() : itemStack;
+ return itemStack == null ? stack : itemStack;
}
- return (stack != null) ? stack : slot.getStack();
+ return stack;
}
@Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;clickSlot(IIILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V"))
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java
index c00249fe..c34abca1 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/SuperpairsSolver.java
@@ -38,18 +38,22 @@ public class SuperpairsSolver extends ExperimentSolver {
}
@Override
+ protected void reset() {
+ super.reset();
+ superpairsPrevClickedSlot = 0;
+ superpairsCurrentSlot = null;
+ superpairsDuplicatedSlots.clear();
+ }
+
+ @Override
protected void tick(Screen screen) {
if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) {
- if (getState() == State.SHOW) {
- if (genericContainerScreen.getScreenHandler().getInventory().getStack(4).isOf(Items.CAULDRON)) {
- reset();
- } else if (getSlots().get(superpairsPrevClickedSlot) == null) {
- ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot);
- if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) {
- getSlots().entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey()));
- getSlots().put(superpairsPrevClickedSlot, itemStack);
- superpairsCurrentSlot = itemStack;
- }
+ if (getState() == State.SHOW && getSlots().get(superpairsPrevClickedSlot) == null) {
+ ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot);
+ if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) {
+ getSlots().entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey()));
+ getSlots().put(superpairsPrevClickedSlot, itemStack);
+ superpairsCurrentSlot = itemStack;
}
}
} else {
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
index 1fcb976b..746235b7 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
@@ -54,6 +54,7 @@ public class UltrasequencerSolver extends ExperimentSolver {
case WAIT -> {
if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) {
setState(State.SHOW);
+ markHighlightsDirty();
}
}
case END -> {
diff --git a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java
index cf67e84c..80a1ba9d 100644
--- a/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java
+++ b/src/main/java/de/hysky/skyblocker/utils/render/gui/ContainerSolver.java
@@ -1,5 +1,6 @@
package de.hysky.skyblocker.utils.render.gui;
+import de.hysky.skyblocker.SkyblockerMod;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.item.ItemStack;
@@ -29,6 +30,10 @@ public abstract class ContainerSolver {
protected void reset() {
}
+ protected void markHighlightsDirty() {
+ SkyblockerMod.getInstance().containerSolverManager.markDirty();
+ }
+
protected abstract List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots);
protected void trimEdges(Map<Integer, ItemStack> slots, int rows) {