From b700db32f2bccde3b6381d5d28136814c9fe9e37 Mon Sep 17 00:00:00 2001 From: olim Date: Mon, 29 Apr 2024 21:50:44 +0100 Subject: initial commit detection of when the player is in the dojo and the helper for the discipline is implemented --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 2 + .../crimson/dojo/DisciplineTestHelper.java | 51 ++++++++++++ .../skyblock/crimson/dojo/DojoManager.java | 93 ++++++++++++++++++++++ .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 12 +++ .../skyblock/crimson/dojo/TenacityTestHelper.java | 11 +++ .../hysky/skyblocker/skyblock/entity/MobGlow.java | 16 ++++ src/main/java/de/hysky/skyblocker/utils/Utils.java | 2 +- 7 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index d793e73d..28722558 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -11,6 +11,7 @@ import de.hysky.skyblocker.skyblock.chat.ChatRuleAnnouncementScreen; import de.hysky.skyblocker.skyblock.chat.ChatRulesHandler; import de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder; import de.hysky.skyblocker.skyblock.chocolatefactory.TimeTowerReminder; +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; import de.hysky.skyblocker.skyblock.crimson.kuudra.Kuudra; import de.hysky.skyblocker.skyblock.dungeon.*; import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen; @@ -179,6 +180,7 @@ public class SkyblockerMod implements ClientModInitializer { ApiUtils.init(); Debug.init(); Kuudra.init(); + DojoManager.init(); RenderHelper.init(); FancyStatusBars.init(); EventNotifications.init(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java new file mode 100644 index 00000000..d5e19f28 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -0,0 +1,51 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.ItemStack; +import net.minecraft.text.Text; +import net.minecraft.util.Util; + +import java.awt.*; +import java.util.HashMap; + +public class DisciplineTestHelper { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + + private static final HashMap SWORD_TO_NAME_LOOKUP = Util.make(new HashMap<>(), map -> { + map.put("WOOD_SWORD","Wood"); + map.put("IRON_SWORD","Iron"); + map.put("GOLD_SWORD","Gold"); + map.put("DIAMOND_SWORD","Diamond"); + }); + private static final HashMap SWORD_TO_COLOR_LOOKUP = Util.make(new HashMap<>(), map -> { + map.put("WOOD_SWORD",0xa52a2a); + map.put("IRON_SWORD",0xc0c0c0); + map.put("GOLD_SWORD",0xffd700); + map.put("DIAMOND_SWORD",0x00ffff); + }); + + public static boolean isCorrect(String name) { + if (DojoManager.currentChallenge != DojoManager.DojoChallenges.DISCIPLINE || CLIENT == null || CLIENT.player == null) { + return false; + } + String heldId = ItemTooltip.getInternalNameFromNBT(CLIENT.player.getMainHandStack(), true); + if (SWORD_TO_NAME_LOOKUP.containsKey(heldId)) { + + return SWORD_TO_NAME_LOOKUP.get(heldId).equals(name); + } + return false; + } + + public static int getColor() { + if (DojoManager.currentChallenge != DojoManager.DojoChallenges.DISCIPLINE || CLIENT == null || CLIENT.player == null) { + return 0; + } + String heldId = ItemTooltip.getInternalNameFromNBT(CLIENT.player.getMainHandStack(), true); + if (SWORD_TO_COLOR_LOOKUP.containsKey(heldId)) { + return SWORD_TO_COLOR_LOOKUP.get(heldId); + } + return 0; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java new file mode 100644 index 00000000..f133746a --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -0,0 +1,93 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.text.Text; + +import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DojoManager { + + private static final String START_MESSAGE = "§e[NPC] §eMaster Tao§f: Ahhh, here we go! Let's get you into the Arena."; + private static final Pattern TEST_OF_PATTERN = Pattern.compile("\\s+Test of (\\w+) OBJECTIVES"); + private static final String CHALLENGE_FINISHED_REGEX = "\\s+CHALLENGE ((COMPLEATED)|(FAILED))"; + + protected enum DojoChallenges { + NONE("none"), + DISCIPLINE("Discipline"), + SWIFTNESS("Swiftness"), + TENACITY("Tenacity"); + + private final String name; + + DojoChallenges(String name) { + this.name = name; + } + + public static DojoChallenges from(String name) { + return Arrays.stream(DojoChallenges.values()).filter(n -> name.equals(n.name)).findFirst().orElse(NONE); + } + } + + protected static DojoChallenges currentChallenge = DojoChallenges.NONE; + private static boolean inAreana = false; + + public static void init() { + ClientReceiveMessageEvents.GAME.register(DojoManager::onMessage); + WorldRenderEvents.AFTER_TRANSLUCENT.register(DojoManager::render); + ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> reset()); + + } + + private static void reset() { + inAreana = false; + currentChallenge = DojoChallenges.NONE; + } + + + private static void onMessage(Text text, Boolean overlay) { + + if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { + return; + } + if (text.getString().equals(START_MESSAGE)) { + inAreana = true; + return; + } + if (!inAreana) { + return; + } + if (text.getString().matches(CHALLENGE_FINISHED_REGEX)) { + reset(); + return; + } + + //look for a message saying what challenge is starting if one has not already been found + if (currentChallenge != DojoChallenges.NONE) { + return; + } + Matcher nextChallenge = TEST_OF_PATTERN.matcher(text.getString()); + if (nextChallenge.matches()) { + currentChallenge = DojoChallenges.from(nextChallenge.group(1)); + } + } + + private static void render(WorldRenderContext context) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + return; + } + switch (currentChallenge) { + case SWIFTNESS -> SwiftnessTestHelper.render(context); + case TENACITY -> TenacityTestHelper.render(context); + } + //System.out.println(currentChallenge); + } + + +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java new file mode 100644 index 00000000..580c7d87 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -0,0 +1,12 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; + +public class SwiftnessTestHelper { + + + + protected static void render(WorldRenderContext context) { + + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java new file mode 100644 index 00000000..48c1aaa0 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -0,0 +1,11 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; + +public class TenacityTestHelper { + + + protected static void render(WorldRenderContext context) { + + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index d6f9410b..d373d2e1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -1,15 +1,18 @@ package de.hysky.skyblocker.skyblock.entity; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.crimson.dojo.DisciplineTestHelper; import de.hysky.skyblocker.skyblock.dungeon.LividColor; import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.utils.ItemUtils; +import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.SlayerUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; import net.minecraft.entity.Entity; import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.entity.mob.EndermanEntity; +import net.minecraft.entity.mob.ZombieEntity; import net.minecraft.entity.passive.BatEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; @@ -28,6 +31,7 @@ public class MobGlow { if (OcclusionCulling.getReducedCuller().isVisible(box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ)) { String name = entity.getName().getString(); + // Dungeons if (Utils.isInDungeons() && !entity.isInvisible()) { return switch (entity) { @@ -46,6 +50,7 @@ public class MobGlow { }; } + return switch (entity) { // Rift case PlayerEntity p when Utils.isInTheRift() && !entity.isInvisible() && name.equals("Blobbercyst ") -> SkyblockerConfigManager.get().otherLocations.rift.blobbercystGlow; @@ -57,6 +62,9 @@ public class MobGlow { // Special Zelot case EndermanEntity enderman when Utils.isInTheEnd() && !entity.isInvisible() -> TheEnd.isSpecialZealot(enderman); + //dojo + case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE -> DisciplineTestHelper.isCorrect(getArmourStandName(zombie)); + default -> false; }; } @@ -73,6 +81,13 @@ public class MobGlow { List armorStands = getArmorStands(entity); return !armorStands.isEmpty() && armorStands.getFirst().getName().getString().contains("✯"); } + public static String getArmourStandName(Entity entity) { + List armorStands = getArmorStands(entity); + if (armorStands.isEmpty()) { + return null; + } + return armorStands.getFirst().getName().getString(); + } public static List getArmorStands(Entity entity) { return getArmorStands(entity.getWorld(), entity.getBoundingBox()); @@ -94,6 +109,7 @@ public class MobGlow { case EndermanEntity enderman when TheEnd.isSpecialZealot(enderman) -> Formatting.RED.getColorValue(); case ArmorStandEntity armorStand when isNukekubiHead(armorStand) -> 0x990099; + case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE -> DisciplineTestHelper.getColor(); default -> 0xf57738; }; diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 84b3cb9e..f383c94a 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -95,7 +95,7 @@ public class Utils { } public static boolean isInDungeons() { - return location == Location.DUNGEON || FabricLoader.getInstance().isDevelopmentEnvironment(); + return location == Location.DUNGEON ; // || FabricLoader.getInstance().isDevelopmentEnvironment() } public static boolean isInCrystalHollows() { -- cgit From e39a80fa3e4f0e81137e1c9825decb52ae4344ff Mon Sep 17 00:00:00 2001 From: olim Date: Tue, 30 Apr 2024 12:34:20 +0100 Subject: add swiftness helper works but for some reason some block updates are not sent to the function so sometimes dose not update --- .../mixins/ClientPlayNetworkHandlerMixin.java | 6 ++++- .../skyblock/crimson/dojo/DojoManager.java | 16 +++++++++++-- .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 28 ++++++++++++++++++++++ 3 files changed, 47 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index 48389d40..feb5a1cb 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -5,13 +5,14 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; import de.hysky.skyblocker.skyblock.CompactDamage; import de.hysky.skyblocker.skyblock.FishingHelper; -import de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder; +import de.hysky.skyblocker.skyblock.crimson.dojo.SwiftnessTestHelper; import de.hysky.skyblocker.skyblock.dungeon.DungeonScore; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.skyblock.end.BeaconHighlighter; import de.hysky.skyblocker.skyblock.end.EnderNodes; import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.skyblock.waypoint.MythologicalRitual; +import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.SlayerUtils; import de.hysky.skyblocker.utils.Utils; import net.minecraft.block.Blocks; @@ -49,6 +50,9 @@ public abstract class ClientPlayNetworkHandlerMixin { BeaconHighlighter.beaconPositions.add(packet.getPos()); } } + if (Utils.getLocation() == Location.CRIMSON_ISLE) { + SwiftnessTestHelper.blockUpdate(packet); + } } @Inject(method = "method_37472", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V")) diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index f133746a..8e8482ea 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -1,12 +1,15 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; +import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.text.Text; +import net.minecraft.world.updater.WorldUpdater; import java.util.Arrays; import java.util.regex.Matcher; @@ -16,7 +19,7 @@ public class DojoManager { private static final String START_MESSAGE = "§e[NPC] §eMaster Tao§f: Ahhh, here we go! Let's get you into the Arena."; private static final Pattern TEST_OF_PATTERN = Pattern.compile("\\s+Test of (\\w+) OBJECTIVES"); - private static final String CHALLENGE_FINISHED_REGEX = "\\s+CHALLENGE ((COMPLEATED)|(FAILED))"; + private static final String CHALLENGE_FINISHED_REGEX = "\\s+CHALLENGE ((COMPLETED)|(FAILED))"; protected enum DojoChallenges { NONE("none"), @@ -41,13 +44,17 @@ public class DojoManager { public static void init() { ClientReceiveMessageEvents.GAME.register(DojoManager::onMessage); WorldRenderEvents.AFTER_TRANSLUCENT.register(DojoManager::render); + Scheduler.INSTANCE.scheduleCyclic(DojoManager::update, 5); ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> reset()); } + + private static void reset() { inAreana = false; currentChallenge = DojoChallenges.NONE; + SwiftnessTestHelper.reset(); } @@ -78,6 +85,12 @@ public class DojoManager { } } + private static void update() { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + return; + } + } + private static void render(WorldRenderContext context) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { return; @@ -86,7 +99,6 @@ public class DojoManager { case SWIFTNESS -> SwiftnessTestHelper.render(context); case TENACITY -> TenacityTestHelper.render(context); } - //System.out.println(currentChallenge); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index 580c7d87..d2a9ae57 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -1,12 +1,40 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; +import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; public class SwiftnessTestHelper { + private static BlockPos lastBlock; + protected static void reset() { + lastBlock = null; + } + + //dojo cwords: + //-189 99 -580 + //-223 99 -614 + + public static void blockUpdate(BlockUpdateS2CPacket packet) { + if (DojoManager.currentChallenge == DojoManager.DojoChallenges.SWIFTNESS) { + if (packet.getState().isOf(Blocks.LIME_WOOL)) { + lastBlock = packet.getPos(); + } + } + } protected static void render(WorldRenderContext context) { + if (DojoManager.currentChallenge != DojoManager.DojoChallenges.SWIFTNESS || lastBlock == null) { + return; + } + RenderHelper.renderOutline(context,new Box(lastBlock),new float[]{0f,1f,0f},3,true); } } -- cgit From b2dff8d0f292b819138a2bb118f318063568e3fe Mon Sep 17 00:00:00 2001 From: olim Date: Tue, 30 Apr 2024 15:26:58 +0100 Subject: add masteryTest helper create helper for the mastery challenge --- .../mixins/ClientPlayNetworkHandlerMixin.java | 3 +- .../skyblock/crimson/dojo/DojoManager.java | 12 ++++- .../skyblock/crimson/dojo/MasteryTestHelper.java | 58 ++++++++++++++++++++++ .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 10 ++-- 4 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index feb5a1cb..b7d505f3 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -5,6 +5,7 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; import de.hysky.skyblocker.skyblock.CompactDamage; import de.hysky.skyblocker.skyblock.FishingHelper; +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; import de.hysky.skyblocker.skyblock.crimson.dojo.SwiftnessTestHelper; import de.hysky.skyblocker.skyblock.dungeon.DungeonScore; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; @@ -51,7 +52,7 @@ public abstract class ClientPlayNetworkHandlerMixin { } } if (Utils.getLocation() == Location.CRIMSON_ISLE) { - SwiftnessTestHelper.blockUpdate(packet); + DojoManager.onBlockUpdate(packet); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 8e8482ea..b3796841 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -8,6 +8,7 @@ import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.text.Text; import net.minecraft.world.updater.WorldUpdater; @@ -23,6 +24,7 @@ public class DojoManager { protected enum DojoChallenges { NONE("none"), + MASTERY("Mastery"), DISCIPLINE("Discipline"), SWIFTNESS("Swiftness"), TENACITY("Tenacity"); @@ -55,11 +57,11 @@ public class DojoManager { inAreana = false; currentChallenge = DojoChallenges.NONE; SwiftnessTestHelper.reset(); + MasteryTestHelper.reset(); } private static void onMessage(Text text, Boolean overlay) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { return; } @@ -85,6 +87,13 @@ public class DojoManager { } } + public static void onBlockUpdate(BlockUpdateS2CPacket packet) { + switch (currentChallenge) { + case SWIFTNESS -> SwiftnessTestHelper.onBlockUpdate(packet); + case MASTERY -> MasteryTestHelper.onBlockUpdate(packet); + } + } + private static void update() { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { return; @@ -98,6 +107,7 @@ public class DojoManager { switch (currentChallenge) { case SWIFTNESS -> SwiftnessTestHelper.render(context); case TENACITY -> TenacityTestHelper.render(context); + case MASTERY -> MasteryTestHelper.render(context); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java new file mode 100644 index 00000000..85fd5e1c --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -0,0 +1,58 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import de.hysky.skyblocker.utils.render.RenderHelper; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.Blocks; +import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; +import net.minecraft.text.Text; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +import java.text.DecimalFormat; +import java.util.*; + +public class MasteryTestHelper { + + private static final float[] LIGHT_GRAY = { 192 / 255f, 192 / 255f, 192 / 255f }; + private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); + + private static List blockOrder = new ArrayList<>(); + private static Map endTimes =new HashMap<>(); + + protected static void reset() { + blockOrder = new ArrayList<>(); + endTimes =new HashMap<>(); + } + + + public static void onBlockUpdate(BlockUpdateS2CPacket packet) { + BlockPos pos = packet.getPos(); + if (packet.getState().isOf(Blocks.LIME_WOOL)) { + blockOrder.add(pos); + endTimes.put(pos,System.currentTimeMillis()+6850); + } + if (packet.getState().isAir()) { + blockOrder.remove(pos); + } + } + + protected static void render(WorldRenderContext context) { + //render connecting lines + if (!blockOrder.isEmpty()) { + RenderHelper.renderLineFromCursor(context, blockOrder.getFirst().toCenterPos(),LIGHT_GRAY,1f, 2); + } + if (blockOrder.size() >= 2) { + RenderHelper.renderLinesFromPoints(context, new Vec3d[]{blockOrder.get(0).toCenterPos(), blockOrder.get(1).toCenterPos()}, new float[]{0f, 1f, 0f}, 1, 2, false); + } + + //render times + long currentTime = System.currentTimeMillis(); + for (BlockPos pos : blockOrder) { + long blockEndTime = endTimes.get(pos); + float secondsTime = Math.max((blockEndTime - currentTime) / 1000f, 0); + RenderHelper.renderText(context, Text.literal(FORMATTER.format(secondsTime)), pos.add(0, 1, 0).toCenterPos(), 3, true); + + } + + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index d2a9ae57..5d5f3bab 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -22,16 +22,14 @@ public class SwiftnessTestHelper { //-189 99 -580 //-223 99 -614 - public static void blockUpdate(BlockUpdateS2CPacket packet) { - if (DojoManager.currentChallenge == DojoManager.DojoChallenges.SWIFTNESS) { - if (packet.getState().isOf(Blocks.LIME_WOOL)) { - lastBlock = packet.getPos(); - } + public static void onBlockUpdate(BlockUpdateS2CPacket packet) { + if (packet.getState().isOf(Blocks.LIME_WOOL)) { + lastBlock = packet.getPos(); } } protected static void render(WorldRenderContext context) { - if (DojoManager.currentChallenge != DojoManager.DojoChallenges.SWIFTNESS || lastBlock == null) { + if (lastBlock == null) { return; } RenderHelper.renderOutline(context,new Box(lastBlock),new float[]{0f,1f,0f},3,true); -- cgit From 472af1f8dd2ece6a4cc9ba81534f973780978394 Mon Sep 17 00:00:00 2001 From: olim Date: Tue, 30 Apr 2024 21:12:40 +0100 Subject: add tenacity helper added helper for tenacity however there seems to be randomness so can not highlight block its going to hit --- .../skyblock/crimson/dojo/DojoManager.java | 30 +++++++---- .../skyblock/crimson/dojo/MasteryTestHelper.java | 9 ++-- .../skyblock/crimson/dojo/TenacityTestHelper.java | 58 ++++++++++++++++++++++ 3 files changed, 84 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index b3796841..7b7b7a3b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -1,16 +1,16 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; -import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; -import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.Entity; import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.text.Text; -import net.minecraft.world.updater.WorldUpdater; import java.util.Arrays; import java.util.regex.Matcher; @@ -46,21 +46,19 @@ public class DojoManager { public static void init() { ClientReceiveMessageEvents.GAME.register(DojoManager::onMessage); WorldRenderEvents.AFTER_TRANSLUCENT.register(DojoManager::render); - Scheduler.INSTANCE.scheduleCyclic(DojoManager::update, 5); ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> reset()); - + ClientEntityEvents.ENTITY_LOAD.register(DojoManager::onEntitySpawn); + ClientEntityEvents.ENTITY_UNLOAD.register(DojoManager::onEntityDespawn); } - - private static void reset() { inAreana = false; currentChallenge = DojoChallenges.NONE; SwiftnessTestHelper.reset(); MasteryTestHelper.reset(); + TenacityTestHelper.reset(); } - private static void onMessage(Text text, Boolean overlay) { if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { return; @@ -88,16 +86,30 @@ public class DojoManager { } public static void onBlockUpdate(BlockUpdateS2CPacket packet) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + return; + } switch (currentChallenge) { case SWIFTNESS -> SwiftnessTestHelper.onBlockUpdate(packet); case MASTERY -> MasteryTestHelper.onBlockUpdate(packet); } } + private static void onEntitySpawn(Entity entity, ClientWorld clientWorld) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + return; + } + switch (currentChallenge) { + case TENACITY -> TenacityTestHelper.onEntitySpawn(entity); + } + } - private static void update() { + private static void onEntityDespawn(Entity entity, ClientWorld clientWorld) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { return; } + switch (currentChallenge) { + case TENACITY -> TenacityTestHelper.onEntityDespawn(entity); + } } private static void render(WorldRenderContext context) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 85fd5e1c..2bbe4255 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -16,12 +16,12 @@ public class MasteryTestHelper { private static final float[] LIGHT_GRAY = { 192 / 255f, 192 / 255f, 192 / 255f }; private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); - private static List blockOrder = new ArrayList<>(); - private static Map endTimes =new HashMap<>(); + private static final List blockOrder = new ArrayList<>(); + private static final Map endTimes =new HashMap<>(); protected static void reset() { - blockOrder = new ArrayList<>(); - endTimes =new HashMap<>(); + blockOrder.clear(); + endTimes.clear(); } @@ -33,6 +33,7 @@ public class MasteryTestHelper { } if (packet.getState().isAir()) { blockOrder.remove(pos); + endTimes.remove(pos); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index 48c1aaa0..dd975625 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -1,11 +1,69 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; +import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.Blocks; +import net.minecraft.entity.Entity; +import net.minecraft.entity.decoration.ArmorStandEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; + +import java.util.*; public class TenacityTestHelper { + private static final Map> fireBallsWithStartPos = new HashMap<>(); + + private static int floorY = 98; //todo is there multiple y levels + + protected static void reset() { + fireBallsWithStartPos.clear(); + } + + protected static void render(WorldRenderContext context) { + for (ArmorStandEntity fireball : fireBallsWithStartPos.keySet()) { + List linePositions = fireBallsWithStartPos.get(fireball); + Vec3d fireballPos = getCoalOffset(fireball.getPos()); + if (linePositions.getFirst().distanceTo(fireballPos) < 0.5 ) { //just spawned can not find line yet + continue; + } + if (linePositions.size() < 2) { + //calculate line for fireball and add it to its line values + double changeY = linePositions.getFirst().y - fireballPos.y; + double multipleToGround = (linePositions.getFirst().y - floorY) / changeY; + Vec3d distance = fireballPos.subtract(linePositions.getFirst()).multiply(multipleToGround); + Vec3d lineEnd = linePositions.getFirst().add(distance); + linePositions.add(lineEnd); + } + RenderHelper.renderLinesFromPoints(context, new Vec3d[]{linePositions.get(0), linePositions.get(1)},new float[]{1f, 0f, 0f}, 1, 3, false); + //could outline block to be broken but seems to have some random pattern so not usefull + } + + } + + public static void onEntitySpawn(Entity entity) { + if (entity instanceof ArmorStandEntity armorStand) { + //todo they should be holding coal block but are not holding anything + List lineBlocks = new ArrayList<>(); + lineBlocks.add(getCoalOffset(armorStand.getPos())); + fireBallsWithStartPos.put(armorStand,lineBlocks); + } + + } + public static void onEntityDespawn(Entity entity) { + if (entity instanceof ArmorStandEntity armorStand) { + fireBallsWithStartPos.remove(entity); + } } + + private static Vec3d getCoalOffset(Vec3d pos) { + return pos.add(0,1,0); + } + } -- cgit From 468a8391dc8964811159ba529b5397f1d7162fa8 Mon Sep 17 00:00:00 2001 From: olim Date: Tue, 30 Apr 2024 21:14:51 +0100 Subject: simplify code do not bother trying to work out exact block as it seems to be random --- .../hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index dd975625..d3b0b9a0 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -17,8 +17,7 @@ public class TenacityTestHelper { private static final Map> fireBallsWithStartPos = new HashMap<>(); - - private static int floorY = 98; //todo is there multiple y levels + protected static void reset() { fireBallsWithStartPos.clear(); @@ -34,9 +33,7 @@ public class TenacityTestHelper { } if (linePositions.size() < 2) { //calculate line for fireball and add it to its line values - double changeY = linePositions.getFirst().y - fireballPos.y; - double multipleToGround = (linePositions.getFirst().y - floorY) / changeY; - Vec3d distance = fireballPos.subtract(linePositions.getFirst()).multiply(multipleToGround); + Vec3d distance = fireballPos.subtract(linePositions.getFirst()).multiply(100); Vec3d lineEnd = linePositions.getFirst().add(distance); linePositions.add(lineEnd); } -- cgit From 18e3b77939d726e2aedfddfda76f488c864bbe94 Mon Sep 17 00:00:00 2001 From: olim Date: Wed, 1 May 2024 16:12:31 +0100 Subject: fix tenacity helper rework tenacity helper to use particals to work out randomness and fix to be mainly accurate --- .../mixins/ClientPlayNetworkHandlerMixin.java | 2 +- .../skyblock/crimson/dojo/DojoManager.java | 12 +++ .../skyblock/crimson/dojo/TenacityTestHelper.java | 92 +++++++++++++++------- 3 files changed, 77 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index b7d505f3..454d3fb2 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -6,7 +6,6 @@ import com.llamalad7.mixinextras.sugar.Local; import de.hysky.skyblocker.skyblock.CompactDamage; import de.hysky.skyblocker.skyblock.FishingHelper; import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; -import de.hysky.skyblocker.skyblock.crimson.dojo.SwiftnessTestHelper; import de.hysky.skyblocker.skyblock.dungeon.DungeonScore; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; import de.hysky.skyblocker.skyblock.end.BeaconHighlighter; @@ -102,6 +101,7 @@ public abstract class ClientPlayNetworkHandlerMixin { @Inject(method = "onParticle", at = @At("RETURN")) private void skyblocker$onParticle(ParticleS2CPacket packet, CallbackInfo ci) { MythologicalRitual.onParticle(packet); + DojoManager.onParticle(packet); EnderNodes.onParticle(packet); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 7b7b7a3b..b7b39f32 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -10,6 +10,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; +import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; import net.minecraft.text.Text; import java.util.Arrays; @@ -22,6 +23,7 @@ public class DojoManager { private static final Pattern TEST_OF_PATTERN = Pattern.compile("\\s+Test of (\\w+) OBJECTIVES"); private static final String CHALLENGE_FINISHED_REGEX = "\\s+CHALLENGE ((COMPLETED)|(FAILED))"; + protected enum DojoChallenges { NONE("none"), MASTERY("Mastery"), @@ -49,6 +51,7 @@ public class DojoManager { ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> reset()); ClientEntityEvents.ENTITY_LOAD.register(DojoManager::onEntitySpawn); ClientEntityEvents.ENTITY_UNLOAD.register(DojoManager::onEntityDespawn); + } private static void reset() { @@ -112,6 +115,15 @@ public class DojoManager { } } + public static void onParticle(ParticleS2CPacket packet) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + return; + } + switch (currentChallenge) { + case TENACITY -> TenacityTestHelper.onParticle(packet); + } + } + private static void render(WorldRenderContext context) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { return; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index d3b0b9a0..3639c351 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -2,65 +2,101 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.decoration.ArmorStandEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; +import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; +import net.minecraft.world.RaycastContext; import java.util.*; public class TenacityTestHelper { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Map> fireBallsWithStartPos = new HashMap<>(); - + private static final Map fireBallsWithStartPos = new HashMap<>(); + + private static final Map particleOffsets = new HashMap<>(); protected static void reset() { fireBallsWithStartPos.clear(); + particleOffsets.clear(); } protected static void render(WorldRenderContext context) { for (ArmorStandEntity fireball : fireBallsWithStartPos.keySet()) { - List linePositions = fireBallsWithStartPos.get(fireball); - Vec3d fireballPos = getCoalOffset(fireball.getPos()); - if (linePositions.getFirst().distanceTo(fireballPos) < 0.5 ) { //just spawned can not find line yet - continue; - } - if (linePositions.size() < 2) { - //calculate line for fireball and add it to its line values - Vec3d distance = fireballPos.subtract(linePositions.getFirst()).multiply(100); - Vec3d lineEnd = linePositions.getFirst().add(distance); - linePositions.add(lineEnd); + Vec3d lineStart = fireBallsWithStartPos.get(fireball).add(particleOffsets.getOrDefault(fireball, Vec3d.ZERO)); + Vec3d fireballPos = fireball.getPos().add(particleOffsets.getOrDefault(fireball, Vec3d.ZERO)); + + Vec3d distance = fireballPos.subtract(lineStart); + if (distance.length() > 0.02) { //if big enough gap try from start calculate and show trajectory + distance = distance.multiply(100); + Vec3d lineEnd = lineStart.add(distance); + + RenderHelper.renderLinesFromPoints(context, new Vec3d[]{lineStart, lineEnd},new float[]{1f, 0f, 0f}, 1, 3, false); + + //get highlighted block + HitResult hitResult = raycast(lineStart, lineEnd, fireball); + if (hitResult != null && hitResult.getType() == HitResult.Type.BLOCK && hitResult instanceof BlockHitResult blockHitResult) { + RenderHelper.renderFilled(context, blockHitResult.getBlockPos(),new float[]{1f, 0f, 0f}, 0.5f, false); + } } - RenderHelper.renderLinesFromPoints(context, new Vec3d[]{linePositions.get(0), linePositions.get(1)},new float[]{1f, 0f, 0f}, 1, 3, false); - //could outline block to be broken but seems to have some random pattern so not usefull } + } + public static HitResult raycast(Vec3d start, Vec3d end, ArmorStandEntity fireball) { + if (CLIENT == null || CLIENT.world == null) { + return null; + } + return CLIENT.world.raycast(new RaycastContext(start, end, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.ANY, fireball)); } public static void onEntitySpawn(Entity entity) { + if (CLIENT == null || CLIENT.player == null) { + return; + } if (entity instanceof ArmorStandEntity armorStand) { - //todo they should be holding coal block but are not holding anything - List lineBlocks = new ArrayList<>(); - lineBlocks.add(getCoalOffset(armorStand.getPos())); - fireBallsWithStartPos.put(armorStand,lineBlocks); + Vec3d fireballPos = armorStand.getPos(); + Vec3d playerPos = armorStand.getPos(); + // they should be holding coal block but are not holding anything idk just check they are close enough to the player + if (fireballPos.distanceTo(playerPos) < 50 && Math.abs(fireballPos.y - playerPos.y) < 5){ + fireBallsWithStartPos.put(armorStand,armorStand.getPos()); + } } - } public static void onEntityDespawn(Entity entity) { if (entity instanceof ArmorStandEntity armorStand) { - fireBallsWithStartPos.remove(entity); + fireBallsWithStartPos.remove(armorStand); } } - private static Vec3d getCoalOffset(Vec3d pos) { - return pos.add(0,1,0); + public static void onParticle(ParticleS2CPacket packet) { + if (!ParticleTypes.FLAME.equals(packet.getParameters().getType())) { + return; + } + //get nearest fireball to particle + Vec3d particlePos = new Vec3d(packet.getX(), packet.getY(), packet.getZ()); + ArmorStandEntity neareastFireball = null; + double clostestDistance = 50; + for (ArmorStandEntity fireball : fireBallsWithStartPos.keySet()) { + double distance = fireball.getPos().distanceTo(particlePos); + if (distance < clostestDistance) { + neareastFireball = fireball; + clostestDistance = distance; + } + } + if (neareastFireball == null) { //can not find fireball near particle + return; + } + //adjust fireball offset with particle pos + Vec3d delta = particlePos.subtract(neareastFireball.getPos()); + //update values + particleOffsets.put(neareastFireball, delta); } - } -- cgit From 654b66e62bdb63a2ef3dc9607c941027c6c07812 Mon Sep 17 00:00:00 2001 From: olim Date: Wed, 1 May 2024 17:03:56 +0100 Subject: add force test helpder add helper for the force test. unsure if timer is correct. sometimes last to long? --- .../crimson/dojo/DisciplineTestHelper.java | 22 ++++++--- .../skyblock/crimson/dojo/DojoManager.java | 49 ++++++++++++++----- .../skyblock/crimson/dojo/ForceTestHelper.java | 55 ++++++++++++++++++++++ .../hysky/skyblocker/skyblock/entity/MobGlow.java | 6 +-- 4 files changed, 111 insertions(+), 21 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index d5e19f28..6312bbdc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -1,17 +1,23 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; -import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; -import net.minecraft.item.ItemStack; -import net.minecraft.text.Text; +import net.minecraft.entity.mob.ZombieEntity; import net.minecraft.util.Util; -import java.awt.*; +import java.text.DecimalFormat; import java.util.HashMap; +import java.util.Map; public class DisciplineTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final DecimalFormat FORMATTER = new DecimalFormat("0.0"); + + private static final Map zombies = new HashMap<>(); + + protected static void reset() { + zombies.clear(); + } private static final HashMap SWORD_TO_NAME_LOOKUP = Util.make(new HashMap<>(), map -> { map.put("WOOD_SWORD","Wood"); @@ -26,8 +32,8 @@ public class DisciplineTestHelper { map.put("DIAMOND_SWORD",0x00ffff); }); - public static boolean isCorrect(String name) { - if (DojoManager.currentChallenge != DojoManager.DojoChallenges.DISCIPLINE || CLIENT == null || CLIENT.player == null) { + protected static boolean shouldGlow(String name) { + if (CLIENT == null || CLIENT.player == null) { return false; } String heldId = ItemTooltip.getInternalNameFromNBT(CLIENT.player.getMainHandStack(), true); @@ -38,7 +44,7 @@ public class DisciplineTestHelper { return false; } - public static int getColor() { + protected static int getColor() { if (DojoManager.currentChallenge != DojoManager.DojoChallenges.DISCIPLINE || CLIENT == null || CLIENT.player == null) { return 0; } @@ -48,4 +54,6 @@ public class DisciplineTestHelper { } return 0; } + + } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index b7b39f32..61a8d010 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -26,6 +26,7 @@ public class DojoManager { protected enum DojoChallenges { NONE("none"), + FORCE("Force"), MASTERY("Mastery"), DISCIPLINE("Discipline"), SWIFTNESS("Swiftness"), @@ -43,7 +44,7 @@ public class DojoManager { } protected static DojoChallenges currentChallenge = DojoChallenges.NONE; - private static boolean inAreana = false; + public static boolean inArena = false; public static void init() { ClientReceiveMessageEvents.GAME.register(DojoManager::onMessage); @@ -55,11 +56,12 @@ public class DojoManager { } private static void reset() { - inAreana = false; + inArena = false; currentChallenge = DojoChallenges.NONE; SwiftnessTestHelper.reset(); MasteryTestHelper.reset(); TenacityTestHelper.reset(); + ForceTestHelper.reset(); } private static void onMessage(Text text, Boolean overlay) { @@ -67,10 +69,10 @@ public class DojoManager { return; } if (text.getString().equals(START_MESSAGE)) { - inAreana = true; + inArena = true; return; } - if (!inAreana) { + if (!inArena) { return; } if (text.getString().matches(CHALLENGE_FINISHED_REGEX)) { @@ -88,8 +90,30 @@ public class DojoManager { } } + public static boolean shouldGlow(String name) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + return false; + } + return switch (currentChallenge) { + case DISCIPLINE -> DisciplineTestHelper.shouldGlow(name); + case FORCE -> ForceTestHelper.shouldGlow(name); + default -> false; + }; + } + + public static int getColor() { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + return 0xf57738; + } + return switch (currentChallenge) { + case DISCIPLINE -> DisciplineTestHelper.getColor(); + case FORCE -> ForceTestHelper.getColor(); + default -> 0xf57738; + }; + } + public static void onBlockUpdate(BlockUpdateS2CPacket packet) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } switch (currentChallenge) { @@ -98,37 +122,40 @@ public class DojoManager { } } private static void onEntitySpawn(Entity entity, ClientWorld clientWorld) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } switch (currentChallenge) { case TENACITY -> TenacityTestHelper.onEntitySpawn(entity); + case FORCE -> ForceTestHelper.onEntitySpawn(entity); } } private static void onEntityDespawn(Entity entity, ClientWorld clientWorld) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } switch (currentChallenge) { case TENACITY -> TenacityTestHelper.onEntityDespawn(entity); + case FORCE -> ForceTestHelper.onEntityDespawn(entity); } } public static void onParticle(ParticleS2CPacket packet) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } - switch (currentChallenge) { - case TENACITY -> TenacityTestHelper.onParticle(packet); + if (currentChallenge == DojoChallenges.TENACITY) { + TenacityTestHelper.onParticle(packet); } } private static void render(WorldRenderContext context) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inAreana) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } switch (currentChallenge) { + case FORCE -> ForceTestHelper.render(context); case SWIFTNESS -> SwiftnessTestHelper.render(context); case TENACITY -> TenacityTestHelper.render(context); case MASTERY -> MasteryTestHelper.render(context); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java new file mode 100644 index 00000000..bf27ce1f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -0,0 +1,55 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import de.hysky.skyblocker.utils.render.RenderHelper; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.ZombieEntity; +import net.minecraft.text.Text; +import net.minecraft.util.math.Vec3d; + +import java.awt.*; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.Map; + +public class ForceTestHelper { + + private static final DecimalFormat FORMATTER = new DecimalFormat("0.0"); + + private static final Map zombies = new HashMap<>(); + + protected static void reset() { + zombies.clear(); + } + + protected static boolean shouldGlow(String name) { + if (name == null) return false; + return name.contains("-"); + } + + protected static int getColor() { + return Color.RED.getRGB(); + } + + protected static void onEntitySpawn(Entity entity) { + if (entity instanceof ZombieEntity zombie) { + zombies.put(zombie, System.currentTimeMillis() + 10100); //they last for 10100 millis ish so this is the time they despawn + } + } + protected static void onEntityDespawn(Entity entity) { + if (entity instanceof ZombieEntity zombie) { + zombies.remove(zombie); + } + } + + protected static void render(WorldRenderContext context) { + //render times + long currentTime = System.currentTimeMillis(); + for (Map.Entry zombie : zombies.entrySet()) { + float secondsTime = Math.max((zombie.getValue() - currentTime) / 1000f, 0); + Vec3d lablePos = zombie.getKey().getEyePos(); + RenderHelper.renderText(context, Text.literal(FORMATTER.format(secondsTime)), lablePos, 1.5f, true); + + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index d373d2e1..182fae77 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -1,7 +1,7 @@ package de.hysky.skyblocker.skyblock.entity; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.skyblock.crimson.dojo.DisciplineTestHelper; +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; import de.hysky.skyblocker.skyblock.dungeon.LividColor; import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.utils.ItemUtils; @@ -63,7 +63,7 @@ public class MobGlow { case EndermanEntity enderman when Utils.isInTheEnd() && !entity.isInvisible() -> TheEnd.isSpecialZealot(enderman); //dojo - case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE -> DisciplineTestHelper.isCorrect(getArmourStandName(zombie)); + case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE && DojoManager.inArena -> DojoManager.shouldGlow(getArmourStandName(zombie)); default -> false; }; @@ -109,7 +109,7 @@ public class MobGlow { case EndermanEntity enderman when TheEnd.isSpecialZealot(enderman) -> Formatting.RED.getColorValue(); case ArmorStandEntity armorStand when isNukekubiHead(armorStand) -> 0x990099; - case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE -> DisciplineTestHelper.getColor(); + case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE && DojoManager.inArena -> DojoManager.getColor(); default -> 0xf57738; }; -- cgit From d23f2f42e9fc57e06341a372c319fec54f510899 Mon Sep 17 00:00:00 2001 From: olim Date: Wed, 1 May 2024 19:21:59 +0100 Subject: clean up and fix force test when mob is hit in force reset timer --- .../skyblock/crimson/dojo/DojoManager.java | 25 ++++++++++++++++++- .../skyblock/crimson/dojo/ForceTestHelper.java | 28 ++++++++++++++++++++-- .../skyblock/crimson/dojo/TenacityTestHelper.java | 13 +++------- 3 files changed, 53 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 61a8d010..dd2df117 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -7,11 +7,18 @@ import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; +import net.fabricmc.fabric.api.event.player.AttackEntityCallback; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; import net.minecraft.text.Text; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.world.World; import java.util.Arrays; import java.util.regex.Matcher; @@ -19,6 +26,7 @@ import java.util.regex.Pattern; public class DojoManager { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static final String START_MESSAGE = "§e[NPC] §eMaster Tao§f: Ahhh, here we go! Let's get you into the Arena."; private static final Pattern TEST_OF_PATTERN = Pattern.compile("\\s+Test of (\\w+) OBJECTIVES"); private static final String CHALLENGE_FINISHED_REGEX = "\\s+CHALLENGE ((COMPLETED)|(FAILED))"; @@ -52,6 +60,7 @@ public class DojoManager { ClientPlayConnectionEvents.JOIN.register((_handler, _sender, _client) -> reset()); ClientEntityEvents.ENTITY_LOAD.register(DojoManager::onEntitySpawn); ClientEntityEvents.ENTITY_UNLOAD.register(DojoManager::onEntityDespawn); + AttackEntityCallback.EVENT.register(DojoManager::onEntityAttacked); } @@ -122,7 +131,11 @@ public class DojoManager { } } private static void onEntitySpawn(Entity entity, ClientWorld clientWorld) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena || CLIENT == null || CLIENT.player == null) { + return; + } + //check close by + if (entity.distanceTo(CLIENT.player) > 50 || Math.abs(entity.getBlockY() - CLIENT.player.getBlockY()) > 5){ return; } switch (currentChallenge) { @@ -141,6 +154,16 @@ public class DojoManager { } } + private static ActionResult onEntityAttacked(PlayerEntity playerEntity, World world, Hand hand, Entity entity, EntityHitResult entityHitResult) { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + return null; + } + switch (currentChallenge) { + case FORCE -> ForceTestHelper.onEntityAttacked(entity); + } + return ActionResult.PASS; + } + public static void onParticle(ParticleS2CPacket packet) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index bf27ce1f..c709f64a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -2,9 +2,11 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.ZombieEntity; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; import net.minecraft.util.math.Vec3d; import java.awt.*; @@ -36,9 +38,19 @@ public class ForceTestHelper { zombies.put(zombie, System.currentTimeMillis() + 10100); //they last for 10100 millis ish so this is the time they despawn } } + + protected static void onEntityAttacked(Entity entity) { + if (entity instanceof ZombieEntity zombie) { + if (zombies.containsKey(zombie)) { + zombies.put(zombie,System.currentTimeMillis() + 10100); //timer is reset when they are hit + } + } + } + protected static void onEntityDespawn(Entity entity) { if (entity instanceof ZombieEntity zombie) { zombies.remove(zombie); + } } @@ -46,9 +58,21 @@ public class ForceTestHelper { //render times long currentTime = System.currentTimeMillis(); for (Map.Entry zombie : zombies.entrySet()) { - float secondsTime = Math.max((zombie.getValue() - currentTime) / 1000f, 0); + float secondsTime = Math.max((zombie.getValue() - currentTime) / 1000f, 0); + + Text text; + if (secondsTime > 1) { + text = Text.literal(FORMATTER.format(secondsTime)).formatted(Formatting.GREEN); + } + else if (secondsTime > 0) { + text = Text.literal(FORMATTER.format(secondsTime)).formatted(Formatting.YELLOW); + } + else { + text = Text.literal("Soon").formatted(Formatting.RED); //todo translate + } + Vec3d lablePos = zombie.getKey().getEyePos(); - RenderHelper.renderText(context, Text.literal(FORMATTER.format(secondsTime)), lablePos, 1.5f, true); + RenderHelper.renderText(context, text, lablePos, 1.5f, true); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index 3639c351..b2f99d2e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -17,7 +17,6 @@ import java.util.*; public class TenacityTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Map fireBallsWithStartPos = new HashMap<>(); private static final Map particleOffsets = new HashMap<>(); @@ -57,16 +56,10 @@ public class TenacityTestHelper { } public static void onEntitySpawn(Entity entity) { - if (CLIENT == null || CLIENT.player == null) { - return; - } if (entity instanceof ArmorStandEntity armorStand) { - Vec3d fireballPos = armorStand.getPos(); - Vec3d playerPos = armorStand.getPos(); - // they should be holding coal block but are not holding anything idk just check they are close enough to the player - if (fireballPos.distanceTo(playerPos) < 50 && Math.abs(fireballPos.y - playerPos.y) < 5){ - fireBallsWithStartPos.put(armorStand,armorStand.getPos()); - } + // they should be holding coal block but are not holding anything idk + fireBallsWithStartPos.put(armorStand,armorStand.getPos()); + } } -- cgit From b69fb532750981808b3632aa84851de0ed539b1a Mon Sep 17 00:00:00 2001 From: olim Date: Wed, 1 May 2024 21:37:06 +0100 Subject: fix formatting and add some comments --- .../crimson/dojo/DisciplineTestHelper.java | 17 ++++++------ .../skyblock/crimson/dojo/DojoManager.java | 31 +++++++++++++++++----- .../skyblock/crimson/dojo/ForceTestHelper.java | 13 +++------ .../skyblock/crimson/dojo/MasteryTestHelper.java | 13 ++++----- .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 7 +---- .../skyblock/crimson/dojo/TenacityTestHelper.java | 7 +++-- 6 files changed, 46 insertions(+), 42 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 6312bbdc..2350ea97 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -11,7 +11,6 @@ import java.util.Map; public class DisciplineTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final DecimalFormat FORMATTER = new DecimalFormat("0.0"); private static final Map zombies = new HashMap<>(); @@ -20,16 +19,16 @@ public class DisciplineTestHelper { } private static final HashMap SWORD_TO_NAME_LOOKUP = Util.make(new HashMap<>(), map -> { - map.put("WOOD_SWORD","Wood"); - map.put("IRON_SWORD","Iron"); - map.put("GOLD_SWORD","Gold"); - map.put("DIAMOND_SWORD","Diamond"); + map.put("WOOD_SWORD", "Wood"); + map.put("IRON_SWORD", "Iron"); + map.put("GOLD_SWORD", "Gold"); + map.put("DIAMOND_SWORD", "Diamond"); }); private static final HashMap SWORD_TO_COLOR_LOOKUP = Util.make(new HashMap<>(), map -> { - map.put("WOOD_SWORD",0xa52a2a); - map.put("IRON_SWORD",0xc0c0c0); - map.put("GOLD_SWORD",0xffd700); - map.put("DIAMOND_SWORD",0x00ffff); + map.put("WOOD_SWORD", 0xa52a2a); + map.put("IRON_SWORD", 0xc0c0c0); + map.put("GOLD_SWORD", 0xffd700); + map.put("DIAMOND_SWORD", 0x00ffff); }); protected static boolean shouldGlow(String name) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index dd2df117..b24d3d49 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -8,12 +8,15 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; +import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.session.telemetry.WorldLoadedEvent; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; +import net.minecraft.server.world.BlockEvent; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -61,7 +64,6 @@ public class DojoManager { ClientEntityEvents.ENTITY_LOAD.register(DojoManager::onEntitySpawn); ClientEntityEvents.ENTITY_UNLOAD.register(DojoManager::onEntityDespawn); AttackEntityCallback.EVENT.register(DojoManager::onEntityAttacked); - } private static void reset() { @@ -73,6 +75,11 @@ public class DojoManager { ForceTestHelper.reset(); } + /** + * works out if the player is in dojo and if so what challenge based on chat messages + * @param text message + * @param overlay is overlay + */ private static void onMessage(Text text, Boolean overlay) { if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { return; @@ -99,6 +106,11 @@ public class DojoManager { } } + /** + * called from the {@link de.hysky.skyblocker.skyblock.entity.MobGlow} class and checks the current challenge to see if zombies should be glowing + * @param name name of the zombie + * @return if the zombie should glow + */ public static boolean shouldGlow(String name) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return false; @@ -110,6 +122,10 @@ public class DojoManager { }; } + /** + * called from the {@link de.hysky.skyblocker.skyblock.entity.MobGlow} class and checks the current challenge to see zombie outline color + * @return if the zombie should glow + */ public static int getColor() { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return 0xf57738; @@ -121,6 +137,10 @@ public class DojoManager { }; } + /** + * when a block is updated check the current challenge and send the packet to correct helper + * @param packet block update packet + */ public static void onBlockUpdate(BlockUpdateS2CPacket packet) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; @@ -130,12 +150,13 @@ public class DojoManager { case MASTERY -> MasteryTestHelper.onBlockUpdate(packet); } } + private static void onEntitySpawn(Entity entity, ClientWorld clientWorld) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena || CLIENT == null || CLIENT.player == null) { return; } //check close by - if (entity.distanceTo(CLIENT.player) > 50 || Math.abs(entity.getBlockY() - CLIENT.player.getBlockY()) > 5){ + if (entity.distanceTo(CLIENT.player) > 50 || Math.abs(entity.getBlockY() - CLIENT.player.getBlockY()) > 5) { return; } switch (currentChallenge) { @@ -158,8 +179,8 @@ public class DojoManager { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return null; } - switch (currentChallenge) { - case FORCE -> ForceTestHelper.onEntityAttacked(entity); + if (currentChallenge == DojoChallenges.FORCE) { + ForceTestHelper.onEntityAttacked(entity); } return ActionResult.PASS; } @@ -184,6 +205,4 @@ public class DojoManager { case MASTERY -> MasteryTestHelper.render(context); } } - - } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index c709f64a..1f29f634 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -2,7 +2,6 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.ZombieEntity; import net.minecraft.text.Text; @@ -42,7 +41,7 @@ public class ForceTestHelper { protected static void onEntityAttacked(Entity entity) { if (entity instanceof ZombieEntity zombie) { if (zombies.containsKey(zombie)) { - zombies.put(zombie,System.currentTimeMillis() + 10100); //timer is reset when they are hit + zombies.put(zombie, System.currentTimeMillis() + 10100); //timer is reset when they are hit } } } @@ -50,7 +49,6 @@ public class ForceTestHelper { protected static void onEntityDespawn(Entity entity) { if (entity instanceof ZombieEntity zombie) { zombies.remove(zombie); - } } @@ -59,21 +57,18 @@ public class ForceTestHelper { long currentTime = System.currentTimeMillis(); for (Map.Entry zombie : zombies.entrySet()) { float secondsTime = Math.max((zombie.getValue() - currentTime) / 1000f, 0); - + Text text; if (secondsTime > 1) { text = Text.literal(FORMATTER.format(secondsTime)).formatted(Formatting.GREEN); - } - else if (secondsTime > 0) { + } else if (secondsTime > 0) { text = Text.literal(FORMATTER.format(secondsTime)).formatted(Formatting.YELLOW); - } - else { + } else { text = Text.literal("Soon").formatted(Formatting.RED); //todo translate } Vec3d lablePos = zombie.getKey().getEyePos(); RenderHelper.renderText(context, text, lablePos, 1.5f, true); - } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 2bbe4255..76aa5209 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -13,23 +13,22 @@ import java.util.*; public class MasteryTestHelper { - private static final float[] LIGHT_GRAY = { 192 / 255f, 192 / 255f, 192 / 255f }; + private static final float[] LIGHT_GRAY = {192 / 255f, 192 / 255f, 192 / 255f}; private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); private static final List blockOrder = new ArrayList<>(); - private static final Map endTimes =new HashMap<>(); + private static final Map endTimes = new HashMap<>(); protected static void reset() { blockOrder.clear(); endTimes.clear(); } - public static void onBlockUpdate(BlockUpdateS2CPacket packet) { BlockPos pos = packet.getPos(); if (packet.getState().isOf(Blocks.LIME_WOOL)) { blockOrder.add(pos); - endTimes.put(pos,System.currentTimeMillis()+6850); + endTimes.put(pos, System.currentTimeMillis() + 6850); } if (packet.getState().isAir()) { blockOrder.remove(pos); @@ -40,7 +39,7 @@ public class MasteryTestHelper { protected static void render(WorldRenderContext context) { //render connecting lines if (!blockOrder.isEmpty()) { - RenderHelper.renderLineFromCursor(context, blockOrder.getFirst().toCenterPos(),LIGHT_GRAY,1f, 2); + RenderHelper.renderLineFromCursor(context, blockOrder.getFirst().toCenterPos(), LIGHT_GRAY, 1f, 2); } if (blockOrder.size() >= 2) { RenderHelper.renderLinesFromPoints(context, new Vec3d[]{blockOrder.get(0).toCenterPos(), blockOrder.get(1).toCenterPos()}, new float[]{0f, 1f, 0f}, 1, 2, false); @@ -50,10 +49,8 @@ public class MasteryTestHelper { long currentTime = System.currentTimeMillis(); for (BlockPos pos : blockOrder) { long blockEndTime = endTimes.get(pos); - float secondsTime = Math.max((blockEndTime - currentTime) / 1000f, 0); + float secondsTime = Math.max((blockEndTime - currentTime) / 1000f, 0); RenderHelper.renderText(context, Text.literal(FORMATTER.format(secondsTime)), pos.add(0, 1, 0).toCenterPos(), 3, true); - } - } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index 5d5f3bab..7243b45b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -18,10 +18,6 @@ public class SwiftnessTestHelper { lastBlock = null; } - //dojo cwords: - //-189 99 -580 - //-223 99 -614 - public static void onBlockUpdate(BlockUpdateS2CPacket packet) { if (packet.getState().isOf(Blocks.LIME_WOOL)) { lastBlock = packet.getPos(); @@ -32,7 +28,6 @@ public class SwiftnessTestHelper { if (lastBlock == null) { return; } - RenderHelper.renderOutline(context,new Box(lastBlock),new float[]{0f,1f,0f},3,true); - + RenderHelper.renderOutline(context, new Box(lastBlock), new float[]{0f, 1f, 0f}, 3, true); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index b2f99d2e..37ba84d2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -26,7 +26,6 @@ public class TenacityTestHelper { particleOffsets.clear(); } - protected static void render(WorldRenderContext context) { for (ArmorStandEntity fireball : fireBallsWithStartPos.keySet()) { Vec3d lineStart = fireBallsWithStartPos.get(fireball).add(particleOffsets.getOrDefault(fireball, Vec3d.ZERO)); @@ -37,12 +36,12 @@ public class TenacityTestHelper { distance = distance.multiply(100); Vec3d lineEnd = lineStart.add(distance); - RenderHelper.renderLinesFromPoints(context, new Vec3d[]{lineStart, lineEnd},new float[]{1f, 0f, 0f}, 1, 3, false); + RenderHelper.renderLinesFromPoints(context, new Vec3d[]{lineStart, lineEnd}, new float[]{1f, 0f, 0f}, 1, 3, false); //get highlighted block HitResult hitResult = raycast(lineStart, lineEnd, fireball); if (hitResult != null && hitResult.getType() == HitResult.Type.BLOCK && hitResult instanceof BlockHitResult blockHitResult) { - RenderHelper.renderFilled(context, blockHitResult.getBlockPos(),new float[]{1f, 0f, 0f}, 0.5f, false); + RenderHelper.renderFilled(context, blockHitResult.getBlockPos(), new float[]{1f, 0f, 0f}, 0.5f, false); } } } @@ -58,7 +57,7 @@ public class TenacityTestHelper { public static void onEntitySpawn(Entity entity) { if (entity instanceof ArmorStandEntity armorStand) { // they should be holding coal block but are not holding anything idk - fireBallsWithStartPos.put(armorStand,armorStand.getPos()); + fireBallsWithStartPos.put(armorStand, armorStand.getPos()); } } -- cgit From 599117db34159eb04cc0ae2eb91b7dc67d9bbd88 Mon Sep 17 00:00:00 2001 From: olim Date: Thu, 2 May 2024 21:57:06 +0100 Subject: make it so all block updates are recived this fixes swiftness and mastery solver --- .../mixins/ClientPlayNetworkHandlerMixin.java | 3 --- .../hysky/skyblocker/mixins/ClientWorldMixin.java | 24 ++++++++++++++++++++++ .../skyblock/crimson/dojo/DojoManager.java | 12 +++++++---- .../skyblock/crimson/dojo/ForceTestHelper.java | 9 ++++---- .../skyblock/crimson/dojo/MasteryTestHelper.java | 10 +++++---- .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 9 ++++---- src/main/resources/skyblocker.mixins.json | 1 + 7 files changed, 49 insertions(+), 19 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index 454d3fb2..cd0fb0ea 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -50,9 +50,6 @@ public abstract class ClientPlayNetworkHandlerMixin { BeaconHighlighter.beaconPositions.add(packet.getPos()); } } - if (Utils.getLocation() == Location.CRIMSON_ISLE) { - DojoManager.onBlockUpdate(packet); - } } @Inject(method = "method_37472", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;removeEntity(ILnet/minecraft/entity/Entity$RemovalReason;)V")) diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java new file mode 100644 index 00000000..ff0b1ae6 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java @@ -0,0 +1,24 @@ +package de.hysky.skyblocker.mixins; + + +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; +import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.block.BlockState; +import net.minecraft.client.world.ClientWorld; +import net.minecraft.util.math.BlockPos; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ClientWorld.class) +public class ClientWorldMixin { + + @Inject(method = "handleBlockUpdate", at = @At("RETURN")) + private void skyblocker$handleBlockUpdate(BlockPos pos, BlockState state, int flags, CallbackInfo ci) { + if (Utils.getLocation() == Location.CRIMSON_ISLE) { + DojoManager.onBlockUpdate(pos.toImmutable(), state); + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index b24d3d49..2d6b98f8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -9,6 +9,8 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.session.telemetry.WorldLoadedEvent; import net.minecraft.client.world.ClientWorld; @@ -21,6 +23,7 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.hit.EntityHitResult; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.Arrays; @@ -139,15 +142,16 @@ public class DojoManager { /** * when a block is updated check the current challenge and send the packet to correct helper - * @param packet block update packet + * @param pos the location of the updated block + * @param state the state of the new block */ - public static void onBlockUpdate(BlockUpdateS2CPacket packet) { + public static void onBlockUpdate(BlockPos pos, BlockState state) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } switch (currentChallenge) { - case SWIFTNESS -> SwiftnessTestHelper.onBlockUpdate(packet); - case MASTERY -> MasteryTestHelper.onBlockUpdate(packet); + case SWIFTNESS -> SwiftnessTestHelper.onBlockUpdate(pos, state); + case MASTERY -> MasteryTestHelper.onBlockUpdate(pos, state); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index 1f29f634..d737146a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -4,6 +4,7 @@ import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.ZombieEntity; +import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.math.Vec3d; @@ -58,13 +59,13 @@ public class ForceTestHelper { for (Map.Entry zombie : zombies.entrySet()) { float secondsTime = Math.max((zombie.getValue() - currentTime) / 1000f, 0); - Text text; + MutableText text = Text.literal(FORMATTER.format(secondsTime)); if (secondsTime > 1) { - text = Text.literal(FORMATTER.format(secondsTime)).formatted(Formatting.GREEN); + text = text.formatted(Formatting.GREEN); } else if (secondsTime > 0) { - text = Text.literal(FORMATTER.format(secondsTime)).formatted(Formatting.YELLOW); + text = text.formatted(Formatting.YELLOW); } else { - text = Text.literal("Soon").formatted(Formatting.RED); //todo translate + text = text.formatted(Formatting.RED); } Vec3d lablePos = zombie.getKey().getEyePos(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 76aa5209..8071a4af 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -2,7 +2,9 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; @@ -13,6 +15,7 @@ import java.util.*; public class MasteryTestHelper { + private static final float[] LIGHT_GRAY = {192 / 255f, 192 / 255f, 192 / 255f}; private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); @@ -24,13 +27,12 @@ public class MasteryTestHelper { endTimes.clear(); } - public static void onBlockUpdate(BlockUpdateS2CPacket packet) { - BlockPos pos = packet.getPos(); - if (packet.getState().isOf(Blocks.LIME_WOOL)) { + public static void onBlockUpdate(BlockPos pos, BlockState state) { + if (state.isOf(Blocks.LIME_WOOL)) { blockOrder.add(pos); endTimes.put(pos, System.currentTimeMillis() + 6850); } - if (packet.getState().isAir()) { + if (state.isAir()) { blockOrder.remove(pos); endTimes.remove(pos); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index 7243b45b..b7800d10 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -18,9 +18,9 @@ public class SwiftnessTestHelper { lastBlock = null; } - public static void onBlockUpdate(BlockUpdateS2CPacket packet) { - if (packet.getState().isOf(Blocks.LIME_WOOL)) { - lastBlock = packet.getPos(); + public static void onBlockUpdate(BlockPos pos, BlockState state) { + if (state.isOf(Blocks.LIME_WOOL)) { + lastBlock = pos.toImmutable(); } } @@ -28,6 +28,7 @@ public class SwiftnessTestHelper { if (lastBlock == null) { return; } - RenderHelper.renderOutline(context, new Box(lastBlock), new float[]{0f, 1f, 0f}, 3, true); + System.out.println("render" + lastBlock); + RenderHelper.renderFilled(context,lastBlock, new float[]{0f, 1f, 0f}, 0.5f, true); } } diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 9b96ba61..25c813cf 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -8,6 +8,7 @@ "BatEntityMixin", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", + "ClientWorldMixin", "CommandTreeS2CPacketMixin", "ComponentHolderMixin", "DataTrackerMixin", -- cgit From e56c6ebe57a150f6c442f0bbe81875665c3a7ad9 Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 3 May 2024 15:18:58 +0100 Subject: add control test helper and clean more code --- .../skyblock/crimson/dojo/ControlTestHelper.java | 38 ++++++++++++++++++++++ .../crimson/dojo/DisciplineTestHelper.java | 9 ----- .../skyblock/crimson/dojo/DojoManager.java | 9 +++-- .../skyblock/crimson/dojo/MasteryTestHelper.java | 7 ++-- .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 2 +- .../skyblock/crimson/dojo/TenacityTestHelper.java | 9 +++-- 6 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java new file mode 100644 index 00000000..fa3ef4f8 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -0,0 +1,38 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import de.hysky.skyblocker.utils.render.RenderHelper; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.entity.Entity; +import net.minecraft.entity.mob.WitherSkeletonEntity; +import net.minecraft.util.Util; +import net.minecraft.util.math.Vec3d; + +import java.awt.*; + +public class ControlTestHelper { + + private static WitherSkeletonEntity correctWitherSkeleton; + private static long pingMultiplier; + + protected static void reset() { + correctWitherSkeleton = null; + pingMultiplier = 0; + } + + protected static void onEntitySpawn(Entity entity) { + if (entity instanceof WitherSkeletonEntity witherSkeleton && correctWitherSkeleton == null) { + correctWitherSkeleton = witherSkeleton; + pingMultiplier = Util.getMeasuringTimeMs() / 100000; + System.out.println(pingMultiplier); + } + } + + protected static void render(WorldRenderContext context) { + if (correctWitherSkeleton != null) { + Vec3d movementVector = correctWitherSkeleton.getPos().subtract(new Vec3d(correctWitherSkeleton.prevX, correctWitherSkeleton.prevY, correctWitherSkeleton.prevZ)); + Vec3d offset = movementVector.multiply(pingMultiplier); + Vec3d aimPos = correctWitherSkeleton.getEyePos().add(offset); + RenderHelper.renderLineFromCursor(context, aimPos, Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}), 1, 3); + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 2350ea97..cce32847 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -2,22 +2,13 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.mob.ZombieEntity; import net.minecraft.util.Util; -import java.text.DecimalFormat; import java.util.HashMap; -import java.util.Map; public class DisciplineTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Map zombies = new HashMap<>(); - - protected static void reset() { - zombies.clear(); - } - private static final HashMap SWORD_TO_NAME_LOOKUP = Util.make(new HashMap<>(), map -> { map.put("WOOD_SWORD", "Wood"); map.put("IRON_SWORD", "Iron"); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 2d6b98f8..45819578 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -8,17 +8,12 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; -import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.session.telemetry.WorldLoadedEvent; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; -import net.minecraft.server.world.BlockEvent; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; @@ -44,6 +39,7 @@ public class DojoManager { MASTERY("Mastery"), DISCIPLINE("Discipline"), SWIFTNESS("Swiftness"), + CONTROL("Control"), TENACITY("Tenacity"); private final String name; @@ -76,6 +72,7 @@ public class DojoManager { MasteryTestHelper.reset(); TenacityTestHelper.reset(); ForceTestHelper.reset(); + ControlTestHelper.reset(); } /** @@ -166,6 +163,7 @@ public class DojoManager { switch (currentChallenge) { case TENACITY -> TenacityTestHelper.onEntitySpawn(entity); case FORCE -> ForceTestHelper.onEntitySpawn(entity); + case CONTROL -> ControlTestHelper.onEntitySpawn(entity); } } @@ -207,6 +205,7 @@ public class DojoManager { case SWIFTNESS -> SwiftnessTestHelper.render(context); case TENACITY -> TenacityTestHelper.render(context); case MASTERY -> MasteryTestHelper.render(context); + case CONTROL -> ControlTestHelper.render(context); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 8071a4af..43af9f29 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -10,13 +10,14 @@ import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; +import java.awt.*; import java.text.DecimalFormat; import java.util.*; +import java.util.List; public class MasteryTestHelper { - private static final float[] LIGHT_GRAY = {192 / 255f, 192 / 255f, 192 / 255f}; private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); private static final List blockOrder = new ArrayList<>(); @@ -27,7 +28,7 @@ public class MasteryTestHelper { endTimes.clear(); } - public static void onBlockUpdate(BlockPos pos, BlockState state) { + protected static void onBlockUpdate(BlockPos pos, BlockState state) { if (state.isOf(Blocks.LIME_WOOL)) { blockOrder.add(pos); endTimes.put(pos, System.currentTimeMillis() + 6850); @@ -41,7 +42,7 @@ public class MasteryTestHelper { protected static void render(WorldRenderContext context) { //render connecting lines if (!blockOrder.isEmpty()) { - RenderHelper.renderLineFromCursor(context, blockOrder.getFirst().toCenterPos(), LIGHT_GRAY, 1f, 2); + RenderHelper.renderLineFromCursor(context, blockOrder.getFirst().toCenterPos(), Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}), 1f, 2); } if (blockOrder.size() >= 2) { RenderHelper.renderLinesFromPoints(context, new Vec3d[]{blockOrder.get(0).toCenterPos(), blockOrder.get(1).toCenterPos()}, new float[]{0f, 1f, 0f}, 1, 2, false); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index b7800d10..48764b71 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -18,7 +18,7 @@ public class SwiftnessTestHelper { lastBlock = null; } - public static void onBlockUpdate(BlockPos pos, BlockState state) { + protected static void onBlockUpdate(BlockPos pos, BlockState state) { if (state.isOf(Blocks.LIME_WOOL)) { lastBlock = pos.toImmutable(); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index 37ba84d2..1ca409d8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -18,7 +18,6 @@ public class TenacityTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static final Map fireBallsWithStartPos = new HashMap<>(); - private static final Map particleOffsets = new HashMap<>(); protected static void reset() { @@ -47,14 +46,14 @@ public class TenacityTestHelper { } } - public static HitResult raycast(Vec3d start, Vec3d end, ArmorStandEntity fireball) { + protected static HitResult raycast(Vec3d start, Vec3d end, ArmorStandEntity fireball) { if (CLIENT == null || CLIENT.world == null) { return null; } return CLIENT.world.raycast(new RaycastContext(start, end, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.ANY, fireball)); } - public static void onEntitySpawn(Entity entity) { + protected static void onEntitySpawn(Entity entity) { if (entity instanceof ArmorStandEntity armorStand) { // they should be holding coal block but are not holding anything idk fireBallsWithStartPos.put(armorStand, armorStand.getPos()); @@ -62,13 +61,13 @@ public class TenacityTestHelper { } } - public static void onEntityDespawn(Entity entity) { + protected static void onEntityDespawn(Entity entity) { if (entity instanceof ArmorStandEntity armorStand) { fireBallsWithStartPos.remove(armorStand); } } - public static void onParticle(ParticleS2CPacket packet) { + protected static void onParticle(ParticleS2CPacket packet) { if (!ParticleTypes.FLAME.equals(packet.getParameters().getType())) { return; } -- cgit From 6f2fd92438566a6193bbbce15b12dcf329e47368 Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 3 May 2024 20:20:31 +0100 Subject: add config options add config options to toggle each helper for the dojo --- .../skyblock/crimson/dojo/DojoManager.java | 33 +++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 45819578..77fb7d2b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -1,5 +1,6 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; +import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents; @@ -22,6 +23,8 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.Arrays; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -34,23 +37,26 @@ public class DojoManager { protected enum DojoChallenges { - NONE("none"), - FORCE("Force"), - MASTERY("Mastery"), - DISCIPLINE("Discipline"), - SWIFTNESS("Swiftness"), - CONTROL("Control"), - TENACITY("Tenacity"); + NONE("none", enabled -> false), + FORCE("Force",enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableForceHelper), + MASTERY("Mastery", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableMasteryHelper), + DISCIPLINE("Discipline", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableDisciplineHelper), + SWIFTNESS("Swiftness", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableSwiftnessHelper), + CONTROL("Control", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableControlHelper), + TENACITY("Tenacity", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableTenacityHelper); private final String name; + private final Predicate enabled; - DojoChallenges(String name) { + DojoChallenges(String name, Predicate enabled) { this.name = name; + this.enabled = enabled; } public static DojoChallenges from(String name) { return Arrays.stream(DojoChallenges.values()).filter(n -> name.equals(n.name)).findFirst().orElse(NONE); } + } protected static DojoChallenges currentChallenge = DojoChallenges.NONE; @@ -77,7 +83,8 @@ public class DojoManager { /** * works out if the player is in dojo and if so what challenge based on chat messages - * @param text message + * + * @param text message * @param overlay is overlay */ private static void onMessage(Text text, Boolean overlay) { @@ -103,11 +110,15 @@ public class DojoManager { Matcher nextChallenge = TEST_OF_PATTERN.matcher(text.getString()); if (nextChallenge.matches()) { currentChallenge = DojoChallenges.from(nextChallenge.group(1)); + if (!currentChallenge.enabled.test(true)) { + currentChallenge = DojoChallenges.NONE; + } } } /** * called from the {@link de.hysky.skyblocker.skyblock.entity.MobGlow} class and checks the current challenge to see if zombies should be glowing + * * @param name name of the zombie * @return if the zombie should glow */ @@ -124,6 +135,7 @@ public class DojoManager { /** * called from the {@link de.hysky.skyblocker.skyblock.entity.MobGlow} class and checks the current challenge to see zombie outline color + * * @return if the zombie should glow */ public static int getColor() { @@ -139,7 +151,8 @@ public class DojoManager { /** * when a block is updated check the current challenge and send the packet to correct helper - * @param pos the location of the updated block + * + * @param pos the location of the updated block * @param state the state of the new block */ public static void onBlockUpdate(BlockPos pos, BlockState state) { -- cgit From 0084b36699797aa296e30010120688efad59fc0d Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 3 May 2024 20:44:06 +0100 Subject: fix not being able to attack mobs outside of dojo --- .../java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 77fb7d2b..9d3cf2ee 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -192,7 +192,7 @@ public class DojoManager { private static ActionResult onEntityAttacked(PlayerEntity playerEntity, World world, Hand hand, Entity entity, EntityHitResult entityHitResult) { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { - return null; + return ActionResult.PASS; } if (currentChallenge == DojoChallenges.FORCE) { ForceTestHelper.onEntityAttacked(entity); -- cgit From b98415d1c5439d3862a55ca7e943ca3e578c6f6e Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 17 May 2024 13:14:55 +0100 Subject: fix to align with new config --- .../config/categories/CrimsonIsleCategory.java | 56 +++++++++++++++++++++- .../config/configs/CrimsonIsleConfig.java | 24 ++++++++++ .../skyblock/crimson/dojo/DojoManager.java | 12 ++--- .../resources/assets/skyblocker/lang/en_us.json | 14 ++++++ 4 files changed, 99 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java index fed8fa96..49850403 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java @@ -81,6 +81,60 @@ public class CrimsonIsleCategory { .controller(IntegerFieldControllerBuilder::create) .build()) .build()) - .build(); + //dojo + .group(OptionGroup.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo")) + .collapsed(false) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.forceHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.forceHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableForceHelper, + () -> config.crimsonIsle.dojo.enableForceHelper, + newValue -> config.crimsonIsle.dojo.enableForceHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.masteryHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.masteryHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableMasteryHelper, + () -> config.crimsonIsle.dojo.enableMasteryHelper, + newValue -> config.crimsonIsle.dojo.enableMasteryHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.disciplineHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.disciplineHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableDisciplineHelper, + () -> config.crimsonIsle.dojo.enableDisciplineHelper, + newValue -> config.crimsonIsle.dojo.enableDisciplineHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.swiftnessHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.swiftnessHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableSwiftnessHelper, + () -> config.crimsonIsle.dojo.enableSwiftnessHelper, + newValue -> config.crimsonIsle.dojo.enableSwiftnessHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.controlHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.controlHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableControlHelper, + () -> config.crimsonIsle.dojo.enableControlHelper, + newValue -> config.crimsonIsle.dojo.enableControlHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.tenacityHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.tenacityHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableTenacityHelper, + () -> config.crimsonIsle.dojo.enableTenacityHelper, + newValue -> config.crimsonIsle.dojo.enableTenacityHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .build()) + + .build(); } } diff --git a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java index 8dd93aee..0bf334a1 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java @@ -7,6 +7,10 @@ public class CrimsonIsleConfig { @SerialEntry public Kuudra kuudra = new Kuudra(); + @SerialEntry + public Dojo dojo = new Dojo(); + + public static class Kuudra { @SerialEntry public boolean supplyWaypoints = true; @@ -32,4 +36,24 @@ public class CrimsonIsleConfig { @SerialEntry public int arrowPoisonThreshold = 32; } + + public static class Dojo { + @SerialEntry + public boolean enableForceHelper = true; + + @SerialEntry + public boolean enableMasteryHelper = true; + + @SerialEntry + public boolean enableDisciplineHelper = true; + + @SerialEntry + public boolean enableSwiftnessHelper = true; + + @SerialEntry + public boolean enableControlHelper = true; + + @SerialEntry + public boolean enableTenacityHelper = true; + } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 9d3cf2ee..7b0ebd23 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -38,12 +38,12 @@ public class DojoManager { protected enum DojoChallenges { NONE("none", enabled -> false), - FORCE("Force",enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableForceHelper), - MASTERY("Mastery", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableMasteryHelper), - DISCIPLINE("Discipline", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableDisciplineHelper), - SWIFTNESS("Swiftness", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableSwiftnessHelper), - CONTROL("Control", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableControlHelper), - TENACITY("Tenacity", enabled -> SkyblockerConfigManager.get().locations.crimsonIsle.dojo.enableTenacityHelper); + FORCE("Force",enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableForceHelper), + MASTERY("Mastery", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableMasteryHelper), + DISCIPLINE("Discipline", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableDisciplineHelper), + SWIFTNESS("Swiftness", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableSwiftnessHelper), + CONTROL("Control", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableControlHelper), + TENACITY("Tenacity", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableTenacityHelper); private final String name; private final Predicate enabled; diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index a814718e..f2d0db46 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -866,6 +866,20 @@ "skyblocker.fancyAuctionHouse.yourAuction": "This is your auction!", "skyblocker.fancyAuctionHouse.youPay": "You pay: %s", + "skyblocker.crimson.dojo": "Dojo", + "skyblocker.crimson.dojo.forceHelper": "Enable Force Helper", + "skyblocker.crimson.dojo.forceHelper.@Tooltip": "Shows timer showing how long until a zombie despawns and outlines negative zombies.", + "skyblocker.crimson.dojo.masteryHelper": "Enable Mastery Helper", + "skyblocker.crimson.dojo.masteryHelper.@Tooltip": "Shows timer for how long a block has left and a path to follow.", + "skyblocker.crimson.dojo.disciplineHelper": "Enable Discipline Helper", + "skyblocker.crimson.dojo.disciplineHelper.@Tooltip": "Outlines the zombies to attack with currently held sword.", + "skyblocker.crimson.dojo.swiftnessHelper": "Enable Swiftness Helper", + "skyblocker.crimson.dojo.swiftnessHelper.@Tooltip": "highlights the newest wool block to go to.", + "skyblocker.crimson.dojo.controlHelper": "Enable Control Helper", + "skyblocker.crimson.dojo.controlHelper.@Tooltip": "Creates a line from cursor to where to aim (this is not exact and is guessed of ping).", + "skyblocker.crimson.dojo.tenacityHelper": "Enable Tenacity Helper", + "skyblocker.crimson.dojo.tenacityHelper.@Tooltip": "Shows a path for each fireball and predicted block they are going to hit.", + "skyblocker.crimson.kuudra.noArrowPoison": "No Arrow Poison!", "skyblocker.crimson.kuudra.lowArrowPoison": "Low on Arrow Poison!", -- cgit From a84e506e7d97baf73e58c4b68a8357e453edb69a Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 17 May 2024 15:17:48 +0100 Subject: remove formatting for start_message regex and just strip the message --- .../de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java | 10 ++++++---- .../skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 7b0ebd23..22bfe8c3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -17,12 +17,14 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; +import net.minecraft.util.Formatting; import net.minecraft.util.Hand; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.Arrays; +import java.util.Objects; import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Matcher; @@ -31,14 +33,14 @@ import java.util.regex.Pattern; public class DojoManager { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final String START_MESSAGE = "§e[NPC] §eMaster Tao§f: Ahhh, here we go! Let's get you into the Arena."; + private static final String START_MESSAGE = "[NPC] Master Tao: Ahhh, here we go! Let's get you into the Arena."; private static final Pattern TEST_OF_PATTERN = Pattern.compile("\\s+Test of (\\w+) OBJECTIVES"); private static final String CHALLENGE_FINISHED_REGEX = "\\s+CHALLENGE ((COMPLETED)|(FAILED))"; protected enum DojoChallenges { NONE("none", enabled -> false), - FORCE("Force",enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableForceHelper), + FORCE("Force", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableForceHelper), MASTERY("Mastery", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableMasteryHelper), DISCIPLINE("Discipline", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableDisciplineHelper), SWIFTNESS("Swiftness", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableSwiftnessHelper), @@ -56,7 +58,6 @@ public class DojoManager { public static DojoChallenges from(String name) { return Arrays.stream(DojoChallenges.values()).filter(n -> name.equals(n.name)).findFirst().orElse(NONE); } - } protected static DojoChallenges currentChallenge = DojoChallenges.NONE; @@ -91,7 +92,8 @@ public class DojoManager { if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { return; } - if (text.getString().equals(START_MESSAGE)) { + System.out.println(Formatting.strip(text.getString())); + if (Objects.equals(Formatting.strip(text.getString()), START_MESSAGE)) { inArena = true; return; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index 48764b71..fd2364d1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -29,6 +29,6 @@ public class SwiftnessTestHelper { return; } System.out.println("render" + lastBlock); - RenderHelper.renderFilled(context,lastBlock, new float[]{0f, 1f, 0f}, 0.5f, true); + RenderHelper.renderFilled(context, lastBlock, new float[]{0f, 1f, 0f}, 0.5f, true); } } -- cgit From 9bcd5488b023091a8168ab2ae8eefa2fd27827c6 Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 17 May 2024 21:42:46 +0100 Subject: add helper for stamina add higlighting of holes in walls for stanima chalange --- .../config/categories/CrimsonIsleCategory.java | 8 + .../config/configs/CrimsonIsleConfig.java | 3 + .../skyblock/crimson/dojo/DojoManager.java | 15 +- .../skyblock/crimson/dojo/StaminaTestHelper.java | 240 +++++++++++++++++++++ .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 1 - .../resources/assets/skyblocker/lang/en_us.json | 2 + 6 files changed, 267 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java index 49850403..e8127a0e 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/CrimsonIsleCategory.java @@ -93,6 +93,14 @@ public class CrimsonIsleCategory { newValue -> config.crimsonIsle.dojo.enableForceHelper = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.crimson.dojo.staminaHelper")) + .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.staminaHelper.@Tooltip"))) + .binding(config.crimsonIsle.dojo.enableStaminaHelper, + () -> config.crimsonIsle.dojo.enableStaminaHelper, + newValue -> config.crimsonIsle.dojo.enableStaminaHelper = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.createBuilder() .name(Text.translatable("skyblocker.crimson.dojo.masteryHelper")) .description(OptionDescription.of(Text.translatable("skyblocker.crimson.dojo.masteryHelper.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java index 0bf334a1..451d1983 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/CrimsonIsleConfig.java @@ -41,6 +41,9 @@ public class CrimsonIsleConfig { @SerialEntry public boolean enableForceHelper = true; + @SerialEntry + public boolean enableStaminaHelper = true; + @SerialEntry public boolean enableMasteryHelper = true; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 22bfe8c3..bf4bbedd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; @@ -41,6 +42,7 @@ public class DojoManager { protected enum DojoChallenges { NONE("none", enabled -> false), FORCE("Force", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableForceHelper), + STAMINA("Stamina", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableStaminaHelper), MASTERY("Mastery", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableMasteryHelper), DISCIPLINE("Discipline", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableDisciplineHelper), SWIFTNESS("Swiftness", enabled -> SkyblockerConfigManager.get().crimsonIsle.dojo.enableSwiftnessHelper), @@ -70,6 +72,7 @@ public class DojoManager { ClientEntityEvents.ENTITY_LOAD.register(DojoManager::onEntitySpawn); ClientEntityEvents.ENTITY_UNLOAD.register(DojoManager::onEntityDespawn); AttackEntityCallback.EVENT.register(DojoManager::onEntityAttacked); + Scheduler.INSTANCE.scheduleCyclic(DojoManager::update, 3); } private static void reset() { @@ -80,6 +83,7 @@ public class DojoManager { TenacityTestHelper.reset(); ForceTestHelper.reset(); ControlTestHelper.reset(); + StaminaTestHelper.reset(); } /** @@ -92,7 +96,6 @@ public class DojoManager { if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { return; } - System.out.println(Formatting.strip(text.getString())); if (Objects.equals(Formatting.strip(text.getString()), START_MESSAGE)) { inArena = true; return; @@ -118,6 +121,15 @@ public class DojoManager { } } + private static void update() { + if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + return; + } + if (currentChallenge == DojoChallenges.STAMINA) { + StaminaTestHelper.update(); + } + } + /** * called from the {@link de.hysky.skyblocker.skyblock.entity.MobGlow} class and checks the current challenge to see if zombies should be glowing * @@ -217,6 +229,7 @@ public class DojoManager { } switch (currentChallenge) { case FORCE -> ForceTestHelper.render(context); + case STAMINA -> StaminaTestHelper.render(context); case SWIFTNESS -> SwiftnessTestHelper.render(context); case TENACITY -> TenacityTestHelper.render(context); case MASTERY -> MasteryTestHelper.render(context); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java new file mode 100644 index 00000000..b1126f99 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -0,0 +1,240 @@ +package de.hysky.skyblocker.skyblock.crimson.dojo; + +import de.hysky.skyblocker.utils.render.RenderHelper; +import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.client.MinecraftClient; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class StaminaTestHelper { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final int WALL_THRESHOLD_VALUE = 13; + private static final float[] INCOMING_COLOR = new float[]{0f, 1f, 0f, 0f}; + private static final float[] OUTGOING_COLOR = new float[]{1f, 0.64f, 0f, 0f}; + + private static final List wallHoles = new ArrayList<>(); + private static final List lastHoles = new ArrayList<>(); + private static final Map holeDirections = new HashMap<>(); + private static BlockPos middleBase; + + private enum wallDirections { + POSITIVE_X, + POSITIVE_Z, + NEGATIVE_X, + NEGATIVE_Z, + NEW, + UNCHANGED; + } + + protected static void reset() { + wallHoles.clear(); + lastHoles.clear(); + holeDirections.clear(); + middleBase = null; + } + + protected static void update() { + if (CLIENT == null || CLIENT.player == null || CLIENT.world == null) { + return; + } + //search the world around the player for walls 30 x 10 x 30 area centered on player + BlockPos playerPos = CLIENT.player.getBlockPos(); + //find the center first before starting to look for walls + if (middleBase == null) { + for (int x = playerPos.getX() - 10; x < playerPos.getX() + 10; x++) { + for (int y = playerPos.getY() - 5; y < playerPos.getY(); y++) { + for (int z = playerPos.getZ() - 10; z < playerPos.getZ() + 10; z++) { + BlockPos pos = new BlockPos(x, y, z); + BlockState state = CLIENT.world.getBlockState(pos); + if (state.isOf(Blocks.CHISELED_STONE_BRICKS)) { + middleBase = pos; + return; + } + } + } + } + return; + } + List currentBottomWallLocations = new ArrayList<>(); + for (int x = middleBase.getX() - 15; x < middleBase.getX() + 15; x++) { + for (int z = middleBase.getZ() - 15; z < middleBase.getZ() + 15; z++) { + BlockPos pos = new BlockPos(x, middleBase.getY() + 1, z); + BlockState state = CLIENT.world.getBlockState(pos); + //find the bottom of walls + if (!state.isAir()) { + currentBottomWallLocations.add(pos); + } + } + } + + //find walls + List walls = findWalls(currentBottomWallLocations); + + //find air then holes and add whole to list + lastHoles.clear(); + lastHoles.addAll(wallHoles); + wallHoles.clear(); + for (Box wall : walls) { + wallHoles.addAll(findAirInBox(wall)); + } + // get direction for the holes + Map lastHoleDirections = new HashMap<>(holeDirections); + holeDirections.clear(); + for (BlockPos hole : wallHoles) { + wallDirections holeDirection = getWholeDirection(hole); + if (holeDirection == wallDirections.UNCHANGED) { + holeDirections.put(hole, lastHoleDirections.get(hole)); + continue; + } + holeDirections.put(hole, holeDirection); + } + } + + private static List findWalls(List currentBottomWallLocations) { + Map> possibleWallsX = new HashMap<>(); + Map> possibleWallsZ = new HashMap<>(); + for (BlockPos andesite : currentBottomWallLocations) { + //add to the x walls + int x = andesite.getX(); + if (!possibleWallsX.containsKey(x)) { + possibleWallsX.put(x, new ArrayList<>()); + + } + possibleWallsX.get(x).add(andesite); + //add to the z walls + int z = andesite.getZ(); + if (!possibleWallsZ.containsKey(z)) { + possibleWallsZ.put(z, new ArrayList<>()); + + } + possibleWallsZ.get(z).add(andesite); + } + + //extract only the lines that are long enough to be a wall and not from walls overlapping + List> walls = new ArrayList<>(); + for (List line : possibleWallsX.values()) { + if (line.size() >= WALL_THRESHOLD_VALUE) { + walls.add(line); + } + } + for (List line : possibleWallsZ.values()) { + if (line.size() >= WALL_THRESHOLD_VALUE) { + walls.add(line); + } + } + + //final find the maximum values for each wall to output a box for them + List wallBoxes = new ArrayList<>(); + for (List wall : walls) { + BlockPos minPos = wall.getFirst(); + BlockPos maxPos = wall.getFirst(); + for (BlockPos pos : wall) { + if (pos.getX() < minPos.getX()) { + minPos = new BlockPos(pos.getX(), minPos.getY(), minPos.getZ()); + } + if (pos.getZ() < minPos.getZ()) { + minPos = new BlockPos(minPos.getX(), minPos.getY(), pos.getZ()); + } + + if (pos.getX() > maxPos.getX()) { + maxPos = new BlockPos(pos.getX(), maxPos.getY(), maxPos.getZ()); + } + if (pos.getZ() > maxPos.getZ()) { + maxPos = new BlockPos(maxPos.getX(), maxPos.getY(), pos.getZ()); + } + } + //expand wall to top + maxPos = new BlockPos(maxPos.getX(), maxPos.getY() + 5, maxPos.getZ()); + + wallBoxes.add(Box.enclosing(minPos, maxPos)); + } + + return wallBoxes; + } + + private static List findAirInBox(Box box) { + List air = new ArrayList<>(); + if (CLIENT == null || CLIENT.player == null || CLIENT.world == null) { + return air; + } + for (int x = (int) box.minX; x < box.maxX; x++) { + for (int y = (int) box.minY; y < box.maxY; y++) { + for (int z = (int) box.minZ; z < box.maxZ; z++) { + BlockPos pos = new BlockPos(x, y, z); + BlockState state = CLIENT.world.getBlockState(pos); + if (state.isAir()) { + air.add(pos); + } + } + } + } + return air; + } + + private static List combineAir(List airLocations) { + //todo + List holes = new ArrayList<>(); + //check if air is conected to existing whole and if so + for (BlockPos airLocation : airLocations) { + holes.add(Box.enclosing(airLocation, airLocation)); + } + return holes; + } + + private static wallDirections getWholeDirection(BlockPos hole) { + //the value has not changed since last time + if (lastHoles.contains(hole)) { + return wallDirections.UNCHANGED; + } + //check each direction to work out which way the whole is going + BlockPos posX = hole.add(1, 0, 0); + if (lastHoles.contains(posX)) { + return wallDirections.POSITIVE_X; + } + BlockPos negX = hole.add(-1, 0, 0); + if (lastHoles.contains(negX)) { + System.out.println("positiveX"); + return wallDirections.NEGATIVE_X; + } + BlockPos posZ = hole.add(0, 0, 1); + if (lastHoles.contains(posZ)) { + return wallDirections.POSITIVE_Z; + } + BlockPos negZ = hole.add(0, 0, -1); + if (lastHoles.contains(negZ)) { + return wallDirections.NEGATIVE_Z; + } + // if pos can not be found mark as new + return wallDirections.NEW; + + } + + protected static void render(WorldRenderContext context) { + if (wallHoles.isEmpty() || CLIENT == null || CLIENT.player == null) { + return; + } + BlockPos playerPos = CLIENT.player.getBlockPos(); + for (BlockPos hole : wallHoles) { + float[] color = isHoleIncoming(hole,holeDirections.get(hole),playerPos) ? INCOMING_COLOR : OUTGOING_COLOR; + RenderHelper.renderFilled(context, hole, color, 0.3f, true); + } + } + + private static boolean isHoleIncoming(BlockPos holePos, wallDirections holeDirection, BlockPos playerPos) { + return switch (holeDirection) { + case POSITIVE_X -> playerPos.getX() < holePos.getX(); + case POSITIVE_Z -> playerPos.getZ() < holePos.getZ(); + case NEGATIVE_X -> playerPos.getX() > holePos.getX(); + case NEGATIVE_Z -> playerPos.getZ() > holePos.getZ(); + + default -> true; + }; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index fd2364d1..8e3f2a32 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -28,7 +28,6 @@ public class SwiftnessTestHelper { if (lastBlock == null) { return; } - System.out.println("render" + lastBlock); RenderHelper.renderFilled(context, lastBlock, new float[]{0f, 1f, 0f}, 0.5f, true); } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index f2d0db46..a0a83897 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -869,6 +869,8 @@ "skyblocker.crimson.dojo": "Dojo", "skyblocker.crimson.dojo.forceHelper": "Enable Force Helper", "skyblocker.crimson.dojo.forceHelper.@Tooltip": "Shows timer showing how long until a zombie despawns and outlines negative zombies.", + "skyblocker.crimson.dojo.staminaHelper": "Enable Stamina Helper", + "skyblocker.crimson.dojo.staminaHelper.@Tooltip": "Highlights the holes in the walls turning orange once you have been through a wall.", "skyblocker.crimson.dojo.masteryHelper": "Enable Mastery Helper", "skyblocker.crimson.dojo.masteryHelper.@Tooltip": "Shows timer for how long a block has left and a path to follow.", "skyblocker.crimson.dojo.disciplineHelper": "Enable Discipline Helper", -- cgit From e61753740cf093f653378101083a7575cda80960 Mon Sep 17 00:00:00 2001 From: olim Date: Sat, 18 May 2024 00:31:53 +0100 Subject: refactor and comment code --- .../skyblock/crimson/dojo/ControlTestHelper.java | 1 - .../crimson/dojo/DisciplineTestHelper.java | 18 ++++ .../skyblock/crimson/dojo/DojoManager.java | 22 ++--- .../skyblock/crimson/dojo/ForceTestHelper.java | 15 ++- .../skyblock/crimson/dojo/MasteryTestHelper.java | 6 +- .../skyblock/crimson/dojo/StaminaTestHelper.java | 101 ++++++++++++--------- .../skyblock/crimson/dojo/SwiftnessTestHelper.java | 5 + .../skyblock/crimson/dojo/TenacityTestHelper.java | 12 ++- 8 files changed, 115 insertions(+), 65 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java index fa3ef4f8..cc37ef64 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -23,7 +23,6 @@ public class ControlTestHelper { if (entity instanceof WitherSkeletonEntity witherSkeleton && correctWitherSkeleton == null) { correctWitherSkeleton = witherSkeleton; pingMultiplier = Util.getMeasuringTimeMs() / 100000; - System.out.println(pingMultiplier); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index cce32847..5c7e8c5a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -9,12 +9,19 @@ import java.util.HashMap; public class DisciplineTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + /** + * Stores what sword is needed for the name of a zombie + */ private static final HashMap SWORD_TO_NAME_LOOKUP = Util.make(new HashMap<>(), map -> { map.put("WOOD_SWORD", "Wood"); map.put("IRON_SWORD", "Iron"); map.put("GOLD_SWORD", "Gold"); map.put("DIAMOND_SWORD", "Diamond"); }); + + /** + * Stores a color related to the color of the sword: wood = brown, iron = silver, gold = gold, diamond = cyan + */ private static final HashMap SWORD_TO_COLOR_LOOKUP = Util.make(new HashMap<>(), map -> { map.put("WOOD_SWORD", 0xa52a2a); map.put("IRON_SWORD", 0xc0c0c0); @@ -22,6 +29,12 @@ public class DisciplineTestHelper { map.put("DIAMOND_SWORD", 0x00ffff); }); + /** + * Works out if a zombie should glow based on its name and the currently held item by the player + * + * @param name name of the zombie to see if it should glow + * @return if the zombie should glow + */ protected static boolean shouldGlow(String name) { if (CLIENT == null || CLIENT.player == null) { return false; @@ -34,6 +47,11 @@ public class DisciplineTestHelper { return false; } + /** + * gets the color linked to the currently held sword for zombies to glow + * + * @return color linked to sword + */ protected static int getColor() { if (DojoManager.currentChallenge != DojoManager.DojoChallenges.DISCIPLINE || CLIENT == null || CLIENT.player == null) { return 0; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index bf4bbedd..8cbfca7b 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -78,12 +78,12 @@ public class DojoManager { private static void reset() { inArena = false; currentChallenge = DojoChallenges.NONE; - SwiftnessTestHelper.reset(); - MasteryTestHelper.reset(); - TenacityTestHelper.reset(); ForceTestHelper.reset(); - ControlTestHelper.reset(); StaminaTestHelper.reset(); + MasteryTestHelper.reset(); + SwiftnessTestHelper.reset(); + ControlTestHelper.reset(); + TenacityTestHelper.reset(); } /** @@ -141,8 +141,8 @@ public class DojoManager { return false; } return switch (currentChallenge) { - case DISCIPLINE -> DisciplineTestHelper.shouldGlow(name); case FORCE -> ForceTestHelper.shouldGlow(name); + case DISCIPLINE -> DisciplineTestHelper.shouldGlow(name); default -> false; }; } @@ -157,8 +157,8 @@ public class DojoManager { return 0xf57738; } return switch (currentChallenge) { - case DISCIPLINE -> DisciplineTestHelper.getColor(); case FORCE -> ForceTestHelper.getColor(); + case DISCIPLINE -> DisciplineTestHelper.getColor(); default -> 0xf57738; }; } @@ -174,8 +174,8 @@ public class DojoManager { return; } switch (currentChallenge) { - case SWIFTNESS -> SwiftnessTestHelper.onBlockUpdate(pos, state); case MASTERY -> MasteryTestHelper.onBlockUpdate(pos, state); + case SWIFTNESS -> SwiftnessTestHelper.onBlockUpdate(pos, state); } } @@ -188,9 +188,9 @@ public class DojoManager { return; } switch (currentChallenge) { - case TENACITY -> TenacityTestHelper.onEntitySpawn(entity); case FORCE -> ForceTestHelper.onEntitySpawn(entity); case CONTROL -> ControlTestHelper.onEntitySpawn(entity); + case TENACITY -> TenacityTestHelper.onEntitySpawn(entity); } } @@ -199,8 +199,8 @@ public class DojoManager { return; } switch (currentChallenge) { - case TENACITY -> TenacityTestHelper.onEntityDespawn(entity); case FORCE -> ForceTestHelper.onEntityDespawn(entity); + case TENACITY -> TenacityTestHelper.onEntityDespawn(entity); } } @@ -230,10 +230,10 @@ public class DojoManager { switch (currentChallenge) { case FORCE -> ForceTestHelper.render(context); case STAMINA -> StaminaTestHelper.render(context); - case SWIFTNESS -> SwiftnessTestHelper.render(context); - case TENACITY -> TenacityTestHelper.render(context); case MASTERY -> MasteryTestHelper.render(context); + case SWIFTNESS -> SwiftnessTestHelper.render(context); case CONTROL -> ControlTestHelper.render(context); + case TENACITY -> TenacityTestHelper.render(context); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index d737146a..e4cff23c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -17,6 +17,7 @@ import java.util.Map; public class ForceTestHelper { private static final DecimalFormat FORMATTER = new DecimalFormat("0.0"); + private static final int ZOMBIE_LIFE_TIME = 10100; private static final Map zombies = new HashMap<>(); @@ -24,6 +25,12 @@ public class ForceTestHelper { zombies.clear(); } + /** + * If a zombie value is negative make it glow + * + * @param name zombies value + * @return if the zombie should glow + */ protected static boolean shouldGlow(String name) { if (name == null) return false; return name.contains("-"); @@ -35,14 +42,14 @@ public class ForceTestHelper { protected static void onEntitySpawn(Entity entity) { if (entity instanceof ZombieEntity zombie) { - zombies.put(zombie, System.currentTimeMillis() + 10100); //they last for 10100 millis ish so this is the time they despawn + zombies.put(zombie, System.currentTimeMillis() + ZOMBIE_LIFE_TIME); } } protected static void onEntityAttacked(Entity entity) { if (entity instanceof ZombieEntity zombie) { if (zombies.containsKey(zombie)) { - zombies.put(zombie, System.currentTimeMillis() + 10100); //timer is reset when they are hit + zombies.put(zombie, System.currentTimeMillis() + ZOMBIE_LIFE_TIME); //timer is reset when they are hit } } } @@ -68,8 +75,8 @@ public class ForceTestHelper { text = text.formatted(Formatting.RED); } - Vec3d lablePos = zombie.getKey().getEyePos(); - RenderHelper.renderText(context, text, lablePos, 1.5f, true); + Vec3d labelPos = zombie.getKey().getEyePos(); + RenderHelper.renderText(context, text, labelPos, 1.5f, true); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 43af9f29..393e8f06 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -17,8 +17,8 @@ import java.util.List; public class MasteryTestHelper { - private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); + private static final int BLOCK_LIFE_TIME = 6850; private static final List blockOrder = new ArrayList<>(); private static final Map endTimes = new HashMap<>(); @@ -31,7 +31,7 @@ public class MasteryTestHelper { protected static void onBlockUpdate(BlockPos pos, BlockState state) { if (state.isOf(Blocks.LIME_WOOL)) { blockOrder.add(pos); - endTimes.put(pos, System.currentTimeMillis() + 6850); + endTimes.put(pos, System.currentTimeMillis() + BLOCK_LIFE_TIME); } if (state.isAir()) { blockOrder.remove(pos); @@ -45,7 +45,7 @@ public class MasteryTestHelper { RenderHelper.renderLineFromCursor(context, blockOrder.getFirst().toCenterPos(), Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}), 1f, 2); } if (blockOrder.size() >= 2) { - RenderHelper.renderLinesFromPoints(context, new Vec3d[]{blockOrder.get(0).toCenterPos(), blockOrder.get(1).toCenterPos()}, new float[]{0f, 1f, 0f}, 1, 2, false); + RenderHelper.renderLinesFromPoints(context, new Vec3d[]{blockOrder.get(0).toCenterPos(), blockOrder.get(1).toCenterPos()}, Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}), 1, 2, false); } //render times diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java index b1126f99..77a202d7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -21,10 +21,10 @@ public class StaminaTestHelper { private static final List wallHoles = new ArrayList<>(); private static final List lastHoles = new ArrayList<>(); - private static final Map holeDirections = new HashMap<>(); + private static final Map holeDirections = new HashMap<>(); private static BlockPos middleBase; - private enum wallDirections { + private enum holeDirection { POSITIVE_X, POSITIVE_Z, NEGATIVE_X, @@ -41,10 +41,45 @@ public class StaminaTestHelper { } protected static void update() { - if (CLIENT == null || CLIENT.player == null || CLIENT.world == null) { + + //search the world around the player for walls 30 x 10 x 30 area centered on player + + List currentBottomWallLocations = findWallBlocks(); + if (currentBottomWallLocations == null) { //stop here if the center pos has not been found return; } - //search the world around the player for walls 30 x 10 x 30 area centered on player + //find walls + List walls = findWalls(currentBottomWallLocations); + + //find air then holes and add whole to list + lastHoles.clear(); + lastHoles.addAll(wallHoles); + wallHoles.clear(); + for (Box wall : walls) { + wallHoles.addAll(findAirInBox(wall)); + } + // get direction for the holes + Map lastHoleDirections = new HashMap<>(holeDirections); + holeDirections.clear(); + for (BlockPos hole : wallHoles) { + holeDirection holeDirection = getWholeDirection(hole); + if (holeDirection == StaminaTestHelper.holeDirection.UNCHANGED) { + holeDirections.put(hole, lastHoleDirections.get(hole)); + continue; + } + holeDirections.put(hole, holeDirection); + } + } + + /** + * Locates the center of the game and once this is found scans the bottom of room for blocks that make up the walls + * + * @return list of blocks that make up the bottom of the walls + */ + private static List findWallBlocks() { + if (CLIENT == null || CLIENT.player == null || CLIENT.world == null) { + return null; + } BlockPos playerPos = CLIENT.player.getBlockPos(); //find the center first before starting to look for walls if (middleBase == null) { @@ -55,12 +90,12 @@ public class StaminaTestHelper { BlockState state = CLIENT.world.getBlockState(pos); if (state.isOf(Blocks.CHISELED_STONE_BRICKS)) { middleBase = pos; - return; + return null; } } } } - return; + return null; } List currentBottomWallLocations = new ArrayList<>(); for (int x = middleBase.getX() - 15; x < middleBase.getX() + 15; x++) { @@ -73,48 +108,26 @@ public class StaminaTestHelper { } } } - - //find walls - List walls = findWalls(currentBottomWallLocations); - - //find air then holes and add whole to list - lastHoles.clear(); - lastHoles.addAll(wallHoles); - wallHoles.clear(); - for (Box wall : walls) { - wallHoles.addAll(findAirInBox(wall)); - } - // get direction for the holes - Map lastHoleDirections = new HashMap<>(holeDirections); - holeDirections.clear(); - for (BlockPos hole : wallHoles) { - wallDirections holeDirection = getWholeDirection(hole); - if (holeDirection == wallDirections.UNCHANGED) { - holeDirections.put(hole, lastHoleDirections.get(hole)); - continue; - } - holeDirections.put(hole, holeDirection); - } + return currentBottomWallLocations; } private static List findWalls(List currentBottomWallLocations) { Map> possibleWallsX = new HashMap<>(); Map> possibleWallsZ = new HashMap<>(); - for (BlockPos andesite : currentBottomWallLocations) { + for (BlockPos block : currentBottomWallLocations) { //add to the x walls - int x = andesite.getX(); + int x = block.getX(); if (!possibleWallsX.containsKey(x)) { possibleWallsX.put(x, new ArrayList<>()); } - possibleWallsX.get(x).add(andesite); + possibleWallsX.get(x).add(block); //add to the z walls - int z = andesite.getZ(); + int z = block.getZ(); if (!possibleWallsZ.containsKey(z)) { possibleWallsZ.put(z, new ArrayList<>()); - } - possibleWallsZ.get(z).add(andesite); + possibleWallsZ.get(z).add(block); } //extract only the lines that are long enough to be a wall and not from walls overlapping @@ -188,31 +201,31 @@ public class StaminaTestHelper { return holes; } - private static wallDirections getWholeDirection(BlockPos hole) { + private static holeDirection getWholeDirection(BlockPos hole) { //the value has not changed since last time if (lastHoles.contains(hole)) { - return wallDirections.UNCHANGED; + return holeDirection.UNCHANGED; } //check each direction to work out which way the whole is going BlockPos posX = hole.add(1, 0, 0); if (lastHoles.contains(posX)) { - return wallDirections.POSITIVE_X; + return holeDirection.POSITIVE_X; } BlockPos negX = hole.add(-1, 0, 0); if (lastHoles.contains(negX)) { System.out.println("positiveX"); - return wallDirections.NEGATIVE_X; + return holeDirection.NEGATIVE_X; } BlockPos posZ = hole.add(0, 0, 1); if (lastHoles.contains(posZ)) { - return wallDirections.POSITIVE_Z; + return holeDirection.POSITIVE_Z; } BlockPos negZ = hole.add(0, 0, -1); if (lastHoles.contains(negZ)) { - return wallDirections.NEGATIVE_Z; + return holeDirection.NEGATIVE_Z; } // if pos can not be found mark as new - return wallDirections.NEW; + return holeDirection.NEW; } @@ -222,13 +235,13 @@ public class StaminaTestHelper { } BlockPos playerPos = CLIENT.player.getBlockPos(); for (BlockPos hole : wallHoles) { - float[] color = isHoleIncoming(hole,holeDirections.get(hole),playerPos) ? INCOMING_COLOR : OUTGOING_COLOR; + float[] color = isHoleIncoming(hole, holeDirections.get(hole), playerPos) ? INCOMING_COLOR : OUTGOING_COLOR; RenderHelper.renderFilled(context, hole, color, 0.3f, true); } } - private static boolean isHoleIncoming(BlockPos holePos, wallDirections holeDirection, BlockPos playerPos) { - return switch (holeDirection) { + private static boolean isHoleIncoming(BlockPos holePos, holeDirection holeDirection, BlockPos playerPos) { + return switch (holeDirection) { case POSITIVE_X -> playerPos.getX() < holePos.getX(); case POSITIVE_Z -> playerPos.getZ() < holePos.getZ(); case NEGATIVE_X -> playerPos.getX() > holePos.getX(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index 8e3f2a32..df2c26d5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -24,6 +24,11 @@ public class SwiftnessTestHelper { } } + /** + * Renders a green block around the newest block + * + * @param context render context + */ protected static void render(WorldRenderContext context) { if (lastBlock == null) { return; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index 1ca409d8..861b3453 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -53,11 +53,14 @@ public class TenacityTestHelper { return CLIENT.world.raycast(new RaycastContext(start, end, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.ANY, fireball)); } + /** + * If a spawned entity is an armour stand add it to the fireballs map (assuming all armour stands are fireballs) + * + * @param entity spawned entity + */ protected static void onEntitySpawn(Entity entity) { if (entity instanceof ArmorStandEntity armorStand) { - // they should be holding coal block but are not holding anything idk fireBallsWithStartPos.put(armorStand, armorStand.getPos()); - } } @@ -67,6 +70,11 @@ public class TenacityTestHelper { } } + /** + * Uses the particles spawned with the fireballs to offset from the armour stand position to get a mor accurate guess of where its going + * + * @param packet particle packet + */ protected static void onParticle(ParticleS2CPacket packet) { if (!ParticleTypes.FLAME.equals(packet.getParameters().getType())) { return; -- cgit From f8a95bc502530f14d6edc08855127a67a5f7cf99 Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 24 May 2024 15:11:23 +0100 Subject: fix import --- .../java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index cd0fb0ea..3797004a 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -5,6 +5,7 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import com.llamalad7.mixinextras.sugar.Local; import de.hysky.skyblocker.skyblock.CompactDamage; import de.hysky.skyblocker.skyblock.FishingHelper; +import de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder; import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; import de.hysky.skyblocker.skyblock.dungeon.DungeonScore; import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; -- cgit From f7910f5e7d9efd1f3b55c07db896576c81e51f46 Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 24 May 2024 15:41:07 +0100 Subject: improve control helper re work how the control helper works to give a smother and hopefully more accurate guess of where to aim --- .../skyblock/crimson/dojo/ControlTestHelper.java | 50 +++++++++++++++++++--- .../skyblock/crimson/dojo/DojoManager.java | 7 +-- 2 files changed, 47 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java index cc37ef64..d2b0b8aa 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -12,25 +12,61 @@ import java.awt.*; public class ControlTestHelper { private static WitherSkeletonEntity correctWitherSkeleton; - private static long pingMultiplier; + private static long ping; + private static Vec3d lastTargetPos; + private static Vec3d lastPos; + private static Vec3d aimOffset; protected static void reset() { correctWitherSkeleton = null; - pingMultiplier = 0; + ping = 0; + lastTargetPos = null; + lastPos = null; + aimOffset = null; } + /** + * Find the correct WitherSkeleton entity when it spawns to start tracking it + * + * @param entity spawned entity + */ protected static void onEntitySpawn(Entity entity) { if (entity instanceof WitherSkeletonEntity witherSkeleton && correctWitherSkeleton == null) { correctWitherSkeleton = witherSkeleton; - pingMultiplier = Util.getMeasuringTimeMs() / 100000; + ping = Util.getMeasuringTimeMs(); + aimOffset = new Vec3d(0, 0, 0); } } - protected static void render(WorldRenderContext context) { + /** + * update the aim offset for the wither skeleton based on ping + */ + protected static void update() { if (correctWitherSkeleton != null) { - Vec3d movementVector = correctWitherSkeleton.getPos().subtract(new Vec3d(correctWitherSkeleton.prevX, correctWitherSkeleton.prevY, correctWitherSkeleton.prevZ)); - Vec3d offset = movementVector.multiply(pingMultiplier); - Vec3d aimPos = correctWitherSkeleton.getEyePos().add(offset); + //smoothly adjust the ping throughout the test + ping = (ping + Util.getMeasuringTimeMs()) / 2; + if (lastPos != null) { + lastTargetPos = aimOffset; + double ping = (double) ControlTestHelper.ping / 1000000; + //find distance between last position and current position of skeleton + Vec3d movementVector = correctWitherSkeleton.getPos().subtract(lastPos).multiply(1, 0.1, 1); + //adjust the vector to current ping (20 / 3 is used because that is how many times this is updated a second. Every 3 ticks) + movementVector = movementVector.multiply((double) 20 / 3 * ping); + //smoothly adjust the aim offset based on the new value + aimOffset = (aimOffset.add(movementVector)).multiply(0.5); + } + lastPos = correctWitherSkeleton.getPos(); + } + } + + /** + * Renders a line from the cursor where the player should aim + * + * @param context render context + */ + protected static void render(WorldRenderContext context) { + if (correctWitherSkeleton != null && aimOffset != null && lastTargetPos != null) { + Vec3d aimPos = correctWitherSkeleton.getEyePos().add(aimOffset); RenderHelper.renderLineFromCursor(context, aimPos, Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}), 1, 3); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 8cbfca7b..3de425ec 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -125,9 +125,10 @@ public class DojoManager { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; } - if (currentChallenge == DojoChallenges.STAMINA) { - StaminaTestHelper.update(); - } + switch (currentChallenge) { + case STAMINA -> StaminaTestHelper.update(); + case CONTROL -> ControlTestHelper.update(); + }; } /** -- cgit From 27b242b1d0d40d5b107a09718833400a14395fe1 Mon Sep 17 00:00:00 2001 From: olim Date: Mon, 3 Jun 2024 21:18:55 +0100 Subject: add ping measure and improve mastery mastery now counts down to when to release the bow --- .../hysky/skyblocker/mixins/PingMeasureMixin.java | 23 ++++++++++++++++++++++ .../skyblock/crimson/dojo/DojoManager.java | 16 +++++++++++++++ .../skyblock/crimson/dojo/MasteryTestHelper.java | 16 ++++++++++++--- .../resources/assets/skyblocker/lang/en_us.json | 2 +- src/main/resources/skyblocker.mixins.json | 1 + 5 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java new file mode 100644 index 00000000..0e9c5e13 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java @@ -0,0 +1,23 @@ +package de.hysky.skyblocker.mixins; + +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; +import de.hysky.skyblocker.utils.Location; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.client.network.PingMeasurer; +import net.minecraft.network.packet.s2c.query.PingResultS2CPacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(PingMeasurer.class) +public class PingMeasureMixin { + + @Inject(method = "onPingResult", at = @At("RETURN")) + private void skyblocker$onPingResult(PingResultS2CPacket packet, CallbackInfo ci) { + if (Utils.getLocation() == Location.CRIMSON_ISLE) { + long ping = System.currentTimeMillis() - packet.startTime(); + DojoManager.onPingResult(ping); + } + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 3de425ec..8278f089 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -12,9 +12,11 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.network.ClientPlayNetworkHandler; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket; import net.minecraft.network.packet.s2c.play.ParticleS2CPacket; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; @@ -64,6 +66,7 @@ public class DojoManager { protected static DojoChallenges currentChallenge = DojoChallenges.NONE; public static boolean inArena = false; + protected static long ping = -1; public static void init() { ClientReceiveMessageEvents.GAME.register(DojoManager::onMessage); @@ -98,6 +101,8 @@ public class DojoManager { } if (Objects.equals(Formatting.strip(text.getString()), START_MESSAGE)) { inArena = true; + //update the players ping + getPing(); return; } if (!inArena) { @@ -121,6 +126,16 @@ public class DojoManager { } } + private static void getPing() { + ClientPlayNetworkHandler networkHandler = CLIENT.getNetworkHandler(); + if (networkHandler != null) { + networkHandler.sendPacket(new QueryPingC2SPacket(System.currentTimeMillis())); + } + } + public static void onPingResult(long ping) { + DojoManager.ping = ping; + } + private static void update() { if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { return; @@ -237,4 +252,5 @@ public class DojoManager { case TENACITY -> TenacityTestHelper.render(context); } } + } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 393e8f06..172de7f5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -7,6 +7,7 @@ import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.text.Text; +import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; @@ -16,9 +17,12 @@ import java.util.*; import java.util.List; public class MasteryTestHelper { - + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static final DecimalFormat FORMATTER = new DecimalFormat("0.00"); - private static final int BLOCK_LIFE_TIME = 6850; + /** + * How long it takes for a block to turn red + */ + private static final int BLOCK_LIFE_TIME = 6550; private static final List blockOrder = new ArrayList<>(); private static final Map endTimes = new HashMap<>(); @@ -29,9 +33,15 @@ public class MasteryTestHelper { } protected static void onBlockUpdate(BlockPos pos, BlockState state) { + if (CLIENT == null || CLIENT.player == null) { + return; + } if (state.isOf(Blocks.LIME_WOOL)) { blockOrder.add(pos); - endTimes.put(pos, System.currentTimeMillis() + BLOCK_LIFE_TIME); + //add lifetime of a block to the time to get time when block expires + // work out how long it will take between the player firing and arrow hitting the block and to subtract from time + long travelTime = (long) (CLIENT.player.getPos().distanceTo(pos.toCenterPos()) * (1000 / 60)); //an arrow speed is about 60 blocks a second from a full draw + endTimes.put(pos, System.currentTimeMillis() + BLOCK_LIFE_TIME - DojoManager.ping - travelTime); } if (state.isAir()) { blockOrder.remove(pos); diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index a0a83897..c19a352d 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -872,7 +872,7 @@ "skyblocker.crimson.dojo.staminaHelper": "Enable Stamina Helper", "skyblocker.crimson.dojo.staminaHelper.@Tooltip": "Highlights the holes in the walls turning orange once you have been through a wall.", "skyblocker.crimson.dojo.masteryHelper": "Enable Mastery Helper", - "skyblocker.crimson.dojo.masteryHelper.@Tooltip": "Shows timer for how long a block has left and a path to follow.", + "skyblocker.crimson.dojo.masteryHelper.@Tooltip": "Shows count down to when to relase the bow and a path to follow.", "skyblocker.crimson.dojo.disciplineHelper": "Enable Discipline Helper", "skyblocker.crimson.dojo.disciplineHelper.@Tooltip": "Outlines the zombies to attack with currently held sword.", "skyblocker.crimson.dojo.swiftnessHelper": "Enable Swiftness Helper", diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 25c813cf..f173467d 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -27,6 +27,7 @@ "LivingEntityRendererMixin", "MinecraftClientMixin", "MouseMixin", + "PingMeasureMixin", "PlayerInventoryMixin", "PlayerListHudMixin", "PlayerSkinProviderMixin", -- cgit From e92cd753c695772371cf79636f011834a8518634 Mon Sep 17 00:00:00 2001 From: olim Date: Mon, 3 Jun 2024 22:45:07 +0100 Subject: fix control helper make it actually based off ping and not just how long the games has been open and change the line to a block outline --- .../skyblock/crimson/dojo/ControlTestHelper.java | 46 ++++++++++++---------- .../skyblock/crimson/dojo/StaminaTestHelper.java | 2 +- .../resources/assets/skyblocker/lang/en_us.json | 2 +- 3 files changed, 27 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java index d2b0b8aa..dfc3ae2a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -2,27 +2,29 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; +import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.WitherSkeletonEntity; -import net.minecraft.util.Util; +import net.minecraft.util.math.Box; import net.minecraft.util.math.Vec3d; import java.awt.*; public class ControlTestHelper { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static WitherSkeletonEntity correctWitherSkeleton; - private static long ping; - private static Vec3d lastTargetPos; private static Vec3d lastPos; - private static Vec3d aimOffset; + private static long lastUpdate; + private static Vec3d pingOffset; + private static Vec3d lastPingOffset; protected static void reset() { correctWitherSkeleton = null; - ping = 0; - lastTargetPos = null; lastPos = null; - aimOffset = null; + lastUpdate = -1; + pingOffset = null; + lastPingOffset = null; } /** @@ -33,41 +35,43 @@ public class ControlTestHelper { protected static void onEntitySpawn(Entity entity) { if (entity instanceof WitherSkeletonEntity witherSkeleton && correctWitherSkeleton == null) { correctWitherSkeleton = witherSkeleton; - ping = Util.getMeasuringTimeMs(); - aimOffset = new Vec3d(0, 0, 0); } } /** - * update the aim offset for the wither skeleton based on ping + * Finds where to look in 3 ticks effected by ping */ protected static void update() { if (correctWitherSkeleton != null) { //smoothly adjust the ping throughout the test - ping = (ping + Util.getMeasuringTimeMs()) / 2; if (lastPos != null) { - lastTargetPos = aimOffset; - double ping = (double) ControlTestHelper.ping / 1000000; + lastPingOffset = pingOffset; + double ping = (double) DojoManager.ping / 1000; //find distance between last position and current position of skeleton Vec3d movementVector = correctWitherSkeleton.getPos().subtract(lastPos).multiply(1, 0.1, 1); - //adjust the vector to current ping (20 / 3 is used because that is how many times this is updated a second. Every 3 ticks) - movementVector = movementVector.multiply((double) 20 / 3 * ping); - //smoothly adjust the aim offset based on the new value - aimOffset = (aimOffset.add(movementVector)).multiply(0.5); + //adjust the vector to current ping + pingOffset = movementVector.multiply((double) 23 / 20 + ping); } lastPos = correctWitherSkeleton.getPos(); + lastUpdate = System.currentTimeMillis(); } } /** - * Renders a line from the cursor where the player should aim + * Renders an outline around where the player should aim (assumes values are updated every 3 ticks) * * @param context render context */ protected static void render(WorldRenderContext context) { - if (correctWitherSkeleton != null && aimOffset != null && lastTargetPos != null) { - Vec3d aimPos = correctWitherSkeleton.getEyePos().add(aimOffset); - RenderHelper.renderLineFromCursor(context, aimPos, Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}), 1, 3); + if (CLIENT.player != null && correctWitherSkeleton != null && pingOffset != null && lastPingOffset != null) { + float tickDelta = context.tickDelta(); + //how long until net update + double updatePercent = (double) (System.currentTimeMillis() - lastUpdate) / 150; + Vec3d aimPos = correctWitherSkeleton.getEyePos().add(pingOffset.multiply(updatePercent)).add(lastPingOffset.multiply(1 - updatePercent)); + Box targetBox = new Box(aimPos.add(-0.5, -0.5, -0.5), aimPos.add(0.5, 0.5, 0.5)); + boolean playerLookingAtBox = targetBox.raycast(CLIENT.player.getCameraPosVec(tickDelta),CLIENT.player.getCameraPosVec(tickDelta).add(CLIENT.player.getRotationVec(tickDelta).multiply(30))).isPresent(); + float[] boxColor = playerLookingAtBox ? Color.GREEN.getColorComponents(new float[]{0, 0, 0}) : Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}); + RenderHelper.renderOutline(context, targetBox, boxColor, 3, true); } } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java index 77a202d7..dc9bbb2c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -236,7 +236,7 @@ public class StaminaTestHelper { BlockPos playerPos = CLIENT.player.getBlockPos(); for (BlockPos hole : wallHoles) { float[] color = isHoleIncoming(hole, holeDirections.get(hole), playerPos) ? INCOMING_COLOR : OUTGOING_COLOR; - RenderHelper.renderFilled(context, hole, color, 0.3f, true); + RenderHelper.renderFilled(context, hole, color, 0.3f, false); } } diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index c19a352d..cd8fff39 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -878,7 +878,7 @@ "skyblocker.crimson.dojo.swiftnessHelper": "Enable Swiftness Helper", "skyblocker.crimson.dojo.swiftnessHelper.@Tooltip": "highlights the newest wool block to go to.", "skyblocker.crimson.dojo.controlHelper": "Enable Control Helper", - "skyblocker.crimson.dojo.controlHelper.@Tooltip": "Creates a line from cursor to where to aim (this is not exact and is guessed of ping).", + "skyblocker.crimson.dojo.controlHelper.@Tooltip": "enders an outline around where to aim.", "skyblocker.crimson.dojo.tenacityHelper": "Enable Tenacity Helper", "skyblocker.crimson.dojo.tenacityHelper.@Tooltip": "Shows a path for each fireball and predicted block they are going to hit.", -- cgit From e2e20781622f5b3ca816b32ca2196a95e588e5dc Mon Sep 17 00:00:00 2001 From: olim Date: Mon, 3 Jun 2024 22:53:12 +0100 Subject: smooth text in force heper use smoothed cameraPos for the render possition so it stays in same place reltive to zomibe --- .../java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index e4cff23c..3f39a994 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -75,7 +75,7 @@ public class ForceTestHelper { text = text.formatted(Formatting.RED); } - Vec3d labelPos = zombie.getKey().getEyePos(); + Vec3d labelPos = zombie.getKey().getCameraPosVec(context.tickDelta()); RenderHelper.renderText(context, text, labelPos, 1.5f, true); } } -- cgit From a117b73f74569c0537d287c6064df721447daad8 Mon Sep 17 00:00:00 2001 From: olim Date: Mon, 3 Jun 2024 23:54:57 +0100 Subject: improve stamina helper make it box the whole hole instead of each block inside of it --- .../skyblock/crimson/dojo/StaminaTestHelper.java | 100 +++++++++++++-------- 1 file changed, 61 insertions(+), 39 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java index dc9bbb2c..d32656e8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -5,8 +5,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; +import net.minecraft.util.math.*; import java.util.ArrayList; import java.util.HashMap; @@ -16,12 +15,13 @@ import java.util.Map; public class StaminaTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); private static final int WALL_THRESHOLD_VALUE = 13; + private static final int WALL_HEIGHT = 5; private static final float[] INCOMING_COLOR = new float[]{0f, 1f, 0f, 0f}; private static final float[] OUTGOING_COLOR = new float[]{1f, 0.64f, 0f, 0f}; - private static final List wallHoles = new ArrayList<>(); - private static final List lastHoles = new ArrayList<>(); - private static final Map holeDirections = new HashMap<>(); + private static final List wallHoles = new ArrayList<>(); + private static final List lastHoles = new ArrayList<>(); + private static final Map holeDirections = new HashMap<>(); private static BlockPos middleBase; private enum holeDirection { @@ -56,12 +56,12 @@ public class StaminaTestHelper { lastHoles.addAll(wallHoles); wallHoles.clear(); for (Box wall : walls) { - wallHoles.addAll(findAirInBox(wall)); + wallHoles.addAll(findHolesInBox(wall)); } // get direction for the holes - Map lastHoleDirections = new HashMap<>(holeDirections); + Map lastHoleDirections = new HashMap<>(holeDirections); holeDirections.clear(); - for (BlockPos hole : wallHoles) { + for (Box hole : wallHoles) { holeDirection holeDirection = getWholeDirection(hole); if (holeDirection == StaminaTestHelper.holeDirection.UNCHANGED) { holeDirections.put(hole, lastHoleDirections.get(hole)); @@ -164,7 +164,7 @@ public class StaminaTestHelper { } } //expand wall to top - maxPos = new BlockPos(maxPos.getX(), maxPos.getY() + 5, maxPos.getZ()); + maxPos = new BlockPos(maxPos.getX(), maxPos.getY() + WALL_HEIGHT, maxPos.getZ()); wallBoxes.add(Box.enclosing(minPos, maxPos)); } @@ -172,55 +172,77 @@ public class StaminaTestHelper { return wallBoxes; } - private static List findAirInBox(Box box) { - List air = new ArrayList<>(); + private static List findHolesInBox(Box box) { + List holes = new ArrayList<>(); if (CLIENT == null || CLIENT.player == null || CLIENT.world == null) { - return air; + return holes; } - for (int x = (int) box.minX; x < box.maxX; x++) { - for (int y = (int) box.minY; y < box.maxY; y++) { - for (int z = (int) box.minZ; z < box.maxZ; z++) { + //get the direction vector + Vec3i wallDirection = box.getLengthX() == 1 ? new Vec3i(0, 0, 1) : new Vec3i(1, 0, 0); + //find the corners of boxes (only need 3) + List topLeft = new ArrayList<>(); + List topRight = new ArrayList<>(); + List bottomLeft = new ArrayList<>(); + for (int z = (int) box.minZ; z < box.maxZ; z++) { + for (int x = (int) box.minX; x < box.maxX; x++) { + for (int y = (int) box.minY; y < box.maxY; y++) { BlockPos pos = new BlockPos(x, y, z); BlockState state = CLIENT.world.getBlockState(pos); - if (state.isAir()) { - air.add(pos); + if (!state.isAir()) { + //do not check non-air + continue; + } + boolean top = y == box.maxY - 1|| !CLIENT.world.getBlockState(pos.add(0, 1, 0)).isAir(); + boolean bottom = !CLIENT.world.getBlockState(pos.add(0, -1, 0)).isAir(); + boolean left = !CLIENT.world.getBlockState(pos.add(wallDirection)).isAir(); + boolean right = !CLIENT.world.getBlockState(pos.subtract(wallDirection)).isAir(); + if (top) { + if (left) { + topLeft.add(pos); + } + if (right) { + topRight.add(pos); + } + } + if (bottom && left) { + bottomLeft.add(pos); } + } } } - return air; - } - - private static List combineAir(List airLocations) { - //todo - List holes = new ArrayList<>(); - //check if air is conected to existing whole and if so - for (BlockPos airLocation : airLocations) { - holes.add(Box.enclosing(airLocation, airLocation)); + // gets box around top of hole then expands to the bottom of hole + for (int i = 0; i < topLeft.size(); i++) { + if (topRight.size() <= i || bottomLeft.size() <= i) { + //if corners can not be found end looking + break; + } + Box hole = Box.enclosing(topLeft.get(i), topRight.get(i)); + hole = hole.stretch(0, bottomLeft.get(i).getY() - topLeft.get(i).getY(), 0); + holes.add(hole); } return holes; } - private static holeDirection getWholeDirection(BlockPos hole) { + private static holeDirection getWholeDirection(Box hole) { //the value has not changed since last time if (lastHoles.contains(hole)) { return holeDirection.UNCHANGED; } //check each direction to work out which way the whole is going - BlockPos posX = hole.add(1, 0, 0); + Box posX = hole.offset(1, 0, 0); if (lastHoles.contains(posX)) { return holeDirection.POSITIVE_X; } - BlockPos negX = hole.add(-1, 0, 0); + Box negX = hole.offset(-1, 0, 0); if (lastHoles.contains(negX)) { - System.out.println("positiveX"); return holeDirection.NEGATIVE_X; } - BlockPos posZ = hole.add(0, 0, 1); + Box posZ = hole.offset(0, 0, 1); if (lastHoles.contains(posZ)) { return holeDirection.POSITIVE_Z; } - BlockPos negZ = hole.add(0, 0, -1); + Box negZ = hole.offset(0, 0, -1); if (lastHoles.contains(negZ)) { return holeDirection.NEGATIVE_Z; } @@ -234,18 +256,18 @@ public class StaminaTestHelper { return; } BlockPos playerPos = CLIENT.player.getBlockPos(); - for (BlockPos hole : wallHoles) { + for (Box hole : wallHoles) { float[] color = isHoleIncoming(hole, holeDirections.get(hole), playerPos) ? INCOMING_COLOR : OUTGOING_COLOR; - RenderHelper.renderFilled(context, hole, color, 0.3f, false); + RenderHelper.renderFilled(context, new BlockPos((int) hole.minX, (int) hole.minY, (int) hole.minZ), new Vec3d(hole.getLengthX(), hole.getLengthY(), hole.getLengthZ()), color, 0.3f, false); } } - private static boolean isHoleIncoming(BlockPos holePos, holeDirection holeDirection, BlockPos playerPos) { + private static boolean isHoleIncoming(Box holePos, holeDirection holeDirection, BlockPos playerPos) { return switch (holeDirection) { - case POSITIVE_X -> playerPos.getX() < holePos.getX(); - case POSITIVE_Z -> playerPos.getZ() < holePos.getZ(); - case NEGATIVE_X -> playerPos.getX() > holePos.getX(); - case NEGATIVE_Z -> playerPos.getZ() > holePos.getZ(); + case POSITIVE_X -> playerPos.getX() < holePos.minX; + case POSITIVE_Z -> playerPos.getZ() < holePos.minZ; + case NEGATIVE_X -> playerPos.getX() > holePos.maxX; + case NEGATIVE_Z -> playerPos.getZ() > holePos.maxZ; default -> true; }; -- cgit From 75dbf2677618947320f9421fe9a314e890e7978a Mon Sep 17 00:00:00 2001 From: olim Date: Tue, 4 Jun 2024 12:05:07 +0100 Subject: add isInCrimson function --- .../de/hysky/skyblocker/mixins/ClientWorldMixin.java | 2 +- .../de/hysky/skyblocker/mixins/PingMeasureMixin.java | 2 +- .../skyblock/crimson/dojo/ControlTestHelper.java | 2 +- .../skyblock/crimson/dojo/DojoManager.java | 20 ++++++++++---------- .../skyblock/crimson/dojo/StaminaTestHelper.java | 2 +- .../de/hysky/skyblocker/skyblock/entity/MobGlow.java | 4 ++-- src/main/java/de/hysky/skyblocker/utils/Utils.java | 3 +++ 7 files changed, 19 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java index ff0b1ae6..0e1e6881 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java @@ -17,7 +17,7 @@ public class ClientWorldMixin { @Inject(method = "handleBlockUpdate", at = @At("RETURN")) private void skyblocker$handleBlockUpdate(BlockPos pos, BlockState state, int flags, CallbackInfo ci) { - if (Utils.getLocation() == Location.CRIMSON_ISLE) { + if (Utils.isInCrimson()) { DojoManager.onBlockUpdate(pos.toImmutable(), state); } } diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java index 0e9c5e13..e87b66f2 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java @@ -15,7 +15,7 @@ public class PingMeasureMixin { @Inject(method = "onPingResult", at = @At("RETURN")) private void skyblocker$onPingResult(PingResultS2CPacket packet, CallbackInfo ci) { - if (Utils.getLocation() == Location.CRIMSON_ISLE) { + if (Utils.isInCrimson()) { long ping = System.currentTimeMillis() - packet.startTime(); DojoManager.onPingResult(ping); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java index dfc3ae2a..5092b6fe 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -69,7 +69,7 @@ public class ControlTestHelper { double updatePercent = (double) (System.currentTimeMillis() - lastUpdate) / 150; Vec3d aimPos = correctWitherSkeleton.getEyePos().add(pingOffset.multiply(updatePercent)).add(lastPingOffset.multiply(1 - updatePercent)); Box targetBox = new Box(aimPos.add(-0.5, -0.5, -0.5), aimPos.add(0.5, 0.5, 0.5)); - boolean playerLookingAtBox = targetBox.raycast(CLIENT.player.getCameraPosVec(tickDelta),CLIENT.player.getCameraPosVec(tickDelta).add(CLIENT.player.getRotationVec(tickDelta).multiply(30))).isPresent(); + boolean playerLookingAtBox = targetBox.raycast(CLIENT.player.getCameraPosVec(tickDelta), CLIENT.player.getCameraPosVec(tickDelta).add(CLIENT.player.getRotationVec(tickDelta).multiply(30))).isPresent(); float[] boxColor = playerLookingAtBox ? Color.GREEN.getColorComponents(new float[]{0, 0, 0}) : Color.LIGHT_GRAY.getColorComponents(new float[]{0, 0, 0}); RenderHelper.renderOutline(context, targetBox, boxColor, 3, true); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 8278f089..02b20e08 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -96,7 +96,7 @@ public class DojoManager { * @param overlay is overlay */ private static void onMessage(Text text, Boolean overlay) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || overlay) { + if (!Utils.isInCrimson() || overlay) { return; } if (Objects.equals(Formatting.strip(text.getString()), START_MESSAGE)) { @@ -137,7 +137,7 @@ public class DojoManager { } private static void update() { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return; } switch (currentChallenge) { @@ -153,7 +153,7 @@ public class DojoManager { * @return if the zombie should glow */ public static boolean shouldGlow(String name) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return false; } return switch (currentChallenge) { @@ -169,7 +169,7 @@ public class DojoManager { * @return if the zombie should glow */ public static int getColor() { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return 0xf57738; } return switch (currentChallenge) { @@ -186,7 +186,7 @@ public class DojoManager { * @param state the state of the new block */ public static void onBlockUpdate(BlockPos pos, BlockState state) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return; } switch (currentChallenge) { @@ -196,7 +196,7 @@ public class DojoManager { } private static void onEntitySpawn(Entity entity, ClientWorld clientWorld) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena || CLIENT == null || CLIENT.player == null) { + if (!Utils.isInCrimson() || !inArena || CLIENT == null || CLIENT.player == null) { return; } //check close by @@ -211,7 +211,7 @@ public class DojoManager { } private static void onEntityDespawn(Entity entity, ClientWorld clientWorld) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return; } switch (currentChallenge) { @@ -221,7 +221,7 @@ public class DojoManager { } private static ActionResult onEntityAttacked(PlayerEntity playerEntity, World world, Hand hand, Entity entity, EntityHitResult entityHitResult) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return ActionResult.PASS; } if (currentChallenge == DojoChallenges.FORCE) { @@ -231,7 +231,7 @@ public class DojoManager { } public static void onParticle(ParticleS2CPacket packet) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return; } if (currentChallenge == DojoChallenges.TENACITY) { @@ -240,7 +240,7 @@ public class DojoManager { } private static void render(WorldRenderContext context) { - if (Utils.getLocation() != Location.CRIMSON_ISLE || !inArena) { + if (!Utils.isInCrimson() || !inArena) { return; } switch (currentChallenge) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java index d32656e8..afb53243 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -192,7 +192,7 @@ public class StaminaTestHelper { //do not check non-air continue; } - boolean top = y == box.maxY - 1|| !CLIENT.world.getBlockState(pos.add(0, 1, 0)).isAir(); + boolean top = y == box.maxY - 1 || !CLIENT.world.getBlockState(pos.add(0, 1, 0)).isAir(); boolean bottom = !CLIENT.world.getBlockState(pos.add(0, -1, 0)).isAir(); boolean left = !CLIENT.world.getBlockState(pos.add(wallDirection)).isAir(); boolean right = !CLIENT.world.getBlockState(pos.subtract(wallDirection)).isAir(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index 182fae77..6df7d4d5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -63,7 +63,7 @@ public class MobGlow { case EndermanEntity enderman when Utils.isInTheEnd() && !entity.isInvisible() -> TheEnd.isSpecialZealot(enderman); //dojo - case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE && DojoManager.inArena -> DojoManager.shouldGlow(getArmourStandName(zombie)); + case ZombieEntity zombie when Utils.isInCrimson() && DojoManager.inArena -> DojoManager.shouldGlow(getArmourStandName(zombie)); default -> false; }; @@ -109,7 +109,7 @@ public class MobGlow { case EndermanEntity enderman when TheEnd.isSpecialZealot(enderman) -> Formatting.RED.getColorValue(); case ArmorStandEntity armorStand when isNukekubiHead(armorStand) -> 0x990099; - case ZombieEntity zombie when Utils.getLocation() == Location.CRIMSON_ISLE && DojoManager.inArena -> DojoManager.getColor(); + case ZombieEntity zombie when Utils.isInCrimson() && DojoManager.inArena -> DojoManager.getColor(); default -> 0xf57738; }; diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index f383c94a..8c8cef57 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -120,6 +120,9 @@ public class Utils { public static boolean isInKuudra() { return location == Location.KUUDRAS_HOLLOW; } + public static boolean isInCrimson() { + return location == Location.CRIMSON_ISLE; + } public static boolean isInModernForagingIsland() { return location == Location.MODERN_FORAGING_ISLAND; -- cgit From 095223a1b5e105b670d785ce1b539db087d61bb1 Mon Sep 17 00:00:00 2001 From: olim Date: Tue, 4 Jun 2024 12:10:30 +0100 Subject: clean imports --- .../de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java | 1 - src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java | 1 - src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java | 1 - .../java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java | 2 -- .../de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java | 2 -- .../hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java | 4 ---- src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java | 1 - 7 files changed, 12 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java index 3797004a..7bbbac81 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientPlayNetworkHandlerMixin.java @@ -13,7 +13,6 @@ import de.hysky.skyblocker.skyblock.end.BeaconHighlighter; import de.hysky.skyblocker.skyblock.end.EnderNodes; import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.skyblock.waypoint.MythologicalRitual; -import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.SlayerUtils; import de.hysky.skyblocker.utils.Utils; import net.minecraft.block.Blocks; diff --git a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java index 0e1e6881..6c10e5d2 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ClientWorldMixin.java @@ -2,7 +2,6 @@ package de.hysky.skyblocker.mixins; import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; -import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import net.minecraft.block.BlockState; import net.minecraft.client.world.ClientWorld; diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java index e87b66f2..e82fc86e 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java @@ -1,7 +1,6 @@ package de.hysky.skyblocker.mixins; import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; -import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.network.PingMeasurer; import net.minecraft.network.packet.s2c.query.PingResultS2CPacket; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 02b20e08..1f92c7db 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -1,7 +1,6 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.config.SkyblockerConfigManager; -import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.Scheduler; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents; @@ -28,7 +27,6 @@ import net.minecraft.world.World; import java.util.Arrays; import java.util.Objects; -import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 172de7f5..32b2442a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -5,9 +5,7 @@ import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.text.Text; -import net.minecraft.util.Util; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java index df2c26d5..678005c4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/SwiftnessTestHelper.java @@ -2,13 +2,9 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.client.MinecraftClient; -import net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Box; public class SwiftnessTestHelper { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index 6df7d4d5..152c09a3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -5,7 +5,6 @@ import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; import de.hysky.skyblocker.skyblock.dungeon.LividColor; import de.hysky.skyblocker.skyblock.end.TheEnd; import de.hysky.skyblocker.utils.ItemUtils; -import de.hysky.skyblocker.utils.Location; import de.hysky.skyblocker.utils.SlayerUtils; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.render.culling.OcclusionCulling; -- cgit From c4054046603884526c3e0769c5bfe7cf56e08b35 Mon Sep 17 00:00:00 2001 From: olim Date: Sun, 16 Jun 2024 19:13:00 +0100 Subject: implement requested changes use fast-utils for the hash-maps. (first time using it not 100% sure its done right) --- .../crimson/dojo/DisciplineTestHelper.java | 18 +++++++----- .../skyblock/crimson/dojo/ForceTestHelper.java | 10 ++++--- .../skyblock/crimson/dojo/MasteryTestHelper.java | 9 ++++-- .../skyblock/crimson/dojo/StaminaTestHelper.java | 33 ++++++++++++---------- .../skyblock/crimson/dojo/TenacityTestHelper.java | 5 ++-- 5 files changed, 44 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 5c7e8c5a..641b8728 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -1,10 +1,14 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntMaps; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.client.MinecraftClient; import net.minecraft.util.Util; import java.util.HashMap; +import java.util.Map; public class DisciplineTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); @@ -22,12 +26,12 @@ public class DisciplineTestHelper { /** * Stores a color related to the color of the sword: wood = brown, iron = silver, gold = gold, diamond = cyan */ - private static final HashMap SWORD_TO_COLOR_LOOKUP = Util.make(new HashMap<>(), map -> { - map.put("WOOD_SWORD", 0xa52a2a); - map.put("IRON_SWORD", 0xc0c0c0); - map.put("GOLD_SWORD", 0xffd700); - map.put("DIAMOND_SWORD", 0x00ffff); - }); + private static final Object2IntMap SWORD_TO_COLOR_LOOKUP = Object2IntMaps.unmodifiable(new Object2IntOpenHashMap<>(Map.of( + "WOOD_SWORD", 0xa52a2a, + "IRON_SWORD", 0xc0c0c0, + "GOLD_SWORD", 0xffd700, + "DIAMOND_SWORD", 0x00ffff + ))); /** * Works out if a zombie should glow based on its name and the currently held item by the player @@ -58,7 +62,7 @@ public class DisciplineTestHelper { } String heldId = ItemTooltip.getInternalNameFromNBT(CLIENT.player.getMainHandStack(), true); if (SWORD_TO_COLOR_LOOKUP.containsKey(heldId)) { - return SWORD_TO_COLOR_LOOKUP.get(heldId); + return SWORD_TO_COLOR_LOOKUP.getInt(heldId); } return 0; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index 3f39a994..8ffb4bd2 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -1,6 +1,9 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; +import it.unimi.dsi.fastutil.objects.Object2LongMap; +import it.unimi.dsi.fastutil.objects.Object2LongMaps; +import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.entity.Entity; import net.minecraft.entity.mob.ZombieEntity; @@ -11,7 +14,6 @@ import net.minecraft.util.math.Vec3d; import java.awt.*; import java.text.DecimalFormat; -import java.util.HashMap; import java.util.Map; public class ForceTestHelper { @@ -19,7 +21,7 @@ public class ForceTestHelper { private static final DecimalFormat FORMATTER = new DecimalFormat("0.0"); private static final int ZOMBIE_LIFE_TIME = 10100; - private static final Map zombies = new HashMap<>(); + private static final Object2LongOpenHashMap zombies = new Object2LongOpenHashMap<>(); protected static void reset() { zombies.clear(); @@ -56,14 +58,14 @@ public class ForceTestHelper { protected static void onEntityDespawn(Entity entity) { if (entity instanceof ZombieEntity zombie) { - zombies.remove(zombie); + zombies.removeLong(zombie); } } protected static void render(WorldRenderContext context) { //render times long currentTime = System.currentTimeMillis(); - for (Map.Entry zombie : zombies.entrySet()) { + for (Map.Entry zombie : zombies.object2LongEntrySet()) { float secondsTime = Math.max((zombie.getValue() - currentTime) / 1000f, 0); MutableText text = Text.literal(FORMATTER.format(secondsTime)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index 32b2442a..d40c89c3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -1,6 +1,9 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; +import it.unimi.dsi.fastutil.objects.Object2LongMap; +import it.unimi.dsi.fastutil.objects.Object2LongMaps; +import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -23,7 +26,7 @@ public class MasteryTestHelper { private static final int BLOCK_LIFE_TIME = 6550; private static final List blockOrder = new ArrayList<>(); - private static final Map endTimes = new HashMap<>(); + private static final Object2LongOpenHashMap endTimes = new Object2LongOpenHashMap<>(); protected static void reset() { blockOrder.clear(); @@ -43,7 +46,7 @@ public class MasteryTestHelper { } if (state.isAir()) { blockOrder.remove(pos); - endTimes.remove(pos); + endTimes.removeLong(pos); } } @@ -59,7 +62,7 @@ public class MasteryTestHelper { //render times long currentTime = System.currentTimeMillis(); for (BlockPos pos : blockOrder) { - long blockEndTime = endTimes.get(pos); + long blockEndTime = endTimes.getLong(pos); float secondsTime = Math.max((blockEndTime - currentTime) / 1000f, 0); RenderHelper.renderText(context, Text.literal(FORMATTER.format(secondsTime)), pos.add(0, 1, 0).toCenterPos(), 3, true); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java index afb53243..d8b17cd4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -1,6 +1,9 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -21,10 +24,10 @@ public class StaminaTestHelper { private static final List wallHoles = new ArrayList<>(); private static final List lastHoles = new ArrayList<>(); - private static final Map holeDirections = new HashMap<>(); + private static final Map holeDirections = new HashMap<>(); private static BlockPos middleBase; - private enum holeDirection { + private enum HoleDirection { POSITIVE_X, POSITIVE_Z, NEGATIVE_X, @@ -59,11 +62,11 @@ public class StaminaTestHelper { wallHoles.addAll(findHolesInBox(wall)); } // get direction for the holes - Map lastHoleDirections = new HashMap<>(holeDirections); + Map lastHoleDirections = new HashMap<>(holeDirections); holeDirections.clear(); for (Box hole : wallHoles) { - holeDirection holeDirection = getWholeDirection(hole); - if (holeDirection == StaminaTestHelper.holeDirection.UNCHANGED) { + HoleDirection holeDirection = getWholeDirection(hole); + if (holeDirection == HoleDirection.UNCHANGED) { holeDirections.put(hole, lastHoleDirections.get(hole)); continue; } @@ -112,8 +115,8 @@ public class StaminaTestHelper { } private static List findWalls(List currentBottomWallLocations) { - Map> possibleWallsX = new HashMap<>(); - Map> possibleWallsZ = new HashMap<>(); + Int2ObjectOpenHashMap> possibleWallsX = new Int2ObjectOpenHashMap<>(); + Int2ObjectOpenHashMap> possibleWallsZ = new Int2ObjectOpenHashMap<>(); for (BlockPos block : currentBottomWallLocations) { //add to the x walls int x = block.getX(); @@ -224,30 +227,30 @@ public class StaminaTestHelper { return holes; } - private static holeDirection getWholeDirection(Box hole) { + private static HoleDirection getWholeDirection(Box hole) { //the value has not changed since last time if (lastHoles.contains(hole)) { - return holeDirection.UNCHANGED; + return HoleDirection.UNCHANGED; } //check each direction to work out which way the whole is going Box posX = hole.offset(1, 0, 0); if (lastHoles.contains(posX)) { - return holeDirection.POSITIVE_X; + return HoleDirection.POSITIVE_X; } Box negX = hole.offset(-1, 0, 0); if (lastHoles.contains(negX)) { - return holeDirection.NEGATIVE_X; + return HoleDirection.NEGATIVE_X; } Box posZ = hole.offset(0, 0, 1); if (lastHoles.contains(posZ)) { - return holeDirection.POSITIVE_Z; + return HoleDirection.POSITIVE_Z; } Box negZ = hole.offset(0, 0, -1); if (lastHoles.contains(negZ)) { - return holeDirection.NEGATIVE_Z; + return HoleDirection.NEGATIVE_Z; } // if pos can not be found mark as new - return holeDirection.NEW; + return HoleDirection.NEW; } @@ -262,7 +265,7 @@ public class StaminaTestHelper { } } - private static boolean isHoleIncoming(Box holePos, holeDirection holeDirection, BlockPos playerPos) { + private static boolean isHoleIncoming(Box holePos, HoleDirection holeDirection, BlockPos playerPos) { return switch (holeDirection) { case POSITIVE_X -> playerPos.getX() < holePos.minX; case POSITIVE_Z -> playerPos.getZ() < holePos.minZ; diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index 861b3453..71c49d76 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -1,6 +1,7 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.Entity; @@ -17,8 +18,8 @@ import java.util.*; public class TenacityTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); - private static final Map fireBallsWithStartPos = new HashMap<>(); - private static final Map particleOffsets = new HashMap<>(); + private static final Object2ObjectOpenHashMap fireBallsWithStartPos = new Object2ObjectOpenHashMap<>(); + private static final Object2ObjectOpenHashMap particleOffsets = new Object2ObjectOpenHashMap<>(); protected static void reset() { fireBallsWithStartPos.clear(); -- cgit From 90c524a75d76ead6fb081413abee713e632a7081 Mon Sep 17 00:00:00 2001 From: olim Date: Sun, 16 Jun 2024 19:25:13 +0100 Subject: fix conflicts with tool-tip refactor --- .../hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 641b8728..5cee126f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -43,7 +43,7 @@ public class DisciplineTestHelper { if (CLIENT == null || CLIENT.player == null) { return false; } - String heldId = ItemTooltip.getInternalNameFromNBT(CLIENT.player.getMainHandStack(), true); + String heldId = CLIENT.player.getMainHandStack().getSkyblockId(); if (SWORD_TO_NAME_LOOKUP.containsKey(heldId)) { return SWORD_TO_NAME_LOOKUP.get(heldId).equals(name); @@ -60,7 +60,7 @@ public class DisciplineTestHelper { if (DojoManager.currentChallenge != DojoManager.DojoChallenges.DISCIPLINE || CLIENT == null || CLIENT.player == null) { return 0; } - String heldId = ItemTooltip.getInternalNameFromNBT(CLIENT.player.getMainHandStack(), true); + String heldId = CLIENT.player.getMainHandStack().getSkyblockId(); if (SWORD_TO_COLOR_LOOKUP.containsKey(heldId)) { return SWORD_TO_COLOR_LOOKUP.getInt(heldId); } -- cgit From 411d655b8b29452671a9f211ca1daa31795b1bbe Mon Sep 17 00:00:00 2001 From: olim Date: Wed, 19 Jun 2024 12:44:56 +0100 Subject: update to 1.21 --- .../de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java | 2 +- .../java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java index 5092b6fe..740949c8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -64,7 +64,7 @@ public class ControlTestHelper { */ protected static void render(WorldRenderContext context) { if (CLIENT.player != null && correctWitherSkeleton != null && pingOffset != null && lastPingOffset != null) { - float tickDelta = context.tickDelta(); + float tickDelta = context.tickCounter().getTickDelta(false); //how long until net update double updatePercent = (double) (System.currentTimeMillis() - lastUpdate) / 150; Vec3d aimPos = correctWitherSkeleton.getEyePos().add(pingOffset.multiply(updatePercent)).add(lastPingOffset.multiply(1 - updatePercent)); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index 8ffb4bd2..664e25d5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -77,7 +77,7 @@ public class ForceTestHelper { text = text.formatted(Formatting.RED); } - Vec3d labelPos = zombie.getKey().getCameraPosVec(context.tickDelta()); + Vec3d labelPos = zombie.getKey().getCameraPosVec(context.tickCounter().getTickDelta(false)); RenderHelper.renderText(context, text, labelPos, 1.5f, true); } } -- cgit From 981fe6a917dc966b980b5571d0653986242d84dc Mon Sep 17 00:00:00 2001 From: olim Date: Sun, 23 Jun 2024 17:37:49 +0100 Subject: fix bad use of ping packet --- .../skyblocker/mixins/PingMeasuererMixin.java | 22 ++++++++++++++++++++++ .../hysky/skyblocker/mixins/PingMeasureMixin.java | 22 ---------------------- .../skyblock/crimson/dojo/DojoManager.java | 3 ++- src/main/resources/skyblocker.mixins.json | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java delete mode 100644 src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java new file mode 100644 index 00000000..21ed613f --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java @@ -0,0 +1,22 @@ +package de.hysky.skyblocker.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.client.network.PingMeasurer; +import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(PingMeasurer.class) +public class PingMeasuererMixin { + + @WrapOperation(method = "onPingResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;push(J)V")) + private void skyblocker$onPingResult(MultiValueDebugSampleLogImpl log, long ping, Operation operation) { + if (Utils.isInCrimson()) { + DojoManager.onPingResult(ping); + } + operation.call(new Object[]{log, ping}); + } +} diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java deleted file mode 100644 index e82fc86e..00000000 --- a/src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.hysky.skyblocker.mixins; - -import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; -import de.hysky.skyblocker.utils.Utils; -import net.minecraft.client.network.PingMeasurer; -import net.minecraft.network.packet.s2c.query.PingResultS2CPacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(PingMeasurer.class) -public class PingMeasureMixin { - - @Inject(method = "onPingResult", at = @At("RETURN")) - private void skyblocker$onPingResult(PingResultS2CPacket packet, CallbackInfo ci) { - if (Utils.isInCrimson()) { - long ping = System.currentTimeMillis() - packet.startTime(); - DojoManager.onPingResult(ping); - } - } -} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index 1f92c7db..f431275d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -21,6 +21,7 @@ import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Formatting; import net.minecraft.util.Hand; +import net.minecraft.util.Util; import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -127,7 +128,7 @@ public class DojoManager { private static void getPing() { ClientPlayNetworkHandler networkHandler = CLIENT.getNetworkHandler(); if (networkHandler != null) { - networkHandler.sendPacket(new QueryPingC2SPacket(System.currentTimeMillis())); + networkHandler.sendPacket(new QueryPingC2SPacket(Util.getMeasuringTimeMs())); } } public static void onPingResult(long ping) { diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index f173467d..81dcfc03 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -27,7 +27,7 @@ "LivingEntityRendererMixin", "MinecraftClientMixin", "MouseMixin", - "PingMeasureMixin", + "PingMeasuererMixin", "PlayerInventoryMixin", "PlayerListHudMixin", "PlayerSkinProviderMixin", -- cgit From d46931476b1157f9e868692087c2ac808eb8d9a0 Mon Sep 17 00:00:00 2001 From: olim Date: Thu, 27 Jun 2024 12:26:10 +0100 Subject: Fix glow colors for some reason the mob glow colour is now BGR --- .../skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java | 6 +++--- .../de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 5cee126f..34d5d2b4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -27,10 +27,10 @@ public class DisciplineTestHelper { * Stores a color related to the color of the sword: wood = brown, iron = silver, gold = gold, diamond = cyan */ private static final Object2IntMap SWORD_TO_COLOR_LOOKUP = Object2IntMaps.unmodifiable(new Object2IntOpenHashMap<>(Map.of( - "WOOD_SWORD", 0xa52a2a, + "WOOD_SWORD", 0x2a2aa5, "IRON_SWORD", 0xc0c0c0, - "GOLD_SWORD", 0xffd700, - "DIAMOND_SWORD", 0x00ffff + "GOLD_SWORD", 0x00d7ff, + "DIAMOND_SWORD", 0xffff00 ))); /** diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index 664e25d5..585bed93 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -39,7 +39,7 @@ public class ForceTestHelper { } protected static int getColor() { - return Color.RED.getRGB(); + return 0x0000ff; } protected static void onEntitySpawn(Entity entity) { -- cgit From e79a685e7f4143592ef61a7193eef82d962b343d Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 28 Jun 2024 10:03:03 +0100 Subject: Revert "Fix glow colors" This reverts commit 6ba6c22dadcf412e79c88a28841a340fdb64f51b. --- .../skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java | 6 +++--- .../de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 34d5d2b4..5cee126f 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -27,10 +27,10 @@ public class DisciplineTestHelper { * Stores a color related to the color of the sword: wood = brown, iron = silver, gold = gold, diamond = cyan */ private static final Object2IntMap SWORD_TO_COLOR_LOOKUP = Object2IntMaps.unmodifiable(new Object2IntOpenHashMap<>(Map.of( - "WOOD_SWORD", 0x2a2aa5, + "WOOD_SWORD", 0xa52a2a, "IRON_SWORD", 0xc0c0c0, - "GOLD_SWORD", 0x00d7ff, - "DIAMOND_SWORD", 0xffff00 + "GOLD_SWORD", 0xffd700, + "DIAMOND_SWORD", 0x00ffff ))); /** diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index 585bed93..664e25d5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -39,7 +39,7 @@ public class ForceTestHelper { } protected static int getColor() { - return 0x0000ff; + return Color.RED.getRGB(); } protected static void onEntitySpawn(Entity entity) { -- cgit From 8f39b03cd3ff309e82660dd1c997e44ba6c5513c Mon Sep 17 00:00:00 2001 From: olim Date: Fri, 28 Jun 2024 10:33:53 +0100 Subject: clean ping code --- src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java | 2 +- .../hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java index 21ed613f..803a65ab 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java @@ -17,6 +17,6 @@ public class PingMeasuererMixin { if (Utils.isInCrimson()) { DojoManager.onPingResult(ping); } - operation.call(new Object[]{log, ping}); + operation.call(log, ping); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java index 740949c8..2f616a1e 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ControlTestHelper.java @@ -46,11 +46,11 @@ public class ControlTestHelper { //smoothly adjust the ping throughout the test if (lastPos != null) { lastPingOffset = pingOffset; - double ping = (double) DojoManager.ping / 1000; + double ping = DojoManager.ping / 1000d; //find distance between last position and current position of skeleton Vec3d movementVector = correctWitherSkeleton.getPos().subtract(lastPos).multiply(1, 0.1, 1); - //adjust the vector to current ping - pingOffset = movementVector.multiply((double) 23 / 20 + ping); + //adjust the vector to current ping (multiply by 1 + time in second until the next update offset by the players ping) + pingOffset = movementVector.multiply(1 + 3 / 20d + ping); } lastPos = correctWitherSkeleton.getPos(); lastUpdate = System.currentTimeMillis(); -- cgit From 6925e532474c393223023690d708ebe7e5e6bab0 Mon Sep 17 00:00:00 2001 From: olim Date: Mon, 1 Jul 2024 14:27:37 +0100 Subject: fix conflict hopefully --- src/main/java/de/hysky/skyblocker/utils/Utils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index 8c8cef57..ad0643f2 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -95,7 +95,7 @@ public class Utils { } public static boolean isInDungeons() { - return location == Location.DUNGEON ; // || FabricLoader.getInstance().isDevelopmentEnvironment() + return location == Location.DUNGEON; } public static boolean isInCrystalHollows() { -- cgit From 6863c696e9ce34854aabdf0a4e2883e7ea8be0a8 Mon Sep 17 00:00:00 2001 From: olim Date: Wed, 3 Jul 2024 17:45:35 +0100 Subject: clean code and implement requested changes --- .../skyblocker/mixins/PingMeasuererMixin.java | 22 ---------------------- .../hysky/skyblocker/mixins/PingMeasurerMixin.java | 22 ++++++++++++++++++++++ .../crimson/dojo/DisciplineTestHelper.java | 22 +++++++--------------- .../skyblock/crimson/dojo/DojoManager.java | 9 +++++---- .../skyblock/crimson/dojo/ForceTestHelper.java | 3 --- .../skyblock/crimson/dojo/MasteryTestHelper.java | 6 ++---- .../skyblock/crimson/dojo/StaminaTestHelper.java | 9 +++++---- .../skyblock/crimson/dojo/TenacityTestHelper.java | 4 +--- .../hysky/skyblocker/skyblock/entity/MobGlow.java | 14 +++++++++++--- src/main/resources/skyblocker.mixins.json | 2 +- 10 files changed, 54 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java create mode 100644 src/main/java/de/hysky/skyblocker/mixins/PingMeasurerMixin.java (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java deleted file mode 100644 index 803a65ab..00000000 --- a/src/main/java/de/hysky/skyblocker/mixins/PingMeasuererMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package de.hysky.skyblocker.mixins; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; -import de.hysky.skyblocker.utils.Utils; -import net.minecraft.client.network.PingMeasurer; -import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(PingMeasurer.class) -public class PingMeasuererMixin { - - @WrapOperation(method = "onPingResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;push(J)V")) - private void skyblocker$onPingResult(MultiValueDebugSampleLogImpl log, long ping, Operation operation) { - if (Utils.isInCrimson()) { - DojoManager.onPingResult(ping); - } - operation.call(log, ping); - } -} diff --git a/src/main/java/de/hysky/skyblocker/mixins/PingMeasurerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/PingMeasurerMixin.java new file mode 100644 index 00000000..a9fae752 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/PingMeasurerMixin.java @@ -0,0 +1,22 @@ +package de.hysky.skyblocker.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; +import de.hysky.skyblocker.utils.Utils; +import net.minecraft.client.network.PingMeasurer; +import net.minecraft.util.profiler.MultiValueDebugSampleLogImpl; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(PingMeasurer.class) +public class PingMeasurerMixin { + + @WrapOperation(method = "onPingResult", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/MultiValueDebugSampleLogImpl;push(J)V")) + private void skyblocker$onPingResult(MultiValueDebugSampleLogImpl log, long ping, Operation operation) { + if (Utils.isInCrimson()) { + DojoManager.onPingResult(ping); + } + operation.call(log, ping); + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index 5cee126f..c01bfd73 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -1,13 +1,10 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; -import de.hysky.skyblocker.skyblock.item.tooltip.ItemTooltip; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntMaps; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.client.MinecraftClient; -import net.minecraft.util.Util; -import java.util.HashMap; import java.util.Map; public class DisciplineTestHelper { @@ -16,12 +13,12 @@ public class DisciplineTestHelper { /** * Stores what sword is needed for the name of a zombie */ - private static final HashMap SWORD_TO_NAME_LOOKUP = Util.make(new HashMap<>(), map -> { - map.put("WOOD_SWORD", "Wood"); - map.put("IRON_SWORD", "Iron"); - map.put("GOLD_SWORD", "Gold"); - map.put("DIAMOND_SWORD", "Diamond"); - }); + private static final Map SWORD_TO_NAME_LOOKUP = Map.of( + "WOOD_SWORD", "Wood", + "IRON_SWORD", "Iron", + "GOLD_SWORD", "Gold", + "DIAMOND_SWORD", "Diamond" + ); /** * Stores a color related to the color of the sword: wood = brown, iron = silver, gold = gold, diamond = cyan @@ -61,11 +58,6 @@ public class DisciplineTestHelper { return 0; } String heldId = CLIENT.player.getMainHandStack().getSkyblockId(); - if (SWORD_TO_COLOR_LOOKUP.containsKey(heldId)) { - return SWORD_TO_COLOR_LOOKUP.getInt(heldId); - } - return 0; + return SWORD_TO_COLOR_LOOKUP.getOrDefault(heldId, 0); } - - } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java index f431275d..323c985c 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java @@ -131,6 +131,7 @@ public class DojoManager { networkHandler.sendPacket(new QueryPingC2SPacket(Util.getMeasuringTimeMs())); } } + public static void onPingResult(long ping) { DojoManager.ping = ping; } @@ -139,10 +140,10 @@ public class DojoManager { if (!Utils.isInCrimson() || !inArena) { return; } - switch (currentChallenge) { + switch (currentChallenge) { case STAMINA -> StaminaTestHelper.update(); case CONTROL -> ControlTestHelper.update(); - }; + } } /** @@ -198,8 +199,8 @@ public class DojoManager { if (!Utils.isInCrimson() || !inArena || CLIENT == null || CLIENT.player == null) { return; } - //check close by - if (entity.distanceTo(CLIENT.player) > 50 || Math.abs(entity.getBlockY() - CLIENT.player.getBlockY()) > 5) { + // Check if within 50 blocks and 5 blocks vertically + if (entity.squaredDistanceTo(CLIENT.player) > 2500 || Math.abs(entity.getBlockY() - CLIENT.player.getBlockY()) > 5) { return; } switch (currentChallenge) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java index 664e25d5..70d6a401 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/ForceTestHelper.java @@ -1,8 +1,6 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; -import it.unimi.dsi.fastutil.objects.Object2LongMap; -import it.unimi.dsi.fastutil.objects.Object2LongMaps; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.entity.Entity; @@ -34,7 +32,6 @@ public class ForceTestHelper { * @return if the zombie should glow */ protected static boolean shouldGlow(String name) { - if (name == null) return false; return name.contains("-"); } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java index d40c89c3..625b91eb 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java @@ -1,8 +1,6 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; -import it.unimi.dsi.fastutil.objects.Object2LongMap; -import it.unimi.dsi.fastutil.objects.Object2LongMaps; import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.block.BlockState; @@ -14,7 +12,7 @@ import net.minecraft.util.math.Vec3d; import java.awt.*; import java.text.DecimalFormat; -import java.util.*; +import java.util.ArrayList; import java.util.List; public class MasteryTestHelper { @@ -41,7 +39,7 @@ public class MasteryTestHelper { blockOrder.add(pos); //add lifetime of a block to the time to get time when block expires // work out how long it will take between the player firing and arrow hitting the block and to subtract from time - long travelTime = (long) (CLIENT.player.getPos().distanceTo(pos.toCenterPos()) * (1000 / 60)); //an arrow speed is about 60 blocks a second from a full draw + long travelTime = (long) (CLIENT.player.getPos().distanceTo(pos.toCenterPos()) * 1000 / 60); //an arrow speed is about 60 blocks a second from a full draw endTimes.put(pos, System.currentTimeMillis() + BLOCK_LIFE_TIME - DojoManager.ping - travelTime); } if (state.isAir()) { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java index d8b17cd4..3f7dfe56 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/StaminaTestHelper.java @@ -1,14 +1,15 @@ package de.hysky.skyblocker.skyblock.crimson.dojo; import de.hysky.skyblocker.utils.render.RenderHelper; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; -import net.minecraft.util.math.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Box; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.Vec3i; import java.util.ArrayList; import java.util.HashMap; @@ -33,7 +34,7 @@ public class StaminaTestHelper { NEGATIVE_X, NEGATIVE_Z, NEW, - UNCHANGED; + UNCHANGED } protected static void reset() { diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java index 71c49d76..51e99fbd 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java @@ -13,8 +13,6 @@ import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.RaycastContext; -import java.util.*; - public class TenacityTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); @@ -72,7 +70,7 @@ public class TenacityTestHelper { } /** - * Uses the particles spawned with the fireballs to offset from the armour stand position to get a mor accurate guess of where its going + * Uses the particles spawned with the fireballs to offset from the armour stand position to get a more accurate guess of where it's going * * @param packet particle packet */ diff --git a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java index 152c09a3..81e328ca 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/entity/MobGlow.java @@ -62,7 +62,7 @@ public class MobGlow { case EndermanEntity enderman when Utils.isInTheEnd() && !entity.isInvisible() -> TheEnd.isSpecialZealot(enderman); //dojo - case ZombieEntity zombie when Utils.isInCrimson() && DojoManager.inArena -> DojoManager.shouldGlow(getArmourStandName(zombie)); + case ZombieEntity zombie when Utils.isInCrimson() && DojoManager.inArena -> DojoManager.shouldGlow(getArmorStandName(zombie)); default -> false; }; @@ -73,6 +73,7 @@ public class MobGlow { /** * Checks if an entity is starred by checking if its armor stand contains a star in its name. + * * @param entity the entity to check. * @return true if the entity is starred, false otherwise */ @@ -80,10 +81,17 @@ public class MobGlow { List armorStands = getArmorStands(entity); return !armorStands.isEmpty() && armorStands.getFirst().getName().getString().contains("✯"); } - public static String getArmourStandName(Entity entity) { + + /** + * Returns name of entity by finding closed armor stand and getting name of that + * + * @param entity the entity to check + * @return the name string of the entities label + */ + public static String getArmorStandName(Entity entity) { List armorStands = getArmorStands(entity); if (armorStands.isEmpty()) { - return null; + return ""; } return armorStands.getFirst().getName().getString(); } diff --git a/src/main/resources/skyblocker.mixins.json b/src/main/resources/skyblocker.mixins.json index 81dcfc03..fa23abb7 100644 --- a/src/main/resources/skyblocker.mixins.json +++ b/src/main/resources/skyblocker.mixins.json @@ -27,7 +27,7 @@ "LivingEntityRendererMixin", "MinecraftClientMixin", "MouseMixin", - "PingMeasuererMixin", + "PingMeasurerMixin", "PlayerInventoryMixin", "PlayerListHudMixin", "PlayerSkinProviderMixin", -- cgit From 4f2c5699c278f5f7a9b29aebbab4052f2b9c59e5 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:57:35 +0800 Subject: Fix DisciplineTestHelper heldId NPE --- .../skyblock/crimson/dojo/DisciplineTestHelper.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java index c01bfd73..ab0a0781 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DisciplineTestHelper.java @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.minecraft.client.MinecraftClient; import java.util.Map; +import java.util.Objects; public class DisciplineTestHelper { private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); @@ -41,11 +42,10 @@ public class DisciplineTestHelper { return false; } String heldId = CLIENT.player.getMainHandStack().getSkyblockId(); - if (SWORD_TO_NAME_LOOKUP.containsKey(heldId)) { - - return SWORD_TO_NAME_LOOKUP.get(heldId).equals(name); + if (heldId == null) { + return false; } - return false; + return Objects.equals(SWORD_TO_NAME_LOOKUP.get(heldId), name); } /** @@ -58,6 +58,9 @@ public class DisciplineTestHelper { return 0; } String heldId = CLIENT.player.getMainHandStack().getSkyblockId(); + if (heldId == null) { + return 0; + } return SWORD_TO_COLOR_LOOKUP.getOrDefault(heldId, 0); } } -- cgit