aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorRime <81419447+Emirlol@users.noreply.github.com>2024-05-05 16:26:29 +0300
committerRime <81419447+Emirlol@users.noreply.github.com>2024-05-23 13:31:48 +0300
commit0ec2707b63961ea0f7acab1c38311ef696ba8003 (patch)
treeacce56ad6290d8bf6c8b8837f82a02c6c882bc5d /src/main
parenta8c689dd3a0fd6823053f1580993008c84d29ae2 (diff)
downloadSkyblocker-0ec2707b63961ea0f7acab1c38311ef696ba8003.tar.gz
Skyblocker-0ec2707b63961ea0f7acab1c38311ef696ba8003.tar.bz2
Skyblocker-0ec2707b63961ea0f7acab1c38311ef696ba8003.zip
Updated for 1.20.6 PR compatibility
Add EggFinderDebugUtil for finding egg locations quickly, to be removed later. Not tested.
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java4
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java35
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinderDebugUtil.java48
3 files changed, 67 insertions, 20 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
index 87b1bc79..f662be7c 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/HandledScreenMixin.java
@@ -4,7 +4,6 @@ import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.systems.RenderSystem;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.chocolatefactory.ChocolateFactorySolver;
import de.hysky.skyblocker.skyblock.experiment.ChronomatronSolver;
import de.hysky.skyblocker.skyblock.experiment.ExperimentSolver;
import de.hysky.skyblocker.skyblock.experiment.SuperpairsSolver;
@@ -285,9 +284,6 @@ public abstract class HandledScreenMixin<T extends ScreenHandler> extends Screen
default -> { /*Do Nothing*/ }
}
}
- if (currentSolver instanceof ChocolateFactorySolver chocolateFactorySolver) {
- chocolateFactorySolver.markDirty();
- }
}
@Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/item/ItemStack;III)V"))
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
index ef79cd41..cc5ae471 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/ChocolateFactorySolver.java
@@ -6,6 +6,9 @@ import de.hysky.skyblocker.utils.render.gui.ContainerSolver;
import it.unimi.dsi.fastutil.ints.*;
import net.fabricmc.loader.impl.lib.sat4j.minisat.core.Solver;
import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.component.type.LoreComponent;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
@@ -34,18 +37,26 @@ public class ChocolateFactorySolver extends ContainerSolver {
}
@Override
- protected List<ColorHighlight> getColors(String[] groups, Map<Integer, ItemStack> slots) {
+ protected void start(GenericContainerScreen screen) {
+ markHighlightsDirty(); //Recalculate highlights when the screen is opened, which happens when upgrading rabbits
+ }
+
+
+ //Todo: Handle unemployed rabbits as well. They have a different lore format.
+ @Override
+ protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> slots) {
Int2DoubleMap cpsIncreaseFactors = new Int2DoubleLinkedOpenHashMap(5); //There are only 5 rabbits on the screen.
- for (Map.Entry<Integer, ItemStack> entry : slots.entrySet()) {
+ for (Int2ObjectMap.Entry<ItemStack> entry : slots.int2ObjectEntrySet()) {
+ if (entry.getIntKey() < 29 || entry.getIntKey() > 33) continue; //Only check the rabbit slots (29,30,31,32,33)
ItemStack item = entry.getValue();
- if (item.getItem() != Items.PLAYER_HEAD || !item.hasNbt() || item.isEmpty()) continue;
+ if (item.getItem() != Items.PLAYER_HEAD || item.isEmpty()) continue;
String lore = getLore(item);
if (lore.isBlank()) continue;
OptionalDouble cpsIncreaseFactor = getCPSIncreaseFactor(lore);
if (cpsIncreaseFactor.isEmpty()) continue; //Something went wrong, skip this item
- cpsIncreaseFactors.put(entry.getKey().intValue(), cpsIncreaseFactor.getAsDouble());
+ cpsIncreaseFactors.put(entry.getIntKey(), cpsIncreaseFactor.getAsDouble());
}
Optional<Int2DoubleMap.Entry> bestSlot = cpsIncreaseFactors.int2DoubleEntrySet().stream().max(Map.Entry.comparingByValue());
if (bestSlot.isEmpty()) return List.of(); //No valid slots found, somehow. This means something went wrong, despite all the checks thus far.
@@ -53,13 +64,10 @@ public class ChocolateFactorySolver extends ContainerSolver {
}
private String getLore(ItemStack item) {
- NbtCompound display = item.getSubNbt(ItemStack.DISPLAY_KEY);
- if (display == null || display.isEmpty() || !display.contains(ItemStack.LORE_KEY, NbtElement.LIST_TYPE)) return "";
- NbtList lore = display.getList(ItemStack.LORE_KEY, NbtElement.STRING_TYPE);
- return lore.stream()
- .map(NbtElement::asString)
- .map(Text.Serialization::fromJson) //Serialize the nbt string into a text to get the content string
- .filter(Objects::nonNull)
+ LoreComponent lore = item.get(DataComponentTypes.LORE);
+ if (lore == null || lore.lines().isEmpty()) return "";
+ return lore.lines()
+ .stream()
.map(Text::getString)
.collect(Collectors.joining(" ")); //Join all lore lines into one string for ease of regexing
//The space is so that the regex pattern still matches even if the word is split into 2 lines,
@@ -85,9 +93,4 @@ public class ChocolateFactorySolver extends ContainerSolver {
int cost = Integer.parseInt(costMatcher.group(1).replace(",", ""));
return OptionalDouble.of((nextCps - currentCps) / (double) cost);
}
-
- //Publicize this method so that the HandledScreenMixin can call it, as the values change on upgrade (when clicked) and there is a need for recalculation
- public void markDirty() {
- super.markHighlightsDirty();
- }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinderDebugUtil.java b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinderDebugUtil.java
new file mode 100644
index 00000000..6dc7a9e4
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/chocolatefactory/EggFinderDebugUtil.java
@@ -0,0 +1,48 @@
+package de.hysky.skyblocker.skyblock.chocolatefactory;
+
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.component.DataComponentTypes;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityType;
+import net.minecraft.entity.decoration.ArmorStandEntity;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.text.Text;
+import net.minecraft.world.World;
+
+public class EggFinderDebugUtil {
+ public static void init() {
+ ClientEntityEvents.ENTITY_LOAD.register(EggFinderDebugUtil::printIfEgg);
+ }
+
+ public static void printIfEgg(Entity entity, World world) {
+ if (entity.getType() != EntityType.ARMOR_STAND) return;
+ ArmorStandEntity armorStand = (ArmorStandEntity) entity;
+ ItemStack firstItem = armorStand.getArmorItems().iterator().next();
+ if (firstItem.isEmpty() || firstItem.getItem() != Items.PLAYER_HEAD) return;
+ String texture;
+ try {
+ texture = firstItem.get(DataComponentTypes.PROFILE)
+ .properties()
+ .get("textures")
+ .iterator()
+ .next()
+ .value();
+ } catch (Exception ignored) { //Why bother null-checking everything when you can throw a try-catch around it?
+ return;
+ }
+
+ if (texture.equals("ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjY3MzE0OSwKICAicHJvZmlsZUlkIiA6ICJiN2I4ZTlhZjEwZGE0NjFmOTY2YTQxM2RmOWJiM2U4OCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbmFiYW5hbmFZZzciLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTQ5MzMzZDg1YjhhMzE1ZDAzMzZlYjJkZjM3ZDhhNzE0Y2EyNGM1MWI4YzYwNzRmMWI1YjkyN2RlYjUxNmMyNCIKICAgIH0KICB9Cn0")
+ || texture.equals("ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjY0OTcwMSwKICAicHJvZmlsZUlkIiA6ICI3NGEwMzQxNWY1OTI0ZTA4YjMyMGM2MmU1NGE3ZjJhYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZXp6aXIiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTVlMzYxNjU4MTlmZDI4NTBmOTg1NTJlZGNkNzYzZmY5ODYzMTMxMTkyODNjMTI2YWNlMGM0Y2M0OTVlNzZhOCIKICAgIH0KICB9Cn0")
+ || texture.equals("ewogICJ0aW1lc3RhbXAiIDogMTcxMTQ2MjU2ODExMiwKICAicHJvZmlsZUlkIiA6ICI3NzUwYzFhNTM5M2Q0ZWQ0Yjc2NmQ4ZGUwOWY4MjU0NiIsCiAgInByb2ZpbGVOYW1lIiA6ICJSZWVkcmVsIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzdhZTZkMmQzMWQ4MTY3YmNhZjk1MjkzYjY4YTRhY2Q4NzJkNjZlNzUxZGI1YTM0ZjJjYmM2NzY2YTAzNTZkMGEiCiAgICB9CiAgfQp9")) {
+ debugLog("Egg found!");
+ debugLog(entity.getBlockX() + " " + entity.getBlockY() + " " + entity.getBlockZ());
+ }
+ entity.setGlowing(true);
+ }
+
+ public static void debugLog(String message) {
+ MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(Text.of(message));
+ }
+}