Référence de l'API du serveur Hytale : Guide de développement des événements, messages et plugins

Par :nom Catégorie: :nom : minutes min lire

Développement de serveur Master Hytale avec notre référence API complète. En savoir plus sur PlayerConnect Événement, PlayerDisconnect Event, la classe Message pour le formatage de chat, l'enregistrement de commande, et la construction de votre premier plugin en utilisant l'architecture Java de Legacy Engine.

Comprendre l'architecture du serveur Hytale L'API serveur Hytale est construite sur une architecture Java robuste qui se sentira familier à quiconque a travaillé avec les plugins serveur Minecraft. Avec le retour au moteur Legacy, les développeurs ont maintenant accès à une base de codes mature et bien testée qui priorise l'accessibilité de la plate-forme sur la complexité de la plateforme. Au cœur du serveur se trouve le paquet com.hypixel.hytale.server.core, qui fournit la base de toutes les opérations côté serveur. Cela comprend la gestion des joueurs, la gestion mondiale, l'expédition des événements et le traitement des commandes. Evénements de connexion du joueur : Manipulation de l'adhésion et du départ L'une des exigences les plus courantes pour tout plugin serveur est de répondre aux joueurs qui rejoignent ou quittent. L'API Hytale fournit deux événements essentiels à cette fin. PlayerConnectEvent Fermé lorsqu'un joueur se connecte avec succès au serveur, cet événement vous donne accès à la référence du joueur avant qu'il n'entre complètement dans le monde. Les principales propriétés sont : playerRef - L'instance PlayerRef contenant UUID, nom d'utilisateur et info réseau joueur - L'entité Player qui les représentera dans le monde Monde - L'instance mondiale qu'ils rejoignent holder - Le détenteur du magasin d'entités pour l'accès aux composants Contrairement à d'autres événements, PlayerConnect L'événement n'est pas possible. Si vous avez besoin d'empêcher un joueur de se joindre, vous devriez gérer cela à la place du calque d'authentification. eventRegistry.register(PlayerConnectEvent::class.java) { événement -> val player = event.playerRef logger.info("Jouer connecté: ${player.username}") // Envoyer un message de bienvenue player.sendMessage(Message.raw("Bienvenue sur le serveur!") } PlayerDisconnectEvent Trigorisé quand un joueur quitte le serveur, cet événement inclut un contexte important à propos de Why ils ont déconnecté: joueurRef - La référence du joueur sortant disconnectReason - Énum indiquant l'arrêt du temps, le coup, l'abandon ou l'arrêt du serveur Cet événement est également non annulable puisque la déconnexion s'est déjà produite au niveau du réseau. La classe de message: le formatage de texte riche Les propriétaires de serveurs cherchant à créer des expériences de chat poli passeront beaucoup de temps avec la classe Message. Situé dans le paquet de messagerie de base, il fournit une API fluide pour construire du texte formaté. Création de messages de base // Message texte simple val msg = Message.raw("Bonjour, monde!") // Avec formatage de couleur val styled = Message.raw("Important!") Couleur("rouge") .bold(vrai) .italique(faux) .monospace(true) Substitution des paramètres Pour le contenu dynamique, utilisez les paramètres de localisation: val welcome = Message.raw("Bienvenue, {nom}! Vous avez des pièces.") .param("nom", player.username) .param("coins", playerData.coinBalance.toString()) Liens cliquables Les messages peuvent inclure des hyperliens cliquables: val linked = Message.raw("Cliquez ici pour visiter notre site") .link("https://exemple.com") Modèles d'enregistrement des événements Le système d'événements Hytale prend en charge à la fois la gestion des événements synchrones et asynchrones, offrant aux développeurs une flexibilité en fonction de leurs exigences de performance. Synchronique Inscription Pour les événements nécessitant un traitement immédiat sur le thread du serveur: eventRegistry.register(PlayerInteractEvent::class.java) { événement -> si (événement. Type == ActionType.RIGHT_CLICK) { // Procéder à l'interaction event.setAnnulé(vrai) } } Asynchrone Inscription Pour les événements qui peuvent être traités hors du fil principal (comme la modération du chat): eventRegistry.registerAsync(PlayerChatEvénement::class.java) { future -> l'avenir. puisAppliquer { event -> // Effectuer le filtrage de chat Async si (contientBannedWords(event.content)) { event.setAnnulé(vrai) } événement } } Common Tableau de référence de l'événement Voici une référence rapide pour les événements les plus fréquemment utilisés dans le développement du serveur: Nom de l'événementCancellable Propriétés principales PlayerConnectEvent NonjoueurRéf, joueur, monde, détenteur PlayerDisconnectEvent NonjoueurRéf, déconnecterReason PlayerChatEventOui (Async)sender, cibles, contenu, matière PlayerInteractEventOuiPlayer, action Type, itemInHand, cibleBlock, cibleEntité PlayerDeathEvent Nonjoueur PlayerRespawnEvénement Nonjoueur BreakBlockEventOuiitem Dans la main, cibleBlock, blocType PlaceBlockEventOuiItemEnmain, cibleBlock, rotation DamageBlockEventOuiitem Dans la main, cibleBlock, courantDamage, dommages DropItemEventOuiItem, emplacement CraftRecipeEvénement OuiRécette fabriquée, quantité Construire des commandes personnalisées Le système de commande vous permet d'enregistrer des commandes slash que les joueurs peuvent exécuter dans le chat. Mise en oeuvre du commandement de base classe MyCommand : Commande { surcharge fun getName(): Chaîne = "mycommand" surcharge fun execut(sender: CommandSender, args: Array) { sender.sendMessage(Message.raw("Bonjour de ma commande personnalisée!") } } // Inscrivez-vous dans la phase de configuration de votre plugin commandeRegistry.registerCommand(MyCommand()) Utilisation du gestionnaire de commande Vous pouvez également exécuter des commandes programmatiques : val commandManager = CommandManager.get() commandeManager.handleCommand(sender, "time day") Cycle de vie et structure des puces Chaque plugin de serveur Hytale étend la classe de base JavaPlugin, qui fournit des registres essentiels et des crochets de cycle de vie. Phases du cycle de vie de la puce Construction - Mise en place de la classe de greffons PreLoad - initialisation d'Async avant le démarrage du serveur Setup - Enregistrer les composants, les événements et les commandes Démarrer - Le serveur est prêt à accepter les joueurs Shutdown - Nettoyage avant l'arrêt du serveur Propriétés du plugin // Disponible dans votre classe de plugin enregistreur: HytaleLogger // Capacité d'exploitation manifeste : Le Manifest du Plugin ? // Métadonnées de connexion du fichier manifeste eventRegistry: eventRegistry // Inscrivez les auditeurs de l'événement commandeRegistre: CommandRegistre // Commandes d'enregistrement données Répertoire: Chemin // Emplacement du stockage du plugin TâcheEnregistrement: TâcheEnregistrement // Gestion des tâches programmée Aide à la configuration Plugins peut facilement charger des fichiers de configuration JSON: // Utilisation de config.json par défaut configuration de val & #160;: Config = avecConfig(MyConfigClass.CODEC) // Utiliser un nom de fichier personnalisé val config: Config = withConfig("custom-name.json", MyConfigClass.CODEC) Travailler avec les joueurs La classe PlayerRef est votre interface principale pour interagir avec les lecteurs connectés. Identité du joueur et emplacement val player: PlayerRef = event.playerRef // Identité Valuid: UUID = player.uuid val name: Chaîne = player.username val language: Chaîne = player.language // Position val transform: Transform = player.transform val worldUuid: UUID = player.worldUuid val headRotation: Vector3f = player.headRotation Accès aux entités de joueurs Pour des interactions plus profondes comme la gestion des stocks, accédez à l'entité Player : val playerEntité: Player = player.entity // Opérations d'inventaire val inventaire: Inventaire = playerEntity.inventaire playerEntity.sendInventory() // Gestionnaires d'assurance-chômage val hotbar = playerEntity.hotbarManager val windows = playerEntity.windowManager val pages = playerEntity.pageManager val hud = playerEntity.hudManager // Autorisations val canBuild: Booléen = playerEntity.hasPermission("server.build") Gestion mondiale et universelle L'Univers singleton donne accès à tous les mondes et aux joueurs connectés. val univers = Univers.get() // Accès aux joueurs val allPlayers: List = univers.players joueur Compte : Int = univers.playerCount val specificPlayer: PlayerRef? = univers.getPlayer(uuid) // Accès mondial val mondes: Map = univers.worlds valeur par défaut Monde: Monde? = univers.defaultMonde Valeur spécifique Monde: Monde? = univers.getWorld("mon monde") // Gestion mondiale val newWorld: CompletableFuture = univers.addWorld("new-World") Val chargé: Complété Future = univers.loadWorld("existant-monde") Avertissement de sécurité des fils L'accès au composant doit se faire sur le thread mondial. Enveloppez toujours les opérations dans le bloc d'exécution : world.execute { // Accès sécurisé aux composants ici val entités = world.getEntities() } Prochaines étapes pour les développeurs de serveurs Avec cette référence API comme base, vous êtes prêt à commencer à construire des plugins de serveur Hytale. Ressources clés à explorer ensuite : Système de composants d'entité (SCE) pour la manipulation d'entité avancée Construire des modules comme les PCN, les portails et les systèmes Quest Le système de scripts visuels pour les comportements de jeu Protocole réseau pour la gestion personnalisée des paquets Souvenez-vous que lorsque Hytale passe par l'accès précoce, l'API peut évoluer. Restez branché avec la communauté et la documentation officielle au fur et à mesure qu'elle se développe.