aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/PingMeasureMixin.java23
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/DojoManager.java16
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/crimson/dojo/MasteryTestHelper.java16
3 files changed, 52 insertions, 3 deletions
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<BlockPos> blockOrder = new ArrayList<>();
private static final Map<BlockPos, Long> 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);