Commit Graph

146 Commits

Author SHA1 Message Date
867a895c6e Fehler beim Platzieren von Objekten behoben 2026-10-06 08:54:09 +02:00
c3e028b9f8 Stein Tool ein wenig überarbeitet 2026-10-05 22:14:54 +02:00
7069c5f632 Voxel Umstellung vollendet 2026-10-05 08:58:59 +02:00
4ed61998dd voxel umgestellt 2026-10-04 17:05:18 +02:00
17efa86f34 Schwert und Schild kampfsystem weiter ausgebaut 2026-10-04 10:59:27 +02:00
0a7c7bc6d1 Kampfsystem: NPC verhalten weiter angepasst, einige Bugs gefixed 2026-09-27 20:57:04 +02:00
da8e5e99f1 Begonnen: Verhalten von Gegnern bei annäherung, Verfolgung etc 2026-09-27 00:12:26 +02:00
ed0d622bfd Sounds für das Kampfsystem hinzugefügt 2026-09-23 19:47:05 +02:00
ef061b2726 Weiter am Kampfsystem gearbeitet - hier: Schwert und Schild 2026-09-20 22:17:29 +02:00
836b5d3d99 Weiter am Kampfsystem gearbeitet, hier Schwertkampf und die animationen 2026-09-20 17:16:43 +02:00
bdaeed056c Beginn des Kampf Systems 2026-09-15 17:19:21 +02:00
1d6f43f9ce LOD für Palmen und Trauerweiden angepasst 2026-09-14 21:57:41 +02:00
45f7ee1045 Objekte können jetzt Sounds haben (z.B. Lagerfeuer). Sound System optimiert 2026-09-14 16:09:21 +02:00
08c76a798d Malen und Editieren von Zonen erweitert 2026-09-13 21:33:30 +02:00
6cf7234ab1 Wege System erweitert 2026-09-13 20:39:07 +02:00
320b0834b9 Shortcuts für Brush Tools ergänzt 2026-09-13 14:48:37 +02:00
6e2c3a2785 Abschluss des großen Editor Refactorings 2026-09-13 12:20:53 +02:00
feef7cab62 Bugfixes: ObjectController-Toolbar, Emitter ingame, Esc-Shortcut
ObjectController: Welt-Toolbar bleibt beim F7-Öffnen sichtbar (kein
eigener Toolbar mehr). Modus wechselt automatisch: Platzieren wenn
Modell/Ordner ausgewählt, sonst Bearbeiten. Neuer Button + Esc-Shortcut
zum Aufheben der Platzierungs-Auswahl.

WorldScene: EmitterSystem eingebunden — platzierte Emitter werden jetzt
auch im Spiel geladen und proximity-basiert aktiviert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-12 21:47:32 +02:00
8f0cf7bc42 Phase 5: Atmosphere, Water, Voxel, Grass aus EditorApp extrahiert (-1.170 Z.)
- AtmosphereController: Licht- + Emitter-Panel, updateLight/Emitter, onFrame()
- WaterController: Wasser- + Wasserfall-Panel, updateWater/Waterfall, onFrame()
- VoxelController: VoxelMerged- + Klippen-Panel; sculptPanelSupplier-Injection
  für showToolParameters-Delegation; onCliffGenerateKeyPressed() für Keyboard
- GrassController: Gras-Panel + GrassTextureUI; viewport/showToolParams/
  normalMapLoader injiziert; buildGrassTextureUI() auch von showToolParameters
  in EditorApp aufgerufen
- EditorApp: controller.onFrame()-Aufrufe im AnimationTimer; Toolbar-Buttons
  delegieren an controller.buildPanel(); Timer-Blöcke für Selection-Changes
  aus EditorApp entfernt (→ onFrame); Felder lightDynamic, waterDynamic,
  voxelCliff*, grassSub*, lightBtn/emitterBtn/waterBtn/riverBtn/voxelBtn entfernt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 11:01:14 +02:00
bf1bb4fd16 Phase 4 Bugfixes: viewportSupplier, registry-State, currentTool-Checks
- ToolContext: viewportSupplier liefert worldViewport statt centerStack
  (setCenterView(centerStack) wäre self-parent JavaFX-Exception)
- switchToWorldEditor: registry.deactivateAll() + currentTool-Checks
  durch registry.activeToolId() ersetzt (currentTool wurde nie auf
  "objecteditor"/"modeleditor" gesetzt)
- ToolRegistry: deactivateAll() hinzugefügt
- ModelEditorController.openModelEditor: Idempotenz-Fix wie activatePlaceMode
  (bei bereits aktivem Controller activate() direkt aufrufen)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 10:45:57 +02:00
f1b321731b Phase 4: ObjectController + ModelEditorController aus EditorApp extrahiert
EditorApp: 11.519 → 9.293 Zeilen (-2.226)
- de.blight.editor.toolset.object.ObjectController (Objekt-Platzieren/Bearbeiten)
- de.blight.editor.toolset.model.ModelEditorController (Modell-Editor + Modell-Import)
- Timer-Blöcke für Objekt/Modell aus EditorApp entfernt; registry.onFrame() delegiert
- Alle Aufruf-Sites auf die neuen Controller umgestellt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-11 10:03:46 +02:00
f0a0c216f6 Refactoring Phase 3: AnimPreview + AnimSet aus EditorApp extrahiert
AnimPreviewController und AnimSetController in de.blight.editor.toolset.anim/
extrahiert (~1500 Zeilen raus). EditorApp: 13.187 → 11.650 Zeilen.
ToolContext um registry-Parameter erweitert, damit AnimSetController sich
nach Picker-Dialog selbst aktivieren kann.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-10 22:28:09 +02:00
e4b0ee0dc3 Refactoring Phase 2: Vegetation & EzTree aus EditorApp extrahiert
- Neue Infrastruktur: ToolController, ToolRegistry, ToolContext (record)
- VegetationController: alle ~1000 Z. Vegetation-State + Panels ausgelagert
  (Baum, Farn, Palme, Fruchtbusch, Weinpflanze, Trauerweide)
- EzTreeController: EzTree-State, Toolbar, Panel + buildLevelSection()
- UiHelper: shared static UI-Helpers (bold, sectionTitle, ezFloat, …)
- EditorApp: 14 222 → 13 187 Zeilen (-1035); switchToVegetationGenerator()
  und switchToEzTree() delegieren an registry.activate()
- F5/F6: hybrides Routing – migrierte Tools über ToolController.onPreview()
  / onRandomSeed(), nicht-migrierte über bestehende Runnable-Felder
- AnimationTimer: treePreviewResized + treeGenStatusMsg → registry.onFrame()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-10 21:23:46 +02:00
52801b5ddf Ingame Karte weitergebaut 2026-09-07 22:22:27 +02:00
9fa1643264 Karte: Pfad-Erkennung durch Sculpted-Mesh-Tunnel repariert
Die bisherige Y-Check-Methode versagte bei Tunneln aus Sculpted Mesh,
weil bakeVoxelSurface nur VoxelChunk-Daten liest und NaN liefert.

- loadCaveMask: buildCaveFootprintMask bei 2048px statt buildCaveTunnelMask
  bei 1024px (kein MIN_FOOTPRINT-Filter der schmale Tunnel eliminiert)
- isCavePoint: erkennt Maskengröße automatisch (1024 oder 2048px)
- buildTunnelContourPaths: Größe dynamisch aus Maskenlänge
- isNodeUnderground: Cave-Maske als primäre Prüfung, Y-Check als Fallback
- Segment-Abtastung: 7 Punkte statt Mittelpunkt (erkennt Tunnel an jeder
  Position im Segment, nicht nur bei 50%)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-07 13:37:23 +02:00
7f5be2b65d Karte: 3 Korrekturen nach User-Feedback
- Weltkarte: Cave-Overlay (brown fill + Kontur) vollständig entfernt,
  war nie gewünscht; drawTunnelOverlay tut nun nichts
- Pfad-Detection: Cave-Maske als Filter entfernt; Grund: MIN_FOOTPRINT_
  Filter in buildCaveMasks (≥40 Pixel bei 1024px) schmeißt schmale
  Tunnel raus und würde Tunnel-Segmente blocken. Stattdessen reiner
  Y-Check: voxelSurface > pathY + 3m (Tunneldecke direkt über dem Weg)
- Höhlenkarte: Pixel-Bild ersetzt durch Vektor-Füllung (gc.fill auf
  tunnelContourPaths) → bleibt bei jedem Zoom-Level scharf

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-07 12:06:52 +02:00
f29580cb3b Karte: Tunnel-Rendering verbessert, Pfad-Erkennung robuster
- Pfad-Split: Sandwich-Maske (per-Spalte, fragil) ersetzt durch
  Chunk-Level-Cave-Maske + Y-Prüfung; erkennt schmalere Tunnel
  zuverlässig und vermeidet extra Disk-Scan
- Weltkarte: Tunneleingang-Halbkreise ersetzt durch gefüllte
  Fläche (semi-transparent braun) + glatte Chaikin-Kontur
  (ähnlich Wasser-Rendering)
- Höhlenkarte: smooth Kontur-Overlay (warmweiss) um die
  Tunnelfläche ergänzt, zusätzlich zu den D-Eingängen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-07 10:22:48 +02:00
dc7c326441 Karte: Zoom-Fix, Layout-Sync, Sandwich-basierter Pfad-Split
- Zoom-Bug behoben: CaveMapView auto-lud mit Canvas 0×0 (scale=1.0 ungültig)
  → Tab-Sync jetzt nur wenn isViewInitialized() (zoomLevels != null)
- Layout-Fix: CaveMapView-Statusleiste unter dem Canvas (wie WorldMapView),
  nicht mehr darüber → Canvas-Höhe jetzt identisch → Position-Sync 1:1 korrekt
- Auto-Load aus CaveMapView.redraw() entfernt; deferred fitToView() stattdessen
- Pfad-Split: Sandwich-Maske (solid→void≥3→solid per Spalte) verhindert
  False-Positives an Klippen-Füßen; Wege werden nur als unterirdisch erkannt
  wenn in ihrer X,Z-Spalte ein echter Hohlraum (Tunnel) vorliegt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-07 07:26:01 +02:00
8430eb41d6 Karte: Y-basierter Pfad-Split, Label/Export in Höhlenkarte, Sync-Fix
Pfad-Trennung (Oberfläche vs. Untergrund):
- loadPathChains() speichert jetzt Y-Koordinate an Index 2
- splitPathChains() prüft voxelSurface(x,z) > node_y + 3m statt
  2D-Cave-Maske; erkennt damit alle Tunnel-Typen korrekt
- Bisektion interpoliert Y für präzisen Grenzpunkt

Höhlenkarte Features:
- Label-Toggle (Bearbeiten-Modus für Area-Labels) + Klick-Handler
- PNG-Export (⇩) rendert 4096×4096 via buildCaveMap()
- mapData wird gecacht für späteren Export ohne Reload

Zoom/Position-Sync:
- Tab-Listener liest Werte vor dem Wechsel, übergibt sie per
  Platform.runLater() NACH JavaFX-Layout → kein Sprung mehr

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-06 22:32:28 +02:00
174579cd0b Karte: Pfade/Gebäude/Areas nach Oberfläche vs. Untergrund trennen
Pfad-Ketten werden exakt an Tunnel-Grenzen per Bisektion aufgesplittet
(12 Iterationen ≈ 0.05m Genauigkeit). Gebäude und Areas werden anhand
des Footprint-/Schwerpunkt-Punkts der Cave-Maske zugeordnet.

- WorldMapView: zeigt nur Oberflächen-Segmente (splitChains[0])
- CaveMapView:  zeigt nur Tunnel-Segmente (splitChains[1])
- Cave-Maske: buildCaveTunnelMask bei 1024px, einmal pro Lade-Zyklus

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-06 22:19:20 +02:00
6e7e94371e Höhlenkarte: Overlay-Darstellung identisch zur Weltkarte
- Gebäude: Farbe korrigiert (rot wie Weltkarte), Rotation-Vorzeichen fix (-fp[4]),
  zoom-abhängige Linienstärke, Skip bei zu kleinen Footprints
- Wege: zoom-abhängige Linienstärke (roadLineWidth) statt fester Werte
- overlayLineWidth() und roadLineWidth() analog WorldMapView ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-06 22:03:28 +02:00
a0b1e09d7d Höhlenkarte: Layer-Menü, Vollbild, Refresh und Zoom-Sync mit Weltkarte
- CaveMapView: Layer-MenuButton (Eingänge, Gebäude, Wege, Areas), Refresh-Button, Vollbild-Modus analog WorldMapView
- WorldMapView + CaveMapView: getScale/getPanX/getPanY + setView() für Tab-Wechsel-Sync
- EditorApp: caveMapView als Feld; beim Tab-Wechsel werden Zoom und Position übernommen; Vollbild-Callbacks für Höhlenkarte

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-06 22:01:36 +02:00
faa0a8b254 Weiter an der Karte gearbeitet - hier Höhlen und Tunnel 2026-09-06 11:41:04 +02:00
3feff60e24 Weltkarte Wald: Outline-Versatz durch Koordinaten-Mismatch behoben
Root cause: Fill nutzt fsfz = (WH-wz)/WS * FD (Skala: /FD=512),
MS-Grid nutzt msW → / (fdSize-1)=511. Ergibt ~2m Versatz in Kartenmitte.

Fix: h-Feld bei SEA_MASK_SIZE mit exakt der Fill-Formel aufbauen
(* FD statt * (FD-1)), dann MS mit thr=0 auf diesem h-Feld.
Die Isokontur liegt damit pixelgenau auf der Fill-Grenze.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 18:46:23 +02:00
cf11a50a21 Weltkarte Wald: Outline auf echter Density-Isokontur statt Binärmaske
Vorher: Density → binäre Maske (-1/+1) → MS bei 0.5 → Boundary 75% vom
Zellrand entfernt (falscher Offset, unabhängig von echten Density-Werten).

Jetzt: h = threshold - density → MS direkt auf Density-Werten bei thr=0
→ msLerp interpoliert genau an der echten threshold-Isokontur, identisch
zur Fill-Grenze in computeForestPixels.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 18:33:56 +02:00
f0a3c462b6 Weltkarte Wald: Outline-Fill-Mismatch durch Chaikin-Schrumpfen behoben
Chaikin corner-cutting bewegt Punkte nach innen → Outline lag kleiner als
die Fill-Fläche. Die Wald-Density-Boundary ist bereits glatt (Summe
kreisförmiger Kernels), braucht kein Smoothing.

- assembleClosedPaths(segs, chaikinIter) extrahiert aus buildSeaCoastPaths:
  chaikinIter=0 → Pfade ohne Glättung, liegen exakt auf der Fill-Grenze
- buildForestOutlinePaths nutzt assembleClosedPaths(..., 0)
- buildSeaCoastPaths delegiert weiterhin mit chaikinIter=3 (Küste braucht
  Glättung wegen der stepped Terrain-Height-Boundary)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 18:31:30 +02:00
b79ccaa1e0 Weltkarte Wald: Outline-Fill-Mismatch fix + Kleinstpolygon-Filter
- buildForestOutlinePaths: bilineare Interpolation statt NN → Outline liegt
  exakt auf der gleichen Schwelle wie die Füllung in computeForestPixels
- Perimeter-Filter: Pfade mit Umfang < 60m² werden verworfen (Artefakte
  aus 1-2 isolierten Bäumen)
- Threshold 2.0 → 3.0: 2 Bäume ergeben max. Density=2, liegen damit unter
  der Schwelle → kein Wald-Ring mehr bei Kleingruppen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 18:28:17 +02:00
28cc89dcb1 Weltkarte: Wald-Linien Z-Flip fix + korrekte Layer-Reihenfolge
- buildForestOutlinePaths: Density-Map hat Z invertiert (Nord=mz=0) gegenüber
  Marching-Squares-Koordinaten (Süd=mz=0) → gespiegelte Konturen landeten
  off-screen, kein sichtbarer Wald-Rand. Fix: dz = fdSize-1-mz beim Samplen.
- Render-Reihenfolge korrigiert: Klippen → Wald → Wasser → Areas
  (Wald war über Wasser, sollte darunter liegen)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 18:20:43 +02:00
8d6da6b013 Weltkarte Klippen: Schraffierung nur im Kliff-Band via Winding-Korrektur
- fixWindingForClip(): äußere Pfade CCW, innere Pfade (Löcher/Berg-Inneres) CW
  → gc.clip() füllt mit Non-Zero-Rule nur das echte Kliff-Band, nicht den
  gesamten eingeschlossenen Bereich inkl. Berggipfel
- Schraffierungs-Liniendicke = overlayLineWidth() (identisch zu Konturlinie)
- Schraffierungs-Abstand = 4× Liniendicke → konstante ~25% Flächendeckung
  über alle Zoom-Stufen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 18:06:30 +02:00
972d5d6e0b Weltkarte Klippen: Schraffierung, Zoom-abhängige Linienstärke, Wald-Stil
- Kliff-Bereiche: diagonale Schraffierung (45°, ~5.5px Abstand) im gleichen
  Grauton via gc.clip() auf die Marching-Squares-Pfade
- Klippen- und Wald-Konturlinien: 1.2px bei Zoom 0-2, 2.5px bei Zoom 3,
  3.5px bei Zoom 4 (deutlich dicker zum Reinzoomen)
- Wald-Umrandung: selber Stil und Dicke wie Klippen, aber dunkelgrün (28/78/12)
- Render-Reihenfolge bleibt: Klippen → Wasser → Wald

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 17:47:19 +02:00
81c9512244 Weltkarte: Vektor-Konturen für Wald/Klippen, 8m Textur-Filter, Render-Reihenfolge
- Cliff- und Wald-Randlinien via Marching Squares + Chaikin als Canvas-Vektoren
  statt Pixel-Kanten im Raster → immer scharf wie Küstenlinie und Areas
- COARSE von 512px (4m/px) auf 256px (8m/px) erhöht + Bilinear-Interpolation
  der Flachfarben → dünne Texturen (<8m) verschwinden, keine Block-Artefakte
  bei Hires-Zoom
- Render-Reihenfolge: Klippen → Wasser → Wald (laut User-Anforderung)
- buildCliffOverlay: nur noch weiche Grau-Füllung, keine pixel-basierten Kanten
- computeForestPixels: nur noch Füllung, Randlinie kommt als Vektor-Overlay

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 17:18:43 +02:00
ddec931ee8 Weltkarte: schematische 5-Layer-Optik
Layer 1: Flachfarben aus Splatmap (Coarse 512px filtert dünne Texturen <4m heraus, kein Hillshading)
Layer 2: Wasser-Füllung (PNG) + Küstenlinie (Canvas-Vektor), eine Checkbox
Layer 3: Wald – 50% alpha grün + dunkelgrüne Randlinie (vorgebacken)
Layer 4: Klippen – graue Füllung + Kammlinie + Fußlinie (vorgebacken, buildCliffOverlay)
Layer 5: Areas – gestrichelte Vektorpolygone (Canvas)

Entfernt: Wellenmarken, Wasserfall-Symbole, Zonen, Modell-Punkte, Orte-Labels, Baum-Symbole

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 16:32:18 +02:00
e8896c7a4d Weltkarte: Anpassungen vor schematischem Umbau
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 16:22:13 +02:00
abf56f81b6 Weltkarte: tile-basiertes Rendering, Hires-Chunks, 5 Zoom-Stufen
- Durchschnittliche Kachel-Farben (terrainColorMap, 2048px) als Basis für Low-Res-Ansicht
- Bilineares Splatmap-Blending (blendTileAvgColors) statt Nearest-Neighbor
- Chunk-basierte Hires-Karte (8192px, 256 Chunks à 512px) auf Disk gecacht
- Zoom-Stufen 0–2: Overview-Bild; Stufen 3–4: Hires-Chunks per LRU-Cache
- 5 geometrisch verteilte Zoom-Stufen (Fit-All bis 0,25m/Pixel)
- Klippen-Erkennung per Steigungswinkel (1,5m Sampling-Distanz, harter 30°-Schwellwert)
- Leichter Box-Blur (Radius 2) über Terrain-Layer
- Wasserfarbe in Hires-Chunks vereinheitlicht (WATER_COLOR)
- Kein Hillshading

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-03 10:39:23 +02:00
2fd6a9b737 Weltkarte: Kachel-Overlay, Wald-Overlay, ModelCategory-System, Selektions-Fix
- Terrain-Textur-Overlay (Splatmap-Blend, Klippen, Wald) als Dirty-Flag-Cache
- Wald wird nach Wasser gerendert, 50% Deckkraft, Schwelle 3+ Bäume
- Speichern vor Weltkarten-Refresh (save-then-load via pendingAfterSave)
- ModelCategory-System: Baum/Palme/Busch/Gebäude; Ordner-Kategorie im UI versteckt
- Selektion nur mit Auswahl-Werkzeug (kein versehentliches Selektieren im Platzier-Modus)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-01 22:05:38 +02:00
0fc8f7f3c3 Arbeiten an der Karte - neuer Render Modus mit Zwischenschicht, Küstenlinien, Wasserfälle 2026-08-29 22:27:57 +02:00
36c6a9b7d8 Weltkarte: Render-Modell-Trennung, UI-Umbau und Kamera-Indikator
- WorldMapRenderModel: neues Record als Zwischenschicht zwischen I/O und Rendering
- WorldMapRenderer: render() akzeptiert Modell direkt; rückwärtskompatible Wrapper-Signatur für MinimapState
- WorldMapView: Layer-Auswahl als MenuButton mit Checkboxen; Vollbild-Modus (centerStack-Swap); Kamera-Indikator mit FOV-Kegel (120ms-Timer, unabhängig vom Karten-Rendering); Linksklick teleportiert JME3-Kamera unter Beibehaltung der Terrain-Höhendifferenz
- EditorApp: CameraInfoSupplier, TeleportCallback und FullscreenCallbacks verdrahtet
- MinimapState, Logback: Debug-Logging für Modell-Build und Render-Zyklen
- Map-Daten: Zwischenstand Weltdaten

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 13:24:35 +02:00
68ec75c41a Voxel-Backen: Tunnel- und Höhlen-Support
Tunnel-Spalten werden im Gradientenschreiben jetzt vollständig geschützt:
Pre-Scan erkennt echte Tunnel (void ≥ Terrain-Höhe mit festem Voxel darüber)
und überspringt dann sämtliche negativen Zellen in dieser Spalte – auch
unter-terrain-liegende. Damit erzeugt MC keinen Plateau-Boden mehr am
Tunnel-Eingang.

Terrain-Übergang-Extrapolation bekommt zusätzlich einen hasVoidBelow-Check:
existieren leere Zellen unterhalb von yBot im geblurrten Chunk, wird die
Extrapolation übersprungen, statt den Hohlraum zuzuschütten.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-28 11:59:52 +02:00
f8dbbb09c7 Zwischenstand Minimap 2026-08-24 20:39:22 +02:00
9238378bc8 Minimap und ingame Karte - umsetzung begonnen 2026-08-23 22:13:32 +02:00