Hytale Server API Riferimento: eventi, messaggi e Plugin Guida allo sviluppo

Per nome Categoria: :minuti leggere

Master Hytale server sviluppo con il nostro completo riferimento API. Scopri di più su PlayerConnect Evento, PlayerDisconnect Evento, la classe Messaggio per la formattazione della chat, la registrazione dei comandi e la costruzione del primo plugin utilizzando l'architettura Java-based di Legacy Engine.

In attesa dell'architettura del server Hytale > L'API server Hytale è costruita su una robusta architettura basata su Java che si sentirà familiare a chiunque abbia lavorato con i plug-in server Minecraft. Con il ritorno al Legacy Engine, gli sviluppatori ora hanno accesso a un codebase maturo e ben testato che privilegia l'accessibilità al modding sulla complessità multipiattaforma. > Nel cuore del server si trova il pacchetto com.hypixel.hytale.server.core Questo include la gestione del giocatore, la gestione del mondo, la spedizione degli eventi e l'elaborazione dei comandi. Eventi di connessione del giocatore: Guidare unisciti e lasciare Uno dei requisiti più comuni per qualsiasi plugin del server risponde ai giocatori che si uniscono o partono. L'API Hytale fornisce due eventi essenziali per questo scopo. Traduzione: Fired quando un giocatore si connette con successo al server, questo evento ti dà accesso al riferimento del giocatore prima che vengano completamente creati nel mondo. Le proprietà chiave includono: > playerRef - L'istanza PlayerRef contenente UUID, nome utente e informazioni di rete player - L'entità del giocatore che li rappresenterà nel mondo world holder - Il titolare del negozio dell'entità per l'accesso dei componenti < > A differenza di altri eventi, PlayerConnect L'evento non è cancellabile . Se è necessario evitare che un giocatore si unisca, si dovrebbe gestire questo allo strato di autenticazione. eventRegistry.register(PlayerConnectEvent::class.java) > val player = event.playerRef logger.info("Player collegato: ${player.username}") // Invia messaggio di benvenuto player.sendMessage(Message.raw("Benvenuto al server!")) Traduzione: Traduzione: Triggered quando un giocatore lascia il server, questo evento include un contesto importante su perché hanno scollegato: > playerRef - Il riferimento del giocatore in partenza Traduzione: - Enum indica timeout, kick, quit o shutdown del server < > > Questo evento è anche non-cancellabile dal momento che la disconnessione è già avvenuta a livello di rete. The Message Class: Formattazione di testo ricco I proprietari che cercano di creare esperienze di chat lucida trascorreranno un periodo significativo con la classe Messaggio. Situato nel pacchetto di messaggistica core, fornisce un'API fluida per la costruzione di testo formattato. Creazione di messaggi base < < < < > > > > > Semplice messaggio di testo val msg = Message.raw("Ciao, mondo!") // Con la formattazione del colore val styled = Message.raw("Important!") .color("rosso") .bold(true) .italic(false) .monospace(true) Sostituzione del parametro Per il contenuto dinamico, utilizzare i segnaposto dei parametri: val welcome = Message.raw("Welcome, {name}! Hai monete {coin}.) .param("name", player.username) .param("coin", playerData.coinBalance.toString()) Link utili I messaggi possono includere collegamenti ipertestuali cliccabili: val linked = Message.raw("Clicca qui per visitare il nostro sito web") .link("https://example.com") Eventare i modelli di registrazione > Il sistema di eventi Hytale supporta sia la gestione di eventi sincroni che asincroni, offrendo agli sviluppatori flessibilità in base alle loro esigenze di performance. Traduzione: Registrazione Per gli eventi che necessitano di un'elaborazione immediata sul thread del server: eventRegistry.register(PlayerInteractEvent::class.java) > se (event.action Tipo == ActionType.RIGHT_CLICK) { // Elaborare l'interazione event.setCancelled(true) # Traduzione: Asincrono Registrazione > Per gli eventi che possono essere elaborati dal thread principale (come la moderazione della chat): eventRegistry.registerAsync(PlayerChatEvent::class.java) { future -> futuro. poiApplicare { evento) // Eseguire un filtro di chat asincastro se (contieneBannedWords(event.content) (') event.setCancelled(true) # evento # Traduzione: Comunità Tabella di riferimento per gli eventi > Ecco un rapido riferimento per gli eventi più frequentemente utilizzati nello sviluppo del server: > > > Nome dell'evento Proprietà chiave < > > < > > > > > > > > No < > > > > > > > > > > > No PlayerChatEvent PlayerInteractEvent < < > > Sì > > > ι > > > > > Tipo, itemInHand, targetBlock, targetEntity < > > > > > > > > > Non c'e' nessun tipo di gioco. < > > > > > > > > Non c'e' nessun tipo di gioco. < > > BreakBlockEvent InHand, targetBlock, blockType PlaceBlockEvent > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > < > > > < > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > InHand, targetBlock, attualiDamage, danno DropItemEvent < < > > > ι > > > > ι > > > > ι > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > < > > > > > > > > Sì, la quantità, la quantità, la quantità > < > Costruire i comandi personalizzati > Il sistema di comando consente di registrare i comandi slash che i giocatori possono eseguire in chat. Attuazione dei comandi base Traduzione: MyCommand: Comando { override fun getName(): String = "mycommand" override fun eseguire(sender: CommandSender, args: Array) { sender.sendMessage(Message.raw("Ciao dal mio comando personalizzato!")) # # // Registrare nella fase di configurazione del plugin comandoRegistry.registerCommand(MyCommand()) Utilizzare il CommandManager > È inoltre possibile eseguire programmaticamente i comandi: val commandManager = CommandManager.get() comandoManager.handleCommand(sender, "time day") ciclo di vita e struttura Every Hytale server plugin estende la classe base JavaPlugin, che fornisce registri essenziali e ganci ciclo di vita. Plugin Lifecycle Phases > ι ι ι ι ι ι ι ι > ι ι ι ι ι ι > ι ι ι ι ι ι ι ι ι > ι ι ι ι ι ι ι ι ι ι ι > ι ι ι ι ι ι ι ι > ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι ι - Istallazione della classe Plugin PreLoad - inizializzazione asincrona prima dell'avvio del server Setup - Registrare componenti, eventi e comandi Indirizzo/strong> - Il server è pronto ad accettare i giocatori Traduzione: - Pulizia prima che il server si fermi < > Key Plugin Properties < < < < > > > > > Disponibile nella categoria plugin logger: HytaleLogger // Capacità di registrazione manifesto: PluginManifest? // Metadati del plugin dal file manifesto eventRegistry: EventRegistry // Registra gli ascoltatori degli eventi comandoRegistry: CommandRegistry // Registrare i comandi dati Elenco: Percorso // Posizione di archiviazione Plugin taskRegistry: TaskRegistry // Gestione delle attività programmate Aiutante di configurazione Plugins può facilmente caricare i file di configurazione JSON: < < < < > > > > > Utilizzo di default config.json val config: Config = conConfig(MyConfigClass.CODEC) // Utilizzo del nome di file personalizzato val config: Config = withConfig("custom-name.json", MyConfigClass.CODEC) Lavorare con i giocatori > La classe PlayerRef è la vostra interfaccia primaria per interagire con i giocatori collegati. Identità del giocatore e posizione val player: PlayerRef = event.playerRef // Identità Val uuid: UUID = player.uuid nome val: String = giocatore.username lingua val: String = giocatore.language // Posizione Val Transform: Transform = player.transform val worldUuid: UUID = player.worldUuid val headRotation: Vector3f = player.headRotation Accesso all'ingresso del giocatore > Per interazioni più profonde come la gestione dell'inventario, accedere all'entità del giocatore: val playerEntity: Player = player.entity // Operazioni di inventario val inventario: Inventory = giocatoreEntity.inventory giocatoreEntity.sendInventory() // UI manager val hotbar = giocatoreEntity.hotbarManager val windows = playerEntity.windowManager val pages = playerEntity.pageManager val hud = giocatoreEntity.hudManager // Permissioni val canBuild: Boolean = playerEntity.hasPermission("server.build") Gestione mondiale e universo > L'Universo singleton offre accesso a tutti i mondi e ai giocatori collegati. val Universe = Universe.get() // Accesso ai giocatori val allPlayers: List = universal.players Val player Conte: Int = universo.playerCount Val specificPlayer: PlayerRef? = universal.getPlayer(uuid) // Accesso al mondo val worlds: Map = universo.worlds valore predefinito Mondo: Mondo? = universo.defaultWorld valvola specifica Mondo: Mondo? = universo.getWorld("my-world") // Gestione del mondo val newWorld: CompletableFuture = universal.addWorld("newworld") Val caricato: Completabile Future = universal.loadWorld("existing-world") Attenzione alla sicurezza L'accesso completo deve avvenire sul filo del mondo. Avvolgere sempre le operazioni nel blocco di esecuzione: (') // Accesso ai componenti sicuri qui val entità = world.getEntities() Traduzione: Next Steps for Server Developers > Con questo riferimento API come vostra fondazione, siete pronti per iniziare a costruire plugin server Hytale. Risorse chiave per esplorare il prossimo: > Il Sistema di Componenti di Entità (ECS) per la manipolazione di entità avanzata Costruire moduli come NPC, Portal e Sistemi di ricerca * Il sistema di scripting visivo per i comportamenti dei giochi Protocollo di rete per la gestione dei pacchetti personalizzati < > Ricorda che quando Hytale si muove attraverso l'accesso anticipato, l'API può evolversi. Rimanere connessi con la comunità e la documentazione ufficiale come si sviluppa