Advertisement
Guest User

Untitled

a guest
Jun 18th, 2017
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.12 KB | None | 0 0
  1. package me.TheTealViper.schematicbrowser;
  2.  
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10.  
  11. import org.bukkit.Bukkit;
  12. import org.bukkit.ChatColor;
  13. import org.bukkit.Material;
  14. import org.bukkit.command.Command;
  15. import org.bukkit.command.CommandSender;
  16. import org.bukkit.entity.Player;
  17. import org.bukkit.event.EventHandler;
  18. import org.bukkit.event.Listener;
  19. import org.bukkit.event.inventory.InventoryClickEvent;
  20. import org.bukkit.inventory.Inventory;
  21. import org.bukkit.inventory.ItemStack;
  22. import org.bukkit.inventory.meta.ItemMeta;
  23. import org.bukkit.inventory.meta.SkullMeta;
  24. import org.bukkit.plugin.java.JavaPlugin;
  25.  
  26. public class SchematicBrowser extends JavaPlugin implements Listener{
  27. Map<String, String> database = new HashMap<String, String>();
  28. Map<String, String> currentFolder = new HashMap<String, String>();
  29. ItemStack refresh = null, goback = null;
  30.  
  31. public void onEnable(){
  32. saveDefaultConfig();
  33. Bukkit.getPluginManager().registerEvents(this, this);
  34. refreshDatabase();
  35. getLogger().info("SchematicBrowser from TheTealViper powered ON!");
  36.  
  37. refresh = new ItemStack(Material.ENDER_PEARL);
  38. ItemMeta meta1 = Bukkit.getItemFactory().getItemMeta(Material.STICK);
  39. meta1.setDisplayName(ChatColor.YELLOW + "Refresh");
  40. refresh.setItemMeta(meta1);
  41.  
  42. goback = new ItemStack(Material.BARRIER);
  43. ItemMeta meta2 = Bukkit.getItemFactory().getItemMeta(Material.STICK);
  44. meta2.setDisplayName(ChatColor.RED + "Return to Folders");
  45. goback.setItemMeta(meta2);
  46. }
  47.  
  48. public void onDisable(){
  49. getLogger().info("SchematicBrowser from TheTealViper shutting down. Bshzzzzzz");
  50. }
  51.  
  52. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
  53. if(sender instanceof Player) {
  54. Player p = (Player) sender;
  55. if((label.equalsIgnoreCase("schematicbrowser") || label.equalsIgnoreCase("sb")) && p.hasPermission("schematicbrowser.use")){
  56. if(args.length == 0){
  57. openBrowser(p);
  58. }else if(args.length == 1){
  59. if(args[0].equalsIgnoreCase("i") || args[0].equalsIgnoreCase("info")){
  60. p.sendMessage("This is TheTealViper's free recreation of 'Schematic Browser'.\nOriginal: https://www.spigotmc.org/resources/schematic-browser.20978/");
  61. }else if(args[0].equalsIgnoreCase("r") || args[0].equalsIgnoreCase("refresh")){
  62. reloadConfig();
  63. refreshDatabase();
  64. p.sendMessage("[" + ChatColor.BLUE + "SB" + ChatColor.RESET + "] Successfully Refreshed!");
  65. }else{
  66. p.sendMessage("[" + ChatColor.BLUE + "SB" + ChatColor.RESET + "] Commands");
  67. p.sendMessage("'/sb' - Opens the browser");
  68. p.sendMessage("'/sb i' - Info about the plugin");
  69. p.sendMessage("'/sb r' - Refresh the config and schematics");
  70. }
  71. }
  72. }
  73. }
  74. return false;
  75. }
  76.  
  77. public void refreshDatabase(){
  78. database.clear();
  79. File parentFolder = new File("plugins/WorldEdit/schematics");
  80. for(String folderS : parentFolder.list()){
  81. File folder = new File("plugins/WorldEdit/schematics/" + folderS);
  82. if(folder.list() == null){ //If the "folder" is actually a schematic not in a folder
  83. System.out.println("Default / " + folderS);
  84. database.put(folderS, "Default");
  85. }else{
  86. for(String file : folder.list()){
  87. System.out.println(folderS + " / " + file);
  88. database.put(file, folderS);
  89. }
  90. }
  91. }
  92. }
  93.  
  94. @SuppressWarnings("deprecation")
  95. public void openBrowser(Player p){
  96. Map<String, Integer> foldersIndex = new HashMap<String, Integer>();
  97. List<String> folders = new ArrayList<String>();
  98. for(String file : database.keySet()){
  99. String folder = database.get(file);
  100. if(!folders.contains(folder)){
  101. folders.add(folder);
  102. }
  103. if(!foldersIndex.containsKey(folder))
  104. foldersIndex.put(folder, 0);
  105. foldersIndex.put(folder, foldersIndex.get(folder) + 1);
  106. }
  107.  
  108. String[] sortedFolders = folders.toArray(new String[folders.size()]);
  109. Arrays.sort(sortedFolders);
  110.  
  111. Inventory i = Bukkit.createInventory(null, 54, ChatColor.BLUE + "Schematics Folders");
  112. int itemIndex = 0;
  113. for(String folder : sortedFolders){
  114. ItemStack item = null;
  115. String location = "Default-Material-Folder";
  116. if(getConfig().contains("Folder-Materials." + folder))
  117. location = "Folder-Materials." + folder;
  118.  
  119. String info = getConfig().getString(location);
  120. if(info.equalsIgnoreCase("head:folder")){
  121. item = new ItemStack(Material.SKULL_ITEM, foldersIndex.get(folder), (byte) 3);
  122. SkullMeta meta = (SkullMeta) item.getItemMeta();
  123. meta.setOwner("Freshmuffin");
  124. meta.setDisplayName(folder);
  125. item.setItemMeta(meta);
  126. }else{
  127. String id = info.split(":")[0];
  128. String damage = info.contains(":") ? info.split(":")[1] : "0";
  129. item = new ItemStack(Material.getMaterial(Integer.valueOf(id)), foldersIndex.get(folder), Byte.valueOf(damage));
  130. ItemMeta meta = Bukkit.getItemFactory().getItemMeta(Material.STICK);
  131. meta.setDisplayName(folder);
  132. item.setItemMeta(meta);
  133. }
  134. i.setItem(itemIndex, item);
  135. itemIndex++;
  136. }
  137. i.setItem(53, refresh);
  138. p.openInventory(i);
  139. }
  140.  
  141. @SuppressWarnings("deprecation")
  142. public void openBrowser(Player p, String folder){
  143. Set<String> dummy = database.keySet();
  144. List<String> files = new ArrayList<String>();
  145. for(String file : dummy){
  146. if(database.get(file).equalsIgnoreCase(folder))
  147. files.add(file);
  148. }
  149. String[] sortedFiles = files.toArray(new String[files.size()]);
  150. Arrays.sort(sortedFiles);
  151.  
  152. Inventory i = Bukkit.createInventory(null, 54, ChatColor.BLUE + "Schematics Browser");
  153. int itemIndex = 0;
  154. for(String file : sortedFiles){
  155. ItemStack item = null;
  156. String location = "Default-Material-Schematic";
  157. if(getConfig().contains("Schematic-Materials." + file))
  158. location = "Schematic-Materials." + file;
  159.  
  160. String info = getConfig().getString(location);
  161. if(info.equalsIgnoreCase("head:blueprint")){
  162. item = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
  163. SkullMeta meta = (SkullMeta) item.getItemMeta();
  164. meta.setOwner("Jesuitical");
  165. meta.setDisplayName(file);
  166. item.setItemMeta(meta);
  167. }else{
  168. String id = info.split(":")[0];
  169. String damage = info.contains(":") ? info.split(":")[1] : "0";
  170. item = new ItemStack(Material.getMaterial(Integer.valueOf(id)), 1, Short.valueOf(damage));
  171. ItemMeta meta = Bukkit.getItemFactory().getItemMeta(Material.STICK);
  172. meta.setDisplayName(file);
  173. item.setItemMeta(meta);
  174. }
  175. i.setItem(itemIndex, item);
  176. itemIndex++;
  177. }
  178. i.setItem(52, goback);
  179. i.setItem(53, refresh);
  180. p.openInventory(i);
  181. }
  182.  
  183. @EventHandler
  184. public void onInventoryClick(InventoryClickEvent e){
  185. if(e.getClickedInventory() == null || e.getClickedInventory().getTitle() == null)
  186. return;
  187. if(e.getClickedInventory().getTitle().equalsIgnoreCase(ChatColor.BLUE + "Schematics Folders")){
  188. if(e.getCurrentItem() != null && !e.getCurrentItem().getType().equals(Material.AIR)){
  189. if(e.getCurrentItem().equals(refresh)){
  190. refreshDatabase();
  191. openBrowser((Player) e.getWhoClicked());
  192. }else{
  193. openBrowser((Player) e.getWhoClicked(), e.getCurrentItem().getItemMeta().getDisplayName());
  194. currentFolder.put(e.getWhoClicked().getName(), e.getCurrentItem().getItemMeta().getDisplayName());
  195. }
  196. }
  197. }else if(e.getClickedInventory().getTitle().equalsIgnoreCase(ChatColor.BLUE + "Schematics Browser")){
  198. if(e.getCurrentItem().equals(goback)){
  199. openBrowser((Player) e.getWhoClicked());
  200. }else if(e.getCurrentItem().equals(refresh)){
  201. refreshDatabase();
  202. openBrowser((Player) e.getWhoClicked(), currentFolder.get(e.getWhoClicked().getName()));
  203. }else{
  204. e.getWhoClicked().closeInventory();
  205. if(currentFolder.get(e.getWhoClicked().getName()).equals("Default")){
  206. Bukkit.getServer().dispatchCommand(e.getWhoClicked(), "/schem load " + e.getCurrentItem().getItemMeta().getDisplayName());
  207. }else{
  208. Bukkit.getServer().dispatchCommand(e.getWhoClicked(), "/schem load " + currentFolder.get(e.getWhoClicked().getName()) + "/" + e.getCurrentItem().getItemMeta().getDisplayName());
  209. }
  210. }
  211. }
  212. }
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement