• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

@Team Message wird nicht geCancelled

Kraetzy

Redstoneengineer
Registriert
16 Dezember 2017
Beiträge
41
Alter
22
Diamanten
250
Minecraft
MinesuchtBOT
Heyho,

Meine @team Nachricht erscheint im Chat obwohl ich die MSG selber geCancelled habe!

Code:
package chatsystem;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.AsyncPlayerChatEvent;

public class TeamChat implements Listener {
   
    @EventHandler
    public void onChat(AsyncPlayerChatEvent e) {
        Player p = e.getPlayer();
       
        if(e.getMessage().startsWith("@Team")) {
            if(p.hasPermission("system.tc")) {
                String msg = e.getMessage();
               
                for(Player team : Bukkit.getOnlinePlayers()) {
                    if(team.hasPermission("system.tc")) {
                        e.setCancelled(true);
                        team.sendMessage("§cTeamChat §8× §9" + e.getPlayer().getName() + msg.replaceAll("@Team", " §8» §7"));
                       
                    }
                }
               
               
            } else {
                e.setCancelled(false);
            }

        } else if(e.getMessage().startsWith("@team")) {
            if(p.hasPermission("system.tc")) {
                String msg = e.getMessage();
               
                for(Player team : Bukkit.getOnlinePlayers()) {
                    if(team.hasPermission("system.tc")) {
                        e.setCancelled(true);
                        team.sendMessage("§cTeamChat §8× §9" + e.getPlayer().getName() + msg.replaceAll("@team", " §8» §7"));
                       
                    }
                }
               
               
            } else {
                e.setCancelled(false);
            }

        } else if(e.getMessage().startsWith("@T")) {
            if(p.hasPermission("system.tc")) {
                e.setCancelled(true);
                String msg = e.getMessage();
               
                for(Player team : Bukkit.getOnlinePlayers()) {
                    if(team.hasPermission("system.tc")) {
                        team.sendMessage("§cTeamChat §8× §9" + e.getPlayer().getName() + msg.replaceAll("@T", " §8» §7"));
                       
                    }
                }
               
               
            } else {
                e.setCancelled(false);
            }

        } else if(e.getMessage().startsWith("@t")) {
            if(p.hasPermission("system.tc")) {
                String msg = e.getMessage();
               
                for(Player team : Bukkit.getOnlinePlayers()) {
                    if(team.hasPermission("system.tc")) {
                        team.sendMessage("§cTeamChat §8× §9" + e.getPlayer().getName() + msg.replaceAll("@t", " §8» §7"));
                       
                    }
                }
               
               
            } else {
                e.setCancelled(false);
            }

        }
       
    }
   
}
 
D

deleted196100

Guest
Ich würde dir empfehlen für das "@Team", "@team", "@T" einen Regulären Ausdruck (regex) zu schreiben und diesen zu Prüfen oder deine ganzen startswith Abfragen mit einem logischem "oder" -> "||" zusammenzufassen, so wie es aktuell ist hast du sehr viel redundanten Code was die Wartbarkeit deutlich einschränkt und eventuell auch dein Problem sein könnte (siehe unten).

  • for(Player team : Bukkit.getOnlinePlayers()) {
  • if(team.hasPermission("system.tc")) {
  • e.setCancelled(true);
  • team.sendMessage("§cTeamChat §8× §9" + e.getPlayer().getName() + msg.replaceAll("@Team", " §8» §7"));
  • }
}
Dieser Teil macht keinen Sinn, du cancellst das Event in einer Schleife abhängig davon ob Spieler online sind die die Nachricht empfangen können. Ich würde dir raten das Event vor der Schleife zu cancelln.

  • } else if(e.getMessage().startsWith("@t")) {
  • if(p.hasPermission("system.tc")) {
  • String msg = e.getMessage();
  • for(Player team : Bukkit.getOnlinePlayers()) {
  • if(team.hasPermission("system.tc")) {
  • team.sendMessage("§cTeamChat §8× §9" + e.getPlayer().getName() + msg.replaceAll("@t", " §8» §7"));
  • }
  • }
  • } else {
  • e.setCancelled(false);
  • }
In diesem Fall wird das Event gar nicht gecancellt wenn der Spieler die benötigte Permission besitzt, du hast uns zwar nicht mitgeteilt mit welcher Nachricht du das ganze getestet hast allerdings könnte das der Fehler sein wenn du mit "@t" getestet hast.
Du solltest außerdem noch einmal prüfen ob du dir überhaupt die nötige Permission zugewiesen hast.

Den Code würde ich in jedem Fall etwas aufräumen, so wie es jetzt ist hast du damit bald keinen Spaß mehr, glaub mir.
 
Zuletzt bearbeitet von einem Moderator:

KaeseKuchen_DEV

Redstoneengineer
Registriert
11 Mai 2016
Beiträge
47
Diamanten
300
Minecraft
KaeseKuchenDEV
Du hast in der ersten For-Schleife abgefragt ob jeder Spieler die Permission hat. Sobald jetzt ein Spieler die permission nicht hat wird die Nachricht trotzdem gesendet. Also musst du vor jede For-Schleife erst das Event canceln.

MfG KaeseKuchenDEV
 

JTK222

Threadripper
Registriert
5 September 2013
Beiträge
1.150
Diamanten
323
Minecraft
JTK222
Du hast in der ersten For-Schleife abgefragt ob jeder Spieler die Permission hat. Sobald jetzt ein Spieler die permission nicht hat wird die Nachricht trotzdem gesendet. Also musst du vor jede For-Schleife erst das Event canceln.

MfG KaeseKuchenDEV
Wenn du schon helfen willst dann aber bitte richtig!
Sobald auch nur ein einziger Spieler die permission hat, wird gecancelt, was an dieser Stelle immer der Fall ist,
da ja bereits überprüft wurde ob der Sender die Rechte hat.

Ich denke auch dass hier beim testen ganz einfach die Permission fehlerhaft war.
 
Oben