Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как выдать игроку случайный предмет

Метки:
Теги Теги
1.15.2 plugin новичок

Stas021

Новичок
Пользователь
Баллы
16
У меня есть код, который должен раз в 5 мин. выдавать каждому игроку случайный предмет. Скажите, правильно ли у меня сделано? Если нет - подскажите как правильно)
package random;
import java.util.Random;
import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
public class random extends JavaPlugin implements Listener{
public static final Logger _log = Logger.getLogger("minecraft");
int players = 0;
public void onEnable () {
_log.info("Enabled!");
_log.warning("Warning");
players = Bukkit.getOnlinePlayers().size();
while (true) {
try {
Thread.sleep(300000);
} catch(InterruptedException ex) {}
for (int i = 0; i < players; i++) {
itemGive(i);
}
}
}

public void onDisable() {
getLogger().info("Disabled");
}

public ItemStack itemGive(int p) {
int materialMax = Material.values ().length - 1;
int random = new Random ().nextInt (materialMax);
ItemStack itemStack;
itemStack = new ItemStack (Material.values ()[random]);
try {
itemStack = new ItemStack (Material.values ()[random]);
}catch (Exception e)
{
return itemGive (p);
}
return itemStack;
}
}
И как мне потом это закинуть на сервер (сохранить всё в jar файл и закинуть в папку plugins, правильно?)
 
Тебе лучше начать с изучения Джавы и Spigot/Bukkit api, ибо не дело мейн поток приостанавливать на 5 минут.

А по теме, тебе нужно запускать BukkitScheduler с периодичностью в (5 * 60 * 20) тиков и там уже выполнять выдачу предметов.
В твоем коде, ты блокируешь основной поток на 5 минут и из-за этого сервер у тебя просто напросто зависнет, и выдача предметов у тебя не осуществляется, о выдаче можешь почитать тут - https://www.spigotmc.org/threads/how-to-add-items-gradually-to-playerss-inventory.389028/.

О шедулярах - https://bukkit.gamepedia.com/Scheduler_Programming#Self-Canceling_Example
 
Последнее редактирование:
without timer, only randomizer

Random randomizer = new Random();
Material[] list = Material.values();
Material randomItem = list[randomizer.nextInt(list.length)];
*Player*.getInventory().addItem(new ItemStack(randomItem));

1.19 works
 

Поделиться этой страницей

Назад
Верх