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;
|
||||
|
||||
// TODO: Use the metadata object here
|
||||
metadata.setNotifyAboutChanges(false);
|
||||
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;
|
||||
|
||||
import net.minestom.server.message.ChatMessageType;
|
||||
import net.minestom.server.network.packet.client.play.ClientSettingsPacket;
|
||||
import net.minestom.testing.Collector;
|
||||
import net.minestom.testing.Env;
|
||||
import net.minestom.testing.EnvTest;
|
||||
|
@ -45,6 +47,36 @@ public class PlayerIntegrationTest {
|
|||
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,
|
||||
boolean isInstantBreak) {
|
||||
assertEquals(isInvulnerable, player.isInvulnerable());
|
||||
|
|
Loading…
Reference in New Issue