This commit is contained in:
2026-01-20 20:33:59 +01:00
commit b16a40e431
583 changed files with 87339 additions and 0 deletions

View File

@@ -0,0 +1,291 @@
---
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);
```