Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.TheTealViper.schematicbrowser;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.Material;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.inventory.meta.SkullMeta;
- import org.bukkit.plugin.java.JavaPlugin;
- public class SchematicBrowser extends JavaPlugin implements Listener{
- Map<String, String> database = new HashMap<String, String>();
- Map<String, String> currentFolder = new HashMap<String, String>();
- ItemStack refresh = null, goback = null;
- public void onEnable(){
- saveDefaultConfig();
- Bukkit.getPluginManager().registerEvents(this, this);
- refreshDatabase();
- getLogger().info("SchematicBrowser from TheTealViper powered ON!");
- refresh = new ItemStack(Material.ENDER_PEARL);
- ItemMeta meta1 = Bukkit.getItemFactory().getItemMeta(Material.STICK);
- meta1.setDisplayName(ChatColor.YELLOW + "Refresh");
- refresh.setItemMeta(meta1);
- goback = new ItemStack(Material.BARRIER);
- ItemMeta meta2 = Bukkit.getItemFactory().getItemMeta(Material.STICK);
- meta2.setDisplayName(ChatColor.RED + "Return to Folders");
- goback.setItemMeta(meta2);
- }
- public void onDisable(){
- getLogger().info("SchematicBrowser from TheTealViper shutting down. Bshzzzzzz");
- }
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
- if(sender instanceof Player) {
- Player p = (Player) sender;
- if((label.equalsIgnoreCase("schematicbrowser") || label.equalsIgnoreCase("sb")) && p.hasPermission("schematicbrowser.use")){
- if(args.length == 0){
- openBrowser(p);
- }else if(args.length == 1){
- if(args[0].equalsIgnoreCase("i") || args[0].equalsIgnoreCase("info")){
- p.sendMessage("This is TheTealViper's free recreation of 'Schematic Browser'.\nOriginal: https://www.spigotmc.org/resources/schematic-browser.20978/");
- }else if(args[0].equalsIgnoreCase("r") || args[0].equalsIgnoreCase("refresh")){
- reloadConfig();
- refreshDatabase();
- p.sendMessage("[" + ChatColor.BLUE + "SB" + ChatColor.RESET + "] Successfully Refreshed!");
- }else{
- p.sendMessage("[" + ChatColor.BLUE + "SB" + ChatColor.RESET + "] Commands");
- p.sendMessage("'/sb' - Opens the browser");
- p.sendMessage("'/sb i' - Info about the plugin");
- p.sendMessage("'/sb r' - Refresh the config and schematics");
- }
- }
- }
- }
- return false;
- }
- public void refreshDatabase(){
- database.clear();
- File parentFolder = new File("plugins/WorldEdit/schematics");
- for(String folderS : parentFolder.list()){
- File folder = new File("plugins/WorldEdit/schematics/" + folderS);
- if(folder.list() == null){ //If the "folder" is actually a schematic not in a folder
- System.out.println("Default / " + folderS);
- database.put(folderS, "Default");
- }else{
- for(String file : folder.list()){
- System.out.println(folderS + " / " + file);
- database.put(file, folderS);
- }
- }
- }
- }
- @SuppressWarnings("deprecation")
- public void openBrowser(Player p){
- Map<String, Integer> foldersIndex = new HashMap<String, Integer>();
- List<String> folders = new ArrayList<String>();
- for(String file : database.keySet()){
- String folder = database.get(file);
- if(!folders.contains(folder)){
- folders.add(folder);
- }
- if(!foldersIndex.containsKey(folder))
- foldersIndex.put(folder, 0);
- foldersIndex.put(folder, foldersIndex.get(folder) + 1);
- }
- String[] sortedFolders = folders.toArray(new String[folders.size()]);
- Arrays.sort(sortedFolders);
- Inventory i = Bukkit.createInventory(null, 54, ChatColor.BLUE + "Schematics Folders");
- int itemIndex = 0;
- for(String folder : sortedFolders){
- ItemStack item = null;
- String location = "Default-Material-Folder";
- if(getConfig().contains("Folder-Materials." + folder))
- location = "Folder-Materials." + folder;
- String info = getConfig().getString(location);
- if(info.equalsIgnoreCase("head:folder")){
- item = new ItemStack(Material.SKULL_ITEM, foldersIndex.get(folder), (byte) 3);
- SkullMeta meta = (SkullMeta) item.getItemMeta();
- meta.setOwner("Freshmuffin");
- meta.setDisplayName(folder);
- item.setItemMeta(meta);
- }else{
- String id = info.split(":")[0];
- String damage = info.contains(":") ? info.split(":")[1] : "0";
- item = new ItemStack(Material.getMaterial(Integer.valueOf(id)), foldersIndex.get(folder), Byte.valueOf(damage));
- ItemMeta meta = Bukkit.getItemFactory().getItemMeta(Material.STICK);
- meta.setDisplayName(folder);
- item.setItemMeta(meta);
- }
- i.setItem(itemIndex, item);
- itemIndex++;
- }
- i.setItem(53, refresh);
- p.openInventory(i);
- }
- @SuppressWarnings("deprecation")
- public void openBrowser(Player p, String folder){
- Set<String> dummy = database.keySet();
- List<String> files = new ArrayList<String>();
- for(String file : dummy){
- if(database.get(file).equalsIgnoreCase(folder))
- files.add(file);
- }
- String[] sortedFiles = files.toArray(new String[files.size()]);
- Arrays.sort(sortedFiles);
- Inventory i = Bukkit.createInventory(null, 54, ChatColor.BLUE + "Schematics Browser");
- int itemIndex = 0;
- for(String file : sortedFiles){
- ItemStack item = null;
- String location = "Default-Material-Schematic";
- if(getConfig().contains("Schematic-Materials." + file))
- location = "Schematic-Materials." + file;
- String info = getConfig().getString(location);
- if(info.equalsIgnoreCase("head:blueprint")){
- item = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
- SkullMeta meta = (SkullMeta) item.getItemMeta();
- meta.setOwner("Jesuitical");
- meta.setDisplayName(file);
- item.setItemMeta(meta);
- }else{
- String id = info.split(":")[0];
- String damage = info.contains(":") ? info.split(":")[1] : "0";
- item = new ItemStack(Material.getMaterial(Integer.valueOf(id)), 1, Short.valueOf(damage));
- ItemMeta meta = Bukkit.getItemFactory().getItemMeta(Material.STICK);
- meta.setDisplayName(file);
- item.setItemMeta(meta);
- }
- i.setItem(itemIndex, item);
- itemIndex++;
- }
- i.setItem(52, goback);
- i.setItem(53, refresh);
- p.openInventory(i);
- }
- @EventHandler
- public void onInventoryClick(InventoryClickEvent e){
- if(e.getClickedInventory() == null || e.getClickedInventory().getTitle() == null)
- return;
- if(e.getClickedInventory().getTitle().equalsIgnoreCase(ChatColor.BLUE + "Schematics Folders")){
- if(e.getCurrentItem() != null && !e.getCurrentItem().getType().equals(Material.AIR)){
- if(e.getCurrentItem().equals(refresh)){
- refreshDatabase();
- openBrowser((Player) e.getWhoClicked());
- }else{
- openBrowser((Player) e.getWhoClicked(), e.getCurrentItem().getItemMeta().getDisplayName());
- currentFolder.put(e.getWhoClicked().getName(), e.getCurrentItem().getItemMeta().getDisplayName());
- }
- }
- }else if(e.getClickedInventory().getTitle().equalsIgnoreCase(ChatColor.BLUE + "Schematics Browser")){
- if(e.getCurrentItem().equals(goback)){
- openBrowser((Player) e.getWhoClicked());
- }else if(e.getCurrentItem().equals(refresh)){
- refreshDatabase();
- openBrowser((Player) e.getWhoClicked(), currentFolder.get(e.getWhoClicked().getName()));
- }else{
- e.getWhoClicked().closeInventory();
- if(currentFolder.get(e.getWhoClicked().getName()).equals("Default")){
- Bukkit.getServer().dispatchCommand(e.getWhoClicked(), "/schem load " + e.getCurrentItem().getItemMeta().getDisplayName());
- }else{
- Bukkit.getServer().dispatchCommand(e.getWhoClicked(), "/schem load " + currentFolder.get(e.getWhoClicked().getName()) + "/" + e.getCurrentItem().getItemMeta().getDisplayName());
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement