mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 03:35:51 +00:00
Maybe made the Block Storage stuff safer, idk
This commit is contained in:
parent
c5f69d81ac
commit
af6ec415b0
@ -1,23 +1,9 @@
|
||||
package me.mrCookieSlime.Slimefun;
|
||||
|
||||
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 org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
@ -34,7 +20,6 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Clock;
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.general.Reflection.ReflectionUtils;
|
||||
import me.mrCookieSlime.Slimefun.AncientAltar.Pedestals;
|
||||
import me.mrCookieSlime.Slimefun.CSCoreLibSetup.CSCoreLibLoader;
|
||||
@ -64,6 +49,7 @@ import me.mrCookieSlime.Slimefun.URID.URID;
|
||||
import me.mrCookieSlime.Slimefun.WorldEdit.WESlimefunManager;
|
||||
import me.mrCookieSlime.Slimefun.api.BlockStorage;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunBackup;
|
||||
import me.mrCookieSlime.Slimefun.api.TickerTask;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
|
||||
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
|
||||
@ -375,7 +361,7 @@ public class SlimefunStartup extends JavaPlugin {
|
||||
connector.pullFile();
|
||||
}
|
||||
}
|
||||
}, 60L, 20 * 60 * 20L);
|
||||
}, 80L, 60 * 60 * 20L);
|
||||
|
||||
// Hooray!
|
||||
System.out.println("[Slimefun] Finished!");
|
||||
@ -408,112 +394,23 @@ public class SlimefunStartup extends JavaPlugin {
|
||||
@Override
|
||||
public void onDisable() {
|
||||
Bukkit.getScheduler().cancelTasks(this);
|
||||
|
||||
|
||||
// Finishes all started movements/removals of block data
|
||||
ticker.HALTED = true;
|
||||
ticker.run();
|
||||
|
||||
try {
|
||||
for (Map.Entry<Block, Block> entry: ticker.move.entrySet()) {
|
||||
BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue());
|
||||
}
|
||||
ticker.move.clear();
|
||||
|
||||
for (World world: Bukkit.getWorlds()) {
|
||||
BlockStorage storage = BlockStorage.getStorage(world);
|
||||
if (storage != null) storage.save(true);
|
||||
else System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
|
||||
}
|
||||
|
||||
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();
|
||||
if (storage != null) {
|
||||
storage.save(true);
|
||||
}
|
||||
else {
|
||||
System.err.println("[Slimefun] Could not save Slimefun Blocks for World \"" + world.getName() + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
SlimefunBackup.start();
|
||||
} catch(Exception x) {
|
||||
}
|
||||
|
||||
|
119
src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java
Normal file
119
src/me/mrCookieSlime/Slimefun/api/SlimefunBackup.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -23,6 +23,8 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
|
||||
|
||||
public class TickerTask implements Runnable {
|
||||
|
||||
public boolean HALTED = false;
|
||||
|
||||
public Map<Block, Block> move = new HashMap<Block, Block>();
|
||||
public Map<Location, Boolean> delete = new HashMap<Location, Boolean>();
|
||||
|
||||
@ -42,6 +44,7 @@ public class TickerTask implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
long timestamp = System.currentTimeMillis();
|
||||
|
||||
skipped = 0;
|
||||
@ -65,57 +68,59 @@ public class TickerTask implements Runnable {
|
||||
delete.remove(entry.getKey());
|
||||
}
|
||||
|
||||
for (final String c: BlockStorage.getTickingChunks()) {
|
||||
long timestamp2 = System.currentTimeMillis();
|
||||
chunks++;
|
||||
|
||||
blocks:
|
||||
for (final Block b: BlockStorage.getTickingBlocks(c)) {
|
||||
if (b.getChunk().isLoaded()) {
|
||||
final Location l = b.getLocation();
|
||||
final SlimefunItem item = BlockStorage.check(l);
|
||||
if (item != null) {
|
||||
machines++;
|
||||
try {
|
||||
item.getTicker().update();
|
||||
if (item.getTicker().isSynchronized()) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
} catch(Exception x) {
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (!HALTED) {
|
||||
for (final String c: BlockStorage.getTickingChunks()) {
|
||||
long timestamp2 = System.currentTimeMillis();
|
||||
chunks++;
|
||||
|
||||
blocks:
|
||||
for (final Block b: BlockStorage.getTickingBlocks(c)) {
|
||||
if (b.getChunk().isLoaded()) {
|
||||
final Location l = b.getLocation();
|
||||
final SlimefunItem item = BlockStorage.check(l);
|
||||
if (item != null) {
|
||||
machines++;
|
||||
try {
|
||||
item.getTicker().update();
|
||||
if (item.getTicker().isSynchronized()) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
} catch(Exception x) {
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -124,113 +129,113 @@ public class TickerTask implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
}
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
});
|
||||
}
|
||||
else {
|
||||
long timestamp3 = System.currentTimeMillis();
|
||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
}
|
||||
tickers.add(item.getTicker());
|
||||
} catch(Exception x) {
|
||||
|
||||
map_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||
}
|
||||
tickers.add(item.getTicker());
|
||||
} catch(Exception x) {
|
||||
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
int errors = 0;
|
||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||
errors++;
|
||||
|
||||
if (errors == 1) {
|
||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err");
|
||||
if (file.exists()) {
|
||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -239,86 +244,86 @@ public class TickerTask implements Runnable {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
try {
|
||||
PrintStream stream = new PrintStream(file);
|
||||
stream.println();
|
||||
stream.println("Server Software: " + Bukkit.getName());
|
||||
stream.println(" Build: " + Bukkit.getVersion());
|
||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||
stream.println();
|
||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
else {
|
||||
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||
}
|
||||
}
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
stream.println();
|
||||
stream.println("Ticked Block:");
|
||||
stream.println(" World: " + l.getWorld().getName());
|
||||
stream.println(" X: " + l.getBlockX());
|
||||
stream.println(" Y: " + l.getBlockY());
|
||||
stream.println(" Z: " + l.getBlockZ());
|
||||
stream.println();
|
||||
stream.println("Slimefun Data:");
|
||||
stream.println(" ID: " + item.getName());
|
||||
stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l));
|
||||
stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l));
|
||||
stream.println();
|
||||
stream.println("Stacktrace:");
|
||||
stream.println();
|
||||
x.printStackTrace(stream);
|
||||
|
||||
stream.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
|
||||
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||
System.err.println("[Slimefun] Saved as: ");
|
||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
||||
System.err.println("[Slimefun] Please consider sending this File to the developer(s) of Slimefun, sending this Error won't get you any help though.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
else if (errors == 4) {
|
||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||
System.err.println("[Slimefun] ");
|
||||
|
||||
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
@Override
|
||||
public void run() {
|
||||
l.getBlock().setType(Material.AIR);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
else {
|
||||
bugged_blocks.put(l, errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
else skipped++;
|
||||
}
|
||||
else {
|
||||
skipped += BlockStorage.getTickingBlocks(c).size();
|
||||
skipped_chunks.add(c);
|
||||
chunks--;
|
||||
break blocks;
|
||||
}
|
||||
else skipped++;
|
||||
}
|
||||
else {
|
||||
skipped += BlockStorage.getTickingBlocks(c).size();
|
||||
skipped_chunks.add(c);
|
||||
chunks--;
|
||||
break blocks;
|
||||
}
|
||||
|
||||
map_chunktime.put(c, System.currentTimeMillis() - timestamp2);
|
||||
}
|
||||
|
||||
map_chunktime.put(c, System.currentTimeMillis() - timestamp2);
|
||||
}
|
||||
|
||||
for (Map.Entry<Block, Block> entry: move.entrySet()) {
|
||||
@ -336,6 +341,8 @@ public class TickerTask implements Runnable {
|
||||
|
||||
public void info(CommandSender sender) {
|
||||
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('&', "&6Ticked Chunks: &e" + chunks));
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&6Ticked Machines: &e" + machines));
|
||||
|
Loading…
Reference in New Issue
Block a user