1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Stas021, 9 май 2020.

  1. Автор темы
    Stas021

    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, правильно?)
     
  2. Sigvegutt

    Sigvegutt Активный участник Пользователь

    Баллы:
    96
  3. twyhzz

    twyhzz Активный участник Пользователь

    Баллы:
    61
    Тебе лучше начать с изучения Джавы и 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
     
    Последнее редактирование: 9 май 2020
  4. 4ebur

    4ebur Активный участник

    Баллы:
    61
    Имя в Minecraft:
    __4eburashka__
    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
     

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