개인 자료란 (JE)

  서버 커뮤니티

한국 마인크래프트 포럼

마인크래프트 자료 및 커뮤니티 플랫폼

전체 회원수 127,679명 ( +90명 )

※ 장기간 미활동 회원 제외

Profile NamuTree0345 대표칭호 없음
Profile

자료란new 자바 에디션(JE)new 플러그인new 일반

Skript를 대체할 플러그인, Mine.js!

2021.08.22 조회 수 758 추천 수 2
장르 개발자 툴 
게임버전 1.17, 1.17.1 
원산지 국산 
개발자 네더랄드 
저작권 저희가 직접 만들었고, 라이선스는 GPL 3.0입니다. 
자료 출처 https://github.com/Netherald/mine.js 
소스 https://github.com/Netherald/mine.js 


[주의: 이 플러그인은 완전히 개발된것이 아닙니다. 그래서 많은 이벤트들이 없습니다. 필요한 이벤트가 있다면 GitHub Issue를 남겨주세요.]


Skript를 대체할 새 플러그인, Mine.js를 소개합니다.


JavaScript(JS)를 이용해 마인크래프트 서버 프로그래밍을 할 수 있는 플러그인입니다. 또한, J2V8(Java binding of V8 Engine)을 이용해 네이티브에서 실행하게되어 스크립트 로드 시간도 더 빠릅니다.

사용 방법은 위키 를 참고하세요.


속도 측정


Skript와 Mine.js의 속도 차이를 측정해보겠습니다.


속도 측정기 소스코드입니다.

public class CommandSpeedCheck extends JavaPlugin implements CommandExecutor {

    @Override
    public void onEnable() {
        System.out.println("Enabled!!");
        getCommand("test2").setExecutor(this);
        getCommand("test").setExecutor(this);
    }

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
        // lol
        System.out.println("Command~!");
        if(label.startsWith("commandspeedcheck:test")) {
            sender.sendMessage(Component.text("SpeedCheck start!"));
            long startTime = System.nanoTime();
            Bukkit.dispatchCommand(sender, args[0]);
            long endTime = System.nanoTime();
            sender.sendMessage(Component.text("Speed check done! Speed: " + ((endTime - startTime) / 1000000) + "ms"));
        } else if(label.startsWith("commandspeedcheck:test2")) {
            int a = 0;
            for(int i = 0; i < 10000000; i++) {
                a += 1;
            }
            sender.sendMessage(Component.text("A: " + a));
        }
        return true;
    }
}

이제 Mine.js와 Skript 소스코드를 알아보겠습니다. 둘은 모두 1억번 연산합니다.


Mine.js

function onInit() {
    createCommand('testa', [], (args, sender) => {
        let a = 0
        for(let i = 0; i < 100000000; i++) {
            a += 1
        }
        sender.send('A: ' + a)
    })
}

Skript

command /testsk:
    trigger:
        set {_int} to 0
        loop 100000000 times:
            add 1 to {_int}
        send "IntSk: %{_int}%" to player

속도 비교를 시작해보겠습니다.

0c3253ee2188d238dd13d02180e61b03.png

오, 바로 멈췄네요. 메인 스레드가 터진것같네요. 아예 틱이 멈췄습니다 ㅋㅋㅋㅋㅋ

8f68971bd9dced175a65e3976941e2b1.png

27449ms가 걸렸습니다.


이제는 Mine.js 코드로 해보겠습니다.

9650e4e6958402dac910a511f2cdbdb8.png

?????????

4f5b6d92a23498ddd0c5880332ab1990.png

솔직히 이정도까지는 예상 못했는데.... 놀랍네요.


이로 주작 없는 속도체크는 끝났습니다. 이 두 명령어는

Skript: 27449ms

Mine.js: 870ms가 걸렸고

이를 계산해보면 약 31~32배 차이납니다.

솔직히 이 결과는 틀릴 수도 있습니다... ㅠ 저도 이렇게 빠를거라고는 예상 못했는데

아마도 네이티브에서 Interprete하는게 도움이 되었다고 봅니다.


그 뒤로 궁금해서 한번 더 테스트를 해보았습니다.

Reload 속도는 누가 더 빠를까?

코드는 이정도 변경했습니다.

ba0a87b97e2167d989e598427adfa7c4.png

실행해본 결과...

eaa999fb3e499f8d2556f53e81a72857.png

아쉽게도 Skript가 더 빨랐네요 ㅠ 그렇지만 뭐 이정도는 인정합니다 ㅋㅋ..


다운로드

다운로드(불안정 릴리즈 0.1A)  


적용법

26d684cf8ae2396ac21fe17a2c97e221.png

위에 표시된 버튼을 누른뒤 다운로드된 플러그인을 plugins에 설치하세요.

(스크립트 폴더는 plugins/script입니다)


2개의 댓글

ingpungya
2021.08.23

이벤트 같은거 조금만 더 추가하면 Skript도 금방 잡을것 같네요!

이건 혁명이다!

RANK0816
2021.08.22

이정도면 조금 더 만들어지면 Skript 대체 가능할것 같네요

컨텐츠
https://www.koreaminecraft.net/files/thumbnails/952/941/002/262x150.crop.jpg?20211128203943

답안지

한마탐 수능 / 등급컷 + 해설 8

베개냥이

2021-11-25

2

https://www.koreaminecraft.net/files/thumbnails/670/940/002/262x150.crop.jpg?20211124215847

답안지

한마탐 5주차 / 정오표 + 해설 1

베개냥이

2021-11-24

2

https://www.koreaminecraft.net/files/thumbnails/133/938/002/262x150.crop.jpg?20211123001841
마인크래프트로 만든 움직이는 루디브리엄 3

LittleCharlotte

2021-11-22

8