Compare commits

...

5 commits

Author SHA1 Message Date
Lava 58afc829a0
Merge 355909a985 into db50f0b7ae 2023-08-17 05:49:07 +01:00
EnZaXD db50f0b7ae
Use more Java 17 features in classes (#349)
* Use more Java 17 features in classes

* created more new lines

* fixed long lines
2023-08-06 17:19:43 +03:00
Lava 355909a985
Update Main.java
screwed up on adding denymoblag on accident
fixed
2023-06-16 11:09:23 -04:00
Lava e017fd0dfa
Add files via upload 2023-06-16 11:06:22 -04:00
Lava d65c1f1428
Update Main.java 2023-06-16 11:05:28 -04:00
6 changed files with 141 additions and 89 deletions

View file

@ -9,6 +9,9 @@ import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.commands.*;
import pw.kaboom.extras.modules.block.BlockCheck;
import pw.kaboom.extras.modules.block.BlockPhysics;
import pw.kaboom.extras.modules.checks.DenyMobLag;
import pw.kaboom.extras.modules.checks.DenyTorchLoad;
import pw.kaboom.extras.modules.checks.DenyWaterFlow;
import pw.kaboom.extras.modules.entity.EntityExplosion;
import pw.kaboom.extras.modules.entity.EntityKnockback;
import pw.kaboom.extras.modules.entity.EntitySpawn;
@ -25,7 +28,6 @@ import java.util.Collections;
public final class Main extends JavaPlugin {
private File prefixConfigFile;
private FileConfiguration prefixConfig;
@Override
public void onLoad() {
/* Fill lists */
@ -99,6 +101,11 @@ public final class Main extends JavaPlugin {
this.getServer().getPluginManager().registerEvents(new ServerTabComplete(), this);
this.getServer().getPluginManager().registerEvents(new ServerTick(), this);
/* Anti-lag-related modules */
this.getServer().getPluginManager().registerEvents(new DenyWaterFlow(), this);
this.getServer().getPluginManager().registerEvents(new DenyTorchLoad(), this);
this.getServer().getPluginManager().registerEvents(new DenyMobLag(), this);
/* Custom worlds */
this.getServer().createWorld(
new WorldCreator("world_flatlands").generateStructures(false).type(WorldType.FLAT)

View file

@ -0,0 +1,24 @@
package pw.kaboom.extras.modules.checks;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.Main;
public class DenyMobLag implements Listener {
private static final int limit = JavaPlugin.getPlugin(Main.class).getConfig().getInt("mobLimitAtOnce");
private int mobSpawnCount = 0;
@EventHandler
public void onCreatureSpawn(CreatureSpawnEvent event) {
EntityType entityType = event.getEntityType();
if (entityType.isAlive()) {
mobSpawnCount++;
if (mobSpawnCount > limit) {
event.setCancelled(true);
}
}
}
}

View file

@ -0,0 +1,34 @@
package pw.kaboom.extras.modules.checks;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.Main;
public class DenyTorchLoad implements Listener {
private static final int limit = JavaPlugin.getPlugin(Main.class).getConfig().getInt("torchLimit");
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
if (event.getBlockPlaced().getType() == Material.TORCH) {
int placedTorchCount = getPlacedTorchCount(event.getPlayer());
if (placedTorchCount >= limit) {
event.setCancelled(true);
}
}
}
private int getPlacedTorchCount(Player player) {
int count = 0;
for (ItemStack item : player.getInventory().getContents()) {
if (item != null && item.getType() == Material.TORCH) {
count += item.getAmount();
}
}
return count;
}
}

View file

@ -0,0 +1,25 @@
package pw.kaboom.extras.modules.checks;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.Main;
public class DenyWaterFlow implements Listener {
private static final int max = JavaPlugin.getPlugin(Main.class).getConfig().getInt("maxWaterFlow");
private int waterFlowCount = 0;
@EventHandler
public void onBlockFromTo(BlockFromToEvent event) {
if (!JavaPlugin.getPlugin(Main.class).getConfig().getBoolean("blockLotsOfWaterFromFlowing")) return;
Material blockType = event.getBlock().getType();
if (blockType == Material.WATER || blockType == Material.LAVA) {
waterFlowCount++;
if (waterFlowCount > max) {
event.setCancelled(true);
}
}
}
}

View file

@ -11,6 +11,7 @@ import org.bukkit.plugin.java.JavaPlugin;
import pw.kaboom.extras.Main;
import java.util.Arrays;
import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
@ -22,33 +23,18 @@ public final class ServerCommand implements Listener {
private static final Pattern SELECTOR_PATTERN = Pattern.compile("(?>\\s)*@[aepsr](?>\\s)*");
private static final Logger LOGGER = JavaPlugin.getPlugin(Main.class).getLogger();
private static final String[] COMMANDS = { "execute", "clone", "fill", "forceload", "kick",
"locate", "locatebiome", "me", "msg", "reload", "save-all", "say", "spreadplayers",
"stop", "summon", "teammsg", "teleport", "tell", "tellraw", "tm", "tp", "w", "place",
"fillbiome", "ride" };
public static boolean checkExecuteCommand(final String cmd) {
return ("execute".equalsIgnoreCase(cmd)
|| "clone".equalsIgnoreCase(cmd)
|| "fill".equalsIgnoreCase(cmd)
|| "forceload".equalsIgnoreCase(cmd)
|| "kick".equalsIgnoreCase(cmd)
|| "locate".equalsIgnoreCase(cmd)
|| "locatebiome".equalsIgnoreCase(cmd)
|| "me".equalsIgnoreCase(cmd)
|| "msg".equalsIgnoreCase(cmd)
|| "reload".equalsIgnoreCase(cmd)
|| "save-all".equalsIgnoreCase(cmd)
|| "say".equalsIgnoreCase(cmd)
|| "spreadplayers".equalsIgnoreCase(cmd)
|| "stop".equalsIgnoreCase(cmd)
|| "summon".equalsIgnoreCase(cmd)
|| "teammsg".equalsIgnoreCase(cmd)
|| "teleport".equalsIgnoreCase(cmd)
|| "tell".equalsIgnoreCase(cmd)
|| "tellraw".equalsIgnoreCase(cmd)
|| "tm".equalsIgnoreCase(cmd)
|| "tp".equalsIgnoreCase(cmd)
|| "w".equalsIgnoreCase(cmd)
|| "place".equalsIgnoreCase(cmd)
|| "fillbiome".equalsIgnoreCase(cmd)
|| "ride".equalsIgnoreCase(cmd)
);
for (String command : COMMANDS) {
if (command.equalsIgnoreCase(cmd)) {
return true;
}
}
return false;
}
private static String checkSelectors(final String[] arr) {
@ -87,8 +73,7 @@ public final class ServerCommand implements Listener {
try {
switch (commandName) {
case "/minecraft:execute":
case "/execute":
case "/minecraft:execute", "/execute" -> {
if (arr.length >= 2) {
int asAtCount = 0;
Matcher asAtMatcher = AS_AT_PATTERN.matcher(command.toLowerCase());
@ -113,41 +98,36 @@ public final class ServerCommand implements Listener {
return "cancel";
}
final String[] executeCommand = Arrays.copyOfRange(
arr, i + 1, arr.length);
arr, i + 1, arr.length);
final String result = checkCommand(sender,
String.join(" ", executeCommand), true, depth + 1);
String.join(" ", executeCommand), true, depth + 1);
if (result == null) {
continue;
} else if (result.equals("cancel")) {
return "cancel";
}
final String pureExecute = String.join(
" ", Arrays.copyOfRange(arr, 0, i + 1));
" ", Arrays.copyOfRange(arr, 0, i + 1));
final String finalResult = checkCommand(sender,
pureExecute + " " + result, isConsoleCommand, depth + 1);
if (finalResult == null) {
return pureExecute + " " + result;
}
return finalResult;
pureExecute + " " + result, isConsoleCommand, depth + 1);
return Objects.requireNonNullElseGet(finalResult,
() -> pureExecute + " " + result);
}
}
break;
case "/minecraft:fill":
case "/fill":
}
case "/minecraft:fill", "/fill" -> {
if (command.contains("auto")) {
return command.replace("auto", "[auto]");
}
break;
case "/minecraft:give":
case "/give":
}
case "/minecraft:give", "/give" -> {
if (Double.parseDouble(arr[arr.length - 1]) > 64) {
// Limit item count
arr[arr.length - 1] = "64";
return String.join(" ", arr);
}
break;
case "/minecraft:particle":
case "/particle":
}
case "/minecraft:particle", "/particle" -> {
int[] numArgs = {14, 10};
for (int i : numArgs) {
if (arr.length < i || arr.length > i + 2) {
@ -159,22 +139,13 @@ public final class ServerCommand implements Listener {
return String.join(" ", arr);
}
}
break;
case "/minecraft:ban":
case "/ban":
case "/minecraft:kick":
case "/kick":
case "/minecraft:tell":
case "/tell":
case "/minecraft:msg":
case "/msg":
case "/minecraft:w":
case "/w":
case "/minecraft:say":
case "/say":
}
case "/minecraft:ban", "/ban", "/minecraft:kick", "/kick",
"/minecraft:tell", "/tell", "/minecraft:msg", "/msg",
"/minecraft:w", "/w", "/minecraft:say", "/say" -> {
return checkSelectors(arr);
case "/minecraft:spreadplayers":
case "/spreadplayers":
}
case "/minecraft:spreadplayers", "/spreadplayers" -> {
if (arr.length == 7 && (arr[6].contains("@e") || arr[6].contains("@a"))) {
return "cancel";
} else if (arr.length >= 5) {
@ -189,34 +160,28 @@ public final class ServerCommand implements Listener {
}
return String.join(" ", arr);
}
break;
case "/viaversion:viaver":
case "/viaversion:viaversion":
case "/viaversion:vvbukkit":
case "/viaver":
case "/viaversion":
case "/vvbukkit":
}
case "/viaversion:viaver", "/viaversion:viaversion", "/viaversion:vvbukkit",
"/viaver", "/viaversion", "/vvbukkit" -> {
if (arr.length >= 2
&& "debug".equalsIgnoreCase(arr[1])) {
return "cancel";
}
break;
case "/scissors:scissors":
case "/scissors":
if(arr.length >= 2
&& "reload".equalsIgnoreCase(arr[1])) {
}
case "/scissors:scissors", "/scissors" -> {
if (arr.length >= 2
&& "reload".equalsIgnoreCase(arr[1])) {
return "cancel";
}
break;
case "/geyser-spigot:geyser":
case "/geyser":
}
case "/geyser-spigot:geyser", "/geyser" -> {
if (arr.length >= 2
&& "dump".equalsIgnoreCase(arr[1])) {
return "cancel";
}
break;
default:
break;
}
default -> {
}
}
} catch (NumberFormatException exception) {
// Do nothing
@ -229,15 +194,12 @@ public final class ServerCommand implements Listener {
void onServerCommand(final ServerCommandEvent event) {
final CommandSender sender = event.getSender();
if (sender instanceof BlockCommandSender) {
final CommandBlock commandBlock = (CommandBlock) ((BlockCommandSender) sender)
.getBlock().getState();
if (sender instanceof BlockCommandSender blockCommandSender) {
final var commandBlock = (CommandBlock) blockCommandSender.getBlock().getState();
commandBlock.setCommand("");
commandBlock.update();
} else if (sender instanceof CommandMinecart) {
final CommandMinecart commandMinecart = (CommandMinecart) sender;
} else if (sender instanceof CommandMinecart commandMinecart) {
commandMinecart.setCommand("");
}

View file

@ -13,7 +13,7 @@ import org.bukkit.event.Listener;
import com.destroystokyo.paper.event.server.AsyncTabCompleteEvent;
public final class ServerTabComplete implements Listener {
private static HashMap<UUID, String> loginNameList = new HashMap<UUID, String>();
private static final HashMap<UUID, String> loginNameList = new HashMap<>();
@EventHandler
void onAsyncTabComplete(final AsyncTabCompleteEvent event) {
@ -39,13 +39,13 @@ public final class ServerTabComplete implements Listener {
return;
}
if (event.getCompletions().size() == 0) {
if (event.getCompletions().isEmpty()) {
event.setCancelled(true);
}
}
static List<String> getOpCompletions(final String argsFragment) {
ArrayList<String> deops = new ArrayList<String>();
final List<String> deops = new ArrayList<>();
for (Player player : Bukkit.getOnlinePlayers()) {
if (!player.isOp()) {
String loginName = loginNameList.get(player.getUniqueId());
@ -58,7 +58,7 @@ public final class ServerTabComplete implements Listener {
}
static List<String> getDeopCompletions(final String argsFragment) {
ArrayList<String> ops = new ArrayList<String>();
final List<String> ops = new ArrayList<>();
for (Player player : Bukkit.getOnlinePlayers()) {
if (player.isOp()) {
String loginName = loginNameList.get(player.getUniqueId());