STAGE 1 HANDSHAKES FINALLY WORK
This commit is contained in:
parent
da4ad52819
commit
3e72533aa8
|
@ -16,15 +16,14 @@ import org.muellerssoftware.openproximitychatfabric.mixins.ClientConnectionInvok
|
|||
public class OPCFabricClient implements ClientModInitializer {
|
||||
private static KeyBinding keyBinding;
|
||||
|
||||
private static final Stage1HandshakeBuilder.Movement[] movements = {
|
||||
new Stage1HandshakeBuilder.Movement(270,-45),
|
||||
new Stage1HandshakeBuilder.Movement(270,45),
|
||||
new Stage1HandshakeBuilder.Movement(90,45),
|
||||
new Stage1HandshakeBuilder.Movement(270,-45),
|
||||
new Stage1HandshakeBuilder.Movement(90,45),
|
||||
new Stage1HandshakeBuilder.Movement(0, 0),
|
||||
new Stage1HandshakeBuilder.Movement(270, 45),
|
||||
new Stage1HandshakeBuilder.Movement(0, 0)
|
||||
private static final Stage1HandshakeBuilder.HandshakeMovement[] movements = {
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(90,-45),
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(90,45),
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(-90,45),
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(90,-45),
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(-90,45),
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(90, 45),
|
||||
new Stage1HandshakeBuilder.HandshakeMovement(0, 0)
|
||||
};
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
|
@ -43,11 +42,11 @@ public class OPCFabricClient implements ClientModInitializer {
|
|||
ClientConnectionInvoker invoker = (ClientConnectionInvoker) client.player.networkHandler.getConnection();
|
||||
|
||||
//ViewLock.setLocked(true);
|
||||
for (Stage1HandshakeBuilder.Movement movement : movements) {
|
||||
for (Stage1HandshakeBuilder.HandshakeMovement movement : movements) {
|
||||
invoker.sendIm(new PlayerMoveC2SPacket.LookAndOnGround(movement.yaw, movement.pitch, client.player.isOnGround()), null);
|
||||
/*try {
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException e) {}*/
|
||||
} catch (InterruptedException ignored) {}
|
||||
//OPCFabric.LOGGER.info("Sent move packet with yaw: " + (entity.getYaw() + movement.deltaYaw) + " and pitch: " + (entity.getPitch() + movement.deltaPitch));
|
||||
}
|
||||
//ViewLock.setLocked(false);
|
||||
|
|
|
@ -9,63 +9,84 @@ import java.util.Arrays;
|
|||
import java.util.Objects;
|
||||
|
||||
public class Stage1HandshakeBuilder {
|
||||
public static class Movement {
|
||||
public static class HandshakeMovement {
|
||||
public float yaw;
|
||||
public float pitch;
|
||||
|
||||
public Movement(float yaw, float pitch) {
|
||||
public HandshakeMovement(float yaw, float pitch) {
|
||||
this.pitch = pitch;
|
||||
this.yaw = yaw;
|
||||
}
|
||||
|
||||
public Movement(double yaw, double pitch) {
|
||||
public HandshakeMovement(double yaw, double pitch) {
|
||||
this.pitch = (float)pitch;
|
||||
this.yaw = (float)yaw;
|
||||
}
|
||||
|
||||
static boolean convertFromYawHandshakeForm(float yaw) throws IllegalArgumentException {
|
||||
if (yaw > 80 && yaw < 100) {
|
||||
return true;
|
||||
} else if (yaw > -100 && yaw < -80) {
|
||||
return false;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Yaw value is not a valid handshake value");
|
||||
}
|
||||
}
|
||||
|
||||
static boolean convertFromPitchHandshakeForm(float pitch) {
|
||||
if (pitch > 35 && pitch < 55) {
|
||||
return true;
|
||||
} else if (pitch < -35 && pitch > -55) {
|
||||
return false;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Pitch value is not a valid handshake value");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public HandshakeMovement convertToHandshakeForm() throws IllegalArgumentException {
|
||||
return new HandshakeMovement(convertFromYawHandshakeForm(yaw) ? 90 : -90, convertFromPitchHandshakeForm(pitch) ? 45 : -45);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(yaw, pitch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Movement movement = (Movement) o;
|
||||
return Float.compare(movement.yaw, yaw) == 0 && Float.compare(movement.pitch, pitch) == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(yaw, pitch);
|
||||
HandshakeMovement that = (HandshakeMovement) o;
|
||||
return Float.compare(that.yaw, yaw) == 0 && Float.compare(that.pitch, pitch) == 0;
|
||||
}
|
||||
}
|
||||
|
||||
private final ArrayList<Movement> movements = new ArrayList<>();
|
||||
private final ArrayList<HandshakeMovement> movements = new ArrayList<>();
|
||||
private PlayerEntity player;
|
||||
|
||||
private static final Movement[] MAGIC_MOVES = {
|
||||
new Movement(270,-45),
|
||||
new Movement(270,45),
|
||||
new Movement(90,45),
|
||||
new Movement(270,-45),
|
||||
new Movement(90,45),
|
||||
new Movement(0, 0)
|
||||
public boolean built = false;
|
||||
|
||||
private static final HandshakeMovement[] MAGIC_MOVES = {
|
||||
new HandshakeMovement(90,-45),
|
||||
new HandshakeMovement(90,45),
|
||||
new HandshakeMovement(-90,45),
|
||||
new HandshakeMovement(90,-45),
|
||||
new HandshakeMovement(-90,45)
|
||||
};
|
||||
|
||||
private static final Movement[] FRIENDSHIP_MOVES = {
|
||||
new Movement(90, 45),
|
||||
new Movement(0, 0)
|
||||
};
|
||||
private static final HandshakeMovement FRIENDSHIP_MOVE = new HandshakeMovement(-90, 45);
|
||||
|
||||
private static final Movement[] OMNIFRIEND_MOVES = {
|
||||
new Movement(270, 45),
|
||||
new Movement(0, 0)
|
||||
};
|
||||
private static final HandshakeMovement OMNIFRIEND_MOVE = new HandshakeMovement(90, 45);
|
||||
|
||||
public Stage1HandshakeBuilder withPlayer(PlayerEntity player) {
|
||||
this.player = player;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Stage1HandshakeBuilder addDelta(float yaw, float pitch) {
|
||||
Movement movement = new Movement(yaw, pitch);
|
||||
public Stage1HandshakeBuilder add(HandshakeMovement movement) {
|
||||
if (this.movements.size() == 0) {
|
||||
this.movements.add(movement);
|
||||
}
|
||||
|
@ -85,12 +106,12 @@ public class Stage1HandshakeBuilder {
|
|||
throw new HandshakeException("Too few stored head movements (need at least 24)");
|
||||
}
|
||||
|
||||
ArrayList<Movement> handshake = null;
|
||||
ArrayList<HandshakeMovement> handshake = null;
|
||||
|
||||
for (int i = 0; i < this.movements.size() - 6; i++) {
|
||||
if (Arrays.equals(this.movements.subList(i, i + 6).toArray(), MAGIC_MOVES)) {
|
||||
for (int i = 0; i < this.movements.size() - 5; i++) {
|
||||
if (Arrays.equals(this.movements.subList(i, i + 5).toArray(), MAGIC_MOVES)) {
|
||||
// Found start of handshake
|
||||
handshake = new ArrayList<>(this.movements.subList(i, i + 12));
|
||||
handshake = new ArrayList<>(this.movements.subList(i, i + 6));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -99,9 +120,9 @@ public class Stage1HandshakeBuilder {
|
|||
OPCFabric.LOGGER.info("Found handshake in {}'s head movements", this.player.getName().asTruncatedString(64));
|
||||
ConnectionFilterType filterType;
|
||||
PlayerEntity player;
|
||||
if (Arrays.equals(handshake.subList(6, 8).toArray(), FRIENDSHIP_MOVES)) {
|
||||
if (handshake.get(5).equals(FRIENDSHIP_MOVE)) {
|
||||
filterType = ConnectionFilterType.Friend;
|
||||
} else if (Arrays.equals(handshake.subList(6, 8).toArray(), OMNIFRIEND_MOVES)){
|
||||
} else if (handshake.get(5).equals(OMNIFRIEND_MOVE)) {
|
||||
filterType = ConnectionFilterType.Everyone;
|
||||
} else {
|
||||
return null;
|
||||
|
|
|
@ -20,15 +20,21 @@ public class OtherClientPlayerEntityMixin {
|
|||
OPCFabric.tracked_players.put(player.getUuid(), new Stage1HandshakeBuilder().withPlayer(player));
|
||||
}
|
||||
Stage1HandshakeBuilder builder = OPCFabric.tracked_players.get(player.getUuid());
|
||||
builder.addDelta((float) (accessor.getServerHeadYaw()), (float) (accessor.getServerPitch()));
|
||||
if (builder.readyToBuild()) {
|
||||
if (!builder.built) {
|
||||
try {
|
||||
Stage1Handshake handshake = builder.tryBuild();
|
||||
if (handshake != null) {
|
||||
OPCFabric.LOGGER.info("Found Stage 1 Handshake for player {}", handshake.getPlayer().getName());
|
||||
builder.add(new Stage1HandshakeBuilder.HandshakeMovement(accessor.getServerHeadYaw(), accessor.getServerPitch()).convertToHandshakeForm());
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
if (builder.readyToBuild()) {
|
||||
try {
|
||||
Stage1Handshake handshake = builder.tryBuild();
|
||||
if (handshake != null) {
|
||||
OPCFabric.LOGGER.info("Found Stage 1 Handshake for player {}", handshake.getPlayer().getName());
|
||||
builder.built = true;
|
||||
}
|
||||
} catch (HandshakeException e) {
|
||||
OPCFabric.LOGGER.info("Caught HandshakeException ({})", e.getMessage());
|
||||
}
|
||||
} catch (HandshakeException e) {
|
||||
OPCFabric.LOGGER.info("Caught HandshakeException ({})", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user