Vehicle
Présentation
Vehicle permet aux joueurs de posséder, d'invoquer et de conduire des véhicules personnalisés : voitures, bateaux, montures volantes. Vous définissez un type de véhicule une seule fois (son apparence, sa vitesse, sa santé, son carburant, son combat et sa progression) et chaque joueur en possède des instances, avec leur propre niveau, carburant, santé, bouclier et skin, sauvegardés dans un artifact. Un joueur invoque un véhicule depuis le menu de garage ou une action, le monte avec les touches de déplacement, puis le range.
Le véhicule se compose de deux parties. Une entité porteuse invisible gère la physique et le passager. Un visuel y est attaché : un objet affiché, un mob vanilla, un modèle BetterModel ou un mob BTCMobs. Vous pouvez donc utiliser un simple objet pour un véhicule économique ou un modèle animé pour un véhicule phare.
La conduite, le carburant, les dégâts, les capacités et la montée en niveau sont tous exposés à TypeWriter : ils déclenchent des événements, exposent des facts, et les capacités exécutent n'importe quelle liste d'actions TypeWriter. Elle fonctionne sur la version BTC de TypeWriter et nécessite les fonctionnalités de BTC Core.
Fonctionnalités
- Quatre types de déplacement —
GROUND,WATER,AMPHIBIOUSetAIR, chacun avec sa propre porteuse. - Quatre visuels —
display(objet),vanilla(mob),bettermodeletbtcmobs, avec le modèle résolu par joueur. - Carburant — un réservoir, un taux de consommation par seconde, des objets de carburant acceptés, et une action de ravitaillement.
- Santé et bouclier — les coups sont absorbés d'abord par le bouclier ; à 0 de santé, le véhicule est détruit et doit être réparé.
- Niveaux et statistiques — une courbe d'XP configurable et un bonus de statistiques par niveau.
- Combat — attaque au clic gauche avec portée, cooldown et coût en endurance, une charge sur la touche de saut maintenue, et des dégâts de collision facultatifs.
- Capacités — capacités activables avec cooldown et coût en endurance qui exécutent n'importe quelles actions TypeWriter.
- Menu de garage — un menu paginé des véhicules du joueur, construit sur un layout GUI.
- Limite de possession — une limite de base augmentée par permission.
- Événements et facts — collision, carburant vide, montée de niveau, attaque, coup de charge, destruction et endurance épuisée.
Installation
- Installez les extensions BTCMobs et Basic (toutes deux sont des dépendances déclarées), ainsi que l'extension GUI pour le menu de garage. Voir BTCMobs.
- Installez PacketEvents. Sans lui, la direction est désactivée et le journal indique
PacketEvents not found! WASD steering will be disabled. - Installez éventuellement BetterModel pour utiliser le visuel
bettermodel. - Placez le JAR de Vehicle dans
plugins/Typewriter/extensions/et redémarrez le serveur.
Premiers pas
- Dans le panneau web de TypeWriter, ouvrez une page statique et ajoutez un artifact Vehicle Storage.
- Ajoutez une entrée Vehicle Config et définissez
storagesur l'artifact. Sans lui, les données des véhicules ne sont ni chargées ni sauvegardées, et le journal indiqueAucun stockage designe. - Ajoutez une Vehicle Definition : choisissez
movement(GROUND), unvisual(displayavec un matériau tel queMINECART), puis réglezstats,fuel(ajoutez un objet àallowedFuels) etcombat. - Ajoutez une action Spawn Vehicle référençant la définition et déclenchez-la depuis une commande, un PNJ ou un événement. Le premier appel donne au joueur un nouveau véhicule de ce type, rempli de carburant et de santé, et l'y fait monter.
- Pour un garage, ajoutez un Vehicle Garage Menu construit avec
layoutPool, puis déclenchez Open Vehicle Garage. - Ajoutez Refill Vehicle Fuel et Repair Vehicle à une station-service ou à un PNJ de garage. Publiez et testez.
Vehicle n'enregistre aucune commande propre. Invoquez, rangez et réparez via des actions, le menu de garage ou des entrées de commande TypeWriter.
Fonctionnement
La porteuse dépend de movement : GROUND utilise un armor stand déplacé par le serveur, WATER et AMPHIBIOUS utilisent un bateau, que le client simule lui-même, et AIR utilise un happy ghast. Pour les bateaux, le serveur ne pilote pas : il valide chaque tick et ramène le véhicule en arrière lorsqu'il dépasse maxSpeed, lorsque le réservoir est vide, ou (pour GROUND) lorsqu'il entre dans un liquide.
La direction utilise les paquets d'entrée du joueur : avant, arrière, gauche, droite, saut et furtivité. Descendre range le véhicule (il disparaît du monde et les données sont sauvegardées).
Une instance de véhicule a un niveau, de l'XP, de la santé, un bouclier, du carburant et un skin. Les statistiques sont multipliées par 1 + statBonusPerLevel * (level - 1) (sauf la gravité). L'XP nécessaire pour quitter un niveau est baseXp * level ^ xpGrowth. À maxLevel, l'XP s'arrête.
Menus
Vehicle Garage Menu se construit comme n'importe quel menu GUI : un layoutPool, un mainLayoutId, des views facultatives et un baseMenuId pour hériter d'un châssis partagé. Placez des objets avec ces types de boutons (le buttonType d'un objet) :
| Type de bouton | Comportement |
|---|---|
vehicle_button:VEHICLE_SLOT#<n> | Affiche le n-ième véhicule du joueur (trié par identifiant d'instance) ; un clic l'invoque. Vide si le joueur en possède moins. |
vehicle_button:VEHICLE_SPAWN | Invoque le véhicule actif. |
vehicle_button:VEHICLE_DESPAWN | Range le véhicule monté et ferme le menu. |
vehicle_button:VEHICLE_INFO | Affiche dans le chat le niveau, le carburant et la santé du véhicule actif. |
vehicle_button:NAV_BACK | Retourne au menu précédent. |
vehicle_button:NAV_CLOSE | Ferme le menu. |
vehicleDisplay définit l'apparence d'un emplacement de véhicule : un item, un nameFormat et un lore, avec les jetons %name%, %level%, %max_level%, %fuel%, %max_fuel%, %health%, %max_health% et %shield%. Un objet que vous placez pour un bouton conserve son propre nom et son propre lore si la page les définit.
Permissions
| Permission | Autorise |
|---|---|
typewriter.vehicle.limit.<n> | Augmente la limite de possession de <n> lorsqu'une entrée Vehicle Ownership Limit la lit (la valeur la plus élevée compte). |
Aucune autre permission n'est définie par l'extension.
Placeholders
Deux facts peuvent être lus comme des placeholders via TypeWriter : Vehicle Ownership Limit et Vehicles Owned Count, chacun renvoyant un nombre. L'extension n'enregistre aucun placeholder propre.
Entrées
25 entrées, générées depuis la source de l'extension.
Actions9
- Activate Vehicle AbilityActivate Vehicle Ability
- Add Vehicle XPAdd Vehicle XP
- Open Vehicle GarageOpen Vehicle Garage
- Refill Vehicle FuelRefill Vehicle Fuel
- Repair VehicleRepair Vehicle
- Set Vehicle SkinSet Vehicle Skin
- Spawn VehicleSpawn Vehicle
- Vehicle AttackVehicle Attack
- Vehicle ChargeVehicle Charge
Événements7
- On Vehicle AttackOn Vehicle Attack
- On Vehicle Charge HitOn Vehicle Charge Hit
- On Vehicle CollisionOn Vehicle Collision
- On Vehicle DestroyedOn Vehicle Destroyed
- On Vehicle Fuel EmptyOn Vehicle Fuel Empty
- On Vehicle Level UpOn Vehicle Level Up
- On Vehicle Stamina DepleteOn Vehicle Stamina Deplete
Faits4
- Vehicle Charge Meter FactVehicle Charge Meter
- Vehicle LimitVehicle Ownership Limit
- Vehicle Owned CountVehicles Owned Count
- Vehicle Stamina FactVehicle Stamina
Artefacts1
- Vehicle StorageVehicle Storage Artifact
Manifestes4
- Vehicle AbilityVehicle Ability
- Vehicle ConfigVehicle Global Configuration
- Vehicle DefinitionVehicle Definition
- Vehicle Garage MenuVehicle Garage Menu
Dépannage
Rien n'est sauvegardé après un redémarrage. vehicle_config n'a pas de storage, ou il pointe vers un artifact manquant. Le journal signale Aucun stockage designe dans 'vehicle_config'. Définissez l'artifact dans storage.
Le véhicule ne bouge pas avec ZQSD/WASD. PacketEvents est absent, la direction est donc désactivée. Installez-le et redémarrez.
Le véhicule revient en arrière ou ne bouge pas. Le serveur annule le déplacement lorsque le véhicule va plus vite que stats.maxSpeed (blocs par tick), lorsque fuel vaut 0 (et déclenche On Vehicle Fuel Empty), ou pour GROUND lorsqu'il entre dans l'eau ou la lave. Augmentez maxSpeed, faites le plein, ou passez à AMPHIBIOUS.
Ce vehicule n'est pas disponible pour le moment. Le visuel n'a pas pu être créé : un identifiant de modèle qui n'existe pas dans BetterModel, un mobId BTCMobs inconnu, ou un matériau display qui n'est pas un objet. Cherchez non spawne ou visuel dans le journal.
L'invocation est refusée avec le message de limite. Le joueur possède déjà baseOwnershipLimit véhicules (1 par défaut). La limite n'inclut les permissions que si vous avez créé une entrée Vehicle Ownership Limit ; sinon, seul baseOwnershipLimit s'applique.
This vehicle is destroyed — repair it before summoning it again. La santé a atteint 0. Exécutez Repair Vehicle : il consomme repair.amount de repair.item et restaure healthPerRepair de santé sur le véhicule actif.
Une capacité ne fait rien. Elle doit être listée dans abilities de la définition du véhicule, et le joueur doit conduire, avoir assez d'endurance et ne pas être en cooldown ; chaque échec envoie un message issu de vehicle_config.