Skip to content

Latest commit

 

History

History
154 lines (124 loc) · 8.68 KB

File metadata and controls

154 lines (124 loc) · 8.68 KB

Features

Living list of what ships, what is on a side branch, and what is on the roadmap. The README only carries a top-level checklist; this file is the detailed one and is meant to be edited as decisions are made.

Legend: [x] shipped on master · [~] on a side branch, not yet merged · [ ] planned · [?] not committed to (idea / under discussion).


Shipped — UI components

  • Text — static and reactive (Supplier<String>)
  • Button — click handler in Style
  • Image — texture by Identifier, optional explicit texture size
  • Row / Column — flex-style containers, lambda or vararg children
  • VScroll / HScroll — scroll containers
  • TextFieldState<String> bidir, placeholder, filter, max length, onSubmit, blinking caret
  • TextArea — multi-line, Tab cycle focus, filter / max length
  • PaginationState<Integer> page, sibling count, optional click handler
  • ProgressBarState<Double> and DoubleSupplier overloads, label format
  • Slider — int / double / float / long / short, vertical flag, keyboard support, hover highlight, rounded corners
  • Accordion — multi-open and single-open variants, header style, optional State<Set<Integer>> / State<Integer>
  • ComboBox — searchable popup
  • SelectList — single / multi select, scrollable
  • Calendar — date picker, custom day style
  • ColorPicker — square + hue strip, optional alpha, configurable pad size
  • Skeleton — placeholder with shimmer animation
  • Spinner — circular dot rotation, configurable size / color / period
  • Tooltip — hover-delayed popup, multi-line, edge-flip, custom style
  • Toast — global stack (info/success/warning/error/custom), slide-in / fade-out
  • PlayerRender — wraps InventoryScreen.drawEntity, cursor-tracked rotation or fixed front view, supplier-based for live entity swap
  • Chart — LineChart / BarChart / PieChart, multi-series, reactive suppliers, hover tooltip, configurable axis / legend / value formatter

Shipped — animation

  • Tween — easing, duration, repeat, onComplete
  • Spring — default / snappy / bouncy / strong presets, physics-based
  • ColorTween — ARGB interpolation
  • FadeIn / FadeOut
  • SlideIn (Direction)
  • Loop / Yoyo — animation modifiers

Shipped — system / primitives

  • State<T> — reactive primitive with map, combine, bindBidirectional, dispose (memory-leak-safe)
  • Subscription — auto-disposed at component detach
  • Focus managementrequestFocus, Tab cycling, key/char dispatch
  • Popup click handlers — outside-click intercept for combo boxes / pickers
  • DynamicComponent — re-render on state change without rebuilding the tree
  • AnimatedComponent — driven by tween / spring
  • Style.borderRadius — wired through every component that paints a rect

Shipped — networking

  • ModdingLibClient.Networking — Fabric-side typed client↔server channel, mirrors Spigot's ModdingLibApi. Single shared codec registration; per-(pluginId, action) dispatch. Multiple downstream mods can register handlers without colliding.
    ModdingLibClient.Networking.register("myplugin", "shop.list",
        json -> { /* runs on render thread */ });
    ModdingLibClient.Networking.send("myplugin", "shop.buy", payload);

Shipped — tooling

  • DebugOverlay — bounds + names of all components in tree

On a side branch (not yet merged)

  • [~] Videofeature/video-player, kept as a checkpoint

    • Phase 1 — VideoPlayer (FFmpeg / JavaCPP) + VideoComponent
    • Phase 1.5 — async open with skeleton placeholder
    • Phase 2.1 — audio decode via OpenAL
    • Phase 2.2 — A/V sync via audio master clock
    • Phase 3a — loop
    • Phase 3b — seek (-5s / +5s / restart, refresh while paused, lastPublishedPtsNanos for reliable currentTime)
    • Phase 3c — perf (native memcpy via access widener NativeImage.pointer)
    • Phase 3d — hardware decode probe (deferred, low priority)
  • [~] Multi-module split + client↔server channelfeature/multi-module-split

    • Repo split into :common / :fabric / :spigot Gradle modules so the mod and the server plugin share a single source of truth for the wire format without dragging each other's runtime deps along.
    • :common — pure-Java Envelope record (plugin id + player UUID + action
      • JSON body), VarInts codec (Minecraft-style VarInt + length-prefixed UTF-8 strings) so a buffer produced on Fabric is byte-identical on Spigot.
    • :spigot — Bukkit plugin exposing ModdingLibApi (register(pluginId, action, handler) / send(player, pluginId, action, payload)) on top of a PluginMessageListener. Hides the byte codec, the channel name, the per-player rate limiter, and the main-thread hop. Anti-spoof check on envelope.playerUuid vs the connection's own UUID.
    • :fabric — existing mod, now depending on :common via Loom's include so the protocol classes ship inside the mod jar without a separate runtime dep.
    • CI publishes all three artifacts (moddinglib-common, moddinglib, moddinglib-spigot) to GitHub Packages and attaches the three jars to the GitHub Release.

Roadmap — selected priorities

User-picked next items, in priority order:

  • Gradient paintsStyle.background(Paint) / textFill(Paint) with Paint.LinearGradient (angle + multi-stop), Paint.RadialGradient, Paint.ConicGradient. Backwards-compatible: backgroundColor(int) keeps working. Per-glyph color sampling for gradient text, with bold rendered via vanilla double-draw.
  • Custom fontsStyle.font(Identifier) forwarding to Minecraft's resource-pack font system (TTF supported natively by MC). API only: the user supplies the TTF and the assets/<modid>/font/X.json provider in their own resource pack.
  • Markdown renderer — basic CommonMark subset (headings, bold/italic, links, code, lists, hr). Use case: changelogs, in-game help.
  • Virtualized list — render only the rows in the viewport; works with Supplier<Integer> rowCount + IntFunction<UIComponent> rowFactory. Required once lists exceed a few hundred items.
  • In-game UI editor — drag-and-drop screen designer that emits Components.X(...) source. Big chunk of work but very high payoff for downstream modders.
  • Devmode — hot-reload screens, perf overlay, component inspector (React DevTools-ish). Pairs naturally with the editor above.

Roadmap — other UI ideas (under discussion)

  • [?] Modal / Dialog — backdrop, focus trap, ESC-to-close. Currently simulated by stacking containers; a first-class component would simplify a lot.
  • [?] Drag & drop — drag source, drop target, ghost preview. Useful for inventory-like screens, list reordering.
  • [?] Context menu — right-click / long-press popover, sub-menus.
  • [?] Tabs — currently emulated with DynamicComponent + State<Integer>.
  • [?] Tree view — collapsible hierarchy, selection. File-explorer style.
  • [?] Form validation — chainable validators on a State<T>, error binding.
  • [?] Theme provider — light / dark / custom palette injected via context.

Roadmap — non-UI

  • [~] Channel communication — typed client↔server networking. See the multi-module split entry above; both Spigot (ModdingLibApi) and Fabric (ModdingLibClient.Networking) facades are complete on the side branch, pending merge to master.
  • [?] Config system — JSON / TOML auto-save, hot reload in dev, versioned migrations. Used by every mod.
  • [?] Persistent storage — per-world / per-player KV wrapper (NBT or JSON), typed.
  • [?] Command framework — DSL on top of Brigadier, typed parsing, autocompletion.
  • [?] Event bus — typed publish / subscribe, State<T> bridge.
  • [?] Tick schedulerrunIn(20).cancel(), runEvery(...), async-to-main hop.
  • [?] HTTP client — wrapper used internally by the video player; could be exposed.
  • [?] Asset loader — dynamic textures / sounds from URL with disk cache.
  • [?] Permission system — feature-level permissions on top of op-levels.

Roadmap — animation

  • [?] Irregular family (light / heavy) — spec to be clarified before implementation.

Notes

  • This file is hand-maintained. When a feature ships on master, move it from a roadmap section to the matching shipped section and check it off in README.md's top-level list.
  • The feature/* branches are kept around as recovery points; they are not stale by default.