Игрок Чат событие в плагине Minecraft Java не делает то, что ему полагается делать - PullRequest
0 голосов
/ 04 марта 2019

Итак, я кодировал следующий код:

package com.ste999.firstplugin;

import org.bukkit.plugin.java.JavaPlugin;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class Main extends JavaPlugin {

    public Main() {}

    @Override
    public void onEnable() {
        getLogger().info("Stefan's first plugin enabled");
    }

        private volatile boolean chatEnabled = true;

    @EventHandler
    public void onPlayerChat(AsyncPlayerChatEvent event) {
        Player pli = event.getPlayer();
        if (!chatEnabled) {
            if (!pli.hasPermission("ste.chat.bypass")) {
                pli.sendMessage("§4Chat is disabled!");
                event.setCancelled(true);
                //return true;
            }
        }
    }

        @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) 
    {
        Player p = (Player)sender;

        if (cmd.getName().equalsIgnoreCase("mutechat")) {
            chatEnabled = !chatEnabled;
            sender.sendMessage(chatEnabled ? "§aUnmuted the chat" : "§aMuted the chat");
            return true;
        }
        return true;
    }

    @Override
    public void onDisable() {
        getLogger().info("Stefan's first plugin disabled");
    }
}

со следующим plugin.yml:

name: Stefans_Helper
main: com.ste999.firstplugin.Main
version: 1.0
load: startup
description: this is my first plugin
commands:
  mutechat:
    description: mute the chat
    usage: /<command>

Когда я использую этот плагин на моем сервере Minecraft, он появляется иесли я делаю /mutechat, он говорит Muted the chat ru, когда я делаю /mutechat снова, он говорит Unmuted the chat

Что я ожидаю, что этот код будет делать, когда чат "отключен", никто не может говорить,если только у них нет узла ste.chat.bypass.

Но пользователь без оп и ste.chat.bypass может продолжать общение в чате после того, как кто-то набрал /mutechat, и в чате было сказано Muted the chat.

* 1020.* Я пытался вставить getServer().getPluginManager().registerEvents(this, this); в public void onEnable, но затем я получаю сообщение об ошибке, которое говорит: The method registerEvents(Listener, Plugin) in the type PluginManager is not applicable for the arguments (Main, Main)

Uhh help pls

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Итак, я смог получить функцию mutechat со следующим кодом: package com.ste999.events;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
//import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.Listener;
import org.bukkit.plugin.PluginManager;

public class Main extends JavaPlugin implements Listener{
    public static boolean chatMuted = false;
    @Override
    public void onEnable()
    {
        getLogger().info("events tester enabled!");
        PluginManager pm = this.getServer().getPluginManager();
        pm.registerEvents(this, (this));
    }

    @Override
    public void onDisable()
    {
        getLogger().info("events tester disabled!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args)
    {
        Player player = (Player)sender;
        if (cmd.getName().equalsIgnoreCase("mutechat")) {
            if (player.hasPermission("ste999.chat.mute")) {
            if(chatMuted == false) {
                Bukkit.broadcastMessage("§aThe chat has been disabled!");
                chatMuted = true;
                }
                else {
                if(chatMuted == true) {
                Bukkit.broadcastMessage("§aThe chat has been enabled!");
                chatMuted = false;
                }
                }
            } else {
                if (!player.hasPermission("ste999.chat.mute")) {
                player.sendMessage("§4You can't mute the chat silly!");
                }
            }
            }
    return false;
    }
    @EventHandler
    public void OnChat(AsyncPlayerChatEvent event)
    {
        Player pli = event.getPlayer();
        if (chatMuted == true) {
            if (!pli.hasPermission("ste999.chat.bypass")) {
                event.setCancelled(true);
                pli.sendMessage("§4The chat has been disabled");
            } else {
                if (pli.hasPermission("ste999.chat.bypass")) {
                    event.setCancelled(false);
                }
            }
        }
    }
}

Мне нужно было зарегистрировать события, но getServer().getPluginManager().registerEvents(this, this) у меня не сработалоМне нужно было сделать это так, как я это делал в коде onEnable и там, где есть еще несколько проблем

0 голосов
/ 04 марта 2019

Вашему классу событий (я настоятельно рекомендую новый класс для этого) необходимо реализовать интерфейс Listener .Только тогда вы можете зарегистрировать его.

...