Skip to content

Commit 5f93357

Browse files
[Experimental] Elytra Movement (#291)
* Experimental Entity Metadata * Axolotl variants * cleanup logging- * Mooshroom * Slime and Magma Cube * Rabbit and Parrot variants, Sheep colour * Elytra Movement * Fix rebase issues * More fixes * hhhh * Some extra conditions
1 parent 7018469 commit 5f93357

3 files changed

Lines changed: 30 additions & 1 deletion

File tree

src/main/java/net/raphimc/viabedrock/api/model/entity/ClientPlayerEntity.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public class ClientPlayerEntity extends PlayerEntity {
7272
private boolean horizontalCollision;
7373
private boolean sneaking;
7474
private boolean sprinting;
75+
private boolean gliding;
7576

7677
// Misc data
7778
private GameType gameType;
@@ -363,6 +364,14 @@ public void setSprinting(final boolean sprinting) {
363364
this.updateAttributes(new EntityAttribute[]{newMovementAttribute.withValue(newMovementAttribute.computeCurrentValue())});
364365
}
365366

367+
public boolean isGliding() {
368+
return this.gliding;
369+
}
370+
371+
public void setGliding(final boolean gliding) {
372+
this.gliding = gliding;
373+
}
374+
366375
public GameType gameType() {
367376
return this.gameType;
368377
}

src/main/java/net/raphimc/viabedrock/experimental/rewriter/EntityMetadataRewriter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ public static boolean rewrite(final UserConnection user, final Entity entity, fi
6262
if (bedrockFlags.contains(ActorFlags.INVISIBLE)) {
6363
javaBitMask |= (1 << 5);
6464
}
65-
65+
if (bedrockFlags.contains(ActorFlags.GLIDING)) {
66+
javaBitMask |= (byte) (1 << 7);
67+
}
68+
6669
javaEntityData.add(new EntityData(entity.getJavaEntityDataIndex(EntityDataFields.SHARED_FLAGS), VersionedTypes.V26_2.entityDataTypes().byteType, javaBitMask));
6770

6871
javaEntityData.add(new EntityData(entity.getJavaEntityDataIndex(EntityDataFields.SILENT), VersionedTypes.V26_2.entityDataTypes().booleanType, bedrockFlags.contains(ActorFlags.SILENT)));

src/main/java/net/raphimc/viabedrock/protocol/packet/ClientPlayerPackets.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,12 @@ protected void register() {
285285
clientPlayer.setSprinting(false);
286286
clientPlayer.addAuthInputData(PlayerAuthInputPacket_InputData.StopSprinting);
287287
}
288+
case START_FALL_FLYING -> {
289+
if (ViaBedrock.getConfig().shouldEnableExperimentalFeatures()) {
290+
clientPlayer.setGliding(true);
291+
clientPlayer.addAuthInputData(PlayerAuthInputPacket_InputData.StartGliding);
292+
}
293+
}
288294
default -> throw new IllegalStateException("Unhandled PlayerCommandAction: " + action);
289295
}
290296
});
@@ -458,6 +464,17 @@ protected void register() {
458464
clientPlayer.addAuthInputData(PlayerAuthInputPacket_InputData.StartJumping);
459465
}
460466

467+
if (clientPlayer.isGliding() && (
468+
clientPlayer.isOnGround() ||
469+
clientPlayer.effects().containsKey("minecraft:levitation") ||
470+
clientPlayer.entityFlags().contains(ActorFlags.WALLCLIMBING) ||
471+
clientPlayer.entityFlags().contains(ActorFlags.IN_ASCENDABLE_BLOCK) ||
472+
clientPlayer.entityFlags().contains(ActorFlags.IN_SCAFFOLDING)
473+
)) {
474+
clientPlayer.setGliding(false);
475+
clientPlayer.addAuthInputData(PlayerAuthInputPacket_InputData.StopGliding);
476+
}
477+
461478
if (!clientPlayer.isInitiallySpawned() || clientPlayer.isDead()) {
462479
wrapper.cancel();
463480
return;

0 commit comments

Comments
 (0)