eb911 6bc91614043642afafb744e12d09c140
반갑습니다냥!
제가 최근에 누군가의 부탁으로 경제 서버를 만들고 있다냥. 그런데 지나가는 사람이 커스텀NPC는 쓸모없고 도태되었으며, 플러그인에 비해 스크립트보다 안 좋다고 하더라냥. 그런데 말이다냥, 커스텀NPC가 모드라는 점만 빼면 스크립트보다 안 좋다고 말할 수 없다냥. 기본적으로 스크립트에서 구현 가능한 것 대부분이 구현이 가능하다냥.
몇 가지 예시를 들겠다냥.
1. GUI
대부분 GUI 하면 체스트 GUI를 생각한다냥. 그건 위치 클릭밖에 인식 못 하고, 밑에 인벤토리가 뜨는 문제가 있다냥.
이게 커스텀NPC에서 내가 직접 만든 송금 시스템이다냥. 옆에서 원하는 닉네임을 검색하고 선택한 후 보유 중인 돈을 체크하고 밑에 원하는 금액을 적는 시스템이다냥. GUI 부분에서 모드 제작과 동일할 정도이다냥.
난이도냥? 귀찮으니까 코드 일부 공개하겠다냥.
function gui2(e){
var gui = e.API.createCustomGui(1, 248, 166, false, e.player);
gui.setBackgroundTexture("minecraft:textures/gui/demo_background.png");
var players = e.player.getWorld().getAllPlayers();
var playersName = [];
for (var i in players) {
playersName.push(players[i].getName());
}
gui.addScroll(11, 30, 20, 60, 120, playersName);
gui.addLabel(12, "§0§l돈 : §0" + e.player.getStoreddata().get("돈"), 110, 25, 1000, 20);
gui.addLabel(13, "§0§l대금 : ", 110, 55, 1000, 20);
gui.addTextField(14, 140, 50, 100, 20).setHoverText("원하시는 금액을 입력해주세요");
gui.addButton(15, "송금", 120, 90, 100, 20);
e.player.showCustomGui(gui);
}
참고로 우리는 상자 밖에 버튼을 만들 수도 있다냥.
2. 스킬
요즘 스킬에 리소스팩을 쓴다고 들었다냥. 근데 말이다냥, 나는 악어라는 스트리머의 해신 콘텐츠 때 그 기술을 공개했다냥. 1.7.10 버전에서 말이다냥. 워크샵이랑 NPC랑 섞어서 썼다냥. 리소스팩 연동해서 플레이어 스킬로 만들기? 충분히 가능하다냥.
3. 보스
커스텀NPC는 보스에 최적화돼 있지만, 나는 보스 전문이 아니다냥. 그러므로 해외 자료를 가져오겠다냥.
[유튜브 영상](https://www.youtube.com/watch?v=CBvaTzwJ4Gg)을 보고 판단해주기 바란다냥.
4. 다른 기술과 연동
사실 논할 가치도 없다냥. 우리 포켓몬 모드에 직접 연동할 수 있는 코드가 존재할뿐만 아니라, 플러그인과 직접 연동이 가능하고 자바 자체 코드를 가져와서 작업할 수도 있다냥. 실제로 스크립트 플러그인과 연동한 적도 있고, 치지직, 트위치, 디스코드랑도 당연히 연동한 적 있다냥.
5. 그 외
사실 위에 4개는 한국에서 자주 논의된 내용이다냥. 그 외에도 AOS(롤 같은 게임)에서 미니언 시스템 같은 것 구현 가능하고, 커스텀 상점의 단점인 구매 시 바로 인벤에 들어오게 하는 것도 가능하다냥. 그리고 조금 더 배우면 돈 스크립트랑 연동해서 카드 결제 같은 시스템도 구현 가능하다냥.
물론 모드라서 사용자들이 다 다운받아야 들어올 수 있는 불편함은 사실이다냥. 그런데 이거 빼고 커스텀NPC가 구데기라고 생각하면 그냥 말로 "아 구데기잖아요"가 아니라 왜 구데기인지 설명해라냥. 물론 내가 커스텀NPC를 아직 제대로 못 써서 구현 못 하는 게 많다는 건 사실이다냥. 하지만 보통 스크립트에서 구현하는 것 대부분 구현이 가능하다냥. 내가 구현 못할 것 같은 것 다 가져와라냥.
그리고 나는 스크립트가 안 좋다고 커스텀NPC가 좋다는 게 아니라, 커스텀NPC도 생각보다 기능 많고 성능도 좋지만, 모드라서 그리고 한국에 사용자랑 자료가 없어서 안 알려졌다는 사실을 알리고 싶은 것이다냥.
구원좌
2024.08.17nashorn을 혹시 서버열때 서버내 모드에만 넣으면 되나요?
구원좌
2024.08.17[20:25:40][FINE/customnpcs][noppes.npcs.shared.common.util.LogWriter:73] Sat Aug 17 20:25:40 KST 2024
[20:25:40][FINE/customnpcs][noppes.npcs.controllers.ScriptController:53] Script Engines Available:
[20:25:40][FINE/customnpcs][noppes.npcs.controllers.ScriptController:112] ECMAScript: .js
[20:25:40][SEVERE/customnpcs][noppes.npcs.ScriptPlayerEventHandler:380] java.lang.NoSuchFieldException: classes
at java.base/java.lang.Class.getDeclaredField(Class.java:2642)
at noppes.npcs.ScriptPlayerEventHandler.registerForgeEvents(ScriptPlayerEventHandler.java:319)
at noppes.npcs.CustomNpcs.setup(CustomNpcs.java:250)
at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:248)
at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:240)
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:304)
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:284)
at net.minecraftforge.fml.javafmlmod.FMLModContainer.acceptEvent(FMLModContainer.java:106)
at net.minecraftforge.fml.ModContainer.lambda$buildTransitionHandler$4(ModContainer.java:107)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804)
at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1796)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)