Bug fixes, improvements, and removals (FS-192) (#46)

* Three fixes

* Fixes /tempban throwing a NullPointerException when trying to get a player who isn't on the server but was in the past
* Fixes /tempban banning players for 24 hours regardless of the duration defined
* Fixes /list -t throwing a NullPointerException when performed from a non-player source (such as Telnet)

* Removes hubworld entriely

* Configurable blacklists for tag, muted commands, and wildcard

Changes:
* Moves globally blocked commands to the `global` subsection of the original `blocked_commands` section. You *will* need to update your configurations
* /wildcard's command blacklist is now configurable under the `wildcard` section in `blocked_commands`.
* The commands muted players can't use are now configurable under the `muted` section in `blocked_commands`.
* Removes some commented-out globally blocked command entries.

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
This commit is contained in:
Video 2021-05-09 09:42:31 -06:00 committed by Ryan
parent 6fb9507a4c
commit 07b5076717
15 changed files with 301 additions and 568 deletions

View File

@ -1,13 +1,11 @@
package me.totalfreedom.totalfreedommod; package me.totalfreedom.totalfreedommod;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FSync; import me.totalfreedom.totalfreedommod.util.FSync;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -20,7 +18,6 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class Muter extends FreedomService public class Muter extends FreedomService
{ {
public static final List<String> MUTE_COMMANDS = Arrays.asList(StringUtils.split("say,me,msg,tell,reply,mail", ","));
public final List<String> MUTED_PLAYERS = new ArrayList<>(); public final List<String> MUTED_PLAYERS = new ArrayList<>();
@Override @Override
@ -88,7 +85,7 @@ public class Muter extends FreedomService
cmdName = command.getName().toLowerCase(); cmdName = command.getName().toLowerCase();
} }
if (MUTE_COMMANDS.contains(cmdName)) if (ConfigEntry.MUTED_BLOCKED_COMMANDS.getStringList().contains(cmdName))
{ {
player.sendMessage(ChatColor.RED + "That command is blocked while you are muted."); player.sendMessage(ChatColor.RED + "That command is blocked while you are muted.");
event.setCancelled(true); event.setCancelled(true);

View File

@ -127,7 +127,6 @@ public class TotalFreedomMod extends JavaPlugin
public Sitter st; public Sitter st;
public VanishHandler vh; public VanishHandler vh;
public Pterodactyl ptero; public Pterodactyl ptero;
//public HubWorldRestrictions hwr;
// //
// Bridges // Bridges
public BukkitTelnetBridge btb; public BukkitTelnetBridge btb;

View File

@ -15,7 +15,6 @@ public class WorldGuardBridge extends FreedomService
@Override @Override
public void onStart() public void onStart()
{ {
plugin.wr.protectWorld(plugin.wm.hubworld.getWorld());
plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld()); plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld());
} }

View File

@ -1,202 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import io.papermc.lib.PaperLib;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.world.WorldTime;
import me.totalfreedom.totalfreedommod.world.WorldWeather;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "HubWorld management stuff",
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
aliases = "hw,hub")
public class Command_hubworld extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
CommandMode commandMode = null;
if (args.length == 0)
{
commandMode = CommandMode.TELEPORT;
}
else if (args.length >= 2)
{
if ("time".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.TIME;
}
else if ("weather".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.WEATHER;
}
}
if (commandMode == null)
{
return false;
}
try
{
switch (commandMode)
{
case TELEPORT:
{
if (!(sender instanceof Player) || playerSender == null)
{
return false;
}
World hubWorld = null;
try
{
hubWorld = plugin.wm.hubworld.getWorld();
}
catch (Exception ignored)
{
}
if (hubWorld == null || playerSender.getWorld() == hubWorld)
{
msg("Going to the main world.");
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
}
else
{
msg("Going to the hub world");
plugin.wm.hubworld.sendToWorld(playerSender);
}
break;
}
case TIME:
{
assertCommandPerms(sender, playerSender);
if (args.length == 2)
{
WorldTime timeOfDay = WorldTime.getByAlias(args[1]);
if (timeOfDay != null)
{
plugin.wm.hubworld.setTimeOfDay(timeOfDay);
msg("Hub world time set to: " + timeOfDay.name());
}
else
{
msg("Invalid time of day. Can be: sunrise, noon, sunset, midnight");
}
}
else
{
return false;
}
break;
}
case WEATHER:
{
assertCommandPerms(sender, playerSender);
if (args.length == 2)
{
WorldWeather weatherMode = WorldWeather.getByAlias(args[1]);
if (weatherMode != null)
{
plugin.wm.hubworld.setWeatherMode(weatherMode);
msg("Hub world weather set to: " + weatherMode.name());
}
else
{
msg("Invalid weather mode. Can be: off, rain, storm");
}
}
else
{
return false;
}
break;
}
default:
{
return false;
}
}
}
catch (PermissionDeniedException ex)
{
if (ex.getMessage().isEmpty())
{
return noPerms();
}
msg(ex.getMessage());
return true;
}
return true;
}
@Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{
if (!plugin.al.isAdmin(sender))
{
return Collections.emptyList();
}
if (args.length == 1)
{
return Arrays.asList("time", "weather");
}
else if (args.length == 2)
{
if (args[0].equals("time"))
{
return Arrays.asList("morning", "noon", "evening", "night");
}
else if (args[0].equals("weather"))
{
return Arrays.asList("off", "rain", "storm");
}
}
return Collections.emptyList();
}
// TODO: Redo this properly
private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException
{
if (!(sender instanceof Player) || playerSender == null || !plugin.al.isAdmin(playerSender))
{
throw new PermissionDeniedException();
}
}
private enum CommandMode
{
TELEPORT, TIME, WEATHER
}
private static class PermissionDeniedException extends Exception
{
private static final long serialVersionUID = 1L;
private PermissionDeniedException()
{
super("");
}
private PermissionDeniedException(String string)
{
super(string);
}
}
}

View File

@ -88,7 +88,7 @@ public class Command_list extends FreedomCommand
List<String> n = new ArrayList<>(); List<String> n = new ArrayList<>();
if (listFilter == ListFilter.TELNET_SESSIONS && plugin.al.isAdmin(sender) && plugin.al.getAdmin(playerSender).getRank().isAtLeast(Rank.ADMIN)) if (listFilter == ListFilter.TELNET_SESSIONS && plugin.al.isAdmin(sender))
{ {
List<Admin> connectedAdmins = plugin.btb.getConnectedAdmins(); List<Admin> connectedAdmins = plugin.btb.getConnectedAdmins();
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(connectedAdmins.size()) onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(connectedAdmins.size())

View File

@ -1,7 +1,8 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Arrays;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
@ -19,9 +20,6 @@ import org.bukkit.entity.Player;
public class Command_tag extends FreedomCommand public class Command_tag extends FreedomCommand
{ {
public static final List<String> FORBIDDEN_WORDS = Arrays.asList(
"admin", "owner", "moderator", "developer", "console", "dev", "staff", "mod", "sra", "tca", "sta", "sa");
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
@ -170,7 +168,7 @@ public class Command_tag extends FreedomCommand
if (!plugin.al.isAdmin(sender)) if (!plugin.al.isAdmin(sender))
{ {
for (String word : FORBIDDEN_WORDS) for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
{ {
if (rawTag.contains(word)) if (rawTag.contains(word))
{ {
@ -261,7 +259,7 @@ public class Command_tag extends FreedomCommand
if (!plugin.al.isAdmin(sender)) if (!plugin.al.isAdmin(sender))
{ {
for (String word : FORBIDDEN_WORDS) for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
{ {
if (rawTag.contains(word)) if (rawTag.contains(word))
{ {

View File

@ -1,5 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
@ -43,7 +44,7 @@ public class Command_tagnyan extends FreedomCommand
if (!plugin.al.isAdmin(sender)) if (!plugin.al.isAdmin(sender))
{ {
for (String word : Command_tag.FORBIDDEN_WORDS) for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
{ {
if (rawTag.contains(word)) if (rawTag.contains(word))
{ {

View File

@ -1,5 +1,6 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -33,7 +34,7 @@ public class Command_tagrainbow extends FreedomCommand
return true; return true;
} }
for (String word : Command_tag.FORBIDDEN_WORDS) for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
{ {
if (rawTag.contains(word)) if (rawTag.contains(word))
{ {

View File

@ -13,6 +13,8 @@ import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -44,6 +46,9 @@ public class Command_tempban extends FreedomCommand
} }
} }
final String username;
final List<String> ips = new ArrayList<>();
final Player player = getPlayer(args[0]); final Player player = getPlayer(args[0]);
final PlayerData entry; final PlayerData entry;
if (player == null) if (player == null)
@ -55,15 +60,18 @@ public class Command_tempban extends FreedomCommand
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly."); msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
return true; return true;
} }
username = entry.getName();
ips.addAll(entry.getIps());
} }
else else
{ {
entry = plugin.pl.getData(player); entry = plugin.pl.getData(player);
username = player.getName();
ips.add(FUtil.getIp(player));
} }
final List<String> ips = new ArrayList<>(entry.getIps());
assert player != null; final StringBuilder message = new StringBuilder("Temporarily banned " + username);
final StringBuilder message = new StringBuilder("Temporarily banned " + player.getName());
Date expires = FUtil.parseDateOffset("30m"); Date expires = FUtil.parseDateOffset("30m");
message.append(" until ").append(date_format.format(expires)); message.append(" until ").append(date_format.format(expires));
@ -80,16 +88,36 @@ public class Command_tempban extends FreedomCommand
message.append(", Reason: \"").append(reason).append("\""); message.append(", Reason: \"").append(reason).append("\"");
} }
Ban ban;
if (player != null)
{
ban = Ban.forPlayer(player, sender, expires, reason);
}
else
{
ban = Ban.forPlayerName(username, sender, expires, reason);
}
for (String ip : ips)
{
ban.addIp(ip);
}
plugin.bm.addBan(ban);
if (!quiet) if (!quiet)
{ {
// Strike with lightning if (player != null)
final Location targetPos = player.getLocation();
for (int x = -1; x <= 1; x++)
{ {
for (int z = -1; z <= 1; z++) // Strike with lightning
final Location targetPos = player.getLocation();
for (int x = -1; x <= 1; x++)
{ {
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z); for (int z = -1; z <= 1; z++)
Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos); {
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos);
}
} }
} }
@ -97,21 +125,22 @@ public class Command_tempban extends FreedomCommand
} }
else else
{ {
msg("Quietly temporarily banned " + player.getName() + "."); msg("Quietly temporarily banned " + username + ".");
} }
if (player != null)
Ban ban;
ban = Ban.forPlayer(player, sender, null, reason);
for (String ip : ips)
{ {
ban.addIp(ip); player.kickPlayer(ban.bakeKickMessage());
for (Player p : Bukkit.getOnlinePlayers())
{
if (FUtil.getIp(p).equals(FUtil.getIp(player)))
{
p.kickPlayer(ChatColor.RED + "You've been kicked because someone on your IP has been banned.");
}
}
} }
plugin.bm.addBan(ban);
player.kickPlayer(ban.bakeKickMessage()); plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.TEMPBAN, reason));
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.TEMPBAN, reason));
return true; return true;
} }
} }

View File

@ -3,6 +3,8 @@ package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -15,14 +17,6 @@ import org.bukkit.entity.Player;
public class Command_wildcard extends FreedomCommand public class Command_wildcard extends FreedomCommand
{ {
public static final List<String> BLOCKED_COMMANDS = Arrays.asList(
"wildcard",
"gtfo",
"doom",
"slconfig",
"smite"
);
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
@ -52,7 +46,7 @@ public class Command_wildcard extends FreedomCommand
aliases = Arrays.asList(fCmd.getAliases().split(",")); aliases = Arrays.asList(fCmd.getAliases().split(","));
} }
for (String blockedCommand : BLOCKED_COMMANDS) for (String blockedCommand : ConfigEntry.WILDCARD_BLOCKED_COMMANDS.getStringList())
{ {
if (blockedCommand.equals(args[0].toLowerCase()) || aliases.contains(blockedCommand)) if (blockedCommand.equals(args[0].toLowerCase()) || aliases.contains(blockedCommand))
{ {

View File

@ -155,7 +155,10 @@ public enum ConfigEntry
EXPLOSIVE_RADIUS(Double.class, "explosive_radius"), EXPLOSIVE_RADIUS(Double.class, "explosive_radius"),
FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"), FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"),
SERVICE_CHECKER_URL(String.class, "service_checker_url"), SERVICE_CHECKER_URL(String.class, "service_checker_url"),
BLOCKED_COMMANDS(List.class, "blocked_commands"), BLOCKED_COMMANDS(List.class, "blocked_commands.global"),
MUTED_BLOCKED_COMMANDS(List.class, "blocked_commands.muted"),
WILDCARD_BLOCKED_COMMANDS(List.class, "blocked_commands.wildcard"),
FORBIDDEN_WORDS(List.class, "forbidden_words"),
HOST_SENDER_NAMES(List.class, "host_sender_names"), HOST_SENDER_NAMES(List.class, "host_sender_names"),
FAMOUS_PLAYERS(List.class, "famous_players"), FAMOUS_PLAYERS(List.class, "famous_players"),
ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"), ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"),

View File

@ -1,102 +0,0 @@
package me.totalfreedom.totalfreedommod.world;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
public final class HubWorld extends CustomWorld
{
private static final String GENERATION_PARAMETERS = ConfigEntry.FLATLANDS_GENERATE_PARAMS.getString();
//
private WorldWeather weather = WorldWeather.OFF;
private WorldTime time = WorldTime.INHERIT;
public HubWorld()
{
super("hubworld");
}
@Override
public void sendToWorld(Player player)
{
super.sendToWorld(player);
}
// TODO: Replace instances of org.bukkit.Sign with a non deprecated version. This might include more boilerplate.
@SuppressWarnings("deprecation")
@Override
protected World generateWorld()
{
final WorldCreator worldCreator = new WorldCreator(getName());
worldCreator.generateStructures(false);
worldCreator.type(WorldType.NORMAL);
worldCreator.environment(World.Environment.NORMAL);
worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS));
final World world = server.createWorld(worldCreator);
assert world != null;
world.setSpawnFlags(false, false);
world.setSpawnLocation(0, 50, 0);
final Block welcomeSignBlock = world.getBlockAt(0, 50, 0);
welcomeSignBlock.setType(Material.OAK_SIGN);
org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign)welcomeSignBlock.getState();
org.bukkit.material.Sign signData = (org.bukkit.material.Sign)welcomeSign.getData();
signData.setFacingDirection(BlockFace.NORTH);
welcomeSign.setLine(0, ChatColor.GREEN + "Hub World");
welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---");
welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point");
welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---");
welcomeSign.update();
plugin.gr.commitGameRules();
return world;
}
public WorldWeather getWeatherMode()
{
return weather;
}
public void setWeatherMode(final WorldWeather weatherMode)
{
this.weather = weatherMode;
try
{
weatherMode.setWorldToWeather(getWorld());
}
catch (Exception ignored)
{
}
}
public WorldTime getTimeOfDay()
{
return time;
}
public void setTimeOfDay(final WorldTime timeOfDay)
{
this.time = timeOfDay;
try
{
timeOfDay.setWorldToTime(getWorld());
}
catch (Exception ignored)
{
}
}
}

View File

@ -20,14 +20,12 @@ public class WorldManager extends FreedomService
public Flatlands flatlands; public Flatlands flatlands;
public AdminWorld adminworld; public AdminWorld adminworld;
public MasterBuilderWorld masterBuilderWorld; public MasterBuilderWorld masterBuilderWorld;
public HubWorld hubworld;
public WorldManager() public WorldManager()
{ {
this.flatlands = new Flatlands(); this.flatlands = new Flatlands();
this.adminworld = new AdminWorld(); this.adminworld = new AdminWorld();
this.masterBuilderWorld = new MasterBuilderWorld(); this.masterBuilderWorld = new MasterBuilderWorld();
this.hubworld = new HubWorld();
} }
@Override @Override
@ -36,7 +34,6 @@ public class WorldManager extends FreedomService
flatlands.getWorld(); flatlands.getWorld();
adminworld.getWorld(); adminworld.getWorld();
masterBuilderWorld.getWorld(); masterBuilderWorld.getWorld();
hubworld.getWorld();
// Disable weather // Disable weather
if (ConfigEntry.DISABLE_WEATHER.getBoolean()) if (ConfigEntry.DISABLE_WEATHER.getBoolean())
@ -57,7 +54,6 @@ public class WorldManager extends FreedomService
flatlands.getWorld().save(); flatlands.getWorld().save();
adminworld.getWorld().save(); adminworld.getWorld().save();
masterBuilderWorld.getWorld().save(); masterBuilderWorld.getWorld().save();
hubworld.getWorld().save();
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
@ -73,10 +69,6 @@ public class WorldManager extends FreedomService
{ {
return; return;
} }
else if (event.getWorld().equals(hubworld.getWorld()) && hubworld.getWeatherMode() != WorldWeather.OFF)
{
return;
}
} }
catch (Exception ignored) catch (Exception ignored)
{ {
@ -101,10 +93,6 @@ public class WorldManager extends FreedomService
{ {
return; return;
} }
else if (event.getWorld().equals(hubworld.getWorld()) && hubworld.getWeatherMode() != WorldWeather.OFF)
{
return;
}
} }
catch (Exception ignored) catch (Exception ignored)
{ {

View File

@ -54,7 +54,7 @@ public class WorldRestrictions extends FreedomService
{ {
if (!plugin.pl.getData(player).isMasterBuilder() && plugin.pl.canManageMasterBuilders(player.getName())) if (!plugin.pl.getData(player).isMasterBuilder() && plugin.pl.canManageMasterBuilders(player.getName()))
{ {
if (player.getWorld().equals(plugin.wm.masterBuilderWorld.getWorld()) || player.getWorld().equals(plugin.wm.hubworld.getWorld())) if (player.getWorld().equals(plugin.wm.masterBuilderWorld.getWorld()))
{ {
return true; return true;
} }

View File

@ -230,214 +230,242 @@ allow:
auto_clear: false auto_clear: false
gravity: false gravity: false
# Blocked commands:
#
# How blocked commands work:
# All sections described below are delimited by colon characters.
# Make sure that you block a command by its main command name, not an alias
# as all aliases are blocked by default. Commands are case-insensitive.
#
# * The first section is a letter which indicates which rank may use this command
# Valid ranks:
# n - Nobody (Completely disabled)
# a - Admins (Console)
# s - Senior Admins (Console)
# o - Ops (Non-Ops won't be able to use it)
#
# * The second section is a letter which indicates what to do when a player executes that command.
# Valid actions:
# b - Block the command
# a - Block the command and auto-eject that player (for ops and below)
# u - Block the command and Return an "Unknown command" message (Used to hide commands)
#
# * The third section is the command to be blocked, prefixed with a slash
#
# * The fourth section is the message to send to the player when executing that command.
# This should be omitted if unwanted. ChatColors are supported with the &-key. By default
# the starting ChatColor is set to gray. You can use the default 'That command is blocked.' message
# by using a single underscore.
#
# Examples:
# - 'n:b:/mail sendall:&4You can't send mails to everyone!'
# - 's:a:/stop'
# - 'n:b:/ban:_'
#
blocked_commands: blocked_commands:
# Core Protect Blocked and shows as an unknown command... #
- 'a:u:/co:_' # How globally blocked commands work:
- 'n:u:/co purge:_' # All sections described below are delimited by colon characters.
- 'a:u:/coreprotect:_' # Make sure that you block a command by its main command name, not an alias
- 'n:u:/coreprotect purge:_' # as all aliases are blocked by default. Commands are case-insensitive.
- 'a:u:/core:_' #
- 'n:u:/core purge:_' # * The first section is a letter which indicates which rank may use this command
# Disabled commands # Valid ranks:
- 'n:b:/essentials:_' # n - Nobody (Completely disabled)
- 'n:b:/time:Server-side time changing is disabled. Please use /ptime to set your own personal time.' # a - Admins (Console)
- 'n:b:/disguiseradius:_' # s - Senior Admins (Console)
- 'n:b:/undisguiseradius:_' # o - Ops (Non-Ops won't be able to use it)
- 'n:b:/debug:_' #
- 'n:b:/pardon:_' # * The second section is a letter which indicates what to do when a player executes that command.
- 'n:b:/ban-ip:_' # Valid actions:
- 'n:b:/pardon-ip:_' # b - Block the command
- 'n:b:/toggledownfall:_' # a - Block the command and auto-eject that player (for ops and below)
- 'n:b:/spreadplayers:_' # u - Block the command and Return an "Unknown command" message (Used to hide commands)
- 'n:b:/blockdata:_' #
- 'n:b:/clearhistory:_' # * The third section is the command to be blocked, prefixed with a slash
- 'n:b:/save-on:_' #
- 'n:b:/save-off:_' # * The fourth section is the message to send to the player when executing that command.
- 'n:b:/packet:_' # This should be omitted if unwanted. ChatColors are supported with the &-key. By default
- 'n:b://eval:_' # the starting ChatColor is set to gray. You can use the default 'That command is blocked.' message
- 'n:b:/testvote:_' # by using a single underscore.
- 'n:b:/nvreload:_' #
- 'n:b:/bungeeguard:_' # Examples:
- 'n:b:/buycraft:_' # - 'n:b:/mail sendall:&4You can't send mails to everyone!'
- 'n:b:/spigot reload:_' # - 's:a:/stop'
# - 'n:b:/setjail:_' # - 'n:b:/ban:_'
- 'n:b:/mail sendall:Sending mail to all players is not allowed.' #
- 'n:b:/entitydata:_' global:
- 'n:b:/skins:_' # CoreProtect Blocked and shows as an unknown command...
- 'n:b:/advancement:_' - 'a:u:/co:_'
- 'n:b:/worldborder:The worldborder does not need to be changed. This command is disabled.' - 'n:u:/co purge:_'
- 'n:b:/defaultgamemode:The default gamemode should not be changed.' - 'a:u:/coreprotect:_'
- 'n:b:/thread:_' - 'n:u:/coreprotect purge:_'
- 'n:b:/stacktrace:_' - 'a:u:/core:_'
- 'n:b:/function:_' - 'n:u:/core purge:_'
- 'n:b:/forceload:_'
- 'n:b:/fill:_'
- 'n:b:/paper:_'
- 'n:b:/locate:_'
- 'n:b:/vvbukkit:_'
- 'n:b:/plot area c:_'
- 'n:b:/d minecart_command:_'
- 'n:b:/loot:_'
- 'n:b:/plan:_'
# - 'n:b:/explosivearrows:&cDisabled until further notice'
- 'n:b://material:_'
- 'n:b://mat:_'
- 'n:b:/mat:_'
- 'n:b:/vpnguard:_'
- 'n:b:/pcapi:_'
- 'n:b://distr:&cNope.'
- 'n:b:/data:_'
- 'n:b:/datapack:_'
- 'n:b://regen:_'
- 'n:b:/onlinemode:&cThis breaks UUIDs.'
- 'n:b:/execute:_'
- 'n:b:/killall:_'
- 'n:b:/createdisguise:_'
- 'n:b:/attribute:_'
# Admin commands # Disabled commands
- 'a:b:/vive:_' - 'n:b:/essentials:_'
- 'a:b:/vse:_' - 'n:b:/time:Server-side time changing is disabled. Please use /ptime to set your own personal time.'
- 'a:b:/lightning:_' - 'n:b:/disguiseradius:_'
- 'a:b:/playsound:_' - 'n:b:/undisguiseradius:_'
- 'a:b:/locatebiome:_' - 'n:b:/debug:_'
- 'a:b:/delchunks:_' - 'n:b:/pardon:_'
- 'a:b:/exploitfixer:_' - 'n:b:/ban-ip:_'
- 'a:b:/massivelag:_' - 'n:b:/pardon-ip:_'
- 'a:b:/ml:_' - 'n:b:/toggledownfall:_'
- 'a:b:/createkit:_' - 'n:b:/spreadplayers:_'
- 'a:b:/delkit:_' - 'n:b:/blockdata:_'
- 'a:b:/region:_' - 'n:b:/clearhistory:_'
- 'a:b:/clone:_' - 'n:b:/save-on:_'
- 'a:b:/cap:_' - 'n:b:/save-off:_'
- 'a:b:/gamemode:Use /gmc and /gms to set your gamemode.' - 'n:b:/packet:_'
- 'a:b:/powernbt:_' - 'n:b://eval:_'
- 'a:b:/nbt.:_' - 'n:b:/testvote:_'
- 'a:b:/blockshub:_' - 'n:b:/nvreload:_'
- 'a:b:/protocol:_' - 'n:b:/bungeeguard:_'
- 'a:b:/libsdisguises reload:_' - 'n:b:/buycraft:_'
- 'a:b://awe:_' - 'n:b:/spigot reload:_'
- 'a:b:/stopfire:_' - 'n:b:/mail sendall:Sending mail to all players is not allowed.'
- 'a:b:/allowfire' - 'n:b:/entitydata:_'
- 'a:b:/stoplag:_' - 'n:b:/skins:_'
- 'a:b:/worldguard:_' - 'n:b:/advancement:_'
- 'a:b:/slay:_' - 'n:b:/worldborder:The worldborder does not need to be changed. This command is disabled.'
- 'a:b:/save-all:_' - 'n:b:/defaultgamemode:The default gamemode should not be changed.'
- 'a:b:/libsdisguises:_' - 'n:b:/thread:_'
- 'a:b:/particle:Due to security reasons, the use of /particle has been disabled.' - 'n:b:/stacktrace:_'
- 'a:b:/rainbowclear:_' - 'n:b:/function:_'
- 'a:b:/rainbowspeed:_' - 'n:b:/forceload:_'
- 'a:b:/kick:_' - 'n:b:/fill:_'
- 'a:b:/difficulty:_' - 'n:b:/paper:_'
- 'a:b:/captchafy:_' - 'n:b:/locate:_'
- 'a:b:/socialspy:_' - 'n:b:/vvbukkit:_'
- 'a:b:/sproxy:_' - 'n:b:/plot area c:_'
- 'a:b:/replaceitem:_' - 'n:b:/d minecart_command:_'
- 'a:b:/kill:_' - 'n:b:/loot:_'
- 'a:b:/reaction:_' - 'n:b:/plan:_'
- 'a:b:/setworldspawn:_' - 'n:b://material:_'
- 'a:b:/scoreboard:_' - 'n:b://mat:_'
- 'a:b:/setspawn:_' - 'n:b:/mat:_'
- 'a:b:/forestgen:_' - 'n:b:/vpnguard:_'
- 'a:b:/setidletimeout:_' - 'n:b:/pcapi:_'
- 'a:b:/lrbuild:_' - 'n:b://distr:&cNope.'
- 'a:b:/size:_' - 'n:b:/data:_'
- 'a:b:/break:_' - 'n:b:/datapack:_'
- 'a:b:/disentity:_' - 'n:b://regen:_'
- 'a:b:/reload:_' - 'n:b:/execute:_'
- 'a:b:/title:_' - 'n:b:/killall:_'
- 'a:b:/weather:_' - 'n:b:/createdisguise:_'
- 'a:b:/tpall:_' - 'n:b:/attribute:_'
- 'a:b:/etpall:_'
- 'a:b:/setblock:_' # Admin commands
- 'a:b:/gamerule:_' - 'a:b:/vive:_'
- 'a:b:/togglejail:_' - 'a:b:/vse:_'
- 'a:b:/range:_' - 'a:b:/lightning:_'
- 'a:b:/stop:_' - 'a:b:/playsound:_'
- 'a:b:/restart:_' - 'a:b:/locatebiome:_'
- 'a:b:/sr:_' - 'a:b:/delchunks:_'
- 'a:b:/tpo:_' - 'a:b:/exploitfixer:_'
- 'a:b:/tpohere:_' - 'a:b:/massivelag:_'
- 'a:b:/tphere:_' - 'a:b:/ml:_'
- 'a:b:/rfchairs:_' - 'a:b:/createkit:_'
- 'a:b:/ppo:_' - 'a:b:/delkit:_'
- 'a:b:/vulnerabilitypatcher:_' - 'a:b:/region:_'
- 'a:b:/crackshot config:_' - 'a:b:/clone:_'
- 'a:b:/marry reload:_' - 'a:b:/cap:_'
- 'a:b:/bh:_' - 'a:b:/gamemode:Use /gmc and /gms to set your gamemode.'
- 'a:b:/tpaall:_' - 'a:b:/powernbt:_'
- 'a:b:/paper heap:_' - 'a:b:/nbt.:_'
- 'a:u:/burn:_' - 'a:b:/blockshub:_'
- 'a:b:/summon:_' - 'a:b:/protocol:_'
- 'a:b:/discord:_' - 'a:b:/libsdisguises reload:_'
- 'a:b:/bossbar:_' - 'a:b://awe:_'
- 'a:b:/team:_' - 'a:b:/stopfire:_'
- 'a:b:/spawner:_' - 'a:b:/allowfire'
# - 'a:b:/getpos:_' - 'a:b:/stoplag:_'
- 's:b:/istack:_' - 'a:b:/worldguard:_'
- 'a:b:/getloc:_' - 'a:b:/slay:_'
- 'a:b:/holo:_' - 'a:b:/save-all:_'
- 'a:b:/hd:_' - 'a:b:/libsdisguises:_'
- 'a:b:/hologram:_' - 'a:b:/particle:Due to security reasons, the use of /particle has been disabled.'
- 'a:b:/holograms:_' - 'a:b:/rainbowclear:_'
# - 'a:b:/whois:&cpeople like aurulim ruined the usage of this command, stop tp bypassing' # Blocking this is ridiculous. Instead of being lazy and just blocking whois, how about you disable the part where it reveals people's coords, like you did with disabling IPs? - 'a:b:/rainbowspeed:_'
- 's:b:/awe toggle:_' - 'a:b:/kick:_'
- 's:b:/tellraw:_' - 'a:b:/difficulty:_'
- 's:b://awe toggle:_' - 'a:b:/captchafy:_'
- 'a:b:/openinv:_' - 'a:b:/socialspy:_'
- 'a:b:/oi:_' - 'a:b:/sproxy:_'
- 'a:b:/open:_' - 'a:b:/replaceitem:_'
- 'a:b:/openender:_' - 'a:b:/kill:_'
- 'a:b:/oe:_' - 'a:b:/reaction:_'
- 'a:b:/searchinv:_' - 'a:b:/setworldspawn:_'
- 'a:b:/si:_' - 'a:b:/scoreboard:_'
- 'a:b:/searchender:_' - 'a:b:/setspawn:_'
- 'a:b:/se:_' - 'a:b:/forestgen:_'
- 'a:b:/searchenchant:_' - 'a:b:/setidletimeout:_'
- 'a:b:/searchenchants:_' - 'a:b:/lrbuild:_'
- 'a:b:/anycontainer:_' - 'a:b:/size:_'
- 'a:b:/anychest:_' - 'a:b:/break:_'
- 'a:b:/sc:_' - 'a:b:/disentity:_'
- 'a:b:/fawe:_' - 'a:b:/reload:_'
- 'a:b:/wea:_' - 'a:b:/title:_'
- 'a:b:/protocolsupport:_' - 'a:b:/weather:_'
- 'a:b:/ps:_' - 'a:b:/tpall:_'
- 'n:b:/wra:_' - 'a:b:/etpall:_'
- 's:b:/viaver:_' - 'a:b:/setblock:_'
- 's:b:/viaversion:_' - 'a:b:/gamerule:_'
- 's:b:/spark:_' - 'a:b:/togglejail:_'
- 'a:b:/range:_'
- 'a:b:/stop:_'
- 'a:b:/restart:_'
- 'a:b:/sr:_'
- 'a:b:/tpo:_'
- 'a:b:/tpohere:_'
- 'a:b:/tphere:_'
- 'a:b:/rfchairs:_'
- 'a:b:/ppo:_'
- 'a:b:/vulnerabilitypatcher:_'
- 'a:b:/crackshot config:_'
- 'a:b:/marry reload:_'
- 'a:b:/bh:_'
- 'a:b:/tpaall:_'
- 'a:b:/paper heap:_'
- 'a:u:/burn:_'
- 'a:b:/summon:_'
- 'a:b:/discord:_'
- 'a:b:/bossbar:_'
- 'a:b:/team:_'
- 'a:b:/spawner:_'
- 's:b:/istack:_'
- 'a:b:/getloc:_'
- 'a:b:/holo:_'
- 'a:b:/hd:_'
- 'a:b:/hologram:_'
- 'a:b:/holograms:_'
- 's:b:/awe toggle:_'
- 's:b:/tellraw:_'
- 's:b://awe toggle:_'
- 'a:b:/openinv:_'
- 'a:b:/oi:_'
- 'a:b:/open:_'
- 'a:b:/openender:_'
- 'a:b:/oe:_'
- 'a:b:/searchinv:_'
- 'a:b:/si:_'
- 'a:b:/searchender:_'
- 'a:b:/se:_'
- 'a:b:/searchenchant:_'
- 'a:b:/searchenchants:_'
- 'a:b:/anycontainer:_'
- 'a:b:/anychest:_'
- 'a:b:/sc:_'
- 'a:b:/fawe:_'
- 'a:b:/wea:_'
- 'a:b:/protocolsupport:_'
- 'a:b:/ps:_'
- 'n:b:/wra:_'
- 's:b:/viaver:_'
- 's:b:/viaversion:_'
- 's:b:/spark:_'
# Commands that cannot be used by muted players
muted:
- say
- me
- msg
- tell
- reply
- mail
# Commands that cannot be used with /wildcard
wildcard:
- wildcard
- gtfo
- doom
- slconfig
- smite
# Words that cannot be used in tags
forbidden_words:
- admin
- owner
- moderator
- developer
- console
- dev
- staff
- mod
- sra
- tca
- sta
- sa
# Automatically wipe dropped objects # Automatically wipe dropped objects
auto_wipe: true auto_wipe: true