Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
36d36e4
feat(autocomplete): add core interfaces, selection strategies, and wo…
Windorain May 13, 2026
a9b4c76
feat(autocomplete): add AutocompletePopup widget
Windorain May 13, 2026
b410246
feat(autocomplete): add MdxSyntaxResolver, provider interfaces, and I…
Windorain May 13, 2026
709b9d8
feat(autocomplete): integrate popup and double-click selection into G…
Windorain May 13, 2026
c8ce621
fix(autocomplete): dirty hotfixes for popup trigger, position, scroll…
Windorain May 13, 2026
bdcd681
refactor(autocomplete): clean up, cache AST, extract shared utils
Windorain May 13, 2026
30d6397
feat(autocomplete): add TagAttributeRegistry, AttributeSpec, AttrType
Windorain May 13, 2026
7fe58dc
feat(autocomplete): add renderWidth() to AutocompleteCandidate
Windorain May 13, 2026
a86eb3e
feat(autocomplete): add resolver chain, context types, and attribute …
Windorain May 13, 2026
b5b041e
feat(autocomplete): add 16 value providers and tag name provider
Windorain May 13, 2026
3601a43
feat(autocomplete): add frontmatter, markdown, and structural hint pr…
Windorain May 13, 2026
ed6be02
refactor(autocomplete): remove 6 unnecessary providers, merge recipe …
Windorain May 13, 2026
05dc61e
feat(autocomplete): implement PageReference, Anchor, FrontmatterValue…
Windorain May 14, 2026
41b5ee8
feat(autocomplete): add ImagePathProvider for src attribute file sugg…
Windorain May 14, 2026
abb604a
fix(autocomplete): correct provider semantics, disable unstable provi…
Windorain May 14, 2026
73091f4
Merge branch 'master' into autocomplete
ABKQPO May 14, 2026
d2018f0
Merge remote-tracking branch 'origin/master' into pr/14
ABKQPO May 14, 2026
1f99fc3
bugfix
ABKQPO May 14, 2026
26b3105
Update PageCompiler.java
ABKQPO May 14, 2026
92909a3
bugfix
ABKQPO May 15, 2026
628f47b
bugfix
ABKQPO May 15, 2026
1257a64
fix: parser soundness - validate attributes, handle escapes, reject N…
Windorain May 19, 2026
2bfe8e8
refactor: make MDX tokenizer error-tolerant, remove fallback parser
Windorain May 19, 2026
2a17f94
fix: set AST attribute positions, restore tag-start detection with pa…
Windorain May 19, 2026
3d5ccac
refactor: migrate YAML and code-fence to AST, delete manual resolvers
Windorain May 19, 2026
8ef18d6
fix: frontmatter autocomplete filtered out by WORD type check
Windorain May 19, 2026
793e448
fix: autocomplete alignment - frontmatter, link URL, tag-start contex…
Windorain May 20, 2026
d8bcce7
fix: make parser fully error-tolerant — eliminate all user-input-driv…
Windorain May 20, 2026
26061d4
fix: autocomplete — YAML list items with colons, top-level parent key…
Windorain May 20, 2026
0ace7b7
fix: partial tag name autocomplete and blank-line Enter in frontmatter
Windorain May 20, 2026
31eda78
fix: missing closing brace in applySmartNewline
Windorain May 21, 2026
9a96bd5
feat(autocomplete): register missing tag attributes — annotations, so…
Windorain May 21, 2026
e29676f
fix: mark recovered MDX elements so resolver skips them consistently
Windorain May 21, 2026
6627e8e
Merge remote-tracking branch 'origin/master' into pr/14
ABKQPO May 25, 2026
785ba61
update
ABKQPO May 25, 2026
b0251b0
fix: mark MDX tags recovered at EOF and fix tag-start position
Windorain May 26, 2026
4d3cd14
feat: Phase 1 Runtime abstraction — MasterScheduler, LytHost, WorkItem
Windorain May 26, 2026
d7c2bba
refactor: complete Phase 1 migration — disable old tick pumps, wire L…
Windorain May 26, 2026
5ed1234
fix: sync ViewportState scroll, bridge NavigationState with old singl…
Windorain May 26, 2026
1e2baac
refactor: Phase 2A — IR unification, MdAst→MdxJsx conversion
Windorain May 26, 2026
9d1038d
fix: Phase 2A — runtime regressions from code review
Windorain May 26, 2026
389de4e
fix: buildErrorPage uses MdxJsx, convertPhrasingChildren handles mixe…
Windorain May 26, 2026
7c28966
fix: restore paragraph merging in compileBlockContext for inline content
Windorain May 26, 2026
a6ac456
fix: kramdown table widths, NFE protection, dead code removal prep
Windorain May 26, 2026
475353f
refactor: Phase 3 — compiler purification, LytHost runtime, dead code…
Windorain May 27, 2026
5f2bce3
fix: Phase 3 review — scene data loss, flow MOUNT dispatch, missing r…
Windorain May 27, 2026
d173faf
fix: cascadeLive, LytBox lifecycle, flow-content replace, 9 script im…
Windorain May 27, 2026
bf83304
fix: materialize 7 empty-shell scripts, flow-content replace, schedul…
Windorain May 27, 2026
9dfbe31
fix: 9 verified bugs from adversarial audit
Windorain May 27, 2026
21af39c
fix: replace loading placeholders and error messages with styled [Tag…
Windorain May 28, 2026
2fd7d6c
fix: transparent LytFlowInlineBlock penetration in ctx.replace, unive…
Windorain May 28, 2026
540e5f7
Merge remote-tracking branch 'origin/master' into pr/14
ABKQPO May 28, 2026
e86116c
sa
ABKQPO May 28, 2026
8b2ee49
merge: origin/autocomplete — retain local host runtime, adopt remote …
Windorain May 28, 2026
5c25708
fix: resolve merge compilation errors
Windorain May 28, 2026
50cc1a2
fix: null-guard drawTiledBackground against missing mc/textureManager
Windorain May 28, 2026
610160e
feat: wire document cache and preheat pipeline with mount/swap dual-path
Windorain May 28, 2026
29fe5ec
refactor: replace page-level mounted flag with node-level result cache
Windorain May 28, 2026
1a3a2a2
feat: defer Micromark AST parse to first getAstRoot() call
Windorain May 29, 2026
345fb15
fix: add super.initGui() and mc null guard to prevent NEI crash
Windorain May 29, 2026
3e989d3
fix: strip UTF-8 BOM in frontmatter extraction and init NEI manager
Windorain May 29, 2026
79ee0a5
feat: add dispatchSubtree API for detached block tree MOUNT dispatch
Windorain Jun 1, 2026
d1d2ae1
fix: add TooltipScript to dispatch MOUNT events into tooltip content
Windorain Jun 1, 2026
6f4d35f
fix: restore missing scene properties in BlockImageScript
Windorain Jun 1, 2026
ba5dd3b
fix: add PLACEHOLDER_STYLE to 7 invisible placeholder compilers
Windorain Jun 1, 2026
34e165c
fix: restore Phase 2 Category behaviors - title resolution, isWrapped…
Windorain Jun 1, 2026
cbc7b7a
fix: restore graceful image degradation with missing-texture icon
Windorain Jun 1, 2026
1d28aa4
fix: small script regressions - normalize, viewSize, null-guard, inli…
Windorain Jun 1, 2026
b89e048
feat: Phase 3 architecture fixes - SceneViewportMetrics, pre-parsing,…
Windorain Jun 2, 2026
82c4f67
fix: systematic Phase 2→3 regression fixes and architectural improvem…
Windorain Jun 2, 2026
be921ec
fix: systematic Phase 2→3 regression fixes and architectural improvem…
Windorain Jun 2, 2026
509c835
fix: height-weighted column distribution with binary search
Windorain Jun 2, 2026
9d51e64
fix: height-weighted column distribution with binary search
Windorain Jun 2, 2026
fa36703
fix: register MOUNT-time scenes for Ponder tick dispatch
Windorain Jun 2, 2026
3a89a89
fix: register MOUNT-time scenes for Ponder tick dispatch
Windorain Jun 2, 2026
37b3f53
fix: restore deep search indexing for Category and Special pages
Windorain Jun 3, 2026
c7b8908
fix: restore deep search indexing for Category and Special pages
Windorain Jun 3, 2026
4151050
fix: pass sourcePack through ScenePlaceholder to runtime PageCompiler
Windorain Jun 3, 2026
47d9a28
fix: pass sourcePack through ScenePlaceholder to runtime PageCompiler
Windorain Jun 3, 2026
d63f334
fix: wire real ExtensionCollection, annotation tooltip dispatch, Bloc…
Windorain Jun 3, 2026
566cc34
fix: wire real ExtensionCollection, annotation tooltip dispatch, Bloc…
Windorain Jun 3, 2026
3d0aeb0
fix: log NBT parse failures in BlockImageScript instead of silently i…
Windorain Jun 3, 2026
34121a5
fix: log NBT parse failures in BlockImageScript instead of silently i…
Windorain Jun 3, 2026
a76e9e1
refactor: unify duplicate resolveItemId with IdUtils.resolveItemStack
Windorain Jun 3, 2026
b605f45
refactor: unify duplicate resolveItemId with IdUtils.resolveItemStack
Windorain Jun 3, 2026
1772b2a
fix: Mermaid mindmap NodeContent BlockImage rendering and zoom
Windorain Jun 3, 2026
891105e
fix: Mermaid mindmap NodeContent BlockImage rendering and zoom
Windorain Jun 3, 2026
e1a7a16
fix: sprite UV drift and LaTeX rendering in Mermaid NodeContent
Windorain Jun 3, 2026
ca68b67
fix: sprite UV drift and LaTeX rendering in Mermaid NodeContent
Windorain Jun 3, 2026
144d7ad
fix: F3+T cache gaps, editor preview placeholders, SceneScript camera…
Windorain Jun 3, 2026
b68716e
fix: F3+T cache gaps, editor preview placeholders, SceneScript camera…
Windorain Jun 3, 2026
b1c84d3
fix: raw-GL blocks not rendering in Mermaid NodeContent under zoom
Windorain Jun 3, 2026
47387ec
fix: raw-GL blocks not rendering in Mermaid NodeContent under zoom
Windorain Jun 3, 2026
9f5b33d
style: spotless formatting cleanup in scripts and compiler
Windorain Jun 3, 2026
49c3855
style: spotless formatting cleanup in scripts and compiler
Windorain Jun 3, 2026
581b9ad
Merge branch 'master' into pr/14
ABKQPO Jun 3, 2026
94af231
Merge branch 'master' into pr/14
ABKQPO Jun 3, 2026
f82e541
sa
ABKQPO Jun 3, 2026
fdc4aca
sa
ABKQPO Jun 3, 2026
4512d91
Update PageCompiler.java
ABKQPO Jun 3, 2026
ccef97f
Update PageCompiler.java
ABKQPO Jun 3, 2026
ebf9fed
fix logo bug
ABKQPO Jun 3, 2026
ed4cf6d
fix logo bug
ABKQPO Jun 3, 2026
e79c435
fix inline code
ABKQPO Jun 4, 2026
9bc1256
fix inline code
ABKQPO Jun 4, 2026
c921b76
opti
ABKQPO Jun 4, 2026
1d09194
opti
ABKQPO Jun 4, 2026
ed2ba56
Update GuideScreen.java
ABKQPO Jun 4, 2026
6c6fbab
Update GuideScreen.java
ABKQPO Jun 4, 2026
ef61c45
add GuideScreenScrollbarOutline
ABKQPO Jun 4, 2026
d10531c
add GuideScreenScrollbarOutline
ABKQPO Jun 4, 2026
58115ad
fix blockquote directive text stripping
Windorain Jun 4, 2026
9a23715
fix task list item remaining text propagation
Windorain Jun 4, 2026
749ea89
fix LytListItem missing from float-aware wrapping
Windorain Jun 4, 2026
6742abe
fix page cache not cleared on guide reload
Windorain Jun 4, 2026
1c3a394
fix keybind and player name placeholder style leak
Windorain Jun 4, 2026
adf3394
fix Mermaid parser HTML tag stripping
Windorain Jun 4, 2026
58c8ad6
fix Mermaid canvas Scene integration
Windorain Jun 4, 2026
e58747f
fix Scene button zoom consistency
Windorain Jun 4, 2026
8084a2e
stop tracking CLAUDE.md
Windorain Jun 4, 2026
c8cd7ac
Merge branch 'autocomplete' of https://github.com/Windorain/GuideNH i…
ABKQPO Jun 5, 2026
278601f
sa
ABKQPO Jun 5, 2026
089c64e
bugfix
ABKQPO Jun 5, 2026
8a1af54
move logs
ABKQPO Jun 5, 2026
a438041
refactor code highlighting
ABKQPO Jun 5, 2026
2fecc68
unify Scene rendering through RenderContext coordinate system
Windorain Jun 5, 2026
47adfdb
add beginLocalView/endLocalView to RenderContext, clean up ponder coo…
Windorain Jun 5, 2026
157d650
add content tabs
ABKQPO Jun 5, 2026
62b1da0
opti
ABKQPO Jun 5, 2026
5cd74e9
change content tabs block
ABKQPO Jun 5, 2026
27c6ab3
add content tab title
ABKQPO Jun 5, 2026
7cf352f
opti
ABKQPO Jun 6, 2026
57d661f
use guide debug log
ABKQPO Jun 6, 2026
42faf6f
bugfix
ABKQPO Jun 6, 2026
8c5707f
bugfix
ABKQPO Jun 6, 2026
6eb774f
sa
ABKQPO Jun 6, 2026
9de4250
bugfix
ABKQPO Jun 6, 2026
36a3853
bugfix
ABKQPO Jun 6, 2026
99bd7ed
bugfix
ABKQPO Jun 7, 2026
022d5ec
bugfix
ABKQPO Jun 7, 2026
39102ef
remove unused lang
ABKQPO Jun 7, 2026
eb79014
opti
ABKQPO Jun 7, 2026
b601bbe
add color & dynamic tooltip integration
ABKQPO Jun 7, 2026
fff0b93
add back and forward hotkey
ABKQPO Jun 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,5 @@ layout.json
/src/test
/docs
/gradle-user
.claude/
CLAUDE.md
17 changes: 17 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
需要进行spotlessApply和compileJava验证

禁止全限定名引用类,只能import使用

禁止包私有和final类,record记录类除外,所有注释使用英语

禁止// -------------和// =======这样的注释
先查找D:\\Github\\GTNH有没有需要的源码库

禁止过于耦合,尽可能保证解耦并且支持高度可拓展

确保代码实现的干净漂亮,性能高效,业务清晰

所有文件均按照UTF8读取和编写,禁止UTF16等,powershell读取也强制指定UTF8编码

开发文档禁止提交到git,测试文件是故意被git忽略的

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
## **Features**

* Markdown pages with YAML frontmatter, navigation metadata, categories, anchors, tables, footnotes, Mermaid, LaTeX, charts, and highlighted text.
* MDX-style runtime tags such as `<ItemLink>`, `<ItemImage>`, `<Recipe>`, `<GameScene>`, `<BlockStats>`, `<Tooltip>`, `<KeyBind>`, and `<PlayerName>`.
* MDX-style runtime tags such as `<ItemLink>`, `<ItemImage>`, `<Recipe>`, `<GameScene>`, `<ContentTabs>`, `<BlockStats>`, `<Tooltip>`, `<KeyBind>`, and `<PlayerName>`.
* Interactive 3D GameScene previews with block/entity placement, StructureLib import, Ponder playback, layer sliders, grid controls, annotations, and block statistics.
* Live guide editing mode with split editor/preview, toolbar actions, debounced saving, external-change handling, and resource-pack page creation.
* Multi-language guide folders with fallback, item index navigation, search, server integration, and resource reload support.
Expand Down
2 changes: 1 addition & 1 deletion README_zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
## **功能**

* 支持带 YAML 表头的 Markdown 页面、导航元数据、分类、锚点、表格、脚注、Mermaid、LaTeX、图表与文本高亮。
* 支持 `<ItemLink>`、`<ItemImage>`、`<Recipe>`、`<GameScene>`、`<BlockStats>`、`<Tooltip>`、`<KeyBind>`、`<PlayerName>` 等 MDX 风格运行时标签。
* 支持 `<ItemLink>`、`<ItemImage>`、`<Recipe>`、`<GameScene>`、`<ContentTabs>`、`<BlockStats>`、`<Tooltip>`、`<KeyBind>`、`<PlayerName>` 等 MDX 风格运行时标签。
* 支持交互式 3D GameScene 预览,包括方块/实体放置、StructureLib 导入、Ponder 播放、层滑条、网格按钮、注解与方块统计表。
* 支持游戏内指南编辑模式,包括编辑/预览分屏、工具栏操作、短延迟自动保存、外部变更处理与资源包页面创建。
* 支持多语言指南目录与回退、物品索引跳转、搜索、服务端集成和资源重载。
Expand Down
6 changes: 4 additions & 2 deletions dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
dependencies {

api("com.github.GTNewHorizons:GTNHLib:0.10.3:dev")
api("com.github.GTNewHorizons:GTNHLib:0.10.8:dev")
implementation("io.github.legacymoddingmc:unimixins:0.3.1:dev")

shadowImplementation("org.yaml:snakeyaml:1.33") { transitive = false }
Expand All @@ -23,15 +23,17 @@ dependencies {
devOnlyNonPublishable("com.github.GTNewHorizons:nei-custom-diagram:1.8.20:dev")
devOnlyNonPublishable("com.github.GTNewHorizons:EnhancedLootBags:1.3.4:dev")
devOnlyNonPublishable("com.github.GTNewHorizons:BetterQuesting:3.8.40-GTNH:dev")
devOnlyNonPublishable("com.github.GTNewHorizons:Angelica:2.1.32:dev")
devOnlyNonPublishable("com.github.GTNewHorizons:TX-Loader:1.8.11:dev")
devOnlyNonPublishable("curse.maven:cofh-core-69162:2388751")

runtimeOnlyNonPublishable("com.github.GTNewHorizons:Baubles-Expanded:2.2.13-GTNH:dev")
runtimeOnlyNonPublishable("com.github.GTNewHorizons:Botania:1.13.16-GTNH:dev")
runtimeOnlyNonPublishable("com.github.GTNewHorizons:Botanic-horizons:1.12.8-GTNH:dev")
runtimeOnlyNonPublishable("com.github.GTNewHorizons:BlockRenderer6343:1.4.12:dev") { transitive = false }
runtimeOnlyNonPublishable("com.github.GTNewHorizons:Angelica:2.1.19:dev")
runtimeOnlyNonPublishable(rfg.deobf("curse.maven:spark-361579:4271867"))

compileOnlyApi("com.github.slprime:ChromaticTooltips:1.0.28-GTNH:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:TinkersConstruct:1.14.64-GTNH:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:Mantle:0.5.1:dev") { transitive = false }
compileOnlyApi("com.github.GTNewHorizons:Mobs-Info:0.5.14-GTNH:dev") { transitive = false }
Expand Down
143 changes: 129 additions & 14 deletions src/main/java/com/hfstudio/guidenh/ClientProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,69 @@
import com.hfstudio.guidenh.client.command.GuideNhClientBridgeController;
import com.hfstudio.guidenh.client.command.GuideNhClientCommand;
import com.hfstudio.guidenh.client.hotkey.CycleRegionWandModeHotkey;
import com.hfstudio.guidenh.client.hotkey.GuidePageHistoryHotkey;
import com.hfstudio.guidenh.client.hotkey.OpenGuideHomeHotkey;
import com.hfstudio.guidenh.client.hotkey.OpenGuideHotkey;
import com.hfstudio.guidenh.client.hotkey.OpenSceneEditorHotkey;
import com.hfstudio.guidenh.config.ModConfig;
import com.hfstudio.guidenh.guide.internal.GuideDevWatcherPump;
import com.hfstudio.guidenh.guide.internal.GuideDevelopmentResourcePackWatcher;
import com.hfstudio.guidenh.guide.internal.GuideME;
import com.hfstudio.guidenh.guide.internal.GuideOnStartup;
import com.hfstudio.guidenh.guide.internal.GuideRegistry;
import com.hfstudio.guidenh.guide.internal.GuideReloadListener;
import com.hfstudio.guidenh.guide.internal.GuideScreenMemory;
import com.hfstudio.guidenh.guide.internal.GuideWarmupPump;
import com.hfstudio.guidenh.guide.internal.home.GuideScreenHomeHistory;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.TagAttributeRegistry;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.AnchorProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.AttributeNameProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.AttributePresetValueProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.AutocompleteProviders;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.BlockIdProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.BooleanValueProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.ColorProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.CommandProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.DomainProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.EntityNameProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.EnumValueProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.ExpressionProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.FencedBlockLanguageProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.FormatPatternProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.FrontmatterKeyProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.FrontmatterValueProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.ImagePathProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.ItemIdProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.KeyBindProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.NumericValueProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.OreDictProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.PageReferenceProvider;
import com.hfstudio.guidenh.guide.internal.editor.autocomplete.provider.TagNameProvider;
import com.hfstudio.guidenh.guide.internal.host.LytHost;
import com.hfstudio.guidenh.guide.internal.host.LytHostWorkItem;
import com.hfstudio.guidenh.guide.internal.host.scripts.BlockImageScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.CategoryScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.CommandLinkScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.CsvTableScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.FloatingImageScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.ImageScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.ItemGridScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.ItemImageScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.ItemLinkScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.KeyBindScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.MermaidScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.PlayerNameScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.QuestCardScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.QuestLinkScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.RecipeScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.SceneScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.SoundLinkScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.SpecialScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.StructureScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.SubPagesScript;
import com.hfstudio.guidenh.guide.internal.host.scripts.TooltipScript;
import com.hfstudio.guidenh.guide.internal.scheduler.DevWatchWorkItem;
import com.hfstudio.guidenh.guide.internal.scheduler.LytHostPreheatItem;
import com.hfstudio.guidenh.guide.internal.scheduler.MasterScheduler;
import com.hfstudio.guidenh.guide.internal.scheduler.SearchIndexWorkItem;
import com.hfstudio.guidenh.guide.scene.level.GuidebookFakeWorld;
import com.hfstudio.guidenh.guide.scene.level.GuidebookLevel;
import com.hfstudio.guidenh.guide.scene.support.GuideDebugLog;
import com.hfstudio.guidenh.integration.GuideNhClientIntegrationBootstrap;
import com.hfstudio.guidenh.integration.Mods;
import com.hfstudio.guidenh.integration.ae2.network.Ae2NetworkRegistration;
Expand All @@ -47,6 +95,12 @@

public class ClientProxy extends CommonProxy {

private static final LytHost lytHost = new LytHost();

public static LytHost getLytHost() {
return lytHost;
}

private final GuideNhRuntimeBridge runtimeBridge = new GuideNhRuntimeBridge();

@Override
Expand Down Expand Up @@ -79,12 +133,76 @@ public void init(FMLInitializationEvent event) {
}
OpenGuideHomeHotkey.init();
OpenGuideHotkey.init();
GuidePageHistoryHotkey.init();
OpenSceneEditorHotkey.init();
AutocompleteProviders.register(new ItemIdProvider());
TagAttributeRegistry.initialize();
AutocompleteProviders.register(new AttributeNameProvider());

AutocompleteProviders.register(new ColorProvider());
AutocompleteProviders.register(new OreDictProvider());
AutocompleteProviders.register(new BlockIdProvider());
AutocompleteProviders.register(new EntityNameProvider());
AutocompleteProviders.register(new KeyBindProvider());
AutocompleteProviders.register(new PageReferenceProvider());
AutocompleteProviders.register(new AnchorProvider());
AutocompleteProviders.register(new CommandProvider());
AutocompleteProviders.register(new AttributePresetValueProvider());
AutocompleteProviders.register(new NumericValueProvider());
AutocompleteProviders.register(new BooleanValueProvider());
AutocompleteProviders.register(new EnumValueProvider());
AutocompleteProviders.register(new ExpressionProvider());
AutocompleteProviders.register(new DomainProvider());
AutocompleteProviders.register(new FormatPatternProvider());
AutocompleteProviders.register(new TagNameProvider());
AutocompleteProviders.register(new FencedBlockLanguageProvider());
AutocompleteProviders.register(new FrontmatterKeyProvider());
AutocompleteProviders.register(new FrontmatterValueProvider());

AutocompleteProviders.register(new ImagePathProvider());
CycleRegionWandModeHotkey.init();
MinecraftForge.EVENT_BUS.register(new RegionWandRenderer());
GuideWarmupPump.init();
MasterScheduler.init();
MasterScheduler.getInstance()
.submit(new LytHostWorkItem(lytHost));
MasterScheduler.getInstance()
.submit(new LytHostPreheatItem(lytHost));
MasterScheduler.getInstance()
.submit(new SearchIndexWorkItem());

// Phase 3: LytScript registrations
lytHost.registerScript("CommandLink", new CommandLinkScript());
lytHost.registerScript("Img", new ImageScript());
lytHost.registerScript("FloatingImage", new FloatingImageScript());
lytHost.registerScript("PlayerName", new PlayerNameScript());
lytHost.registerScript("KeyBind", new KeyBindScript());
lytHost.registerScript("SoundLink", new SoundLinkScript());
lytHost.registerScript("Structure", new StructureScript());
lytHost.registerScript("SubPages", new SubPagesScript());
lytHost.registerScript("Tooltip", new TooltipScript());
lytHost.registerScript("ItemGrid", new ItemGridScript());
lytHost.registerScript("ItemImage", new ItemImageScript());
lytHost.registerScript("ItemLink", new ItemLinkScript());
lytHost.registerScript("Category", new CategoryScript());
lytHost.registerScript("Special", new SpecialScript());
lytHost.registerScript("BlockImage", new BlockImageScript());
lytHost.registerScript("CsvTable", new CsvTableScript());
lytHost.registerScript("Mermaid", new MermaidScript());
lytHost.registerScript("QuestLink", new QuestLinkScript());
lytHost.registerScript("QuestCard", new QuestCardScript());
// Phase 3: SceneScript handles Scene and GameScene
SceneScript sceneScript = new SceneScript();
lytHost.registerScript("Scene", sceneScript);
lytHost.registerScript("GameScene", sceneScript);
// Phase 3: RecipeScript handles Recipe, RecipeFor, RecipeUsage, RecipesFor
RecipeScript recipeScript = new RecipeScript();
lytHost.registerScript("Recipe", recipeScript);
lytHost.registerScript("RecipeFor", recipeScript);
lytHost.registerScript("RecipeUsage", recipeScript);
lytHost.registerScript("RecipesFor", recipeScript);

MinecraftForge.EVENT_BUS.register(this);
GuideNH.LOG.info(
GuideDebugLog.infoAlways(
"GuideNH runtime bridge configuration loaded. enabled={}, hostConfigured={}, port={}, tokenConfigured={}",
ModConfig.runtimeBridge.enabled,
ModConfig.runtimeBridge.host != null && !ModConfig.runtimeBridge.host.trim()
Expand Down Expand Up @@ -113,20 +231,17 @@ public void postInit(FMLPostInitializationEvent event) {
public void completeInit(FMLLoadCompleteEvent event) {
super.completeInit(event);
GuideDevelopmentResourcePackWatcher.init();
GuideDevWatcherPump.init();
MasterScheduler.getInstance()
.submit(new DevWatchWorkItem());
GuideOnStartup.init();
}

@SubscribeEvent
public void onClientDisconnect(FMLNetworkEvent.ClientDisconnectionFromServerEvent event) {
GuideNH.LOG.info("Minecraft client disconnected. Stopping GuideNH runtime bridge session state");
GuideDebugLog.infoAlways("Minecraft client disconnected. Stopping GuideNH runtime bridge session state");
runtimeBridge.stop();
GuideME.closeSearch();
GuideScreenMemory.clear();
GuideScreenHomeHistory.shared()
lytHost.getNavigation()
.clear();
for (var guide : GuideRegistry.getAll()) {
guide.resetWarmup();
}
}
}
4 changes: 0 additions & 4 deletions src/main/java/com/hfstudio/guidenh/GuideNH.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
import static com.hfstudio.guidenh.GuideNH.MODID;
import static com.hfstudio.guidenh.GuideNH.MODNAME;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.hfstudio.guidenh.guide.internal.GuideCommand;
import com.hfstudio.guidenh.guide.internal.GuideNhBridgeCommand;
import com.hfstudio.guidenh.guide.internal.item.GuideItem;
Expand Down Expand Up @@ -35,7 +32,6 @@ public class GuideNH {
public static final String MODNAME = Tags.MODNAME;
public static final String VERSION = Tags.VERSION;
public static final String AUTHOR = "HFstudio";
public static final Logger LOG = LogManager.getLogger(MODID);

public static boolean debug = false;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.hfstudio.guidenh.bridge;

import com.hfstudio.guidenh.GuideNH;
import com.hfstudio.guidenh.guide.scene.support.GuideDebugLog;

public class GuideNhRuntimeBridge {

Expand All @@ -9,7 +9,7 @@ public class GuideNhRuntimeBridge {
public void start(GuideNhRuntimeBridgeSettings settings) {
stop();
if (!settings.canStart()) {
GuideNH.LOG.info(
GuideDebugLog.infoAlways(
"GuideNH runtime bridge start skipped. enabled={}, hostConfigured={}, portConfigured={}, tokenConfigured={}",
settings.isEnabled(),
!settings.getHost()
Expand All @@ -19,7 +19,7 @@ public void start(GuideNhRuntimeBridgeSettings settings) {
.isEmpty());
return;
}
GuideNH.LOG.info(
GuideDebugLog.infoAlways(
"Starting GuideNH runtime bridge. host={}, port={}, maxConnections={}, maxMessageBytes={}, maxPageSize={}, maxSubscriptions={}, maxDeltaEntries={}",
settings.getHost(),
settings.getPort(),
Expand All @@ -34,7 +34,7 @@ public void start(GuideNhRuntimeBridgeSettings settings) {

public void stop() {
if (server != null) {
GuideNH.LOG.info("Stopping GuideNH runtime bridge");
GuideDebugLog.infoAlways("Stopping GuideNH runtime bridge");
server.stop();
server = null;
}
Expand Down
Loading