Keller-Dev Docs · Java & Hytale

Tile-based Rendering & Camera Transformation Java Advanced
1. Grundprinzip & Koordinaten-Transformation Um Kacheln (Tiles) und Entitäten auf dem Bildschirm korrekt darzustellen, müssen deren statische oder dynamische …
#rendering #tilemanager #camera-transformation #screen-space #world-space #java-graphics
Zusammenfassung: Entity-Component-System (ECS) Architektur Java Advanced
1. Grundprinzip & Philosophie Das Entity-Component-System (ECS) ist ein architektonisches Entwurfsmuster, das Daten strikt von der Logik trennt (Composition …
#ecs #architecture #design-pattern #decoupling #java #2d-engine
ECS Datenfluss Java Advanced
1. Systemübersicht & Sequenzieller Datenfluss Die Verarbeitung im Game Loop erfolgt strikt sequenziell in jedem Frame: InbutSystem -> MovementSystem -> Ca …
#ecs #gaming #RPG #architecture #design-pattern #game-loop #camera-system #clamping #coordinate-transformation #math #rendering #swing #2d-rendering
Farb- und Präfix-Codierung zur direkten Erfassbarkeit von Entitätszuständen Java Core
Zur visuellen Unterscheidung von Zuständen in UI-Listen (z. B. offene vs. erledigte Aufgaben) kombiniert die Zeichenlogik dynamische Farbwechsel mit veränderten …
#ui #hud #user-experience #rendering #color-coding
Dynamische Datenfilterung für Benutzeroberflächen basierend auf Domain-Zuständen Java Core
Nicht alle im Speicher gehaltenen Daten einer Entitätsliste sollen dem Spieler im HUD angezeigt werden. Noch nicht von NPCs angenommene Quests (NOT_STARTET) ver …
#ui-filtering #state-pattern #hud #quest-system #clean-code
Entkoppeltes Rendering eines persistenten Quest-Trackers Java Core
In Ergänzung zu Modals/Dialogfenstern erfordern UI-Elemente wie ein Quest-Tracker eine permanente Anzeige auf der Bildschirmoberfläche (Screen-Space). Implemen …
#hud #rendering #screen-space #ui #quest-tracker
Abhängigkeitsreihenfolge bei der Instanziierung gegenseitig verknüpfter Objekte Java Core
Wenn Objekte (wie ein NPC) Abhängigkeiten zu anderen Objekten (wie einer Quest oder DialogBox) besitzen, muss die Erstellungsreihenfolge im Container / der Pane …
#dependency-injection #initialization-order #architecture
Testen und Abfangen illegaler Zustandsübergänge zur Laufzeit Java Core
Beim Ausführen von Aktionen, die State-Machine-Übergänge anstoßen, müssen Ausnahmen gezielt abgefangen werden, damit unerwartete Eingaben nicht den gesamten Gam …
#game-loop #exception-handling #debug #state-machine #input
Dynamische Interaktionslogik basierend auf Entitäts-Zuständen Java Core
Die Interaktionsmethode eines NPCs wertet den aktuellen Zustand einer verknüpften Quest dynamisch aus. Abhängig vom Status verändert sich sowohl der im Dialog a …
#npc #dialog #enum-switch #quest-system #interaction
Kapselung von Zuständen und Validierung von Zustandsübergängen Java Core
Statt freien Schreibzugriff auf Zustände über setStatus() zuzulassen, schützt das Objekt seine eigenen Zustandsübergänge durch explizit benannte Methoden (z. B. …
#state-machine #encapsulation #domain-logic #validation #exceptions
Phasengerechte Trennung von Datenmodell (POJO) und State Machine Logic Plugin-System
In frühen Entwicklungsphasen werden Entitäten primär als Datenbehälter (Plain Old Java Objects / POJOs) definiert, um die Kernstruktur zu etablieren. Validierun …
#pojo #state-machine #decoupling #clean-code
String-basierte Schlüssel-IDs für spätere Data-Driven Architecture Java Core
Obwohl Enums für Status-Typen ideal sind, wird für die Eindeutigkeit (id) von Quests oder Items auf String-Identifikatoren gesetzt. Hintergrund & Best Practice …
#architecture #data-driven #serialization #json #extensibility
Verwendung von Enums zur Verhinderung ungültiger Systemzustände Java Core
Anstelle von primitiven Datentypen (wie int oder String) werden Statuszustände in Game-Systemen bevorzugt über enums abgebildet. Dies verhindert, dass nicht def …
#enum #type-safety #state-management #domain-driven-design
Spezialisierung von Interaktionsobjekten mittels Vererbung Java Core
Die Modellierung der Welt-Objekte nutzt eine "ist-ein"-Beziehung (is-a). Ein NPC erweitert InteractableObject. Details:Vererbung gemeinsamer Attribute: Gitterp …
#op #inheritance #polymorphic-design #game-entities
Input-Blocking & Abfang-Logik bei aktiven UI-Modals Java Core
Wenn ein UI-Element (wie eine Dialogbox) aktiv geöffnet ist, müssen Interaktionen mit der Spielwelt konsumiert werden, um unbeabsichtigte Doppel-Aktionen (z. B. …
#input #modal #dialog #state-machine #interaction
Reine Model-Klassen für Benutzeroberflächen (DialogBox) Java Core
Die UI-Zustandshaltung sollte strikt von Ein- und Ausgabesystemen getrennt sein. DialogBox speichert lediglich Daten (text, visible) und bietet Methoden zu dere …
#mvc #architecture #decoupling #clean-code
Trennung von Spielwelt-Kamera und HUD/UI-Rendering Java Core
In 2D-Spielen mit scrollender Kamera müssen zwei Arten von Zeichenoperationen unterschieden werden: Welt-Objekte (Tiles, Player, NPCs) und UI/HUD-Elemente (Dial …
#swing #rendering #camera #hud #ui #graphics2d
Interface-basierte Entkopplung von Interaktionsobjekten Plugin-System
Das Interaktionssystem verbindet die Blickrichtung des Spielers (facingRow / facingCol) mit Objekten in der Welt. Design-Patterns:Interface Interactable: Ermög …
#interface #decoupling #facing-direction #grid-interaction
Flankenerkennung für Einzeltastendrücke (consumeJustPressed) Java Core
Kontinuierliche Bewegung benötigt isPressed() (State-Handling). Aktionen wie Interagieren, Menü-Öffnen oder Angreifen dürfen jedoch nur einmal pro Tastendruck f …
#input #edge-detection #keybindings #thread-safety #concurrency
2D-Kollisionsprüfung auf AABB-Basis mit Achsentrennung Java Core
Wird die Bewegung auf X- und Y-Achse gleichzeitig geprüft, bleibt der Charakter an Hindernissen hängen. Durch eine getrennte Prüfung bewegt sich der Spieler ent …
#collision #aabb #sliding #2d-physics #grid
Dynamische 2D-Kameraführung mit Graphics2D-Transformation Java Core
Die Kamera entkoppelt die Spielfeldgröße von der eigentlichen Fenstergröße (Viewport). Statt Objekte beim Rendern manuell umzurechnen, transformiert die Kamera …
#camera #viewport #graphics2d #clamp #rendering
Tastatur-Fokus nach Fenstererstellung erzwingen Java Core
Ein häufiger Fehler bei Desktop-Anwendungen in Java ist, dass nach dem Öffnen des Fensters Tastatureingaben ignoriert werden, weil kein Element explizit den Fok …
#swing #focus #input #ui-lifecycle
TileMap Grid Rendering & Debug-Gitterlinien Java Core
Beim Zeichnen einer gitterbasierten Karte wird mit verschachtelten Schleifen (row / col) über das 2D-Array iteriert. Praxis-Tipps: Farbzuweisung über Enum/K …
#graphics2d #rendering #tilemap #debug #alpha-channel
Dynamische Fenstergröße basierend auf TileMap-Dimensionen Java Core
Anstatt feste Fenstergrößen (wie 800x600) zu verwenden, sollte sich die Dimension des Canvas (JPanel) dynamisch aus den Kartendaten berechnen. Dadurch wird verm …
#swing #tilemap #window-size #pack #layout
Defensive Programmierung bei Asset-Ladevorgängen Sonstiges
Wenn Spieldateien (wie Texturen oder Maps) nicht geladen werden können (z. B. falscher Relativpfad beim Start außerhalb der IDE), sollte die Anwendung nicht dir …
#exception-handling #fallback #clean-code #defensive-programming
Swing Threading Rules & Graceful Shutdown Java Core
Swing-Komponenten sind nicht thread-sicher und müssen zwingend auf dem Event Dispatch Thread (EDT) erzeugt und manipuliert werden. Graceful Shutdown: Beim S …
#swing #edt #thread-safety #window-listener #lifecycle
TileMaps effizient aus Textdateien laden (2D-Array) Java Core
Verwendung von java.nio.file.Files zum Einlesen von Grid-Karten aus Textdateien. Vorgehen: Datei mittels Files.readAllLines(Path.of(path)) in eine List<Stri …
#file-io #nio #2d-array #tilemap #parsing
2D-Spielerbewegung mit Delta-Time & Normalisierung Java OOP
Zwei wichtige Grundlagen für ruckelfreie und faire Bewegung in Spielen: Floating-Point-Koordinaten: Positionen (x, y) müssen als double geführt werden, um bei …
#math #2d-physics #player-movement #delta-time #vector-math
Input-Handling: Swing Key Bindings vs. KeyListener Java Core
Ein klassischer KeyListener verliert die Tasteneingaben, sobald das Panel den Fokus verliert. Key Bindings über JComponent.WHEN_IN_FOCUSED_WINDOW reagieren verl …
#swing #input #keybindings #concurrency #concurrent-hashmap
Game Loop mit fester Taktung (FPS/UPS) & Delta-Time Java Advanced
Eine while(true)-Schleife ohne Bremse läuft auf jedem Rechner unterschiedlich schnell. Um eine konstante Spielgeschwindigkeit zu garantieren, wird die verstrich …
#game-loop #threads #delta-time #concurrency #java
Grundsätzlicher Aufbau einer UI-Datei UI-System
Eine .ui-Datei ist ein Hytalespezifisches Markup-System. Die Grundlegende Syntax ist hier beschrieben
#ui #markup
Prüfen ob Welt bereits existiert Plugin-System
Welten werden in Universe gespeichert. Abrufen kann man diese mit der static Universe.get() methode
#worldgen #Universe #generierung