Jshader
JShader는 Bukkit 계열 마인크래프트 서버에 자바스크립트 실행 엔진을 공급하는 플러그인이자 라이브러리이다. 화면에 그래픽 효과를 입히는 셰이더와는 관계가 없으며, 이름의 Shader는 라이브러리 코드를 다른 배포물에 포함하는 소프트웨어 개발 용어인 shading에서 비롯되었다.[1]
배경과 역할
자바 런타임에 기본 포함되던 내시혼(Nashorn) 자바스크립트 엔진은 Java 15에서 제거되었다.[2] JShader는 OpenJDK의 독립형 nashorn-core를 플러그인에 포함하고, ScriptEngineManager에 JavaScript라는 이름으로 등록한다.[3] 자바스크립트를 사용하는 다른 플러그인이 새로운 Java 환경에서도 동일한 스크립트 엔진을 찾을 수 있게 하는 호환성 계층에 가깝다.
플러그인이 켜질 때 서버의 서비스 관리자에 이미 ScriptEngineManager 제공자가 있는지 검사한다. 제공자가 없다면 내시혼을 담은 관리자를 가장 높은 우선순위의 Bukkit 서비스로 등록하고, 이미 등록되어 있다면 중복 등록하지 않는다.[3] 따라서 JShader 자체에는 이용자가 실행할 명령어, 그래픽 효과, 리소스 팩 설정이 없다.
설치와 사용
JShader를 요구하는 플러그인을 서버에 설치할 때는 JShader의 JAR 파일도 plugins 폴더에 넣고 서버를 다시 시작한다.[1] 시작 로그의 JavaScript engine shaded는 엔진을 새로 등록했다는 뜻이며, JavaScript engine is already shaded는 다른 제공자가 이미 존재한다는 뜻이다. 의존 플러그인이 엔진을 찾지 못한다면 두 플러그인의 활성화 여부와 시작 순서, Java 버전을 함께 확인해야 한다.
플러그인 개발자는 Bukkit 서비스 관리자에서 등록된 엔진 관리자를 얻어 표준 javax.script API로 스크립트를 실행할 수 있다.
ScriptEngineManager manager =
Bukkit.getServicesManager().load(ScriptEngineManager.class);
ScriptEngine engine = manager.getEngineByName("JavaScript");
Object result = engine.eval("6 * 7");
JShader를 라이브러리로 포함한 경우에는 JShader.instance(plugin).load()로 엔진을 검사·등록할 수 있다. shadeOnly()는 실제로 새 제공자를 등록했을 때 true, 이미 제공자가 있을 때 false를 반환한다.[3] getChecker()와 getShader()를 이용하면 다른 클래스도 Bukkit 서비스로 검사하거나 등록할 수 있지만, 같은 서비스의 여러 제공자가 충돌하지 않도록 의존 관계와 우선순위를 설계해야 한다.
개발과 배포
소스 코드는 MIT 라이선스로 공개되어 있다. 빌드 설정은 내시혼 코어를 결과 JAR에 포함하며, Bukkit API는 서버가 제공하는 의존성으로 처리한다.[4] 배포 파일의 plugin.yml에는 별도 명령이나 권한이 선언되어 있지 않다. 이 때문에 서버 관리자가 직접 조작하는 기능성 플러그인보다는 다른 플러그인의 실행 환경을 보완하는 기반 구성 요소로 보는 편이 정확하다.
외부 링크
각주
- ↑ 1.0 1.1 JShader, GitHub. 2026년 8월 5일 확인.
- ↑ JEP 372: Remove the Nashorn JavaScript Engine, OpenJDK. 2026년 8월 5일 확인.
- ↑ 3.0 3.1 3.2 JShader.java, GitHub. 2026년 8월 5일 확인.
- ↑ build.gradle, GitHub. 2026년 8월 5일 확인.