From 1e032e19157a8e922811a2cf2bbc9f6fe3959bed Mon Sep 17 00:00:00 2001 From: Sollace Date: Sun, 26 Apr 2020 12:07:25 +0200 Subject: [PATCH] Fixed packet loop when updating a player's capabilities --- .../unicopia/command/SpeciesCommand.java | 4 +++- .../entity/player/GravityDelegate.java | 21 ++++++++----------- .../unicopia/entity/player/PlayerImpl.java | 6 ++---- .../unicopia/mixin/MixinPlayerEntity.java | 1 + .../network/MsgPlayerCapabilities.java | 1 + .../network/MsgRequestCapabilities.java | 1 + 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java b/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java index d4a5b8b8..4391b37a 100644 --- a/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java +++ b/src/main/java/com/minelittlepony/unicopia/command/SpeciesCommand.java @@ -47,7 +47,9 @@ class SpeciesCommand { static int set(ServerCommandSource source, PlayerEntity player, Race race, boolean isSelf) { if (race.isPermitted(player)) { - Pony.of(player).setSpecies(race); + Pony pony = Pony.of(player); + pony.setSpecies(race); + pony.sendCapabilities(false); Text formattedName = new TranslatableText(race.name().toLowerCase()); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java b/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java index 48034f96..90c89304 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/GravityDelegate.java @@ -290,22 +290,19 @@ public class GravityDelegate implements Updatable, FlightControl, NbtSerialisabl } public void updateFlightStat(PlayerEntity entity, boolean flying) { - if (!entity.abilities.creativeMode) { - entity.abilities.allowFlying = player.getSpecies().canFly(); + entity.abilities.allowFlying = checkCanFly(Pony.of(entity)); - if (entity.abilities.allowFlying) { - entity.abilities.flying |= flying; + if (entity.abilities.allowFlying) { + entity.abilities.flying |= flying; - isFlying = entity.abilities.flying; + isFlying = entity.abilities.flying; - if (isFlying) { - ticksNextLevel = 0; - } - - } else { - entity.abilities.flying = false; - isFlying = false; + if (isFlying) { + ticksNextLevel = 0; } + } else { + entity.abilities.flying = false; + isFlying = false; } } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerImpl.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerImpl.java index 2e58c38c..3ffe79c8 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerImpl.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerImpl.java @@ -104,11 +104,8 @@ public class PlayerImpl implements Pony { entity.getDataTracker().set(PLAYER_RACE, race.ordinal()); - entity.abilities.allowFlying = race.canFly(); gravity.updateFlightStat(entity, entity.abilities.flying); entity.sendAbilitiesUpdate(); - - sendCapabilities(false); } @Override @@ -170,7 +167,7 @@ public class PlayerImpl implements Pony { public void sendCapabilities(boolean full) { dirty = false; - if (!getWorld().isClient()) { + if (entity instanceof ServerPlayerEntity) { Channel.BROADCAST_CAPABILITIES.send(new MsgPlayerCapabilities(full, this)); } } @@ -422,6 +419,7 @@ public class PlayerImpl implements Pony { public void copyFrom(Pony oldPlayer) { setEffect(oldPlayer.getEffect()); setSpecies(oldPlayer.getSpecies()); + sendCapabilities(true); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java index d902a24d..91e5efb4 100644 --- a/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/mixin/MixinPlayerEntity.java @@ -63,6 +63,7 @@ abstract class MixinPlayerEntity extends LivingEntity implements PonyContainer