diff options
author | olim <bobq4582@gmail.com> | 2024-04-30 21:12:40 +0100 |
---|---|---|
committer | olim <bobq4582@gmail.com> | 2024-07-01 14:26:13 +0100 |
commit | 472af1f8dd2ece6a4cc9ba81534f973780978394 (patch) | |
tree | 96d5ea95fa41640ddc727d1c2600f833bf2bc68a /src/main | |
parent | b2dff8d0f292b819138a2bb118f318063568e3fe (diff) | |
download | Skyblocker-472af1f8dd2ece6a4cc9ba81534f973780978394.tar.gz Skyblocker-472af1f8dd2ece6a4cc9ba81534f973780978394.tar.bz2 Skyblocker-472af1f8dd2ece6a4cc9ba81534f973780978394.zip |
add tenacity helper
added helper for tenacity however there seems to be randomness so can not highlight block its going to hit
Diffstat (limited to 'src/main')
3 files changed, 84 insertions, 13 deletions
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<BlockPos> blockOrder = new ArrayList<>(); - private static Map<BlockPos, Long> endTimes =new HashMap<>(); + private static final List<BlockPos> blockOrder = new ArrayList<>(); + private static final Map<BlockPos, Long> 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<ArmorStandEntity, List<Vec3d>> 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<Vec3d> 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<Vec3d> 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); + } + } |