UiCore
Überblick
UiCore zeichnet Menüs, Karten, ein HUD, Dialoge, eine Minimap und eine Weltkarte im GUI-Raum des Vanilla-Clients, ohne Client-Mod. Dafür verwendet es einen Core-Shader (text.vsh), der vom Resource Pack mitgebracht wird: Alles Gezeichnete ist ein Schrift-Glyph, und der Shader liest Ascent und Farbe des Glyphs, um zu wissen, wo er ihn auf einem festen 15-mal-15-Raster platzieren soll. Das Ergebnis ist für jeden Spieler identisch, unabhängig von GUI-Skalierung, Sichtfeld oder Fenstergröße, und kann überall auf dem Bildschirm erscheinen statt nur dort, wo sich ein Inventar öffnet.
UiCore ersetzt zwei ältere Werkzeuge: AdvancedMenus (Truhenmenüs) und BetterHud. Ein Menü ist kein Truheninventar mehr: Es ist eine Ansicht (View), ein Stapel von Ebenen aus Komponenten, die du im Web-Panel erstellst und auf die der Spieler mit dem Kopf zielt. Dasselbe Raster zeichnet HUD-Module, Dialogzeilen und Auswahlmöglichkeiten.
Der Quellordner dieser Erweiterung trägt den Namen der alten HUD-Erweiterung; der Name der Erweiterung ist UiCore. Sie läuft auf dem BTC-Build von TypeWriter, benötigt CraftEngine zum Hosten des Resource Packs und ist als Alpha markiert (0.1.0-alpha).
Funktionen
- Ansichten — Vollbildschirme mit Panels, Buttons, Listen, Tabs, Unterbildschirmen, Tooltips, Anzeigebalken und Texteingabe.
- Zustände und Animationen — Komponenten ändern sich mit Facts oder Berechtigungen, und eine Ansicht kann mit einem Wipe, einem Bloom oder einem Fade erscheinen.
- HUD-Module — dauerhafte Elemente, an einer Ecke oder der Mitte verankert und ausgeblendet, solange der Spieler einen anderen Bildschirm liest.
- Dialog — gesprochene Zeilen und Auswahlmöglichkeiten, die mit dem Mausrad oder dem Cursor beantwortet werden, mit einem gemeinsamen Style-Entry.
- Cinematic-Dialog — dieselbe gesprochene Zeile auf einer Cinematic-Timeline.
- Minimap und Weltkarte — Geländekarte mit Points of Interest, Waypoints und einem Vermessungsmodus.
- Nameplates — 3D-Nameplates für Mobs und Spieler, mit Bannern, Level-Abzeichen und NPC-Statusanzeigen.
- Banner und Chat-Steuerung — eine einzeilige Ankündigung am oberen Bildschirmrand und eine Aktion, um den Chat an einem Ort stummzuschalten.
- Item-Trigger — öffne eine Ansicht per Rechtsklick auf ein Material.
- Integrationen — zeigt Daten aus Quests, Codex, Battle Pass, Cosmetics, Pets, Social, Wiki und RPG Core an, wenn diese Erweiterungen vorhanden sind.
Installation
- Installiere CraftEngine: Es hostet das Resource Pack, das den Shader, die Schriften und die Bilder mitbringt. Installiere PacketEvents, falls dein Build es nicht bereits mitliefert; es wird für die Chat-Unterdrückung sowie für das Mausrad und die Bewegungstasten verwendet.
- Installiere die TypeWriter-Erweiterungen Entity und Quest sowie die Erweiterung BTCMobs: Sie sind als Abhängigkeiten deklariert.
- Installiere optional die Erweiterungen, aus denen UiCore lesen kann: Ghost, Codex, BattlePass, TinyEssentials, Cosmetics, NumericalStorage, Permissions, Pets, Friend, Party und Guild. Die Erweiterung GUI ist ebenfalls optional: Ist sie vorhanden, liest UiCore die Menüzustände, die sie veröffentlicht.
- Lege die UiCore-JAR in
plugins/Typewriter/extensions/ab und starte den Server neu. - Spiele das UiCore-Resource-Pack-Fragment in das CraftEngine-Pack ein. Das Pack wird mit dem eigenen Tooling der Erweiterung erzeugt (
generate-gui-pack, dannvalidate-gui-pack) und muss vor der dazu passenden JAR eingespielt werden, sonst verschiebt sich jedes Item-Icon ohne Fehlermeldung um eine Position.
Ein Minecraft-Ressourcenbezeichner akzeptiert nur [a-z0-9._-/]. Ein Font-Provider mit einem anderen Zeichen wird vom Client stillschweigend abgelehnt, und der Glyph erscheint als schwarzes Rechteck am oberen Bildschirmrand. Der Pack-Generator weigert sich, einen solchen Pfad zu schreiben.
Erste Schritte
Öffne ein kleines Menü mit einem Kompass.
- Öffne im TypeWriter-Web-Panel eine statische Page und füge einen UI View-Entry hinzu. Setze
viewIdaufhello_menu. - Füge eine Ebene (
layerIdmain) und eine erste Komponente hinzu:placement.kindCELL,column4,row6,width7,height3,paletteSURFACE,hoverPaletteBLUE_LIGHT,textHello,tooltipClick me. - Verknüpfe in
onLeftClickeine Aktion wie einen Befehl oder eine Nachricht. Füge eine zweite Komponente mitnavigateTooder Close UI View zum Verlassen hinzu. - Füge eine Open UI View-Aktion mit
viewIdhello_menuhinzu oder binde ein Item: Füge einen UI Item Trigger mitmaterialCOMPASSundviewIdhello_menuhinzu. - Veröffentliche. Rechtsklicke einen Kompass: Der Bildschirm erscheint, ziele mit dem Kopf auf den Button und klicke.
Funktionsweise
Eine Ansicht ist eine Liste von Ebenen (von hinten nach vorn); eine Ebene enthält Komponenten; eine Komponente gibt an, wo sie sitzt, wie sie gemalt wird, was sie zeigt und was ein Klick auslöst. Drei Grenzen stammen aus der Kodierung, nicht aus dem Code:
- Eine Tönung ist ein Index. Die Farbe einer Zelle trägt ihre Spalte, Zeile und ihren Paletten-Index, Tönungen stammen also aus einer festen benannten Palette (
SURFACE,BLUE_LIGHT,GOLD...), nicht aus freien Hex-Werten. - Bilder sind billig, Schriften sind knapp. Eine Komponente kann mit einem Panel-Bild gemalt werden; beliebig viele Bilder teilen sich eine Schrift. Die Texttönung stammt aus der Schrift, und das Pack liefert 16 Texttönungen, sodass eine 17. auf Weiß zurückfällt.
- Nichts gleitet, und Text blendet nicht aus. Eine Animation deckt Zellen in einer Reihenfolge auf. Text erscheint mit seinem Panel.
Offene Ansichten starten nicht, solange der Spieler fällt (der Spieler erhält eine Nachricht). Eine Renderer-Kette (rendererOrder von UI Configuration) entscheidet, welcher Renderer eine Ansicht bedient: GUI (dieser Shader), DIALOG, SPATIAL oder CHEST.
Menüs
Öffnen
Eine Ansicht kann geöffnet werden durch:
- die Aktion Open UI View (
viewId); - den Befehl
/ui open <viewId>aus einem UI View Commands-Entry; - einen UI Item Trigger, der eine Ansicht öffnet, wenn der Spieler mit einem bestimmten Material rechtsklickt (beanspruchen zwei Ansichten dasselbe Material, wird eine Warnung protokolliert, und nur die letzte öffnet sich);
- das
openMaterialder Minimap, das die Weltkarte öffnet.
Close UI View oder /ui close schließt sie.
Layout und Komponenten
Das Raster hat für Menüs 15 Spalten mal 15 Zeilen. placement.kind ist CELL (eine Zelle auf dem Raster: column, row, width, height), MARKER (eine Position von 0 bis 1 über den Viewport, x und y, begrenzt) oder SCRIM (ein Vollbild-Schleier). Ein Button benötigt mehrere Zellen, um leicht anvisierbar zu sein.
| Komponentenfeld | Wirkung |
|---|---|
palette, hoverPalette, disabledPalette | Tönung im Ruhezustand, unter dem Cursor und solange die criteria nicht zutreffen. |
background | Ein Panel-Bild aus dem Pack (Nine-Slice) statt einer flachen Tönung; backgroundBinding wählt das Bild über einen Platzhalter. |
text, textPalette, textAlign, textEffect | Text, der über die Komponente gezeichnet wird. |
icon, lineIcon | Das Bild eines Materials, das vor dem Text gezeichnet wird oder die Zeile abschließt. |
image, imageBinding | Ein Pack-Bild, das unter Beibehaltung des Seitenverhältnisses in die Komponente eingepasst wird. |
label, tooltip | Text, der neben dem Bildschirm oder am Tooltip-Anker angezeigt wird, solange der Cursor auf der Komponente ruht. |
gauge | Zeichnet einen Balken aus einem Platzhalter mit einem Wert von 0 bis 100 (zum Beispiel btcui_health_percent). |
binding | Ein Platzhalter, aus dem die Komponente ihren Wert bezieht. |
criteria, onLeftClick, onRightClick | Bedingungen für den Klick und die ausgelösten Entries. |
navigateTo | Öffnet einen anderen Bildschirm derselben Ansicht. |
input | Bittet den Spieler, einen Wert einzutippen; onInputCommands werden über die Konsole ausgeführt, wobei {input} und %player% ersetzt werden. |
Bildschirme, Listen und Zustände
- Knoten (
nodes,rootNodeId) deklarieren Tabs und Unterbildschirme, die jeweils wählen, welche Ebene welche benannte Region füllt. Titel speisen die Brotkrumen-Navigation. - Wiederholungen (
repeatsauf einer Ebene) zeichnen ein Fenster über nummerierte Quellen: Elementnliest das Binding<source>.<n>.stepModePAGEblättert pro Geste ein ganzes Fenster,ITEMbewegt um eins. - Zustände (
states) ändern Komponenten, solange eine Bedingung gilt: eine Tönung, Text, Tooltip, Icon, Panel oder Sichtbarkeit. Aktiv ist der Zustand mit der höchsten Priorität, dessen Bedingungen zutreffen, ein Zustand kann eineparentIdverfeinern, und eine Komponente wird über ID odercolumn:rowangesprochen. Zustände werden bei jedem Neuzeichnen neu ausgewertet. - Auftritt (
opening,openingMillis,openingFade):WIPE_DOWN,WIPE_UP,WIPE_RIGHT,WIPE_LEFT,BLOOModerFADE. Er wird nur beim Betreten der Oberfläche abgespielt, nicht zwischen zwei Bildschirmen.
Palette
FRAME, SURFACE, SURFACE_LIGHT, MUTED, BLUE, BLUE_LIGHT, CYAN, TEAL, GREEN, GREEN_LIGHT, YELLOW, ORANGE, RED_DARK, RED, PURPLE, WHITE, BLACK, INK, SLATE, STEEL, STEEL_LIGHT, MIST, PAPER, FOREST, MINT, GOLD, AMBER, WINE, CORAL, VIOLET. NONE zeichnet nichts.
Interaktion
Der Cursor folgt dem Kopf des Spielers: Gieren und Neigen werden auf das Raster projiziert und an einer Zelle eingerastet. Spieler ändern seine Geschwindigkeit mit /ui sensitivity <degrees>: Ein größerer Winkel bedeutet einen langsameren Cursor.
- Links- und Rechtsklick lösen
onLeftClickundonRightClickaus; das Mausrad scrollt Listen und Tabs; Schleichen ist eine Abkürzung, die die Ansicht schließt (außer solange eine Forschungsbaum-Liste den Fokus hat). - Die Ansicht weicht der Welt: Wegbewegen, ein Teleport, Schaden erleiden oder das Öffnen eines Inventars schließt sie.
- Solange eine Ansicht geöffnet ist, wird der Chat anderer Spieler vom Bildschirm ferngehalten, und Servernachrichten werden vom UI-Chat statt vom Vanilla-Chat neu gezeichnet.
HUD-Module
UI HUD-Entries verwenden dieselben Ebenen und Komponenten wie eine Ansicht, verankert an einer corner (TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT, CENTRE); Versätze zählen von dort nach innen. priority entscheidet, welche von zwei überlappenden Gruppen oben gezeichnet wird, und visibility steuert die Gruppe. HUD-Module werden automatisch ausgesetzt, solange eine Ansicht, ein Dialog, eine Cinematic oder die Weltkarte den Bildschirm besitzt.
Dialog
UI Spoken Dialogue zeigt eine Zeile mit dem Namen des Sprechers, einem optionalen portrait, einer Tipp-duration (null zeigt sie sofort) und einem sound. UI Option Dialogue fügt Auswahlmöglichkeiten hinzu (options): navigation ist KEYS (Mausrad und Bestätigungstaste), CURSOR oder beides (Standard); ein timer bricht den Dialog ab und löst cancelTriggers aus; jede Auswahl hat criteria (sie wird gesperrt gezeichnet oder mit hideWhenLocked ausgeblendet), einen lockedReason, der im gesperrten Zustand statt ihres Tooltips angezeigt wird, sowie modifiers und triggers. Beide nehmen einen style-Entry entgegen; lass ihn leer, um den eigenen des Servers zu verwenden.
UI Dialogue Style definiert das Aussehen in Rasterzellen: speech (Rahmen, Textbereich, Sprecher-Banner, Porträt), options (Fenster, Panel, Tönungen für ausgewählte und gesperrte Auswahlmöglichkeiten, Caret und Scroll-Pfeile, optionale zweite Spalte) und chrome (Bild der Bestätigungstaste, Countdown-Zeile, Letterbox-Zeilen). UI Spoken Cinematic legt Zeilen mit den Segmenten startFrame und endFrame auf eine Cinematic-Page.
Karten und Nameplates
Die dauerhafte Minimap wird durch Minimap Settings konfiguriert (worlds und excludeListedWorlds, size, blocksPerCell, borderThickness, openMaterial, maxWaypoints, worldMapAreas), ihre Punkte durch Minimap Points of Interest. Ihre Position auf dem Bildschirm wird im Resource Pack festgelegt, nicht hier, weil der Server weder die Auflösung noch die GUI-Skalierung kennt. Die Weltkarte öffnet sich per Rechtsklick auf openMaterial oder mit /worldmap; im normalen Spiel wird sie aus dem gefüllt, was die Minimap liest, und der Vermessungsmodus kartiert gezielt einen größeren Radius.
Nameplates sind dreidimensional und pro Betrachter. Global Nameplate zeichnet Zeilen über Mobs (entityTypes, btcMobsOnly, lines, viewDistance, requireLineOfSight ...). Player Nameplate Banner definiert wählbare Banner-Hintergründe (ein CraftEngine-Bildpräfix mit den Teilen _left, _middle und _right), und die Wahl des Spielers wird in einem Auswahl-Artifact gespeichert. Nameplate Settings legt Entfernungen, Budgets und die Lebenseinheit fest; Level Badge Settings legt das Wort fest, das vor einem Level geschrieben wird (Standardpräfix, kann ein Übersetzungs-Platzhalter sein). NPC Status Override setzt ein Anzeigemodell (verfügbar, aktiv, Interaktion ...) über einen NPC.
Befehle
| Befehl | Beschreibung |
|---|---|
/ui open <viewId> | Öffnet eine Ansicht. |
/ui close | Schließt die geöffnete Ansicht. |
/ui sensitivity [degrees] | Zeigt oder setzt deinen Cursor-Schwenkwinkel in Grad. |
/ui icons [materials] | Gibt Item-Icons im Chat aus, um die Sprite-Schrift zu prüfen. |
/ui chat vanilla | Nur Operatoren: gibt dir den Vanilla-Chat, bis du die Verbindung trennst oder den Befehl erneut ausführst. |
/worldmap | Öffnet oder schließt die Weltkarte. |
/worldmap survey, forget, stats, minimap, waypoint <name>, waypoint clear, save, debug | Vermessungsmodus, deine Karte vergessen, ihre Größe anzeigen, die Minimap umschalten, Waypoints umbenennen oder löschen, speichern und eine Diagnose ausgeben. |
/nameplates (Aliase /nameplate, /btcnameplates) | equip <id>, unequip, preview [id], list, toggle [on|off] und die Admin-Formen force-equip, force-unequip, force-preview, admin-toggle. |
Die Namen von /ui und /worldmap stammen aus den Feldern commandName ihrer Entries. Ihr Feld permission ist ein von dir gewählter Berechtigungsknoten: leer bedeutet alle. /worldmap survey, forget, save und der Vermessungsschalter verwenden surveyPermission.
Berechtigungen
| Berechtigung | Gewährt |
|---|---|
permission von UI View Commands | /ui-Unterbefehle (leer: alle). |
permission und surveyPermission von World Map Command | /worldmap sowie Vermessen und Vergessen (leer: alle). |
btcnameplates.command.equip, .unequip, .preview, .list, .toggle | Die passenden /nameplates-Unterbefehle für Spieler. |
btcnameplates.command.admin.force_equip, .force_unequip, .force_preview, .toggle | Die Admin-Unterbefehle von /nameplates. |
visibility.permission an Komponenten und Gruppen | Zeigt oder verbirgt ein Element für Spieler ohne den Knoten. |
Platzhalter
MiniPlaceholders-Expansion btcui, für Komponenten, Anzeigebalken und Text.
| Platzhalter | Gibt zurück |
|---|---|
<btcui_level_glyph:37> | Eine beliebige Zahl, geschrieben als farbige Level-Ziffern des Packs. |
<btcui_global_level_glyph>, <btcui_global_level>, <btcui_global_level_badge> | Das globale Level als Glyphen, Ziffern oder mit dem konfigurierten Präfix. |
<btcui_global_percent>, <btcui_global_detail>, <btcui_xp_detail> | Fortschritt zum nächsten globalen Level und seine Zahlen. |
<btcui_health>, <btcui_health_max>, <btcui_health_percent>, <btcui_absorption> | Leben und Absorption. |
<btcui_food>, <btcui_food_max>, <btcui_food_percent>, <btcui_saturation> | Hunger. |
<btcui_air>, <btcui_air_max>, <btcui_air_percent>, <btcui_air_gauge> | Luftvorrat; der Anzeigebalken ist leer, solange der Spieler keine Luftnot hat. |
<btcui_xp_level>, <btcui_xp_progress>, <btcui_xp_percent> | Die Vanilla-Erfahrungsleiste (für Verzauberungen verwendet). |
<btcui_riding>, <btcui_mount_name>, <btcui_mount_health>, <btcui_mount_health_max>, <btcui_mount_health_percent>, <btcui_mount_gauge> | Das Reittier. |
<btcui_underwater>, <btcui_swimming>, <btcui_burning>, <btcui_freezing> | Spielerzustände. |
<btcui_x>, <btcui_y>, <btcui_z>, <btcui_world_time>, <btcui_world_day> | Position und Zeit. |
<btcui_banner>, <btcui_actionbar>, <btcui_chat:...> | Aktuelles Banner, Actionbar und Chatzeilen, die von der UI gezeichnet werden. |
Entries
26 Einträge, aus dem Quellcode der Erweiterung generiert.
Aktionen5
- Close UI ViewClose UI View
- Mute UI ChatMute UI Chat
- Open UI ViewOpen UI View
- UI BannerUI Banner
- Unmute UI ChatUnmute UI Chat
Zielgruppen2
- NPC Status OverrideNPC Status Override
- UI Look AudienceLooking At A Position
Cinematics1
- UI Spoken CinematicUI Spoken Cinematic
Entitätsdaten1
- BTC Nameplate DataConfigure native text lines and an optional 3D attachment
Befehle2
- UI View CommandUI View Commands
- World Map CommandWorld Map Command
Artefakte1
- BTC Player Nameplate Selection ArtifactStores each player's selected nameplate banner
Manifeste12
- BTC Global NameplateGlobal mob nameplate
- BTC Player Nameplate BannerPlayer nameplate banner
- Minimap PoiMinimap Points of Interest
- Minimap SettingsMinimap Settings
- UI ConfigurationUI Configuration
- UI Dialogue StyleUI Dialogue Style
- UI HUDUI HUD
- UI Item TriggerUI Item Trigger
- UI Level Badge SettingsPrefix written before every level badge
- UI Nameplate SettingsShared nameplate visibility and health units
- UI Token ShopToken Shop Catalogue
- UI ViewUI View
Fehlerbehebung
Schwarze Rechtecke oder Tofu, wo Text und Zellen sein sollten. Das Resource-Pack-Fragment fehlt, ist veraltet oder wurde nach der JAR eingespielt, oder ein Font-Pfad enthält ein Zeichen außerhalb von [a-z0-9._-/]. Spiele zuerst das Pack und dann die passende JAR neu ein und prüfe, ob CraftEngine es neu geladen hat.
Item-Icons zeigen das falsche Item. Pack und JAR passen nicht zusammen: Das Zeichen eines Icons ist sein Rang in der Tabelle, sodass ein nach der JAR erzeugtes Pack jedes Icon verschiebt. Erzeuge und validiere das Pack neu und spiele dann beides erneut ein.
Ein Item öffnet ein leeres Menü. Zwei UI Item Trigger-Bindungen beanspruchen dasselbe Material; das Log meldet est reclame par ... mit der Komponentenanzahl jeder. Entferne die überzählige Bindung.
names view '<id>', which no page defines. Die der Aktion, dem Befehl oder dem Item übergebene viewId entspricht keiner veröffentlichten UI View. Eine Ansicht, die declared but incomplete ist, hat keine Ebene oder Komponente, die aufgelöst werden könnte.
Das Menü öffnet sich nicht mitten in der Luft. UiCore lehnt es ab, einen Bildschirm zu öffnen, solange der Spieler fällt. Versuche es erneut auf dem Boden.
Der Chat ist verschwunden. UiCore zeichnet den Chat selbst: Eine Ansicht ist geöffnet, ein Mute UI Chat ist aktiv, oder der Spieler hat ihn ausgeschaltet. Verwende Unmute UI Chat, wenn du den Ort verlässt, an dem du stummgeschaltet hast; Operatoren können mit /ui chat vanilla den Vanilla-Chat prüfen.
Gesten funktionieren nicht mehr. Gesture decoding unavailable im Log bedeutet, dass PacketEvents nicht starten konnte: Mausrad und Bewegungstasten gehen verloren, Klicks funktionieren aber weiterhin.
Verwandte Erweiterungen
- TinyEssentials — Wiki-, Home- und Tab-Daten, die von Ansichten angezeigt werden.
- RPG Core — Fortschritts-, Lager- und Garderobenpanels verwenden UiCore.
- Codex, BattlePass, Cosmetics, Pets — Datenbildschirme.
- Party, Friend, Guild — soziale Panels.
- GUI — Truhenmenüs; UiCore teilt die von ihm veröffentlichten Menüzustände.