Files
fabric-carpet/src/main/java/carpet/utils/CommandHelper.java
T
altrisi 50c22b6fe2 Log exceptions in notifyPlayersCommandsChanged
I want to remove this try-catch if possible, but don't know why it's
triggered
2023-04-03 21:47:30 +02:00

57 lines
1.9 KiB
Java

package carpet.utils;
import carpet.CarpetSettings;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.TickTask;
import net.minecraft.server.level.ServerPlayer;
/**
* A few helpful methods to work with settings and commands.
*
* This is not any kind of API, but it's unlikely to change
*
*/
public final class CommandHelper {
private CommandHelper() {}
/**
* Notifies all players that the commands changed by resending the command tree.
*/
public static void notifyPlayersCommandsChanged(MinecraftServer server)
{
if (server == null || server.getPlayerList() == null)
{
return;
}
server.tell(new TickTask(server.getTickCount(), () ->
{
try {
for (ServerPlayer player : server.getPlayerList().getPlayers()) {
server.getCommands().sendCommands(player);
}
}
catch (NullPointerException e)
{
CarpetSettings.LOG.warn("Exception while refreshing commands, please report this to Carpet", e);
}
}));
}
/**
* Whether the given source has enough permission level to run a command that requires the given commandLevel
*/
public static boolean canUseCommand(CommandSourceStack source, Object commandLevel)
{
if (commandLevel instanceof Boolean) return (Boolean) commandLevel;
String commandLevelString = commandLevel.toString();
return switch (commandLevelString)
{
case "true" -> true;
case "false" -> false;
case "ops" -> source.hasPermission(2); // typical for other cheaty commands
case "0", "1", "2", "3", "4" -> source.hasPermission(Integer.parseInt(commandLevelString));
default -> false;
};
}
}