1
0
mirror of https://github.com/GeyserMC/Geyser.git synced 2025-12-19 14:59:27 +00:00

Fixed equipping armour/saddle cause the player to mount.

This commit is contained in:
oryxel1
2025-12-15 20:01:08 +07:00
parent fbcd4aa329
commit 5b6faf9cfb
2 changed files with 18 additions and 0 deletions

View File

@@ -71,6 +71,8 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEn
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType; import org.geysermc.mcprotocollib.protocol.data.game.entity.type.EntityType;
import org.geysermc.mcprotocollib.protocol.data.game.item.component.DataComponentTypes;
import org.geysermc.mcprotocollib.protocol.data.game.item.component.Equippable;
import java.util.Collections; import java.util.Collections;
import java.util.EnumMap; import java.util.EnumMap;

View File

@@ -353,6 +353,13 @@ public class LivingEntity extends Entity {
} }
} }
final Equippable equippable = itemStack.getComponent(DataComponentTypes.EQUIPPABLE);
if (equippable != null && equippable.equipOnInteract() && this.isAlive()) {
if (isEquippableInSlot(itemStack, equippable.slot()) && getItemInSlot(equippable.slot()).isEmpty()) {
return InteractionResult.SUCCESS;
}
}
return super.interact(hand); return super.interact(hand);
} }
@@ -555,6 +562,15 @@ public class LivingEntity extends Entity {
return false; return false;
} }
public final boolean isEquippableInSlot(GeyserItemStack item, EquipmentSlot var2) {
Equippable equippable = item.getComponent(DataComponentTypes.EQUIPPABLE);
if (equippable == null) {
return var2 == EquipmentSlot.MAIN_HAND && this.canUseSlot(EquipmentSlot.MAIN_HAND);
} else {
return var2 == equippable.slot() && this.canUseSlot(equippable.slot()) && EntityUtils.equipmentUsableByEntity(session, equippable, this.definition.entityType());
}
}
protected boolean canUseSlot(EquipmentSlot slot) { protected boolean canUseSlot(EquipmentSlot slot) {
return true; return true;
} }