Вопрос Как сделать проверку на количество игроков?

Версия Minecraft
1.16.X

SacDos

Пользователь
Сообщения
102
Привет, на протяжении дня ищу по всему интернету, как сделать проверку на количество игроков. Идея моего плагина такова, если количество игроков больше 10, то всем игрокам выдается какой-то предмет. Выдать предмет не тяжело, но дать понять плагину имеется ли 10 человек на сервере, тяжело. Прошу объяснить начинающему говно-кодеру как решить мою проблемку, за раннее спасибо
 
Привет, на протяжении дня ищу по всему интернету, как сделать проверку на количество игроков. Идея моего плагина такова, если количество игроков больше 10, то всем игрокам выдается какой-то предмет. Выдать предмет не тяжело, но дать понять плагину имеется ли 10 человек на сервере, тяжело. Прошу объяснить начинающему *****-кодеру как решить мою проблемку, за раннее спасибо
if (Bukkit.getOnlinePlayers().size() >= 10)

И всё
 
Java:
public class Plugin extends JavaPlugin implements Listener {
    @Override
    public void onEnable() {
         Bukkit.getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        if (Bukkit.getOnlinePlayers().size() > 10) {
            // whatever you want
        }
    }
}
Идея моего плагина такова, если количество игроков больше 10, то всем игрокам выдается какой-то предмет
Но концептуально идея абузивная.
 
Java:
public class Plugin extends JavaPlugin implements Listener {
    @Override
    public void onEnable() {
         Bukkit.getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onJoin(PlayerJoinEvent e) {
        if (Bukkit.getOnlinePlayers().size() > 10) {
            // whatever you want
        }
    }
}

Но концептуально идея абузивная.
Надюпают
 
Я бы сделал что-то типа

Java:
void onEnable() {
    getServer().getScheduler().runTaskTimer(this, () -> {
        if (getServer().getOnlinePlayers().size() >= 10) {
            giveItem()
        }
    }, 0, 20 * 60);
}

void giveItem() {
    // todo: тут раздай всем предмет
}

В этом варианте предмет раздаётся не чаще, чем раз в 60 секунд
 
Ну тогда уже

Код:
void onEnable() {
    File f = new File(getDataFolder().getAbsolutePath());
    config = YamlConfiguration.loadConfiguration(f)
    getServer().getScheduler().runTaskTimer(this, () -> {
        if (getServer().getOnlinePlayers().size() >= 10) {
            giveItem()
        }
    }, 0, 20 * config.getInt("time-in-seconds",60));
}

void giveItem() {
    // TODO
}
 
Ну тогда уже

Код:
void onEnable() {
    File f = new File(getDataFolder().getAbsolutePath());
    config = YamlConfiguration.loadConfiguration(f)
    getServer().getScheduler().runTaskTimer(this, () -> {
        if (getServer().getOnlinePlayers().size() >= 10) {
            giveItem()
        }
    }, 0, 20 * config.getInt("time-in-seconds",60));
}

void giveItem() {
    // TODO
}
offtop Это не будет работать. Ты делаешь конфиг из папки плагина
 
offtop Это не будет работать. Ты делаешь конфиг из папки плагина
Исправлю
Объединено

Код:
void onEnable() {
    File f = new File(getDataFolder().getAbsolutePath()+"/config.yml");
    config = YamlConfiguration.loadConfiguration(f)
    getServer().getScheduler().runTaskTimer(this, () -> {
        if (getServer().getOnlinePlayers().size() >= 10) {
            giveItem()
        }
    }, 0, 20 * config.getInt("time-in-seconds",60));
}

void giveItem() {
    // TODO
}
Объединено

Но первый код мне нравился больше
 
offtop Может тогда укажешь на мои ошибки?
offtop
Java:
void onEnable() {
    File file = new File(getDataFolder(), "config.yml");
    YamlConfiguration config = YamlConfiguration.loadConfiguration(file)
    getServer().getScheduler().runTaskTimer(this, () -> {
        if (getServer().getOnlinePlayers().size() >= 10) {
            giveItem()
        }
    }, 0, 20 * config.getInt("time-in-seconds",60));
}

void giveItem() {
    // TODO
}

А вообще, правильнее было бы использовать saveDefaultConfig и getConfıg

Лучше закончить на этом тк оффтопим в теме слишком много
 
offtop
Java:
void onEnable() {
    File file = new File(getDataFolder(), "config.yml");
    YamlConfiguration config = YamlConfiguration.loadConfiguration(file)
    getServer().getScheduler().runTaskTimer(this, () -> {
        if (getServer().getOnlinePlayers().size() >= 10) {
            giveItem()
        }
    }, 0, 20 * config.getInt("time-in-seconds",60));
}

void giveItem() {
    // TODO
}

А вообще, правильнее было бы использовать saveDefaultConfig и getConfıg

Лучше закончить на этом тк оффтопим в теме слишком много
у меня выдаёт ошибку getServer().getScheduler().runTaskTimer(THIS, () -> {
Код выглядит так

Код:
package org.sacdos.erpg;[/SUP]

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import static org.bukkit.Bukkit.getServer;

public class OnlineGive implements Listener {

@EventHandler
    public void OnlineGive(PlayerJoinEvent e) {
int NowOnlinePlayers;
NowOnlinePlayers = Bukkit.getOnlinePlayers().size();
if (Bukkit.getOnlinePlayers().size() >= 10) {
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "|");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| On server now " + NowOnlinePlayers + " online, it's cool :3");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "|");
getServer().dispatchCommand(getServer().getConsoleSender(), "p giveall 100");
        }
    }
}
 
Последнее редактирование модератором:
у меня выдаёт ошибку getServer().getScheduler().runTaskTimer(THIS, () -> {
Код выглядит так

package org.sacdos.erpg;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import static org.bukkit.Bukkit.getServer;

public class OnlineGive implements Listener {

@EventHandler
public void OnlineGive(PlayerJoinEvent e) {
int NowOnlinePlayers;
NowOnlinePlayers = Bukkit.getOnlinePlayers().size();
if (Bukkit.getOnlinePlayers().size() >= 10) {
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "|");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| On server now " + NowOnlinePlayers + " online, it's cool :3");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "|");
getServer().dispatchCommand(getServer().getConsoleSender(), "p giveall 100");
}
}
}
Вместо this укажи свой JavaPlugin
 
Вместо this укажи свой JavaPlugin
JavaPlugin не дает компилировать, предлагаемые решения вот
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Я использовал третье и мне в консоль при любом действие плагин выдает ошибку
Вам необходимо зарегистрироваться для просмотра изображений-вложений

Причем не работает совсем другое действие. если иметь всё в сумме, то мне не помогла простая замена на JavaPlugin. Вот код который я сделал (он не работает, JavaPlugin подчеркнут красным)


Код:
package org.sacdos.erpg;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.Plugin;

import static org.bukkit.Bukkit.getServer;

public class OnlineGive implements Listener {
 
@EventHandler
    public void OnlineGive(PlayerJoinEvent e) {
int NowOnlinePlayers;
NowOnlinePlayers = Bukkit.getOnlinePlayers().size();
getServer().getScheduler().runTaskTimer(JavaPlugin, () -> {
if (Bukkit.getOnlinePlayers().size() >= 2) {
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "|");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "| On server now " + NowOnlinePlayers + " online, it's cool :3");
Bukkit.getConsoleSender().sendMessage(ChatColor.GOLD + "|");
getServer().dispatchCommand(getServer().getConsoleSender(), "p giveall 150");
        }
}, 0, 20 * 20);
    }

private class JavaPlugin {
    }
}
 
Последнее редактирование модератором:
Тебе стоит изучить жаву получше, прежде чем писать плагины
я этим и занимаюсь, читаю книгу и одновременно с этим стараюсь, что-то писать, но попрошу понимающих объяснить.
Объединено

Тебе нужно сделать конструктор, либо instance
покажи пожалуйста пример
 
покажи пожалуйста пример
Java:
public class OnlineGive implements Listener {

    private final MyPlugin plugin;

    public OnlineGive(MyPlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    // ...
        Bukkit.getScheduler().runTaskTimer(plugin, () -> {
            // ...
        }, 0, 20 * 20);
    // ...

}
Java:
public class MyPlugin extends JavaPlugin {
    @Override
    public void onEnable() {
         Bukkit.getPluginManager().registerEvents(new OnlineGive(this), this);
    }
}
Не понимаю я, правда, зачем при каждом срабатывании ивента создавать и запускать повторяющийся таск.
В любом случае, демонстрирую я здесь не это.
 
private class JavaPlugin { } }
Что это? Вообще класс JavaPlugin встроен в bukkit и оттуда импортируется. Данное наследование помогает баккиту понять, что это главный класс плагина


я этим и занимаюсь, читаю книгу и одновременно с этим стараюсь, что-то писать, но попрошу понимающих объяснить.
Объединено


покажи пожалуйста пример
Пример с instance:

Java:
private static YourClassName instance;

public static YourClassName getInstance(){
    if (instance == null) {instance = new YourClassName()}
    return instance;
}
 
Назад
Сверху Снизу