Skip to content

Commit dac5311

Browse files
committed
Merge branch 'beta' into 1.21.10
2 parents 63a9cac + b87cf64 commit dac5311

3 files changed

Lines changed: 49 additions & 1 deletion

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ minecraft_version=1.21.10
77
loader_version=0.18.1
88

99
# Mod Properties
10-
mod_version=0.2.1
10+
mod_version=0.2.2
1111
maven_group=org.blackum
1212
archives_base_name=BlackAddons
1313

src/main/java/org/blackum/blackaddons/core/util/AlignUtils.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
public class AlignUtils {
2020
private static final double ALIGN_EPSILON = 1.0E-4D;
2121
private static final long DEBUG_SAMPLE_DELAY_MS = 500L;
22+
private static final int SNAP_MOVEMENT_LOCK_TICKS = 2;
2223
private static final int COLOR_WHITE = 0xFFFFFFFF;
2324
private static final int LINE_HEIGHT = 10;
2425
private static final int DEBUG_STEP_COUNT = 2;
@@ -39,6 +40,9 @@ public class AlignUtils {
3940
private static int alignState = 0;
4041
private static float yaw1 = 0;
4142
private static float yaw2 = 0;
43+
private static int movementLockTicks = 0;
44+
private static boolean forcedForward = false;
45+
private static boolean forcedSneak = false;
4246

4347
private static boolean debugExpectedAvailable;
4448
private static double debugExpectedX;
@@ -109,6 +113,10 @@ public static void tick() {
109113
Minecraft mc = Minecraft.getInstance();
110114
updateDebugMeasurement(mc);
111115

116+
if (movementLockTicks > 0) {
117+
movementLockTicks--;
118+
}
119+
112120
if (!active) {
113121
return;
114122
}
@@ -190,22 +198,38 @@ public static void tick() {
190198
private static void applyMovement(Minecraft mc, LocalPlayer player, float targetYaw, boolean sneak) {
191199
capturePendingStep(player);
192200
applyExactYaw(player, targetYaw);
201+
forcedForward = true;
202+
forcedSneak = sneak;
193203
setKeyState(mc.options.keyUp, true);
194204
if (sneak) {
195205
setKeyState(mc.options.keyShift, true);
206+
} else {
207+
setKeyState(mc.options.keyShift, false);
196208
}
197209
}
198210

199211
public static void cancel() {
200212
if (!active) return;
201213
active = false;
214+
movementLockTicks = 0;
202215
releasePressedKeys(Minecraft.getInstance());
203216
}
204217

205218
public static boolean isActive() {
206219
return active;
207220
}
208221

222+
public static boolean shouldBlockMovementInput() {
223+
return active || movementLockTicks > 0;
224+
}
225+
226+
public static boolean isAllowedMovementKey(Minecraft mc, KeyMapping keyMapping) {
227+
if (mc == null || mc.options == null) return false;
228+
if (keyMapping == mc.options.keyUp) return forcedForward;
229+
if (keyMapping == mc.options.keyShift) return forcedSneak;
230+
return false;
231+
}
232+
209233
public static List<String> getDebugInfo() {
210234
List<String> info = new ArrayList<>();
211235
if (!active && !debugAwaitingSample && !debugExpectedAvailable && !debugMeasuredAvailable) {
@@ -307,8 +331,10 @@ private static void finish(Minecraft mc) {
307331
debugAwaitingSample = true;
308332
releasePressedKeys(mc);
309333
if (!doLookAfter) {
334+
movementLockTicks = 0;
310335
return;
311336
}
337+
movementLockTicks = SNAP_MOVEMENT_LOCK_TICKS;
312338
if (alignUseLookAfterCoords) {
313339
RotationManager.getInstance().snapToBlock(alignLookAtX, alignLookAtY, alignLookAtZ, 0);
314340
} else {
@@ -318,6 +344,7 @@ private static void finish(Minecraft mc) {
318344

319345
private static void releaseMovementKeys(Minecraft mc) {
320346
if (mc == null || mc.options == null) return;
347+
clearForcedMovement();
321348
setKeyState(mc.options.keyUp, false);
322349
setKeyState(mc.options.keyDown, false);
323350
setKeyState(mc.options.keyLeft, false);
@@ -328,10 +355,16 @@ private static void releaseMovementKeys(Minecraft mc) {
328355

329356
private static void releasePressedKeys(Minecraft mc) {
330357
if (mc == null || mc.options == null) return;
358+
clearForcedMovement();
331359
restorePhysicalState(mc.options.keyUp, mc);
332360
restorePhysicalState(mc.options.keyShift, mc);
333361
}
334362

363+
private static void clearForcedMovement() {
364+
forcedForward = false;
365+
forcedSneak = false;
366+
}
367+
335368
private static void setKeyState(KeyMapping key, boolean pressed) {
336369
if (key instanceof KeyBindingAccessor accessor) {
337370
KeyMapping.set(accessor.getBoundKey(), pressed);

src/main/java/org/blackum/blackaddons/mixin/core/KeyboardInputMixin.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.blackum.blackaddons.mixin.core;
22

33
import net.minecraft.client.KeyMapping;
4+
import net.minecraft.client.Minecraft;
45
import net.minecraft.client.player.KeyboardInput;
6+
import org.blackum.blackaddons.core.util.AlignUtils;
57
import org.blackum.blackaddons.feature.cheat.Freecam;
68
import org.spongepowered.asm.mixin.Mixin;
79
import org.spongepowered.asm.mixin.injection.At;
@@ -15,6 +17,19 @@ private boolean onIsDown(KeyMapping keyMapping) {
1517
if (Freecam.getInstance().isActive()) {
1618
return false;
1719
}
20+
Minecraft mc = Minecraft.getInstance();
21+
if (AlignUtils.shouldBlockMovementInput() && mc.options != null && isMovementKey(mc, keyMapping)) {
22+
return AlignUtils.isAllowedMovementKey(mc, keyMapping);
23+
}
1824
return keyMapping.isDown();
1925
}
26+
27+
private boolean isMovementKey(Minecraft mc, KeyMapping keyMapping) {
28+
return keyMapping == mc.options.keyUp
29+
|| keyMapping == mc.options.keyDown
30+
|| keyMapping == mc.options.keyLeft
31+
|| keyMapping == mc.options.keyRight
32+
|| keyMapping == mc.options.keyJump
33+
|| keyMapping == mc.options.keyShift;
34+
}
2035
}

0 commit comments

Comments
 (0)