Package uk.co.tggl.pluckerpluck.multiinv

Source Code of uk.co.tggl.pluckerpluck.multiinv.MultiInvAPI

package uk.co.tggl.pluckerpluck.multiinv;

import java.util.HashMap;

import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;

import Tux2.TuxTwoLib.TuxTwoPlayer;
import uk.co.tggl.pluckerpluck.multiinv.api.MIAPIPlayer;
import uk.co.tggl.pluckerpluck.multiinv.inventory.MIInventory;
import uk.co.tggl.pluckerpluck.multiinv.inventory.MIItemStack;
import uk.co.tggl.pluckerpluck.multiinv.listener.MIPlayerListener;
import uk.co.tggl.pluckerpluck.multiinv.player.MIPlayerFile;

public class MultiInvAPI {
   
    MultiInv plugin;
    public static final int CREATIVE = 1;
    public static final int SURVIVAL = 0;
   
    public MultiInvAPI(MultiInv plugin) {
        this.plugin = plugin;
    }
   
    /**
     * Returns the specific player's inventory for a specific world and game mode.
     *
     * @param player
     *            The player you want to look up.
     * @param world
     *            The world's name (not group name)
     * @param gm
     *            The game mode of the inventory you want to retrieve.
     * @return
     */
    public MIInventory getPlayerInventory(OfflinePlayer player, String world, GameMode gm) {
        Player giveplayer = null;
      if(player instanceof Player) {
        giveplayer = (Player) player;
      }else {
        giveplayer = plugin.getServer().getPlayer(player.getName());
      }
        boolean playeronline = true;
        if((giveplayer == null || !giveplayer.isOnline())) {
            Player target = TuxTwoPlayer.getOfflinePlayer(player);
            if(target != null) {
                target.loadData();
                giveplayer = target;
            }
        }
        if(giveplayer != null) {
            // Let's see if the player is in the same world group.
            if((playeronline && MIPlayerListener.getGroup(giveplayer.getWorld().getName()).equalsIgnoreCase(MIPlayerListener.getGroup(world))) ||
                    (!playeronline && MIYamlFiles.logoutworld.get(giveplayer.getName()).equals(MIPlayerListener.getGroup(world)))) {
                // If they are in the same world, yet are in the wrong game mode, let's get the inventory from the file.
                if(MIYamlFiles.config.getBoolean("separateGamemodeInventories", true) && (giveplayer.getGameMode() != gm)) {
                    String inventoryName = "CREATIVE";
                    if(GameMode.SURVIVAL == gm) {
                        inventoryName = "SURVIVAL";
                    }
                    if(MIYamlFiles.config.getBoolean("useSQL")) {
                        MIInventory inventory = MIYamlFiles.con.getInventory(giveplayer, MIPlayerListener.getGroup(world), inventoryName);
                        return inventory;
                    } else {
                        MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                        MIInventory inventory = config.getInventory(inventoryName);
                        return inventory;
                    }
                    // If they are currently using the inventory, let's just grab it...
                } else {
                    return new MIInventory(giveplayer);
                }
                // If we are getting an inventory from another world let's just load it.
            } else {
                String inventoryName = "CREATIVE";
                if(GameMode.SURVIVAL == gm) {
                    inventoryName = "SURVIVAL";
                }
                if(!MIYamlFiles.config.getBoolean("separateGamemodeInventories", true)) {
                    inventoryName = "SURVIVAL";
                }
                if(MIYamlFiles.config.getBoolean("useSQL")) {
                    MIInventory inventory = MIYamlFiles.con.getInventory(giveplayer, MIPlayerListener.getGroup(world), inventoryName);
                    return inventory;
                } else {
                    MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                    MIInventory inventory = config.getInventory(inventoryName);
                    return inventory;
                }
            }
            // The player isn't online. Let's do it in offline mode then...
        }
        return null;
       
    }
   
    /**
     * Sets the player's inventory using a MIInventory
     *
     * @param player
     *            The player's name
     * @param world
     *            The world name that you want to set the inventory in
     * @param gm
     *            Gamemode
     * @param inventory
     *            The inventory
     * @return True upon success, false upon error.
     */
    public boolean setPlayerInventory(OfflinePlayer player, String world, GameMode gm, MIInventory inventory) {
        Player giveplayer;
      if(player instanceof Player) {
        giveplayer = (Player) player;
      }else {
        giveplayer = plugin.getServer().getPlayer(player.getName());
      }
        String currentworld = "";
        boolean offlineplayer = false;
        if(giveplayer != null && giveplayer.isOnline()) {
            currentworld = giveplayer.getWorld().getName();
        } else {
            giveplayer = TuxTwoPlayer.getOfflinePlayer(player);
            if(giveplayer == null) {
                return false;
            }
            currentworld = MIYamlFiles.logoutworld.get(player);
            offlineplayer = true;
        }
        if((!offlineplayer && MIPlayerListener.getGroup(currentworld).equalsIgnoreCase(MIPlayerListener.getGroup(world))) ||
                (offlineplayer && currentworld.equalsIgnoreCase(MIPlayerListener.getGroup(world)))) {
            if(MIYamlFiles.config.getBoolean("separateGamemodeInventories", true) && (giveplayer.getGameMode() != gm)) {
                String inventoryName = "CREATIVE";
                if(GameMode.SURVIVAL == gm) {
                    inventoryName = "SURVIVAL";
                }
                if(MIYamlFiles.config.getBoolean("useSQL")) {
                    MIYamlFiles.con.saveInventory(giveplayer, MIPlayerListener.getGroup(world), inventory, inventoryName);
                    return true;
                } else {
                    MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                    config.saveInventory(inventory, inventoryName);
                    return true;
                }
                // If they are currently using the inventory, let's set it...
            } else {
                inventory.loadIntoInventory(giveplayer.getInventory());
                if(offlineplayer) {
                    giveplayer.saveData();
                }
                return true;
            }
            // They aren't in the same world, so let's just save the inventory.
        } else {
            String inventoryName = "CREATIVE";
            if(GameMode.SURVIVAL == gm) {
                inventoryName = "SURVIVAL";
            }
            if(!MIYamlFiles.config.getBoolean("separateGamemodeInventories", true)) {
                inventoryName = "SURVIVAL";
            }
            if(MIYamlFiles.config.getBoolean("useSQL")) {
                MIYamlFiles.con.saveInventory(giveplayer, MIPlayerListener.getGroup(world), inventory, inventoryName);
                return true;
            } else {
                MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                config.saveInventory(inventory, inventoryName);
                return true;
            }
        }
    }
   
    /**
     * Adds a single item to the player's inventory.
     *
     * @param player
     *            The player's name
     * @param world
     *            The world to add it to.
     * @param gm
     *            The game mode
     * @param itemstack
     *            The item to add.
     * @return true upon successful adding, false if the inventory was full or player not found.
     */
    public boolean addItemToInventory(OfflinePlayer player, String world, GameMode gm, MIItemStack itemstack) {
        Player giveplayer;
      if(player instanceof Player) {
        giveplayer = (Player) player;
      }else {
        giveplayer = plugin.getServer().getPlayer(player.getName());
      }
        String currentworld = "";
        boolean offlineplayer = false;
        if(giveplayer != null && giveplayer.isOnline()) {
            currentworld = giveplayer.getWorld().getName();
        } else {
            giveplayer = TuxTwoPlayer.getOfflinePlayer(player);
            if(giveplayer == null) {
                return false;
            }
            currentworld = MIYamlFiles.logoutworld.get(player);
            offlineplayer = true;
        }
        if((!offlineplayer && MIPlayerListener.getGroup(currentworld).equalsIgnoreCase(MIPlayerListener.getGroup(world))) ||
                (offlineplayer && currentworld.equalsIgnoreCase(MIPlayerListener.getGroup(world)))) {
            if(MIYamlFiles.config.getBoolean("separateGamemodeInventories", true) && (giveplayer.getGameMode() != gm)) {
                String inventoryName = "CREATIVE";
                if(GameMode.SURVIVAL == gm) {
                    inventoryName = "SURVIVAL";
                }
                if(MIYamlFiles.config.getBoolean("useSQL")) {
                    MIInventory inventory = MIYamlFiles.con.getInventory(giveplayer, MIPlayerListener.getGroup(world), inventoryName);
                    // now let's find an empty slot...
                    boolean noempty = true;
                    MIItemStack[] items = inventory.getInventoryContents();
                    for(int i = 0; i < items.length && noempty; i++) {
                        MIItemStack is = items[i];
                        if(is.getItemStack() == null) {
                            items[i] = itemstack;
                            noempty = false;
                        }
                    }
                    if(noempty) {
                        return false;
                    }
                    MIYamlFiles.con.saveInventory(giveplayer, MIPlayerListener.getGroup(world), inventory, inventoryName);
                    return true;
                } else {
                    MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                    MIInventory inventory = config.getInventory(inventoryName);
                    // now let's find an empty slot...
                    boolean noempty = true;
                    MIItemStack[] items = inventory.getInventoryContents();
                    for(int i = 0; i < items.length && noempty; i++) {
                        MIItemStack is = items[i];
                        if(is.getItemStack() == null) {
                            items[i] = itemstack;
                            noempty = false;
                        }
                    }
                    if(noempty) {
                        return false;
                    }
                    config.saveInventory(inventory, inventoryName);
                    return true;
                }
                // If they are currently using the inventory, let's set it...
            } else {
                if(giveplayer.getInventory().firstEmpty() == -1) {
                    return false;
                }
                giveplayer.getInventory().addItem(itemstack.getItemStack());
                if(offlineplayer) {
                    giveplayer.saveData();
                }
                return true;
            }
            // They aren't in the same world, so let's just save the inventory.
        } else {
            String inventoryName = "CREATIVE";
            if(GameMode.SURVIVAL == gm) {
                inventoryName = "SURVIVAL";
            }
            if(!MIYamlFiles.config.getBoolean("separateGamemodeInventories", true)) {
                inventoryName = "SURVIVAL";
            }
            if(MIYamlFiles.config.getBoolean("useSQL")) {
                MIInventory inventory = MIYamlFiles.con.getInventory(giveplayer, MIPlayerListener.getGroup(world), inventoryName);
                // now let's find an empty slot...
                boolean noempty = true;
                MIItemStack[] items = inventory.getInventoryContents();
                for(int i = 0; i < items.length && noempty; i++) {
                    MIItemStack is = items[i];
                    if(is.getItemStack() == null) {
                        items[i] = itemstack;
                        noempty = false;
                    }
                }
                if(noempty) {
                    return false;
                }
                MIYamlFiles.con.saveInventory(giveplayer, MIPlayerListener.getGroup(world), inventory, inventoryName);
                return true;
            } else {
                MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                MIInventory inventory = config.getInventory(inventoryName);
                // now let's find an empty slot...
                boolean noempty = true;
                MIItemStack[] items = inventory.getInventoryContents();
                for(int i = 0; i < items.length && noempty; i++) {
                    MIItemStack is = items[i];
                    if(is.getItemStack() == null) {
                        items[i] = itemstack;
                        noempty = false;
                    }
                }
                if(noempty) {
                    return false;
                }
                config.saveInventory(inventory, inventoryName);
                return true;
            }
        }
    }
   
    /**
     * Gets a copy of all of a player's vital statistics. Editing stuff in this file does not directly modify the player.
     *
     * @param player
     *            The player's name.
     * @param world
     *            The world that you want the statistics for.
     * @param gm
     *            What gamemode you want the statistics for.
     * @return A copy of the player's stats.
     */
    public MIAPIPlayer getPlayerInstance(OfflinePlayer player, String world, GameMode gm) {
        Player giveplayer;
      if(player instanceof Player) {
        giveplayer = (Player) player;
      }else {
        giveplayer = plugin.getServer().getPlayer(player.getName());
      }
        boolean playeronline = true;
        if((giveplayer == null || !giveplayer.isOnline())) {
            Player target = TuxTwoPlayer.getOfflinePlayer(player);
            if(target != null) {
                target.loadData();
                giveplayer = target;
            }
        }
        if(giveplayer != null) {
            // Let's see if the player is in the same world group.
            if((playeronline && MIPlayerListener.getGroup(giveplayer.getWorld().getName()).equalsIgnoreCase(MIPlayerListener.getGroup(world))) ||
                    (!playeronline && MIYamlFiles.logoutworld.get(giveplayer.getName()).equals(MIPlayerListener.getGroup(world)))) {
                // If they are in the same world, yet are in the wrong game mode, let's get the inventory from the file.
                if(MIYamlFiles.config.getBoolean("separateGamemodeInventories", true) && (giveplayer.getGameMode() != gm)) {
                    String inventoryName = "CREATIVE";
                    if(GameMode.SURVIVAL == gm) {
                        inventoryName = "SURVIVAL";
                    }
                    if(MIYamlFiles.config.getBoolean("useSQL")) {
                        MIAPIPlayer playerfile = new MIAPIPlayer(giveplayer);
                        String group = MIPlayerListener.getGroup(world);
                        playerfile.setInventory(MIYamlFiles.con.getInventory(giveplayer, group, inventoryName));
                        playerfile.setEnderchest(MIYamlFiles.con.getEnderchestInventory(giveplayer, group, inventoryName));
                        playerfile.setFoodlevel(giveplayer.getFoodLevel());
                        playerfile.setSaturation(giveplayer.getSaturation());
                        playerfile.setHealth(giveplayer.getHealth());
                        playerfile.setXpLevel(giveplayer.getLevel());
                        playerfile.setXp(giveplayer.getExp());
                        playerfile.setGm(gm);
                        return playerfile;
                    } else {
                        MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                        MIAPIPlayer playerfile = new MIAPIPlayer(giveplayer);
                        playerfile.setInventory(config.getInventory(gm.toString()));
                        playerfile.setEnderchest(config.getEnderchestInventory(gm.toString()));
                        playerfile.setFoodlevel(giveplayer.getFoodLevel());
                        playerfile.setSaturation(giveplayer.getSaturation());
                        playerfile.setHealth(giveplayer.getHealth());
                        playerfile.setXpLevel(giveplayer.getLevel());
                        playerfile.setXp(giveplayer.getExp());
                        playerfile.setGm(gm);
                        return playerfile;
                    }
                    // If they are currently using the inventory, let's just grab it...
                } else {
                    MIAPIPlayer playerfile = new MIAPIPlayer(giveplayer);
                    playerfile.setInventory(playerfile.getInventory());
                    playerfile.setEnderchest(playerfile.getEnderchest());
                    playerfile.setFoodlevel(giveplayer.getFoodLevel());
                    playerfile.setSaturation(giveplayer.getSaturation());
                    playerfile.setHealth(giveplayer.getHealth());
                    playerfile.setXpLevel(giveplayer.getLevel());
                    playerfile.setXp(giveplayer.getExp());
                    playerfile.setGm(gm);
                    return playerfile;
                }
                // If we are getting an inventory from another world let's just load it.
            } else {
                String inventoryName = "CREATIVE";
                if(GameMode.SURVIVAL == gm) {
                    inventoryName = "SURVIVAL";
                }
                if(!MIYamlFiles.config.getBoolean("separateGamemodeInventories", true)) {
                    inventoryName = "SURVIVAL";
                }
                if(MIYamlFiles.config.getBoolean("useSQL")) {
                    MIAPIPlayer playerfile = new MIAPIPlayer(giveplayer);
                    String group = MIPlayerListener.getGroup(world);
                    playerfile.setInventory(MIYamlFiles.con.getInventory(giveplayer, group, inventoryName));
                    playerfile.setEnderchest(MIYamlFiles.con.getEnderchestInventory(giveplayer, group, inventoryName));
                    playerfile.setFoodlevel(MIYamlFiles.con.getHunger(giveplayer, group));
                    playerfile.setSaturation(MIYamlFiles.con.getSaturation(giveplayer, group));
                    playerfile.setHealth(MIYamlFiles.con.getHealth(giveplayer, group));
                    int totalxp = MIYamlFiles.con.getTotalExperience(giveplayer, group);
                    int[] xp = plugin.getXP(totalxp);
                    playerfile.setXpLevel(xp[0]);
                    playerfile.setXp((float) ((float) xp[1] / (float) xp[2]));
                    playerfile.setGm(gm);
                    return playerfile;
                } else {
                    MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                    MIAPIPlayer playerfile = new MIAPIPlayer(giveplayer);
                    playerfile.setInventory(config.getInventory(gm.toString()));
                    playerfile.setEnderchest(config.getEnderchestInventory(gm.toString()));
                    playerfile.setFoodlevel(config.getHunger());
                    playerfile.setSaturation(config.getSaturation());
                    playerfile.setHealth(config.getHealth());
                    playerfile.setXpLevel(config.getLevel());
                    playerfile.setXp(config.getExperience());
                    playerfile.setGm(gm);
                    return playerfile;
                }
            }
        }
        return null;
       
    }
   
    /**
     * Takes a player instance and saves it.
     *
     * @param player
     *            The Player instance.
     * @param world
     *            The world the instance is for.
     * @return True on success, false on failure.
     */
    public boolean savePlayerInstance(MIAPIPlayer player, String world) {
        Player giveplayer = plugin.getServer().getPlayer(player.getPlayername());
        boolean playeronline = true;
        if((giveplayer == null || !giveplayer.isOnline())) {
          OfflinePlayer oplayer = Bukkit.getOfflinePlayer(player.getPlayername());
            Player target = TuxTwoPlayer.getOfflinePlayer(oplayer);
            if(target != null) {
                target.loadData();
                giveplayer = target;
            }
        }
        if(giveplayer != null) {
            // Let's see if the player is in the same world group.
            if((playeronline && MIPlayerListener.getGroup(giveplayer.getWorld().getName()).equalsIgnoreCase(MIPlayerListener.getGroup(world))) ||
                    (!playeronline && MIYamlFiles.logoutworld.get(giveplayer.getName()).equals(MIPlayerListener.getGroup(world)))) {
                // If they are in the same world, yet are in the wrong game mode, let's save the player to a file.
                if(MIYamlFiles.config.getBoolean("separateGamemodeInventories", true) && (giveplayer.getGameMode() != player.getGm())) {
                    String inventoryName = player.getGm().toString();
                    if(MIYamlFiles.config.getBoolean("useSQL")) {
                        String group = MIPlayerListener.getGroup(world);
                        MIYamlFiles.con.saveInventory(giveplayer, group, player.getInventory(), inventoryName);
                        MIYamlFiles.con.saveEnderchestInventory(giveplayer, group, player.getEnderchest(), inventoryName);
                    } else {
                        MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                        config.saveInventory(player.getInventory(), player.getGm().toString());
                        config.saveEnderchestInventory(player.getEnderchest(), player.getGm().toString());
                    }
                    // If they are currently using the inventory, let's just set it...
                } else {
                    player.getInventory().loadIntoInventory(giveplayer.getInventory());
                    player.getEnderchest().loadIntoInventory(giveplayer.getEnderChest());
                }
                giveplayer.setFoodLevel(player.getFoodlevel());
                giveplayer.setSaturation(player.getSaturation());
                giveplayer.setHealth(player.getHealth());
                giveplayer.setLevel(player.getXpLevel());
                giveplayer.setExp((float) player.getXp());
                if(!playeronline) {
                    giveplayer.saveData();
                }
                return true;
                // If we are getting an inventory from another world let's just save it.
            } else {
                String inventoryName = player.getGm().toString();
                if(!MIYamlFiles.config.getBoolean("separateGamemodeInventories", true)) {
                    inventoryName = "SURVIVAL";
                }
                if(MIYamlFiles.config.getBoolean("useSQL")) {
                    String group = MIPlayerListener.getGroup(world);
                    int xp = plugin.getTotalXP(player.getXpLevel(), player.getXp());
                    MIYamlFiles.con.saveAll(giveplayer, group, player.getInventory(), inventoryName, xp, player.getGm(),
                        player.getHealth(), player.getFoodlevel(), player.getSaturation());
                    //MIYamlFiles.con.saveInventory(giveplayer, group, player.getInventory(), inventoryName);
                    MIYamlFiles.con.saveEnderchestInventory(giveplayer, group, player.getEnderchest(), inventoryName);
                    //MIYamlFiles.con.saveHunger(giveplayer, group, player.getFoodlevel());
                    //MIYamlFiles.con.saveSaturation(giveplayer, group, player.getSaturation());
                    //MIYamlFiles.con.saveHealth(giveplayer, group, player.getHealth());
                    //MIYamlFiles.con.saveExperience(giveplayer, group, xp);
                    return true;
                } else {
                    MIPlayerFile config = new MIPlayerFile(giveplayer, MIPlayerListener.getGroup(world));
                    //config.saveInventory(player.getInventory(), inventoryName);
                    config.saveAll(player.getInventory(), inventoryName, plugin.getTotalXP(player.getXpLevel(), player.getXp()), player.getXpLevel(), player.getXp(),
                        player.getGm(), player.getHealth(), player.getFoodlevel(), player.getSaturation());
                    config.saveEnderchestInventory(player.getEnderchest(), inventoryName);
                    //config.saveHunger(player.getFoodlevel());
                    //config.saveSaturation(player.getSaturation());
                    //config.saveHealth(player.getHealth());
                    //config.saveExperience(plugin.getTotalXP(player.getXpLevel(), player.getXp()), player.getXpLevel(), player.getXp());
                    return true;
                }
            }
        }
        return false;
       
    }
   
    /**
     * Returns a hashmap of worlds and what group they are in. Format: ( world, group).
     *
     * @return All worlds and their assigned groups.
     */
    public HashMap<String,String> getGroups() {
        return MIYamlFiles.getGroups();
    }
   
}
TOP

Related Classes of uk.co.tggl.pluckerpluck.multiinv.MultiInvAPI

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.