나는 게임이 시작될 때 모든 플레이어가 자신의 스코어 보드에서 볼 수있는 Bukkit 실행 가능 타이머를 만들었지 만, 타이머에 참여하는 모든 플레이어가 2만큼 올라간다는 것을 알았습니다. 이 문제를 해결하는 방법에 대한 단서가 없습니다. 나는 이것에 대한 해결책을 찾지 않고 어디에서나 찾고 있었다.부킷 타이머는 플레이어가 합류 할 때 속도가 향상됩니다.
게임 내 클래스 :
public class InGame extends BukkitRunnable implements Listener{
private Main main;
public InGame(Main main) {
this.main = main;
}
public static int time;
public void run() {
if (time == 300) {
if (GameState.getCurrentGamestate() == GameState.INGAME) {
Bukkit.broadcastMessage(Main.prefix + "§b5 " + "§6minutes has passed!");
for(Player all : main.players) {
all.playSound(all.getLocation(), Sound.NOTE_PLING, 1, 1);
}
return;
}
}
if(time == 6000) {
Bukkit.broadcastMessage(Main.prefix + "§b10 " + "§6minutes has passed!");
for(Player all : main.players) {
all.playSound(all.getLocation(), Sound.NOTE_PLING, 1, 1);
}
}
if(time == 12000) {
Bukkit.broadcastMessage(Main.prefix + "§b20 " + "§6minutes has passed!");
for(Player all : main.players) {
all.playSound(all.getLocation(), Sound.NOTE_PLING, 1, 1);
}
}
if(time == 18000) {
Bukkit.broadcastMessage(Main.prefix + "§b30 " + "§6minutes has passed!");
for(Player all : main.players) {
all.playSound(all.getLocation(), Sound.NOTE_PLING, 1, 1);
}
}
time += 1;
}
}
메인 클래스 코드 :
public class Main extends JavaPlugin implements Listener{
//int minutes = Waiting.timeUntilStart/60;
//int seconds = Waiting.timeUntilStart % 60;
//String t = String.format("%02d:%02d", minutes, seconds);
public static Plugin plugin;
public static Main main;
ArrayList<UUID> player = new ArrayList();
public File file;
public FileConfiguration locationConfig;
public static int startCountdownId;
public static int startCounterId;
private int waitingtask;
private int count = 120;
private int number = 15;
public ArrayList<Player> players = new ArrayList();
public ArrayList<Player> spectators = new ArrayList();
public ArrayList<Player> innocent = new ArrayList();
public ArrayList<Player> traitor = new ArrayList();
public static Map<Location, Inventory> chests = new HashMap<Location, Inventory>();
public static String prefix = "§8§l┃ §6TIMV §8┃ §6";
Inventory spec;
public void onEnable() {
Bukkit.getServer().getWorld("world").setTime(300);
startCountdown();
saveDefaultConfig();
registerFile();
GameState.setGamestate(GameState.WAITING);
plugin = this;
registerEvents();
Bukkit.getConsoleSender().sendMessage("§cPlugin developed by InfernoArtz & Kodepus");
this.getCommand("timv").setExecutor(new TimvCommand(this));
//this.getCommand("role").setExecutor(new RoleCommand(this));
}
public void loc1() {
Location loc = (Location) main.locationConfig.get("main.spawns.Lobby");
}
public void onDisable() {
plugin = null;
}
/* SCOREBOARD KODER */
@EventHandler
public void onJoin(PlayerJoinEvent e) {
final Player p = e.getPlayer();
new BukkitRunnable() {
@Override
public void run() {
final org.bukkit.scoreboard.Scoreboard s = Bukkit.getScoreboardManager().getNewScoreboard();
p.setScoreboard(s);
final Objective o = s.registerNewObjective("sidebar", "dummy");
if (p == null || !p.isOnline() || GameState.getCurrentGamestate() != GameState.WAITING) {
cancel();
return;
} else {
}
o.setDisplayName("§bTIMV §3" + Waiting.timeUntilStart);
o.setDisplaySlot(DisplaySlot.SIDEBAR);
o.getScore(" ").setScore(12);
o.getScore("§6§lRole").setScore(11);
o.getScore("§fUnknown").setScore(10);
o.getScore(" ").setScore(9);
o.getScore("§a§lPlayers Left").setScore(8);
o.getScore("§f" + Bukkit.getOnlinePlayers().size()).setScore(7);
o.getScore(" ").setScore(6);
o.getScore("§b§lRound Stats").setScore(5);
o.getScore("§7Karma: §f0").setScore(4);
o.getScore(" ").setScore(3);
o.getScore("§8§m--------").setScore(2);
o.getScore("§6play.§eserver§6.com").setScore(1);
}
}.runTaskTimer(this, 1, 20);
}
public void registerFile() {
file = new File(getDataFolder(), "locations.yml");
locationConfig = YamlConfiguration.loadConfiguration(file);
saveFile();
}
public void saveFile() {
try {
locationConfig.save(file);
} catch(IOException e) {
}
}
public void registerEvents()
{
Bukkit.getPluginManager().registerEvents((this), this);
Bukkit.getPluginManager().registerEvents(new JoinEvent(this), this);
Bukkit.getPluginManager().registerEvents(new QuitEvent(this), this);
Bukkit.getPluginManager().registerEvents(new PlayerInteractEvent(this), this);
Bukkit.getPluginManager().registerEvents(new PvpEvent(this), this);
Bukkit.getPluginManager().registerEvents(new FallEvent(this), this);
Bukkit.getPluginManager().registerEvents(new InventoryEvent(this), this);
Bukkit.getPluginManager().registerEvents(new LobbyEvent(this), this);
Bukkit.getPluginManager().registerEvents(new BlockPlace(this), this);
Bukkit.getPluginManager().registerEvents(new BreakEvent(this), this);
Bukkit.getPluginManager().registerEvents(new DeathEvent(this), this);
Bukkit.getPluginManager().registerEvents(new LoginEvent(this), this);
Bukkit.getPluginManager().registerEvents(new HungerEvent(this), this);
Bukkit.getPluginManager().registerEvents(new NoMobSpawn(this), this);
}
@SuppressWarnings("deprecation")
public void startCountdown() {
Waiting.timeUntilStart = 300;
startCountdownId = getServer().getScheduler().scheduleSyncRepeatingTask(this, new Waiting(this), 20l, 20l);
}
@SuppressWarnings("deprecation")
public void startCounter() {
InGame.time = 0;
startCounterId = getServer().getScheduler().scheduleSyncRepeatingTask(this, new InGame(this), 20l, 20l);
}
public void stopCountdown() {
getServer().getScheduler().cancelTask(startCountdownId);
}
public void restartCountdown() {
startCountdown();
stopCountdown();
}
public static Main getPlugin() {
return main;
}
}
'public static int time;'모든 플레이어에 대해 타이머를 공유하고 있습니다. – Draco18s
여기에 문제가 있다고 생각하지 마십시오 – InfernoArtz
예, 그렇습니다. '정적'이 무엇을하는지보십시오. – Draco18s