---
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<EntityStore> {
    // 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<EntityStore> {
    // Reference vers ce qu'on chevauche
    private Ref<EntityStore> mountRef;
}
```

### MountedByComponent

Attache aux entites etant chevauchees:

```java
public class MountedByComponent implements Component<EntityStore> {
    // Reference vers le cavalier
    private Ref<EntityStore> riderRef;
}
```

### BlockMountComponent

Composant chunk pour sieges bases sur blocs:

```java
public class BlockMountComponent implements Component<ChunkStore> {
    // Position bloc et configuration
    // Joueur actuellement assis
}
```

### MinecartComponent

Composant vehicule pour minecarts:

```java
public class MinecartComponent implements Component<EntityStore> {
    // 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 <joueur> <selecteur_npc>
```

### /mountcheck

Verifier statut monture:

```
/mountcheck <joueur>
```

### /dismount

Forcer demontage d'un joueur:

```
/dismount <joueur>
```

## Acces au Plugin

```java
MountPlugin mounts = MountPlugin.getInstance();

// Types de composants
ComponentType<EntityStore, NPCMountComponent> npcMountType =
    mounts.getMountComponentType();
ComponentType<EntityStore, MountedComponent> mountedType =
    mounts.getMountedComponentType();
ComponentType<EntityStore, MountedByComponent> mountedByType =
    mounts.getMountedByComponentType();
ComponentType<EntityStore, MinecartComponent> minecartType =
    mounts.getMinecartComponentType();
ComponentType<ChunkStore, BlockMountComponent> 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);
```
