Silence relog messages.
Prevents a player from logging out and then immediately back in from adding low value messages to chat.
This commit is contained in:
parent
a97d5c191a
commit
95bfa6e472
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
GriefPrevention Server Plugin for Minecraft
|
||||||
|
Copyright (C) 2016 Ryan Hamshire
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package me.ryanhamshire.GriefPrevention;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
|
//sends a message to all online players
|
||||||
|
//used to send delayed messages, for example a quit message after the player has been gone a while
|
||||||
|
class BroadcastMessageTask implements Runnable
|
||||||
|
{
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public BroadcastMessageTask(String message)
|
||||||
|
{
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
Bukkit.getServer().broadcastMessage(this.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -139,6 +139,7 @@ public class GriefPrevention extends JavaPlugin
|
||||||
public String config_spam_warningMessage; //message to show a player who is close to spam level
|
public String config_spam_warningMessage; //message to show a player who is close to spam level
|
||||||
public String config_spam_allowedIpAddresses; //IP addresses which will not be censored
|
public String config_spam_allowedIpAddresses; //IP addresses which will not be censored
|
||||||
public int config_spam_deathMessageCooldownSeconds; //cooldown period for death messages (per player) in seconds
|
public int config_spam_deathMessageCooldownSeconds; //cooldown period for death messages (per player) in seconds
|
||||||
|
public int config_spam_logoutMessageDelaySeconds; //delay before a logout message will be shown (only if the player stays offline that long)
|
||||||
|
|
||||||
HashMap<World, Boolean> config_pvp_specifiedWorlds; //list of worlds where pvp anti-grief rules apply, according to the config file
|
HashMap<World, Boolean> config_pvp_specifiedWorlds; //list of worlds where pvp anti-grief rules apply, according to the config file
|
||||||
public boolean config_pvp_protectFreshSpawns; //whether to make newly spawned players immune until they pick up an item
|
public boolean config_pvp_protectFreshSpawns; //whether to make newly spawned players immune until they pick up an item
|
||||||
|
|
@ -567,7 +568,8 @@ public class GriefPrevention extends JavaPlugin
|
||||||
this.config_spam_banMessage = config.getString("GriefPrevention.Spam.BanMessage", "Banned for spam.");
|
this.config_spam_banMessage = config.getString("GriefPrevention.Spam.BanMessage", "Banned for spam.");
|
||||||
String slashCommandsToMonitor = config.getString("GriefPrevention.Spam.MonitorSlashCommands", "/me;/global;/local");
|
String slashCommandsToMonitor = config.getString("GriefPrevention.Spam.MonitorSlashCommands", "/me;/global;/local");
|
||||||
slashCommandsToMonitor = config.getString("GriefPrevention.Spam.ChatSlashCommands", slashCommandsToMonitor);
|
slashCommandsToMonitor = config.getString("GriefPrevention.Spam.ChatSlashCommands", slashCommandsToMonitor);
|
||||||
this.config_spam_deathMessageCooldownSeconds = config.getInt("GriefPrevention.Spam.DeathMessageCooldownSeconds", 120);
|
this.config_spam_deathMessageCooldownSeconds = config.getInt("GriefPrevention.Spam.DeathMessageCooldownSeconds", 120);
|
||||||
|
this.config_spam_logoutMessageDelaySeconds = config.getInt("GriefPrevention.Spam.Logout Message Delay In Seconds", 10);
|
||||||
|
|
||||||
this.config_pvp_protectFreshSpawns = config.getBoolean("GriefPrevention.PvP.ProtectFreshSpawns", true);
|
this.config_pvp_protectFreshSpawns = config.getBoolean("GriefPrevention.PvP.ProtectFreshSpawns", true);
|
||||||
this.config_pvp_punishLogout = config.getBoolean("GriefPrevention.PvP.PunishLogout", true);
|
this.config_pvp_punishLogout = config.getBoolean("GriefPrevention.PvP.PunishLogout", true);
|
||||||
|
|
@ -809,6 +811,7 @@ public class GriefPrevention extends JavaPlugin
|
||||||
outConfig.set("GriefPrevention.Spam.BanMessage", this.config_spam_banMessage);
|
outConfig.set("GriefPrevention.Spam.BanMessage", this.config_spam_banMessage);
|
||||||
outConfig.set("GriefPrevention.Spam.AllowedIpAddresses", this.config_spam_allowedIpAddresses);
|
outConfig.set("GriefPrevention.Spam.AllowedIpAddresses", this.config_spam_allowedIpAddresses);
|
||||||
outConfig.set("GriefPrevention.Spam.DeathMessageCooldownSeconds", this.config_spam_deathMessageCooldownSeconds);
|
outConfig.set("GriefPrevention.Spam.DeathMessageCooldownSeconds", this.config_spam_deathMessageCooldownSeconds);
|
||||||
|
outConfig.set("GriefPrevention.Spam.Logout Message Delay In Seconds", this.config_spam_logoutMessageDelaySeconds);
|
||||||
|
|
||||||
for(World world : worlds)
|
for(World world : worlds)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -910,6 +910,22 @@ class PlayerEventHandler implements Listener
|
||||||
player.teleport(returnLocation);
|
player.teleport(returnLocation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if we're holding a logout message for this player, don't send that or this event's join message
|
||||||
|
if(GriefPrevention.instance.config_spam_logoutMessageDelaySeconds > 0)
|
||||||
|
{
|
||||||
|
String joinMessage = event.getJoinMessage();
|
||||||
|
if(joinMessage != null && !joinMessage.isEmpty())
|
||||||
|
{
|
||||||
|
Integer taskID = this.heldLogoutMessages.get(player.getUniqueId());
|
||||||
|
if(taskID != null && Bukkit.getScheduler().isQueued(taskID))
|
||||||
|
{
|
||||||
|
Bukkit.getScheduler().cancelTask(taskID);
|
||||||
|
player.sendMessage(event.getJoinMessage());
|
||||||
|
event.setJoinMessage("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//when a player spawns, conditionally apply temporary pvp protection
|
//when a player spawns, conditionally apply temporary pvp protection
|
||||||
|
|
@ -964,6 +980,7 @@ class PlayerEventHandler implements Listener
|
||||||
}
|
}
|
||||||
|
|
||||||
//when a player quits...
|
//when a player quits...
|
||||||
|
private HashMap<UUID, Integer> heldLogoutMessages = new HashMap<UUID, Integer>();
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
void onPlayerQuit(PlayerQuitEvent event)
|
void onPlayerQuit(PlayerQuitEvent event)
|
||||||
{
|
{
|
||||||
|
|
@ -1034,6 +1051,19 @@ class PlayerEventHandler implements Listener
|
||||||
|
|
||||||
//drop data about this player
|
//drop data about this player
|
||||||
this.dataStore.clearCachedPlayerData(playerID);
|
this.dataStore.clearCachedPlayerData(playerID);
|
||||||
|
|
||||||
|
//send quit message later, but only if the player stays offline
|
||||||
|
if(GriefPrevention.instance.config_spam_logoutMessageDelaySeconds > 0)
|
||||||
|
{
|
||||||
|
String quitMessage = event.getQuitMessage();
|
||||||
|
if(quitMessage != null && !quitMessage.isEmpty())
|
||||||
|
{
|
||||||
|
BroadcastMessageTask task = new BroadcastMessageTask(quitMessage);
|
||||||
|
int taskID = Bukkit.getScheduler().scheduleSyncDelayedTask(GriefPrevention.instance, task, 20L * GriefPrevention.instance.config_spam_logoutMessageDelaySeconds);
|
||||||
|
this.heldLogoutMessages.put(playerID, taskID);
|
||||||
|
event.setQuitMessage("");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//determines whether or not a login or logout notification should be silenced, depending on how many there have been in the last minute
|
//determines whether or not a login or logout notification should be silenced, depending on how many there have been in the last minute
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user