kaci
kaci

Reputation: 209

Player Chat event in minecraft java plugin doesnt do what its suposed to do

So I have coded the following code:

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");
    }
}

with the following 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>

When I use this plugin in my Minecraft server, it shows up and if I do /mutechat it says Muted the chat en when I do /mutechat again it says Unmuted the chat

What I expect this code to do is when the chat is "Muted" no users can talk, unless they have the ste.chat.bypass permission node.

But a user without op and the ste.chat.bypass can still talk in chat after someone did /mutechat and the chat said Muted the chat.

I've tried putting getServer().getPluginManager().registerEvents(this, this); in the public void onEnable but then I get an error in eclipse that says: The method registerEvents(Listener, Plugin) in the type PluginManager is not applicable for the arguments (Main, Main)

Uhh help pls

Upvotes: 1

Views: 2108

Answers (2)

kaci
kaci

Reputation: 209

So I was able to get the mutechat function with the following code: 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);
                }
            }
        }
    }
}

I needed to register the events but getServer().getPluginManager().registerEvents(this, this) didn't work for me so I needed to do it the way I did it in the code in onEnable and there where a few other problems

Upvotes: 0

Benjamin Urquhart
Benjamin Urquhart

Reputation: 1649

Your events class (I seriously recommend a new class for this) needs to implement the Listener interface. Only then can you register it.

Upvotes: 1

Related Questions