1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 03:35:51 +00:00
This commit is contained in:
John000708 2017-04-04 19:53:59 +02:00
commit e98c66544f
9 changed files with 573 additions and 510 deletions

View File

@ -3,18 +3,27 @@
Slimefun is a community project, everyone is welcome to open Issues, make Pull Requests or make Pull Requests for an opened Issue. Slimefun is a community project, everyone is welcome to open Issues, make Pull Requests or make Pull Requests for an opened Issue.
Without your help, this project is going to die. Without your help, this project is going to die.
## General Guidelines
Rules for all types of posts:
1. Follow our Templates for Issues and Pull Request, they are designed to tell you what exact Information we need and how you should present it to us.
2. Be nice and give constructive critism. Insulting, Harassment, Racism, Sexism or any form of bullying or discrimination is not tolerated.
3. Try to engage in conversations by pointing out scenarios to replicate Issues, providing fix approaches or other kind of help.
4. Advertisement is inappropriate and will be removed, especially advertisement for Minecraft Servers is completely unaccepted.
## GitHub Issues ## GitHub Issues
Rules for posting an Issue on GitHub: Rules for posting an Issue on GitHub:
1. This Issue Section is ONLY for Slimefun-related Issues, Issues about other Plugins or Slimefun Addons should not be posted here. 1. This Issue Section is ONLY for Slimefun-related Issues, Issues about other Plugins or Slimefun Addons should not be posted here.
2. Check other Issues before posting to make sure you are not posting a duplicate. 2. Check other Issues before posting to make sure you are not posting a duplicate.
3. Do not put any Tags inside your title like [IMPORTANT], [URGENT] or [SUGGESTION]. 3. Do not put any Tags inside your title like [IMPORTANT], [URGENT] or [SUGGESTION]. Try to be professional by making your title as short as possible, we will assign it the required labels if necessary.
Try to be professional by making your title as short as possible, we will assign it the required labels if necessary. 4. Do not post your Issue more than once, this is considered spam and does not benefit our community in any way. Do not repost your Issue if it was closed either.
4. Do not post your Issue more than once, this is considered spam and does not benefit our community in any way. 5. Give us all available information right away, it may be a bit of time-wasting for us to keep asking for more Info. And this includes any Information to reproduce your Issue step-by-step.
Do not repost your Issue if it was closed either.
5. Give us all available information right away, it may be a bit of time-wasting for us to keep asking for more Info.
6. Check whether there are newer versions available than the ones you are using, it might be that your Issue has been fixed already. 6. Check whether there are newer versions available than the ones you are using, it might be that your Issue has been fixed already.
7. All text logs must be posted via a link to http://pastebin.com or similiar websites.
8. Please read the [FAQ Section](#frequently-asked-questions) before posting.
Your Issue will be CLOSED WITHOUT WARNING if we think you violated these Rules. Your Issue will be CLOSED WITHOUT WARNING if we think you violated these Rules.
@ -22,9 +31,11 @@ Your Issue will be CLOSED WITHOUT WARNING if we think you violated these Rules.
Guidelines for making a Pull Request on GitHub: Guidelines for making a Pull Request on GitHub:
1. Try to be reasonable with your additions. 1. Try to be reasonable with your additions. No, a Bacon flavoured unicorn that flies on a rainbow while dancing Gangnam Style is NOT a reasonable addition to this Project.
No, a Bacon flavoured unicorn that flies on a rainbow while dancing Gangnam Style is NOT a reasonable addition to this Project. 2. Try to make your values configurable in the config.yml / Items.yml or any additional file. This may not be necessary at every instance but it does give the end-users a way to customize their experience.
2. Try to make your values configurable in the config.yml / Items.yml or any additional file. 3. If your Pull Request is made in response to an Issue opened on GitHub, comment on that Issue and reference your Pull Request to show that you are proposing a fix for it.
This may not be necessary at every instance but it does give the end-users a way to customize their experience.
3. If your Pull Request is made in response to an Issue opened on GitHub, ## Frequently Asked Questions
comment on that Issue and reference your Pull Request to show that you are proposing a fix for it.
### Slimefun does not work!?
> Install CS-CoreLib...

View File

@ -10,5 +10,7 @@ Attach as many Screenshots or Videos if possible.
Anything that helps us understand the Issue better, is gonna get your Issue fixed even faster. Anything that helps us understand the Issue better, is gonna get your Issue fixed even faster.
## Environment ## Environment
State what Version of Minecraft, CS-CoreLib and Slimefun you're using We need the EXACT VERSIONS of the Software you are using.
"latest" is not enough, we need the EXACT VERSIONS. This includes your Minecraft Version, your CS-CoreLib version and your Slimefun Version.
If you cannot figure out what versions you are running, then please run /sf versions and
show us the output of that command.

View File

@ -1,4 +1,4 @@
package me.mrCookieSlime.CSCoreLibSetup; package me.mrCookieSlime.Slimefun.CSCoreLibSetup;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -35,18 +35,17 @@ public class CSCoreLibLoader {
if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true; if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true;
else { else {
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - FATAL ERROR - ####################"); System.err.println("#################### - INFO - ####################");
System.err.println(" "); System.err.println(" ");
System.err.println(plugin.getName() + " could not be properly installed!"); System.err.println(plugin.getName() + " could not be loaded.");
System.err.println("It appears that you have not installed CS-CoreLib"); System.err.println("It appears that you have not installed CS-CoreLib");
System.err.println("And because of that, CS-CoreLib is now going to be"); System.err.println("Your Server will now try to download and install");
System.err.println("downloaded and installed."); System.err.println("CS-CoreLib for you.");
System.err.println("But for the time being " + plugin.getName() + " will remain disabled"); System.err.println("You will be asked to restart your Server when it's finished.");
System.err.println("After the installation process has finished,"); System.err.println("If this somehow fails, please download and install CS-CoreLib manually:");
System.out.println("you will be asked to restart your Server."); System.err.println("https://dev.bukkit.org/projects/cs-corelib");
System.err.println("- mrCookieSlime");
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - FATAL ERROR - ####################"); System.err.println("#################### - INFO - ####################");
System.err.println(" "); System.err.println(" ");
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
@ -74,11 +73,13 @@ public class CSCoreLibLoader {
return true; return true;
} catch (IOException e) { } catch (IOException e) {
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - FATAL ERROR - ####################"); System.err.println("#################### - WARNING - ####################");
System.err.println(" "); System.err.println(" ");
System.err.println("Could not connect to BukkitDev, is it down?"); System.err.println("Could not connect to BukkitDev.");
System.err.println("Please download & install CS-CoreLib manually:");
System.err.println("https://dev.bukkit.org/projects/cs-corelib");
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - FATAL ERROR - ####################"); System.err.println("#################### - WARNING - ####################");
System.err.println(" "); System.err.println(" ");
return false; return false;
} }
@ -105,7 +106,7 @@ public class CSCoreLibLoader {
break; break;
} }
return connection.getURL(); return new URL(connection.getURL().toString().replaceAll(" ", "%20"));
} }
private void install() { private void install() {
@ -122,23 +123,25 @@ public class CSCoreLibLoader {
} }
} catch (Exception ex) { } catch (Exception ex) {
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - FATAL ERROR - ####################"); System.err.println("#################### - WARNING - ####################");
System.err.println(" "); System.err.println(" ");
System.err.println("Could not download CS-CoreLib"); System.err.println("Failed to download CS-CoreLib");
System.err.println("Please download & install CS-CoreLib manually:");
System.err.println("https://dev.bukkit.org/projects/cs-corelib");
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - FATAL ERROR - ####################"); System.err.println("#################### - WARNING - ####################");
System.err.println(" "); System.err.println(" ");
} finally { } finally {
try { try {
if (input != null) input.close(); if (input != null) input.close();
if (output != null) output.close(); if (output != null) output.close();
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - WARNING - ####################"); System.err.println("#################### - INFO - ####################");
System.err.println(" "); System.err.println(" ");
System.err.println("Please restart your Server to finish the Installation"); System.err.println("Please restart your Server to finish the Installation");
System.err.println("of " + plugin.getName() + " and CS-CoreLib"); System.err.println("of " + plugin.getName() + " and CS-CoreLib");
System.err.println(" "); System.err.println(" ");
System.err.println("#################### - WARNING - ####################"); System.err.println("#################### - INFO - ####################");
System.err.println(" "); System.err.println(" ");
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -18,9 +18,11 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.CommandHelp; import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.CommandHelp;
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.Players; import me.mrCookieSlime.CSCoreLibPlugin.general.Player.Players;
import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder; import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType; import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType;
import me.mrCookieSlime.Slimefun.SlimefunGuide; import me.mrCookieSlime.Slimefun.SlimefunGuide;
@ -152,21 +154,34 @@ public class SlimefunCommand implements CommandExecutor, Listener {
} }
else if (args[0].equalsIgnoreCase("versions")) { else if (args[0].equalsIgnoreCase("versions")) {
if (sender.hasPermission("slimefun.command.versions")|| sender instanceof ConsoleCommandSender) { if (sender.hasPermission("slimefun.command.versions")|| sender instanceof ConsoleCommandSender) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&a" + Bukkit.getName() + " &2" + ReflectionUtils.getVersion()));
sender.sendMessage("");
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aCS-CoreLib &2v" + CSCoreLib.getLib().getDescription().getVersion()));
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aSlimefun &2v" + plugin.getDescription().getVersion())); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&aSlimefun &2v" + plugin.getDescription().getVersion()));
sender.sendMessage(""); sender.sendMessage("");
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7&oInstalled Addons:"));
List<String> addons = new ArrayList<String>();
for (Plugin plugin: Bukkit.getPluginManager().getPlugins()) { for (Plugin plugin: Bukkit.getPluginManager().getPlugins()) {
if (plugin.getDescription().getDepend().contains("Slimefun") || plugin.getDescription().getSoftDepend().contains("Slimefun")) { if (plugin.getDescription().getDepend().contains("Slimefun") || plugin.getDescription().getSoftDepend().contains("Slimefun")) {
if (Bukkit.getPluginManager().isPluginEnabled(plugin)) { if (Bukkit.getPluginManager().isPluginEnabled(plugin)) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', " &a" + plugin.getName() + " &2v" + plugin.getDescription().getVersion())); addons.add(ChatColor.translateAlternateColorCodes('&', " &a" + plugin.getName() + " &2v" + plugin.getDescription().getVersion()));
} }
else { else {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', " &c" + plugin.getName() + " &4v" + plugin.getDescription().getVersion())); addons.add(ChatColor.translateAlternateColorCodes('&', " &c" + plugin.getName() + " &4v" + plugin.getDescription().getVersion()));
} }
} }
} }
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Installed Addons &8(" + addons.size() + ")"));
for (String addon: addons) {
sender.sendMessage(addon);
}
}
else {
Messages.local.sendTranslation(sender, "messages.no-permission", true);
} }
else Messages.local.sendTranslation(sender, "messages.no-permission", true);
} }
else if (args[0].equalsIgnoreCase("give")) { else if (args[0].equalsIgnoreCase("give")) {
if (args.length == 3) { if (args.length == 3) {

View File

@ -1,26 +1,9 @@
package me.mrCookieSlime.Slimefun; package me.mrCookieSlime.Slimefun;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -37,10 +20,9 @@ import org.bukkit.scheduler.BukkitRunnable;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils; import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils; import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
import me.mrCookieSlime.CSCoreLibSetup.CSCoreLibLoader;
import me.mrCookieSlime.Slimefun.AncientAltar.Pedestals; import me.mrCookieSlime.Slimefun.AncientAltar.Pedestals;
import me.mrCookieSlime.Slimefun.CSCoreLibSetup.CSCoreLibLoader;
import me.mrCookieSlime.Slimefun.Commands.SlimefunCommand; import me.mrCookieSlime.Slimefun.Commands.SlimefunCommand;
import me.mrCookieSlime.Slimefun.Commands.SlimefunTabCompleter; import me.mrCookieSlime.Slimefun.Commands.SlimefunTabCompleter;
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem; import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
@ -55,6 +37,7 @@ import me.mrCookieSlime.Slimefun.Objects.Research;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter;
import me.mrCookieSlime.Slimefun.Setup.Files; import me.mrCookieSlime.Slimefun.Setup.Files;
import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.Setup.MiscSetup; import me.mrCookieSlime.Slimefun.Setup.MiscSetup;
@ -66,6 +49,7 @@ import me.mrCookieSlime.Slimefun.URID.URID;
import me.mrCookieSlime.Slimefun.WorldEdit.WESlimefunManager; import me.mrCookieSlime.Slimefun.WorldEdit.WESlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.SlimefunBackup;
import me.mrCookieSlime.Slimefun.api.TickerTask; import me.mrCookieSlime.Slimefun.api.TickerTask;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock; import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet; import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
@ -89,6 +73,8 @@ import me.mrCookieSlime.Slimefun.listeners.ItemListener;
import me.mrCookieSlime.Slimefun.listeners.TalismanListener; import me.mrCookieSlime.Slimefun.listeners.TalismanListener;
import me.mrCookieSlime.Slimefun.listeners.TeleporterListener; import me.mrCookieSlime.Slimefun.listeners.TeleporterListener;
import me.mrCookieSlime.Slimefun.listeners.ToolListener; import me.mrCookieSlime.Slimefun.listeners.ToolListener;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
public class SlimefunStartup extends JavaPlugin { public class SlimefunStartup extends JavaPlugin {
@ -375,7 +361,7 @@ public class SlimefunStartup extends JavaPlugin {
connector.pullFile(); connector.pullFile();
} }
} }
}, 60L, 20 * 60 * 20L); }, 80L, 60 * 60 * 20L);
// Hooray! // Hooray!
System.out.println("[Slimefun] Finished!"); System.out.println("[Slimefun] Finished!");
@ -409,109 +395,22 @@ public class SlimefunStartup extends JavaPlugin {
public void onDisable() { public void onDisable() {
Bukkit.getScheduler().cancelTasks(this); Bukkit.getScheduler().cancelTasks(this);
try { // Finishes all started movements/removals of block data
for (Map.Entry<Block, Block> entry: ticker.move.entrySet()) { ticker.HALTED = true;
BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue()); ticker.run();
}
ticker.move.clear();
try {
for (World world: Bukkit.getWorlds()) { for (World world: Bukkit.getWorlds()) {
BlockStorage storage = BlockStorage.getStorage(world); BlockStorage storage = BlockStorage.getStorage(world);
if (storage != null) storage.save(true); if (storage != null) {
else System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\""); storage.save(true);
} }
else {
File folder = new File("data-storage/Slimefun/block-backups"); System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
List<File> backups = Arrays.asList(folder.listFiles());
if (backups.size() > 20) {
Collections.sort(backups, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
try {
return (int) (new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f1.getName().replace(".zip", "")).getTime() - new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f2.getName().replace(".zip", "")).getTime());
} catch (ParseException e) {
return 0;
}
}
});
for (int i = backups.size() - 20; i > 0; i--) {
backups.get(i).delete();
} }
} }
File file = new File("data-storage/Slimefun/block-backups/" + Clock.format(new Date()) + ".zip"); SlimefunBackup.start();
byte[] buffer = new byte[1024];
if (file.exists()) file.delete();
try {
file.createNewFile();
ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file));
for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) {
for (File f: f1.listFiles()) {
ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName());
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(f);
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
}
for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName());
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(f);
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName());
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(f);
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc");
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(new File("data-storage/Slimefun/stored-chunks/chunks.sfc"));
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
output.close();
System.out.println("[Slimfun] Backed up Blocks to " + file.getName());
} catch(IOException e) {
e.printStackTrace();
}
} catch(Exception x) { } catch(Exception x) {
} }

View File

@ -0,0 +1,119 @@
package me.mrCookieSlime.Slimefun.api;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
public class SlimefunBackup {
public static void start() {
File folder = new File("data-storage/Slimefun/block-backups");
List<File> backups = Arrays.asList(folder.listFiles());
if (backups.size() > 20) {
Collections.sort(backups, new Comparator<File>() {
@Override
public int compare(File f1, File f2) {
try {
return (int) (new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f1.getName().replace(".zip", "")).getTime() - new SimpleDateFormat("yyyy-MM-dd-HH-mm").parse(f2.getName().replace(".zip", "")).getTime());
} catch (ParseException e) {
return 0;
}
}
});
for (int i = backups.size() - 20; i > 0; i--) {
backups.get(i).delete();
}
}
File file = new File("data-storage/Slimefun/block-backups/" + Clock.format(new Date()) + ".zip");
byte[] buffer = new byte[1024];
if (file.exists()) {
file.delete();
}
try {
file.createNewFile();
ZipOutputStream output = new ZipOutputStream(new FileOutputStream(file));
for (File f1: new File("data-storage/Slimefun/stored-blocks/").listFiles()) {
for (File f: f1.listFiles()) {
ZipEntry entry = new ZipEntry("stored-blocks/" + f1.getName() + "/" + f.getName());
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(f);
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
}
for (File f: new File("data-storage/Slimefun/universal-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("universal-inventories/" + f.getName());
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(f);
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
for (File f: new File("data-storage/Slimefun/stored-inventories/").listFiles()) {
ZipEntry entry = new ZipEntry("stored-inventories/" + f.getName());
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(f);
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
if (new File("data-storage/Slimefun/stored-chunks/chunks.sfc").exists()) {
ZipEntry entry = new ZipEntry("stored-chunks/chunks.sfc");
output.putNextEntry(entry);
FileInputStream input = new FileInputStream(new File("data-storage/Slimefun/stored-chunks/chunks.sfc"));
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.closeEntry();
}
output.close();
System.out.println("[Slimfun] Backed up Blocks to " + file.getName());
} catch(IOException e) {
e.printStackTrace();
}
}
}

View File

@ -23,6 +23,8 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
public class TickerTask implements Runnable { public class TickerTask implements Runnable {
public boolean HALTED = false;
public Map<Block, Block> move = new HashMap<Block, Block>(); public Map<Block, Block> move = new HashMap<Block, Block>();
public Map<Location, Boolean> delete = new HashMap<Location, Boolean>(); public Map<Location, Boolean> delete = new HashMap<Location, Boolean>();
@ -42,6 +44,7 @@ public class TickerTask implements Runnable {
@Override @Override
public void run() { public void run() {
long timestamp = System.currentTimeMillis(); long timestamp = System.currentTimeMillis();
skipped = 0; skipped = 0;
@ -65,6 +68,7 @@ public class TickerTask implements Runnable {
delete.remove(entry.getKey()); delete.remove(entry.getKey());
} }
if (!HALTED) {
for (final String c: BlockStorage.getTickingChunks()) { for (final String c: BlockStorage.getTickingChunks()) {
long timestamp2 = System.currentTimeMillis(); long timestamp2 = System.currentTimeMillis();
chunks++; chunks++;
@ -320,6 +324,7 @@ public class TickerTask implements Runnable {
map_chunktime.put(c, System.currentTimeMillis() - timestamp2); map_chunktime.put(c, System.currentTimeMillis() - timestamp2);
} }
}
for (Map.Entry<Block, Block> entry: move.entrySet()) { for (Map.Entry<Block, Block> entry: move.entrySet()) {
BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue()); BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue());
@ -336,6 +341,8 @@ public class TickerTask implements Runnable {
public void info(CommandSender sender) { public void info(CommandSender sender) {
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2== &aSlimefun Diagnostic Tool &2==")); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&2== &aSlimefun Diagnostic Tool &2=="));
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Halted: &e&l" + String.valueOf(HALTED).toUpperCase()));
sender.sendMessage("");
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Impact: &e" + time + "ms / 50-750ms")); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Impact: &e" + time + "ms / 50-750ms"));
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Chunks: &e" + chunks)); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Chunks: &e" + chunks));
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Machines: &e" + machines)); sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Machines: &e" + machines));

View File

@ -11,7 +11,6 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
public class BlockMenu extends ChestMenu { public class BlockMenu extends ChestMenu {
@ -105,26 +104,6 @@ public class BlockMenu extends ChestMenu {
return this.preset.canOpen(b, p); return this.preset.canOpen(b, p);
} }
@Override
public ChestMenu addItem(int slot, ItemStack item, MenuClickHandler handler) {
addMenuClickHandler(slot, handler);
return super.addItem(slot, item);
}
@Override
public ChestMenu addMenuClickHandler(int slot, final MenuClickHandler handler) {
MenuClickHandler ch = new MenuClickHandler() {
@Override
public boolean onClick(Player p, int slot, ItemStack stack, ClickAction action) {
changes++;
return handler.onClick(p, slot, stack, action);
}
};
return super.addMenuClickHandler(slot, ch);
}
@Override @Override
public void replaceExistingItem(int slot, ItemStack item) { public void replaceExistingItem(int slot, ItemStack item) {
this.replaceExistingItem(slot, item, true); this.replaceExistingItem(slot, item, true);
@ -141,6 +120,16 @@ public class BlockMenu extends ChestMenu {
changes++; changes++;
} }
@Override
public ChestMenu addMenuOpeningHandler(MenuOpeningHandler handler) {
if (handler instanceof SaveHandler) {
return super.addMenuOpeningHandler(new SaveHandler(this, ((SaveHandler) handler).handler));
}
else {
return super.addMenuOpeningHandler(new SaveHandler(this, handler));
}
}
public void close() { public void close() {
Iterator<HumanEntity> iterator = toInventory().getViewers().iterator(); Iterator<HumanEntity> iterator = toInventory().getViewers().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@ -148,4 +137,22 @@ public class BlockMenu extends ChestMenu {
human.closeInventory(); human.closeInventory();
} }
} }
public class SaveHandler implements MenuOpeningHandler {
BlockMenu menu;
MenuOpeningHandler handler;
public SaveHandler(BlockMenu menu, MenuOpeningHandler handler) {
this.handler = handler;
this.menu = menu;
}
@Override
public void onOpen(Player p) {
handler.onOpen(p);
menu.changes++;
}
}
} }

View File

@ -1,5 +1,5 @@
name: Slimefun name: Slimefun
version: 4.1.3 version: 4.1.5
authors: [mrCookieSlime, John000708, st392, DeathlyPanda, BlackBeltPanda] authors: [mrCookieSlime, John000708, st392, DeathlyPanda, BlackBeltPanda]
description: Slimefun basically turns your entire Server into a FTB modpack without installing a single mod description: Slimefun basically turns your entire Server into a FTB modpack without installing a single mod
website: http://TheBusyBiscuit.github.io/ website: http://TheBusyBiscuit.github.io/