diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2021-12-20 18:22:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-20 18:22:23 -0500 |
commit | 2ab0b2bbb604db246dcc46209ef780ba44d7aa69 (patch) | |
tree | d2513dbf0e511d66aaa8361e330ccb8bdf086bea /src/main/java/net/tylermurphy/hideAndSeek/world | |
parent | 1.3.0 full release (diff) | |
parent | Add Workflows (diff) | |
download | kenshinshideandseek-2ab0b2bbb604db246dcc46209ef780ba44d7aa69.tar.gz kenshinshideandseek-2ab0b2bbb604db246dcc46209ef780ba44d7aa69.tar.bz2 kenshinshideandseek-2ab0b2bbb604db246dcc46209ef780ba44d7aa69.zip |
Merge pull request #12 from tylermurphy534/1.3.1
1.3.1
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/world')
-rw-r--r-- | src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java | 57 | ||||
-rw-r--r-- | src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java | 129 |
2 files changed, 186 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java new file mode 100644 index 0000000..d03fd17 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/VoidGenerator.java @@ -0,0 +1,57 @@ +package net.tylermurphy.hideAndSeek.world; + +import java.util.Collections; +import java.util.List; + +import org.bukkit.World; +import org.bukkit.generator.BlockPopulator; +import org.bukkit.generator.ChunkGenerator; + +public class VoidGenerator extends ChunkGenerator{ + + @Override + public List<BlockPopulator> getDefaultPopulators(World world) { + return Collections.<BlockPopulator>emptyList(); + } + + @Override + public boolean shouldGenerateNoise() { + return false; + } + + @Override + public boolean shouldGenerateSurface() { + return false; + } + + @Override + public boolean shouldGenerateBedrock() { + return false; + } + + @Override + public boolean shouldGenerateCaves() { + return false; + } + + @Override + public boolean shouldGenerateDecorations() { + return false; + } + + @Override + public boolean shouldGenerateMobs() { + return false; + } + + @Override + public boolean shouldGenerateStructures() { + return false; + } + + @Override + public boolean canSpawn(World world, int x, int z) { + return true; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java new file mode 100644 index 0000000..5a8c324 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/world/WorldLoader.java @@ -0,0 +1,129 @@ +package net.tylermurphy.hideAndSeek.world; + +import static net.tylermurphy.hideAndSeek.configuration.Config.*; +import static net.tylermurphy.hideAndSeek.configuration.Localization.message; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import org.bukkit.Bukkit; +import org.bukkit.WorldCreator; + +import net.tylermurphy.hideAndSeek.Main; + +public class WorldLoader { + + String mapname; + String savename; + + public WorldLoader(String mapname) { + this.mapname = mapname; + this.savename = "hideandseek_"+mapname; + } + + public void unloadMap(){ + if(Bukkit.getServer().unloadWorld(Bukkit.getServer().getWorld(savename), false)){ + Main.plugin.getLogger().info("Successfully unloaded " + savename); + }else{ + Main.plugin.getLogger().severe("COULD NOT UNLOAD " + savename); + } + } + + public void loadMap(){ + Bukkit.getServer().createWorld(new WorldCreator(savename).generator(new VoidGenerator())); + Bukkit.getServer().getWorld(savename).setAutoSave(false); + } + + public void rollback(){ + unloadMap(); + loadMap(); + } + + public String save() { + File current = new File(Main.root+File.separator+mapname); + if(current.exists()) { + try { + File destenation = new File(Main.root+File.separator+savename); + File temp_destenation = new File(Main.root+File.separator+"temp_"+savename); + copyFileFolder("region",true); + copyFileFolder("entities",true); + copyFileFolder("datapacks",false); + File srcFile = new File(current, "level.dat"); + File destFile = new File(temp_destenation, "level.dat"); + copyFile(srcFile,destFile); + if(destenation.exists()) { + deleteDirectory(destenation); + destenation.mkdir(); + } + temp_destenation.renameTo(destenation); + } catch(IOException e) { + e.printStackTrace(); + return errorPrefix + message("COMMAND_ERROR"); + } + return messagePrefix + message("MAPSAVE_END"); + } else { + return errorPrefix + message("MAPSAVE_ERROR"); + } + } + + private void copyFileFolder(String name, Boolean isMca) throws IOException { + File region = new File(Main.root+File.separator+mapname+File.separator+name); + File temp = new File(Main.root+File.separator+"temp_"+savename+File.separator+name); + if(region.exists() && region.isDirectory()) { + if(!temp.exists()) + if(!temp.mkdirs()) + throw new IOException("Couldn't create region directory!"); + String files[] = region.list(); + for (String file : files) { + + if(isMca) { + int minX = (int)Math.floor(saveMinX / 32.0); + int minZ = (int)Math.floor(saveMinZ / 32.0); + int maxX = (int)Math.floor(saveMaxX / 32.0); + int maxZ = (int)Math.floor(saveMaxZ / 32.0); + + String[] parts = file.split("."); + if(parts.length > 1) { + Main.plugin.getLogger().info(file); + if( Integer.parseInt(parts[1]) < minX || Integer.parseInt(parts[1]) > maxX ||Integer.parseInt(parts[2]) < minZ || Integer.parseInt(parts[2]) > maxZ ) + continue; + } + } + + File srcFile = new File(region, file); + if(srcFile.isDirectory()) { + copyFileFolder(name+File.separator+file, false); + } else { + File destFile = new File(temp, file); + copyFile(srcFile, destFile); + } + } + } + } + + private void copyFile(File source, File target) throws IOException { + InputStream in = new FileInputStream(source); + OutputStream out = new FileOutputStream(target); + byte[] buffer = new byte[1024]; + int length; + while ((length = in.read(buffer)) > 0) + out.write(buffer, 0, length); + in.close(); + out.close(); + } + + private boolean deleteDirectory(File directoryToBeDeleted) { + File[] allContents = directoryToBeDeleted.listFiles(); + if (allContents != null) { + for (File file : allContents) { + deleteDirectory(file); + } + } + return directoryToBeDeleted.delete(); + } + +} |