개인 자료란 (JE)

  서버 커뮤니티

Profile ArkFac 대표칭호 없음

ArkFactorial d27c7bdb61f74f2ea2ca7ce363658bf3

Profile

이해도 플러그인 
게임버전 (JE) 버킷 

intellij Minecraft Development 플러그인을 이용하여 생성한 PaperMC 1.18.1 에서 동작하는 플러그인입니다

명령어를 입력할경우 init함수가 실행되도록까지는 구현을 해두었고 하고싶은것은

1. init함수가 실행될경우 플레이어팀, 관전자팀, 스코어보드 objective 생성 후 변수로 저장(만약 있다면 생성하지 않고 그대로 가져오기)

2. 저장해둔 변수를 가지고 모든 플레이어를 플레이어팀에 참가시키고, 모든 플레이어에 대해서 생성시킨 object에 값 할당

이 두가지를 하고싶어서 구글링을 해보았고 제 나름대로 코드를 짜봤습니다

public class Game {
    private final Intime plugin;
    Team playerTeam, observerTeam;
    Objective timeObj;
    boolean playingGame = false;
    int playerDefaultTime = 1500;  // 단위 = 초

    public Game(Intime plugin) {
        this.plugin = plugin;
    }

    void init() {
        this.playerTeam = findOrMakeTeam("player");
        this.observerTeam = findOrMakeTeam("observer");
        this.timeObj = findOrMakeObjective("time", "dummy", "time");
        playingGame = true;

        for (Player p : Bukkit.getOnlinePlayers()) {
            setScoreboardVal(p, timeObj, playerDefaultTime);
            observerTeam.addPlayer(p);
        }
        timeObj.setDisplaySlot(DisplaySlot.PLAYER_LIST);
    }


    private Team findOrMakeTeam(String name){
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard scoreboard = manager.getNewScoreboard();
        Team tmp = scoreboard.getTeam(name);
        if (tmp == null) {
            tmp = scoreboard.registerNewTeam(name);
        }
        return tmp;
    }


    private Objective findOrMakeObjective(String name, String criteria, String displayName) {
        ScoreboardManager manager = Bukkit.getScoreboardManager();
        Scoreboard scoreboard = manager.getNewScoreboard();
        Objective tmp = scoreboard.getObjective("name");
        if (tmp == null) {
            tmp = scoreboard.registerNewObjective(name, criteria, displayName);
        }
        return tmp;
    }

    private void setScoreboardVal(Player p, Objective obj, int val) {
        obj.getScore(p).setScore(val);
    }
}

다음과 같이 코드를 작성하였고 명령어를 통하여 init 함수를 실행시켰고, 이 과정에서 logger을 통하여 함수가 실행되었고, 지역변수에 각각 null이 아닌 변수가 할당되는것을 확인했음에도 인게임에서 확인해보면 objective가 생성 및 탭창에 표시, 팀 생성 및 참여중 아무것도 이루어진게 없었습니다.  함수가 실행되는 과정에서 그 어떠한 오류도 콘솔창에는 나타나지 않았으며 혹시나 팀, objective가 이미 있으면, 하다못해 플레이어의 스코어보드에 값이 할당되어있다면 작동할까 싶어서 테스트해봤지만 작동하지 않았습니다. 혹시 제가 어디에서 잘못하고있는건지 알려주실 수 있을까요?

1개의 댓글

ArkFac
2022.02.15

해결했습니다 manager.getNewScoreboard(); 를 Smanager.getMainScoreboard();로 바꾸어 해결했습니다

뉴스 및 창작물
/files/thumbnails/268/789/003/262x150.crop.jpg?20240515192032

레드스톤

벌레먹은 돌 빠르게 제거하는 법

GlassesFilm

2024-05-15

0

/files/thumbnails/797/788/003/262x150.crop.jpg?20240515090924

건축

마인크래프트로 구현한 카르카손 보드게임

Warak

2024-05-15

1

/files/thumbnails/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0

/files/thumbnails/855/781/003/262x150.crop.jpg?20240505141129

레드스톤

레이저 클리너

GlassesFilm

2024-05-05

1