Advertisement
MsGamerHD

Untitled

Aug 23rd, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.18 KB | None | 0 0
  1. package de.msgamerhd.lostisland.befehle;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7.  
  8. import org.bukkit.Location;
  9. import org.bukkit.Material;
  10. import org.bukkit.block.Block;
  11. import org.bukkit.command.Command;
  12. import org.bukkit.command.CommandExecutor;
  13. import org.bukkit.command.CommandSender;
  14. import org.bukkit.configuration.file.YamlConfiguration;
  15. import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
  16. import org.bukkit.entity.Player;
  17. import org.bukkit.inventory.Inventory;
  18. import org.bukkit.scheduler.BukkitRunnable;
  19.  
  20. import de.msgamerhd.lostisland.LostIsland;
  21. import de.msgamerhd.lostisland.generator.GeneratorItemsUtils;
  22. import de.msgamerhd.lostisland.generator.LavaType;
  23. import de.msgamerhd.lostisland.generator.PlaceBreakGenerator;
  24. import de.msgamerhd.lostisland.insel.InselSettingsUtils;
  25. import de.msgamerhd.lostisland.insel.InselUtils;
  26. import de.msgamerhd.lostisland.settings.Settings;
  27. import de.msgamerhd.lostisland.utils.FileManager;
  28. import de.msgamerhd.lostisland.utils.NachrichtUtils;
  29.  
  30. /**
  31.  * Class created by MsGamerHD on 03.07.2016
  32.  */
  33. @SuppressWarnings("deprecation")
  34. public class Einrichten_CMD implements CommandExecutor{
  35.    
  36.     public static String co = Settings.co;
  37.     public static String pr = Settings.pr;
  38.     public static String wn = Settings.wn;
  39.     public static String kr = Settings.kr;
  40.     public static String hrv = Settings.hrv;
  41.     public static String acpt = Settings.acpt;
  42.     public static String abl = Settings.abl;
  43.     public static String perm = Settings.perm;
  44.  
  45.     public static String trennungFrAlles = "-";
  46.     public static String trennungFrBlcke = "";
  47.  
  48.     public static HashMap<String, Location> pos1list = new HashMap<>();
  49.     public static HashMap<String, Location> pos2list = new HashMap<>();
  50.      
  51.     @Override
  52.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  53.        
  54.         if(!(sender instanceof Player)){
  55.             sender.sendMessage("Du musst ein Spieler sein!");
  56.             return true;
  57.         }
  58.        
  59.         Player p = (Player) sender;
  60.        
  61.         if(NachrichtUtils.hasPermissions(p, cmd.getName())){
  62.             //einrichten <pos1/pos2/saveschematic>
  63.            
  64.             if(args.length == 1){
  65.                 if(args[0].equalsIgnoreCase("pos1")){
  66.                     pos1list.put(p.getName(), p.getLocation());
  67.                     p.sendMessage(pr+"Du hast die erste Position ausgewhlt.");
  68.                     return true;
  69.                 } else if(args[0].equalsIgnoreCase("pos2")){
  70.                     pos2list.put(p.getName(), p.getLocation());
  71.                     p.sendMessage(pr+"Du hast die zweite Position ausgewhlt.");
  72.                     return true;
  73.                 } else if(args[0].equalsIgnoreCase("test")){
  74.                     loadSchematic(p, p.getLocation());
  75.                     return true;
  76.                 } else if(args[0].equalsIgnoreCase("saveschematic")){
  77.                     saveSchematic(p);
  78.                     return true;
  79.                 }
  80.             }
  81.             NachrichtUtils.sendWrongUse(p, "einrichten <pos1/pos2/saveschematic>");
  82.            
  83.         }
  84.        
  85.         return false;
  86.     }
  87.    
  88.     public static void loadSchematic(Player p, Location mitte){
  89.        
  90.         p.sendMessage(pr+"Die Insel wird geladen... Die Insel ist in ca. "+hrv+getDauer()+" Sekunden "+co+"fr dich bereit!");
  91.         loadSchematic(p.getName(), mitte);
  92.     }
  93.    
  94.     public static int getDauer(){
  95.         File file = FileManager.getSchematicFile();
  96.         YamlConfiguration cfg = YamlConfiguration.loadConfiguration(file);
  97.        
  98.         int count = cfg.getInt("schematic.count");
  99.        
  100.         return count/(20*Settings.blocksPerTick);
  101.     }
  102.    
  103.     public static void saveSchematic(Player p){
  104.         if(!pos1list.containsKey(p.getName())){
  105.             NachrichtUtils.sendFehler(p, "Du musst noch die "+hrv+"erste"+wn+" Position setzen!");
  106.             return;
  107.         }
  108.         if(!pos2list.containsKey(p.getName())){
  109.             NachrichtUtils.sendFehler(p, "Du musst noch die "+hrv+"zweite"+wn+" Position setzen!");
  110.             return;
  111.         }
  112.  
  113.         Location loc1 = pos1list.get(p.getName());
  114.         Location loc2 = pos2list.get(p.getName());
  115.        
  116.         Location mitte = p.getLocation();
  117.        
  118.         if(!(loc1.getWorld() == loc2.getWorld())){
  119.             NachrichtUtils.sendFehler(p, "Die Positionen mssen auf der "+hrv+"gleichen Welt"+co+" sein!");
  120.             return;
  121.         }
  122.        
  123.         File create = FileManager.getSchematicFile();
  124.         create.delete();
  125.         File file = FileManager.getSchematicFile();
  126.         YamlConfiguration cfg = YamlConfiguration.loadConfiguration(file);
  127.        
  128.         mitte = mitte.subtract(0, 1, 0);
  129.  
  130.         int maxX = (int) Math.max(loc1.getX(), loc2.getX());
  131.         int maxY = (int) Math.max(loc1.getY(), loc2.getY());
  132.         int maxZ = (int) Math.max(loc1.getZ(), loc2.getZ());
  133.  
  134.         int minX = (int) Math.min(loc1.getX(), loc2.getX());
  135.         int minY = (int) Math.min(loc1.getY(), loc2.getY());
  136.         int minZ = (int) Math.min(loc1.getZ(), loc2.getZ());
  137.  
  138.         int count = 0;
  139.        
  140.         HashMap<Integer, String> allesMAP = new HashMap<>();
  141.        
  142.         for(int x = minX; x < maxX; x++){
  143.             for(int y = minY; y < maxY; y++){
  144.                 for(int z = minZ; z < maxZ; z++){
  145.                     Location loc = new Location(loc1.getWorld(), x, y, z);
  146.                     Block block = loc.getBlock();
  147.                    
  148.                     if(block != null){
  149.                         String id = block.getTypeId()+trennungFrBlcke+loc.getBlock().getData();
  150.                         String distance = (loc.getBlockX()-mitte.getBlockX())+trennungFrBlcke+(loc.getBlockY()-mitte.getBlockY())+trennungFrBlcke+(loc.getBlockZ()-mitte.getBlockZ());
  151.                        
  152.                         if(block.getTypeId() != 0 && block.getTypeId() != 8 && block.getTypeId() != 9){
  153.                             count++;
  154.                             allesMAP.put(count, distance+trennungFrBlcke+id);
  155.                         }
  156.                     }
  157.                 }
  158.             }
  159.         }
  160.         final int countCopy = count;
  161.         new BukkitRunnable() {
  162.            
  163.             @Override
  164.             public void run() {
  165.                 for(int i = 0; i < 80000; i++){
  166.                     if(allesMAP.isEmpty()){
  167.                         ((CraftPlayer)p).sendTitle("aabgeschlossen", countCopy+"/"+countCopy+" Blcke");
  168.                         cancel();
  169.                         break;
  170.                     }
  171.                     for(int number : allesMAP.keySet()){
  172.                         cfg.set("schematic.number."+number, allesMAP.get(number));
  173.                         allesMAP.remove(number);
  174.                         break;
  175.                     }
  176.                 }
  177.                 if(p != null){
  178.                     ((CraftPlayer)p).sendTitle("4wird gespeichert...", countCopy-allesMAP.size()+" von "+countCopy+" Blcke");
  179.                 }
  180.                 try {
  181.                     cfg.save(file);
  182.                 } catch (Exception e) {}
  183.             }
  184.         }.runTaskTimer(LostIsland.getInstance(), 10, 10*20);
  185.        
  186.         cfg.set("schematic.count", count);
  187.        
  188.         try {
  189.             cfg.save(file);
  190.         } catch (IOException e) {}
  191.        
  192.     }
  193.  
  194.     @SuppressWarnings("unchecked")
  195.     public static void loadSchematic(String name, Location mitte) {
  196.         InselSettingsUtils.setCanJoin(name, false);
  197.         ArrayList<String> alles = (ArrayList<String>) LostIsland.allesarraylist.clone();
  198.        
  199.         new BukkitRunnable() {
  200.             @Override
  201.             public void run() {
  202.                 for(int i = 0; i < Settings.blocksPerTick; i++){
  203.                     for (String all : alles) {
  204.                         String[] alledaten = all.split(trennungFrBlcke);
  205.                         int xdistance = Integer.parseInt(alledaten[0]);
  206.                         int ydistance = Integer.parseInt(alledaten[1]);
  207.                         int zdistance = Integer.parseInt(alledaten[2]);
  208.  
  209.                         int type = Integer.parseInt(alledaten[3]);
  210.                         int data = Integer.parseInt(alledaten[4]);
  211.  
  212.                         int newX = (int) (mitte.getX() + xdistance);
  213.                         int newY = (int) (mitte.getY() + ydistance);
  214.                         int newZ = (int) (mitte.getZ() + zdistance);
  215.                        
  216.                         Block block = InselUtils.inselworld.getBlockAt(newX, newY, newZ);
  217.                         if(type == 169){
  218.                             block.setType(Material.CHEST);
  219.                            
  220.                             Inventory chest = GeneratorItemsUtils.getInventoryChest(new Location(mitte.getWorld(), newX, newY, newZ));
  221.                            
  222.                             chest.setItem(2, GeneratorItemsUtils.getItem(Material.LEATHER_HELMET, 1, 11, null, null));
  223.                             chest.setItem(9+5, GeneratorItemsUtils.getItem(Material.LEATHER_CHESTPLATE, 1, 33, null, null));
  224.                             chest.setItem(2*9+2, GeneratorItemsUtils.getItem(Material.LEATHER_LEGGINGS, 1, 18, null, null));
  225.                             chest.setItem(8, GeneratorItemsUtils.getItem(Material.LEATHER_BOOTS, 1, 9, null, null));
  226.                             chest.setItem(9+3, GeneratorItemsUtils.getItem(Material.STONE_SWORD, 1, 15, null, null));
  227.                             chest.setItem(2*9+7, GeneratorItemsUtils.getItem(Material.WOOD_PICKAXE, 1, 9, null, null));
  228.                             chest.setItem(2*9+4, GeneratorItemsUtils.getItem(Material.RAW_FISH, 7, 0, null, null));
  229.                             chest.setItem(7, GeneratorItemsUtils.getItem(Material.RAW_FISH, 3, 0, null, null));
  230.  
  231.                             chest.setItem(0, PlaceBreakGenerator.generatoritem);
  232.                             chest.setItem(6, LavaType.LAVAENERGIE.getLava());
  233.                             chest.setItem(2*9+0, LavaType.LAVAENERGIE.getLava());
  234.                             chest.setItem(9+8, LavaType.SONNENENERGIE.getLava());
  235.                         } else if(type == 41){
  236.                             block.setType(Material.CHEST);
  237.                            
  238.                             Inventory chest = GeneratorItemsUtils.getInventoryChest(new Location(mitte.getWorld(), newX, newY, newZ));
  239.                            
  240.                             chest.setItem(1*9+7, GeneratorItemsUtils.getItem(Material.STONE_PICKAXE, 1, 9, null, null));
  241.                             chest.setItem(2*9+4, GeneratorItemsUtils.getItem(Material.RAW_FISH, 7, 0, null, null));
  242.  
  243.                             chest.setItem(0, PlaceBreakGenerator.generatoritem);
  244.                             chest.setItem(6, LavaType.LAVAENERGIE.getLava());
  245.                             chest.setItem(2*9+0, LavaType.LAVAENERGIE.getLava());
  246.                             chest.setItem(9+8, LavaType.SONNENENERGIE.getLava());
  247.                         } else {
  248.                             block.setTypeId(type);
  249.                             block.setData((byte) data);
  250.                         }
  251.                         alles.remove(all);
  252.                         break;
  253.                     }
  254.                 }
  255.                
  256.                 if(alles.isEmpty()){
  257.                     InselSettingsUtils.setCanJoin(name, true);
  258.                     cancel();
  259.                 }
  260.             }
  261.         }.runTaskTimer(LostIsland.getInstance(), 10, 1);
  262.     }
  263.    
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement