개인 자료란 (JE)

  서버 커뮤니티

Profile 응애아기제니 대표칭호 없음
Profile

질문하기 플러그인

쿨타임이 아닌데도 쿨타임이라고 뜨는 문제

2024.01.20 조회 수 78 추천 수 0
이해도 초보자 
게임버전 (JE) 1.20.1 
게임버전 (BE) 관련없음 

// 이동하기 전에 쿨타임 체크
if (hasCooldown(player)) {
    long remainingTime = getRemainingCooldown(player);
    sendTitle(player, "", ChatColor.RED + "쿨타임이 남았습니다. 남은 시간: " + (remainingTime + 1) + "초", 0, 40, 10);
    return ;
}

player.teleport(location);
sendTitle(player, "", ChatColor.WHITE + "종이에 적혀있는 위치로 이동했습니다.", 0, 40, 10);
// 쿨타임 갱신
applyCooldown(player);
private boolean hasCooldown(Player player) {
    return cooldowns.containsKey(player.getUniqueId()) && System.currentTimeMillis() < cooldowns.get(player.getUniqueId());
}

private void applyCooldown(Player player) {
    int cooldownSeconds = 5; // 5초 쿨타임
    long cooldownMillis = System.currentTimeMillis() + (cooldownSeconds * 1000);
    cooldowns.put(player.getUniqueId(), cooldownMillis);

    new BukkitRunnable() {
        @Override
        public void run() {
            cooldowns.remove(player.getUniqueId());
        }
    }.runTaskLater(this, cooldownSeconds * 20); // 20틱당 1초
}

private long getRemainingCooldown(Player player) {
    long currentTime = System.currentTimeMillis();
    long cooldownEnd = cooldowns.get(player.getUniqueId());
    return Math.max(0, (cooldownEnd - currentTime) / 1000); // 남은 시간을 초 단위로 반환
}

이렇게 코드를 짰는데 (챗지피티가 도와줬습니다..) 인게임 내에서 이동은 잘 되지만 이동하고나면 이동했습니다 라는 멘트가 떠야되는데

쿨타임이 뜨더군요 ㅜ 쿨타임방식을 이런저런 방식으로 바꿔서 해봤는데도 되질않네요 어디서 문제가 발생하는걸까요?






1개의 댓글

응애아기제니
2024.01.20

해결했습니다

문제는 왼손에 든 아이템이 문제였습니다 ㅜ 왼손에 아이템이 있으면 바로 쿨타임이라고 얘기해주더라구요

본문엔 안적었지만 플레이어 손에 든 아이템을 확인하는 코드가

 

Player player = event.getPlayer();

ItemStack item = player.getInventory().getItemInMainHand();

이렇게 돼있던걸 전에쓰던 방식인

Player player = event.getPlayer();

ItemStack item = event.getItem(); 로 바꾸고 하니 해결됐습니다