Advertisement
Exception_Prototype

Untitled

Jun 5th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.60 KB | None | 0 0
  1.     public void removeWorld(CommandSender sender, String worldName) {
  2.  
  3.         World world = Bukkit.createWorld(new WorldCreator(worldName)); //типо либо получить либо загрузить и получить.
  4.  
  5.         unloadWorld(world);//это твой метод
  6.  
  7.         try {
  8.             FileUtils.forceDelete(world.getWorldFolder());
  9.         } catch (IOException e) {
  10.             e.printStackTrace();
  11.             appendWorldNotRemoved(worldName); //это забей, они точно не влияют
  12.             return;
  13.         }
  14.  
  15.         updateLog(sender.getName(), worldName); //это забей, они точно не влияют
  16.         appendWorldRemoved(worldName); //это забей, они точно не влияют
  17.     }
  18.  
  19.     public void unloadWorld(World w) {
  20.         for (final Player p : w.getPlayers()) {
  21.             p.kickPlayer("§cТы оказался в мире, который пытаются выгрузить!");
  22.         }
  23.         CraftWorld craftWorld = (CraftWorld) w;
  24.         try {
  25.             craftWorld.getHandle().save(true, null);
  26.         } catch (final ExceptionWorldConflict e) {
  27.             e.printStackTrace();
  28.         }
  29.         craftWorld.getHandle().saveLevel();
  30.         w.setAutoSave(false);
  31.         w.setKeepSpawnInMemory(false);
  32.         Bukkit.getPluginManager().callEvent(new WorldUnloadEvent(craftWorld.getHandle().getWorld()));
  33.         final Iterator<net.minecraft.server.v1_12_R1.Chunk> chunkIterator = craftWorld.getHandle()
  34.                 .getChunkProviderServer().chunks.values().iterator();
  35.         for (final Entity entity : craftWorld.getEntities()) {
  36.             entity.remove();
  37.         }
  38.         while (chunkIterator.hasNext()) {
  39.             final net.minecraft.server.v1_12_R1.Chunk chunk = chunkIterator.next();
  40.             chunk.removeEntities();
  41.         }
  42.         craftWorld.getHandle().getChunkProviderServer().chunks.clear();
  43.         craftWorld.getHandle().getChunkProviderServer().unloadQueue.clear();
  44.         final CraftServer server = (CraftServer) Bukkit.getServer();
  45.         final Field field = MyReflection.getField(CraftServer.class, "worlds");
  46.         if (field != null) {
  47.             final Map<?, ?> map = (Map) MyReflection.get(field, server);
  48.             map.remove(craftWorld.getName().toLowerCase());
  49.             MyReflection.set(field, server, map);
  50.         }
  51.         MinecraftServer.getServer().worlds.remove(craftWorld.getHandle());
  52.         final Map<File, RegionFile> regionfiles = RegionFileCache.a;
  53.         final String worldName = craftWorld.getName();
  54.         final List<File> removedKeys = Lists.newArrayList();
  55.         try {
  56.             String ignore = "." + File.separator + worldName;
  57.             for (final Map.Entry<File, RegionFile> o : regionfiles.entrySet()) {
  58.                 final File f = o.getKey();
  59.                 if (f.toString().startsWith(ignore)) {
  60.                     try {
  61.                         final RandomAccessFile raf = (RandomAccessFile) MyReflection.get(Reflection.getField(RegionFile.class, "c"),
  62.                                 o.getValue());
  63.                         raf.close();
  64.                         removedKeys.add(f);
  65.                     } catch (final Exception ex) {
  66.                         ex.printStackTrace();
  67.                     }
  68.                 }
  69.             }
  70.         } catch (final Exception ex) {
  71.             ex.printStackTrace();
  72.         }
  73.         for (final File key : removedKeys) {
  74.             regionfiles.remove(key);
  75.         }
  76.         craftWorld = null;
  77.         w = null;
  78.         System.gc();
  79.         System.runFinalization();
  80.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement