292 lines
6.0 KiB
Markdown
292 lines
6.0 KiB
Markdown
---
|
|
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);
|
|
```
|