Помощь с кодом

Anarchist_YT

Администратор
Сообщения
2,107
Решения
89
Веб-сайт
ah-cloud.ru
Java:
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.server.TabCompleteEvent;

public class EventsListener implements Listener {
    @EventHandler
    public void onPlayerUseInventory(InventoryOpenEvent e) {
        if (!e.getPlayer().hasPermission("cblock.admin") || !e.getPlayer().isOp()) {
            e.setCancelled(true);
        }
    }
    @EventHandler
    public void onPlayerUseTab(TabCompleteEvent e) {
        if (!e.getSender().hasPermission("cblock.admin") || !e.getSender().isOp()) {
            e.setCancelled(true);
        }
}
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
        e.setJoinMessage(e.getPlayer().getName()+"§2 зашел на сервер!");
        if (e.getPlayer().isOp() || e.getPlayer().hasPermission("plugin.admin")) {
            for (Player pp : Bukkit.getOnlinePlayers()) {
                pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 100.0F, 100.0F);
            }
        }
    }
}
Написал я вот такой говнокод, но таб у игроков все равно работает, так же как и инвентарь.
Как исправить, помогите пожалуйста!
 
Решение
Anarchist_YT, Есть 2 варианта:
Player#closeInventory() - закрывает инвентарь игроку, но заметил, что на последних версиях не работает
InventoryView#close() - закрывает инвентарь. Сам класс добавлен в новых версиях и, скорее всего, разработчиков решили принудить всё делать через него

API:
Слушатель зарегистрирован при старте плагина?
Да.Так как ивент входа игрока отслеживает(и вход оп тоже).
Java:
import java.util.logging.Logger;

import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin{
    @Override
    public void onEnable() {
        Logger log = getLogger();
        log.info("Enabled!");
        getServer().getPluginManager().registerEvents(new EventsListener(), this);
    }
}
 
Anarchist_YT, Есть 2 варианта:
Player#closeInventory() - закрывает инвентарь игроку, но заметил, что на последних версиях не работает
InventoryView#close() - закрывает инвентарь. Сам класс добавлен в новых версиях и, скорее всего, разработчиков решили принудить всё делать через него

API:
 
Anarchist_YT, Есть 2 варианта:
Player#closeInventory() - закрывает инвентарь игроку, но заметил, что на последних версиях не работает
InventoryView#close() - закрывает инвентарь. Сам класс добавлен в новых версиях и, скорее всего, разработчиков решили принудить всё делать через него

API:
Сяб, сработало.А то у меня как раз 1.16.3)
 
Java:
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.server.TabCompleteEvent;

public class EventsListener implements Listener {
    @EventHandler
    public void onPlayerUseInventory(InventoryOpenEvent e) {
        if (!e.getPlayer().hasPermission("cblock.admin") || !e.getPlayer().isOp()) {
            e.setCancelled(true);
        }
    }
    @EventHandler
    public void onPlayerUseTab(TabCompleteEvent e) {
        if (!e.getSender().hasPermission("cblock.admin") || !e.getSender().isOp()) {
            e.setCancelled(true);
        }
}
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
        e.setJoinMessage(e.getPlayer().getName()+"§2 зашел на сервер!");
        if (e.getPlayer().isOp() || e.getPlayer().hasPermission("plugin.admin")) {
            for (Player pp : Bukkit.getOnlinePlayers()) {
                pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 100.0F, 100.0F);
            }
        }
    }
}
Написал я вот такой говнокод, но таб у игроков все равно работает, так же как и инвентарь.
Как исправить, помогите пожалуйста!
Конечно, InventoryOpenEvent уже давно не отслеживает открытие инвентаря. Только через пакеты.
 
Конечно, InventoryOpenEvent уже давно не отслеживает открытие инвентаря. Только через пакеты.
Это чё ещё за бред? 1.16.3 - InventoryOpenEvent спокойно работает.
Авто объединение сообщений:

Java:
import org.bukkit.Bukkit;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.server.TabCompleteEvent;

public class EventsListener implements Listener {
    @EventHandler
    public void onPlayerUseInventory(InventoryOpenEvent e) {
        if (!e.getPlayer().hasPermission("cblock.admin") || !e.getPlayer().isOp()) {
            e.setCancelled(true);
        }
    }
    @EventHandler
    public void onPlayerUseTab(TabCompleteEvent e) {
        if (!e.getSender().hasPermission("cblock.admin") || !e.getSender().isOp()) {
            e.setCancelled(true);
        }
}
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e) {
        e.setJoinMessage(e.getPlayer().getName()+"§2 зашел на сервер!");
        if (e.getPlayer().isOp() || e.getPlayer().hasPermission("plugin.admin")) {
            for (Player pp : Bukkit.getOnlinePlayers()) {
                pp.playSound(pp.getLocation(), Sound.UI_TOAST_CHALLENGE_COMPLETE, 100.0F, 100.0F);
            }
        }
    }
}
Написал я вот такой говнокод, но таб у игроков все равно работает, так же как и инвентарь.
Как исправить, помогите пожалуйста!
event.setCancelled() принимает boolean. Теперь подумай, зачем тебе if.
 
Это чё ещё за бред? 1.16.3 - InventoryOpenEvent спокойно работает.
Авто объединение сообщений:


event.setCancelled() принимает boolean. Теперь подумай, зачем тебе if.
Лол, и вправду.
 
Назад
Сверху Снизу