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

[Решено] ФейкСлоты

Статус
Закрыто для дальнейших ответов.

Незнайчик

Активный участник
Пользователь
Баллы
76
Всем привет, решил попробовать себя в сфере написания плагинов, но что-то не получается :confused:
Глянул темку, подумал будет легко, но не тут-то было...
Максимальное количество игроков измененное через плагин
Java:
import java.util.Iterator;
import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.server.ServerListPingEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class FakeSlots extends JavaPlugin {

    Logger log = getLogger();
  
    public void onEnable(ServerListPingEvent e){
        log.info("FakeSlots start1!"); // Отображается
        e.setMaxPlayers(10); // Максимальное количество игроков не меняется
        log.info("FakeSlots start2!"); // Это сообщение не отображается...
    }
  
    public void onDisable(){
        log.info("FakeSlots has been disabled!");
    }
  
}
Помогите разобраться кто знает где ошибка)
 
Последнее редактирование:
Метод onEnable() не имеет аргументов. По крайней мере тот метод, который запустит сервер, загрузивший плагин в память при запуске. Метод, написанный в коде первого поста — это другой метод. Да, у него то же название, но другой список аргументов — а всё это вместе определяет сигнатуру (а ещё и возвращаемое значение, но тут ТС угадал).
На всякий случай, когда методы переопределяются, следует дописывать им аннотацию @Override — это будет пометка и программисту, и IDE, и компилятору о том, как всё должно быть устроено.
Событие ServerListPingEvent (как и любое другое в рамках Bukkit API) приходит в методы, имеющие область видимости public, тип void, расположенные в классе, наследующем интерфейс Listener, а также помеченные аннотацией @EventHandler.
Java:
public class FakeSlots extends JavaPlugin implements Listener {
    private final Logger log = getLogger();
    // ...
    @Override
    public void onEnable() {
        log.info("FakeSlots has been successfully enabled!");
    }
    @Override
    public void onDisable() {
        log.info("FakeSlots has been disabled!");
    }
    @EventHandler
    public void onServerListPing(ServerListPingEvent e) {
        e.setMaxPlayers(10);
        log.info("FakeSlots did that shit!");
    }
    // ...
}
P.S. Пожалуйста, используйте теги CODE=<язык> с тем языком, который фактически приводится (в случае данной темы это Java). PHP никак не подходит для исходников на Java, хотя бы потому, что его тупо нельзя скопировать без номеров строк.
 
Последнее редактирование:
Метод onEnable() не имеет аргументов. По крайней мере тот метод, который запустит сервер, загрузивший плагин в память при запуске. Метод, написанный в коде первого поста — это другой метод. Да, у него то же название, но другой список аргументов — а всё это вместе определяет сигнатуру (а ещё и возвращаемое значение, но тут ТС угадал).
На всякий случай, когда методы переопределяются, следует дописывать им аннотацию @Override — это будет пометка и программисту, и IDE, и компилятору о том, как всё должно быть устроено.
Событие ServerListPingEvent (как и любое другое в рамках Bukkit API) приходит в методы, имеющие область видимости public, тип void, расположенные в классе, наследующем интерфейс Listener, а также помеченные аннотацией @EventHandler.
Java:
public class FakeSlots extends JavaPlugin implements Listener {
    private final Logger log = getLogger();
    // ...
    @Override
    public void onEnable() {
        log.info("FakeSlots has been successfully enabled!");
    }
    @Override
    public void onDisable() {
        log.info("FakeSlots has been disabled!");
    }
    @EventHandler
    public void onServerListPing(e/*e cannot be resolved to a type*/) {
        e.setMaxPlayers(10);
        log.info("FakeSlots did that shit!");
    }
    // ...
}
P.S. Пожалуйста, используйте теги CODE=<язык> с тем языком, который фактически приводится (в случае данной темы это Java). PHP никак не подходит для исходников на Java, хотя бы потому, что его тупо нельзя скопировать без номеров строк.
Спасибо пока все сложновато, и компилятор жалуется: "e cannot be resolved to a type" :(
Пытался исправить сам исправить ошибку, но безуспешно.
Я в spigot api такого не нашел onServerListPing...
P.S. Исправил тег CODE, не знал что поддерживает Java
Что посоветуете?
 
P.S. Исправил тег CODE, не знал что поддерживает Java
Большое спасибо!
Спасибо пока все сложновато ... Что посоветуете?
Учись :)
компилятор жалуется: "e cannot be resolved to a type" :(
К какому типу?
Я в spigot api такого не нашел onServerListPing...
Событие ServerListPingEvent (как и любое другое в рамках Bukkit API) приходит в методы, имеющие область видимости public, тип void, расположенные в классе, наследующем интерфейс Listener, а также помеченные аннотацией @EventHandler.
Обращаю внимание, что я не сказал об имени метода. Имёна могут быть любые, Bukkit API распознаёт их по public void и списку аргументов, точнее по типу единственного аргумента — классу события. А класс события я тебе уже написал: ServerListPingEvent.
P.S. Прошу прощения, у меня в коде выше была опечатка, сам не заметил. Там не (e), а (ServerListPingEvent e)...
 
Я ещё не написал, что Listener-ы нужно регистрировать...
В onEnable: getServer().getPluginManager().registerEvents(this, this);
В onDisable: getServer().getServicesManager().unregisterAll(this);
Без этого сервер не знает, у кого вызывать обработчики событий.
 
Я ещё не написал, что Listener-ы нужно регистрировать...
В onEnable: getServer().getPluginManager().registerEvents(this, this);
В onDisable: getServer().getServicesManager().unregisterAll(this);
Без этого сервер не знает, у кого вызывать обработчики событий.
Спасибо)
Но теперь другая беда, все эти слоты визуальные (при входе пишет что нет места).
Надо найти событие для входа на полный сервер?

allow() - впустило игрока.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх