Skip to content

Mod JavaScript

Sistem JS di CampAPI dibuat supaya modding terasa praktis: satu manifest, satu entry file, lalu file tambahan kalau memang perlu.

Struktur folder

text
{Akar Folder Data CampAPI}/scripts/
  ExampleMod/
    manifest.json
    scripts/
      index.js
      utils.js

Field yang dibaca dari manifest

Loader membaca field berikut dari manifest.json:

  • name — nama mod yang tampil
  • author — nama pembuat mod
  • version — string versi
  • namespace — namespace buat import @namespace/...
  • export — menandai mod supaya bisa diimport lewat namespace
  • entry atau main — file entry di dalam scripts/

Contoh:

json
{
  "name": "Example Mod",
  "author": "Alvin",
  "version": "1.0.0",
  "namespace": "example",
  "export": true,
  "entry": "index.js"
}

Fitur yang langsung tersedia di JS

Runtime kasih beberapa tool siap pakai:

  • console.log, console.info, console.warn, console.error, console.debug
  • std dan os
  • helper gaya Node seperti node:process, node:timers, node:events, node:path, node:util, node:buffer, node:fs, dan node:os
  • internal:mod untuk cari info mod
  • internal:network untuk fetch
  • internal:modding untuk signature scan

Contoh entry file

js
import { getModInfoByName } from 'internal:mod'
import { sigscan } from 'internal:modding'
import { fetch } from 'internal:network'

console.log('mod info:', getModInfoByName('Example Mod'))

const addr = sigscan('libminecraftpe.so', '48 8B ?? ??')
console.log('sigscan:', addr)

const response = fetch('https://example.com/api/version', {
  method: 'GET',
  timeout: 2
})

console.log(response.status, response.ok)
console.log(response.text())

Import file dari mod lain yang diexport

Kalau mod diberi label export, mod lain bisa import file-nya pakai @namespace/path.

js
import { helper } from '@example/utils.js'

Ini cocok buat utility bersama, konstanta, atau bootstrap yang dipakai ulang.

Catatan praktis

  • Entry file harus ada di folder scripts/.
  • entry akan fallback ke main.
  • Kalau dua-duanya tidak ada, loader pakai index.js.