Быстрый старт¶
1. Сборка¶
powershell -NoProfile -ExecutionPolicy Bypass -File .\build.ps1
# если libs\ уже заполнен:
powershell -NoProfile -ExecutionPolicy Bypass -File .\build.ps1 -SkipDependencies
Результат — build\FastScript-1.0.0.jar (~415 КБ). ASM уже внутри,
за-reloc-ирован в io.github.dsh.fastscript.lib.asm, конфликтов с другими
плагинами не будет. paper-api в jar не пакуется — его предоставляет сервер.
Windows PowerShell 5.1
Файлы .ps1 запускайте только через
powershell -ExecutionPolicy Bypass -File ... — прямое выполнение
заблокировано политикой. Файлы без BOM: Set-Content -Encoding UTF8
в PowerShell 5.1 добавляет BOM, который ломает javac.
2. Установка¶
- Положите jar в
plugins/сервера и перезапустите сервер. - Появится каталог
plugins/FastScript/scripts/сexample.fs. - Свои скрипты — файлы
*.fsв этом каталоге. - Каждую команду из скриптов (
command heal ...) продублируйте вplugin.yml(секцияcommands), иначе Bukkit её не увидит. - После правок скриптов:
/fastscript reload(алиас/fs reload).
3. Первый скрипт¶
# plugins/FastScript/scripts/hello.fs
on player join:
message "Welcome to the server!"
command heal(target : text) permission fastscript.heal:
let victim = player(target)
if victim is null:
message "Player '" + target + "' is not online."
stop
message "Healed " + target
Не забудьте в plugin.yml:
commands:
heal:
description: Declared by a script
usage: /heal <player>
4. Проверка без сервера¶
Self-test + бенчмарк из собранного jar (заодно проверяет самодостаточность без оригинального ASM):
$root='<корень репозитория>'; $jdk=$env:JAVA_HOME
$libs = @(Get-ChildItem "$root\libs" -Filter *.jar | Where-Object { $_.Name -notmatch '^asm' } | ForEach-Object { $_.FullName })
& "$jdk\bin\java.exe" -cp (("$root\build\FastScript-1.0.0.jar") + ';' + ($libs -join ';')) io.github.dsh.fastscript.bench.BenchRunner "bench\scripts\Arithmetic.fs" 40000
Ожидается all checks passed и строки speed-up vs interpreter
(fib ~4x, sum-range ~12–20x; плавают от прогрева JIT — это нормально).