mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 03:03:43 +01:00 
			
		
		
		
	@@ -58,7 +58,7 @@ public class Database extends SubCommand {
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean onCommand(final PlotPlayer player, String[] args) {
 | 
			
		||||
        if (args.length < 1) {
 | 
			
		||||
            MainUtil.sendMessage(player, "/plot database [world] <sqlite|mysql>");
 | 
			
		||||
            MainUtil.sendMessage(player, "/plot database [world] <sqlite|mysql|import>");
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        ArrayList<Plot> plots;
 | 
			
		||||
@@ -82,8 +82,13 @@ public class Database extends SubCommand {
 | 
			
		||||
                        MainUtil.sendMessage(player, "/plot database import [sqlite file] [prefix]");
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    File file = new File(PS.get().IMP.getDirectory() + File.separator + args[1] + ".db");
 | 
			
		||||
                    if (!file.exists()) {
 | 
			
		||||
                        MainUtil.sendMessage(player, "&6Database does not exist: " + file);
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    MainUtil.sendMessage(player, "&6Starting...");
 | 
			
		||||
                    implementation = new SQLite(PS.get().IMP.getDirectory() + File.separator + args[1] + ".db");
 | 
			
		||||
                    implementation = new SQLite(file.getPath());
 | 
			
		||||
                    final SQLManager manager = new SQLManager(implementation, (args.length == 3) ? args[2] : "", true);
 | 
			
		||||
                    final ConcurrentHashMap<String, ConcurrentHashMap<PlotId, Plot>> map = manager.getPlots();
 | 
			
		||||
                    plots = new ArrayList<Plot>();
 | 
			
		||||
 
 | 
			
		||||
@@ -197,12 +197,10 @@ public class FlagCmd extends SubCommand {
 | 
			
		||||
                    MainUtil.sendMessage(player, C.NOT_VALID_FLAG);
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                if (!Permissions.hasPermission(player, "plots.set.flag." + args[1].toLowerCase())) {
 | 
			
		||||
                    for (final String entry : args[2].split(",")) {
 | 
			
		||||
                        if (!Permissions.hasPermission(player, "plots.set.flag." + args[1].toLowerCase() + "." + entry)) {
 | 
			
		||||
                            MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase() + "." + entry);
 | 
			
		||||
                            return false;
 | 
			
		||||
                        }
 | 
			
		||||
                for (final String entry : args[2].split(",")) {
 | 
			
		||||
                    if (!Permissions.hasPermission(player, "plots.set.flag." + args[1].toLowerCase() + "." + entry)) {
 | 
			
		||||
                        MainUtil.sendMessage(player, C.NO_PERMISSION, "plots.set.flag." + args[1].toLowerCase() + "." + entry);
 | 
			
		||||
                        return false;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                final String value = StringMan.join(Arrays.copyOfRange(args, 2, args.length), " ");
 | 
			
		||||
 
 | 
			
		||||
@@ -316,6 +316,42 @@ public class MainCommand extends CommandManager<PlotPlayer> {
 | 
			
		||||
        getInstance().handle(player, builder.toString());
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public int getMatch(String[] args, Command<PlotPlayer> cmd) {
 | 
			
		||||
        int count = 0;
 | 
			
		||||
        String perm = cmd.getPermission();
 | 
			
		||||
        HashSet<String> desc = new HashSet<String>();
 | 
			
		||||
        for (String word : cmd.getDescription().split(" ")) {
 | 
			
		||||
            desc.add(word);
 | 
			
		||||
        }
 | 
			
		||||
        for (String arg : args) {
 | 
			
		||||
            if (perm.startsWith(arg)) {
 | 
			
		||||
                count++;
 | 
			
		||||
            }
 | 
			
		||||
            if (desc.contains(arg)) {
 | 
			
		||||
                count++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        String[] usage = cmd.getUsage().split(" ");
 | 
			
		||||
        for (int i = 0; i < Math.min(4 , usage.length); i++) {
 | 
			
		||||
            int require;
 | 
			
		||||
            if (usage[i].startsWith("<")) {
 | 
			
		||||
                require = 1;
 | 
			
		||||
            } else {
 | 
			
		||||
                require = 0;
 | 
			
		||||
            }
 | 
			
		||||
            String[] split = usage[i].split("\\|| |\\>|\\<|\\[|\\]|\\{|\\}|\\_|\\/");
 | 
			
		||||
            for (int j = 0; j < split.length; j++) {
 | 
			
		||||
                for (String arg : args) {
 | 
			
		||||
                    if (StringMan.isEqualIgnoreCase(arg, split[j])) {
 | 
			
		||||
                        count += 5 - i + require;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        count += StringMan.intersection(desc, args);
 | 
			
		||||
        return count;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public int handle(final PlotPlayer plr, final String input) {
 | 
			
		||||
@@ -346,46 +382,16 @@ public class MainCommand extends CommandManager<PlotPlayer> {
 | 
			
		||||
                    final HashSet<String> setargs = new HashSet<>(args.length + 1);
 | 
			
		||||
                    for (final String arg : args) {
 | 
			
		||||
                        setargs.add(arg.toLowerCase());
 | 
			
		||||
                    }
 | 
			
		||||
                    }
 | 
			
		||||
                    setargs.add(label);
 | 
			
		||||
                    final String[] allargs = setargs.toArray(new String[setargs.size()]);
 | 
			
		||||
                    int best = 0;
 | 
			
		||||
                    for (final Command<PlotPlayer> current : cmds) {
 | 
			
		||||
                        if (current.getUsage() != null) {
 | 
			
		||||
                            int count = 0;
 | 
			
		||||
                            for (final String word : new HashSet<String>(Arrays.asList((current.getUsage() + " " + current.getPermission() + " " + current.getCategory().name()).toLowerCase()
 | 
			
		||||
                            .replaceAll("\\||\\>|\\<|\\[|\\]|\\{|\\}|\\_|\\/", " ").trim().replaceAll("\\s+", " ").split(" ")))) {
 | 
			
		||||
                                for (int i = 0; i < allargs.length; i++) {
 | 
			
		||||
                                    final String arg = allargs[i];
 | 
			
		||||
                                    if ((best - count - ((allargs.length - i) * 3)) >= 0) {
 | 
			
		||||
                                        continue;
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if (StringMan.isEqual(arg, word)) {
 | 
			
		||||
                                        count += 3;
 | 
			
		||||
                                    } else if ((word.length() > arg.length()) && word.contains(arg)) {
 | 
			
		||||
                                        count += 2;
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            for (final String word : new HashSet<String>(Arrays.asList((current.getDescription()).toLowerCase().replaceAll("\\||\\>|\\<|\\[|\\]|\\{|\\}|\\_|\\/", " ").trim()
 | 
			
		||||
                            .replaceAll("\\s+", " ").split(" ")))) {
 | 
			
		||||
                                for (int i = 0; i < allargs.length; i++) {
 | 
			
		||||
                                    final String arg = allargs[i];
 | 
			
		||||
                                    if ((best - count - ((allargs.length - i) * 2)) >= 0) {
 | 
			
		||||
                                        continue;
 | 
			
		||||
                                    }
 | 
			
		||||
                                    if (StringMan.isEqual(arg, word)) {
 | 
			
		||||
                                        count += 2;
 | 
			
		||||
                                    } else if ((word.length() > arg.length()) && word.contains(arg)) {
 | 
			
		||||
                                        count++;
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            if (count > best) {
 | 
			
		||||
                                best = count;
 | 
			
		||||
                                cmd = current;
 | 
			
		||||
                    for (final Command<PlotPlayer> current : cmds) {
 | 
			
		||||
                        int match = getMatch(allargs, current);
 | 
			
		||||
                        if (match > best) {
 | 
			
		||||
                            cmd = current;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    System.out.print(StringMan.getString(allargs) + " | " + cmd + " | " + best);
 | 
			
		||||
                    if (cmd == null) {
 | 
			
		||||
                        cmd = new StringComparison<>(label, getCommandAndAliases(null, plr)).getMatchObject();
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ import java.util.Arrays;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.LinkedHashSet;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
@@ -299,6 +299,26 @@ public class MainUtil {
 | 
			
		||||
            }
 | 
			
		||||
        }, 1);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static <T> void objectTask(Collection<T> objects, final RunnableVal<T> task, final Runnable whenDone) {
 | 
			
		||||
        final Iterator<T> iter = objects.iterator();
 | 
			
		||||
        TaskManager.runTask(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                long start = System.currentTimeMillis();
 | 
			
		||||
                boolean hasNext;
 | 
			
		||||
                while ((hasNext = iter.hasNext()) && System.currentTimeMillis() - start < 5) {
 | 
			
		||||
                    task.value = iter.next();
 | 
			
		||||
                    task.run();
 | 
			
		||||
                }
 | 
			
		||||
                if (!hasNext) {
 | 
			
		||||
                    TaskManager.runTaskLater(whenDone, 1);
 | 
			
		||||
                } else {
 | 
			
		||||
                    TaskManager.runTaskLater(this, 1);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static void plotTask(Plot plot, RunnableVal<Plot> run) {
 | 
			
		||||
        if (!plot.isMerged()) {
 | 
			
		||||
@@ -723,7 +743,7 @@ public class MainUtil {
 | 
			
		||||
        BlockUpdateUtil.setBlockManager.update(world, Arrays.asList(loc));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static void update(final Plot plot) {
 | 
			
		||||
    public static void update(final Plot plot) {
 | 
			
		||||
        TaskManager.runTask(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
@@ -2098,6 +2118,7 @@ public class MainUtil {
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * @deprecated raw access is deprecated
 | 
			
		||||
     */
 | 
			
		||||
    @Deprecated
 | 
			
		||||
    public static HashSet<Plot> connected_cache;
 | 
			
		||||
    public static HashSet<RegionWrapper> regions_cache;
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import java.util.Collection;
 | 
			
		||||
import java.util.Comparator;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
public class StringMan {
 | 
			
		||||
    public static String replaceFromMap(final String string, final Map<String, String> replacements) {
 | 
			
		||||
@@ -29,6 +30,16 @@ public class StringMan {
 | 
			
		||||
        return sb.toString();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static int intersection(Set<String> options, String[] toCheck) {
 | 
			
		||||
        int count = 0;
 | 
			
		||||
        for (String check : toCheck) {
 | 
			
		||||
            if (options.contains(check)) {
 | 
			
		||||
                count++;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return count;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getString(final Object obj) {
 | 
			
		||||
        if (obj == null) {
 | 
			
		||||
            return "null";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user