Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void removeWorld(CommandSender sender, String worldName) {
- World world = Bukkit.createWorld(new WorldCreator(worldName)); //типо либо получить либо загрузить и получить.
- unloadWorld(world);//это твой метод
- try {
- FileUtils.forceDelete(world.getWorldFolder());
- } catch (IOException e) {
- e.printStackTrace();
- appendWorldNotRemoved(worldName); //это забей, они точно не влияют
- return;
- }
- updateLog(sender.getName(), worldName); //это забей, они точно не влияют
- appendWorldRemoved(worldName); //это забей, они точно не влияют
- }
- public void unloadWorld(World w) {
- for (final Player p : w.getPlayers()) {
- p.kickPlayer("§cТы оказался в мире, который пытаются выгрузить!");
- }
- CraftWorld craftWorld = (CraftWorld) w;
- try {
- craftWorld.getHandle().save(true, null);
- } catch (final ExceptionWorldConflict e) {
- e.printStackTrace();
- }
- craftWorld.getHandle().saveLevel();
- w.setAutoSave(false);
- w.setKeepSpawnInMemory(false);
- Bukkit.getPluginManager().callEvent(new WorldUnloadEvent(craftWorld.getHandle().getWorld()));
- final Iterator<net.minecraft.server.v1_12_R1.Chunk> chunkIterator = craftWorld.getHandle()
- .getChunkProviderServer().chunks.values().iterator();
- for (final Entity entity : craftWorld.getEntities()) {
- entity.remove();
- }
- while (chunkIterator.hasNext()) {
- final net.minecraft.server.v1_12_R1.Chunk chunk = chunkIterator.next();
- chunk.removeEntities();
- }
- craftWorld.getHandle().getChunkProviderServer().chunks.clear();
- craftWorld.getHandle().getChunkProviderServer().unloadQueue.clear();
- final CraftServer server = (CraftServer) Bukkit.getServer();
- final Field field = MyReflection.getField(CraftServer.class, "worlds");
- if (field != null) {
- final Map<?, ?> map = (Map) MyReflection.get(field, server);
- map.remove(craftWorld.getName().toLowerCase());
- MyReflection.set(field, server, map);
- }
- MinecraftServer.getServer().worlds.remove(craftWorld.getHandle());
- final Map<File, RegionFile> regionfiles = RegionFileCache.a;
- final String worldName = craftWorld.getName();
- final List<File> removedKeys = Lists.newArrayList();
- try {
- String ignore = "." + File.separator + worldName;
- for (final Map.Entry<File, RegionFile> o : regionfiles.entrySet()) {
- final File f = o.getKey();
- if (f.toString().startsWith(ignore)) {
- try {
- final RandomAccessFile raf = (RandomAccessFile) MyReflection.get(Reflection.getField(RegionFile.class, "c"),
- o.getValue());
- raf.close();
- removedKeys.add(f);
- } catch (final Exception ex) {
- ex.printStackTrace();
- }
- }
- }
- } catch (final Exception ex) {
- ex.printStackTrace();
- }
- for (final File key : removedKeys) {
- regionfiles.remove(key);
- }
- craftWorld = null;
- w = null;
- System.gc();
- System.runFinalization();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement