mirror of https://github.com/Minestom/Minestom.git
Correctly send the player's main hand setting. (#1724)
* Update Player.java * Use setNotifyAboutChanges and add integration test
This commit is contained in:
parent
51ef4779c9
commit
aebf72de90
|
@ -2204,7 +2204,10 @@ public class Player extends LivingEntity implements CommandSender, Localizable,
|
||||||
this.allowServerListings = allowServerListings;
|
this.allowServerListings = allowServerListings;
|
||||||
|
|
||||||
// TODO: Use the metadata object here
|
// TODO: Use the metadata object here
|
||||||
|
metadata.setNotifyAboutChanges(false);
|
||||||
metadata.setIndex((byte) 17, Metadata.Byte(displayedSkinParts));
|
metadata.setIndex((byte) 17, Metadata.Byte(displayedSkinParts));
|
||||||
|
metadata.setIndex((byte) 18, Metadata.Byte((byte) (this.mainHand == MainHand.RIGHT ? 1 : 0)));
|
||||||
|
metadata.setNotifyAboutChanges(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package net.minestom.server.entity.player;
|
package net.minestom.server.entity.player;
|
||||||
|
|
||||||
|
import net.minestom.server.message.ChatMessageType;
|
||||||
|
import net.minestom.server.network.packet.client.play.ClientSettingsPacket;
|
||||||
import net.minestom.testing.Collector;
|
import net.minestom.testing.Collector;
|
||||||
import net.minestom.testing.Env;
|
import net.minestom.testing.Env;
|
||||||
import net.minestom.testing.EnvTest;
|
import net.minestom.testing.EnvTest;
|
||||||
|
@ -45,6 +47,36 @@ public class PlayerIntegrationTest {
|
||||||
assertAbilities(player, false, false, false, false);
|
assertAbilities(player, false, false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handSwapTest(Env env) {
|
||||||
|
ClientSettingsPacket packet = new ClientSettingsPacket("en_us", (byte) 16, ChatMessageType.FULL,
|
||||||
|
true, (byte) 127, Player.MainHand.LEFT, true, true);
|
||||||
|
|
||||||
|
var instance = env.createFlatInstance();
|
||||||
|
var connection = env.createConnection();
|
||||||
|
var player = connection.connect(instance, new Pos(0, 42, 0)).join();
|
||||||
|
assertEquals(instance, player.getInstance());
|
||||||
|
env.tick();
|
||||||
|
env.tick();
|
||||||
|
|
||||||
|
player.addPacketToQueue(packet);
|
||||||
|
var collector = connection.trackIncoming();
|
||||||
|
env.tick();
|
||||||
|
env.tick();
|
||||||
|
assertEquals(Player.MainHand.LEFT, player.getSettings().getMainHand());
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
for (ServerPacket serverPacket : collector.collect()) {
|
||||||
|
if (!(serverPacket instanceof EntityMetaDataPacket metaDataPacket)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
assertEquals((byte) 0, metaDataPacket.entries().get(18).value(),
|
||||||
|
"EntityMetaDataPacket has the incorrect hand after client settings update.");
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(found, "EntityMetaDataPacket not sent after client settings update.");
|
||||||
|
}
|
||||||
|
|
||||||
private void assertAbilities(Player player, boolean isInvulnerable, boolean isFlying, boolean isAllowFlying,
|
private void assertAbilities(Player player, boolean isInvulnerable, boolean isFlying, boolean isAllowFlying,
|
||||||
boolean isInstantBreak) {
|
boolean isInstantBreak) {
|
||||||
assertEquals(isInvulnerable, player.isInvulnerable());
|
assertEquals(isInvulnerable, player.isInvulnerable());
|
||||||
|
|
Loading…
Reference in New Issue