mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-04 03:03:43 +01:00 
			
		
		
		
	Move bukkit specific files
This commit is contained in:
		@@ -1,623 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.util.ArrayDeque;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.commands.*;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.command.PluginCommand;
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.generator.ChunkGenerator;
 | 
			
		||||
import org.bukkit.plugin.Plugin;
 | 
			
		||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.plotme.ClassicPlotMeConnector;
 | 
			
		||||
import com.intellectualcrafters.plot.database.plotme.LikePlotMeConverter;
 | 
			
		||||
import com.intellectualcrafters.plot.database.plotme.PlotMeConnector_017;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.BukkitHybridUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridGen;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.APlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.ChunkListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.ForceFieldListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.InventoryListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.PlayerEvents;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.PlayerEvents_1_8;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.PlayerEvents_1_8_3;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.PlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.PlotPlusListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.TNTListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.WorldEvents;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.worldedit.WEListener;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.worldedit.WESubscriber;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.titles.AbstractTitle;
 | 
			
		||||
import com.intellectualcrafters.plot.titles.DefaultTitle;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockUpdateUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ConsoleColors;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.InventoryUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.PlayerManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitEconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitEventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitInventoryUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitPlayerManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitSetupUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitTaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.Metrics;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.SendChunk;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.SetBlockFast;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.SetBlockFast_1_8;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.SetBlockSlow;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.SetGenCB;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.DefaultUUIDWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.LowerOfflineUUIDWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
 | 
			
		||||
import com.sk89q.worldedit.WorldEdit;
 | 
			
		||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
 | 
			
		||||
 | 
			
		||||
public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
 | 
			
		||||
    
 | 
			
		||||
    public static BukkitMain THIS = null;
 | 
			
		||||
    
 | 
			
		||||
    private int[] version;
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean checkVersion(final int major, final int minor, final int minor2) {
 | 
			
		||||
        if (version == null) {
 | 
			
		||||
            try {
 | 
			
		||||
                version = new int[3];
 | 
			
		||||
                final String[] split = Bukkit.getBukkitVersion().split("-")[0].split("\\.");
 | 
			
		||||
                version[0] = Integer.parseInt(split[0]);
 | 
			
		||||
                version[1] = Integer.parseInt(split[1]);
 | 
			
		||||
                if (version.length == 3) {
 | 
			
		||||
                    version[2] = Integer.parseInt(split[2]);
 | 
			
		||||
                }
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return (version[0] > major) || ((version[0] == major) && (version[1] > minor)) || ((version[0] == major) && (version[1] == minor) && (version[2] >= minor2));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onEnable() {
 | 
			
		||||
        THIS = this;
 | 
			
		||||
        PS.instance = new PS(this);
 | 
			
		||||
        if (Settings.METRICS) {
 | 
			
		||||
            try {
 | 
			
		||||
                final Metrics metrics = new Metrics(this);
 | 
			
		||||
                metrics.start();
 | 
			
		||||
                log(C.PREFIX.s() + "&6Metrics enabled.");
 | 
			
		||||
            } catch (final Exception e) {
 | 
			
		||||
                log(C.PREFIX.s() + "&cFailed to load up metrics.");
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            log("&dUsing metrics will allow us to improve the plugin, please consider it :)");
 | 
			
		||||
        }
 | 
			
		||||
        List<World> worlds = Bukkit.getWorlds();
 | 
			
		||||
        if (worlds.size() > 0) {
 | 
			
		||||
            UUIDHandler.startCaching();
 | 
			
		||||
            for (World world : worlds) {
 | 
			
		||||
                try {
 | 
			
		||||
                    SetGenCB.setGenerator(world);
 | 
			
		||||
                } catch (Exception e) {
 | 
			
		||||
                    log("Failed to reload world: " + world.getName());
 | 
			
		||||
                    Bukkit.getServer().unloadWorld(world, false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void onDisable() {
 | 
			
		||||
        PS.get().disable();
 | 
			
		||||
        THIS = null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void log(String message) {
 | 
			
		||||
        if (message == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (THIS != null && Bukkit.getServer().getConsoleSender() != null) {
 | 
			
		||||
            try {
 | 
			
		||||
                message = C.color(message);
 | 
			
		||||
                if (!Settings.CONSOLE_COLOR) {
 | 
			
		||||
                    message = ChatColor.stripColor(message);
 | 
			
		||||
                }
 | 
			
		||||
                Bukkit.getServer().getConsoleSender().sendMessage(message);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Throwable e) {};
 | 
			
		||||
        }
 | 
			
		||||
        System.out.println(ConsoleColors.fromString(message));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void disable() {
 | 
			
		||||
        if (THIS != null) {
 | 
			
		||||
            onDisable();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getVersion() {
 | 
			
		||||
        return this.getDescription().getVersion();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void handleKick(UUID uuid, C c) {
 | 
			
		||||
        Player player = Bukkit.getPlayer(uuid);
 | 
			
		||||
        if (player != null && player.isOnline()) {
 | 
			
		||||
            MainUtil.sendMessage(BukkitUtil.getPlayer(player), c);
 | 
			
		||||
            player.teleport(player.getWorld().getSpawnLocation());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerCommands() {
 | 
			
		||||
        new MainCommand();
 | 
			
		||||
        MainCommand.subCommands.add(new Buy());
 | 
			
		||||
        MainCommand.subCommands.add(new Save());
 | 
			
		||||
        MainCommand.subCommands.add(new Load());
 | 
			
		||||
        MainCommand.subCommands.add(new Download());
 | 
			
		||||
        MainCommand.subCommands.add(new Disable());
 | 
			
		||||
        MainCommand.subCommands.add(new Update());
 | 
			
		||||
        MainCommand.subCommands.add(new Template());
 | 
			
		||||
        MainCommand.subCommands.add(new Setup());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugUUID());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugFill());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugSaveTest());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugLoadTest());
 | 
			
		||||
        MainCommand.subCommands.add(new CreateRoadSchematic());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugAllowUnsafe());
 | 
			
		||||
        MainCommand.subCommands.add(new RegenAllRoads());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugClear());
 | 
			
		||||
        MainCommand.subCommands.add(new Claim());
 | 
			
		||||
        MainCommand.subCommands.add(new Auto());
 | 
			
		||||
        MainCommand.subCommands.add(new Home());
 | 
			
		||||
        MainCommand.subCommands.add(new Visit());
 | 
			
		||||
        MainCommand.subCommands.add(new TP());
 | 
			
		||||
        MainCommand.subCommands.add(new Set());
 | 
			
		||||
        MainCommand.subCommands.add(new Toggle());
 | 
			
		||||
        MainCommand.subCommands.add(new Clear());
 | 
			
		||||
        MainCommand.subCommands.add(new Delete());
 | 
			
		||||
        MainCommand.subCommands.add(new SetOwner());
 | 
			
		||||
        if (Settings.ENABLE_CLUSTERS) {
 | 
			
		||||
            MainCommand.subCommands.add(new Cluster());
 | 
			
		||||
        }
 | 
			
		||||
        MainCommand.subCommands.add(new Trust());
 | 
			
		||||
        MainCommand.subCommands.add(new Add());
 | 
			
		||||
        MainCommand.subCommands.add(new Deny());
 | 
			
		||||
        MainCommand.subCommands.add(new Untrust());
 | 
			
		||||
        MainCommand.subCommands.add(new Remove());
 | 
			
		||||
        MainCommand.subCommands.add(new Undeny());
 | 
			
		||||
        MainCommand.subCommands.add(new Info());
 | 
			
		||||
        MainCommand.subCommands.add(new list());
 | 
			
		||||
        MainCommand.subCommands.add(new Help());
 | 
			
		||||
        MainCommand.subCommands.add(new Debug());
 | 
			
		||||
        MainCommand.subCommands.add(new SchematicCmd());
 | 
			
		||||
        MainCommand.subCommands.add(new plugin());
 | 
			
		||||
        MainCommand.subCommands.add(new Inventory());
 | 
			
		||||
        MainCommand.subCommands.add(new Purge());
 | 
			
		||||
        MainCommand.subCommands.add(new Reload());
 | 
			
		||||
        MainCommand.subCommands.add(new Merge());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugPaste());
 | 
			
		||||
        MainCommand.subCommands.add(new Unlink());
 | 
			
		||||
        MainCommand.subCommands.add(new Kick());
 | 
			
		||||
        MainCommand.subCommands.add(new Rate());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugClaimTest());
 | 
			
		||||
        MainCommand.subCommands.add(new Inbox());
 | 
			
		||||
        MainCommand.subCommands.add(new Comment());
 | 
			
		||||
        MainCommand.subCommands.add(new Database());
 | 
			
		||||
        MainCommand.subCommands.add(new Unclaim());
 | 
			
		||||
        MainCommand.subCommands.add(new Swap());
 | 
			
		||||
        MainCommand.subCommands.add(new MusicSubcommand());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugRoadRegen());
 | 
			
		||||
        MainCommand.subCommands.add(new Trim());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugExec());
 | 
			
		||||
        MainCommand.subCommands.add(new FlagCmd());
 | 
			
		||||
        MainCommand.subCommands.add(new Target());
 | 
			
		||||
        MainCommand.subCommands.add(new DebugFixFlags());
 | 
			
		||||
        MainCommand.subCommands.add(new Move());
 | 
			
		||||
        MainCommand.subCommands.add(new Condense());
 | 
			
		||||
        MainCommand.subCommands.add(new Confirm());
 | 
			
		||||
        MainCommand.subCommands.add(new Copy());
 | 
			
		||||
        MainCommand.subCommands.add(new Chat());
 | 
			
		||||
        final BukkitCommand bcmd = new BukkitCommand();
 | 
			
		||||
        final PluginCommand plotCommand = getCommand("plots");
 | 
			
		||||
        plotCommand.setExecutor(bcmd);
 | 
			
		||||
        plotCommand.setAliases(Arrays.asList("p", "ps", "plotme", "plot"));
 | 
			
		||||
        plotCommand.setTabCompleter(bcmd);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public File getDirectory() {
 | 
			
		||||
        return getDataFolder();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public TaskManager getTaskManager() {
 | 
			
		||||
        return new BukkitTaskManager();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private ArrayDeque<Entity> fastTickEntities;
 | 
			
		||||
    private ArrayDeque<Entity> slowTickEntities;
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void runEntityTask() {
 | 
			
		||||
//        fastTickEntities = new ArrayDeque<>();
 | 
			
		||||
//        slowTickEntities = new ArrayDeque<>();
 | 
			
		||||
        log(C.PREFIX.s() + "KillAllEntities started.");
 | 
			
		||||
        TaskManager.runTaskRepeat(new Runnable() {
 | 
			
		||||
            long ticked = 0l;
 | 
			
		||||
            long error = 0l;
 | 
			
		||||
            
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                if (this.ticked > 36_000L) {
 | 
			
		||||
                    this.ticked = 0l;
 | 
			
		||||
                    if (this.error > 0) {
 | 
			
		||||
                        log(C.PREFIX.s() + "KillAllEntities has been running for 6 hours. Errors: " + this.error);
 | 
			
		||||
                    }
 | 
			
		||||
                    this.error = 0l;
 | 
			
		||||
                }
 | 
			
		||||
                World world;
 | 
			
		||||
                for (final PlotWorld pw : PS.get().getPlotWorldObjects()) {
 | 
			
		||||
                    PlotManager manager = PS.get().getPlotManager(pw.worldname);
 | 
			
		||||
                    world = Bukkit.getWorld(pw.worldname);
 | 
			
		||||
                    try {
 | 
			
		||||
                    for (Entity entity : world.getEntities()) {
 | 
			
		||||
                        switch (entity.getType()) {
 | 
			
		||||
                            case EGG:
 | 
			
		||||
                            case ENDER_CRYSTAL:
 | 
			
		||||
                            case COMPLEX_PART:
 | 
			
		||||
                            case ARMOR_STAND:
 | 
			
		||||
                            case FISHING_HOOK:
 | 
			
		||||
                            case ENDER_SIGNAL:
 | 
			
		||||
                            case EXPERIENCE_ORB:
 | 
			
		||||
                            case LEASH_HITCH:
 | 
			
		||||
                            case FIREWORK:
 | 
			
		||||
                            case WEATHER:
 | 
			
		||||
                            case LIGHTNING:
 | 
			
		||||
                            case WITHER_SKULL:
 | 
			
		||||
                            case UNKNOWN:
 | 
			
		||||
                            case ITEM_FRAME:
 | 
			
		||||
                            case PAINTING:
 | 
			
		||||
                            case PLAYER: {
 | 
			
		||||
                                // non moving / unremovable
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                            case THROWN_EXP_BOTTLE:
 | 
			
		||||
                            case SPLASH_POTION:
 | 
			
		||||
                            case SNOWBALL:
 | 
			
		||||
                            case ENDER_PEARL:
 | 
			
		||||
                            case ARROW: {
 | 
			
		||||
                                // managed elsewhere | projectile
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                            case MINECART:
 | 
			
		||||
                            case MINECART_CHEST:
 | 
			
		||||
                            case MINECART_COMMAND:
 | 
			
		||||
                            case MINECART_FURNACE:
 | 
			
		||||
                            case MINECART_HOPPER:
 | 
			
		||||
                            case MINECART_MOB_SPAWNER:
 | 
			
		||||
                            case MINECART_TNT:
 | 
			
		||||
                            case BOAT: {
 | 
			
		||||
                                // vehicle
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                            case SMALL_FIREBALL:
 | 
			
		||||
                            case FIREBALL:
 | 
			
		||||
                            case DROPPED_ITEM: {
 | 
			
		||||
                                // dropped item
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                            case PRIMED_TNT:
 | 
			
		||||
                            case FALLING_BLOCK:  {
 | 
			
		||||
                                // managed elsewhere
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                            case BAT:
 | 
			
		||||
                            case BLAZE:
 | 
			
		||||
                            case CAVE_SPIDER:
 | 
			
		||||
                            case CHICKEN:
 | 
			
		||||
                            case COW:
 | 
			
		||||
                            case CREEPER:
 | 
			
		||||
                            case ENDERMAN:
 | 
			
		||||
                            case ENDERMITE:
 | 
			
		||||
                            case ENDER_DRAGON:
 | 
			
		||||
                            case GHAST:
 | 
			
		||||
                            case GIANT:
 | 
			
		||||
                            case GUARDIAN:
 | 
			
		||||
                            case HORSE:
 | 
			
		||||
                            case IRON_GOLEM:
 | 
			
		||||
                            case MAGMA_CUBE:
 | 
			
		||||
                            case MUSHROOM_COW:
 | 
			
		||||
                            case OCELOT:
 | 
			
		||||
                            case PIG:
 | 
			
		||||
                            case PIG_ZOMBIE:
 | 
			
		||||
                            case RABBIT:
 | 
			
		||||
                            case SHEEP:
 | 
			
		||||
                            case SILVERFISH:
 | 
			
		||||
                            case SKELETON:
 | 
			
		||||
                            case SLIME:
 | 
			
		||||
                            case SNOWMAN:
 | 
			
		||||
                            case SPIDER:
 | 
			
		||||
                            case SQUID:
 | 
			
		||||
                            case VILLAGER:
 | 
			
		||||
                            case WITCH:
 | 
			
		||||
                            case WITHER:
 | 
			
		||||
                            case WOLF:
 | 
			
		||||
                            case ZOMBIE:
 | 
			
		||||
                            default: {
 | 
			
		||||
                                Location loc = entity.getLocation();
 | 
			
		||||
                                if (MainUtil.isPlotRoad(BukkitUtil.getLocation(loc))) {
 | 
			
		||||
                                    entity.remove();
 | 
			
		||||
                                }
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    } catch (final Throwable e) {
 | 
			
		||||
                        ++this.error;
 | 
			
		||||
                    } finally {
 | 
			
		||||
                        ++this.ticked;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }, 20);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    final public ChunkGenerator getDefaultWorldGenerator(final String world, final String id) {
 | 
			
		||||
        WorldEvents.lastWorld = world;
 | 
			
		||||
        if (!PS.get().setupPlotWorld(world, id)) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        HybridGen result = new HybridGen(world);
 | 
			
		||||
        TaskManager.runTaskLater(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                if (WorldEvents.lastWorld != null && WorldEvents.lastWorld.equals(world)) {
 | 
			
		||||
                    WorldEvents.lastWorld = null;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }, 20);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerPlayerEvents() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new PlayerEvents(), this);
 | 
			
		||||
        if (checkVersion(1, 8, 0)) {
 | 
			
		||||
            getServer().getPluginManager().registerEvents(new PlayerEvents_1_8(), this);
 | 
			
		||||
        }
 | 
			
		||||
        if (checkVersion(1, 8, 3)) {
 | 
			
		||||
            getServer().getPluginManager().registerEvents(new PlayerEvents_1_8_3(), this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerInventoryEvents() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new InventoryListener(), this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerPlotPlusEvents() {
 | 
			
		||||
        PlotPlusListener.startRunnable(this);
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new PlotPlusListener(), this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerForceFieldEvents() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new ForceFieldListener(), this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerWorldEditEvents() {
 | 
			
		||||
        if (getServer().getPluginManager().getPlugin("WorldEdit") != null) {
 | 
			
		||||
            PS.get().worldEdit = (WorldEditPlugin) getServer().getPluginManager().getPlugin("WorldEdit");
 | 
			
		||||
            final String version = PS.get().worldEdit.getDescription().getVersion();
 | 
			
		||||
            if ((version != null) && version.startsWith("5.")) {
 | 
			
		||||
                log("&cThis version of WorldEdit does not support PlotSquared.");
 | 
			
		||||
                log("&cPlease use WorldEdit 6+ for masking support");
 | 
			
		||||
                log("&c - http://builds.enginehub.org/job/worldedit");
 | 
			
		||||
            } else {
 | 
			
		||||
                getServer().getPluginManager().registerEvents(new WEListener(), this);
 | 
			
		||||
                WorldEdit.getInstance().getEventBus().register(new WESubscriber());
 | 
			
		||||
                MainCommand.subCommands.add(new WE_Anywhere());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public EconHandler getEconomyHandler() {
 | 
			
		||||
        try {
 | 
			
		||||
            BukkitEconHandler econ = new BukkitEconHandler();
 | 
			
		||||
            if (econ.init()) {
 | 
			
		||||
                return econ;
 | 
			
		||||
            }
 | 
			
		||||
        } catch (Throwable e) {
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public BlockManager initBlockManager() {
 | 
			
		||||
        if (checkVersion(1, 8, 0)) {
 | 
			
		||||
            try {
 | 
			
		||||
                BukkitSetBlockManager.setBlockManager = new SetBlockFast_1_8();
 | 
			
		||||
            } catch (final Throwable e) {
 | 
			
		||||
                e.printStackTrace();
 | 
			
		||||
                BukkitSetBlockManager.setBlockManager = new SetBlockSlow();
 | 
			
		||||
            }
 | 
			
		||||
            try {
 | 
			
		||||
                new SendChunk();
 | 
			
		||||
                MainUtil.canSendChunk = true;
 | 
			
		||||
            } catch (final Throwable e) {
 | 
			
		||||
                MainUtil.canSendChunk = false;
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            try {
 | 
			
		||||
                BukkitSetBlockManager.setBlockManager = new SetBlockFast();
 | 
			
		||||
            } catch (final Throwable e) {
 | 
			
		||||
                MainUtil.canSetFast = false;
 | 
			
		||||
                BukkitSetBlockManager.setBlockManager = new SetBlockSlow();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        BlockUpdateUtil.setBlockManager = BukkitSetBlockManager.setBlockManager;
 | 
			
		||||
        return BlockManager.manager = new BukkitUtil();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean initPlotMeConverter() {
 | 
			
		||||
        TaskManager.runTaskLaterAsync(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                if (new LikePlotMeConverter("PlotMe").run(new ClassicPlotMeConnector())) return;
 | 
			
		||||
                if (new LikePlotMeConverter("PlotMe").run(new PlotMeConnector_017())) return;
 | 
			
		||||
                if (new LikePlotMeConverter("AthionPlots").run(new ClassicPlotMeConnector())) return;
 | 
			
		||||
            }
 | 
			
		||||
        }, 20);
 | 
			
		||||
        return Bukkit.getPluginManager().getPlugin("PlotMe") != null || Bukkit.getPluginManager().getPlugin("AthionPlots") != null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public ChunkGenerator getGenerator(final String world, final String name) {
 | 
			
		||||
        final Plugin gen_plugin = Bukkit.getPluginManager().getPlugin(name);
 | 
			
		||||
        if ((gen_plugin != null) && gen_plugin.isEnabled()) {
 | 
			
		||||
            return gen_plugin.getDefaultWorldGenerator(world, "");
 | 
			
		||||
        } else {
 | 
			
		||||
            return new HybridGen(world);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public HybridUtils initHybridUtils() {
 | 
			
		||||
        return new BukkitHybridUtils();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public SetupUtils initSetupUtils() {
 | 
			
		||||
        return new BukkitSetupUtils();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public UUIDWrapper initUUIDHandler() {
 | 
			
		||||
        final boolean checkVersion = checkVersion(1, 7, 6);
 | 
			
		||||
        if (Settings.OFFLINE_MODE) {
 | 
			
		||||
            if (Settings.UUID_LOWERCASE) {
 | 
			
		||||
                UUIDHandler.setUUIDWrapper(new LowerOfflineUUIDWrapper());
 | 
			
		||||
            } else {
 | 
			
		||||
                UUIDHandler.setUUIDWrapper(new OfflineUUIDWrapper());
 | 
			
		||||
            }
 | 
			
		||||
            Settings.OFFLINE_MODE = true;
 | 
			
		||||
        } else if (checkVersion) {
 | 
			
		||||
            UUIDHandler.setUUIDWrapper(new DefaultUUIDWrapper());
 | 
			
		||||
            Settings.OFFLINE_MODE = false;
 | 
			
		||||
        } else {
 | 
			
		||||
            if (Settings.UUID_LOWERCASE) {
 | 
			
		||||
                UUIDHandler.setUUIDWrapper(new LowerOfflineUUIDWrapper());
 | 
			
		||||
            } else {
 | 
			
		||||
                UUIDHandler.setUUIDWrapper(new OfflineUUIDWrapper());
 | 
			
		||||
            }
 | 
			
		||||
            Settings.OFFLINE_MODE = true;
 | 
			
		||||
        }
 | 
			
		||||
        if (!checkVersion) {
 | 
			
		||||
            log(C.PREFIX.s() + " &c[WARN] Titles are disabled - please update your version of Bukkit to support this feature.");
 | 
			
		||||
            Settings.TITLES = false;
 | 
			
		||||
            FlagManager.removeFlag(FlagManager.getFlag("titles"));
 | 
			
		||||
        } else {
 | 
			
		||||
            AbstractTitle.TITLE_CLASS = new DefaultTitle();
 | 
			
		||||
            if (UUIDHandler.getUUIDWrapper() instanceof DefaultUUIDWrapper) {
 | 
			
		||||
                Settings.TWIN_MODE_UUID = true;
 | 
			
		||||
            } else if (UUIDHandler.getUUIDWrapper() instanceof OfflineUUIDWrapper && !Bukkit.getOnlineMode()) {
 | 
			
		||||
                Settings.TWIN_MODE_UUID = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (Settings.OFFLINE_MODE) {
 | 
			
		||||
            log(C.PREFIX.s() + " &6PlotSquared is using Offline Mode UUIDs either because of user preference, or because you are using an old version of Bukkit");
 | 
			
		||||
        } else {
 | 
			
		||||
            log(C.PREFIX.s() + " &6PlotSquared is using online UUIDs");
 | 
			
		||||
        }
 | 
			
		||||
        return UUIDHandler.getUUIDWrapper();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public ChunkManager initChunkManager() {
 | 
			
		||||
        return new BukkitChunkManager();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public EventUtil initEventUtil() {
 | 
			
		||||
        return new BukkitEventUtil();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerTNTListener() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new TNTListener(), this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void unregister(PlotPlayer player) {
 | 
			
		||||
        BukkitUtil.removePlayer(player.getName());
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public APlotListener initPlotListener() {
 | 
			
		||||
        return new PlotListener();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerChunkProcessor() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new ChunkListener(), this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void registerWorldEvents() {
 | 
			
		||||
        getServer().getPluginManager().registerEvents(new WorldEvents(), this);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public PlayerManager initPlayerManager() {
 | 
			
		||||
        return new BukkitPlayerManager();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public InventoryUtil initInventoryUtil() {
 | 
			
		||||
        return new BukkitInventoryUtil();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getServerName() {
 | 
			
		||||
        return Bukkit.getServerName();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -7,7 +7,7 @@ import org.bukkit.generator.ChunkGenerator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.APlotListener;
 | 
			
		||||
import com.plotsquared.bukkit.listeners.APlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
@@ -15,7 +15,7 @@ import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.InventoryUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.PlayerManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.plotsquared.bukkit.util.SetupUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -43,26 +43,26 @@ import com.intellectualcrafters.plot.database.SQLite;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.AbstractFlag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagValue;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.AugmentedPopulator;
 | 
			
		||||
import com.plotsquared.bukkit.generator.AugmentedPopulator;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.ClassicPlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridGen;
 | 
			
		||||
import com.plotsquared.bukkit.generator.HybridGen;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridPlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.SquarePlotManager;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.SquarePlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.APlotListener;
 | 
			
		||||
import com.plotsquared.bukkit.listeners.APlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotAnalysis;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotBlock;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotCluster;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotFilter;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.plotsquared.bukkit.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.CommentManager;
 | 
			
		||||
import com.plotsquared.bukkit.object.comment.CommentManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ClusterManager;
 | 
			
		||||
@@ -76,11 +76,11 @@ import com.intellectualcrafters.plot.util.StringMan;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Logger.LogLevel;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.PlayerManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.plotsquared.bukkit.util.SetupUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.FileUUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.FileUUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -93,7 +93,7 @@ import com.sk89q.worldedit.bukkit.WorldEditPlugin;
 | 
			
		||||
public class PS {
 | 
			
		||||
 | 
			
		||||
    // protected static:
 | 
			
		||||
    protected static PS instance;
 | 
			
		||||
    public static PS instance;
 | 
			
		||||
    
 | 
			
		||||
    // private final:
 | 
			
		||||
    private final HashMap<String, PlotWorld> plotworlds = new HashMap<>();
 | 
			
		||||
@@ -125,7 +125,7 @@ public class PS {
 | 
			
		||||
     * Initialize PlotSquared with the desired Implementation class
 | 
			
		||||
     * @param imp_class
 | 
			
		||||
     */
 | 
			
		||||
    protected PS(final IPlotMain imp_class) {
 | 
			
		||||
    public PS(final IPlotMain imp_class) {
 | 
			
		||||
        instance = this;
 | 
			
		||||
        SetupUtils.generators = new HashMap<>();
 | 
			
		||||
        IMP = imp_class;
 | 
			
		||||
 
 | 
			
		||||
@@ -48,9 +48,9 @@ import com.intellectualcrafters.plot.util.ClusterManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SchematicHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.BukkitSetBlockManager;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.UUIDWrapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -185,7 +185,7 @@ import com.intellectualcrafters.plot.uuid.UUIDWrapper;
 | 
			
		||||
     *
 | 
			
		||||
     * @return BukkitSetBlockManager
 | 
			
		||||
     *
 | 
			
		||||
     * @see com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager
 | 
			
		||||
     * @see com.plotsquared.bukkit.util.bukkit.BukkitSetBlockManager
 | 
			
		||||
     */
 | 
			
		||||
    public BukkitSetBlockManager getBukkitBlockManager() {
 | 
			
		||||
        return BukkitSetBlockManager.setBlockManager;
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Add extends SubCommand {
 | 
			
		||||
    public Add() {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringComparison;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2015-02-20 for PlotSquared
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ import com.intellectualcrafters.plot.util.CmdConfirm;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Clear extends SubCommand {
 | 
			
		||||
    public Clear() {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,21 +27,21 @@ import java.util.UUID;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.AugmentedPopulator;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridGen;
 | 
			
		||||
import com.plotsquared.bukkit.generator.AugmentedPopulator;
 | 
			
		||||
import com.plotsquared.bukkit.generator.HybridGen;
 | 
			
		||||
import com.intellectualcrafters.plot.object.BlockLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotCluster;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotClusterId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.plotsquared.bukkit.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ClusterManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Cluster extends SubCommand {
 | 
			
		||||
    public Cluster() {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.CommentInbox;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.CommentManager;
 | 
			
		||||
import com.plotsquared.bukkit.object.comment.CommentManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.PlotComment;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringComparison;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2014-11-15 for PlotSquared
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class DebugClear extends SubCommand {
 | 
			
		||||
    public DebugClear() {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,9 +32,6 @@ import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.lang.StringUtils;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Chunk;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.Biome;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
@@ -42,7 +39,6 @@ import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.BukkitHybridUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.object.ChunkLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.OfflinePlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotAnalysis;
 | 
			
		||||
@@ -52,7 +48,7 @@ import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ExpireManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class DebugExec extends SubCommand {
 | 
			
		||||
    public DebugExec() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
package com.intellectualcrafters.plot.commands;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.BukkitMain;
 | 
			
		||||
import com.plotsquared.bukkit.BukkitMain;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,12 +26,12 @@ import org.bukkit.generator.ChunkGenerator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.ConfigurationNode;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridGen;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.plotsquared.bukkit.generator.HybridGen;
 | 
			
		||||
import com.plotsquared.bukkit.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.SetupObject;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.plotsquared.bukkit.util.SetupUtils;
 | 
			
		||||
 | 
			
		||||
public class DebugSetup extends SubCommand {
 | 
			
		||||
    public DebugSetup() {
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ import com.intellectualcrafters.plot.object.StringWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.PlayerManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.DefaultUUIDWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.LowerOfflineUUIDWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.uuid.OfflineUUIDWrapper;
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,6 @@ package com.intellectualcrafters.plot.commands;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
@@ -33,7 +32,7 @@ import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Delete extends SubCommand {
 | 
			
		||||
    public Delete() {
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,6 @@ package com.intellectualcrafters.plot.commands;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
@@ -32,12 +31,9 @@ import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Deny extends SubCommand {
 | 
			
		||||
    public Deny() {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,6 @@ import com.intellectualcrafters.plot.flag.AbstractFlag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagValue;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.APlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RunnableVal;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.CommentInbox;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.CommentManager;
 | 
			
		||||
import com.plotsquared.bukkit.object.comment.CommentManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.PlotComment;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringMan;
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.InfoInventory;
 | 
			
		||||
import com.plotsquared.bukkit.object.InfoInventory;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
@@ -41,7 +41,7 @@ import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringMan;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.meta.ItemMeta;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.object.BukkitPlayer;
 | 
			
		||||
import com.plotsquared.bukkit.object.BukkitPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
 | 
			
		||||
public class Inventory extends SubCommand {
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings({ "unused", "deprecation", "javadoc" })
 | 
			
		||||
public class Kick extends SubCommand {
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,6 @@ package com.intellectualcrafters.plot.commands;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.PlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotBlock;
 | 
			
		||||
@@ -32,7 +31,6 @@ import com.intellectualcrafters.plot.object.PlotItemStack;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
 | 
			
		||||
public class MusicSubcommand extends SubCommand {
 | 
			
		||||
    public MusicSubcommand() {
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings({ "javadoc" })
 | 
			
		||||
public class Purge extends SubCommand {
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.events.PlotRateEvent;
 | 
			
		||||
import com.plotsquared.bukkit.events.PlotRateEvent;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotInventory;
 | 
			
		||||
 
 | 
			
		||||
@@ -30,8 +30,8 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Remove extends SubCommand {
 | 
			
		||||
    public Remove() {
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,6 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.commands;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.net.URL;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
@@ -35,15 +34,11 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RunnableVal;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SchematicHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SchematicHandler.DataCollection;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SchematicHandler.Dimension;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SchematicHandler.Schematic;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public class SchematicCmd extends SubCommand {
 | 
			
		||||
    private int counter = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ import com.intellectualcrafters.plot.config.Configuration;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.AbstractFlag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.APlotListener;
 | 
			
		||||
import com.plotsquared.bukkit.listeners.APlotListener;
 | 
			
		||||
import com.intellectualcrafters.plot.object.BlockLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
@@ -47,7 +47,7 @@ import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetBlockQueue;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringComparison;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringMan;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class SetOwner extends SubCommand {
 | 
			
		||||
    public SetOwner() {
 | 
			
		||||
 
 | 
			
		||||
@@ -31,13 +31,13 @@ import org.bukkit.generator.ChunkGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.ConfigurationNode;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridGen;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.plotsquared.bukkit.generator.HybridGen;
 | 
			
		||||
import com.plotsquared.bukkit.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.SetupObject;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.plotsquared.bukkit.util.SetupUtils;
 | 
			
		||||
 | 
			
		||||
public class Setup extends SubCommand {
 | 
			
		||||
    public Setup() {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.object.SetupObject;
 | 
			
		||||
import com.intellectualcrafters.plot.util.BlockManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.plotsquared.bukkit.util.SetupUtils;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
 | 
			
		||||
public class Template extends SubCommand {
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,8 @@ import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EventUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Trust extends SubCommand {
 | 
			
		||||
    public Trust() {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,8 +29,8 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.uuid.SQLUUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Undeny extends SubCommand {
 | 
			
		||||
    public Undeny() {
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Untrust extends SubCommand {
 | 
			
		||||
    public Untrust() {
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class Visit extends SubCommand {
 | 
			
		||||
    public Visit() {
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ package com.intellectualcrafters.plot.commands;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.worldedit.WEManager;
 | 
			
		||||
import com.plotsquared.bukkit.listeners.worldedit.WEManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.BukkitPlayer;
 | 
			
		||||
import com.plotsquared.bukkit.object.BukkitPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Rating;
 | 
			
		||||
@@ -45,8 +45,8 @@ import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringComparison;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.chat.FancyMessage;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.chat.FancyMessage;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 
 | 
			
		||||
@@ -1,117 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.database.plotme;
 | 
			
		||||
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.configuration.file.FileConfiguration;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
 | 
			
		||||
public abstract class APlotMeConnector {
 | 
			
		||||
    public abstract Connection getPlotMeConnection(String plugin, FileConfiguration plotConfig, String dataFolder);
 | 
			
		||||
    
 | 
			
		||||
    public abstract HashMap<String, HashMap<PlotId, Plot>> getPlotMePlots(Connection connection) throws SQLException;
 | 
			
		||||
    
 | 
			
		||||
    public abstract boolean accepts(String version);
 | 
			
		||||
    
 | 
			
		||||
    public String getWorld(final String world) {
 | 
			
		||||
        for (final World newworld : Bukkit.getWorlds()) {
 | 
			
		||||
            if (newworld.getName().equalsIgnoreCase(world)) {
 | 
			
		||||
                return newworld.getName();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return world;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean isValidConnection(Connection connection) {
 | 
			
		||||
        return connection != null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void copyConfig(FileConfiguration plotConfig, String world, String actualWorldName) {
 | 
			
		||||
        final Integer pathwidth = plotConfig.getInt("worlds." + world + ".PathWidth"); //
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".road.width", pathwidth);
 | 
			
		||||
        final Integer plotsize = plotConfig.getInt("worlds." + world + ".PlotSize"); //
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".plot.size", plotsize);
 | 
			
		||||
        final String wallblock = plotConfig.getString("worlds." + world + ".WallBlockId"); //
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".wall.block", wallblock);
 | 
			
		||||
        final String floor = plotConfig.getString("worlds." + world + ".PlotFloorBlockId"); //
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".plot.floor", Arrays.asList(floor));
 | 
			
		||||
        final String filling = plotConfig.getString("worlds." + world + ".PlotFillingBlockId"); //
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".plot.filling", Arrays.asList(filling));
 | 
			
		||||
        final String road = plotConfig.getString("worlds." + world + ".RoadMainBlockId");
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".road.block", road);
 | 
			
		||||
        Integer height = plotConfig.getInt("worlds." + world + ".RoadHeight"); //
 | 
			
		||||
        if (height == null) {
 | 
			
		||||
            height = 64;
 | 
			
		||||
        }
 | 
			
		||||
        PS.get().config.set("worlds." + actualWorldName + ".road.height", height);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Location getPlotTopLocAbs(int path, int plot, final PlotId plotid) {
 | 
			
		||||
        final int px = plotid.x;
 | 
			
		||||
        final int pz = plotid.y;
 | 
			
		||||
        final int x = (px * (path + plot)) - ((int) Math.floor(path / 2)) - 1;
 | 
			
		||||
        final int z = (pz * (path + plot)) - ((int) Math.floor(path / 2)) - 1;
 | 
			
		||||
        return new Location(null, x, 256, z);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Location getPlotBottomLocAbs(int path, int plot, final PlotId plotid) {
 | 
			
		||||
        final int px = plotid.x;
 | 
			
		||||
        final int pz = plotid.y;
 | 
			
		||||
        final int x = (px * (path + plot)) - plot - ((int) Math.floor(path / 2)) - 1;
 | 
			
		||||
        final int z = (pz * (path + plot)) - plot - ((int) Math.floor(path / 2)) - 1;
 | 
			
		||||
        return new Location(null, x, 1, z);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setMerged(HashMap<String, HashMap<PlotId, boolean[]>> merges, String world, PlotId id, int direction) {
 | 
			
		||||
        HashMap<PlotId, boolean[]> plots = merges.get(world);
 | 
			
		||||
        PlotId id2;
 | 
			
		||||
        switch (direction) {
 | 
			
		||||
            case 0: {
 | 
			
		||||
                id2 = new PlotId(id.x, id.y);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case 1: {
 | 
			
		||||
                id2 = new PlotId(id.x, id.y);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case 2: {
 | 
			
		||||
                id2 = new PlotId(id.x, id.y);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            case 3: {
 | 
			
		||||
                id2 = new PlotId(id.x, id.y);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            default: {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        boolean[] merge1;
 | 
			
		||||
        boolean[] merge2;
 | 
			
		||||
        if (plots.containsKey(id)) {
 | 
			
		||||
            merge1 = plots.get(id);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            merge1 = new boolean[]{false, false, false, false};
 | 
			
		||||
        }
 | 
			
		||||
        if (plots.containsKey(id2)) {
 | 
			
		||||
            merge2 = plots.get(id2);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            merge2 = new boolean[]{false, false, false, false};
 | 
			
		||||
        }
 | 
			
		||||
        merge1[direction] = true;
 | 
			
		||||
        merge2[(direction + 2) % 4] = true;
 | 
			
		||||
        plots.put(id, merge1);
 | 
			
		||||
        plots.put(id2, merge1);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
@@ -1,202 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.database.plotme;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.sql.DriverManager;
 | 
			
		||||
import java.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.configuration.file.FileConfiguration;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.database.SQLite;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.StringWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class ClassicPlotMeConnector extends APlotMeConnector {
 | 
			
		||||
 | 
			
		||||
    private String plugin;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Connection getPlotMeConnection(String plugin, FileConfiguration plotConfig, String dataFolder) {
 | 
			
		||||
        this.plugin = plugin.toLowerCase();
 | 
			
		||||
        try {
 | 
			
		||||
            if (plotConfig.getBoolean("usemySQL")) {
 | 
			
		||||
                final String user = plotConfig.getString("mySQLuname");
 | 
			
		||||
                final String password = plotConfig.getString("mySQLpass");
 | 
			
		||||
                final String con = plotConfig.getString("mySQLconn");
 | 
			
		||||
                return DriverManager.getConnection(con, user, password);
 | 
			
		||||
//                return new MySQL(plotsquared, hostname, port, database, username, password)
 | 
			
		||||
            } else {
 | 
			
		||||
                return new SQLite(dataFolder + File.separator + "plots.db").openConnection();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (SQLException | ClassNotFoundException e) {}
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HashMap<String, HashMap<PlotId, Plot>> getPlotMePlots(Connection connection) throws SQLException {
 | 
			
		||||
        ResultSet r;
 | 
			
		||||
        PreparedStatement stmt;
 | 
			
		||||
        final HashMap<String, Integer> plotWidth = new HashMap<>();
 | 
			
		||||
        final HashMap<String, Integer> roadWidth = new HashMap<>();
 | 
			
		||||
        final HashMap<String, HashMap<PlotId, Plot>> plots = new HashMap<>();
 | 
			
		||||
        final HashMap<String, HashMap<PlotId, boolean[]>> merges = new HashMap<>();
 | 
			
		||||
        stmt = connection.prepareStatement("SELECT * FROM `" + plugin + "Plots`");
 | 
			
		||||
        r = stmt.executeQuery();
 | 
			
		||||
        boolean checkUUID = DBFunc.hasColumn(r, "ownerid");
 | 
			
		||||
        boolean merge = !plugin.equals("plotme") && Settings.CONVERT_PLOTME;
 | 
			
		||||
        while (r.next()) {
 | 
			
		||||
            final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
 | 
			
		||||
            final String name = r.getString("owner");
 | 
			
		||||
            final String world = LikePlotMeConverter.getWorld(r.getString("world"));
 | 
			
		||||
            if (!plots.containsKey(world)) {
 | 
			
		||||
                plots.put(world, new HashMap<PlotId, Plot>());
 | 
			
		||||
                if (merge) {
 | 
			
		||||
                    int plot = PS.get().config.getInt("worlds." + world + ".plot.size");
 | 
			
		||||
                    int path = PS.get().config.getInt("worlds." + world + ".road.width");
 | 
			
		||||
                    plotWidth.put(world, plot);
 | 
			
		||||
                    roadWidth.put(world, path);
 | 
			
		||||
                    merges.put(world, new HashMap<PlotId,boolean[]>());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (merge) {
 | 
			
		||||
                int tx = r.getInt("topX");
 | 
			
		||||
                int tz = r.getInt("topZ");
 | 
			
		||||
                int bx = r.getInt("bottomX") - 1;
 | 
			
		||||
                int bz = r.getInt("bottomZ") - 1;
 | 
			
		||||
                int path = roadWidth.get(world);
 | 
			
		||||
                int plot = plotWidth.get(world);
 | 
			
		||||
                Location top = getPlotTopLocAbs(path, plot, id);
 | 
			
		||||
                Location bot = getPlotBottomLocAbs(path, plot, id);
 | 
			
		||||
                if (tx > top.getX()) {
 | 
			
		||||
                    setMerged(merges, world, id, 1);
 | 
			
		||||
                }
 | 
			
		||||
                if (tz > top.getZ()) {
 | 
			
		||||
                    setMerged(merges, world, id, 2);
 | 
			
		||||
                }
 | 
			
		||||
                if (bx < bot.getX()) {
 | 
			
		||||
                    setMerged(merges, world, id, 3);
 | 
			
		||||
                }
 | 
			
		||||
                if (bz > bot.getZ()) {
 | 
			
		||||
                    setMerged(merges, world, id, 0);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            UUID owner = UUIDHandler.getUUID(name);
 | 
			
		||||
            if (owner == null) {
 | 
			
		||||
                if (name.equals("*")) {
 | 
			
		||||
                    owner = DBFunc.everyone;
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    if (checkUUID){
 | 
			
		||||
                        try {
 | 
			
		||||
                            byte[] bytes = r.getBytes("ownerid");
 | 
			
		||||
                            if (bytes != null) {
 | 
			
		||||
                                owner = UUID.nameUUIDFromBytes(bytes);
 | 
			
		||||
                                if (owner != null) {
 | 
			
		||||
                                    UUIDHandler.add(new StringWrapper(name), owner);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception e) {
 | 
			
		||||
                            e.printStackTrace();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (owner == null) {
 | 
			
		||||
                        MainUtil.sendConsoleMessage("&cCould not identify owner for plot: " + id + " -> '" + name + "'");
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                UUIDHandler.add(new StringWrapper(name), owner);
 | 
			
		||||
            }
 | 
			
		||||
            final Plot plot = new Plot(world, id, owner);
 | 
			
		||||
            plots.get(world).put(id, plot);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        for (Entry<String, HashMap<PlotId, boolean[]>> entry : merges.entrySet()) {
 | 
			
		||||
            String world = entry.getKey();
 | 
			
		||||
            for (Entry<PlotId, boolean[]> entry2 : entry.getValue().entrySet()) {
 | 
			
		||||
                HashMap<PlotId, Plot> newplots = plots.get(world);
 | 
			
		||||
                Plot plot = newplots.get(entry2.getKey());
 | 
			
		||||
                if (plot != null) {
 | 
			
		||||
                    plot.getSettings().setMerged(entry2.getValue());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        r.close();
 | 
			
		||||
        stmt.close();
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
        
 | 
			
		||||
            MainUtil.sendConsoleMessage(" - " + plugin + "Denied");
 | 
			
		||||
            stmt = connection.prepareStatement("SELECT * FROM `" + plugin + "Denied`");
 | 
			
		||||
            r = stmt.executeQuery();
 | 
			
		||||
            
 | 
			
		||||
            while (r.next()) {
 | 
			
		||||
                final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
 | 
			
		||||
                final String name = r.getString("player");
 | 
			
		||||
                final String world = LikePlotMeConverter.getWorld(r.getString("world"));
 | 
			
		||||
                UUID denied = UUIDHandler.getUUID(name);
 | 
			
		||||
                if (denied == null) {
 | 
			
		||||
                    if (name.equals("*")) {
 | 
			
		||||
                        denied = DBFunc.everyone;
 | 
			
		||||
                    } else {
 | 
			
		||||
                        MainUtil.sendConsoleMessage("&6Could not identify denied for plot: " + id);
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (plots.get(world).containsKey(id)) {
 | 
			
		||||
                    plots.get(world).get(id).getDenied().add(denied);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            stmt = connection.prepareStatement("SELECT * FROM `" + plugin + "Allowed`");
 | 
			
		||||
            r = stmt.executeQuery();
 | 
			
		||||
            
 | 
			
		||||
            while (r.next()) {
 | 
			
		||||
                final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
 | 
			
		||||
                final String name = r.getString("player");
 | 
			
		||||
                final String world = LikePlotMeConverter.getWorld(r.getString("world"));
 | 
			
		||||
                UUID helper = UUIDHandler.getUUID(name);
 | 
			
		||||
                if (helper == null) {
 | 
			
		||||
                    if (name.equals("*")) {
 | 
			
		||||
                        helper = DBFunc.everyone;
 | 
			
		||||
                    } else {
 | 
			
		||||
                        MainUtil.sendConsoleMessage("&6Could not identify helper for plot: " + id);
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (plots.get(world).containsKey(id)) {
 | 
			
		||||
                    plots.get(world).get(id).getTrusted().add(helper);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            r.close();
 | 
			
		||||
            stmt.close();
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e) {}
 | 
			
		||||
        return plots;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean accepts(String version) {
 | 
			
		||||
        if (version ==  null) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return PS.get().canUpdate(version, "0.17.0");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,323 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.database.plotme;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.nio.charset.Charset;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.nio.file.Files;
 | 
			
		||||
import java.nio.file.Path;
 | 
			
		||||
import java.nio.file.Paths;
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.WorldCreator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.configuration.file.FileConfiguration;
 | 
			
		||||
import com.intellectualcrafters.configuration.file.YamlConfiguration;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.generator.HybridGen;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2014-08-17 for PlotSquared
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class LikePlotMeConverter {
 | 
			
		||||
    private String plugin;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @param plugin Plugin Used to run the converter
 | 
			
		||||
     */
 | 
			
		||||
    public LikePlotMeConverter(String plugin) {
 | 
			
		||||
        this.plugin = plugin;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getWorld(final String world) {
 | 
			
		||||
        for (final World newworld : Bukkit.getWorlds()) {
 | 
			
		||||
            if (newworld.getName().equalsIgnoreCase(world)) {
 | 
			
		||||
                return newworld.getName();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return world;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private void sendMessage(final String message) {
 | 
			
		||||
        PS.log("&3PlotMe&8->&3PlotSquared&8: &7" + message);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public String getPlotMePath() {
 | 
			
		||||
        return new File(".").getAbsolutePath() + File.separator + "plugins" + File.separator + plugin + File.separator;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public String getAthionPlotsPath() {
 | 
			
		||||
        return new File(".").getAbsolutePath() + File.separator + "plugins" + File.separator + plugin + File.separator;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public FileConfiguration getPlotMeConfig(String dataFolder) {
 | 
			
		||||
        final File plotMeFile = new File(dataFolder + "config.yml");
 | 
			
		||||
        if (!plotMeFile.exists()) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        return YamlConfiguration.loadConfiguration(plotMeFile);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public Set<String> getPlotMeWorlds(FileConfiguration plotConfig) {
 | 
			
		||||
        return plotConfig.getConfigurationSection("worlds").getKeys(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void updateWorldYml(String plugin, String location) {
 | 
			
		||||
        try {
 | 
			
		||||
            Path path = Paths.get(location);
 | 
			
		||||
            File file = new File(location);
 | 
			
		||||
            if (!file.exists()) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            Charset charset = StandardCharsets.UTF_8;
 | 
			
		||||
            String content = new String(Files.readAllBytes(path), charset);
 | 
			
		||||
            content = content.replaceAll("PlotMe-DefaultGenerator", "PlotSquared");
 | 
			
		||||
            content = content.replaceAll(plugin, "PlotSquared");
 | 
			
		||||
            Files.write(path, content.getBytes(charset));
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean run(final APlotMeConnector connector) {
 | 
			
		||||
        try {
 | 
			
		||||
            String dataFolder = getPlotMePath();
 | 
			
		||||
            FileConfiguration plotConfig = getPlotMeConfig(dataFolder);
 | 
			
		||||
            if (plotConfig == null) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            String version = plotConfig.getString("Version");
 | 
			
		||||
            if (version == null) version = plotConfig.getString("version");
 | 
			
		||||
            if (!connector.accepts(version)) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            PS.log("&3Using connector: " + connector.getClass().getCanonicalName());
 | 
			
		||||
            
 | 
			
		||||
            Connection connection = connector.getPlotMeConnection(plugin, plotConfig, dataFolder);
 | 
			
		||||
 | 
			
		||||
            if (!connector.isValidConnection(connection)) {
 | 
			
		||||
                sendMessage("Cannot connect to PlotMe DB. Conversion process will not continue");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            sendMessage(plugin + " conversion has started. To disable this, please set 'plotme-convert.enabled' in the 'settings.yml'");
 | 
			
		||||
            sendMessage("Connecting to " + plugin + " DB");
 | 
			
		||||
 | 
			
		||||
            int plotCount = 0;
 | 
			
		||||
            final ArrayList<Plot> createdPlots = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
            sendMessage("Collecting plot data");
 | 
			
		||||
 | 
			
		||||
            String dbPrefix = plugin.toLowerCase();
 | 
			
		||||
            sendMessage(" - " + dbPrefix + "Plots");
 | 
			
		||||
            final Set<String> worlds = getPlotMeWorlds(plotConfig);
 | 
			
		||||
 | 
			
		||||
            if (Settings.CONVERT_PLOTME) {
 | 
			
		||||
                sendMessage("Updating bukkit.yml");
 | 
			
		||||
                updateWorldYml(plugin, "bukkit.yml");
 | 
			
		||||
                updateWorldYml(plugin, "plugins/Multiverse-Core/worlds.yml");
 | 
			
		||||
                for (final String world : plotConfig.getConfigurationSection("worlds").getKeys(false)) {
 | 
			
		||||
                    sendMessage("Copying config for: " + world);
 | 
			
		||||
                    try {
 | 
			
		||||
                        String actualWorldName = getWorld(world);
 | 
			
		||||
                        connector.copyConfig(plotConfig, world, actualWorldName);
 | 
			
		||||
                        PS.get().config.save(PS.get().configFile);
 | 
			
		||||
                    } catch (final Exception e) {
 | 
			
		||||
                        e.printStackTrace();
 | 
			
		||||
                        sendMessage("&c-- &lFailed to save configuration for world '" + world + "'\nThis will need to be done using the setup command, or manually");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            HashMap<String, HashMap<PlotId, Plot>> plots = connector.getPlotMePlots(connection);
 | 
			
		||||
            for (Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) {
 | 
			
		||||
                plotCount += entry.getValue().size();
 | 
			
		||||
            }
 | 
			
		||||
            if (!Settings.CONVERT_PLOTME) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            sendMessage(" - " + dbPrefix + "Allowed");
 | 
			
		||||
 | 
			
		||||
            sendMessage("Collected " + plotCount + " plots from PlotMe");
 | 
			
		||||
            final File PLOTME_DG_FILE = new File(dataFolder + File.separator + "PlotMe-DefaultGenerator" + File.separator + "config.yml");
 | 
			
		||||
            if (PLOTME_DG_FILE.exists()) {
 | 
			
		||||
                final YamlConfiguration PLOTME_DG_YML = YamlConfiguration.loadConfiguration(PLOTME_DG_FILE);
 | 
			
		||||
                try {
 | 
			
		||||
                    for (final String world : plots.keySet()) {
 | 
			
		||||
                        String actualWorldName = getWorld(world);
 | 
			
		||||
                        final String plotMeWorldName = world.toLowerCase();
 | 
			
		||||
                        Integer pathwidth = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".PathWidth"); //
 | 
			
		||||
                        if (pathwidth == null) {
 | 
			
		||||
                            pathwidth = 7;
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + world + ".road.width", pathwidth);
 | 
			
		||||
                        Integer plotsize = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".PlotSize"); //
 | 
			
		||||
                        if (plotsize == null) {
 | 
			
		||||
                            plotsize = 32;
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + world + ".plot.size", plotsize);
 | 
			
		||||
                        String wallblock = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".WallBlock"); //
 | 
			
		||||
                        if (wallblock == null) {
 | 
			
		||||
                            wallblock = "44";
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + world + ".wall.block", wallblock);
 | 
			
		||||
                        String floor = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".PlotFloorBlock"); //
 | 
			
		||||
                        if (floor == null) {
 | 
			
		||||
                            floor = "2";
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + world + ".plot.floor", Arrays.asList(floor));
 | 
			
		||||
                        String filling = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".FillBlock"); //
 | 
			
		||||
                        if (filling == null) {
 | 
			
		||||
                            filling = "3";
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + world + ".plot.filling", Arrays.asList(filling));
 | 
			
		||||
                        String road = PLOTME_DG_YML.getString("worlds." + plotMeWorldName + ".RoadMainBlock");
 | 
			
		||||
                        if (road == null) {
 | 
			
		||||
                            road = "5";
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + world + ".road.block", road);
 | 
			
		||||
                        Integer height = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".RoadHeight"); //
 | 
			
		||||
                        if ((height == null) || (height == 0)) {
 | 
			
		||||
                            height = PLOTME_DG_YML.getInt("worlds." + plotMeWorldName + ".GroundHeight"); //
 | 
			
		||||
                            if ((height == null) || (height == 0)) {
 | 
			
		||||
                                height = 64;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        PS.get().config.set("worlds." + actualWorldName + ".road.height", height);
 | 
			
		||||
                        PS.get().config.set("worlds." + actualWorldName + ".plot.height", height);
 | 
			
		||||
                        PS.get().config.set("worlds." + actualWorldName + ".wall.height", height);
 | 
			
		||||
                        PS.get().config.save(PS.get().configFile);
 | 
			
		||||
                    }
 | 
			
		||||
                } catch (final Exception e) {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            for (final String world : plots.keySet()) {
 | 
			
		||||
                int duplicate = 0;
 | 
			
		||||
                for (final Plot plot : plots.get(world).values()) {
 | 
			
		||||
                    if (!PS.get().getPlots(world).containsKey(plot.id)) {
 | 
			
		||||
                        createdPlots.add(plot);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        duplicate++;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (duplicate > 0) {
 | 
			
		||||
                    PS.log("&c[WARNING] Found " + duplicate + " duplicate plots already in DB for world: '" + world + "'. Have you run the converter already?");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            sendMessage("Creating plot DB");
 | 
			
		||||
            Thread.sleep(1000);
 | 
			
		||||
            DBFunc.createPlotsAndData(createdPlots, new Runnable() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    sendMessage("&aDatabase conversion is now complete!");
 | 
			
		||||
                    PS.log("&c - Stop the server");
 | 
			
		||||
                    PS.log("&c - Disable 'plotme-convert.enabled' and 'plotme-convert.cache-uuids' in the settings.yml");
 | 
			
		||||
                    PS.log("&c - Correct any generator settings that haven't copied to 'settings.yml' properly");
 | 
			
		||||
                    PS.log("&c - Start the server");
 | 
			
		||||
                    PS.get().setAllPlotsRaw(DBFunc.getPlots());
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            sendMessage("Saving configuration...");
 | 
			
		||||
            try {
 | 
			
		||||
                PS.get().config.save(PS.get().configFile);
 | 
			
		||||
            } catch (final IOException e) {
 | 
			
		||||
                sendMessage(" - &cFailed to save configuration.");
 | 
			
		||||
            }
 | 
			
		||||
            TaskManager.runTask(new Runnable() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    try {
 | 
			
		||||
                        boolean MV = false;
 | 
			
		||||
                        boolean MW = false;
 | 
			
		||||
                        if ((Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) && Bukkit.getPluginManager().getPlugin("Multiverse-Core").isEnabled()) {
 | 
			
		||||
                            MV = true;
 | 
			
		||||
                        } else if ((Bukkit.getPluginManager().getPlugin("MultiWorld") != null) && Bukkit.getPluginManager().getPlugin("MultiWorld").isEnabled()) {
 | 
			
		||||
                            MW = true;
 | 
			
		||||
                        }
 | 
			
		||||
                        for (final String worldname : worlds) {
 | 
			
		||||
                            final World world = Bukkit.getWorld(getWorld(worldname));
 | 
			
		||||
                            if (world == null) {
 | 
			
		||||
                                sendMessage("&cInvalid world in PlotMe configuration: " + worldname);
 | 
			
		||||
                            }
 | 
			
		||||
                            final String actualWorldName = world.getName();
 | 
			
		||||
                            sendMessage("Reloading generator for world: '" + actualWorldName + "'...");
 | 
			
		||||
                            PS.get().removePlotWorld(actualWorldName);
 | 
			
		||||
                            if (MV) {
 | 
			
		||||
                                // unload world with MV
 | 
			
		||||
                                Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv unload " + actualWorldName);
 | 
			
		||||
                                try {
 | 
			
		||||
                                    Thread.sleep(1000);
 | 
			
		||||
                                } catch (final InterruptedException ex) {
 | 
			
		||||
                                    Thread.currentThread().interrupt();
 | 
			
		||||
                                }
 | 
			
		||||
                                // load world with MV
 | 
			
		||||
                                Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv import " + actualWorldName + " normal -g PlotSquared");
 | 
			
		||||
                            } else if (MW) {
 | 
			
		||||
                                // unload world with MW
 | 
			
		||||
                                Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw unload " + actualWorldName);
 | 
			
		||||
                                try {
 | 
			
		||||
                                    Thread.sleep(1000);
 | 
			
		||||
                                } catch (final InterruptedException ex) {
 | 
			
		||||
                                    Thread.currentThread().interrupt();
 | 
			
		||||
                                }
 | 
			
		||||
                                // load world with MW
 | 
			
		||||
                                Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mw create " + actualWorldName + " plugin:PlotSquared");
 | 
			
		||||
                            } else {
 | 
			
		||||
                                // Load using Bukkit API
 | 
			
		||||
                                // - User must set generator manually
 | 
			
		||||
                                Bukkit.getServer().unloadWorld(world, true);
 | 
			
		||||
                                final World myworld = WorldCreator.name(actualWorldName).generator(new HybridGen(actualWorldName)).createWorld();
 | 
			
		||||
                                myworld.save();
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    } catch (final Exception e) {
 | 
			
		||||
                        e.printStackTrace();
 | 
			
		||||
                    }
 | 
			
		||||
                    sendMessage("&cPlease wait until database conversion is complete. You will be notified with instructions when this happens!");
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        } catch (final Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
            PS.log("&/end/");
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,198 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.database.plotme;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.sql.Connection;
 | 
			
		||||
import java.sql.DriverManager;
 | 
			
		||||
import java.sql.PreparedStatement;
 | 
			
		||||
import java.sql.ResultSet;
 | 
			
		||||
import java.sql.SQLException;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.configuration.file.FileConfiguration;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.database.SQLite;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.StringWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class PlotMeConnector_017 extends APlotMeConnector {
 | 
			
		||||
    private String plugin;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Connection getPlotMeConnection(String plugin, FileConfiguration plotConfig, String dataFolder) {
 | 
			
		||||
        this.plugin = plugin.toLowerCase();
 | 
			
		||||
        try {
 | 
			
		||||
            if (plotConfig.getBoolean("usemySQL")) {
 | 
			
		||||
                String user = plotConfig.getString("mySQLuname");
 | 
			
		||||
                String password = plotConfig.getString("mySQLpass");
 | 
			
		||||
                String con = plotConfig.getString("mySQLconn");
 | 
			
		||||
                return DriverManager.getConnection(con, user, password);
 | 
			
		||||
            } else {
 | 
			
		||||
                File file = new File(dataFolder + File.separator + "plotmecore.db");
 | 
			
		||||
                if (file.exists()) {
 | 
			
		||||
                    return new SQLite(dataFolder + File.separator + "plotmecore.db").openConnection();
 | 
			
		||||
                }
 | 
			
		||||
                return new SQLite(dataFolder + File.separator + "plots.db").openConnection();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (SQLException | ClassNotFoundException e) {}
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HashMap<String, HashMap<PlotId, Plot>> getPlotMePlots(Connection connection) throws SQLException {
 | 
			
		||||
        ResultSet r;
 | 
			
		||||
        PreparedStatement stmt;
 | 
			
		||||
        HashMap<String, Integer> plotWidth = new HashMap<>();
 | 
			
		||||
        HashMap<String, Integer> roadWidth = new HashMap<>();
 | 
			
		||||
        final HashMap<Integer, Plot> plots = new HashMap<>();
 | 
			
		||||
        HashMap<String, HashMap<PlotId, boolean[]>> merges = new HashMap<>();
 | 
			
		||||
        stmt = connection.prepareStatement("SELECT * FROM `" + plugin + "core_plots`");
 | 
			
		||||
        r = stmt.executeQuery();
 | 
			
		||||
        boolean checkUUID = DBFunc.hasColumn(r, "ownerID");
 | 
			
		||||
        boolean merge = !plugin.equals("plotme") && Settings.CONVERT_PLOTME;
 | 
			
		||||
        while (r.next()) {
 | 
			
		||||
            int key = r.getInt("plot_id");
 | 
			
		||||
            PlotId id = new PlotId(r.getInt("plotX"), r.getInt("plotZ"));
 | 
			
		||||
            String name = r.getString("owner");
 | 
			
		||||
            String world = LikePlotMeConverter.getWorld(r.getString("world"));
 | 
			
		||||
            if (!plots.containsKey(world)) {
 | 
			
		||||
                if (merge) {
 | 
			
		||||
                    int plot = PS.get().config.getInt("worlds." + world + ".plot.size");
 | 
			
		||||
                    int path = PS.get().config.getInt("worlds." + world + ".road.width");
 | 
			
		||||
                    plotWidth.put(world, plot);
 | 
			
		||||
                    roadWidth.put(world, path);
 | 
			
		||||
                    merges.put(world, new HashMap<PlotId,boolean[]>());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (merge) {
 | 
			
		||||
                int tx = r.getInt("topX");
 | 
			
		||||
                int tz = r.getInt("topZ");
 | 
			
		||||
                int bx = r.getInt("bottomX") - 1;
 | 
			
		||||
                int bz = r.getInt("bottomZ") - 1;
 | 
			
		||||
                int path = roadWidth.get(world);
 | 
			
		||||
                int plot = plotWidth.get(world);
 | 
			
		||||
                Location top = getPlotTopLocAbs(path, plot, id);
 | 
			
		||||
                Location bot = getPlotBottomLocAbs(path, plot, id);
 | 
			
		||||
                if (tx > top.getX()) {
 | 
			
		||||
                    setMerged(merges, world, id, 1);
 | 
			
		||||
                }
 | 
			
		||||
                if (tz > top.getZ()) {
 | 
			
		||||
                    setMerged(merges, world, id, 2);
 | 
			
		||||
                }
 | 
			
		||||
                if (bx < bot.getX()) {
 | 
			
		||||
                    setMerged(merges, world, id, 3);
 | 
			
		||||
                }
 | 
			
		||||
                if (bz > bot.getZ()) {
 | 
			
		||||
                    setMerged(merges, world, id, 0);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            UUID owner = UUIDHandler.getUUID(name);
 | 
			
		||||
            if (owner == null) {
 | 
			
		||||
                if (name.equals("*")) {
 | 
			
		||||
                    owner = DBFunc.everyone;
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    if (checkUUID){
 | 
			
		||||
                        try {
 | 
			
		||||
                            byte[] bytes = r.getBytes("ownerid");
 | 
			
		||||
                            if (bytes != null) {
 | 
			
		||||
                                owner = UUID.nameUUIDFromBytes(bytes);
 | 
			
		||||
                                if (owner != null) {
 | 
			
		||||
                                    UUIDHandler.add(new StringWrapper(name), owner);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception e) {
 | 
			
		||||
                            e.printStackTrace();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (owner == null) {
 | 
			
		||||
                        MainUtil.sendConsoleMessage("&cCould not identify owner for plot: " + id + " -> '" + name + "'");
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                UUIDHandler.add(new StringWrapper(name), owner);
 | 
			
		||||
            }
 | 
			
		||||
            Plot plot = new Plot(world, id, owner);
 | 
			
		||||
            plots.put(key, plot);
 | 
			
		||||
        }
 | 
			
		||||
        for (Entry<Integer, Plot> entry : plots.entrySet()) {
 | 
			
		||||
            Plot plot = entry.getValue();
 | 
			
		||||
            HashMap<PlotId, boolean[]> mergeMap = merges.get(plot.world);
 | 
			
		||||
            if (mergeMap != null) {
 | 
			
		||||
                if (mergeMap.containsKey(plot.id)) {
 | 
			
		||||
                    plot.getSettings().setMerged(mergeMap.get(plot.id));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        r.close();
 | 
			
		||||
        stmt.close();
 | 
			
		||||
        try {
 | 
			
		||||
            MainUtil.sendConsoleMessage(" - " + plugin + "core_denied");
 | 
			
		||||
            stmt = connection.prepareStatement("SELECT * FROM `" + plugin + "core_denied`");
 | 
			
		||||
            r = stmt.executeQuery();
 | 
			
		||||
            
 | 
			
		||||
            while (r.next()) {
 | 
			
		||||
                int key = r.getInt("plot_id");
 | 
			
		||||
                Plot plot = plots.get(key);
 | 
			
		||||
                if (plot == null) {
 | 
			
		||||
                    MainUtil.sendConsoleMessage("&6Denied (" + key + ") references deleted plot; ignoring entry.");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                UUID denied = UUID.fromString(r.getString("player"));
 | 
			
		||||
                plot.getDenied().add(denied);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            MainUtil.sendConsoleMessage(" - " + plugin + "core_allowed");
 | 
			
		||||
            stmt = connection.prepareStatement("SELECT * FROM `" + plugin + "core_allowed`");
 | 
			
		||||
            r = stmt.executeQuery();
 | 
			
		||||
            
 | 
			
		||||
            while (r.next()) {
 | 
			
		||||
                int key = r.getInt("plot_id");
 | 
			
		||||
                Plot plot = plots.get(key);
 | 
			
		||||
                if (plot == null) {
 | 
			
		||||
                    MainUtil.sendConsoleMessage("&6Allowed (" + key + ") references deleted plot; ignoring entry.");
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                UUID allowed = UUID.fromString(r.getString("player"));
 | 
			
		||||
                plot.getTrusted().add(allowed);
 | 
			
		||||
            }
 | 
			
		||||
            r.close();
 | 
			
		||||
            stmt.close();
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        HashMap<String, HashMap<PlotId, Plot>> processed = new HashMap<>();
 | 
			
		||||
        
 | 
			
		||||
        for (Entry<Integer, Plot> entry : plots.entrySet()) {
 | 
			
		||||
            Plot plot = entry.getValue();
 | 
			
		||||
            HashMap<PlotId, Plot> map = processed.get(plot.world);
 | 
			
		||||
            if (map == null) {
 | 
			
		||||
                map = new HashMap<>();
 | 
			
		||||
                processed.put(plot.world, map);
 | 
			
		||||
            }
 | 
			
		||||
            map.put(plot.id, plot);
 | 
			
		||||
        }
 | 
			
		||||
        return processed ;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean accepts(String version) {
 | 
			
		||||
        if (version == null) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        return !PS.get().canUpdate(version, "0.17");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,89 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotCluster;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a flag is removed from a plot
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class ClusterFlagRemoveEvent extends Event implements Cancellable {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final PlotCluster cluster;
 | 
			
		||||
    private final Flag flag;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlotFlagRemoveEvent: Called when a flag is removed from a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param flag Flag that was removed
 | 
			
		||||
     * @param plot Plot from which the flag was removed
 | 
			
		||||
     */
 | 
			
		||||
    public ClusterFlagRemoveEvent(final Flag flag, final PlotCluster cluster) {
 | 
			
		||||
        this.cluster = cluster;
 | 
			
		||||
        this.flag = flag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the cluster involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return PlotCluster
 | 
			
		||||
     */
 | 
			
		||||
    public PlotCluster getCluster() {
 | 
			
		||||
        return this.cluster;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the flag involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Flag
 | 
			
		||||
     */
 | 
			
		||||
    public Flag getFlag() {
 | 
			
		||||
        return this.flag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(final boolean b) {
 | 
			
		||||
        this.cancelled = b;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,86 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
import org.bukkit.event.player.PlayerEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerClaimPlotEvent extends PlayerEvent implements Cancellable {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Plot plot;
 | 
			
		||||
    private final boolean auto;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerClaimPlotEvent: Called when a plot is claimed
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player that claimed the plot
 | 
			
		||||
     * @param plot   Plot that was claimed
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerClaimPlotEvent(final Player player, final Plot plot, final boolean auto) {
 | 
			
		||||
        super(player);
 | 
			
		||||
        this.plot = plot;
 | 
			
		||||
        this.auto = auto;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plot involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Plot
 | 
			
		||||
     */
 | 
			
		||||
    public Plot getPlot() {
 | 
			
		||||
        return this.plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @return true if it was an automated claim, else false
 | 
			
		||||
     */
 | 
			
		||||
    public boolean wasAuto() {
 | 
			
		||||
        return this.auto;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(final boolean b) {
 | 
			
		||||
        this.cancelled = b;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,65 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
import org.bukkit.event.player.PlayerEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerEnterPlotEvent extends PlayerEvent {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Plot plot;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerEnterPlotEvent: Called when a player leaves a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player that entered the plot
 | 
			
		||||
     * @param plot   Plot that was entered
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerEnterPlotEvent(final Player player, final Plot plot) {
 | 
			
		||||
        super(player);
 | 
			
		||||
        this.plot = plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plot involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Plot
 | 
			
		||||
     */
 | 
			
		||||
    public Plot getPlot() {
 | 
			
		||||
        return this.plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,66 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
import org.bukkit.event.player.PlayerEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerLeavePlotEvent extends PlayerEvent {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Plot plot;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerLeavePlotEvent: Called when a player leaves a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param player Player that left the plot
 | 
			
		||||
     * @param plot   Plot that was left
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerLeavePlotEvent(final Player player, final Plot plot) {
 | 
			
		||||
        super(player);
 | 
			
		||||
        this.plot = plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plot involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Plot
 | 
			
		||||
     */
 | 
			
		||||
    public Plot getPlot() {
 | 
			
		||||
        return this.plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerPlotDeniedEvent extends PlotEvent {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Player initiator;
 | 
			
		||||
    private final boolean added;
 | 
			
		||||
    private final UUID player;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerPlotDeniedEvent: Called when the denied UUID list is modified for a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param initiator Player that initiated the event
 | 
			
		||||
     * @param plot      Plot in which the event occurred
 | 
			
		||||
     * @param player    Player that was denied/un-denied
 | 
			
		||||
     * @param added     true of add to deny list, false if removed
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerPlotDeniedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
 | 
			
		||||
        super(plot);
 | 
			
		||||
        this.initiator = initiator;
 | 
			
		||||
        this.added = added;
 | 
			
		||||
        this.player = player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * If a user was added
 | 
			
		||||
     *
 | 
			
		||||
     * @return boolean
 | 
			
		||||
     */
 | 
			
		||||
    public boolean wasAdded() {
 | 
			
		||||
        return this.added;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The player added/removed
 | 
			
		||||
     *
 | 
			
		||||
     * @return UUID
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getPlayer() {
 | 
			
		||||
        return this.player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The player initiating the action
 | 
			
		||||
     *
 | 
			
		||||
     * @return Player
 | 
			
		||||
     */
 | 
			
		||||
    public Player getInitiator() {
 | 
			
		||||
        return this.initiator;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerPlotHelperEvent extends PlotEvent {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Player initiator;
 | 
			
		||||
    private final boolean added;
 | 
			
		||||
    private final UUID player;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerPlotHelperEvent: Called when a plot helper is added/removed
 | 
			
		||||
     *
 | 
			
		||||
     * @param initiator Player that initiated the event
 | 
			
		||||
     * @param plot      Plot in which the event occurred
 | 
			
		||||
     * @param player    Player that was added/removed from the helper list
 | 
			
		||||
     * @param added     true of the player was added, false if the player was removed
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerPlotHelperEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
 | 
			
		||||
        super(plot);
 | 
			
		||||
        this.initiator = initiator;
 | 
			
		||||
        this.added = added;
 | 
			
		||||
        this.player = player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * If a player was added
 | 
			
		||||
     *
 | 
			
		||||
     * @return boolean
 | 
			
		||||
     */
 | 
			
		||||
    public boolean wasAdded() {
 | 
			
		||||
        return this.added;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The UUID added/removed
 | 
			
		||||
     *
 | 
			
		||||
     * @return UUID
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getPlayer() {
 | 
			
		||||
        return this.player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The player initiating the action
 | 
			
		||||
     *
 | 
			
		||||
     * @return Player
 | 
			
		||||
     */
 | 
			
		||||
    public Player getInitiator() {
 | 
			
		||||
        return this.initiator;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerPlotTrustedEvent extends PlotEvent {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Player initiator;
 | 
			
		||||
    private final boolean added;
 | 
			
		||||
    private final UUID player;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerPlotTrustedEvent: Called when a plot trusted user is added/removed
 | 
			
		||||
     *
 | 
			
		||||
     * @param initiator Player that initiated the event
 | 
			
		||||
     * @param plot      Plot in which the event occurred
 | 
			
		||||
     * @param player    Player that was added/removed from the trusted list
 | 
			
		||||
     * @param added     true of the player was added, false if the player was removed
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerPlotTrustedEvent(final Player initiator, final Plot plot, final UUID player, final boolean added) {
 | 
			
		||||
        super(plot);
 | 
			
		||||
        this.initiator = initiator;
 | 
			
		||||
        this.added = added;
 | 
			
		||||
        this.player = player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * If a player was added
 | 
			
		||||
     *
 | 
			
		||||
     * @return boolean
 | 
			
		||||
     */
 | 
			
		||||
    public boolean wasAdded() {
 | 
			
		||||
        return this.added;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The UUID added/removed
 | 
			
		||||
     *
 | 
			
		||||
     * @return UUID
 | 
			
		||||
     */
 | 
			
		||||
    public UUID getPlayer() {
 | 
			
		||||
        return this.player;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The player initiating the action
 | 
			
		||||
     *
 | 
			
		||||
     * @return Player
 | 
			
		||||
     */
 | 
			
		||||
    public Player getInitiator() {
 | 
			
		||||
        return this.initiator;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,92 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
import org.bukkit.event.player.PlayerEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a player teleports to a plot
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlayerTeleportToPlotEvent extends PlayerEvent implements Cancellable {
 | 
			
		||||
    private static final HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Location from;
 | 
			
		||||
    private final Plot plot;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlayerTeleportToPlotEvent: Called when a player teleports to a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param player That was teleported
 | 
			
		||||
     * @param from   Start location
 | 
			
		||||
     * @param plot   Plot to which the player was teleported
 | 
			
		||||
     */
 | 
			
		||||
    public PlayerTeleportToPlotEvent(final Player player, final Location from, final Plot plot) {
 | 
			
		||||
        super(player);
 | 
			
		||||
        this.from = from;
 | 
			
		||||
        this.plot = plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the from location
 | 
			
		||||
     *
 | 
			
		||||
     * @return Location
 | 
			
		||||
     */
 | 
			
		||||
    public Location getFrom() {
 | 
			
		||||
        return this.from;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plot involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Plot
 | 
			
		||||
     */
 | 
			
		||||
    public Plot getPlot() {
 | 
			
		||||
        return this.plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(final boolean cancelled) {
 | 
			
		||||
        this.cancelled = cancelled;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,88 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a plot is cleared
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotClearEvent extends Event implements Cancellable {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final PlotId id;
 | 
			
		||||
    private final String world;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlotDeleteEvent: Called when a plot is cleared
 | 
			
		||||
     *
 | 
			
		||||
     * @param world The world in which the plot was cleared
 | 
			
		||||
     * @param id    The plot that was cleared
 | 
			
		||||
     */
 | 
			
		||||
    public PlotClearEvent(final String world, final PlotId id) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.world = world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the PlotId
 | 
			
		||||
     *
 | 
			
		||||
     * @return PlotId
 | 
			
		||||
     */
 | 
			
		||||
    public PlotId getPlotId() {
 | 
			
		||||
        return this.id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the world name
 | 
			
		||||
     *
 | 
			
		||||
     * @return String
 | 
			
		||||
     */
 | 
			
		||||
    public String getWorld() {
 | 
			
		||||
        return this.world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(final boolean b) {
 | 
			
		||||
        this.cancelled = b;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,76 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a plot is deleted
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotDeleteEvent extends Event {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final PlotId id;
 | 
			
		||||
    private final String world;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlotDeleteEvent: Called when a plot is deleted
 | 
			
		||||
     *
 | 
			
		||||
     * @param world The world in which the plot was deleted
 | 
			
		||||
     * @param id    The ID of the plot that was deleted
 | 
			
		||||
     */
 | 
			
		||||
    public PlotDeleteEvent(final String world, final PlotId id) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.world = world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the PlotId
 | 
			
		||||
     *
 | 
			
		||||
     * @return PlotId
 | 
			
		||||
     */
 | 
			
		||||
    public PlotId getPlotId() {
 | 
			
		||||
        return this.id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the world name
 | 
			
		||||
     *
 | 
			
		||||
     * @return String
 | 
			
		||||
     */
 | 
			
		||||
    public String getWorld() {
 | 
			
		||||
        return this.world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
public abstract class PlotEvent extends Event {
 | 
			
		||||
 | 
			
		||||
    private final Plot plot;
 | 
			
		||||
 | 
			
		||||
    public PlotEvent(final Plot plot) {
 | 
			
		||||
        this.plot = plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final Plot getPlot() {
 | 
			
		||||
        return this.plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,79 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a Flag is added to a plot
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotFlagAddEvent extends PlotEvent implements Cancellable {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Flag flag;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlotFlagAddEvent: Called when a Flag is added to a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param flag Flag that was added
 | 
			
		||||
     * @param plot Plot to which the flag was added
 | 
			
		||||
     */
 | 
			
		||||
    public PlotFlagAddEvent(final Flag flag, final Plot plot) {
 | 
			
		||||
        super(plot);
 | 
			
		||||
        this.flag = flag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the flag involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Flag
 | 
			
		||||
     */
 | 
			
		||||
    public Flag getFlag() {
 | 
			
		||||
        return this.flag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public final boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public final void setCancelled(boolean cancelled) {
 | 
			
		||||
        this.cancelled = cancelled;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Called when a flag is removed from a plot
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotFlagRemoveEvent extends PlotEvent implements Cancellable {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final Flag flag;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlotFlagRemoveEvent: Called when a flag is removed from a plot
 | 
			
		||||
     *
 | 
			
		||||
     * @param flag Flag that was removed
 | 
			
		||||
     * @param plot Plot from which the flag was removed
 | 
			
		||||
     */
 | 
			
		||||
    public PlotFlagRemoveEvent(final Flag flag, final Plot plot) {
 | 
			
		||||
        super(plot);
 | 
			
		||||
        this.flag = flag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the flag involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return Flag
 | 
			
		||||
     */
 | 
			
		||||
    public Flag getFlag() {
 | 
			
		||||
        return this.flag;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public final boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public final void setCancelled(boolean cancelled) {
 | 
			
		||||
        this.cancelled = cancelled;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,94 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotMergeEvent extends Event implements Cancellable {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final ArrayList<PlotId> plots;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
    private Plot plot;
 | 
			
		||||
    private World world;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * PlotMergeEvent: Called when plots are merged
 | 
			
		||||
     *
 | 
			
		||||
     * @param world World in which the event occurred
 | 
			
		||||
     * @param plot  Plot that was merged
 | 
			
		||||
     * @param plots A list of plots involved in the event
 | 
			
		||||
     */
 | 
			
		||||
    public PlotMergeEvent(final World world, final Plot plot, final ArrayList<PlotId> plots) {
 | 
			
		||||
        this.plots = plots;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plots being added;
 | 
			
		||||
     *
 | 
			
		||||
     * @return Plot
 | 
			
		||||
     */
 | 
			
		||||
    public ArrayList<PlotId> getPlots() {
 | 
			
		||||
        return this.plots;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the main plot
 | 
			
		||||
     *
 | 
			
		||||
     * @return Plot
 | 
			
		||||
     */
 | 
			
		||||
    public Plot getPlot() {
 | 
			
		||||
        return this.plot;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public World getWorld() {
 | 
			
		||||
        return this.world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(final boolean b) {
 | 
			
		||||
        this.cancelled = b;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,46 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2015-07-13 for PlotSquaredGit
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class PlotRateEvent extends PlotEvent {
 | 
			
		||||
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final PlotPlayer rater;
 | 
			
		||||
    private int rating;
 | 
			
		||||
 | 
			
		||||
    public PlotRateEvent(final PlotPlayer rater, final int rating, final Plot plot) {
 | 
			
		||||
        super(plot);
 | 
			
		||||
        this.rater = rater;
 | 
			
		||||
        this.rating = rating;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public PlotPlayer getRater() {
 | 
			
		||||
        return this.rater;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRating(int rating) {
 | 
			
		||||
        this.rating = rating;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getRating() {
 | 
			
		||||
        return this.rating;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.events;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.HandlerList;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotUnlinkEvent extends Event implements Cancellable {
 | 
			
		||||
    private static HandlerList handlers = new HandlerList();
 | 
			
		||||
    private final ArrayList<PlotId> plots;
 | 
			
		||||
    private final World world;
 | 
			
		||||
    private boolean cancelled;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Called when a mega-plot is unlinked.
 | 
			
		||||
     *
 | 
			
		||||
     * @param world World in which the event occurred
 | 
			
		||||
     * @param plots Plots that are involved in the event
 | 
			
		||||
     */
 | 
			
		||||
    public PlotUnlinkEvent(final World world, final ArrayList<PlotId> plots) {
 | 
			
		||||
        this.plots = plots;
 | 
			
		||||
        this.world = world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static HandlerList getHandlerList() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the plots involved
 | 
			
		||||
     *
 | 
			
		||||
     * @return PlotId
 | 
			
		||||
     */
 | 
			
		||||
    public ArrayList<PlotId> getPlots() {
 | 
			
		||||
        return this.plots;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public World getWorld() {
 | 
			
		||||
        return this.world;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public HandlerList getHandlers() {
 | 
			
		||||
        return handlers;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCancelled() {
 | 
			
		||||
        return this.cancelled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCancelled(final boolean b) {
 | 
			
		||||
        this.cancelled = b;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,287 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.generator;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Chunk;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.Biome;
 | 
			
		||||
import org.bukkit.generator.BlockPopulator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.object.BlockWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotCluster;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitSetBlockManager;
 | 
			
		||||
 | 
			
		||||
public class AugmentedPopulator extends BlockPopulator {
 | 
			
		||||
    public static short[][] x_loc;
 | 
			
		||||
    public static short[][] y_loc;
 | 
			
		||||
    public static short[][] z_loc;
 | 
			
		||||
    public final PlotWorld plotworld;
 | 
			
		||||
    public final PlotManager manager;
 | 
			
		||||
    public final PlotGenerator generator;
 | 
			
		||||
    public final PlotCluster cluster;
 | 
			
		||||
    public final Random r = new Random();
 | 
			
		||||
    public final boolean p;
 | 
			
		||||
    public final boolean b;
 | 
			
		||||
    public final boolean o;
 | 
			
		||||
    private final int bx;
 | 
			
		||||
    private final int bz;
 | 
			
		||||
    private final int tx;
 | 
			
		||||
    private final int tz;
 | 
			
		||||
 | 
			
		||||
    public AugmentedPopulator(final String world, final PlotGenerator generator, final PlotCluster cluster, final boolean p, final boolean b) {
 | 
			
		||||
        initCache();
 | 
			
		||||
        this.cluster = cluster;
 | 
			
		||||
        this.generator = generator;
 | 
			
		||||
        this.plotworld = PS.get().getPlotWorld(world);
 | 
			
		||||
        this.manager = generator.getPlotManager();
 | 
			
		||||
        this.p = p;
 | 
			
		||||
        this.b = b;
 | 
			
		||||
        this.o = (this.plotworld.TERRAIN == 1) || (this.plotworld.TERRAIN == 2);
 | 
			
		||||
        final World bukkitWorld = Bukkit.getWorld(world);
 | 
			
		||||
        if (cluster != null) {
 | 
			
		||||
            final Location bl = this.manager.getPlotBottomLocAbs(this.plotworld, cluster.getP1());
 | 
			
		||||
            final Location tl = this.manager.getPlotTopLocAbs(this.plotworld, cluster.getP2()).add(1, 0, 1);
 | 
			
		||||
            this.bx = bl.getX();
 | 
			
		||||
            this.bz = bl.getZ();
 | 
			
		||||
            this.tx = tl.getX();
 | 
			
		||||
            this.tz = tl.getZ();
 | 
			
		||||
        } else {
 | 
			
		||||
            this.bx = Integer.MIN_VALUE;
 | 
			
		||||
            this.bz = Integer.MIN_VALUE;
 | 
			
		||||
            this.tx = Integer.MAX_VALUE;
 | 
			
		||||
            this.tz = Integer.MAX_VALUE;
 | 
			
		||||
        }
 | 
			
		||||
        // Add the populator
 | 
			
		||||
        if (this.o) {
 | 
			
		||||
            bukkitWorld.getPopulators().add(0, this);
 | 
			
		||||
        } else {
 | 
			
		||||
            bukkitWorld.getPopulators().add(this);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void removePopulator(final String worldname, final PlotCluster cluster) {
 | 
			
		||||
        final World world = Bukkit.getWorld(worldname);
 | 
			
		||||
        for (final Iterator<BlockPopulator> iterator = world.getPopulators().iterator(); iterator.hasNext();) {
 | 
			
		||||
            final BlockPopulator populator = iterator.next();
 | 
			
		||||
            if (populator instanceof AugmentedPopulator) {
 | 
			
		||||
                if (((AugmentedPopulator) populator).cluster.equals(cluster)) {
 | 
			
		||||
                    iterator.remove();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static void initCache() {
 | 
			
		||||
        if (x_loc == null) {
 | 
			
		||||
            x_loc = new short[16][4096];
 | 
			
		||||
            y_loc = new short[16][4096];
 | 
			
		||||
            z_loc = new short[16][4096];
 | 
			
		||||
            for (int i = 0; i < 16; i++) {
 | 
			
		||||
                int i4 = i << 4;
 | 
			
		||||
                for (int j = 0; j < 4096; j++) {
 | 
			
		||||
                    final int y = (i4) + (j >> 8);
 | 
			
		||||
                    final int a = (j - ((y & 0xF) << 8));
 | 
			
		||||
                    final int z1 = (a >> 4);
 | 
			
		||||
                    final int x1 = a - (z1 << 4);
 | 
			
		||||
                    x_loc[i][j] = (short) x1;
 | 
			
		||||
                    y_loc[i][j] = (short) y;
 | 
			
		||||
                    z_loc[i][j] = (short) z1;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public BlockWrapper get(final int x, final int z, final int i, final int j, final short[][] r, final boolean c) {
 | 
			
		||||
        final int y = (i << 4) + (j >> 8);
 | 
			
		||||
        final int a = (j - ((y & 0xF) << 8));
 | 
			
		||||
        final int z1 = (a >> 4);
 | 
			
		||||
        final int x1 = a - (z1 << 4);
 | 
			
		||||
        if (r[i] == null) {
 | 
			
		||||
            return (c && (((z + z1) < this.bz) || ((z + z1) > this.tz) || ((x + x1) < this.bx) || ((x + x1) > this.tx))) ? null : new BlockWrapper(x1, y, z1, (short) 0, (byte) 0);
 | 
			
		||||
        } else {
 | 
			
		||||
            return (c && (((z + z1) < this.bz) || ((z + z1) > this.tz) || ((x + x1) < this.bx) || ((x + x1) > this.tx))) ? null : new BlockWrapper(x1, y, z1, r[i][j], (byte) 0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void populate(final World world, final Random rand, final Chunk chunk) {
 | 
			
		||||
        final int cx = chunk.getX();
 | 
			
		||||
        final int cz = chunk.getZ();
 | 
			
		||||
        final int bx = cx << 4;
 | 
			
		||||
        final int bz = cz << 4;
 | 
			
		||||
        final int tx = bx + 15;
 | 
			
		||||
        final int tz = bz + 15;
 | 
			
		||||
        final boolean inX1 = ((bx >= this.bx) && (bx <= this.tx));
 | 
			
		||||
        final boolean inX2 = ((tx >= this.bx) && (tx <= this.tx));
 | 
			
		||||
        final boolean inZ1 = ((bz >= this.bz) && (bz <= this.tz));
 | 
			
		||||
        final boolean inZ2 = ((tz >= this.bz) && (tz <= this.tz));
 | 
			
		||||
        final boolean inX = inX1 || inX2;
 | 
			
		||||
        final boolean inZ = inZ1 || inZ2;
 | 
			
		||||
        if (!inX || !inZ) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.plotworld.TERRAIN == 3) {
 | 
			
		||||
            int X = chunk.getX() << 4;
 | 
			
		||||
            int Z = chunk.getZ() << 4;
 | 
			
		||||
            if (ChunkManager.FORCE_PASTE) {
 | 
			
		||||
                for (short x = 0; x < 16; x++) {
 | 
			
		||||
                    for (short z = 0; z < 16; z++) {
 | 
			
		||||
                        final PlotLoc loc = new PlotLoc((short) (X + x), (short) (Z + z));
 | 
			
		||||
                        final HashMap<Short, Short> blocks = ChunkManager.GENERATE_BLOCKS.get(loc);
 | 
			
		||||
                        HashMap<Short, Byte> datas = ChunkManager.GENERATE_DATA.get(loc);
 | 
			
		||||
                        for (final Entry<Short, Short> entry : blocks.entrySet()) {
 | 
			
		||||
                            int y = entry.getKey();
 | 
			
		||||
                            byte data;
 | 
			
		||||
                            if (datas != null) {
 | 
			
		||||
                                data = datas.get(y);
 | 
			
		||||
                            }
 | 
			
		||||
                            else {
 | 
			
		||||
                                data = 0;
 | 
			
		||||
                            }
 | 
			
		||||
                            BukkitSetBlockManager.setBlockManager.set(world, x, y, z, blocks.get(y), data);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (ChunkManager.CURRENT_PLOT_CLEAR != null) {
 | 
			
		||||
                PlotLoc loc;
 | 
			
		||||
                for (Entry<PlotLoc, HashMap<Short, Byte>> entry : ChunkManager.GENERATE_DATA.entrySet()) {
 | 
			
		||||
                    HashMap<Short, Byte> datas = ChunkManager.GENERATE_DATA.get(entry.getKey());
 | 
			
		||||
                    for (Entry<Short, Byte> entry2 : entry.getValue().entrySet()) {
 | 
			
		||||
                        Short y = entry2.getKey();
 | 
			
		||||
                        byte data;
 | 
			
		||||
                        if (datas != null) {
 | 
			
		||||
                            data = datas.get(y);
 | 
			
		||||
                        }
 | 
			
		||||
                        else {
 | 
			
		||||
                            data = 0;
 | 
			
		||||
                        }
 | 
			
		||||
                        loc = entry.getKey();
 | 
			
		||||
                        int xx = loc.x - X;
 | 
			
		||||
                        int zz = loc.z - Z;
 | 
			
		||||
                        if (xx >= 0 && xx < 16) {
 | 
			
		||||
                            if (zz >= 0 && zz < 16) {
 | 
			
		||||
                                BukkitSetBlockManager.setBlockManager.set(world, xx, y, zz, entry2.getValue(), data);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final boolean check;
 | 
			
		||||
        check = !inX1 || !inX2 || !inZ1 || !inZ2;
 | 
			
		||||
        if (this.plotworld.TERRAIN > 1) {
 | 
			
		||||
            final PlotId plot1 = this.manager.getPlotIdAbs(this.plotworld, bx, 0, bz);
 | 
			
		||||
            final PlotId plot2 = this.manager.getPlotIdAbs(this.plotworld, tx, 0, tz);
 | 
			
		||||
            if ((plot1 != null) && (plot2 != null) && plot1.equals(plot2)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (this.o) {
 | 
			
		||||
            populateBlocks(world, rand, cx, cz, bx, bz, check);
 | 
			
		||||
        } else {
 | 
			
		||||
            TaskManager.runTaskLater(new Runnable() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    populateBiome(world, bx, bz);
 | 
			
		||||
                }
 | 
			
		||||
            }, 20 + rand.nextInt(10));
 | 
			
		||||
            TaskManager.runTaskLater(new Runnable() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    chunk.load(true);
 | 
			
		||||
                    populateBlocks(world, rand, cx, cz, bx, bz, check);
 | 
			
		||||
                }
 | 
			
		||||
            }, 40 + rand.nextInt(40));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void populateBiome(final World world, final int x, final int z) {
 | 
			
		||||
        final Biome biome = Biome.valueOf(this.plotworld.PLOT_BIOME);
 | 
			
		||||
        if (this.b) {
 | 
			
		||||
            for (int i = 0; i < 16; i++) {
 | 
			
		||||
                for (int j = 0; j < 16; j++) {
 | 
			
		||||
                    world.setBiome(x + i, z + j, biome);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private void populateBlocks(final World world, final Random rand, final int X, final int Z, final int x, final int z, final boolean check) {
 | 
			
		||||
        final short[][] result = this.generator.generateExtBlockSections(world, rand, X, Z, null);
 | 
			
		||||
        for (int i = 0; i < result.length; i++) {
 | 
			
		||||
            if (result[i] != null) {
 | 
			
		||||
                for (int j = 0; j < 4096; j++) {
 | 
			
		||||
                    int x1 = x_loc[i][j];
 | 
			
		||||
                    int y = y_loc[i][j];
 | 
			
		||||
                    int z1 = z_loc[i][j];
 | 
			
		||||
                    short id = result[i][j];
 | 
			
		||||
                    final int xx = x + x1;
 | 
			
		||||
                    final int zz = z + z1;
 | 
			
		||||
                    if (check && (((zz) < this.bz) || ((zz) > this.tz) || ((xx) < this.bx) || ((xx) > this.tx))) {
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (this.p) {
 | 
			
		||||
                        if (ChunkManager.CURRENT_PLOT_CLEAR != null) {
 | 
			
		||||
                            if (BukkitChunkManager.isIn(ChunkManager.CURRENT_PLOT_CLEAR, xx, zz)) {
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                        } else if (this.manager.getPlotIdAbs(this.plotworld, xx, 0, zz) != null) {
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    BukkitSetBlockManager.setBlockManager.set(world, xx, y, zz, id, (byte) 0);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                short y_min = y_loc[i][0];
 | 
			
		||||
                if (y_min < 128) {
 | 
			
		||||
                    for (int x1 = x; x1 < x + 16; x1++) {
 | 
			
		||||
                        for (int z1 = z; z1 < z + 16; z1++) {
 | 
			
		||||
                            if (check && (((z1) < this.bz) || ((z1) > this.tz) || ((x1) < this.bx) || ((x1) > this.tx))) {
 | 
			
		||||
                                continue;
 | 
			
		||||
                            }
 | 
			
		||||
                            if (this.p) {
 | 
			
		||||
                                if (ChunkManager.CURRENT_PLOT_CLEAR != null) {
 | 
			
		||||
                                    if (BukkitChunkManager.isIn(ChunkManager.CURRENT_PLOT_CLEAR, x1, z1)) {
 | 
			
		||||
                                        continue;
 | 
			
		||||
                                    }
 | 
			
		||||
                                } else if (this.manager.getPlotIdAbs(this.plotworld, x1, 0, z1) != null) {
 | 
			
		||||
                                    continue;
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                            for (int y = y_min; y < y_min + 16; y++) {
 | 
			
		||||
                                BukkitSetBlockManager.setBlockManager.set(world, x1, y, z1, 0, (byte) 0);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        for (final BlockPopulator populator : this.generator.getPopulators(world.getName())) {
 | 
			
		||||
            Chunk chunk = world.getChunkAt(X, Z);
 | 
			
		||||
            populator.populate(world, this.r, chunk);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isIn(final RegionWrapper plot, final int x, final int z) {
 | 
			
		||||
        return ((x >= plot.minX) && (x <= plot.maxX) && (z >= plot.minZ) && (z <= plot.maxZ));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -6,6 +6,7 @@ import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import com.plotsquared.bukkit.generator.AugmentedPopulator;
 | 
			
		||||
import org.apache.commons.lang.mutable.MutableInt;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Chunk;
 | 
			
		||||
@@ -19,7 +20,7 @@ import org.bukkit.material.Directional;
 | 
			
		||||
import org.bukkit.material.MaterialData;
 | 
			
		||||
import org.bukkit.plugin.Plugin;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.BukkitMain;
 | 
			
		||||
import com.plotsquared.bukkit.BukkitMain;
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
@@ -35,7 +36,7 @@ import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MathMan;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public class BukkitHybridUtils extends HybridUtils {
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,294 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.generator;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.Biome;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPopulator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PseudoRandom;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The default generator is very messy, as we have decided to try externalize all calculations from within the loop. -
 | 
			
		||||
 * You will see a lot of slower implementations have a single for loop. - This is perfectly fine to do, it will just
 | 
			
		||||
 * mean world generation may take somewhat longer
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class HybridGen extends PlotGenerator {
 | 
			
		||||
    
 | 
			
		||||
    public HybridGen(String world) {
 | 
			
		||||
        super(world);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Set to static to re-use the same managet for all Default World Generators
 | 
			
		||||
     */
 | 
			
		||||
    private static PlotManager manager = null;
 | 
			
		||||
    /**
 | 
			
		||||
     * plotworld object
 | 
			
		||||
     */
 | 
			
		||||
    public HybridPlotWorld plotworld = null;
 | 
			
		||||
    /**
 | 
			
		||||
     * Some generator specific variables (implementation dependent)
 | 
			
		||||
     */
 | 
			
		||||
    int plotsize;
 | 
			
		||||
    int pathsize;
 | 
			
		||||
    short wall;
 | 
			
		||||
    short wallfilling;
 | 
			
		||||
    short roadblock;
 | 
			
		||||
    int size;
 | 
			
		||||
    Biome biome;
 | 
			
		||||
    int roadheight;
 | 
			
		||||
    int wallheight;
 | 
			
		||||
    int plotheight;
 | 
			
		||||
    short[] plotfloors;
 | 
			
		||||
    short[] filling;
 | 
			
		||||
    short pathWidthLower;
 | 
			
		||||
    short pathWidthUpper;
 | 
			
		||||
    boolean doState = false;
 | 
			
		||||
    int maxY = 0;
 | 
			
		||||
    short[][] cached;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Initialize variables, and create plotworld object used in calculations
 | 
			
		||||
     */
 | 
			
		||||
    public void init(PlotWorld plotworld) {
 | 
			
		||||
        if (plotworld != null) {
 | 
			
		||||
            this.plotworld = (HybridPlotWorld) plotworld;
 | 
			
		||||
        }
 | 
			
		||||
        this.plotsize = this.plotworld.PLOT_WIDTH;
 | 
			
		||||
        this.pathsize = this.plotworld.ROAD_WIDTH;
 | 
			
		||||
        this.roadblock = this.plotworld.ROAD_BLOCK.id;
 | 
			
		||||
        this.wallfilling = this.plotworld.WALL_FILLING.id;
 | 
			
		||||
        this.size = this.pathsize + this.plotsize;
 | 
			
		||||
        this.wall = this.plotworld.WALL_BLOCK.id;
 | 
			
		||||
        this.plotfloors = new short[this.plotworld.TOP_BLOCK.length];
 | 
			
		||||
        for (int i = 0; i < this.plotworld.TOP_BLOCK.length; i++) {
 | 
			
		||||
            this.plotfloors[i] = this.plotworld.TOP_BLOCK[i].id;
 | 
			
		||||
        }
 | 
			
		||||
        this.filling = new short[this.plotworld.MAIN_BLOCK.length];
 | 
			
		||||
        for (int i = 0; i < this.plotworld.MAIN_BLOCK.length; i++) {
 | 
			
		||||
            this.filling[i] = this.plotworld.MAIN_BLOCK[i].id;
 | 
			
		||||
        }
 | 
			
		||||
        if ((this.filling.length > 1) || (this.plotfloors.length > 1)) {
 | 
			
		||||
            this.doState = true;
 | 
			
		||||
        }
 | 
			
		||||
        this.wallheight = this.plotworld.WALL_HEIGHT;
 | 
			
		||||
        this.roadheight = this.plotworld.ROAD_HEIGHT;
 | 
			
		||||
        this.plotheight = this.plotworld.PLOT_HEIGHT;
 | 
			
		||||
        if (this.pathsize == 0) {
 | 
			
		||||
            this.pathWidthLower = (short) -1;
 | 
			
		||||
            this.pathWidthUpper = (short) (this.plotsize + 1);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            if ((this.pathsize % 2) == 0) {
 | 
			
		||||
                this.pathWidthLower = (short) (Math.floor(this.pathsize / 2) - 1);
 | 
			
		||||
            } else {
 | 
			
		||||
                this.pathWidthLower = (short) (Math.floor(this.pathsize / 2));
 | 
			
		||||
            }
 | 
			
		||||
            this.pathWidthUpper = (short) (this.pathWidthLower + this.plotsize + 1);
 | 
			
		||||
        }
 | 
			
		||||
        this.biome = Biome.valueOf(this.plotworld.PLOT_BIOME);
 | 
			
		||||
        try {
 | 
			
		||||
            this.maxY = Bukkit.getWorld(plotworld.worldname).getMaxHeight();
 | 
			
		||||
        } catch (final NullPointerException e) {}
 | 
			
		||||
        if (this.maxY == 0) {
 | 
			
		||||
            this.maxY = 256;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // create cached chunk (for optimized chunk generation)
 | 
			
		||||
        if (!this.plotworld.PLOT_SCHEMATIC) {
 | 
			
		||||
            this.cached = new short[(plotheight + 16) / 16][];
 | 
			
		||||
            for (int i = 0; i < cached.length; i++) {
 | 
			
		||||
                cached[i] = new short[4096];
 | 
			
		||||
            }
 | 
			
		||||
            PseudoRandom random = new PseudoRandom();
 | 
			
		||||
            for (int x = 0; x < 16; x++) {
 | 
			
		||||
                for (int z = 0; z < 16; z++) {
 | 
			
		||||
                    cached[CACHE_I[plotheight][x][z]][CACHE_J[plotheight][x][z]] = plotfloors[random.random(plotfloors.length)];
 | 
			
		||||
                    if (this.plotworld.PLOT_BEDROCK) {
 | 
			
		||||
                        cached[CACHE_I[0][x][z]][CACHE_J[0][x][z]] = 7;
 | 
			
		||||
                    }
 | 
			
		||||
                    for (int y = 1; y < plotheight; y++) {
 | 
			
		||||
                        cached[CACHE_I[y][x][z]][CACHE_J[y][x][z]] = filling[random.random(filling.length)];
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return the plot manager for this type of generator, or create one For square plots you may as well use the
 | 
			
		||||
     * default plot manager which comes with PlotSquared
 | 
			
		||||
     */
 | 
			
		||||
    public PlotManager getPlotManager() {
 | 
			
		||||
        if (HybridGen.manager == null) {
 | 
			
		||||
            HybridGen.manager = new HybridPlotManager();
 | 
			
		||||
        }
 | 
			
		||||
        return HybridGen.manager;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a new plotworld class For square plots you can use the DefaultPlotWorld class which comes with PlotSquared
 | 
			
		||||
     */
 | 
			
		||||
    public PlotWorld getNewPlotWorld(final String world) {
 | 
			
		||||
        if (this.plotworld == null) {
 | 
			
		||||
            this.plotworld = new HybridPlotWorld(world); 
 | 
			
		||||
        }
 | 
			
		||||
        return this.plotworld;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Return the block populator
 | 
			
		||||
     */
 | 
			
		||||
    public List<PlotPopulator> getPopulators(final String world) {
 | 
			
		||||
        // You can have as many populators as you would like, e.g. tree
 | 
			
		||||
        // populator, ore populator
 | 
			
		||||
        return Arrays.asList((PlotPopulator) new HybridPop(this.plotworld));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * This part is a fucking mess. - Refer to a proper tutorial if you would like to learn how to make a world
 | 
			
		||||
     * generator
 | 
			
		||||
     */
 | 
			
		||||
    public void generateChunk(final World world, RegionWrapper region, final PseudoRandom random, final int cx, final int cz, final BiomeGrid biomes) {
 | 
			
		||||
        int sx = (short) ((this.X - this.plotworld.ROAD_OFFSET_X) % this.size);
 | 
			
		||||
        int sz = (short) ((this.Z - this.plotworld.ROAD_OFFSET_Z) % this.size);
 | 
			
		||||
        if (sx < 0) {
 | 
			
		||||
            sx += this.size;
 | 
			
		||||
        }
 | 
			
		||||
        if (sz < 0) {
 | 
			
		||||
            sz += this.size;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if (biomes != null) {
 | 
			
		||||
            for (short x = 0; x < 16; x++) {
 | 
			
		||||
                for (short z = 0; z < 16; z++) {
 | 
			
		||||
                    biomes.setBiome(x, z, this.biome);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (cached != null) {
 | 
			
		||||
            if (sx > pathWidthLower && sz > pathWidthLower && sx + 15 < pathWidthUpper&& sz + 15 < pathWidthUpper) {
 | 
			
		||||
                setResult(cached);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if (this.plotworld.PLOT_BEDROCK) {
 | 
			
		||||
            for (short x = 0; x < 16; x++) {
 | 
			
		||||
                for (short z = 0; z < 16; z++) {
 | 
			
		||||
                    setBlock(x, 0, z, (short) 7);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (region != null) {
 | 
			
		||||
            for (short x = 0; x < 16; x++) {
 | 
			
		||||
                final int absX = ((sx + x) % this.size);
 | 
			
		||||
                for (short z = 0; z < 16; z++) {
 | 
			
		||||
                    if (contains(region, x, z)) {
 | 
			
		||||
                        for (short y = 1; y < this.plotheight; y++) {
 | 
			
		||||
                            setBlock(x, y, z, this.filling);
 | 
			
		||||
                        }
 | 
			
		||||
                        setBlock(x, this.plotheight, z, this.plotfloors);
 | 
			
		||||
                        final int absZ = ((sz + z) % this.size);
 | 
			
		||||
                        final PlotLoc loc = new PlotLoc(absX, absZ);
 | 
			
		||||
                        final HashMap<Short, Short> blocks = plotworld.G_SCH.get(loc);
 | 
			
		||||
                        if (blocks != null) {
 | 
			
		||||
                            for (final Entry<Short, Short> entry : blocks.entrySet()) {
 | 
			
		||||
                                setBlock(x, this.plotheight + entry.getKey(), z, entry.getValue());
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        for (short x = 0; x < 16; x++) {
 | 
			
		||||
            final int absX = ((sx + x) % this.size);
 | 
			
		||||
            final boolean gx = absX > this.pathWidthLower;
 | 
			
		||||
            final boolean lx = absX < this.pathWidthUpper;
 | 
			
		||||
            for (short z = 0; z < 16; z++) {
 | 
			
		||||
                final int absZ = ((sz + z) % this.size);
 | 
			
		||||
                final boolean gz = absZ > this.pathWidthLower;
 | 
			
		||||
                final boolean lz = absZ < this.pathWidthUpper;
 | 
			
		||||
                // inside plot
 | 
			
		||||
                if (gx && gz && lx && lz) {
 | 
			
		||||
                    for (short y = 1; y < this.plotheight; y++) {
 | 
			
		||||
                        setBlock(x, y, z, this.filling);
 | 
			
		||||
                    }
 | 
			
		||||
                    setBlock(x, this.plotheight, z, this.plotfloors);
 | 
			
		||||
                    if (this.plotworld.PLOT_SCHEMATIC) {
 | 
			
		||||
                        final PlotLoc loc = new PlotLoc(absX, absZ);
 | 
			
		||||
                        final HashMap<Short, Short> blocks = this.plotworld.G_SCH.get(loc);
 | 
			
		||||
                        if (blocks != null) {
 | 
			
		||||
                            for (final Entry<Short, Short> entry : blocks.entrySet()) {
 | 
			
		||||
                                setBlock(x, this.plotheight + entry.getKey(), z, entry.getValue());
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                } else if (pathsize != 0) {
 | 
			
		||||
                    // wall
 | 
			
		||||
                    if (((absX >= this.pathWidthLower) && (absX <= this.pathWidthUpper) && (absZ >= this.pathWidthLower) && (absZ <= this.pathWidthUpper))) {
 | 
			
		||||
                        for (short y = 1; y <= this.wallheight; y++) {
 | 
			
		||||
                            setBlock(x, y, z, this.wallfilling);
 | 
			
		||||
                        }
 | 
			
		||||
                        if (!this.plotworld.ROAD_SCHEMATIC_ENABLED) {
 | 
			
		||||
                            setBlock(x, this.wallheight + 1, z, this.wall);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    // road
 | 
			
		||||
                    else {
 | 
			
		||||
                        for (short y = 1; y <= this.roadheight; y++) {
 | 
			
		||||
                            setBlock(x, y, z, this.roadblock);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (this.plotworld.ROAD_SCHEMATIC_ENABLED) {
 | 
			
		||||
                        final PlotLoc loc = new PlotLoc(absX, absZ);
 | 
			
		||||
                        final HashMap<Short, Short> blocks = this.plotworld.G_SCH.get(loc);
 | 
			
		||||
                        if (blocks != null) {
 | 
			
		||||
                            for (final Entry<Short, Short> entry : blocks.entrySet()) {
 | 
			
		||||
                                setBlock(x, this.roadheight + entry.getKey(), z, entry.getValue());
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -23,14 +23,12 @@ package com.intellectualcrafters.plot.generator;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.nio.file.Files;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.commands.Template;
 | 
			
		||||
import com.intellectualcrafters.plot.object.ChunkLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.FileBytes;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
@@ -42,8 +40,7 @@ import com.intellectualcrafters.plot.object.RunnableVal;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetBlockQueue;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public class HybridPlotManager extends ClassicPlotManager {
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ import org.bukkit.block.Biome;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotLoc;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPopulator;
 | 
			
		||||
import com.plotsquared.bukkit.object.PlotPopulator;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PseudoRandom;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
 | 
			
		||||
public abstract class APlotListener {
 | 
			
		||||
    
 | 
			
		||||
    public static APlotListener manager;
 | 
			
		||||
    
 | 
			
		||||
    public abstract boolean plotEntry(final PlotPlayer player, final Plot plot);
 | 
			
		||||
    
 | 
			
		||||
    public abstract boolean plotExit(final PlotPlayer player, final Plot plot);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.player.AsyncPlayerChatEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotWorld;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2015-07-13 for PlotSquaredGit
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class ChatListener implements Listener {
 | 
			
		||||
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGHEST)
 | 
			
		||||
    public void onChat(final AsyncPlayerChatEvent event) {
 | 
			
		||||
        final Player player = event.getPlayer();
 | 
			
		||||
        final String world = player.getWorld().getName();
 | 
			
		||||
        if (!PS.get().isPlotWorld(world)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final PlotWorld plotworld = PS.get().getPlotWorld(world);
 | 
			
		||||
        final PlotPlayer plr = BukkitUtil.getPlayer(player);
 | 
			
		||||
        if (!plotworld.PLOT_CHAT && (plr.getMeta("chat") == null || !(Boolean) plr.getMeta("chat"))) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final Location loc = BukkitUtil.getLocation(player);
 | 
			
		||||
        final Plot plot = MainUtil.getPlot(loc);
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final String message = event.getMessage();
 | 
			
		||||
        String format = C.PLOT_CHAT_FORMAT.s();
 | 
			
		||||
        final String sender = event.getPlayer().getDisplayName();
 | 
			
		||||
        final PlotId id = plot.id;
 | 
			
		||||
        final Set<Player> recipients = event.getRecipients();
 | 
			
		||||
        recipients.clear();
 | 
			
		||||
        for (final Player p : Bukkit.getOnlinePlayers()) {
 | 
			
		||||
            if (p.hasPermission("plots.admin.command.chat") || plot.equals(MainUtil.getPlot(BukkitUtil.getLocation(p)))) {
 | 
			
		||||
                recipients.add(p);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        format = format.replaceAll("%plot_id%", id.x + ";" + id.y).replaceAll("%sender%", sender).replaceAll("%msg%", message.replaceAll("([%]{1})", "%%"));
 | 
			
		||||
        format = ChatColor.translateAlternateColorCodes('&', format);
 | 
			
		||||
        event.setFormat(format);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1,160 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Chunk;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.BlockState;
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.Item;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.block.BlockPhysicsEvent;
 | 
			
		||||
import org.bukkit.event.entity.CreatureSpawnEvent;
 | 
			
		||||
import org.bukkit.event.entity.ItemSpawnEvent;
 | 
			
		||||
import org.bukkit.event.world.ChunkLoadEvent;
 | 
			
		||||
import org.bukkit.event.world.ChunkUnloadEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
 | 
			
		||||
public class ChunkListener implements Listener {
 | 
			
		||||
 | 
			
		||||
    private Chunk lastChunk = null;
 | 
			
		||||
    private long last = 0;
 | 
			
		||||
    private int count = 0;
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onChunkUnload(ChunkUnloadEvent event) {
 | 
			
		||||
        if (processChunk(event.getChunk(), true)) {
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onChunkLoad(ChunkLoadEvent event) {
 | 
			
		||||
        processChunk(event.getChunk(), false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler(priority=EventPriority.LOWEST)
 | 
			
		||||
    public void onItemSpawn(ItemSpawnEvent event) {
 | 
			
		||||
        Item entity = event.getEntity();
 | 
			
		||||
        Chunk chunk = entity.getLocation().getChunk();
 | 
			
		||||
        if (chunk == lastChunk) {
 | 
			
		||||
            event.getEntity().remove();
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!PS.get().isPlotWorld(chunk.getWorld().getName())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Entity[] entities = chunk.getEntities();
 | 
			
		||||
        if (entities.length > Settings.CHUNK_PROCESSOR_MAX_ENTITIES) {
 | 
			
		||||
            event.getEntity().remove();
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
            lastChunk = chunk;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            lastChunk = null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler(priority=EventPriority.HIGHEST, ignoreCancelled=true)
 | 
			
		||||
    public void onBlockPhysics(BlockPhysicsEvent event) {
 | 
			
		||||
        if (Settings.CHUNK_PROCESSOR_DISABLE_PHYSICS) {
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler(priority=EventPriority.LOWEST)
 | 
			
		||||
    public void onEntitySpawn(CreatureSpawnEvent event) {
 | 
			
		||||
        LivingEntity entity = event.getEntity();
 | 
			
		||||
        Chunk chunk = entity.getLocation().getChunk();
 | 
			
		||||
        if (chunk == lastChunk) {
 | 
			
		||||
            event.getEntity().remove();
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!PS.get().isPlotWorld(chunk.getWorld().getName())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Entity[] entities = chunk.getEntities();
 | 
			
		||||
        if (entities.length > Settings.CHUNK_PROCESSOR_MAX_ENTITIES) {
 | 
			
		||||
            event.getEntity().remove();
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
            lastChunk = chunk;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            lastChunk = null;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void cleanChunk(final Chunk chunk) {
 | 
			
		||||
        TaskManager.index.increment();
 | 
			
		||||
        final Integer currentIndex = TaskManager.index.toInteger();
 | 
			
		||||
        final Integer task = TaskManager.runTaskRepeat(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                if (!chunk.isLoaded()) {
 | 
			
		||||
                    Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
 | 
			
		||||
                    TaskManager.tasks.remove(currentIndex);
 | 
			
		||||
                    PS.log("[PlotSquared] &aSuccessfully processed and unloaded chunk!");
 | 
			
		||||
                    chunk.unload(true, true);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                BlockState[] tiles = chunk.getTileEntities();
 | 
			
		||||
                if (tiles.length == 0) {
 | 
			
		||||
                    Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
 | 
			
		||||
                    TaskManager.tasks.remove(currentIndex);
 | 
			
		||||
                    PS.log("[PlotSquared] &aSuccessfully processed and unloaded chunk!");
 | 
			
		||||
                    chunk.unload(true, true);
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                long start = System.currentTimeMillis();
 | 
			
		||||
                int i = 0;
 | 
			
		||||
                while (System.currentTimeMillis() - start < 250) {
 | 
			
		||||
                    if (i >= tiles.length) {
 | 
			
		||||
                        Bukkit.getScheduler().cancelTask(TaskManager.tasks.get(currentIndex));
 | 
			
		||||
                        TaskManager.tasks.remove(currentIndex);
 | 
			
		||||
                        PS.log("[PlotSquared] &aSuccessfully processed and unloaded chunk!");
 | 
			
		||||
                        chunk.unload(true, true);
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    tiles[i].getBlock().setType(Material.AIR, false);
 | 
			
		||||
                    i++;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }, 5);
 | 
			
		||||
        TaskManager.tasks.put(currentIndex, task);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean processChunk(Chunk chunk, boolean unload) {
 | 
			
		||||
        if (!PS.get().isPlotWorld(chunk.getWorld().getName())) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        Entity[] entities = chunk.getEntities();
 | 
			
		||||
        BlockState[] tiles = chunk.getTileEntities();
 | 
			
		||||
        if (entities.length > Settings.CHUNK_PROCESSOR_MAX_ENTITIES) {
 | 
			
		||||
            for (Entity ent : entities) {
 | 
			
		||||
                if (!(ent instanceof Player)) {
 | 
			
		||||
                    ent.remove();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            PS.log("[PlotSquared] &a detected unsafe chunk and processed: " + (chunk.getX() << 4) + "," + (chunk.getX() << 4));
 | 
			
		||||
        }
 | 
			
		||||
        if (tiles.length > Settings.CHUNK_PROCESSOR_MAX_BLOCKSTATES) {
 | 
			
		||||
            if (unload) {
 | 
			
		||||
                PS.log("[PlotSquared] &c detected unsafe chunk: " + (chunk.getX() << 4) + "," + (chunk.getX() << 4));
 | 
			
		||||
                cleanChunk(chunk);
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            for (BlockState tile : tiles) {
 | 
			
		||||
                tile.getBlock().setType(Material.AIR, false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,125 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.util.Vector;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitPlayerFunctions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class ForceFieldListener implements Listener {
 | 
			
		||||
    private Set<Player> getNearbyPlayers(final Player player, final Plot plot) {
 | 
			
		||||
        final Set<Player> players = new HashSet<>();
 | 
			
		||||
        Player oPlayer;
 | 
			
		||||
        for (final Entity entity : player.getNearbyEntities(5d, 5d, 5d)) {
 | 
			
		||||
            if (!(entity instanceof Player) || ((oPlayer = (Player) entity) == null) || !BukkitPlayerFunctions.isInPlot(oPlayer) || !BukkitPlayerFunctions.getCurrentPlot(oPlayer).equals(plot)) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            final UUID uuid = UUIDHandler.getUUID(BukkitUtil.getPlayer(oPlayer));
 | 
			
		||||
            if (!plot.isAdded(uuid)) {
 | 
			
		||||
                players.add(oPlayer);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return players;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Player hasNearbyPermitted(final Player player, final Plot plot) {
 | 
			
		||||
        Player oPlayer;
 | 
			
		||||
        for (final Entity entity : player.getNearbyEntities(5d, 5d, 5d)) {
 | 
			
		||||
            if (!(entity instanceof Player) || ((oPlayer = (Player) entity) == null) || !BukkitPlayerFunctions.isInPlot(oPlayer) || !BukkitPlayerFunctions.getCurrentPlot(oPlayer).equals(plot)) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            final UUID uuid = UUIDHandler.getUUID(BukkitUtil.getPlayer(oPlayer));
 | 
			
		||||
            if (plot.isAdded(uuid)) {
 | 
			
		||||
                return oPlayer;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Vector calculateVelocity(final Player p, final Player e) {
 | 
			
		||||
        final org.bukkit.Location playerLocation = p.getLocation();
 | 
			
		||||
        final org.bukkit.Location oPlayerLocation = e.getLocation();
 | 
			
		||||
        final double playerX = playerLocation.getX(), playerY = playerLocation.getY(), playerZ = playerLocation.getZ(), oPlayerX = oPlayerLocation.getX(), oPlayerY = oPlayerLocation.getY(), oPlayerZ = oPlayerLocation.getZ();
 | 
			
		||||
        double x = 0d, y = 0d, z = 0d;
 | 
			
		||||
        if (playerX < oPlayerX) {
 | 
			
		||||
            x = 1.0d;
 | 
			
		||||
        } else if (playerX > oPlayerX) {
 | 
			
		||||
            x = -1.0d;
 | 
			
		||||
        }
 | 
			
		||||
        if (playerY < oPlayerY) {
 | 
			
		||||
            y = 0.5d;
 | 
			
		||||
        } else if (playerY > oPlayerY) {
 | 
			
		||||
            y = -0.5d;
 | 
			
		||||
        }
 | 
			
		||||
        if (playerZ < oPlayerZ) {
 | 
			
		||||
            z = 1.0d;
 | 
			
		||||
        } else if (playerZ > oPlayerZ) {
 | 
			
		||||
            z = -1.0d;
 | 
			
		||||
        }
 | 
			
		||||
        return new Vector(x, y, z);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onPlotEntry(final PlayerEnterPlotEvent event) {
 | 
			
		||||
        final Player player = event.getPlayer();
 | 
			
		||||
        final PlotPlayer pp = BukkitUtil.getPlayer(player);
 | 
			
		||||
        final Location loc = pp.getLocation();
 | 
			
		||||
        final Plot plot = event.getPlot();
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if ((FlagManager.getPlotFlag(plot, "forcefield") != null) && FlagManager.getPlotFlag(plot, "forcefield").getValue().equals("true")) {
 | 
			
		||||
            if (!FlagManager.isBooleanFlag(plot, "forcefield", false)) {
 | 
			
		||||
                final UUID uuid = pp.getUUID();
 | 
			
		||||
                if (plot.isAdded(uuid)) {
 | 
			
		||||
                    final Set<Player> players = getNearbyPlayers(player, plot);
 | 
			
		||||
                    for (final Player oPlayer : players) {
 | 
			
		||||
                        oPlayer.setVelocity(calculateVelocity(player, oPlayer));
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    final Player oPlayer = hasNearbyPermitted(player, plot);
 | 
			
		||||
                    if (oPlayer == null) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    player.setVelocity(calculateVelocity(oPlayer, player));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,44 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.Event;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.inventory.InventoryClickEvent;
 | 
			
		||||
import org.bukkit.event.inventory.InventoryInteractEvent;
 | 
			
		||||
import org.bukkit.inventory.Inventory;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.InfoInventory;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2014-11-18 for PlotSquared
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class InventoryListener implements Listener {
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onInventoryAction(final InventoryInteractEvent event) {
 | 
			
		||||
        if (event.getInventory().getHolder() instanceof InfoInventory) {
 | 
			
		||||
            event.setResult(Event.Result.DENY);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onInventoryClick(final InventoryClickEvent event) {
 | 
			
		||||
        final Inventory inventory = event.getInventory();
 | 
			
		||||
        final Player player = (Player) event.getWhoClicked();
 | 
			
		||||
        if (inventory.getHolder() instanceof InfoInventory) {
 | 
			
		||||
            switch (event.getSlot()) {
 | 
			
		||||
                case 3:
 | 
			
		||||
                case 4:
 | 
			
		||||
                case 5:
 | 
			
		||||
                case 6:
 | 
			
		||||
                    MainUtil.sendMessage(BukkitUtil.getPlayer(player), "This is not implemented yet");
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
public enum PlayerBlockEventType {
 | 
			
		||||
    // Non interactive
 | 
			
		||||
    EAT,
 | 
			
		||||
    READ,
 | 
			
		||||
    
 | 
			
		||||
    // Right click with monster egg
 | 
			
		||||
    SPAWN_MOB,
 | 
			
		||||
    
 | 
			
		||||
    // Dragon egg
 | 
			
		||||
    TELEPORT_OBJECT,
 | 
			
		||||
    
 | 
			
		||||
    // armor stands
 | 
			
		||||
    PLACE_MISC,
 | 
			
		||||
    // blocks
 | 
			
		||||
    PLACE_BLOCK,
 | 
			
		||||
    // paintings / item frames
 | 
			
		||||
    PLACE_HANGING,
 | 
			
		||||
    // vehicles
 | 
			
		||||
    PLACE_VEHICLE,
 | 
			
		||||
 | 
			
		||||
    // armor stands
 | 
			
		||||
    BREAK_MISC,
 | 
			
		||||
    // blocks
 | 
			
		||||
    BREAK_BLOCK,
 | 
			
		||||
    // paintings / item frames
 | 
			
		||||
    BREAK_HANGING,
 | 
			
		||||
    BREAK_VEHICLE,
 | 
			
		||||
    
 | 
			
		||||
    // armor stands
 | 
			
		||||
    INTERACT_MISC,
 | 
			
		||||
    // blocks
 | 
			
		||||
    INTERACT_BLOCK,
 | 
			
		||||
    // vehicle
 | 
			
		||||
    INTERACT_VEHICLE,
 | 
			
		||||
    // item frame / painting
 | 
			
		||||
    INTERACT_HANGING,
 | 
			
		||||
    
 | 
			
		||||
    // Pressure plate, tripwire etc
 | 
			
		||||
    TRIGGER_PHYSICAL,
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,159 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.block.BlockState;
 | 
			
		||||
import org.bukkit.entity.ArmorStand;
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.HumanEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.inventory.InventoryAction;
 | 
			
		||||
import org.bukkit.event.inventory.InventoryClickEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.PlayerInventory;
 | 
			
		||||
import org.bukkit.inventory.meta.ItemMeta;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public class PlayerEvents_1_8 extends PlotListener implements Listener {
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
			
		||||
    public void onInventoryClick(InventoryClickEvent event) {
 | 
			
		||||
        if (!event.isLeftClick() || event.getAction() != InventoryAction.PLACE_ALL || event.isShiftClick()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        HumanEntity entity = event.getWhoClicked();
 | 
			
		||||
        if (!(entity instanceof Player) || !PS.get().isPlotWorld(entity.getWorld().getName())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Player player = (Player) entity;
 | 
			
		||||
        PlayerInventory inv = player.getInventory();
 | 
			
		||||
        int slot = inv.getHeldItemSlot();
 | 
			
		||||
        if (slot != event.getSlot() || slot > 8 || !event.getEventName().equals("InventoryCreativeEvent")) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        ItemStack current = inv.getItemInHand();
 | 
			
		||||
        ItemStack newItem = event.getCursor();
 | 
			
		||||
        ItemMeta newMeta = newItem.getItemMeta();
 | 
			
		||||
        ItemMeta oldMeta = newItem.getItemMeta();
 | 
			
		||||
        String newLore = "";
 | 
			
		||||
        if (newMeta != null) {
 | 
			
		||||
            List<String> lore = newMeta.getLore();
 | 
			
		||||
            if (lore != null) {
 | 
			
		||||
                newLore = lore.toString();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        String oldLore = "";
 | 
			
		||||
        if (oldMeta != null) {
 | 
			
		||||
            List<String> lore = oldMeta.getLore();
 | 
			
		||||
            if (lore != null) {
 | 
			
		||||
                oldLore = lore.toString();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (!newLore.equals("[(+NBT)]") || (current.equals(newItem) && newLore.equals(oldLore))) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        HashSet<Byte> blocks = null;
 | 
			
		||||
        Block block = player.getTargetBlock(blocks, 7);
 | 
			
		||||
        BlockState state = block.getState();
 | 
			
		||||
        if (state == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (state.getType() != newItem.getType()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final Location l = BukkitUtil.getLocation(state.getLocation());
 | 
			
		||||
        Plot plot = MainUtil.getPlot(l);
 | 
			
		||||
        PlotPlayer pp = BukkitUtil.getPlayer(player);
 | 
			
		||||
        boolean cancelled = false;
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            if (!MainUtil.isPlotArea(l)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (!Permissions.hasPermission(pp, "plots.admin.interact.road")) {
 | 
			
		||||
                MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.road");
 | 
			
		||||
                cancelled = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            if (!plot.hasOwner()) {
 | 
			
		||||
                if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) {
 | 
			
		||||
                    MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.unowned");
 | 
			
		||||
                    cancelled = true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                final UUID uuid = pp.getUUID();
 | 
			
		||||
                if (!plot.isAdded(uuid)) {
 | 
			
		||||
                    if (!Permissions.hasPermission(pp, "plots.admin.interact.other")) {
 | 
			
		||||
                        MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.other");
 | 
			
		||||
                        cancelled = true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (cancelled) {
 | 
			
		||||
            if (current.getTypeId() == newItem.getTypeId() && current.getDurability() == newItem.getDurability()) {
 | 
			
		||||
                event.setCursor(new ItemStack(newItem.getTypeId(), newItem.getAmount(), newItem.getDurability()));
 | 
			
		||||
                event.setCancelled(true);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            event.setCursor(new ItemStack(newItem.getTypeId(), newItem.getAmount(), newItem.getDurability()));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
			
		||||
    public void onInteract(final PlayerInteractAtEntityEvent e) {
 | 
			
		||||
        Entity entity = e.getRightClicked();
 | 
			
		||||
        if (!(entity instanceof ArmorStand)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final Location l = BukkitUtil.getLocation(e.getRightClicked().getLocation());
 | 
			
		||||
        String world = l.getWorld();
 | 
			
		||||
        if (!PS.get().isPlotWorld(world)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Plot plot = MainUtil.getPlot(l);
 | 
			
		||||
        PlotPlayer pp = BukkitUtil.getPlayer(e.getPlayer());
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            if (!MainUtil.isPlotArea(l)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (!Permissions.hasPermission(pp, "plots.admin.interact.road")) {
 | 
			
		||||
                MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.road");
 | 
			
		||||
                e.setCancelled(true);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            if (!plot.hasOwner()) {
 | 
			
		||||
                if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) {
 | 
			
		||||
                    MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.unowned");
 | 
			
		||||
                    e.setCancelled(true);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                final UUID uuid = pp.getUUID();
 | 
			
		||||
                if (!plot.isAdded(uuid)) {
 | 
			
		||||
                    if (!Permissions.hasPermission(pp, "plots.admin.interact.other")) {
 | 
			
		||||
                        MainUtil.sendMessage(pp, C.NO_PERMISSION, "plots.admin.interact.other");
 | 
			
		||||
                        e.setCancelled(true);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,52 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.block.BlockExplodeEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public class PlayerEvents_1_8_3 implements Listener {
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
			
		||||
    public void onBigBoom(final BlockExplodeEvent event) {
 | 
			
		||||
        Block block = event.getBlock();
 | 
			
		||||
        Location loc = BukkitUtil.getLocation(block.getLocation());
 | 
			
		||||
        final String world = loc.getWorld();
 | 
			
		||||
        if (!PS.get().isPlotWorld(world)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final Plot plot = MainUtil.getPlot(loc);
 | 
			
		||||
        if ((plot != null) && plot.hasOwner()) {
 | 
			
		||||
            if (FlagManager.isPlotFlagTrue(plot, "explosion")) {
 | 
			
		||||
                final Iterator<Block> iter = event.blockList().iterator();
 | 
			
		||||
                while (iter.hasNext()) {
 | 
			
		||||
                    final Block b = iter.next();
 | 
			
		||||
                    if (!plot.equals(MainUtil.getPlot(BukkitUtil.getLocation(b.getLocation())))) {
 | 
			
		||||
                        iter.remove();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (MainUtil.isPlotArea(loc)) {
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        } else {
 | 
			
		||||
            final Iterator<Block> iter = event.blockList().iterator();
 | 
			
		||||
            while (iter.hasNext()) {
 | 
			
		||||
                iter.next();
 | 
			
		||||
                if (MainUtil.isPlotArea(loc)) {
 | 
			
		||||
                    iter.remove();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,263 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.Effect;
 | 
			
		||||
import org.bukkit.GameMode;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.WeatherType;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
 | 
			
		||||
import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.BukkitPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotId;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.comment.CommentManager;
 | 
			
		||||
import com.intellectualcrafters.plot.titles.AbstractTitle;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.StringMan;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 */
 | 
			
		||||
public class PlotListener extends APlotListener {
 | 
			
		||||
    public void textures(final Player p) {
 | 
			
		||||
        if ((Settings.PLOT_SPECIFIC_RESOURCE_PACK.length() > 1) && PS.get().isPlotWorld(p.getWorld().getName())) {
 | 
			
		||||
            p.setResourcePack(Settings.PLOT_SPECIFIC_RESOURCE_PACK);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private String getName(final UUID id) {
 | 
			
		||||
        if (id == null) {
 | 
			
		||||
            return "none";
 | 
			
		||||
        }
 | 
			
		||||
        final String name = UUIDHandler.getName(id);
 | 
			
		||||
        if (name == null) {
 | 
			
		||||
            return "unknown";
 | 
			
		||||
        }
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void setWeather(Player player, String str) {
 | 
			
		||||
        switch (str.toLowerCase()) {
 | 
			
		||||
            case "clear": {
 | 
			
		||||
                player.setPlayerWeather(WeatherType.CLEAR);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case "rain": {
 | 
			
		||||
                player.setPlayerWeather(WeatherType.DOWNFALL);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private GameMode getGameMode(final String str) {
 | 
			
		||||
        switch (str) {
 | 
			
		||||
            case "creative":
 | 
			
		||||
                return GameMode.CREATIVE;
 | 
			
		||||
            case "survival":
 | 
			
		||||
                return GameMode.SURVIVAL;
 | 
			
		||||
            case "adventure":
 | 
			
		||||
                return GameMode.ADVENTURE;
 | 
			
		||||
            default:
 | 
			
		||||
                return Bukkit.getDefaultGameMode();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean plotEntry(final PlotPlayer pp, final Plot plot) {
 | 
			
		||||
        if (plot.isDenied(pp.getUUID()) && !Permissions.hasPermission(pp, "plots.admin.entry.denied")) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        Plot last = (Plot) pp.getMeta("lastplot");
 | 
			
		||||
        if (last != null && !last.id.equals(plot.id)) {
 | 
			
		||||
            plotExit(pp, last);
 | 
			
		||||
        }
 | 
			
		||||
        pp.setMeta("lastplot", plot);
 | 
			
		||||
        final Player player = ((BukkitPlayer) pp).player;
 | 
			
		||||
        final PlayerEnterPlotEvent callEvent = new PlayerEnterPlotEvent(player, plot);
 | 
			
		||||
        Bukkit.getPluginManager().callEvent(callEvent);
 | 
			
		||||
        if (plot.hasOwner()) {
 | 
			
		||||
            HashMap<String, Flag> flags = FlagManager.getPlotFlags(plot);
 | 
			
		||||
            int size = flags.size();
 | 
			
		||||
            boolean titles = Settings.TITLES;
 | 
			
		||||
            final String greeting;
 | 
			
		||||
            
 | 
			
		||||
            if (size != 0) {
 | 
			
		||||
                Flag titleFlag = flags.get("titles");
 | 
			
		||||
                    if (titleFlag != null) {
 | 
			
		||||
                    titles = (Boolean) titleFlag.getValue();
 | 
			
		||||
                }
 | 
			
		||||
                Flag greetingFlag = flags.get("greeting");
 | 
			
		||||
                if (greetingFlag != null) {
 | 
			
		||||
                    greeting = (String) greetingFlag.getValue();
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    greeting = "";
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                final Flag gamemodeFlag = flags.get("gamemode");
 | 
			
		||||
                if (gamemodeFlag != null) {
 | 
			
		||||
                    if (player.getGameMode() != getGameMode(gamemodeFlag.getValueString())) {
 | 
			
		||||
                        if (!player.hasPermission("plots.gamemode.bypass")) {
 | 
			
		||||
                            player.setGameMode(getGameMode(gamemodeFlag.getValueString()));
 | 
			
		||||
                        }
 | 
			
		||||
                        else {
 | 
			
		||||
                            MainUtil.sendMessage(pp, StringMan.replaceAll(C.GAMEMODE_WAS_BYPASSED.s(), "{plot}", plot.id, "{gamemode}", gamemodeFlag.getValue()));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                final Flag flyFlag = flags.get("fly");
 | 
			
		||||
                if (flyFlag != null) {
 | 
			
		||||
                    player.setAllowFlight((boolean) flyFlag.getValue());
 | 
			
		||||
                }
 | 
			
		||||
                final Flag timeFlag = flags.get("time");
 | 
			
		||||
                if (timeFlag != null) {
 | 
			
		||||
                    try {
 | 
			
		||||
                        final long time = (long) timeFlag.getValue();
 | 
			
		||||
                        player.setPlayerTime(time, false);
 | 
			
		||||
                    } catch (final Exception e) {
 | 
			
		||||
                        FlagManager.removePlotFlag(plot, "time");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                final Flag weatherFlag = flags.get("weather");
 | 
			
		||||
                if (weatherFlag != null) {
 | 
			
		||||
                    setWeather(player, weatherFlag.getValueString());
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                Flag musicFlag = flags.get("music");
 | 
			
		||||
                if (musicFlag != null) {
 | 
			
		||||
                    final Integer id = (Integer) musicFlag.getValue();
 | 
			
		||||
                    if ((id >= 2256 && id <= 2267) || id == 0) {
 | 
			
		||||
                        final org.bukkit.Location loc = player.getLocation();
 | 
			
		||||
                        org.bukkit.Location lastLoc = (org.bukkit.Location) pp.getMeta("music");
 | 
			
		||||
                        if (lastLoc != null) {
 | 
			
		||||
                            player.playEffect(lastLoc, Effect.RECORD_PLAY, 0);
 | 
			
		||||
                            if (id == 0) {
 | 
			
		||||
                                pp.deleteMeta("music");
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        if (id != 0) {
 | 
			
		||||
                            try {
 | 
			
		||||
                                pp.setMeta("music", loc);
 | 
			
		||||
                                player.playEffect(loc, Effect.RECORD_PLAY, Material.getMaterial(id));
 | 
			
		||||
                            }
 | 
			
		||||
                            catch (Exception e) {}
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    org.bukkit.Location lastLoc = (org.bukkit.Location) pp.getMeta("music");
 | 
			
		||||
                    if (lastLoc != null) {
 | 
			
		||||
                        pp.deleteMeta("music");
 | 
			
		||||
                        player.playEffect(lastLoc, Effect.RECORD_PLAY, 0);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                CommentManager.sendTitle(pp, plot);
 | 
			
		||||
            }
 | 
			
		||||
            else if (titles) {
 | 
			
		||||
                greeting = "";
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (titles) { 
 | 
			
		||||
                if (C.TITLE_ENTERED_PLOT.s().length() != 0 || C.TITLE_ENTERED_PLOT_SUB.s().length() != 0) {
 | 
			
		||||
                    TaskManager.runTaskLaterAsync(new Runnable() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void run() {
 | 
			
		||||
                            Plot lastPlot = (Plot) pp.getMeta("lastplot");
 | 
			
		||||
                            if (lastPlot != null && plot.id.equals(lastPlot.id)) {
 | 
			
		||||
                                Map<String, String> replacements = new HashMap<>();
 | 
			
		||||
                                replacements.put("%x%", lastPlot.id.x + "");
 | 
			
		||||
                                replacements.put("%z%", lastPlot.id.y + "");
 | 
			
		||||
                                replacements.put("%world%", plot.world);
 | 
			
		||||
                                replacements.put("%greeting%", greeting);
 | 
			
		||||
                                replacements.put("%alias", plot.toString());
 | 
			
		||||
                                replacements.put("%s", getName(plot.owner));
 | 
			
		||||
                                String main = StringMan.replaceFromMap(C.TITLE_ENTERED_PLOT.s(), replacements);
 | 
			
		||||
                                String sub = StringMan.replaceFromMap(C.TITLE_ENTERED_PLOT_SUB.s(), replacements);
 | 
			
		||||
                                AbstractTitle.sendTitle(pp, main, sub, ChatColor.valueOf(C.TITLE_ENTERED_PLOT_COLOR.s()), ChatColor.valueOf(C.TITLE_ENTERED_PLOT_SUB_COLOR.s()));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }, 20);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean plotExit(final PlotPlayer pp, final Plot plot) {
 | 
			
		||||
        pp.deleteMeta("lastplot");
 | 
			
		||||
        Player player = ((BukkitPlayer) pp).player;
 | 
			
		||||
        final PlayerLeavePlotEvent callEvent = new PlayerLeavePlotEvent(player, plot);
 | 
			
		||||
        Bukkit.getPluginManager().callEvent(callEvent);
 | 
			
		||||
        if (plot.hasOwner()) {
 | 
			
		||||
            if (FlagManager.getPlotFlag(plot, "fly") != null) {
 | 
			
		||||
                player.setAllowFlight(Bukkit.getAllowFlight());
 | 
			
		||||
            }
 | 
			
		||||
            if (FlagManager.getPlotFlag(plot, "gamemode") != null) {
 | 
			
		||||
                if (player.getGameMode() != Bukkit.getDefaultGameMode()) {
 | 
			
		||||
                    if (!player.hasPermission("plots.gamemode.bypass")) {
 | 
			
		||||
                        player.setGameMode(Bukkit.getDefaultGameMode());
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        MainUtil.sendMessage(pp, StringMan.replaceAll(C.GAMEMODE_WAS_BYPASSED.s(), "{plot}", plot.world, "{gamemode}", Bukkit.getDefaultGameMode().name().toLowerCase()));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (FlagManager.getPlotFlag(plot, "time") != null) {
 | 
			
		||||
                player.resetPlayerTime();
 | 
			
		||||
            }
 | 
			
		||||
            if (FlagManager.getPlotFlag(plot, "weather") != null) {
 | 
			
		||||
                player.resetPlayerWeather();
 | 
			
		||||
            }
 | 
			
		||||
            org.bukkit.Location lastLoc = (org.bukkit.Location) pp.getMeta("music");
 | 
			
		||||
            if (lastLoc != null) {
 | 
			
		||||
                pp.deleteMeta("music");
 | 
			
		||||
                player.playEffect(lastLoc, Effect.RECORD_PLAY, 0);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean getFlagValue(final String value) {
 | 
			
		||||
        return Arrays.asList("true", "on", "enabled", "yes").contains(value.toLowerCase());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,300 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.GameMode;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.entity.EntityType;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.block.BlockDamageEvent;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerDropItemEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerPickupItemEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerQuitEvent;
 | 
			
		||||
import org.bukkit.plugin.java.JavaPlugin;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.events.PlayerEnterPlotEvent;
 | 
			
		||||
import com.intellectualcrafters.plot.events.PlayerLeavePlotEvent;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.Flag;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2014-10-30 for PlotSquared
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
@SuppressWarnings({ "deprecation"})
 | 
			
		||||
public class PlotPlusListener extends PlotListener implements Listener {
 | 
			
		||||
    private final static HashMap<String, Interval> feedRunnable = new HashMap<>();
 | 
			
		||||
    private final static HashMap<String, Interval> healRunnable = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
    public static void startRunnable(final JavaPlugin plugin) {
 | 
			
		||||
        plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                for (Iterator<Entry<String, Interval>> iter = healRunnable.entrySet().iterator(); iter.hasNext();){
 | 
			
		||||
                    Entry<String, Interval> entry = iter.next();
 | 
			
		||||
                    final Interval value = entry.getValue();
 | 
			
		||||
                    ++value.count;
 | 
			
		||||
                    if (value.count == value.interval) {
 | 
			
		||||
                        value.count = 0;
 | 
			
		||||
                        final Player player = Bukkit.getPlayer(entry.getKey());
 | 
			
		||||
                        if (player == null) {
 | 
			
		||||
                            iter.remove();
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
                        final double level = player.getHealth();
 | 
			
		||||
                        if (level != value.max) {
 | 
			
		||||
                            player.setHealth(Math.min(level + value.amount, value.max));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                for (Iterator<Entry<String, Interval>> iter = feedRunnable.entrySet().iterator(); iter.hasNext();){
 | 
			
		||||
                    Entry<String, Interval> entry = iter.next();
 | 
			
		||||
                    final Interval value = entry.getValue();
 | 
			
		||||
                    ++value.count;
 | 
			
		||||
                    if (value.count == value.interval) {
 | 
			
		||||
                        value.count = 0;
 | 
			
		||||
                        final Player player = Bukkit.getPlayer(entry.getKey());
 | 
			
		||||
                        if (player == null) {
 | 
			
		||||
                            iter.remove();
 | 
			
		||||
                            continue;
 | 
			
		||||
                        }
 | 
			
		||||
                        final int level = player.getFoodLevel();
 | 
			
		||||
                        if (level != value.max) {
 | 
			
		||||
                            player.setFoodLevel(Math.min(level + value.amount, value.max));
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }, 0l, 20l);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGH)
 | 
			
		||||
    public void onInteract(final BlockDamageEvent event) {
 | 
			
		||||
        final Player player = event.getPlayer();
 | 
			
		||||
        if (player.getGameMode() != GameMode.SURVIVAL) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(player));
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (FlagManager.isBooleanFlag(plot, "instabreak", false)) {
 | 
			
		||||
            event.getBlock().breakNaturally();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGH)
 | 
			
		||||
    public void onDamage(final EntityDamageEvent event) {
 | 
			
		||||
        if (event.getEntityType() != EntityType.PLAYER) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final Player player = (Player) event.getEntity();
 | 
			
		||||
        final Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(player));
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (FlagManager.isBooleanFlag(plot, "invincible", false)) {
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onItemPickup(final PlayerPickupItemEvent event) {
 | 
			
		||||
        final Player player = event.getPlayer();
 | 
			
		||||
        final PlotPlayer pp = BukkitUtil.getPlayer(player);
 | 
			
		||||
        final Plot plot = MainUtil.getPlot(pp.getLocation());
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final UUID uuid = pp.getUUID();
 | 
			
		||||
        if (plot.isAdded(uuid) && FlagManager.isBooleanFlag(plot, "drop-protection", false)) {
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onItemDrop(final PlayerDropItemEvent event) {
 | 
			
		||||
        final Player player = event.getPlayer();
 | 
			
		||||
        final PlotPlayer pp = BukkitUtil.getPlayer(player);
 | 
			
		||||
        final Plot plot = MainUtil.getPlot(pp.getLocation());
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        final UUID uuid = pp.getUUID();
 | 
			
		||||
        if (plot.isAdded(uuid) && FlagManager.isBooleanFlag(plot, "item-drop", false)) {
 | 
			
		||||
            event.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onPlotEnter(final PlayerEnterPlotEvent event) {
 | 
			
		||||
        Player player = event.getPlayer();
 | 
			
		||||
        final Plot plot = event.getPlot();
 | 
			
		||||
        if (FlagManager.getPlotFlag(plot, "greeting") != null) {
 | 
			
		||||
            event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', C.PREFIX_GREETING.s().replaceAll("%id%", plot.id + "") + FlagManager.getPlotFlag(plot, "greeting").getValueString()));
 | 
			
		||||
        }
 | 
			
		||||
        Flag feed = FlagManager.getPlotFlag(plot, "feed");
 | 
			
		||||
        if (feed != null) {
 | 
			
		||||
            Integer[] value = (Integer[]) feed.getValue();
 | 
			
		||||
            feedRunnable.put(player.getName(), new Interval(value[0], value[1], 20));
 | 
			
		||||
        }
 | 
			
		||||
        Flag heal = FlagManager.getPlotFlag(plot, "heal");
 | 
			
		||||
        if (heal != null) {
 | 
			
		||||
            Integer[] value = (Integer[]) heal.getValue();
 | 
			
		||||
            healRunnable.put(player.getName(), new Interval(value[0], value[1], 20));
 | 
			
		||||
        }
 | 
			
		||||
        if (FlagManager.isBooleanFlag(plot, "notify-enter", false)) {
 | 
			
		||||
            final Player trespasser = event.getPlayer();
 | 
			
		||||
            final PlotPlayer pt = BukkitUtil.getPlayer(trespasser);
 | 
			
		||||
            if (Permissions.hasPermission(pt, "plots.flag.notify-enter.bypass")) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (plot.hasOwner()) {
 | 
			
		||||
                for (UUID owner : PlotHandler.getOwners(plot)) {
 | 
			
		||||
                    final PlotPlayer pp = UUIDHandler.getPlayer(owner);
 | 
			
		||||
                    if (pp == null) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (pp.getUUID().equals(pt.getUUID())) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (pp.isOnline()) {
 | 
			
		||||
                        MainUtil.sendMessage(pp, C.NOTIFY_ENTER.s().replace("%player", trespasser.getName()).replace("%plot", plot.getId().toString()));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onPlayerQuit(final PlayerQuitEvent event) {
 | 
			
		||||
        final Player player = event.getPlayer();
 | 
			
		||||
        final String name = player.getName();
 | 
			
		||||
        feedRunnable.remove(name);
 | 
			
		||||
        healRunnable.remove(name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onPlotLeave(final PlayerLeavePlotEvent event) {
 | 
			
		||||
        final Player leaver = event.getPlayer();
 | 
			
		||||
        final Plot plot = event.getPlot();
 | 
			
		||||
        if (!plot.hasOwner()) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (FlagManager.getPlotFlag(plot, "farewell") != null) {
 | 
			
		||||
            event.getPlayer().sendMessage(ChatColor.translateAlternateColorCodes('&', C.PREFIX_FAREWELL.s().replaceAll("%id%", plot.id + "") + FlagManager.getPlotFlag(plot, "farewell").getValueString()));
 | 
			
		||||
        }
 | 
			
		||||
        final PlotPlayer pl = BukkitUtil.getPlayer(leaver);
 | 
			
		||||
        String name = leaver.getName();
 | 
			
		||||
        feedRunnable.remove(name);
 | 
			
		||||
        healRunnable.remove(name);
 | 
			
		||||
        if (FlagManager.isBooleanFlag(plot, "notify-leave", false)) {
 | 
			
		||||
            if (Permissions.hasPermission(pl, "plots.flag.notify-leave.bypass")) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (plot.hasOwner()) {
 | 
			
		||||
                for (UUID owner : PlotHandler.getOwners(plot)) {
 | 
			
		||||
                    final PlotPlayer pp = UUIDHandler.getPlayer(owner);
 | 
			
		||||
                    if (pp == null) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (pp.getUUID().equals(pl.getUUID())) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
                    if (pp.isOnline()) {
 | 
			
		||||
                        MainUtil.sendMessage(pp, C.NOTIFY_LEAVE.s().replace("%player", leaver.getName()).replace("%plot", plot.getId().toString()));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class Interval {
 | 
			
		||||
        public final int interval;
 | 
			
		||||
        public final int amount;
 | 
			
		||||
        public final int max;
 | 
			
		||||
        public int count = 0;
 | 
			
		||||
 | 
			
		||||
        public Interval(final int interval, final int amount, final int max) {
 | 
			
		||||
            this.interval = interval;
 | 
			
		||||
            this.amount = amount;
 | 
			
		||||
            this.max = max;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Record Meta Class
 | 
			
		||||
     *
 | 
			
		||||
     * @author Citymonstret
 | 
			
		||||
     */
 | 
			
		||||
    public static class RecordMeta {
 | 
			
		||||
        public final static List<RecordMeta> metaList = new ArrayList<>();
 | 
			
		||||
        static {
 | 
			
		||||
            for (int x = 3; x < 12; x++) {
 | 
			
		||||
                metaList.add(new RecordMeta(x + "", Material.valueOf("RECORD_" + x)));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        private final String name;
 | 
			
		||||
        private final Material material;
 | 
			
		||||
 | 
			
		||||
        public RecordMeta(final String name, final Material material) {
 | 
			
		||||
            this.name = name;
 | 
			
		||||
            this.material = material;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public String toString() {
 | 
			
		||||
            return this.name;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        @Override
 | 
			
		||||
        public int hashCode() {
 | 
			
		||||
            return this.name.hashCode();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Material getMaterial() {
 | 
			
		||||
            return this.material;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,122 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.EntityType;
 | 
			
		||||
import org.bukkit.entity.TNTPrimed;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
			
		||||
import org.bukkit.event.entity.ExplosionPrimeEvent;
 | 
			
		||||
import org.bukkit.util.Vector;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public class TNTListener implements Listener {
 | 
			
		||||
    private double lastRadius;
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onPrime(ExplosionPrimeEvent event) {
 | 
			
		||||
        lastRadius = event.getRadius() + 1;
 | 
			
		||||
    }
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void onExplode(EntityExplodeEvent event) {
 | 
			
		||||
        Entity entity = event.getEntity();
 | 
			
		||||
        if (entity == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        World world = entity.getWorld();
 | 
			
		||||
        String worldname = world.getName();
 | 
			
		||||
        if (!PS.get().isPlotWorld(worldname)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Plot plot = MainUtil.getPlot(BukkitUtil.getLocation(entity));
 | 
			
		||||
        if (plot == null) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if (!FlagManager.isPlotFlagTrue(plot, "explosion")) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        Location bot = MainUtil.getPlotBottomLoc(plot.world, plot.id);
 | 
			
		||||
        Location top = MainUtil.getPlotTopLoc(plot.world, plot.id);
 | 
			
		||||
        
 | 
			
		||||
        List<Entity> nearby = entity.getNearbyEntities(lastRadius, lastRadius, lastRadius);
 | 
			
		||||
        for (Entity near : nearby) {
 | 
			
		||||
            if (near instanceof TNTPrimed || near.getType() == EntityType.MINECART_TNT) {
 | 
			
		||||
                Vector velocity = near.getVelocity();
 | 
			
		||||
                Location loc = BukkitUtil.getLocation(near);
 | 
			
		||||
                Plot nearPlot = MainUtil.getPlot(loc);
 | 
			
		||||
                if (!plot.equals(nearPlot)) {
 | 
			
		||||
                    near.setVelocity(new Vector(0, 0, 0));
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                double vx = velocity.getX();
 | 
			
		||||
                double vy = velocity.getX();
 | 
			
		||||
                double vz = velocity.getX();
 | 
			
		||||
                
 | 
			
		||||
                int dx;
 | 
			
		||||
                int dz;
 | 
			
		||||
                
 | 
			
		||||
                if (vx > 0) {
 | 
			
		||||
                    dx = top.getX() - loc.getX();
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    dx = bot.getX() - loc.getX();
 | 
			
		||||
                }
 | 
			
		||||
                if (vz > 0) {
 | 
			
		||||
                    dz = top.getZ() - loc.getZ();
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    dz = bot.getZ() - loc.getZ();
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                double s1 = dx / vx;
 | 
			
		||||
                double s2 = dz / vz;
 | 
			
		||||
                Vector v1 = new Vector(dx, 0, vz * s1);
 | 
			
		||||
                Vector v2 = new Vector(vx * s2, 0, dz);
 | 
			
		||||
                
 | 
			
		||||
                Vector shortest;
 | 
			
		||||
                if (v1.length() < v2.length()) {
 | 
			
		||||
                    shortest = v1;
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    shortest = v2;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                Location landing = loc.add(shortest.getBlockX() + 1, 0, shortest.getBlockZ() + 1);
 | 
			
		||||
                int ty = BukkitUtil.getHeighestBlock(worldname, landing.getX(), landing.getZ());
 | 
			
		||||
                int diff = ty - loc.getY();
 | 
			
		||||
                double calcDiff = getY(velocity, Math.sqrt(shortest.getBlockX() * shortest.getBlockX() + shortest.getBlockZ() * shortest.getBlockZ()));
 | 
			
		||||
                if (calcDiff > diff) {
 | 
			
		||||
                    near.setVelocity(new Vector(0, 0, 0));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        event.getEntity().setVelocity(new Vector(0, 0, 0));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public double getY(Vector velocity, double x) {
 | 
			
		||||
        
 | 
			
		||||
        double g = 16;
 | 
			
		||||
        double l1 = velocity.length();
 | 
			
		||||
        double l2 = Math.sqrt(velocity.getX() * velocity.getX() + velocity.getZ() * velocity.getZ());
 | 
			
		||||
        
 | 
			
		||||
        double v = l1 * 20;
 | 
			
		||||
        double theta = Math.acos(l2/l1);
 | 
			
		||||
        if (velocity.getY() < 0) {
 | 
			
		||||
            theta = -theta;
 | 
			
		||||
        }
 | 
			
		||||
        double cos = Math.cos(theta);
 | 
			
		||||
        double yDiff = (x * Math.tan(theta)) - ((g * x * x) / (2 * (v * v * cos * cos)));
 | 
			
		||||
        return yDiff;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.world.WorldInitEvent;
 | 
			
		||||
import org.bukkit.event.world.WorldLoadEvent;
 | 
			
		||||
import org.bukkit.generator.ChunkGenerator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotGenerator;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class WorldEvents implements Listener {
 | 
			
		||||
    
 | 
			
		||||
    public static String lastWorld = null;
 | 
			
		||||
    
 | 
			
		||||
    public static String getName(World world) {
 | 
			
		||||
        if (lastWorld != null && !lastWorld.equals("CheckingPlotSquaredGenerator")) {
 | 
			
		||||
            return lastWorld;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return world.getName();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
			
		||||
    public static void onWorldInit(final WorldInitEvent event) {
 | 
			
		||||
        final World world = event.getWorld();
 | 
			
		||||
        String name = getName(world);
 | 
			
		||||
        final ChunkGenerator gen = world.getGenerator();
 | 
			
		||||
        if (gen instanceof PlotGenerator) {
 | 
			
		||||
            //
 | 
			
		||||
            PS.get().loadWorld(name, (PlotGenerator) gen);
 | 
			
		||||
        } else {
 | 
			
		||||
            if (PS.get().config.contains("worlds." + name)) {
 | 
			
		||||
                PS.get().loadWorld(name, null);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        lastWorld = null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler
 | 
			
		||||
    public void worldLoad(final WorldLoadEvent event) {
 | 
			
		||||
        UUIDHandler.cacheWorld(event.getWorld().getName());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,75 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners.worldedit;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import com.sk89q.worldedit.Vector;
 | 
			
		||||
import com.sk89q.worldedit.Vector2D;
 | 
			
		||||
import com.sk89q.worldedit.WorldEditException;
 | 
			
		||||
import com.sk89q.worldedit.blocks.BaseBlock;
 | 
			
		||||
import com.sk89q.worldedit.entity.BaseEntity;
 | 
			
		||||
import com.sk89q.worldedit.entity.Entity;
 | 
			
		||||
import com.sk89q.worldedit.extent.Extent;
 | 
			
		||||
import com.sk89q.worldedit.function.operation.Operation;
 | 
			
		||||
import com.sk89q.worldedit.regions.Region;
 | 
			
		||||
import com.sk89q.worldedit.util.Location;
 | 
			
		||||
import com.sk89q.worldedit.world.biome.BaseBiome;
 | 
			
		||||
 | 
			
		||||
public class NullExtent implements Extent {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BaseBiome getBiome(Vector2D arg0) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BaseBlock getBlock(Vector arg0) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public BaseBlock getLazyBlock(Vector arg0) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Operation commit() {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean setBiome(Vector2D arg0, BaseBiome arg1) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean setBlock(Vector arg0, BaseBlock arg1) throws WorldEditException {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Entity createEntity(Location arg0, BaseEntity arg1) {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<? extends Entity> getEntities() {
 | 
			
		||||
        return new ArrayList<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<? extends Entity> getEntities(Region arg0) {
 | 
			
		||||
        return new ArrayList<>();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Vector getMaximumPoint() {
 | 
			
		||||
        return new Vector(0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Vector getMinimumPoint() {
 | 
			
		||||
        return new Vector(0, 0, 0);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
@@ -1,108 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners.worldedit;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
import com.sk89q.worldedit.Vector;
 | 
			
		||||
import com.sk89q.worldedit.Vector2D;
 | 
			
		||||
import com.sk89q.worldedit.WorldEditException;
 | 
			
		||||
import com.sk89q.worldedit.blocks.BaseBlock;
 | 
			
		||||
import com.sk89q.worldedit.entity.BaseEntity;
 | 
			
		||||
import com.sk89q.worldedit.entity.Entity;
 | 
			
		||||
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
 | 
			
		||||
import com.sk89q.worldedit.extent.Extent;
 | 
			
		||||
import com.sk89q.worldedit.util.Location;
 | 
			
		||||
import com.sk89q.worldedit.world.biome.BaseBiome;
 | 
			
		||||
 | 
			
		||||
public class ProcessedWEExtent extends AbstractDelegateExtent {
 | 
			
		||||
    private final HashSet<RegionWrapper> mask;
 | 
			
		||||
    int BScount = 0;
 | 
			
		||||
    int Ecount = 0;
 | 
			
		||||
    boolean BSblocked = false;
 | 
			
		||||
    boolean Eblocked = false;
 | 
			
		||||
 
 | 
			
		||||
    public ProcessedWEExtent(HashSet<RegionWrapper> mask, Extent extent) {
 | 
			
		||||
        super(extent);
 | 
			
		||||
        this.mask = mask;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException {
 | 
			
		||||
        switch (block.getType()) {
 | 
			
		||||
            case 54:
 | 
			
		||||
            case 130:
 | 
			
		||||
            case 142:
 | 
			
		||||
            case 27:
 | 
			
		||||
            case 137:
 | 
			
		||||
            case 52:
 | 
			
		||||
            case 154:
 | 
			
		||||
            case 84:
 | 
			
		||||
            case 25:
 | 
			
		||||
            case 144:
 | 
			
		||||
            case 138:
 | 
			
		||||
            case 176:
 | 
			
		||||
            case 177:
 | 
			
		||||
            case 63:
 | 
			
		||||
            case 68:
 | 
			
		||||
            case 323:
 | 
			
		||||
            case 117:
 | 
			
		||||
            case 116:
 | 
			
		||||
            case 28:
 | 
			
		||||
            case 66:
 | 
			
		||||
            case 157:
 | 
			
		||||
            case 61:
 | 
			
		||||
            case 62:
 | 
			
		||||
            case 140:
 | 
			
		||||
            case 146:
 | 
			
		||||
            case 149:
 | 
			
		||||
            case 150:
 | 
			
		||||
            case 158:
 | 
			
		||||
            case 23:
 | 
			
		||||
            case 123:
 | 
			
		||||
            case 124:
 | 
			
		||||
            case 29:
 | 
			
		||||
            case 33:
 | 
			
		||||
            case 151:
 | 
			
		||||
            case 178: {
 | 
			
		||||
                if (BSblocked) {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                BScount++;
 | 
			
		||||
                if (BScount > Settings.CHUNK_PROCESSOR_MAX_BLOCKSTATES) {
 | 
			
		||||
                    BSblocked = true;
 | 
			
		||||
                    PS.log("&cPlotSquared detected unsafe WorldEdit: " + (location.getBlockX()) + "," + (location.getBlockZ()));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (WEManager.maskContains(mask, location.getBlockX(), location.getBlockZ())) {
 | 
			
		||||
            return super.setBlock(location, block);
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public Entity createEntity(Location location, BaseEntity entity) {
 | 
			
		||||
        if (Eblocked) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        Ecount++;
 | 
			
		||||
        if (Ecount > Settings.CHUNK_PROCESSOR_MAX_ENTITIES) {
 | 
			
		||||
            Eblocked = true;
 | 
			
		||||
            PS.log("&cPlotSquared detected unsafe WorldEdit: " + (location.getBlockX()) + "," + (location.getBlockZ()));
 | 
			
		||||
        }
 | 
			
		||||
        if (WEManager.maskContains(mask, location.getBlockX(), location.getBlockZ())) {
 | 
			
		||||
            return super.createEntity(location, entity);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean setBiome(Vector2D position, BaseBiome biome) {
 | 
			
		||||
        if (WEManager.maskContains(mask, position.getBlockX(), position.getBlockZ())) {
 | 
			
		||||
            return super.setBiome(position, biome);
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners.worldedit;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
import com.sk89q.worldedit.Vector;
 | 
			
		||||
import com.sk89q.worldedit.Vector2D;
 | 
			
		||||
import com.sk89q.worldedit.WorldEditException;
 | 
			
		||||
import com.sk89q.worldedit.blocks.BaseBlock;
 | 
			
		||||
import com.sk89q.worldedit.entity.BaseEntity;
 | 
			
		||||
import com.sk89q.worldedit.entity.Entity;
 | 
			
		||||
import com.sk89q.worldedit.extent.AbstractDelegateExtent;
 | 
			
		||||
import com.sk89q.worldedit.extent.Extent;
 | 
			
		||||
import com.sk89q.worldedit.util.Location;
 | 
			
		||||
import com.sk89q.worldedit.world.biome.BaseBiome;
 | 
			
		||||
 | 
			
		||||
public class WEExtent extends AbstractDelegateExtent {
 | 
			
		||||
    private final HashSet<RegionWrapper> mask;
 | 
			
		||||
 
 | 
			
		||||
    public WEExtent(HashSet<RegionWrapper> mask, Extent extent) {
 | 
			
		||||
        super(extent);
 | 
			
		||||
        this.mask = mask;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean setBlock(Vector location, BaseBlock block) throws WorldEditException {
 | 
			
		||||
        if (WEManager.maskContains(mask, location.getBlockX(), location.getBlockZ())) {
 | 
			
		||||
            return super.setBlock(location, block);
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public Entity createEntity(Location location, BaseEntity entity) {
 | 
			
		||||
        if (WEManager.maskContains(mask, location.getBlockX(), location.getBlockZ())) {
 | 
			
		||||
            return super.createEntity(location, entity);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean setBiome(Vector2D position, BaseBiome biome) {
 | 
			
		||||
        if (WEManager.maskContains(mask, position.getBlockX(), position.getBlockZ())) {
 | 
			
		||||
            return super.setBiome(position, biome);
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,255 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners.worldedit;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.Cancellable;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener;
 | 
			
		||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.sk89q.worldedit.BlockVector;
 | 
			
		||||
import com.sk89q.worldedit.bukkit.selections.Selection;
 | 
			
		||||
 
 | 
			
		||||
public class WEListener implements Listener {
 | 
			
		||||
    
 | 
			
		||||
    public final HashSet<String> rad1 = new HashSet<>(Arrays.asList("forestgen", "pumpkins", "drain", "fixwater", "fixlava", "replacenear", "snow", "thaw", "ex", "butcher", "size"));
 | 
			
		||||
    public final HashSet<String> rad2 = new HashSet<>(Arrays.asList("fill", "fillr", "removenear", "remove"));
 | 
			
		||||
    public final HashSet<String> rad2_1 = new HashSet<>(Arrays.asList("hcyl", "cyl"));
 | 
			
		||||
    public final HashSet<String> rad2_2 = new HashSet<>(Arrays.asList("sphere", "pyramid"));
 | 
			
		||||
    public final HashSet<String> rad2_3 = new HashSet<>(Arrays.asList("brush smooth"));
 | 
			
		||||
    public final HashSet<String> rad3_1 = new HashSet<>(Arrays.asList("brush gravity"));
 | 
			
		||||
    public final HashSet<String> rad3_2 = new HashSet<>(Arrays.asList("brush sphere", "brush cylinder"));
 | 
			
		||||
    
 | 
			
		||||
    public final HashSet<String> region  = new HashSet<>(Arrays.asList("move", "set", "replace", "overlay", "walls", "outline", "deform", "hollow", "smooth", "naturalize", "paste", "count", "distr", "regen", "copy", "cut", "green", "setbiome"));
 | 
			
		||||
    public final HashSet<String> regionExtend = new HashSet<>(Arrays.asList("stack"));
 | 
			
		||||
    public final HashSet<String> unregioned = new HashSet<>(Arrays.asList("paste", "redo", "undo", "rotate", "flip", "generate", "schematic", "schem"));
 | 
			
		||||
    public final HashSet<String> unsafe1 =  new HashSet<>(Arrays.asList("cs", ".s", "restore", "snapshot", "delchunks", "listchunks"));
 | 
			
		||||
    public final HashSet<String> restricted = new HashSet<>(Arrays.asList("up"));
 | 
			
		||||
    
 | 
			
		||||
    public boolean checkCommand(List<String> list, String cmd) {
 | 
			
		||||
        for (String identifier : list) {
 | 
			
		||||
            if (("/" + identifier).equals(cmd) || ("//" + identifier).equals(cmd) || ("/worldedit:/" + identifier).equals(cmd) || ("/worldedit:" + identifier).equals(cmd)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public String reduceCmd(String cmd, boolean single) {
 | 
			
		||||
        if (cmd.startsWith("/worldedit:/")) {
 | 
			
		||||
            return cmd.substring(12);
 | 
			
		||||
        }
 | 
			
		||||
        if (cmd.startsWith("/worldedit:")) {
 | 
			
		||||
            return cmd.substring(11);
 | 
			
		||||
        }
 | 
			
		||||
        if (cmd.startsWith("//")) {
 | 
			
		||||
            return cmd.substring(2);
 | 
			
		||||
        }
 | 
			
		||||
        if (single && cmd.startsWith("/")) {
 | 
			
		||||
            return cmd.substring(1);
 | 
			
		||||
        }
 | 
			
		||||
        return cmd;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public int getInt(String s) {
 | 
			
		||||
        try {
 | 
			
		||||
            int max = 0;
 | 
			
		||||
            String[] split = s.split(",");
 | 
			
		||||
            for (String rad : split) {
 | 
			
		||||
                int val = Integer.parseInt(rad);
 | 
			
		||||
                if (val > max) {
 | 
			
		||||
                    max = val;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return max;
 | 
			
		||||
        }
 | 
			
		||||
        catch (NumberFormatException e) {
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean checkVolume(PlotPlayer player, long volume, long max, Cancellable e) {
 | 
			
		||||
        if (volume > max) {
 | 
			
		||||
            MainUtil.sendMessage(player, C.WORLDEDIT_VOLUME.s().replaceAll("%current%", volume + "").replaceAll("%max%", max + ""));
 | 
			
		||||
            e.setCancelled(true);
 | 
			
		||||
        }
 | 
			
		||||
        if (Permissions.hasPermission(player, "plots.worldedit.bypass")) {
 | 
			
		||||
            MainUtil.sendMessage(player, C.WORLDEDIT_BYPASS);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean checkSelection(Player p, PlotPlayer pp, int modifier, long max, Cancellable e) {
 | 
			
		||||
        final Selection selection = PS.get().worldEdit.getSelection(p);
 | 
			
		||||
        if (selection == null) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        final BlockVector pos1 = selection.getNativeMinimumPoint().toBlockVector();
 | 
			
		||||
        final BlockVector pos2 = selection.getNativeMaximumPoint().toBlockVector();
 | 
			
		||||
        HashSet<RegionWrapper> mask = WEManager.getMask(pp);
 | 
			
		||||
        RegionWrapper region = new RegionWrapper(pos1.getBlockX(), pos2.getBlockX(), pos1.getBlockZ(), pos2.getBlockZ());
 | 
			
		||||
        if (Settings.REQUIRE_SELECTION) {
 | 
			
		||||
            String arg = null;
 | 
			
		||||
            if (!WEManager.regionContains(region, mask)) {
 | 
			
		||||
                arg = "pos1 + pos2";
 | 
			
		||||
            }
 | 
			
		||||
            else if (!WEManager.maskContains(mask, pos1.getBlockX(), pos1.getBlockZ())) {
 | 
			
		||||
                arg = "pos1";
 | 
			
		||||
            }
 | 
			
		||||
            else if (!WEManager.maskContains(mask, pos2.getBlockX(), pos2.getBlockZ())) {
 | 
			
		||||
                arg = "pos2";
 | 
			
		||||
            }
 | 
			
		||||
            if (arg != null) {
 | 
			
		||||
                e.setCancelled(true);
 | 
			
		||||
                MainUtil.sendMessage(pp, C.REQUIRE_SELECTION_IN_MASK, arg);
 | 
			
		||||
                if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) {
 | 
			
		||||
                    MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASS);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (!WEManager.regionContains(region, mask)) {
 | 
			
		||||
                MainUtil.sendMessage(pp, C.REQUIRE_SELECTION_IN_MASK, "pos1 + pos2");
 | 
			
		||||
                e.setCancelled(true);
 | 
			
		||||
                if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) {
 | 
			
		||||
                    MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASS);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        long volume = Math.abs((pos1.getBlockX() - pos2.getBlockX()) * (pos1.getBlockY() - pos2.getBlockY()) * (pos1.getBlockZ() - pos2.getBlockZ())) * modifier;
 | 
			
		||||
        return checkVolume(pp, volume, max, e);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
 | 
			
		||||
    public boolean onPlayerCommand(final PlayerCommandPreprocessEvent e) {
 | 
			
		||||
        final Player p = e.getPlayer();
 | 
			
		||||
        final PlotPlayer pp = BukkitUtil.getPlayer(p);
 | 
			
		||||
        if (!PS.get().isPlotWorld(p.getWorld().getName())) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        String cmd = e.getMessage().toLowerCase();
 | 
			
		||||
        boolean single = true;
 | 
			
		||||
        String[] split = cmd.split(" ");
 | 
			
		||||
        
 | 
			
		||||
        long maxVolume = Settings.WE_MAX_VOLUME;
 | 
			
		||||
        long maxIterations = Settings.WE_MAX_ITERATIONS;
 | 
			
		||||
        
 | 
			
		||||
        if (WEManager.bypass.contains(pp.getName())) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (split.length >= 2) {
 | 
			
		||||
            String reduced = reduceCmd(split[0], single);
 | 
			
		||||
            String reduced2 = reduceCmd(split[0] + " " + split[1], single);
 | 
			
		||||
            if (rad1.contains(reduced)) {
 | 
			
		||||
                long volume = getInt(split[1]) * 256;
 | 
			
		||||
                return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
            }
 | 
			
		||||
            if (rad2.contains(reduced)) {
 | 
			
		||||
                if (split.length >= 3) {
 | 
			
		||||
                    long volume = getInt(split[2]) * 256;
 | 
			
		||||
                    return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (rad2_1.contains(reduced)) {
 | 
			
		||||
                if (split.length >= 4) {
 | 
			
		||||
                    long volume = getInt(split[2]) * getInt(split[3]);
 | 
			
		||||
                    return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (rad2_2.contains(reduced)) {
 | 
			
		||||
                if (split.length >= 3) {
 | 
			
		||||
                    long radius = getInt(split[2]);
 | 
			
		||||
                    long volume = radius * radius;
 | 
			
		||||
                    return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (rad2_3.contains(reduced2)) {
 | 
			
		||||
                if (split.length >= 3) {
 | 
			
		||||
                    if (split.length == 4) {
 | 
			
		||||
                        int iterations = getInt(split[3]);
 | 
			
		||||
                        if (iterations > maxIterations) {
 | 
			
		||||
                            MainUtil.sendMessage(pp, C.WORLDEDIT_ITERATIONS.s().replaceAll("%current%", iterations + "").replaceAll("%max%", maxIterations + ""));
 | 
			
		||||
                            e.setCancelled(true);
 | 
			
		||||
                            if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) {
 | 
			
		||||
                                MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASS);
 | 
			
		||||
                            }
 | 
			
		||||
                            return true;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    long radius = getInt(split[2]);
 | 
			
		||||
                    long volume = radius * radius;
 | 
			
		||||
                    return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (rad3_1.contains(reduced2)) {
 | 
			
		||||
                if (split.length >= 3) {
 | 
			
		||||
                    int i = 2;
 | 
			
		||||
                    if (split[i].equalsIgnoreCase("-h")) {
 | 
			
		||||
                        i = 3;
 | 
			
		||||
                    }
 | 
			
		||||
                    long radius = getInt(split[i]);
 | 
			
		||||
                    long volume = radius * radius;
 | 
			
		||||
                    return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (rad3_2.contains(reduced2)) {
 | 
			
		||||
                if (split.length >= 4) {
 | 
			
		||||
                    int i = 3;
 | 
			
		||||
                    if (split[i].equalsIgnoreCase("-h")) {
 | 
			
		||||
                        i = 4;
 | 
			
		||||
                    }
 | 
			
		||||
                    long radius = getInt(split[i]);
 | 
			
		||||
                    long volume = radius * radius;
 | 
			
		||||
                    return checkVolume(pp, volume, maxVolume, e);
 | 
			
		||||
                }
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            if (regionExtend.contains(reduced)) {
 | 
			
		||||
                return checkSelection(p, pp, getInt(split[1]), maxVolume, e);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        String reduced = reduceCmd(split[0], single);
 | 
			
		||||
        if (Settings.WE_BLACKLIST.contains(reduced)) {
 | 
			
		||||
            MainUtil.sendMessage(pp, C.WORLDEDIT_UNSAFE);
 | 
			
		||||
            e.setCancelled(true);
 | 
			
		||||
            if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) {
 | 
			
		||||
                MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASS);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (restricted.contains(reduced)) {
 | 
			
		||||
            Plot plot = MainUtil.getPlot(pp.getLocation());
 | 
			
		||||
            if (plot != null && plot.isAdded(pp.getUUID())) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            e.setCancelled(true);
 | 
			
		||||
            MainUtil.sendMessage(pp, C.NO_PLOT_PERMS);
 | 
			
		||||
            if (Permissions.hasPermission(pp, "plots.worldedit.bypass")) {
 | 
			
		||||
                MainUtil.sendMessage(pp, C.WORLDEDIT_BYPASS);
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (region.contains(reduced)) {
 | 
			
		||||
            return checkSelection(p, pp, 1, maxVolume, e);
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,56 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners.worldedit;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Location;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
 | 
			
		||||
public class WEManager {
 | 
			
		||||
    public static HashSet<String> bypass = new HashSet<>();
 | 
			
		||||
    
 | 
			
		||||
    public static boolean maskContains(HashSet<RegionWrapper> mask, int x, int z) {
 | 
			
		||||
        for (RegionWrapper region : mask) {
 | 
			
		||||
            if ((x >= region.minX) && (x <= region.maxX) && (z >= region.minZ) && (z <= region.maxZ)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static HashSet<RegionWrapper> getMask(PlotPlayer player) {
 | 
			
		||||
        HashSet<RegionWrapper> regions = new HashSet<>();
 | 
			
		||||
        UUID uuid = player.getUUID();
 | 
			
		||||
        for (Plot plot : PS.get().getPlots(player.getLocation().getWorld()).values()) {
 | 
			
		||||
            if (!plot.getMerged(0) && !plot.getMerged(3)) {
 | 
			
		||||
                if (Settings.WE_ALLOW_HELPER ? plot.isAdded(uuid) : (plot.isOwner(uuid) || plot.getTrusted().contains(uuid))) {
 | 
			
		||||
                    Location pos1 = MainUtil.getPlotBottomLoc(plot.world, plot.id).add(1, 0, 1);
 | 
			
		||||
                    Location pos2 = MainUtil.getPlotTopLoc(plot.world, plot.id);
 | 
			
		||||
                    regions.add(new RegionWrapper(pos1.getX(), pos2.getX(), pos1.getZ(), pos2.getZ()));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return regions;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static boolean intersects(RegionWrapper region1, RegionWrapper region2) {
 | 
			
		||||
        if ((region1.minX <= region2.maxX) && (region1.maxX >= region2.minX) && (region1.minZ <= region2.maxZ) && (region1.maxZ >= region2.minZ)) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static boolean regionContains(RegionWrapper selection, HashSet<RegionWrapper> mask) {
 | 
			
		||||
        for (RegionWrapper region : mask) {
 | 
			
		||||
            if (intersects(region, selection)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.listeners.worldedit;
 | 
			
		||||
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RegionWrapper;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.Permissions;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.sk89q.worldedit.event.extent.EditSessionEvent;
 | 
			
		||||
import com.sk89q.worldedit.extension.platform.Actor;
 | 
			
		||||
import com.sk89q.worldedit.util.eventbus.EventHandler.Priority;
 | 
			
		||||
import com.sk89q.worldedit.util.eventbus.Subscribe;
 | 
			
		||||
 | 
			
		||||
public class WESubscriber {
 | 
			
		||||
    @Subscribe(priority=Priority.VERY_EARLY)
 | 
			
		||||
    public void onEditSession(EditSessionEvent event) {
 | 
			
		||||
        String world = event.getWorld().getName();
 | 
			
		||||
        if (!PS.get().isPlotWorld(world)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        Actor actor = event.getActor();
 | 
			
		||||
        if (actor != null && actor.isPlayer()) {
 | 
			
		||||
            String name = actor.getName();
 | 
			
		||||
            if (WEManager.bypass.contains(name)) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            PlotPlayer player = UUIDHandler.getPlayer(actor.getName());
 | 
			
		||||
            HashSet<RegionWrapper> mask = WEManager.getMask(player);
 | 
			
		||||
            if (mask.size() == 0) {
 | 
			
		||||
                if (Permissions.hasPermission(player, "plots.worldedit.bypass")) {
 | 
			
		||||
                    MainUtil.sendMessage(player, C.WORLDEDIT_BYPASS);
 | 
			
		||||
                }
 | 
			
		||||
                event.setExtent(new NullExtent());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (Settings.CHUNK_PROCESSOR) {
 | 
			
		||||
                event.setExtent(new ProcessedWEExtent(mask, event.getExtent()));
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                event.setExtent(new WEExtent(mask, event.getExtent()));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,100 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Wrapper class for blocks, using pure data rather than the object.
 | 
			
		||||
 * 
 | 
			
		||||
 * Useful for NMS
 | 
			
		||||
 *
 | 
			
		||||
 * @author Empire92
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class BlockWrapper {
 | 
			
		||||
    /**
 | 
			
		||||
     * X Coordinate
 | 
			
		||||
     */
 | 
			
		||||
    public final int x;
 | 
			
		||||
    /**
 | 
			
		||||
     * Y Coordinate
 | 
			
		||||
     */
 | 
			
		||||
    public final int y;
 | 
			
		||||
    /**
 | 
			
		||||
     * Z Coordinate
 | 
			
		||||
     */
 | 
			
		||||
    public final int z;
 | 
			
		||||
    /**
 | 
			
		||||
     * Block ID
 | 
			
		||||
     */
 | 
			
		||||
    public final int id;
 | 
			
		||||
    /**
 | 
			
		||||
     * Block Data Value
 | 
			
		||||
     */
 | 
			
		||||
    public final byte data;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @param x    X Loc Value
 | 
			
		||||
     * @param y    Y Loc Value
 | 
			
		||||
     * @param z    Z Loc Value
 | 
			
		||||
     * @param id   Material ID
 | 
			
		||||
     * @param data Data Value
 | 
			
		||||
     */
 | 
			
		||||
    public BlockWrapper(final int x, final int y, final int z, final short id, final byte data) {
 | 
			
		||||
        this.x = x;
 | 
			
		||||
        this.y = y;
 | 
			
		||||
        this.z = z;
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.data = data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Alternative Constructor Uses block data, rather than typed data
 | 
			
		||||
     *
 | 
			
		||||
     * @param block Block from which we get the data
 | 
			
		||||
     */
 | 
			
		||||
    @SuppressWarnings({ "deprecation", "unused" })
 | 
			
		||||
    public BlockWrapper(final Block block) {
 | 
			
		||||
        this.x = block.getX();
 | 
			
		||||
        this.y = block.getY();
 | 
			
		||||
        this.z = block.getZ();
 | 
			
		||||
        this.id = block.getTypeId();
 | 
			
		||||
        this.data = block.getData();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a block based on the block wrapper
 | 
			
		||||
     *
 | 
			
		||||
     * @param world World in which the block is/will be, located
 | 
			
		||||
     *
 | 
			
		||||
     * @return block created/fetched from settings
 | 
			
		||||
     */
 | 
			
		||||
    @SuppressWarnings({ "unused", "deprecation" })
 | 
			
		||||
    public Block toBlock(final World world) {
 | 
			
		||||
        final Block block = world.getBlockAt(this.x, this.y, this.z);
 | 
			
		||||
        block.setTypeIdAndData(this.id, this.data, true);
 | 
			
		||||
        return block;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,138 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
 | 
			
		||||
public class BukkitLazyBlock extends LazyBlock {
 | 
			
		||||
 | 
			
		||||
    private int id = -1;
 | 
			
		||||
    private Block block;
 | 
			
		||||
    private PlotBlock pb;
 | 
			
		||||
    
 | 
			
		||||
    
 | 
			
		||||
    public BukkitLazyBlock(int id, Block block) {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.block = block;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public BukkitLazyBlock(PlotBlock pb) {
 | 
			
		||||
        this.id = pb.id;
 | 
			
		||||
        this.pb = pb;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public BukkitLazyBlock(Block block) {
 | 
			
		||||
        this.block = block;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public PlotBlock getPlotBlock() {
 | 
			
		||||
        if (pb != null) {
 | 
			
		||||
            return pb;
 | 
			
		||||
        }
 | 
			
		||||
        if (id == -1 ) {
 | 
			
		||||
            id = block.getTypeId();
 | 
			
		||||
        }
 | 
			
		||||
        byte data;
 | 
			
		||||
        switch(id) {
 | 
			
		||||
            case 0:
 | 
			
		||||
            case 2:
 | 
			
		||||
            case 4:
 | 
			
		||||
            case 13:
 | 
			
		||||
            case 14:
 | 
			
		||||
            case 15:
 | 
			
		||||
            case 20:
 | 
			
		||||
            case 21:
 | 
			
		||||
            case 22:
 | 
			
		||||
            case 24:
 | 
			
		||||
            case 25:
 | 
			
		||||
            case 30:
 | 
			
		||||
            case 32:
 | 
			
		||||
            case 37:
 | 
			
		||||
            case 39:
 | 
			
		||||
            case 40:
 | 
			
		||||
            case 41:
 | 
			
		||||
            case 42:
 | 
			
		||||
            case 45:
 | 
			
		||||
            case 46:
 | 
			
		||||
            case 47:
 | 
			
		||||
            case 48:
 | 
			
		||||
            case 49:
 | 
			
		||||
            case 50:
 | 
			
		||||
            case 51:
 | 
			
		||||
            case 52:
 | 
			
		||||
            case 54:
 | 
			
		||||
            case 55:
 | 
			
		||||
            case 56:
 | 
			
		||||
            case 57:
 | 
			
		||||
            case 58:
 | 
			
		||||
            case 60:
 | 
			
		||||
            case 61:
 | 
			
		||||
            case 62:
 | 
			
		||||
            case 7:
 | 
			
		||||
            case 8:
 | 
			
		||||
            case 9:
 | 
			
		||||
            case 10:
 | 
			
		||||
            case 11:
 | 
			
		||||
            case 73:
 | 
			
		||||
            case 74:
 | 
			
		||||
            case 75:
 | 
			
		||||
            case 76:
 | 
			
		||||
            case 78:
 | 
			
		||||
            case 79:
 | 
			
		||||
            case 80:
 | 
			
		||||
            case 81:
 | 
			
		||||
            case 82:
 | 
			
		||||
            case 83:
 | 
			
		||||
            case 84:
 | 
			
		||||
            case 85:
 | 
			
		||||
            case 87:
 | 
			
		||||
            case 88:
 | 
			
		||||
            case 101:
 | 
			
		||||
            case 102:
 | 
			
		||||
            case 103:
 | 
			
		||||
            case 110:
 | 
			
		||||
            case 112:
 | 
			
		||||
            case 113:
 | 
			
		||||
            case 117:
 | 
			
		||||
            case 121:
 | 
			
		||||
            case 122:
 | 
			
		||||
            case 123:
 | 
			
		||||
            case 124:
 | 
			
		||||
            case 129:
 | 
			
		||||
            case 133:
 | 
			
		||||
            case 138:
 | 
			
		||||
            case 137:
 | 
			
		||||
            case 140:
 | 
			
		||||
            case 165:
 | 
			
		||||
            case 166:
 | 
			
		||||
            case 169:
 | 
			
		||||
            case 170:
 | 
			
		||||
            case 172:
 | 
			
		||||
            case 173:
 | 
			
		||||
            case 174:
 | 
			
		||||
            case 176:
 | 
			
		||||
            case 177:
 | 
			
		||||
            case 181:
 | 
			
		||||
            case 182:
 | 
			
		||||
            case 188:
 | 
			
		||||
            case 189:
 | 
			
		||||
            case 190:
 | 
			
		||||
            case 191:
 | 
			
		||||
            case 192:
 | 
			
		||||
                data = 0;
 | 
			
		||||
            default:
 | 
			
		||||
                data = block.getData();
 | 
			
		||||
        }
 | 
			
		||||
        pb = new PlotBlock((short) id, data);
 | 
			
		||||
        return pb;
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public int getId() {
 | 
			
		||||
        if (id == -1) {
 | 
			
		||||
            id = block.getTypeId();
 | 
			
		||||
        }
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.OfflinePlayer;
 | 
			
		||||
 | 
			
		||||
public class BukkitOfflinePlayer implements OfflinePlotPlayer {
 | 
			
		||||
    
 | 
			
		||||
    public final OfflinePlayer player;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Please do not use this method. Instead use BukkitUtil.getPlayer(Player), as it caches player objects.
 | 
			
		||||
     * @param player
 | 
			
		||||
     */
 | 
			
		||||
    public BukkitOfflinePlayer(final OfflinePlayer player) {
 | 
			
		||||
        this.player = player;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public UUID getUUID() {
 | 
			
		||||
        return this.player.getUniqueId();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public long getLastPlayed() {
 | 
			
		||||
        return this.player.getLastPlayed();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isOnline() {
 | 
			
		||||
        return this.player.isOnline();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        return this.player.getName();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,191 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.permissions.Permission;
 | 
			
		||||
import org.bukkit.permissions.PermissionDefault;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.util.EconHandler;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class BukkitPlayer implements PlotPlayer {
 | 
			
		||||
    
 | 
			
		||||
    public final Player player;
 | 
			
		||||
    UUID uuid;
 | 
			
		||||
    String name;
 | 
			
		||||
    private int op = 0;
 | 
			
		||||
    private long last = 0;
 | 
			
		||||
    public HashSet<String> hasPerm = new HashSet<>();
 | 
			
		||||
    public HashSet<String> noPerm = new HashSet<>();
 | 
			
		||||
    
 | 
			
		||||
    private HashMap<String, Object> meta;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Please do not use this method. Instead use BukkitUtil.getPlayer(Player), as it caches player objects.
 | 
			
		||||
     * @param player
 | 
			
		||||
     */
 | 
			
		||||
    public BukkitPlayer(final Player player) {
 | 
			
		||||
        this.player = player;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public long getPreviousLogin() {
 | 
			
		||||
        if (last == 0) {
 | 
			
		||||
            last = player.getLastPlayed();
 | 
			
		||||
        }
 | 
			
		||||
        return last;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Location getLocation() {
 | 
			
		||||
        return BukkitUtil.getLocation(this.player);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public UUID getUUID() {
 | 
			
		||||
        if (this.uuid == null) {
 | 
			
		||||
            this.uuid = UUIDHandler.getUUID(this);
 | 
			
		||||
        }
 | 
			
		||||
        return this.uuid;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean hasPermission(final String perm) {
 | 
			
		||||
        if (Settings.PERMISSION_CACHING) {
 | 
			
		||||
            if (this.noPerm.contains(perm)) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            if (this.hasPerm.contains(perm)) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            final boolean result = this.player.hasPermission(perm);
 | 
			
		||||
            if (!result) {
 | 
			
		||||
                this.noPerm.add(perm);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            this.hasPerm.add(perm);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return this.player.hasPermission(perm);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void sendMessage(final String message) {
 | 
			
		||||
        this.player.sendMessage(message);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void teleport(final Location loc) {
 | 
			
		||||
        this.player.teleport(new org.bukkit.Location(BukkitUtil.getWorld(loc.getWorld()), loc.getX() + 0.5, loc.getY(), loc.getZ() + 0.5, loc.getYaw(), loc.getPitch()));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isOp() {
 | 
			
		||||
        if (this.op != 0) {
 | 
			
		||||
            if (this.op == 1) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        final boolean result = this.player.isOp();
 | 
			
		||||
        if (!result) {
 | 
			
		||||
            this.op = 1;
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        this.op = 2;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getName() {
 | 
			
		||||
        if (this.name == null) {
 | 
			
		||||
            this.name = this.player.getName();
 | 
			
		||||
        }
 | 
			
		||||
        return this.name;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isOnline() {
 | 
			
		||||
        return this.player.isOnline();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setCompassTarget(final Location loc) {
 | 
			
		||||
        this.player.setCompassTarget(new org.bukkit.Location(BukkitUtil.getWorld(loc.getWorld()), loc.getX(), loc.getY(), loc.getZ()));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Location getLocationFull() {
 | 
			
		||||
        return BukkitUtil.getLocationFull(this.player);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setMeta(String key, Object value) {
 | 
			
		||||
        if (this.meta == null) {
 | 
			
		||||
            this.meta = new HashMap<String, Object>();
 | 
			
		||||
        }
 | 
			
		||||
        this.meta.put(key, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Object getMeta(String key) {
 | 
			
		||||
        if (this.meta != null) {
 | 
			
		||||
            return this.meta.get(key);
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void deleteMeta(String key) {
 | 
			
		||||
        if (this.meta != null) {
 | 
			
		||||
            this.meta.remove(key);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return getName();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void setAttribute(String key) {
 | 
			
		||||
        key = "plotsquared_user_attributes." + key;
 | 
			
		||||
        EconHandler.manager.setPermission(this, key, true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean getAttribute(String key) {
 | 
			
		||||
        key = "plotsquared_user_attributes." + key;
 | 
			
		||||
        Permission perm = Bukkit.getServer().getPluginManager().getPermission(key);
 | 
			
		||||
        if (perm == null) {
 | 
			
		||||
            perm = new Permission(key, PermissionDefault.FALSE);
 | 
			
		||||
            Bukkit.getServer().getPluginManager().addPermission(perm);
 | 
			
		||||
            Bukkit.getServer().getPluginManager().recalculatePermissionDefaults(perm);
 | 
			
		||||
        }
 | 
			
		||||
        return player.hasPermission(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void removeAttribute(String key) {
 | 
			
		||||
        key = "plotsquared_user_attributes." + key;
 | 
			
		||||
        EconHandler.manager.setPermission(this, key, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void loadData() {
 | 
			
		||||
        if (!player.isOnline()) {
 | 
			
		||||
            player.loadData();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void saveData() {
 | 
			
		||||
        player.saveData();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,86 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.inventory.Inventory;
 | 
			
		||||
import org.bukkit.inventory.InventoryHolder;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.inventory.meta.ItemMeta;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Created 2014-11-18 for PlotSquared
 | 
			
		||||
 *
 | 
			
		||||
 * @author Citymonstret
 | 
			
		||||
 */
 | 
			
		||||
public class InfoInventory implements InventoryHolder {
 | 
			
		||||
    private final Plot plot;
 | 
			
		||||
    private final Inventory inventory;
 | 
			
		||||
    private final Player player;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
     *
 | 
			
		||||
     * @param plot from which we take information
 | 
			
		||||
     */
 | 
			
		||||
    public InfoInventory(final Plot plot, final PlotPlayer plr) {
 | 
			
		||||
        this.plot = plot;
 | 
			
		||||
        this.player = ((BukkitPlayer) plr).player;
 | 
			
		||||
        this.inventory = Bukkit.createInventory(this, 9, "Plot: " + plot.id.toString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Inventory getInventory() {
 | 
			
		||||
        return this.inventory;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getName(final UUID uuid) {
 | 
			
		||||
        final String name = UUIDHandler.getName(this.plot.owner);
 | 
			
		||||
        if (name == null) {
 | 
			
		||||
            return "unknown";
 | 
			
		||||
        }
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public InfoInventory build() {
 | 
			
		||||
        final UUID uuid = UUIDHandler.getUUID(BukkitUtil.getPlayer(this.player));
 | 
			
		||||
        final ItemStack generalInfo = getItem(Material.EMERALD, "&cPlot Info", "&cID: &6" + this.plot.getId().toString(), "&cOwner: &6" + getName(this.plot.owner), "&cAlias: &6" + this.plot.getSettings().getAlias(), "&cBiome: &6" + this.plot.getSettings().getBiome().toString().replaceAll("_", "").toLowerCase(), "&cCan Build: &6" + this.plot.isAdded(uuid), "&cIs Denied: &6" + this.plot.isDenied(uuid));
 | 
			
		||||
        final ItemStack trusted = getItem(Material.EMERALD, "&cTrusted", "&cAmount: &6" + this.plot.getTrusted().size(), "&8Click to view a list of the trusted users");
 | 
			
		||||
        final ItemStack members = getItem(Material.EMERALD, "&cMembers", "&cAmount: &6" + this.plot.getMembers().size(), "&8Click to view a list of plot members");
 | 
			
		||||
        final ItemStack denied = getItem(Material.EMERALD, "&cDenied", "&cAmount: &6" + this.plot.getDenied().size(), "&8Click to view a list of denied players");
 | 
			
		||||
        final ItemStack flags = getItem(Material.EMERALD, "&cFlags", "&cAmount: &6" + this.plot.getSettings().flags.size(), "&8Click to view a list of plot flags");
 | 
			
		||||
        this.inventory.setItem(2, generalInfo);
 | 
			
		||||
        this.inventory.setItem(3, trusted);
 | 
			
		||||
        this.inventory.setItem(4, members);
 | 
			
		||||
        this.inventory.setItem(5, denied);
 | 
			
		||||
        this.inventory.setItem(6, flags);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public InfoInventory display() {
 | 
			
		||||
        this.player.closeInventory();
 | 
			
		||||
        this.player.openInventory(this.inventory);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ItemStack getItem(final Material material, final String name, final String... lore) {
 | 
			
		||||
        final ItemStack stack = new ItemStack(material);
 | 
			
		||||
        final ItemMeta meta = stack.getItemMeta();
 | 
			
		||||
        meta.setDisplayName(ChatColor.translateAlternateColorCodes('&', name));
 | 
			
		||||
        final List<String> lList = new ArrayList<>();
 | 
			
		||||
        for (final String l : lore) {
 | 
			
		||||
            lList.add(ChatColor.translateAlternateColorCodes('&', l));
 | 
			
		||||
        }
 | 
			
		||||
        meta.setLore(lList);
 | 
			
		||||
        stack.setItemMeta(meta);
 | 
			
		||||
        return stack;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,256 +0,0 @@
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// PlotSquared - A plot manager and world generator for the Bukkit API                             /
 | 
			
		||||
// Copyright (c) 2014 IntellectualSites/IntellectualCrafters                                       /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is free software; you can redistribute it and/or modify                            /
 | 
			
		||||
// it under the terms of the GNU General Public License as published by                            /
 | 
			
		||||
// the Free Software Foundation; either version 3 of the License, or                               /
 | 
			
		||||
// (at your option) any later version.                                                             /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// This program is distributed in the hope that it will be useful,                                 /
 | 
			
		||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                  /
 | 
			
		||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                   /
 | 
			
		||||
// GNU General Public License for more details.                                                    /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You should have received a copy of the GNU General Public License                               /
 | 
			
		||||
// along with this program; if not, write to the Free Software Foundation,                         /
 | 
			
		||||
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA                               /
 | 
			
		||||
//                                                                                                 /
 | 
			
		||||
// You can contact us via: support@intellectualsites.com                                           /
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.Biome;
 | 
			
		||||
import org.bukkit.generator.BlockPopulator;
 | 
			
		||||
import org.bukkit.generator.ChunkGenerator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
import com.intellectualcrafters.plot.listeners.WorldEvents;
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
 | 
			
		||||
public abstract class PlotGenerator extends ChunkGenerator {
 | 
			
		||||
 | 
			
		||||
    public static short[][][] CACHE_I = null;
 | 
			
		||||
    public static short[][][] CACHE_J = null;
 | 
			
		||||
    public int X;
 | 
			
		||||
    public int Z;
 | 
			
		||||
    private boolean loaded = false;
 | 
			
		||||
    private short[][] result;
 | 
			
		||||
    private PseudoRandom random = new PseudoRandom();
 | 
			
		||||
    
 | 
			
		||||
    public PlotGenerator(String world) {
 | 
			
		||||
        WorldEvents.lastWorld = world;
 | 
			
		||||
        initCache();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void initCache() {
 | 
			
		||||
        if (CACHE_I == null) {
 | 
			
		||||
            CACHE_I = new short[256][16][16];
 | 
			
		||||
            CACHE_J = new short[256][16][16];
 | 
			
		||||
            for (int x = 0; x < 16; x++) {
 | 
			
		||||
                for (int z = 0; z < 16; z++) {
 | 
			
		||||
                    for (int y = 0; y < 256; y++) {
 | 
			
		||||
                        short i = (short) (y >> 4);
 | 
			
		||||
                        short j = (short) (((y & 0xF) << 8) | (z << 4) | x);
 | 
			
		||||
                        CACHE_I[y][x][z] = i;
 | 
			
		||||
                        CACHE_J[y][x][z] = j;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("unchecked")
 | 
			
		||||
    @Override
 | 
			
		||||
    public List<BlockPopulator> getDefaultPopulators(World world) {
 | 
			
		||||
        try {
 | 
			
		||||
            if (!loaded) {
 | 
			
		||||
                PS.get().loadWorld(WorldEvents.getName(world), this);
 | 
			
		||||
                PlotWorld plotworld = PS.get().getPlotWorld(WorldEvents.getName(world));
 | 
			
		||||
                if (!plotworld.MOB_SPAWNING) {
 | 
			
		||||
                    if (!plotworld.SPAWN_EGGS) {
 | 
			
		||||
                        world.setSpawnFlags(false, false);
 | 
			
		||||
                    }
 | 
			
		||||
                    world.setAmbientSpawnLimit(0);
 | 
			
		||||
                    world.setAnimalSpawnLimit(0);
 | 
			
		||||
                    world.setMonsterSpawnLimit(0);
 | 
			
		||||
                    world.setWaterAnimalSpawnLimit(0);
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    world.setSpawnFlags(true, true);
 | 
			
		||||
                    world.setAmbientSpawnLimit(-1);
 | 
			
		||||
                    world.setAnimalSpawnLimit(-1);
 | 
			
		||||
                    world.setMonsterSpawnLimit(-1);
 | 
			
		||||
                    world.setWaterAnimalSpawnLimit(-1);
 | 
			
		||||
                }
 | 
			
		||||
                loaded = true;
 | 
			
		||||
                return (List<BlockPopulator>)(List<?>) getPopulators(WorldEvents.getName(world));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        return new ArrayList<BlockPopulator>();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the result;
 | 
			
		||||
     * @param result
 | 
			
		||||
     */
 | 
			
		||||
    public void setResult(short[][] result) {
 | 
			
		||||
        this.result = result;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public short[][] generateExtBlockSections(World world, Random r, int cx, int cz, BiomeGrid biomes) {
 | 
			
		||||
        try {
 | 
			
		||||
            if (!loaded) {
 | 
			
		||||
                PS.get().loadWorld(WorldEvents.getName(world), this);
 | 
			
		||||
                loaded = true;
 | 
			
		||||
            }
 | 
			
		||||
            final int prime = 13;
 | 
			
		||||
            int h = 1;
 | 
			
		||||
            h = (prime * h) + cx;
 | 
			
		||||
            h = (prime * h) + cz;
 | 
			
		||||
            this.random.state = h;
 | 
			
		||||
            this.result = new short[16][];
 | 
			
		||||
            this.X = cx << 4;
 | 
			
		||||
            this.Z = cz << 4;
 | 
			
		||||
            if (ChunkManager.FORCE_PASTE) {
 | 
			
		||||
                PlotWorld plotworld = PS.get().getPlotWorld(world.getName());
 | 
			
		||||
                Biome biome = Biome.valueOf(plotworld.PLOT_BIOME);
 | 
			
		||||
                for (short x = 0; x < 16; x++) {
 | 
			
		||||
                    for (short z = 0; z < 16; z++) {
 | 
			
		||||
                        if (biomes != null) {
 | 
			
		||||
                            biomes.setBiome(x, z, biome);
 | 
			
		||||
                        }
 | 
			
		||||
                        final PlotLoc loc = new PlotLoc((X + x), (Z + z));
 | 
			
		||||
                        final HashMap<Short, Short> blocks = ChunkManager.GENERATE_BLOCKS.get(loc);
 | 
			
		||||
                        for (final Entry<Short, Short> entry : blocks.entrySet()) {
 | 
			
		||||
                            setBlock(x, entry.getKey(), z, entry.getValue());
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                return this.result;
 | 
			
		||||
            }
 | 
			
		||||
            generateChunk(world, ChunkManager.CURRENT_PLOT_CLEAR, random, cx, cz, biomes);
 | 
			
		||||
            if (ChunkManager.CURRENT_PLOT_CLEAR != null) {
 | 
			
		||||
                PlotLoc loc;
 | 
			
		||||
                for (Entry<PlotLoc, HashMap<Short, Short>> entry : ChunkManager.GENERATE_BLOCKS.entrySet()) {
 | 
			
		||||
                    for (Entry<Short, Short> entry2 : entry.getValue().entrySet()) {
 | 
			
		||||
                        loc = entry.getKey();
 | 
			
		||||
                        int xx = loc.x - X;
 | 
			
		||||
                        int zz = loc.z - Z;
 | 
			
		||||
                        if (xx >= 0 && xx < 16) {
 | 
			
		||||
                        	if (zz >= 0 && zz < 16) {
 | 
			
		||||
                        		setBlock(xx, entry2.getKey(), zz, entry2.getValue());
 | 
			
		||||
                        	}
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e) {
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setBlock(final int x, final int y, final int z, final short blkid) {
 | 
			
		||||
        if (result[CACHE_I[y][x][z]] == null) {
 | 
			
		||||
            result[CACHE_I[y][x][z]] = new short[4096];
 | 
			
		||||
        }
 | 
			
		||||
        result[CACHE_I[y][x][z]][CACHE_J[y][x][z]] = blkid;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void setBlock(final int x, final int y, final int z, final short[] blkid) {
 | 
			
		||||
        if (blkid.length == 1) {
 | 
			
		||||
            setBlock(x, y, z, blkid[0]);
 | 
			
		||||
        }
 | 
			
		||||
        short id = blkid[random.random(blkid.length)];
 | 
			
		||||
        if (result[CACHE_I[y][x][z]] == null) {
 | 
			
		||||
            result[CACHE_I[y][x][z]] = new short[4096];
 | 
			
		||||
        }
 | 
			
		||||
        result[CACHE_I[y][x][z]][CACHE_J[y][x][z]] = id;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * check if a region contains a location. (x, z) must be between [0,15], [0,15]
 | 
			
		||||
     * @param plot
 | 
			
		||||
     * @param x
 | 
			
		||||
     * @param z
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public boolean contains(final RegionWrapper plot, final int x, final int z) {
 | 
			
		||||
        int xx = X + x;
 | 
			
		||||
        int zz = Z + z;
 | 
			
		||||
        return ((xx >= plot.minX) && (xx <= plot.maxX) && (zz >= plot.minZ) && (zz <= plot.maxZ));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Allow spawning everywhere
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean canSpawn(final World world, final int x, final int z) {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * <b>random</b> is an optimized random number generator.<br> 
 | 
			
		||||
     *  - Change the state to have the same chunk random each time it generates<br>
 | 
			
		||||
     *  <b>requiredRegion</b> If a plot is being regenerated, you are only required to generate content in this area<br>
 | 
			
		||||
     *   - use the contains(RegionWrapper, x, z) method to check if the region contains a location<br>
 | 
			
		||||
     *   - You can ignore this if you do not want to further optimize your generator<br>
 | 
			
		||||
     *   - will be null if no restrictions are set<br>
 | 
			
		||||
     *   <b>result</b> is the standard 2D block data array used for generation<br>
 | 
			
		||||
     *   <b>biomes</b> is the standard BiomeGrid used for generation
 | 
			
		||||
     * 
 | 
			
		||||
     * @param world
 | 
			
		||||
     * @param random
 | 
			
		||||
     * @param cx
 | 
			
		||||
     * @param cz
 | 
			
		||||
     * @param requiredRegion
 | 
			
		||||
     * @param biomes
 | 
			
		||||
     * @param result
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public abstract void generateChunk(final World world, RegionWrapper requiredRegion, final PseudoRandom random, final int cx, final int cz, final BiomeGrid biomes);
 | 
			
		||||
    
 | 
			
		||||
    public abstract List<PlotPopulator> getPopulators(String world);
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * This is called when the generator is initialized. 
 | 
			
		||||
     * You don't need to do anything with it necessarily.
 | 
			
		||||
     * @param plotworld
 | 
			
		||||
     */
 | 
			
		||||
    public abstract void init(PlotWorld plotworld);
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Return a new instance of the PlotWorld for a world 
 | 
			
		||||
     * @param world
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public abstract PlotWorld getNewPlotWorld(final String world);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Get the PlotManager class for this generator
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public abstract PlotManager getPlotManager();
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * If you need to do anything fancy for /plot setup<br>
 | 
			
		||||
     *  - Otherwise it will just use the PlotWorld configuration<br>
 | 
			
		||||
     * Feel free to extend BukkitSetupUtils and customize world creation
 | 
			
		||||
     * @param object
 | 
			
		||||
     */
 | 
			
		||||
    public void processSetup(SetupObject object) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -7,7 +7,7 @@ import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.database.DBFunc;
 | 
			
		||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
 | 
			
		||||
import com.plotsquared.bukkit.util.bukkit.UUIDHandler;
 | 
			
		||||
 | 
			
		||||
public class PlotHandler {
 | 
			
		||||
    public static HashSet<UUID> getOwners(Plot plot) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,108 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map.Entry;
 | 
			
		||||
import java.util.Random;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Chunk;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.generator.BlockPopulator;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.util.ChunkManager;
 | 
			
		||||
import com.intellectualcrafters.plot.util.bukkit.BukkitUtil;
 | 
			
		||||
 | 
			
		||||
public abstract class PlotPopulator extends BlockPopulator {
 | 
			
		||||
    
 | 
			
		||||
    private PseudoRandom random = new PseudoRandom();
 | 
			
		||||
    
 | 
			
		||||
    public int X;
 | 
			
		||||
    public int Z;
 | 
			
		||||
    private World world;
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public void populate(World world, Random rand, Chunk chunk) {
 | 
			
		||||
        this.world = world;
 | 
			
		||||
        this.X = chunk.getX() << 4;
 | 
			
		||||
        this.Z = chunk.getZ() << 4;
 | 
			
		||||
        if (ChunkManager.FORCE_PASTE) {
 | 
			
		||||
            for (short x = 0; x < 16; x++) {
 | 
			
		||||
                for (short z = 0; z < 16; z++) {
 | 
			
		||||
                    final PlotLoc loc = new PlotLoc((short) (X + x), (short) (Z + z));
 | 
			
		||||
                    final HashMap<Short, Byte> blocks = ChunkManager.GENERATE_DATA.get(loc);
 | 
			
		||||
                    for (final Entry<Short, Byte> entry : blocks.entrySet()) {
 | 
			
		||||
                        setBlock(x, entry.getKey(), z, entry.getValue());
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        populate(world, ChunkManager.CURRENT_PLOT_CLEAR, random, X, Z);
 | 
			
		||||
        if (ChunkManager.CURRENT_PLOT_CLEAR != null) {
 | 
			
		||||
            PlotLoc loc;
 | 
			
		||||
            for (Entry<PlotLoc, HashMap<Short, Byte>> entry : ChunkManager.GENERATE_DATA.entrySet()) {
 | 
			
		||||
                for (Entry<Short, Byte> entry2 : entry.getValue().entrySet()) {
 | 
			
		||||
                    loc = entry.getKey();
 | 
			
		||||
                    int xx = loc.x - X;
 | 
			
		||||
                    int zz = loc.z - Z;
 | 
			
		||||
                    if (xx >= 0 && xx < 16) {
 | 
			
		||||
                    	if (zz >= 0 && zz < 16) {
 | 
			
		||||
                    		setBlock(xx, entry2.getKey(), zz, entry2.getValue());
 | 
			
		||||
                    	}
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public abstract void populate(World world, RegionWrapper requiredRegion, PseudoRandom random, int cx, int cz);
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the id and data at a location. (x, y, z) must be between [0,15], [0,255], [0,15]
 | 
			
		||||
     * @param x
 | 
			
		||||
     * @param y
 | 
			
		||||
     * @param z
 | 
			
		||||
     * @param id
 | 
			
		||||
     * @param data
 | 
			
		||||
     */
 | 
			
		||||
    public void setBlock(int x, int y, int z, short id, byte data) {
 | 
			
		||||
        BukkitUtil.setBlock(world, X + x, y, Z + z, id, data);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Set the data at a location. (x, y, z) must be between [0,15], [0,255], [0,15]
 | 
			
		||||
     * @param x
 | 
			
		||||
     * @param y
 | 
			
		||||
     * @param z
 | 
			
		||||
     * @param data
 | 
			
		||||
     */
 | 
			
		||||
    public void setBlock(int x, int y, int z, byte data) {
 | 
			
		||||
        if (data != 0) {
 | 
			
		||||
            world.getBlockAt(X + x, y, Z + z).setData(data);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Like setblock, but lacks the data != 0 check
 | 
			
		||||
     * @param x
 | 
			
		||||
     * @param y
 | 
			
		||||
     * @param z
 | 
			
		||||
     * @param data
 | 
			
		||||
     */
 | 
			
		||||
    public void setBlockAbs(int x, int y, int z, byte data) {
 | 
			
		||||
        world.getBlockAt(X + x, y, Z + z).setData(data);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * check if a region contains a location. (x, z) must be between [0,15], [0,15]
 | 
			
		||||
     * @param plot
 | 
			
		||||
     * @param x
 | 
			
		||||
     * @param z
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public boolean contains(final RegionWrapper plot, final int x, final int z) {
 | 
			
		||||
        int xx = X + x;
 | 
			
		||||
        int zz = Z + z;
 | 
			
		||||
        return ((xx >= plot.minX) && (xx <= plot.maxX) && (zz >= plot.minZ) && (zz <= plot.maxZ));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.ConfigurationNode;
 | 
			
		||||
import com.intellectualcrafters.plot.util.SetupUtils;
 | 
			
		||||
import com.plotsquared.bukkit.util.SetupUtils;
 | 
			
		||||
 | 
			
		||||
public class SetupObject {
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
@@ -1,79 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object.comment;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicInteger;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.ChatColor;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.config.C;
 | 
			
		||||
import com.intellectualcrafters.plot.config.Settings;
 | 
			
		||||
import com.intellectualcrafters.plot.object.Plot;
 | 
			
		||||
import com.intellectualcrafters.plot.object.PlotPlayer;
 | 
			
		||||
import com.intellectualcrafters.plot.object.RunnableVal;
 | 
			
		||||
import com.intellectualcrafters.plot.titles.AbstractTitle;
 | 
			
		||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class CommentManager {
 | 
			
		||||
    public static HashMap<String, CommentInbox> inboxes = new HashMap<>();
 | 
			
		||||
    
 | 
			
		||||
    public static void sendTitle(final PlotPlayer player, final Plot plot) {
 | 
			
		||||
        if (!Settings.COMMENT_NOTIFICATIONS) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!plot.isOwner(player.getUUID())) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        TaskManager.runTaskLaterAsync(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                Collection<CommentInbox> boxes = CommentManager.inboxes.values();
 | 
			
		||||
                final AtomicInteger count = new AtomicInteger(0);
 | 
			
		||||
                final AtomicInteger size = new AtomicInteger(boxes.size());
 | 
			
		||||
                for (final CommentInbox inbox : inboxes.values()) {
 | 
			
		||||
                    inbox.getComments(plot, new RunnableVal() {
 | 
			
		||||
                        @Override
 | 
			
		||||
                        public void run() {
 | 
			
		||||
                            int total;
 | 
			
		||||
                            if (value != null) {
 | 
			
		||||
                                int num = 0;
 | 
			
		||||
                                for (PlotComment comment : (ArrayList<PlotComment>) value) {
 | 
			
		||||
                                    if (comment.timestamp > getTimestamp(player, inbox.toString())) {
 | 
			
		||||
                                        num++;
 | 
			
		||||
                                    }
 | 
			
		||||
                                }
 | 
			
		||||
                                total = count.addAndGet(num);
 | 
			
		||||
                            }
 | 
			
		||||
                            else {
 | 
			
		||||
                                total = count.get();
 | 
			
		||||
                            }
 | 
			
		||||
                            if (size.decrementAndGet() == 0 && total > 0) {
 | 
			
		||||
                                AbstractTitle.sendTitle(player, "", C.INBOX_NOTIFICATION.s().replaceAll("%s", "" + total), ChatColor.GOLD, ChatColor.valueOf(C.TITLE_ENTERED_PLOT_SUB_COLOR.s()));
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }, 20);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static long getTimestamp(PlotPlayer player, String inbox) {
 | 
			
		||||
        Object meta = player.getMeta("inbox:"+inbox);
 | 
			
		||||
        if (meta == null) {
 | 
			
		||||
            return player.getPreviousLogin();
 | 
			
		||||
        }
 | 
			
		||||
        return (Long) meta;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static void addInbox(CommentInbox inbox) {
 | 
			
		||||
        inboxes.put(inbox.toString().toLowerCase(), inbox);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static void registerDefaultInboxes() {
 | 
			
		||||
        addInbox(new InboxReport());
 | 
			
		||||
        addInbox(new InboxPublic());
 | 
			
		||||
        addInbox(new InboxOwner());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object.entity;
 | 
			
		||||
 | 
			
		||||
public class ArmorStandStats {
 | 
			
		||||
    float[] head = new float[3];
 | 
			
		||||
    float[] body = new float[3];
 | 
			
		||||
    float[] leftLeg = new float[3];
 | 
			
		||||
    float[] rightLeg = new float[3];
 | 
			
		||||
    float[] leftArm = new float[3];
 | 
			
		||||
    float[] rightArm = new float[3];
 | 
			
		||||
    public float[] head = new float[3];
 | 
			
		||||
    public float[] body = new float[3];
 | 
			
		||||
    public float[] leftLeg = new float[3];
 | 
			
		||||
    public float[] rightLeg = new float[3];
 | 
			
		||||
    public float[] leftArm = new float[3];
 | 
			
		||||
    public float[] rightArm = new float[3];
 | 
			
		||||
    public boolean arms;
 | 
			
		||||
    public boolean noplate;
 | 
			
		||||
    public boolean nogravity;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,7 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object.entity;
 | 
			
		||||
 | 
			
		||||
import com.plotsquared.bukkit.object.entity.EntityWrapper;
 | 
			
		||||
 | 
			
		||||
public class EntityBaseStats {
 | 
			
		||||
    public EntityWrapper passenger;
 | 
			
		||||
    public float fall;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,661 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object.entity;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Art;
 | 
			
		||||
import org.bukkit.DyeColor;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Rotation;
 | 
			
		||||
import org.bukkit.World;
 | 
			
		||||
import org.bukkit.block.BlockFace;
 | 
			
		||||
import org.bukkit.entity.Ageable;
 | 
			
		||||
import org.bukkit.entity.ArmorStand;
 | 
			
		||||
import org.bukkit.entity.Entity;
 | 
			
		||||
import org.bukkit.entity.EntityType;
 | 
			
		||||
import org.bukkit.entity.Guardian;
 | 
			
		||||
import org.bukkit.entity.Horse;
 | 
			
		||||
import org.bukkit.entity.Horse.Color;
 | 
			
		||||
import org.bukkit.entity.Horse.Style;
 | 
			
		||||
import org.bukkit.entity.Horse.Variant;
 | 
			
		||||
import org.bukkit.entity.Item;
 | 
			
		||||
import org.bukkit.entity.ItemFrame;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Painting;
 | 
			
		||||
import org.bukkit.entity.Rabbit;
 | 
			
		||||
import org.bukkit.entity.Rabbit.Type;
 | 
			
		||||
import org.bukkit.entity.Sheep;
 | 
			
		||||
import org.bukkit.entity.Skeleton;
 | 
			
		||||
import org.bukkit.entity.Skeleton.SkeletonType;
 | 
			
		||||
import org.bukkit.entity.Tameable;
 | 
			
		||||
import org.bukkit.inventory.EntityEquipment;
 | 
			
		||||
import org.bukkit.inventory.InventoryHolder;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.util.EulerAngle;
 | 
			
		||||
import org.bukkit.util.Vector;
 | 
			
		||||
 | 
			
		||||
import com.intellectualcrafters.plot.PS;
 | 
			
		||||
 | 
			
		||||
public class EntityWrapper {
 | 
			
		||||
    public short id;
 | 
			
		||||
    public float yaw;
 | 
			
		||||
    public float pitch;
 | 
			
		||||
    public double x;
 | 
			
		||||
    public double y;
 | 
			
		||||
    public double z;
 | 
			
		||||
    public short depth;
 | 
			
		||||
    public EntityBaseStats base = null;
 | 
			
		||||
    // Extended
 | 
			
		||||
    public ItemStack stack;
 | 
			
		||||
    public ItemStack[] inventory;
 | 
			
		||||
    public byte dataByte;
 | 
			
		||||
    public byte dataByte2;
 | 
			
		||||
    public String dataString;
 | 
			
		||||
    public LivingEntityStats lived;
 | 
			
		||||
    public AgeableStats aged;
 | 
			
		||||
    public TameableStats tamed;
 | 
			
		||||
    private HorseStats horse;
 | 
			
		||||
    private ArmorStandStats stand;
 | 
			
		||||
 | 
			
		||||
    public void storeInventory(final InventoryHolder held) {
 | 
			
		||||
        this.inventory = held.getInventory().getContents().clone();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void restoreLiving(final LivingEntity entity) {
 | 
			
		||||
        if (this.lived.loot) {
 | 
			
		||||
            entity.setCanPickupItems(this.lived.loot);
 | 
			
		||||
        }
 | 
			
		||||
        if (this.lived.name != null) {
 | 
			
		||||
            entity.setCustomName(this.lived.name);
 | 
			
		||||
            entity.setCustomNameVisible(this.lived.visible);
 | 
			
		||||
        }
 | 
			
		||||
        if ((this.lived.potions != null) && (this.lived.potions.size() > 0)) {
 | 
			
		||||
            entity.addPotionEffects(this.lived.potions);
 | 
			
		||||
        }
 | 
			
		||||
        entity.setRemainingAir(this.lived.air);
 | 
			
		||||
        entity.setRemoveWhenFarAway(this.lived.persistent);
 | 
			
		||||
        if (this.lived.equipped) {
 | 
			
		||||
            final EntityEquipment equipment = entity.getEquipment();
 | 
			
		||||
            equipment.setItemInHand(this.lived.hands);
 | 
			
		||||
            equipment.setHelmet(this.lived.helmet);
 | 
			
		||||
            equipment.setChestplate(this.lived.chestplate);
 | 
			
		||||
            equipment.setLeggings(this.lived.leggings);
 | 
			
		||||
            equipment.setBoots(this.lived.boots);
 | 
			
		||||
        }
 | 
			
		||||
        if (this.lived.leashed) {
 | 
			
		||||
            // TODO leashes
 | 
			
		||||
            //            World world = entity.getWorld();
 | 
			
		||||
            //            Entity leash = world.spawnEntity(new Location(world, Math.floor(x) + lived.leash_x, Math.floor(y) + lived.leash_y, Math.floor(z) + lived.leash_z), EntityType.LEASH_HITCH);
 | 
			
		||||
            //            entity.setLeashHolder(leash);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void restoreInventory(final InventoryHolder entity) {
 | 
			
		||||
        entity.getInventory().setContents(this.inventory);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void storeLiving(final LivingEntity lived) {
 | 
			
		||||
        this.lived = new LivingEntityStats();
 | 
			
		||||
        this.lived.potions = lived.getActivePotionEffects();
 | 
			
		||||
        this.lived.loot = lived.getCanPickupItems();
 | 
			
		||||
        this.lived.name = lived.getCustomName();
 | 
			
		||||
        this.lived.visible = lived.isCustomNameVisible();
 | 
			
		||||
        this.lived.health = (float) lived.getHealth();
 | 
			
		||||
        this.lived.air = (short) lived.getRemainingAir();
 | 
			
		||||
        this.lived.persistent = lived.getRemoveWhenFarAway();
 | 
			
		||||
        this.lived.leashed = lived.isLeashed();
 | 
			
		||||
        if (this.lived.leashed) {
 | 
			
		||||
            final Location loc = lived.getLeashHolder().getLocation();
 | 
			
		||||
            this.lived.leash_x = (short) (this.x - loc.getBlockX());
 | 
			
		||||
            this.lived.leash_y = (short) (this.y - loc.getBlockY());
 | 
			
		||||
            this.lived.leash_z = (short) (this.z - loc.getBlockZ());
 | 
			
		||||
        }
 | 
			
		||||
        final EntityEquipment equipment = lived.getEquipment();
 | 
			
		||||
        this.lived.equipped = equipment != null;
 | 
			
		||||
        if (this.lived.equipped) {
 | 
			
		||||
            this.lived.hands = equipment.getItemInHand().clone();
 | 
			
		||||
            this.lived.boots = equipment.getBoots().clone();
 | 
			
		||||
            this.lived.leggings = equipment.getLeggings().clone();
 | 
			
		||||
            this.lived.chestplate = equipment.getChestplate().clone();
 | 
			
		||||
            this.lived.helmet = equipment.getHelmet().clone();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void restoreTameable(final Tameable entity) {
 | 
			
		||||
        if (this.tamed.tamed) {
 | 
			
		||||
            if (this.tamed.owner != null) {
 | 
			
		||||
                entity.setTamed(true);
 | 
			
		||||
                entity.setOwner(this.tamed.owner);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void restoreAgeable(final Ageable entity) {
 | 
			
		||||
        if (!this.aged.adult) {
 | 
			
		||||
            entity.setBaby();
 | 
			
		||||
        }
 | 
			
		||||
        if (this.aged.locked) {
 | 
			
		||||
            entity.setAgeLock(this.aged.locked);
 | 
			
		||||
        }
 | 
			
		||||
        entity.setAge(this.aged.age);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void storeAgeable(final Ageable aged) {
 | 
			
		||||
        this.aged = new AgeableStats();
 | 
			
		||||
        this.aged.age = aged.getAge();
 | 
			
		||||
        this.aged.locked = aged.getAgeLock();
 | 
			
		||||
        this.aged.adult = aged.isAdult();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void storeTameable(final Tameable tamed) {
 | 
			
		||||
        this.tamed = new TameableStats();
 | 
			
		||||
        this.tamed.owner = tamed.getOwner();
 | 
			
		||||
        this.tamed.tamed = tamed.isTamed();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("deprecation")
 | 
			
		||||
    public EntityWrapper(final org.bukkit.entity.Entity entity, final short depth) {
 | 
			
		||||
        this.depth = depth;
 | 
			
		||||
        final Location loc = entity.getLocation();
 | 
			
		||||
        this.yaw = loc.getYaw();
 | 
			
		||||
        this.pitch = loc.getPitch();
 | 
			
		||||
        this.x = loc.getX();
 | 
			
		||||
        this.y = loc.getY();
 | 
			
		||||
        this.z = loc.getZ();
 | 
			
		||||
        this.id = entity.getType().getTypeId();
 | 
			
		||||
        if (depth == 0) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        this.base = new EntityBaseStats();
 | 
			
		||||
        final Entity p = entity.getPassenger();
 | 
			
		||||
        if (p != null) {
 | 
			
		||||
            this.base.passenger = new EntityWrapper(p, depth);
 | 
			
		||||
        }
 | 
			
		||||
        this.base.fall = entity.getFallDistance();
 | 
			
		||||
        this.base.fire = (short) entity.getFireTicks();
 | 
			
		||||
        this.base.age = entity.getTicksLived();
 | 
			
		||||
        final Vector velocity = entity.getVelocity();
 | 
			
		||||
        this.base.v_x = velocity.getX();
 | 
			
		||||
        this.base.v_y = velocity.getY();
 | 
			
		||||
        this.base.v_z = velocity.getZ();
 | 
			
		||||
        if (depth == 1) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        switch (entity.getType()) {
 | 
			
		||||
            case ARROW:
 | 
			
		||||
            case BOAT:
 | 
			
		||||
            case COMPLEX_PART:
 | 
			
		||||
            case EGG:
 | 
			
		||||
            case ENDER_CRYSTAL:
 | 
			
		||||
            case ENDER_PEARL:
 | 
			
		||||
            case ENDER_SIGNAL:
 | 
			
		||||
            case EXPERIENCE_ORB:
 | 
			
		||||
            case FALLING_BLOCK:
 | 
			
		||||
            case FIREBALL:
 | 
			
		||||
            case FIREWORK:
 | 
			
		||||
            case FISHING_HOOK:
 | 
			
		||||
            case LEASH_HITCH:
 | 
			
		||||
            case LIGHTNING:
 | 
			
		||||
            case MINECART:
 | 
			
		||||
            case MINECART_COMMAND:
 | 
			
		||||
            case MINECART_MOB_SPAWNER:
 | 
			
		||||
            case MINECART_TNT:
 | 
			
		||||
            case PLAYER:
 | 
			
		||||
            case PRIMED_TNT:
 | 
			
		||||
            case SLIME:
 | 
			
		||||
            case SMALL_FIREBALL:
 | 
			
		||||
            case SNOWBALL:
 | 
			
		||||
            case MINECART_FURNACE:
 | 
			
		||||
            case SPLASH_POTION:
 | 
			
		||||
            case THROWN_EXP_BOTTLE:
 | 
			
		||||
            case WEATHER:
 | 
			
		||||
            case WITHER_SKULL:
 | 
			
		||||
            case UNKNOWN: {
 | 
			
		||||
                // Do this stuff later
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            default: {
 | 
			
		||||
                PS.log("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // MISC //
 | 
			
		||||
            case DROPPED_ITEM: {
 | 
			
		||||
                final Item item = (Item) entity;
 | 
			
		||||
                this.stack = item.getItemStack();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case ITEM_FRAME: {
 | 
			
		||||
                final ItemFrame itemframe = (ItemFrame) entity;
 | 
			
		||||
                this.x = Math.floor(this.x);
 | 
			
		||||
                this.y = Math.floor(this.y);
 | 
			
		||||
                this.z = Math.floor(this.z);
 | 
			
		||||
                this.dataByte = getOrdinal(Rotation.values(), itemframe.getRotation());
 | 
			
		||||
                this.stack = itemframe.getItem().clone();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case PAINTING: {
 | 
			
		||||
                final Painting painting = (Painting) entity;
 | 
			
		||||
                this.x = Math.floor(this.x);
 | 
			
		||||
                this.y = Math.floor(this.y);
 | 
			
		||||
                this.z = Math.floor(this.z);
 | 
			
		||||
                final Art a = painting.getArt();
 | 
			
		||||
                this.dataByte = getOrdinal(BlockFace.values(), painting.getFacing());
 | 
			
		||||
                final int h = a.getBlockHeight();
 | 
			
		||||
                if ((h % 2) == 0) {
 | 
			
		||||
                    this.y -= 1;
 | 
			
		||||
                }
 | 
			
		||||
                this.dataString = a.name();
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // END MISC //
 | 
			
		||||
            // INVENTORY HOLDER //
 | 
			
		||||
            case MINECART_CHEST: {
 | 
			
		||||
                storeInventory((InventoryHolder) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case MINECART_HOPPER: {
 | 
			
		||||
                storeInventory((InventoryHolder) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // START LIVING ENTITY //
 | 
			
		||||
            // START AGEABLE //
 | 
			
		||||
            // START TAMEABLE //
 | 
			
		||||
            case HORSE: {
 | 
			
		||||
                final Horse horse = (Horse) entity;
 | 
			
		||||
                this.horse = new HorseStats();
 | 
			
		||||
                this.horse.jump = horse.getJumpStrength();
 | 
			
		||||
                this.horse.chest = horse.isCarryingChest();
 | 
			
		||||
                this.horse.variant = getOrdinal(Variant.values(), horse.getVariant());
 | 
			
		||||
                this.horse.style = getOrdinal(Style.values(), horse.getStyle());
 | 
			
		||||
                this.horse.color = getOrdinal(Color.values(), horse.getColor());
 | 
			
		||||
                storeTameable((Tameable) entity);
 | 
			
		||||
                storeAgeable((Ageable) entity);
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                storeInventory((InventoryHolder) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // END INVENTORY HOLDER //
 | 
			
		||||
            case WOLF:
 | 
			
		||||
            case OCELOT: {
 | 
			
		||||
                storeTameable((Tameable) entity);
 | 
			
		||||
                storeAgeable((Ageable) entity);
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // END AMEABLE //
 | 
			
		||||
            case SHEEP: {
 | 
			
		||||
                final Sheep sheep = (Sheep) entity;
 | 
			
		||||
                this.dataByte = (byte) ((sheep).isSheared() ? 1 : 0);
 | 
			
		||||
                this.dataByte2 = sheep.getColor().getDyeData();
 | 
			
		||||
                storeAgeable((Ageable) entity);
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case VILLAGER:
 | 
			
		||||
            case CHICKEN:
 | 
			
		||||
            case COW:
 | 
			
		||||
            case MUSHROOM_COW:
 | 
			
		||||
            case PIG: {
 | 
			
		||||
                storeAgeable((Ageable) entity);
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // END AGEABLE //
 | 
			
		||||
            case RABBIT: { // NEW
 | 
			
		||||
                this.dataByte = getOrdinal(Type.values(), ((Rabbit) entity).getRabbitType());
 | 
			
		||||
                storeAgeable((Ageable) entity);
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case GUARDIAN: { // NEW
 | 
			
		||||
                this.dataByte = (byte) (((Guardian) entity).isElder() ? 1 : 0);
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case SKELETON: { // NEW
 | 
			
		||||
                this.dataByte = (byte) ((Skeleton) entity).getSkeletonType().getId();
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case ARMOR_STAND: { // NEW
 | 
			
		||||
                // CHECK positions
 | 
			
		||||
                final ArmorStand stand = (ArmorStand) entity;
 | 
			
		||||
                this.inventory = new ItemStack[] { stand.getItemInHand().clone(), stand.getHelmet().clone(), stand.getChestplate().clone(), stand.getLeggings().clone(), stand.getBoots().clone() };
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                this.stand = new ArmorStandStats();
 | 
			
		||||
                
 | 
			
		||||
                EulerAngle head = stand.getHeadPose();
 | 
			
		||||
                this.stand.head[0] = (float) head.getX();
 | 
			
		||||
                this.stand.head[1] = (float) head.getY();
 | 
			
		||||
                this.stand.head[2] = (float) head.getZ();
 | 
			
		||||
                
 | 
			
		||||
                EulerAngle body = stand.getBodyPose();
 | 
			
		||||
                this.stand.body[0] = (float) body.getX();
 | 
			
		||||
                this.stand.body[1] = (float) body.getY();
 | 
			
		||||
                this.stand.body[2] = (float) body.getZ();
 | 
			
		||||
                
 | 
			
		||||
                EulerAngle leftLeg = stand.getLeftLegPose();
 | 
			
		||||
                this.stand.leftLeg[0] = (float) leftLeg.getX();
 | 
			
		||||
                this.stand.leftLeg[1] = (float) leftLeg.getY();
 | 
			
		||||
                this.stand.leftLeg[2] = (float) leftLeg.getZ();
 | 
			
		||||
                
 | 
			
		||||
                EulerAngle rightLeg = stand.getRightLegPose();
 | 
			
		||||
                this.stand.rightLeg[0] = (float) rightLeg.getX();
 | 
			
		||||
                this.stand.rightLeg[1] = (float) rightLeg.getY();
 | 
			
		||||
                this.stand.rightLeg[2] = (float) rightLeg.getZ();
 | 
			
		||||
                
 | 
			
		||||
                EulerAngle leftArm = stand.getLeftArmPose();
 | 
			
		||||
                this.stand.leftArm[0] = (float) leftArm.getX();
 | 
			
		||||
                this.stand.leftArm[1] = (float) leftArm.getY();
 | 
			
		||||
                this.stand.leftArm[2] = (float) leftArm.getZ();
 | 
			
		||||
 | 
			
		||||
                EulerAngle rightArm = stand.getRightArmPose();
 | 
			
		||||
                this.stand.rightArm[0] = (float) rightArm.getX();
 | 
			
		||||
                this.stand.rightArm[1] = (float) rightArm.getY();
 | 
			
		||||
                this.stand.rightArm[2] = (float) rightArm.getZ();
 | 
			
		||||
                
 | 
			
		||||
                if (stand.hasArms()) {
 | 
			
		||||
                    this.stand.arms = true;
 | 
			
		||||
                }
 | 
			
		||||
                if (!stand.hasBasePlate()) {
 | 
			
		||||
                    this.stand.noplate = true;
 | 
			
		||||
                }
 | 
			
		||||
                if (!stand.hasGravity()) {
 | 
			
		||||
                    this.stand.nogravity = true;
 | 
			
		||||
                }
 | 
			
		||||
                if (!stand.isVisible()) {
 | 
			
		||||
                    this.stand.invisible = true;
 | 
			
		||||
                }
 | 
			
		||||
                if (stand.isSmall()) {
 | 
			
		||||
                    this.stand.small = true;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            case ENDERMITE: // NEW
 | 
			
		||||
            case BAT:
 | 
			
		||||
            case ENDER_DRAGON:
 | 
			
		||||
            case GHAST:
 | 
			
		||||
            case MAGMA_CUBE:
 | 
			
		||||
            case SQUID:
 | 
			
		||||
            case PIG_ZOMBIE:
 | 
			
		||||
            case ZOMBIE:
 | 
			
		||||
            case WITHER:
 | 
			
		||||
            case WITCH:
 | 
			
		||||
            case SPIDER:
 | 
			
		||||
            case CAVE_SPIDER:
 | 
			
		||||
            case SILVERFISH:
 | 
			
		||||
            case GIANT:
 | 
			
		||||
            case ENDERMAN:
 | 
			
		||||
            case CREEPER:
 | 
			
		||||
            case BLAZE:
 | 
			
		||||
            case SNOWMAN:
 | 
			
		||||
            case IRON_GOLEM: {
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            // END LIVING //
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("deprecation")
 | 
			
		||||
    public Entity spawn(final World world, final int x_offset, final int z_offset) {
 | 
			
		||||
        final Location loc = new Location(world, this.x + x_offset, this.y, this.z + z_offset);
 | 
			
		||||
        loc.setYaw(this.yaw);
 | 
			
		||||
        loc.setPitch(this.pitch);
 | 
			
		||||
        if (this.id == -1) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        final EntityType type = EntityType.fromId(this.id);
 | 
			
		||||
        Entity entity;
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case DROPPED_ITEM: {
 | 
			
		||||
                return world.dropItem(loc, this.stack);
 | 
			
		||||
            }
 | 
			
		||||
            case PLAYER:
 | 
			
		||||
            case LEASH_HITCH: {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
            default:
 | 
			
		||||
                entity = world.spawnEntity(loc, type);
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.depth == 0) {
 | 
			
		||||
            return entity;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.base.passenger != null) {
 | 
			
		||||
            try {
 | 
			
		||||
                entity.setPassenger(this.base.passenger.spawn(world, x_offset, z_offset));
 | 
			
		||||
            } catch (final Exception e) {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        entity.setFallDistance(this.base.fall);
 | 
			
		||||
        entity.setFireTicks(this.base.fire);
 | 
			
		||||
        entity.setTicksLived(this.base.age);
 | 
			
		||||
        entity.setVelocity(new Vector(this.base.v_x, this.base.v_y, this.base.v_z));
 | 
			
		||||
        if (this.depth == 1) {
 | 
			
		||||
            return entity;
 | 
			
		||||
        }
 | 
			
		||||
        switch (entity.getType()) {
 | 
			
		||||
            case ARROW:
 | 
			
		||||
            case BOAT:
 | 
			
		||||
            case COMPLEX_PART:
 | 
			
		||||
            case EGG:
 | 
			
		||||
            case ENDER_CRYSTAL:
 | 
			
		||||
            case ENDER_PEARL:
 | 
			
		||||
            case ENDER_SIGNAL:
 | 
			
		||||
            case EXPERIENCE_ORB:
 | 
			
		||||
            case FALLING_BLOCK:
 | 
			
		||||
            case FIREBALL:
 | 
			
		||||
            case FIREWORK:
 | 
			
		||||
            case FISHING_HOOK:
 | 
			
		||||
            case LEASH_HITCH:
 | 
			
		||||
            case LIGHTNING:
 | 
			
		||||
            case MINECART:
 | 
			
		||||
            case MINECART_COMMAND:
 | 
			
		||||
            case MINECART_MOB_SPAWNER:
 | 
			
		||||
            case MINECART_TNT:
 | 
			
		||||
            case PLAYER:
 | 
			
		||||
            case PRIMED_TNT:
 | 
			
		||||
            case SLIME:
 | 
			
		||||
            case SMALL_FIREBALL:
 | 
			
		||||
            case SNOWBALL:
 | 
			
		||||
            case SPLASH_POTION:
 | 
			
		||||
            case THROWN_EXP_BOTTLE:
 | 
			
		||||
            case WEATHER:
 | 
			
		||||
            case WITHER_SKULL:
 | 
			
		||||
            case MINECART_FURNACE:
 | 
			
		||||
            case UNKNOWN: {
 | 
			
		||||
                // Do this stuff later
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            default: {
 | 
			
		||||
                PS.log("&cCOULD NOT IDENTIFY ENTITY: " + entity.getType());
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // MISC //
 | 
			
		||||
            case ITEM_FRAME: {
 | 
			
		||||
                final ItemFrame itemframe = (ItemFrame) entity;
 | 
			
		||||
                itemframe.setRotation(Rotation.values()[this.dataByte]);
 | 
			
		||||
                itemframe.setItem(this.stack);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case PAINTING: {
 | 
			
		||||
                final Painting painting = (Painting) entity;
 | 
			
		||||
                painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
 | 
			
		||||
                painting.setArt(Art.getByName(this.dataString), true);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // END MISC //
 | 
			
		||||
            // INVENTORY HOLDER //
 | 
			
		||||
            case MINECART_CHEST: {
 | 
			
		||||
                restoreInventory((InventoryHolder) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case MINECART_HOPPER: {
 | 
			
		||||
                restoreInventory((InventoryHolder) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // START LIVING ENTITY //
 | 
			
		||||
            // START AGEABLE //
 | 
			
		||||
            // START TAMEABLE //
 | 
			
		||||
            case HORSE: {
 | 
			
		||||
                final Horse horse = (Horse) entity;
 | 
			
		||||
                horse.setJumpStrength(this.horse.jump);
 | 
			
		||||
                horse.setCarryingChest(this.horse.chest);
 | 
			
		||||
                horse.setVariant(Variant.values()[this.horse.variant]);
 | 
			
		||||
                horse.setStyle(Style.values()[this.horse.style]);
 | 
			
		||||
                horse.setColor(Color.values()[this.horse.color]);
 | 
			
		||||
                restoreTameable((Tameable) entity);
 | 
			
		||||
                restoreAgeable((Ageable) entity);
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                restoreInventory((InventoryHolder) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // END INVENTORY HOLDER //
 | 
			
		||||
            case WOLF:
 | 
			
		||||
            case OCELOT: {
 | 
			
		||||
                restoreTameable((Tameable) entity);
 | 
			
		||||
                restoreAgeable((Ageable) entity);
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // END AMEABLE //
 | 
			
		||||
            case SHEEP: {
 | 
			
		||||
                final Sheep sheep = (Sheep) entity;
 | 
			
		||||
                if (this.dataByte == 1) {
 | 
			
		||||
                    sheep.setSheared(true);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.dataByte2 != 0) {
 | 
			
		||||
                    sheep.setColor(DyeColor.getByDyeData(this.dataByte2));
 | 
			
		||||
                }
 | 
			
		||||
                restoreAgeable((Ageable) entity);
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case VILLAGER:
 | 
			
		||||
            case CHICKEN:
 | 
			
		||||
            case COW:
 | 
			
		||||
            case MUSHROOM_COW:
 | 
			
		||||
            case PIG: {
 | 
			
		||||
                restoreAgeable((Ageable) entity);
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // END AGEABLE //
 | 
			
		||||
            case RABBIT: { // NEW
 | 
			
		||||
                if (this.dataByte != 0) {
 | 
			
		||||
                    ((Rabbit) entity).setRabbitType(Type.values()[this.dataByte]);
 | 
			
		||||
                }
 | 
			
		||||
                restoreAgeable((Ageable) entity);
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case GUARDIAN: { // NEW
 | 
			
		||||
                if (this.dataByte != 0) {
 | 
			
		||||
                    ((Guardian) entity).setElder(true);
 | 
			
		||||
                }
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case SKELETON: { // NEW
 | 
			
		||||
                if (this.dataByte != 0) {
 | 
			
		||||
                    ((Skeleton) entity).setSkeletonType(SkeletonType.values()[this.dataByte]);
 | 
			
		||||
                }
 | 
			
		||||
                storeLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case ARMOR_STAND: { // NEW
 | 
			
		||||
                // CHECK positions
 | 
			
		||||
                final ArmorStand stand = (ArmorStand) entity;
 | 
			
		||||
                if (this.inventory[0] != null) {
 | 
			
		||||
                    stand.setItemInHand(this.inventory[0]);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.inventory[1] != null) {
 | 
			
		||||
                    stand.setHelmet(this.inventory[1]);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.inventory[2] != null) {
 | 
			
		||||
                    stand.setChestplate(this.inventory[2]);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.inventory[3] != null) {
 | 
			
		||||
                    stand.setLeggings(this.inventory[3]);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.inventory[4] != null) {
 | 
			
		||||
                    stand.setBoots(this.inventory[4]);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.head[0] != 0 || this.stand.head[1] != 0 || this.stand.head[2] != 0) {
 | 
			
		||||
                    EulerAngle pose = new EulerAngle(this.stand.head[0], this.stand.head[1], this.stand.head[2]);
 | 
			
		||||
                    stand.setHeadPose(pose);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.body[0] != 0 || this.stand.body[1] != 0 || this.stand.body[2] != 0) {
 | 
			
		||||
                    EulerAngle pose = new EulerAngle(this.stand.body[0], this.stand.body[1], this.stand.body[2]);
 | 
			
		||||
                    stand.setBodyPose(pose);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.leftLeg[0] != 0 || this.stand.leftLeg[1] != 0 || this.stand.leftLeg[2] != 0) {
 | 
			
		||||
                    EulerAngle pose = new EulerAngle(this.stand.leftLeg[0], this.stand.leftLeg[1], this.stand.leftLeg[2]);
 | 
			
		||||
                    stand.setLeftLegPose(pose);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.rightLeg[0] != 0 || this.stand.rightLeg[1] != 0 || this.stand.rightLeg[2] != 0) {
 | 
			
		||||
                    EulerAngle pose = new EulerAngle(this.stand.rightLeg[0], this.stand.rightLeg[1], this.stand.rightLeg[2]);
 | 
			
		||||
                    stand.setRightLegPose(pose);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.leftArm[0] != 0 || this.stand.leftArm[1] != 0 || this.stand.leftArm[2] != 0) {
 | 
			
		||||
                    EulerAngle pose = new EulerAngle(this.stand.leftArm[0], this.stand.leftArm[1], this.stand.leftArm[2]);
 | 
			
		||||
                    stand.setLeftArmPose(pose);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.rightArm[0] != 0 || this.stand.rightArm[1] != 0 || this.stand.rightArm[2] != 0) {
 | 
			
		||||
                    EulerAngle pose = new EulerAngle(this.stand.rightArm[0], this.stand.rightArm[1], this.stand.rightArm[2]);
 | 
			
		||||
                    stand.setRightArmPose(pose);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.invisible) {
 | 
			
		||||
                    stand.setVisible(false);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.arms) {
 | 
			
		||||
                    stand.setArms(true);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.nogravity) {
 | 
			
		||||
                    stand.setGravity(false);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.noplate) {
 | 
			
		||||
                    stand.setBasePlate(false);
 | 
			
		||||
                }
 | 
			
		||||
                if (this.stand.small) {
 | 
			
		||||
                    stand.setSmall(true);
 | 
			
		||||
                }
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            case ENDERMITE: // NEW
 | 
			
		||||
            case BAT:
 | 
			
		||||
            case ENDER_DRAGON:
 | 
			
		||||
            case GHAST:
 | 
			
		||||
            case MAGMA_CUBE:
 | 
			
		||||
            case SQUID:
 | 
			
		||||
            case PIG_ZOMBIE:
 | 
			
		||||
            case ZOMBIE:
 | 
			
		||||
            case WITHER:
 | 
			
		||||
            case WITCH:
 | 
			
		||||
            case SPIDER:
 | 
			
		||||
            case CAVE_SPIDER:
 | 
			
		||||
            case SILVERFISH:
 | 
			
		||||
            case GIANT:
 | 
			
		||||
            case ENDERMAN:
 | 
			
		||||
            case CREEPER:
 | 
			
		||||
            case BLAZE:
 | 
			
		||||
            case SNOWMAN:
 | 
			
		||||
            case IRON_GOLEM: {
 | 
			
		||||
                restoreLiving((LivingEntity) entity);
 | 
			
		||||
                return entity;
 | 
			
		||||
            }
 | 
			
		||||
            // END LIVING //
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private byte getOrdinal(final Object[] list, final Object value) {
 | 
			
		||||
        for (byte i = 0; i < list.length; i++) {
 | 
			
		||||
            if (list[i].equals(value)) {
 | 
			
		||||
                return i;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.potion.PotionEffect;
 | 
			
		||||
 | 
			
		||||
public class LivingEntityStats {
 | 
			
		||||
    public boolean loot;
 | 
			
		||||
    public String name;
 | 
			
		||||
    public boolean visible;
 | 
			
		||||
    public float health;
 | 
			
		||||
    public short air;
 | 
			
		||||
    public boolean persistent;
 | 
			
		||||
    public boolean leashed;
 | 
			
		||||
    public short leash_x;
 | 
			
		||||
    public short leash_y;
 | 
			
		||||
    public short leash_z;
 | 
			
		||||
    public boolean equipped;
 | 
			
		||||
    public ItemStack hands;
 | 
			
		||||
    public ItemStack helmet;
 | 
			
		||||
    public ItemStack boots;
 | 
			
		||||
    public ItemStack leggings;
 | 
			
		||||
    public ItemStack chestplate;
 | 
			
		||||
    public Collection<PotionEffect> potions;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
package com.intellectualcrafters.plot.object.entity;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.entity.AnimalTamer;
 | 
			
		||||
 | 
			
		||||
public class TameableStats {
 | 
			
		||||
    public AnimalTamer owner;
 | 
			
		||||
    public boolean tamed;
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user