
LiveJava
a VS Code-powered Web IDE that lets you build multi-class, hot-swappable native Java plugins instantly with zero reloads and automatic dependency injection.
Список изменений
Critical Fixes
#1 — Build off the main thread (LiveJavaPlugin.java)
buildProject() previously called javac synchronously in onCommand(), which froze the server tick loop. Now:
- Compilation runs in runTaskAsynchronously
- loadAndStartProject() + all Bukkit API calls come back via runTask on the main thread
#2 — Permission nodes (plugin.yml + LiveJavaPlugin.java + Lang.java)
Zero permissions existed before. Now:
- plugin.yml defines livejava.*, livejava.editor, livejava.build, livejava.unload, livejava.reload, livejava.debug, livejava.lang — all default to op
- onCommand checks the right permission per subcommand using a switch expression before executing anything
- Added NO_PERMISSION key to Lang (both EN and TR)
#3 — plugin.yml metadata (build.gradle + plugin.yml)
Three sub-fixes:
- Added processResources { filesMatching('plugin.yml') { expand project.properties } } — the literal ${project.version} now resolves at build time
- description changed from Turkish (LiveJava ana komutu) to English
- usage changed from the misleading /livejava
to /livejava <help|editor|build|unload|reload|debug|lang> - api-version bumped from '1.13' to '1.20'
Moderate Fixes
#4/#5/#6 — RuntimeCompiler rewrite (RuntimeCompiler.java)
- Removed the dead compile() single-file method (86 lines of dead code)
- Extracted the duplicated 40-line classpath building into a single private buildClasspath() method
- Replaced all Turkish error strings ("Satır", "Dosya", "Derlenecek hiçbir...") with English — these were bypassing the i18n system entirely
- Replaced the 5-directory loop with a for loop over a string array (DRY)
#7 — Public fields → getters (LiveJavaPlugin.java + WebIDEServer.java)
- projectStatuses and projectLogs changed from public final to private final
- Added getProjectStatuses() and getProjectLogs() methods
- WebIDEServer updated to use the getters
#10 — Auto-restore delay (LiveJavaPlugin.java)
Changed runTaskLater(..., 1L) to runTaskLater(..., 40L) — gives other plugins ~2 seconds to finish loading before scripts that depend on their APIs are restored.
#13 — Dead methods removed (ScriptManager.java)
Deleted startSpecificScript() and stopSpecificScript() — both were hardcoded to look up the "workspace" key which doesn't exist in the actual project-name-keyed architecture. They could never work.
#15 — editor.html no longer overwritten on every startup (LiveJavaPlugin.java)
Changed from Files.copy(..., REPLACE_EXISTING) to if (!editorHtml.exists()) Files.copy(...) — admin customizations to the editor survive restarts.
#16 — Swallowed IOException (LiveJavaPlugin.java)
catch (IOException ignored) {} in createDemoScript is now catch (IOException e) { getLogger().warning("Could not write demo script: " + e.getMessage()); }.
#17 — Demo script Turkish strings (LiveJavaPlugin.java)
All hardcoded Turkish strings in the generated demo script replaced with English:
- "LiveJava IDE ile Mükemmel Bir Şekilde Bildiriyorum!" → "Successfully started via LiveJava IDE!"
- "Kullanım: /livejavatest [heal/smite]" → "Usage: /livejavatest [heal/smite]"
- "Can fullendi!" → "Health restored!"
- "Güvenle bellekten silindi." → "Safely removed from memory."
