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/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(); 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