Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Do not tab complete vanished players #426

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/main/java/net/coreprotect/command/TabHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import org.bukkit.Bukkit;
Expand All @@ -18,6 +19,7 @@
import org.bukkit.util.StringUtil;

import net.coreprotect.config.ConfigHandler;
import net.coreprotect.utility.Util;

public class TabHandler implements TabCompleter {

Expand All @@ -29,379 +31,379 @@
private static String[] TIMES = new String[] { "w", "d", "h", "m", "s" };
private static ArrayList<String> materials = null;

@Override
public List<String> onTabComplete(CommandSender sender, Command cmd, String label, String[] args) {
if (!(sender instanceof Player) || args.length == 0) {
return null;
}
if (args.length == 1) {
String argument = args[0].toLowerCase(Locale.ROOT);
List<String> completions = new ArrayList<>();
if (sender.hasPermission("coreprotect.help")) {
completions.add("help");
}
if (sender.hasPermission("coreprotect.inspect")) {
completions.add("inspect");
}
if (sender.hasPermission("coreprotect.rollback")) {
completions.add("rollback");
}
if (sender.hasPermission("coreprotect.restore")) {
completions.add("restore");
}
if (sender.hasPermission("coreprotect.lookup")) {
completions.add("lookup");
}
if (sender.hasPermission("coreprotect.purge")) {
completions.add("purge");
}
if (sender.hasPermission("coreprotect.reload")) {
completions.add("reload");
}
if (sender.hasPermission("coreprotect.status")) {
completions.add("status");
}
if (sender.hasPermission("coreprotect.lookup.near")) {
completions.add("near");
}
if (sender.hasPermission("coreprotect.restore")) {
completions.add("undo");
}

return StringUtil.copyPartialMatches(argument, completions, new ArrayList<>(completions.size()));
}
else if (args.length > 1) {
String argument0 = args[0].toLowerCase(Locale.ROOT);
String argument1 = args[1].toLowerCase(Locale.ROOT);
String currentArg = args[args.length - 1].toLowerCase(Locale.ROOT).trim();
String lastArg = args[args.length - 2].toLowerCase(Locale.ROOT).trim();

boolean hasUser = false;
boolean hasAction = false;
boolean hasInclude = false;
boolean hasExclude = false;
boolean hasRadius = false;
boolean hasTime = false;
boolean hasContainer = false;
boolean hasCount = false;
boolean hasPreview = false;
boolean hasPage = false;
boolean validContainer = false;
boolean pageLookup = false;

if (ConfigHandler.lookupType.get(sender.getName()) != null && ConfigHandler.lookupPage.get(sender.getName()) != null) {
pageLookup = true;
}

for (int i = 1; i < args.length; i++) {
String arg = args[i].toLowerCase(Locale.ROOT);
if (arg.equals("#container")) {
hasContainer = true;
}
else if (arg.equals("#count") || arg.equals("#sum")) {
hasCount = true;
}
else if (arg.equals("#preview")) {
hasPreview = true;
}
else if ((!arg.contains(":") && !args[i - 1].contains(":") && args.length > (i + 1)) || arg.contains("u:") || arg.contains("user:") || arg.contains("users:") || arg.contains("p:")) {
hasUser = true;
}
else if (arg.contains("page:")) {
hasPage = true;
}
else if (arg.contains("a:") || arg.contains("action:")) {
hasAction = true;
}
else if (arg.contains("i:") || arg.contains("include:") || arg.contains("item:") || arg.contains("items:") || arg.contains("b:") || arg.contains("block:") || arg.contains("blocks:")) {
hasInclude = true;
}
else if (arg.contains("t:") || arg.contains("time:")) {
hasTime = true;
}
else if (arg.contains("e:") || arg.contains("exclude:")) {
hasExclude = true;
}
else if (arg.contains("r:") || arg.contains("radius:")) {
hasRadius = true;
}
}

if (!hasContainer) {
if (ConfigHandler.lookupType.get(sender.getName()) != null) {
int lookupType = ConfigHandler.lookupType.get(sender.getName());
if (lookupType == 1) {
validContainer = true;
}
else if (lookupType == 5) {
if (ConfigHandler.lookupUlist.get(sender.getName()).contains("#container")) {
validContainer = true;
}
}
}
}

if ((lastArg.equals("a:") || lastArg.equals("action:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore"))) {
List<String> completions = new ArrayList<>(Arrays.asList(ACTIONS));
return StringUtil.copyPartialMatches(currentArg, completions, new ArrayList<>(completions.size()));
}
else if ((currentArg.startsWith("a:") || currentArg.startsWith("action:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore"))) {
String arg = "";
String[] split = currentArg.split(":", 2);
String filter = split[0] + ":";
if (split.length > 1) {
arg = split[1];
}

List<String> completions = new ArrayList<>(Arrays.asList(ACTIONS));
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + completions.get(index));
}
return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));
}
else if ((lastArg.equals("u:") || lastArg.equals("user:") || lastArg.equals("users:") || lastArg.equals("p:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore"))) {
return null;
}
else if ((currentArg.startsWith("u:") || currentArg.startsWith("user:") || currentArg.startsWith("users:") || currentArg.startsWith("p:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore"))) {
String arg = "";
String[] split = currentArg.split(":", 2);
String filter = split[0] + ":";
if (split.length > 1) {
arg = split[1];
}

List<String> completions = Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList());
List<String> completions = Bukkit.getOnlinePlayers().stream().filter(Predicate.not(Util::isVanished)).map(Player::getName).collect(Collectors.toList());
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + completions.get(index));
}

return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));
}
else if ((lastArg.equals("t:") || lastArg.equals("time:") || currentArg.startsWith("t:") || currentArg.startsWith("time:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore") || sender.hasPermission("coreprotect.purge"))) {
String filter = lastArg;
String arg = "";
if (currentArg.contains(":")) {
String[] split = currentArg.split(":", 2);
filter = split[0] + ":";
if (split.length > 1) {
arg = split[1];
}
}
else {
filter = "";
arg = currentArg;
}

List<String> completions = new ArrayList<>();
if (arg.chars().allMatch(Character::isDigit)) {
boolean addNumbers = true;
if (currentArg.length() > 0) {
char lastChar = currentArg.charAt(currentArg.length() - 1);
if (Character.isDigit(lastChar)) {
completions.addAll(Arrays.asList(TIMES));
addNumbers = false;
}
}
if (addNumbers) {
completions.addAll(Arrays.asList(NUMBERS));
}

}

completions = new ArrayList<>(completions);
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + arg + completions.get(index));
}

return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));
}
else if ((lastArg.equals("page:") || currentArg.startsWith("page:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.lookup.near") || sender.hasPermission("coreprotect.inspect"))) {
String filter = lastArg;
String arg = "";
if (currentArg.contains(":")) {
String[] split = currentArg.split(":", 2);
filter = split[0] + ":";
if (split.length > 1) {
arg = split[1];
}
}
else {
filter = "";
arg = currentArg;
}

if (arg.chars().allMatch(Character::isDigit)) {
List<String> completions = new ArrayList<>(Arrays.asList(NUMBERS));
if (arg.length() < 1) {
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + arg + completions.get(index));
}
if (arg.length() == 0) {
completions.remove(0);
}
}
return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));
}
}
else if ((lastArg.equals("r:") || lastArg.equals("radius:") || currentArg.startsWith("r:") || currentArg.startsWith("radius:")) && (sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore") || sender.hasPermission("coreprotect.purge"))) {
String filter = lastArg;
String arg = "";
if (currentArg.contains(":")) {
String[] split = currentArg.split(":", 2);
filter = split[0] + ":";
if (split.length > 1) {
arg = split[1];
}
}
else {
filter = "";
arg = currentArg;
}

if (!argument0.equals("purge") && arg.chars().allMatch(Character::isDigit)) {
List<String> completions = new ArrayList<>(Arrays.asList(NUMBERS));
if (arg.length() < 2) {
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + arg + completions.get(index));
}
}
return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));
}
else if (argument0.equals("purge") || arg.startsWith("#")) {
ArrayList<String> params = new ArrayList<>();
params.add("#global");
if (!argument0.equals("purge") && sender.getServer().getPluginManager().getPlugin("WorldEdit") != null) {
params.add("#worldedit");
}
List<World> worlds = sender.getServer().getWorlds();
for (World world : worlds) {
params.add("#" + world.getName());
}
List<String> completions = new ArrayList<>(params);
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + completions.get(index));
}
return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));
}
}
else if ((sender.hasPermission("coreprotect.lookup") || sender.hasPermission("coreprotect.rollback") || sender.hasPermission("coreprotect.restore")) && (lastArg.equals("i:") || lastArg.equals("include:") || lastArg.equals("item:") || lastArg.equals("items:") || lastArg.equals("b:") || lastArg.equals("block:") || lastArg.equals("blocks:") || currentArg.startsWith("i:") || currentArg.startsWith("include:") || currentArg.startsWith("item:") || currentArg.startsWith("items:") || currentArg.startsWith("b:") || currentArg.startsWith("block:") || currentArg.startsWith("blocks:") || lastArg.equals("e:") || lastArg.equals("exclude:") || currentArg.startsWith("e:") || currentArg.startsWith("exclude:"))) {
String filter = lastArg;
String arg = "";
if (currentArg.contains(":")) {
String[] split = currentArg.split(":", 2);
filter = split[0] + ":";
if (split.length > 1) {
arg = split[1];
}
}
else {
filter = "";
arg = currentArg;
}

if (materials == null) {
List<Material> addList = Arrays.asList(Material.ARMOR_STAND);
List<Material> excludeList = Arrays.asList(Material.GRASS);
Set<String> materialList = new HashSet<>();

Material[] materialValues = Material.values();
for (Material material : materialValues) {
if (material.isBlock() || material.isItem()) {
materialList.add(material.name().toLowerCase(Locale.ROOT));
}
}
for (Material exclude : excludeList) {
materialList.remove(exclude.name().toLowerCase(Locale.ROOT));
}
for (Material add : addList) {
materialList.add(add.name().toLowerCase(Locale.ROOT));
}

materials = new ArrayList<>(materialList);
}

List<String> completions = new ArrayList<>(materials);
for (int index = 0; index < completions.size(); index++) {
completions.set(index, filter + completions.get(index));
}
return StringUtil.copyPartialMatches(filter + arg, completions, new ArrayList<>(completions.size()));

}
else if (args.length == 2) {
if (argument0.equals("help") && sender.hasPermission("coreprotect.help")) {
List<String> completions = new ArrayList<>(Arrays.asList(HELP));
return StringUtil.copyPartialMatches(argument1, completions, new ArrayList<>(completions.size()));
}
else if (argument0.equals("purge") && sender.hasPermission("coreprotect.purge")) {
List<String> completions = new ArrayList<>(Arrays.asList("t:", "r:"));
return StringUtil.copyPartialMatches(argument1, completions, new ArrayList<>(completions.size()));
}
else if ((sender.hasPermission("coreprotect.lookup") && (argument0.equals("l") || argument0.equals("lookup"))) || (sender.hasPermission("coreprotect.rollback") && (argument0.equals("rollback") || argument0.equals("rb") || argument0.equals("ro"))) || (sender.hasPermission("coreprotect.restore") && (argument0.equals("restore") || argument0.equals("rs") || argument0.equals("re")))) {
List<String> completions = new ArrayList<>(filterParams(true, argument0, argument1, hasUser, hasAction, hasInclude, hasExclude, hasRadius, hasTime, hasContainer, hasCount, hasPreview, pageLookup, validContainer));
completions.addAll(Bukkit.getOnlinePlayers().stream().filter(player -> player.getName().toLowerCase(Locale.ROOT).startsWith(argument1)).map(Player::getName).collect(Collectors.toList()));
completions.addAll(Bukkit.getOnlinePlayers().stream().filter(Predicate.not(Util::isVanished)).filter(player -> player.getName().toLowerCase(Locale.ROOT).startsWith(argument1)).map(Player::getName).collect(Collectors.toList()));
return StringUtil.copyPartialMatches(argument1, completions, new ArrayList<>(completions.size()));
}
}
else if (args.length == 3 && argument0.equals("purge") && sender.hasPermission("coreprotect.purge")) {
if (argument1.startsWith("t:")) {
List<String> completions = new ArrayList<>(Arrays.asList("r:"));
return StringUtil.copyPartialMatches(args[2].toLowerCase(Locale.ROOT), completions, new ArrayList<>(completions.size()));
}
else if (argument1.startsWith("r:")) {
List<String> completions = new ArrayList<>(Arrays.asList("t:"));
return StringUtil.copyPartialMatches(args[2].toLowerCase(Locale.ROOT), completions, new ArrayList<>(completions.size()));
}
return Arrays.asList("");
}
else if ((sender.hasPermission("coreprotect.lookup") && (argument0.equals("l") || argument0.equals("lookup"))) || (sender.hasPermission("coreprotect.rollback") && (argument0.equals("rollback") || argument0.equals("rb") || argument0.equals("ro"))) || (sender.hasPermission("coreprotect.restore") && (argument0.equals("restore") || argument0.equals("rs") || argument0.equals("re")))) {
if ((!argument0.equals("l") && !argument0.equals("lookup")) || !hasPage) {
ArrayList<String> params = filterParams(false, argument0, currentArg, hasUser, hasAction, hasInclude, hasExclude, hasRadius, hasTime, hasContainer, hasCount, hasPreview, pageLookup, validContainer);
List<String> completions = new ArrayList<>(params);
return StringUtil.copyPartialMatches(currentArg, completions, new ArrayList<>(completions.size()));
}
}
}

return Arrays.asList("");
}

Check failure on line 369 in src/main/java/net/coreprotect/command/TabHandler.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/TabHandler.java#L34-L369

Very Complex Method
private ArrayList<String> filterParams(boolean firstParam, String lastArgument, String argument, boolean hasUser, boolean hasAction, boolean hasInclude, boolean hasExclude, boolean hasRadius, boolean hasTime, boolean hasContainer, boolean hasCount, boolean hasPreview, boolean pageLookup, boolean validContainer) {
ArrayList<String> params = new ArrayList<>();
for (String param : PARAMS) {
if (param.equals("user:") && !hasUser) {
params.add(param);
}
else if (param.equals("action:") && !hasAction) {
params.add(param);
}
else if (param.equals("include:") && !hasInclude) {
params.add(param);
}
else if (param.equals("exclude:") && !hasExclude) {
params.add(param);
}
else if (param.equals("radius:") && !hasRadius) {
params.add(param);
}
else if (param.equals("time:") && !hasTime) {
params.add(param);
}
else if (param.equals("#container") && !hasContainer && !hasRadius && validContainer) {
params.add(param);
}
}
if (firstParam && pageLookup && (lastArgument.equals("l") || lastArgument.equals("lookup"))) {
params.add("page:");
}
else if (!firstParam && argument.startsWith("#")) {
if (!hasCount) {
params.add("#count");
}
if (!hasPreview) {
params.add("#preview");
}
}

return params;
}

Check notice on line 408 in src/main/java/net/coreprotect/command/TabHandler.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/command/TabHandler.java#L370-L408

Complex Method
}
7 changes: 7 additions & 0 deletions src/main/java/net/coreprotect/utility/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.metadata.MetadataValue;
import org.bukkit.plugin.Plugin;
import org.bukkit.util.io.BukkitObjectOutputStream;

Expand Down Expand Up @@ -134,102 +135,102 @@
return message.append(Chat.COMPONENT_TAG_CLOSE).toString();
}

public static String getPageNavigation(String command, int page, int totalPages) {
StringBuilder message = new StringBuilder();

// back arrow
String backArrow = "";
if (page > 1) {
backArrow = "◀ ";
backArrow = Chat.COMPONENT_TAG_OPEN + Chat.COMPONENT_COMMAND + "|/" + command + " l " + (page - 1) + "|" + backArrow + Chat.COMPONENT_TAG_CLOSE;
}

// next arrow
String nextArrow = " ";
if (page < totalPages) {
nextArrow = " ▶ ";
nextArrow = Chat.COMPONENT_TAG_OPEN + Chat.COMPONENT_COMMAND + "|/" + command + " l " + (page + 1) + "|" + nextArrow + Chat.COMPONENT_TAG_CLOSE;
}

StringBuilder pagination = new StringBuilder();
if (totalPages > 1) {
pagination.append(Color.GREY + "(");
if (page > 3) {
pagination.append(Color.WHITE + Chat.COMPONENT_TAG_OPEN + Chat.COMPONENT_COMMAND + "|/" + command + " l " + 1 + "|" + "1 " + Chat.COMPONENT_TAG_CLOSE);
if (page > 4 && totalPages > 7) {
pagination.append(Color.GREY + "... ");
}
else {
pagination.append(Color.GREY + "| ");
}
}

int displayStart = (page - 2) < 1 ? 1 : (page - 2);
int displayEnd = (page + 2) > totalPages ? totalPages : (page + 2);
if (page > 999 || (page > 101 && totalPages > 99999)) { // limit to max 5 page numbers
displayStart = (displayStart + 1) < displayEnd ? (displayStart + 1) : displayStart;
displayEnd = (displayEnd - 1) > displayStart ? (displayEnd - 1) : displayEnd;
if (displayStart > (totalPages - 3)) {
displayStart = (totalPages - 3) < 1 ? 1 : (totalPages - 3);
}
}
else { // display at least 7 page numbers
if (displayStart > (totalPages - 5)) {
displayStart = (totalPages - 5) < 1 ? 1 : (totalPages - 5);
}
if (displayEnd < 6) {
displayEnd = 6 > totalPages ? totalPages : 6;
}
}

if (page > 99999) { // limit to max 3 page numbers
displayStart = (displayStart + 1) < displayEnd ? (displayStart + 1) : displayStart;
displayEnd = (displayEnd - 1) >= displayStart ? (displayEnd - 1) : displayEnd;
if (page == (totalPages - 1)) {
displayEnd = totalPages - 1;
}
if (displayStart < displayEnd) {
displayStart = displayEnd;
}
}

if (page > 3 && displayStart == 1) {
displayStart = 2;
}

for (int displayPage = displayStart; displayPage <= displayEnd; displayPage++) {
if (page != displayPage) {
pagination.append(Color.WHITE + Chat.COMPONENT_TAG_OPEN + Chat.COMPONENT_COMMAND + "|/" + command + " l " + displayPage + "|" + displayPage + (displayPage < totalPages ? " " : "") + Chat.COMPONENT_TAG_CLOSE);
}
else {
pagination.append(Color.WHITE + Color.UNDERLINE + displayPage + Color.RESET + (displayPage < totalPages ? " " : ""));
}
if (displayPage < displayEnd) {
pagination.append(Color.GREY + "| ");
}
}

if (displayEnd < totalPages) {
if (displayEnd < (totalPages - 1)) {
pagination.append(Color.GREY + "... ");
}
else {
pagination.append(Color.GREY + "| ");
}
if (page != totalPages) {
pagination.append(Color.WHITE + Chat.COMPONENT_TAG_OPEN + Chat.COMPONENT_COMMAND + "|/" + command + " l " + totalPages + "|" + totalPages + Chat.COMPONENT_TAG_CLOSE);
}
else {
pagination.append(Color.WHITE + Color.UNDERLINE + totalPages);
}
}

pagination.append(Color.GREY + ")");
}

return message.append(Color.WHITE + backArrow + Color.DARK_AQUA + Phrase.build(Phrase.LOOKUP_PAGE, Color.WHITE + page + "/" + totalPages) + nextArrow + pagination).toString();
}

Check notice on line 233 in src/main/java/net/coreprotect/utility/Util.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/utility/Util.java#L138-L233

Complex Method
public static String getTimeSince(long resultTime, long currentTime, boolean component) {
StringBuilder message = new StringBuilder();
double timeSince = currentTime - (resultTime + 0.00);
Expand Down Expand Up @@ -751,63 +752,63 @@
return contents;
}

public static ItemStack[] getContainerContents(Material type, Object container, Location location) {
ItemStack[] contents = null;
if (Config.getConfig(location.getWorld()).ITEM_TRANSACTIONS && BlockGroup.CONTAINERS.contains(type)) {
try {
// container may be null if called from within WorldEdit logger
if (container == null) {
container = location.getBlock();
}

if (type == Material.ARMOR_STAND) {
LivingEntity entity = (LivingEntity) container;
EntityEquipment equipment = Util.getEntityEquipment(entity);
if (equipment != null) {
contents = getArmorStandContents(equipment);
}
}
else if (type == Material.ITEM_FRAME) {
ItemFrame entity = (ItemFrame) container;
contents = Util.getItemFrameItem(entity);
}
else if (type == Material.JUKEBOX) {
Jukebox blockState = (Jukebox) ((Block) container).getState();
contents = Util.getJukeboxItem(blockState);
}
else {
Block block = (Block) container;
Inventory inventory = Util.getContainerInventory(block.getState(), true);
if (inventory != null) {
contents = inventory.getContents();
}
}

if (type == Material.ARMOR_STAND || type == Material.ITEM_FRAME) {
boolean hasItem = false;
for (ItemStack item : contents) {
if (item != null && !item.getType().equals(Material.AIR)) {
hasItem = true;
break;
}
}
if (!hasItem) {
contents = null;
}
}

if (contents != null) {
contents = Util.getContainerState(contents);
}
}
catch (Exception e) {
e.printStackTrace();
}
}

return contents;
}

Check notice on line 811 in src/main/java/net/coreprotect/utility/Util.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/utility/Util.java#L755-L811

Complex Method
public static Inventory getContainerInventory(BlockState blockState, boolean singleBlock) {
Inventory inventory = null;
try {
Expand Down Expand Up @@ -1082,74 +1083,74 @@
return result;
}

public static void loadWorldEdit() {
try {
boolean validVersion = true;
String version = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getVersion();
if (version.contains(";") || version.contains("+")) {
if (version.contains("-beta-")) {
version = version.split(";")[0];
version = version.split("-beta-")[1];
long value = Long.parseLong(version.replaceAll("[^0-9]", ""));
if (value < 6) {
validVersion = false;
}
}
else {
if (version.contains("+")) {
version = version.split("\\+")[1];
}
else {
version = version.split(";")[1];
}

if (version.contains("-")) {
long value = Long.parseLong(((version.split("-"))[0]).replaceAll("[^0-9]", ""));
if (value > 0 && value < 4268) {
validVersion = false;
}
}
}
}
else if (version.contains(".")) {
String[] worldEditVersion = version.split("-|\\.");
if (worldEditVersion.length >= 2) {
worldEditVersion[0] = worldEditVersion[0].replaceAll("[^0-9]", "");
worldEditVersion[1] = worldEditVersion[1].replaceAll("[^0-9]", "");
if (worldEditVersion[0].length() == 0 || worldEditVersion[1].length() == 0 || Util.newVersion(worldEditVersion[0] + "." + worldEditVersion[1], "7.1")) {
validVersion = false;
}
}
}
else if (version.equals("unspecified")) { // FAWE
validVersion = false;
Plugin fawe = Bukkit.getServer().getPluginManager().getPlugin("FastAsyncWorldEdit");
if (fawe != null) {
String apiVersion = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit").getDescription().getAPIVersion();
String faweVersion = fawe.getDescription().getVersion();
double apiDouble = Double.parseDouble(apiVersion);
double faweDouble = Double.parseDouble(faweVersion);
if (apiDouble >= 1.13 && faweDouble >= 1.0) {
validVersion = true;
}
}
}
else {
validVersion = false;
}

if (validVersion) {
CoreProtectEditSessionEvent.register();
}
else {
Chat.console(Phrase.build(Phrase.INTEGRATION_VERSION, "WorldEdit"));
}
}
catch (Exception e) {
e.printStackTrace();
}
}

Check notice on line 1153 in src/main/java/net/coreprotect/utility/Util.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/net/coreprotect/utility/Util.java#L1086-L1153

Complex Method
public static void unloadWorldEdit() {
try {
CoreProtectEditSessionEvent.unregister();
Expand Down Expand Up @@ -1640,4 +1641,10 @@
return ((isFront && (data == 1 || data == 3)) || (!isFront && (data == 2 || data == 3)));
}

public static boolean isVanished(Player player) {
for (MetadataValue meta : player.getMetadata("vanished")) {
if (meta.asBoolean()) return true;
}
return false;
}
}
Loading