From 6f4cc8d4b56cec3e4aa15cd2af73ea0315f3ef5e Mon Sep 17 00:00:00 2001 From: William Bergh Date: Mon, 24 Aug 2020 22:44:45 +0200 Subject: [PATCH 1/2] Optimized FAWE bridge --- .../totalfreedommod/bridge/FAWEBridge.java | 22 +++++++++++++------ src/main/resources/plugin.yml | 2 +- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/bridge/FAWEBridge.java b/src/main/java/me/totalfreedom/totalfreedommod/bridge/FAWEBridge.java index d7182949..4f6adbb3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/bridge/FAWEBridge.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/bridge/FAWEBridge.java @@ -12,11 +12,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import me.totalfreedom.totalfreedommod.FreedomService; +import net.coreprotect.CoreProtect; import net.coreprotect.CoreProtectAPI; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.block.data.BlockData; public class FAWEBridge extends FreedomService @@ -29,7 +32,7 @@ public class FAWEBridge extends FreedomService @Override public void onStart() { - api = plugin.cpb.getCoreProtectAPI(); + api = ((CoreProtect)Bukkit.getPluginManager().getPlugin("CoreProtect")).getAPI(); /* * Iterates over blocks placed by GenerationCommands (in the EditSession) and adds them to the CoreProtect logs. @@ -127,7 +130,12 @@ public class FAWEBridge extends FreedomService if (!pattern.apply(blockVector3).getBlockType().getMaterial().isAir()) { blocksPlaced.putIfAbsent(playerAndSessionEntry, new AbstractMap.SimpleEntry<>(pattern, new ArrayList<>())); - blocksPlaced.get(playerAndSessionEntry).getValue().add(new Gson().fromJson(new Gson().toJson(blockVector3), blockVector3.getClass())); + BlockVector3 vectorClone = new Gson().fromJson(new Gson().toJson(blockVector3), blockVector3.getClass()); + + if (!blocksPlaced.get(playerAndSessionEntry).getValue().contains(vectorClone)) + { + blocksPlaced.get(playerAndSessionEntry).getValue().add(vectorClone); + } } } @@ -138,23 +146,23 @@ public class FAWEBridge extends FreedomService { world = server.getWorld(editSession.getWorld().getName()); } - List blocks = new ArrayList<>(); + List blocks = new ArrayList<>(); for (BlockVector3 blockVector3 : region) { - blocks.add(world.getBlockAt(blockVector3.getBlockX(), blockVector3.getBlockY(), blockVector3.getBlockZ())); + blocks.add(world.getBlockAt(blockVector3.getBlockX(), blockVector3.getBlockY(), blockVector3.getBlockZ()).getState()); } logBlockEdit(playerName, editSession, pattern, blocks); } - public void logBlockEdit(String playerName, EditSession editSession, Pattern pattern, List blocks) + public void logBlockEdit(String playerName, EditSession editSession, Pattern pattern, List blocks) { Map.Entry playerAndSessionEntry = new AbstractMap.SimpleEntry(playerName, editSession); - server.getScheduler().scheduleSyncDelayedTask(plugin, () -> + server.getScheduler().scheduleAsyncDelayedTask(plugin, () -> { - for (Block block : blocks) + for (BlockState block : blocks) { BlockVector3 blockVector3 = BlockVector3.at(block.getX(), block.getY(), block.getZ()); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 56e8e6eb..5de3b29d 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,6 +2,6 @@ name: TotalFreedomMod main: me.totalfreedom.totalfreedommod.TotalFreedomMod version: ${project.version} description: Plugin for the Total Freedom server. -loadbefore: [BukkitTelnet, Essentials, LibsDisguises, WorldEdit, WorldGuard, WorldGuardExtraFlags, TFGuilds, SuperVanish, PremiumVanish] +loadbefore: [BukkitTelnet, Essentials, CoreProtect, LibsDisguises, WorldEdit, WorldGuard, WorldGuardExtraFlags, TFGuilds, SuperVanish, PremiumVanish] authors: [Madgeek1450, Prozza] api-version: 1.16 \ No newline at end of file From 7af53448beb2f69b7d2c70cca1a7ef3ca4ab62c1 Mon Sep 17 00:00:00 2001 From: William Bergh Date: Sun, 6 Sep 2020 21:25:15 +0200 Subject: [PATCH 2/2] Potion command fix and refreshment The potion command didn't work for OPs due to some misstake that made it think that all commands were executed on other players (a staff only feature). It now instead uses switches to execute for better performance and readability. --- .../command/Command_potion.java | 326 +++++++++--------- 1 file changed, 163 insertions(+), 163 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java index 719b0795..7b7bbc1f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java @@ -17,7 +17,7 @@ import org.bukkit.potion.PotionEffectType; @CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandParameters( description = "Manipulate your potion effects. Duration is measured in server ticks (~20 ticks per second).", - usage = "/ [target name]>", + usage = "/ [target name]>", aliases="effect") public class Command_potion extends FreedomCommand { @@ -25,153 +25,149 @@ public class Command_potion extends FreedomCommand @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (args.length == 1 || args.length == 2) + switch (args.length) { - if (args[0].equalsIgnoreCase("list")) - { - List potionEffectTypeNames = new ArrayList<>(); - for (PotionEffectType potion_effect_type : PotionEffectType.values()) + case 1: + if (args[0].equalsIgnoreCase("list")) { - if (potion_effect_type != null) + List potionEffectTypeNames = new ArrayList<>(); + for (PotionEffectType potion_effect_type : PotionEffectType.values()) { - potionEffectTypeNames.add(potion_effect_type.getName()); + if (potion_effect_type != null) + { + potionEffectTypeNames.add(potion_effect_type.getName()); + } } + msg("Potion effect types: " + StringUtils.join(potionEffectTypeNames, ", "), ChatColor.AQUA); } - msg("Potion effect types: " + StringUtils.join(potionEffectTypeNames, ", "), ChatColor.AQUA); - } - else if (args[0].equalsIgnoreCase("clearall")) - { - if (!(plugin.sl.isStaff(sender) || senderIsConsole)) + else if (args[0].equalsIgnoreCase("clearall")) { - noPerms(); - return true; - } - FUtil.staffAction(sender.getName(), "Cleared all potion effects from all players", true); - for (Player target : server.getOnlinePlayers()) - { - for (PotionEffect potion_effect : target.getActivePotionEffects()) + if (!(plugin.sl.isStaff(sender) || senderIsConsole)) { - target.removePotionEffect(potion_effect.getType()); + noPerms(); + return true; } - } - } - else if (args[0].equalsIgnoreCase("clear")) - { - Player target = playerSender; - if (args.length == 2) + FUtil.staffAction(sender.getName(), "Cleared all potion effects from all players", true); + for (Player target : server.getOnlinePlayers()) + { + for (PotionEffect potion_effect : target.getActivePotionEffects()) + { + target.removePotionEffect(potion_effect.getType()); + } + } + } + + case 2: + if (args[0].equalsIgnoreCase("clear")) { - target = getPlayer(args[1], true); + Player target = playerSender; + if(args.length == 2) + { + if (!plugin.sl.isStaff(sender) && !target.equals(getPlayer(sender.getName()))) + { + msg(ChatColor.RED + "Only staff can clear potion effects from other players."); + return true; + } + target = getPlayer(args[1], true); + } + else + { + if (senderIsConsole) + { + msg("You must specify a target player when using this command from the console."); + return true; + } + } if (target == null) { msg(FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); return true; } - } - if (senderIsConsole) - { - msg("You must specify a target player when using this command from the console."); - return true; - } - - if (!plugin.sl.isStaff(sender)) - { - msg(ChatColor.RED + "Only staff can clear potion effects from other players."); - return true; - } - - for (PotionEffect potion_effect : target.getActivePotionEffects()) - { - target.removePotionEffect(potion_effect.getType()); - } - - msg("Cleared all active potion effects " + (!target.equals(playerSender) ? "from player " + target.getName() + "." : "from yourself."), ChatColor.AQUA); - } - else - { - return false; - } - } - else if (args.length == 4 || args.length == 5) - { - if (args[0].equalsIgnoreCase("add")) - { - Player target = playerSender; - - if (args.length == 5) - { - target = getPlayer(args[4]); - - if (target == null || plugin.sl.isVanished(target.getName()) && !plugin.sl.isStaff(sender)) + for (PotionEffect potion_effect : target.getActivePotionEffects()) { - msg(FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + target.removePotionEffect(potion_effect.getType()); + } + + msg("Cleared all active potion effects " + (!target.equals(playerSender) ? "from player " + target.getName() + "." : "from yourself."), ChatColor.AQUA); + } + break; + + case 4: + case 5: + if (args[0].equalsIgnoreCase("add")) + { + Player target = playerSender; + + if (args.length == 5) + { + if (!plugin.sl.isStaff(sender) && !getPlayer(args[4]).equals(getPlayer(sender.getName()))) + { + sender.sendMessage(ChatColor.RED + "Only staff can apply potion effects to other players."); + return true; + } + + target = getPlayer(args[4]); + + if (target == null || plugin.sl.isVanished(target.getName()) && !plugin.sl.isStaff(sender)) + { + msg(FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED); + return true; + } + } + else + { + if (senderIsConsole) + { + sender.sendMessage("You must specify a target player when using this command from the console."); + return true; + } + } + + PotionEffectType potion_effect_type = PotionEffectType.getByName(args[1]); + if (potion_effect_type == null) + { + sender.sendMessage(ChatColor.AQUA + "Invalid potion effect type."); return true; } - } - if (senderIsConsole) - { - sender.sendMessage("You must specify a target player when using this command from the console."); - return true; - } + int duration; + try + { + duration = Integer.parseInt(args[2]); + duration = Math.min(duration, 100000); + } + catch (NumberFormatException ex) + { + msg("Invalid potion duration.", ChatColor.RED); + return true; + } - if (!plugin.sl.isStaff(sender)) - { - sender.sendMessage(ChatColor.RED + "Only staff can apply potion effects to other players."); - return true; - } + int amplifier; + try + { + amplifier = Integer.parseInt(args[3]); + amplifier = Math.min(amplifier, 100000); + } + catch (NumberFormatException ex) + { + msg("Invalid potion amplifier.", ChatColor.RED); + return true; + } - PotionEffectType potion_effect_type = PotionEffectType.getByName(args[1]); - if (potion_effect_type == null) - { - sender.sendMessage(ChatColor.AQUA + "Invalid potion effect type."); - return true; + PotionEffect new_effect = potion_effect_type.createEffect(duration, amplifier); + target.addPotionEffect(new_effect, true); + msg( + "Added potion effect: " + new_effect.getType().getName() + + ", Duration: " + new_effect.getDuration() + + ", Amplifier: " + new_effect.getAmplifier() + + (!target.equals(playerSender) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA); } - - int duration; - try - { - duration = Integer.parseInt(args[2]); - duration = Math.min(duration, 100000); - } - catch (NumberFormatException ex) - { - msg("Invalid potion duration.", ChatColor.RED); - return true; - } - - int amplifier; - try - { - amplifier = Integer.parseInt(args[3]); - amplifier = Math.min(amplifier, 100000); - } - catch (NumberFormatException ex) - { - msg("Invalid potion amplifier.", ChatColor.RED); - return true; - } - - PotionEffect new_effect = potion_effect_type.createEffect(duration, amplifier); - target.addPotionEffect(new_effect, true); - msg( - "Added potion effect: " + new_effect.getType().getName() - + ", Duration: " + new_effect.getDuration() - + ", Amplifier: " + new_effect.getAmplifier() - + (!target.equals(playerSender) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA); - - return true; - } - else - { + break; + default: return false; - } - } - else - { - return false; } return true; } @@ -179,50 +175,54 @@ public class Command_potion extends FreedomCommand @Override public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) { - if (args.length == 1) + switch (args.length) { - List arguments = new ArrayList<>(); - arguments.addAll(Arrays.asList("list", "clear", "add")); - if (plugin.sl.isStaff(sender)) - { - arguments.add("clearall"); - } - return arguments; - } - else if (args.length == 2) - { - if (args[0].equals("clear")) - { + case 1: + List arguments = new ArrayList<>(); + arguments.addAll(Arrays.asList("list", "clear", "add")); if (plugin.sl.isStaff(sender)) { - return FUtil.getPlayerList(); + arguments.add("clearall"); } - } - else if (args[0].equals("add")) - { - return getAllPotionTypes(); - } - } - else if (args.length == 3) - { - if (args[0].equals("add")) - { - return Arrays.asList(""); - } - } - else if (args.length == 4) - { - if (args[0].equals("add")) - { - return Arrays.asList(""); - } - } - else if (args.length == 5 && plugin.sl.isStaff(sender)) - { - if (args[0].equals("add")) - { - return FUtil.getPlayerList(); - } + return arguments; + + case 2: + if (args[0].equals("clear")) + { + if (plugin.sl.isStaff(sender)) + { + return FUtil.getPlayerList(); + } + } + else if (args[0].equals("add")) + { + return getAllPotionTypes(); + } + break; + + case 3: + if (args[0].equals("add")) + { + return Arrays.asList(""); + } + break; + + case 4: + if (args[0].equals("add")) + { + return Arrays.asList(""); + } + break; + + case 5: + if (plugin.sl.isStaff(sender)) + { + if (args[0].equals("add")) + { + return FUtil.getPlayerList(); + } + } + break; } return Collections.emptyList();