- Баллы
- 11
- Имя в Minecraft
- LALKATOP
У меня есть плагин, который при входе игрока запускает runTaskTimer(...), мне нужно сделать, чтобы при выходе игрока, он останавливался именно для этого игрока, как это сделать и можно ли вообще?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Как дать ему id, чтобы оно было уникально для каждого игрока?Записывай, например, в мапу ссылку на таск и при выходе доставай. В чем трабл?
Или можно давать таскам id и так же их записывать. При выходе доставать их по id. Ничего сложного. Нугл в помощь, там всё есть. Я в своё время нашел там ответ именно на этот вопрос
Как дать ему id, чтобы оно было уникально для каждого игрока?
Гугл в помощь, там всё есть.
public class PlayerTask extends BukkitRunnable {
private Set<Player> set = new HashSet<Player>();
public PlayerTask(Plugin plugin, int period) {
this.runTaskTimer(plugin, period, period);
}
public boolean add(Player player) {
return this.set.add(player);
}
public boolean remove(Player player) {
return this.set.remove(player);
}
@Override
public void run() {
this.set.forEach(player -> {
//TODO обработка таска.
});
}
}
Если ты не научишься искать для себя информацию, ты ничему не научишься. Если тебе это надо, так иди и возьми это, разберись. Я, как человек сталкивающийся с таким же вопросом года 3 назад, могу с увереностью тебе сказать, что ответ конкретно для твоего случая есть в интернете. Пробуй перефразировать свой вопросВ гугле сложно найти именно эту штуку для моего случая, я прошу просто нормально мне ответить, а не перенаправить в гугл и я буду очень благодарен
Да емае, я создал тему не для того чтобы слушать твои филосовские советы, я это все знаю просто у меня есть небольшая проблемма которую нужно быстро решить а не тратить на это кучу времениЕсли ты не научишься искать для себя информацию, ты ничему не научишься. Если тебе это надо, так иди и возьми это, разберись. Я, как человек сталкивающийся с таким же вопросом года 3 назад, могу с увереностью тебе сказать, что ответ конкретно для твоего случая есть в интернете. Пробуй перефразировать свой вопрос
Потратив на это кучу времени сейчас, ты не будешь тратить кучу времени и создавать глупые темы потомМожно ли сделать
Да емае, я создал тему не для того чтобы слушать твои филосовские советы, я это все знаю просто у меня есть небольшая проблемма которую нужно быстро решить а не тратить на это кучу времени
Мне как раз сейчас больше подходит потратить меньше времени, так как мне нужно заниматься сейчас другим и я хочу быстро решить проблемму, пожалуйста подскажи как дать id таскуПотратив на это кучу времени сейчас, ты не будешь тратить кучу времени и создавать глупые темы потом
Я тебе дал решение получше с одним таском.Мне как раз сейчас больше подходит потратить меньше времени, так как мне нужно заниматься сейчас другим и я хочу быстро решить проблемму, пожалуйста подскажи как дать id таску
Несовсем понял как вот это работаетЯ тебе дал решение получше с одним таском.
У ткбя вродь нет проверки есть ли игрок сетеЯ тебе дал решение получше с одним таском.
Здесь ты пишешь всё то, что тебе нужно делать в таскеНесовсем понял как вот это работает
this.set.forEach(player -> {
//TODO обработка таска.
});
Это то я понял, но что значит this.set.forEach(player -> { ?Здесь ты пишешь всё то, что тебе нужно делать в таске
private void giveIncome(Player p) {
String pname = p.getName();
int ticks = plugin.getConfig().getInt("income");
Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
@Override
public void run() {
double inc = getIncome(pname);
if(p.isOnline()) {
Commands.giveMoney(pname, inc);
} else return;
}
},ticks ,ticks);
}
Чего там модернизировать лол?вот мой метод с таском, как его модернизировать?
Код:private void giveIncome(Player p) { String pname = p.getName(); int ticks = plugin.getConfig().getInt("income"); Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() { @Override public void run() { double inc = getIncome(pname); if(p.isOnline()) { Commands.giveMoney(pname, inc); } else return; } },ticks ,ticks); }
А это тебе в java learnЭто то я понял, но что значит this.set.forEach(player -> { ?
public class PlayerTask extends BukkitRunnable {
private Map<Player, Integer> map = new HashMap<Player, Integer>();
private int coinPeriod;
private Plugin plugin;
public PlayerTask(Plugin plugin) {
this.plugin = plugin;
this.coinPeriod = this.plugin.getConfig().getInt("income");
this.runTaskTimer(this.plugin, 1, 1);
}
public void add(Player player) {
this.map.put(player, 0);
}
public void remove(Player player) {
this.map.remove(player);
}
@Override
public void run() {
this.map.forEach((player, period) -> {
if(period<this.coinPeriod) {
this.map.put(player, period++);
} else {
this.map.put(player, 0);
//TODO Commands.giveMoney(player.getName(), inc);
}
});
}
}