Tạo plugin mới

Mọi plugin theo cùng một chuẩn: cùng cấu trúc thư mục, cùng quy ước đặt tên, cùng cách export. plugins/nativeutils là bản mẫu tham chiếu.

Dùng Claude Code

Repo có sẵn skill leono-new-plugin trong .claude/skills/. Chỉ cần mô tả bằng lời:

tạo plugin Firebase Analytics + Remote Config
port plugin IAP từ super-godot-plugins sang

Skill sẽ chốt API cùng bạn, sinh khung, viết code Android và iOS, thêm nút vào demo, viết README và trang tài liệu.

Sinh khung bằng tay

python .claude/skills/leono-new-plugin/scripts/new_plugin.py firebase
python .claude/skills/leono-new-plugin/scripts/new_plugin.py iap --pascal IAP --autoload Billing

Script tạo đủ 13 file với tên đã thay sẵn, kèm ví dụ một hàm đồng bộ (get_example) và một hàm bất đồng bộ (request_example → signal example_finished). Gradle tự nhận module mới.

Quy ước

Thành phầnGiá trị
Thư mục / Java packageplugins/<tên>/ · com.leono.<tên>
Singleton nativeLeono<Tên>
Thư mục addonaddons/leono_<tên>/
AARbin/android/leono_<tên>.aar
xcframeworkbin/ios/leono_<tên>.ios.template_{debug,release}.xcframework
GDExtension entryleono_<tên>_init
Project Settingsleono/<tên>/<key>
Tên hàm / signalsnake_case, giống hệt trên Android và iOS

Checklist

  1. Chốt APITên singleton, autoload, hàm, signal, dữ liệu trả về — chung cho 2 nền tảng. Thứ Godot đã có thì chuyển tiếp, không viết native.
  2. AndroidKotlin @UsedByGodot fun snake_case(). Signal emit qua runOnRenderThread, thao tác UI qua runOnUiThread. Thư viện Maven chỉ khai báo trong deps.json.
  3. iOSObjC++ bind hàm trong _bind_methods, emit signal trên main thread. Framework/Info.plist thêm trong _export_begin của plugin.gd.
  4. AutoloadFallback cho editor, hàm async dùng được với await, connect signal native theo tên. Tính năng nhạy cảm chính sách là setting opt-in, mặc định tắt.
  5. DemoBật plugin trong demo/project.godot, thêm nút trong demo/main.gd, mở rộng _self_check().
  6. Tài liệuREADME plugin; trang docs/plugins/<tên>.html (copy từ trang NativeUtils); thêm vào NAV và API trong docs/assets/docs.js; thêm thẻ ở trang chủ; chạy deploy_docs.bat để đưa lên addons.leonogames.com.
  7. Build & kiểm trabuild_android.bat <tên>, self-check headless; iOS build trên Mac bằng scripts/build_ios.sh <tên>.

Thêm trang tài liệu

Sidebar, tìm kiếm và nút Trước/Tiếp đều sinh từ cấu hình trong docs/assets/docs.js:

{ title: 'Plugins', items: [
  { id: 'nativeutils', title: 'NativeUtils', href: 'plugins/nativeutils.html', tag: 'v1.0' },
  { id: 'firebase', title: 'Firebase', href: 'plugins/firebase.html', tag: 'v0.1' },   // thêm dòng này
] },

Trang mới đặt <body data-page="firebase" data-root="../"> và các thẻ .method có id trùng tên hàm để tìm kiếm nhảy đúng chỗ.