응애아기제니
대표칭호 없음
이해도 | 초보자 |
---|---|
게임버전 (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); // 남은 시간을 초 단위로 반환 }
이렇게 코드를 짰는데 (챗지피티가 도와줬습니다..) 인게임 내에서 이동은 잘 되지만 이동하고나면 이동했습니다 라는 멘트가 떠야되는데
쿨타임이 뜨더군요 ㅜ 쿨타임방식을 이런저런 방식으로 바꿔서 해봤는데도 되질않네요 어디서 문제가 발생하는걸까요?
응애아기제니
2024.01.20해결했습니다
문제는 왼손에 든 아이템이 문제였습니다 ㅜ 왼손에 아이템이 있으면 바로 쿨타임이라고 얘기해주더라구요
본문엔 안적었지만 플레이어 손에 든 아이템을 확인하는 코드가
Player player = event.getPlayer();
ItemStack item = player.getInventory().getItemInMainHand();
이렇게 돼있던걸 전에쓰던 방식인
Player player = event.getPlayer();
ItemStack item = event.getItem(); 로 바꾸고 하니 해결됐습니다