--- title: Montures type: docs weight: 11 --- Le systeme de montures permet aux entites de chevaucher d'autres entites ou s'asseoir sur des blocs. **Package:** `com.hypixel.hytale.builtin.mounts` ## Apercu Le systeme de montures supporte: - Chevaucher des entites NPC - S'asseoir sur des sieges bases sur blocs - Mecaniques de vehicules minecart - Controles de mouvement specifiques aux montures ## Architecture ``` Systeme Montures ├── Composants │ ├── NPCMountComponent - Config monture NPC │ ├── MountedComponent - "Je chevauche quelque chose" │ ├── MountedByComponent - "Quelque chose me chevauche" │ ├── BlockMountComponent - Siege bloc │ └── MinecartComponent - Vehicule minecart ├── Systemes │ ├── MountSystems - Logique monture principale │ └── NPCMountSystems - Logique specifique NPC ├── Interactions │ ├── MountInteraction - Monter NPC │ ├── SeatingInteraction - S'asseoir sur bloc │ └── SpawnMinecartInteraction - Creer minecart └── Commandes ├── MountCommand - Forcer montage ├── MountCheckCommand - Verifier statut └── DismountCommand - Forcer demontage ``` ## Composants ### NPCMountComponent Attache aux NPCs qui peuvent etre montes: ```java public class NPCMountComponent implements Component { // Joueur chevauchant actuellement (si present) private PlayerRef ownerPlayerRef; // Role NPC original avant montage private int originalRoleIndex; // Configuration monture // Vitesses mouvement, capacites, etc. } ``` ### MountedComponent Attache aux entites qui chevauchent quelque chose: ```java public class MountedComponent implements Component { // Reference vers ce qu'on chevauche private Ref mountRef; } ``` ### MountedByComponent Attache aux entites etant chevauchees: ```java public class MountedByComponent implements Component { // Reference vers le cavalier private Ref riderRef; } ``` ### BlockMountComponent Composant chunk pour sieges bases sur blocs: ```java public class BlockMountComponent implements Component { // Position bloc et configuration // Joueur actuellement assis } ``` ### MinecartComponent Composant vehicule pour minecarts: ```java public class MinecartComponent implements Component { // Configuration mouvement rails // Vitesse, acceleration, etc. } ``` ## Monter des NPCs ### Interaction Monture Les joueurs montent les NPCs via interaction: ```java // Enregistre comme type interaction "Mount" Interaction.CODEC.register("Mount", MountInteraction.class, MountInteraction.CODEC); ``` ### Processus de Montage 1. Joueur interagit avec NPC montable 2. `NPCMountComponent` est ajoute/configure 3. `MountedComponent` ajoute au joueur 4. `MountedByComponent` ajoute au NPC 5. Role NPC change vers comportement "monte" 6. Parametres mouvement joueur mis a jour ### Demontage Le demontage peut survenir: - Joueur demonte manuellement - Joueur se deconnecte - Monture ou joueur meurt - Commande force demontage ```java // Demonter NPC MountPlugin.dismountNpc(store, mountEntityId); // Reinitialiser parametres mouvement joueur MountPlugin.resetOriginalPlayerMovementSettings(playerRef, store); ``` ## Sieges de Blocs ### Interaction Siege Les joueurs s'assoient sur blocs via interaction: ```java // Enregistre comme type interaction "Seating" Interaction.CODEC.register("Seating", SeatingInteraction.class, SeatingInteraction.CODEC); ``` ### API Monture Bloc ```java BlockMountAPI api = BlockMountAPI.get(); // Verifier si bloc est un siege boolean isSeat = api.isSeat(world, blockPos); // Obtenir joueur assis PlayerRef seated = api.getSeatedPlayer(world, blockPos); ``` ## Minecarts ### Interaction Spawn Minecart Creer minecarts via interaction: ```java // Enregistre comme type interaction "SpawnMinecart" Interaction.CODEC.register("SpawnMinecart", SpawnMinecartInteraction.class, SpawnMinecartInteraction.CODEC); ``` ### Comportement Minecart - Suit les rails - Vitesse et acceleration configurables - Peut transporter joueurs et items - Collision avec autres minecarts ## Composant Core NPC Les NPCs peuvent utiliser actions de monture: ```java // Type composant core enregistre NPCPlugin.get().registerCoreComponentType("Mount", BuilderActionMount::new); ``` ```json { "Type": "Mount", "MountTarget": "player", "Duration": 10.0 } ``` ## Commandes ### /mount Forcer un joueur a monter un NPC: ``` /mount ``` ### /mountcheck Verifier statut monture: ``` /mountcheck ``` ### /dismount Forcer demontage d'un joueur: ``` /dismount ``` ## Acces au Plugin ```java MountPlugin mounts = MountPlugin.getInstance(); // Types de composants ComponentType npcMountType = mounts.getMountComponentType(); ComponentType mountedType = mounts.getMountedComponentType(); ComponentType mountedByType = mounts.getMountedByComponentType(); ComponentType minecartType = mounts.getMinecartComponentType(); ComponentType blockMountType = mounts.getBlockMountComponentType(); ``` ## Systemes ### Suivi Monture ```java // Mettre a jour suivi position monture MountSystems.TrackerUpdate // Supprimer suivi monture a suppression entite MountSystems.TrackerRemove ``` ### Gestion Mort ```java // Demonter joueur quand il meurt NPCMountSystems.DismountOnPlayerDeath // Demonter quand monture meurt NPCMountSystems.DismountOnMountDeath ``` ### Mouvement ```java // Gerer input joueur sur monture MountSystems.HandleMountInput // Teleporter entite montee avec monture MountSystems.TeleportMountedEntity ``` ## Evenements ### Deconnexion Joueur Quand joueur se deconnecte en montant: ```java // Demonter automatiquement a deconnexion getEventRegistry().register(PlayerDisconnectEvent.class, MountPlugin::onPlayerDisconnect); ```