aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java30
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/TenacityTestHelper.java58
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);
+ }
+
}