Package net.sacredlabyrinth.phaed.simpleclans.managers

Source Code of net.sacredlabyrinth.phaed.simpleclans.managers.TeleportManager

package net.sacredlabyrinth.phaed.simpleclans.managers;

import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.TeleportState;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

public final class TeleportManager
{
    private SimpleClans plugin;
    private HashMap<String, TeleportState> waitingPlayers = new HashMap<String, TeleportState>();

    /**
     *
     */
    public TeleportManager()
    {
        plugin = SimpleClans.getInstance();
        startCounter();
    }

    /**
     * Add player to teleport waiting queue
     *
     * @param player
     * @param dest
     * @param clanName
     */
    public void addPlayer(Player player, Location dest, String clanName)
    {
        int secs = SimpleClans.getInstance().getSettingsManager().getWaitSecs();

        if (SimpleClans.getInstance().hasUUID())
        {
            waitingPlayers.put(player.getUniqueId().toString(), new TeleportState(player, dest, clanName));
        } else
        {
            waitingPlayers.put(player.getName(), new TeleportState(player, dest, clanName));
        }

        if (secs > 0)
        {
            ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("waiting.for.teleport.stand.still.for.0.seconds"), secs));
        }
    }

    private void dropItems(Player player)
    {
        if (plugin.getSettingsManager().isDropOnHome())
        {
            PlayerInventory inv = player.getInventory();
            ItemStack[] contents = inv.getContents();

            for (ItemStack item : contents)
            {
                if (item == null)
                {
                    continue;
                }

                List<Integer> itemsList = plugin.getSettingsManager().getItemsList();

                if (itemsList.contains(item.getTypeId()))
                {
                    player.getWorld().dropItemNaturally(player.getLocation(), item);
                    inv.remove(item);
                }
            }
        }
        else if (plugin.getSettingsManager().isKeepOnHome())
        {
            try
            {
                PlayerInventory inv = player.getInventory();
                ItemStack[] contents = inv.getContents().clone();

                for (ItemStack item : contents)
                {
                    if (item == null)
                    {
                        continue;
                    }

                    List<Integer> itemsList = plugin.getSettingsManager().getItemsList();

                    if (!itemsList.contains(item.getTypeId()))
                    {
                        player.getWorld().dropItemNaturally(player.getLocation(), item);
                        inv.remove(item);
                    }
                }
            }
            catch (Exception ex)
            {
                Helper.dumpStackTrace();
            }
        }
    }

    private void startCounter()
    {
        plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable()
        {
            @Override
            public void run()
            {
                for (Iterator iter = waitingPlayers.values().iterator(); iter.hasNext(); )
                {
                    TeleportState state = (TeleportState) iter.next();

                    if (state.isProcessing())
                    {
                        continue;
                    }
                    state.setProcessing(true);

                    Player player = state.getPlayer();

                    if (player != null)
                    {
                        if (state.isTeleportTime())
                        {
                            if (Helper.isSameBlock(player.getLocation(), state.getLocation()))
                            {
                                Location loc = state.getDestination();

                                int x = loc.getBlockX();
                                int z = loc.getBlockZ();

                                if (plugin.getSettingsManager().isTeleportBlocks()) {
                                    player.sendBlockChange(new Location(loc.getWorld(), x + 1, loc.getBlockY() - 1, z + 1), Material.GLASS, (byte) 0);
                                    player.sendBlockChange(new Location(loc.getWorld(), x - 1, loc.getBlockY() - 1, z - 1), Material.GLASS, (byte) 0);
                                    player.sendBlockChange(new Location(loc.getWorld(), x + 1, loc.getBlockY() - 1, z - 1), Material.GLASS, (byte) 0);
                                    player.sendBlockChange(new Location(loc.getWorld(), x - 1, loc.getBlockY() - 1, z + 1), Material.GLASS, (byte) 0);
                                }
                               
                                if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.keep-items"))
                                {
                                    dropItems(player);
                                }

                                SimpleClans.debug("teleporting");

                                player.teleport(new Location(loc.getWorld(), loc.getBlockX() + .5, loc.getBlockY(), loc.getBlockZ() + .5));

                                ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("now.at.homebase"), state.getClanName()));
                            }
                            else
                            {
                                ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.moved.teleport.cancelled"));
                            }

                            iter.remove();
                        }
                        else
                        {
                            if (!Helper.isSameBlock(player.getLocation(), state.getLocation()))
                            {
                                ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.moved.teleport.cancelled"));
                                iter.remove();
                            }
                            else
                            {
                                ChatBlock.sendMessage(player, ChatColor.AQUA + "" + state.getCounter());
                            }
                        }
                    }
                    else
                    {
                        iter.remove();
                    }

                    state.setProcessing(false);
                }
            }
        }, 0, 20L);
    }
}
TOP

Related Classes of net.sacredlabyrinth.phaed.simpleclans.managers.TeleportManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.