diff options
author | ExternalTime <84183548+ExternalTime@users.noreply.github.com> | 2021-10-07 19:57:25 +0200 |
---|---|---|
committer | ExternalTime <84183548+ExternalTime@users.noreply.github.com> | 2021-10-10 17:08:06 +0200 |
commit | 9572664f807e2f545a2d4b6d9f2b4dfa0a9791c3 (patch) | |
tree | e9edfe6c8b847c559ccaf96dd419e251d83a496d /src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java | |
parent | 50de2604202bdb8ac3a69d0e5625d60ede57512b (diff) | |
download | Skyblocker-9572664f807e2f545a2d4b6d9f2b4dfa0a9791c3.tar.gz Skyblocker-9572664f807e2f545a2d4b6d9f2b4dfa0a9791c3.tar.bz2 Skyblocker-9572664f807e2f545a2d4b6d9f2b4dfa0a9791c3.zip |
Added an interface for solvers for minigames inside chests
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java new file mode 100644 index 00000000..836d38a6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/container/ContainerSolverManager.java @@ -0,0 +1,78 @@ +package me.xmrvizzy.skyblocker.container; + +import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; +import net.minecraft.screen.slot.Slot; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ContainerSolverManager extends DrawableHelper { + private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile(""); + private final ContainerSolver[] solvers; + private ContainerSolver currentSolver = null; + private String[] groups; + private List<ColorHighlight> highlights; + + public ContainerSolverManager() { + solvers = new ContainerSolver[]{ + }; + } + + public void onSetScreen(@NotNull GenericContainerScreen screen) { + String screenName = screen.getTitle().getString(); + Matcher matcher = PLACEHOLDER_PATTERN.matcher(screenName); + for (ContainerSolver solver : solvers) { + if (solver.isEnabled()) { + matcher.usePattern(solver.getName()); + matcher.reset(); + if (matcher.matches()) { + currentSolver = solver; + groups = new String[matcher.groupCount()]; + for (int i = 0; i < groups.length; i++) + groups[i] = matcher.group(i + 1); + return; + } + } + } + currentSolver = null; + } + + public void clearScreen() { + currentSolver = null; + } + + public void markDirty() { + highlights = null; + } + + public void onDraw(MatrixStack matrices, List<Slot> slots) { + if (currentSolver == null) + return; + if (highlights == null) + highlights = currentSolver.getColors(groups, slotMap(slots)); + RenderSystem.disableDepthTest(); + RenderSystem.colorMask(true, true, true, false); + for (ColorHighlight highlight : highlights) { + Slot slot = slots.get(highlight.slot()); + int color = highlight.color(); + fillGradient(matrices, slot.x, slot.y, slot.x + 16, slot.y + 16, color, color); + } + RenderSystem.colorMask(true, true, true, true); + RenderSystem.enableDepthTest(); + } + + private Map<Integer, ItemStack> slotMap(List<Slot> slots) { + Map<Integer, ItemStack> slotMap = new TreeMap<>(); + for (int i = 0; i < slots.size(); i++) + slotMap.put(i, slots.get(i).getStack()); + return slotMap; + } +} |