mirror of
https://github.com/NoCheatPlus/NoCheatPlus.git
synced 2024-12-26 10:28:05 +01:00
Add option to use permission subscriptions for in-game-chat logging.
See: https://github.com/NoCheatPlus/NoCheatPlus/pull/14 (@Cobi) This allows will still check the players with stored permissions but re-check their permissions.
This commit is contained in:
parent
ee400b7525
commit
a5cc3f819f
@ -5,6 +5,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@ -14,6 +15,7 @@ import java.util.Set;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.PluginCommand;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -25,6 +27,7 @@ import org.bukkit.event.player.PlayerKickEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent;
|
||||
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.permissions.Permissible;
|
||||
import org.bukkit.plugin.PluginDescriptionFile;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
@ -194,15 +197,28 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
|
||||
}
|
||||
|
||||
/**
|
||||
* Send all players with the nocheatplus.admin.notify permission a message.
|
||||
* This is likely to be more efficient than iterating over all players and
|
||||
* checking their permissions. However this only updates permissions with
|
||||
* login and world changes currently.
|
||||
* Send all players with the nocheatplus.admin.notify permission a message.<br>
|
||||
* This will act according to configuration (stored permissions or permission subscriptions).
|
||||
*
|
||||
* @param message
|
||||
* @return Number of players messaged.
|
||||
*/
|
||||
public static int sendAdminNotifyMessage(final String message){
|
||||
if (ConfigManager.getConfigFile().getBoolean(ConfPaths.LOGGING_USESUBSCRIPTIONS)){
|
||||
// TODO: Might respect console settings, or add extra config section (e.g. notifications).
|
||||
return sendAdminNotifyMessageSubscriptions(message);
|
||||
}
|
||||
else{
|
||||
return sendAdminNotifyMessageStored(message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send notification to players with stored notify-permission (world changes, login, permissions are not re-checked here).
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static int sendAdminNotifyMessageStored(final String message){
|
||||
final Set<String> names = nameSetPerms.getPlayers(Permissions.ADMINISTRATION_NOTIFY);
|
||||
if (names == null) return 0;
|
||||
int done = 0;
|
||||
@ -215,6 +231,37 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
|
||||
}
|
||||
return done;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send notification to all CommandSenders found in permission subscriptions for the notify-permission as well as players that have stored permissions (those get re-checked here).
|
||||
* @param message
|
||||
* @return
|
||||
*/
|
||||
public static int sendAdminNotifyMessageSubscriptions(final String message){
|
||||
final Set<Permissible> permissibles = Bukkit.getPluginManager().getPermissionSubscriptions(Permissions.ADMINISTRATION_NOTIFY);
|
||||
final Set<String> names = nameSetPerms.getPlayers(Permissions.ADMINISTRATION_NOTIFY);
|
||||
final Set<String> done = new HashSet<String>(permissibles.size() + (names == null ? 0 : names.size()));
|
||||
for (final Permissible permissible : permissibles){
|
||||
if (permissible instanceof CommandSender && permissible.hasPermission(Permissions.ADMINISTRATION_NOTIFY)){
|
||||
final CommandSender sender = (CommandSender) permissible;
|
||||
sender.sendMessage(message);
|
||||
done.add(sender.getName());
|
||||
}
|
||||
}
|
||||
// Fall-back checking for players.
|
||||
if (names != null){
|
||||
for (final String name : names){
|
||||
if (!done.contains(name)){
|
||||
final Player player = DataManager.getPlayerExact(name);
|
||||
if (player != null && player.hasPermission(Permissions.ADMINISTRATION_NOTIFY)){
|
||||
player.sendMessage(message);
|
||||
done.add(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return done.size();
|
||||
}
|
||||
|
||||
/** The event listeners. */
|
||||
private final List<Listener> listeners = new ArrayList<Listener>();
|
||||
|
@ -34,6 +34,7 @@ public abstract class ConfPaths {
|
||||
public static final String LOGGING_FILE = LOGGING + "file";
|
||||
public static final String LOGGING_FILENAME = LOGGING + "filename";
|
||||
public static final String LOGGING_INGAMECHAT = LOGGING + "ingamechat";
|
||||
public static final String LOGGING_USESUBSCRIPTIONS = LOGGING + "usesubscriptions";
|
||||
|
||||
/*
|
||||
* e e ,e, 888 888
|
||||
@ -51,10 +52,7 @@ public abstract class ConfPaths {
|
||||
public static final String MISCELLANEOUS_UPDATETIMEOUT = MISCELLANEOUS + "updatetimeout";
|
||||
public static final String MISCELLANEOUS_REPORTTOMETRICS = MISCELLANEOUS + "reporttometrics";
|
||||
public static final String MISCELLANEOUS_MANAGELISTENERS = MISCELLANEOUS + "managelisteners";
|
||||
private static final String MISCELLANEOUS_NOMOVEDTOOQUICKLY = MISCELLANEOUS + "nomovedtooquickly.";
|
||||
public static final String MISCELLANEOUS_NOMOVEDTOOQUICKLY_ENABLED = MISCELLANEOUS_NOMOVEDTOOQUICKLY + "enabled";
|
||||
public static final String MISCELLANEOUS_NOMOVEDTOOQUICKLY_USEPROXY = MISCELLANEOUS_NOMOVEDTOOQUICKLY + "useproxy";
|
||||
|
||||
|
||||
/** TEMP: hidden flag to disable all lag adaption with one flag. */
|
||||
public static final String MISCELLANEOUS_LAG = MISCELLANEOUS + "lag";
|
||||
|
||||
|
@ -55,6 +55,9 @@ public class DefaultConfig extends ConfigFile {
|
||||
set(ConfPaths.LOGGING_FILE, true);
|
||||
set(ConfPaths.LOGGING_FILENAME, "nocheatplus.log");
|
||||
set(ConfPaths.LOGGING_INGAMECHAT, true);
|
||||
|
||||
// Notifications settings.
|
||||
set(ConfPaths.LOGGING_USESUBSCRIPTIONS, false);
|
||||
|
||||
/*
|
||||
* e e ,e, 888 888
|
||||
|
Loading…
Reference in New Issue
Block a user