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;
|
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 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;
|
||||||
@ -34,7 +20,6 @@ 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.Slimefun.AncientAltar.Pedestals;
|
import me.mrCookieSlime.Slimefun.AncientAltar.Pedestals;
|
||||||
import me.mrCookieSlime.Slimefun.CSCoreLibSetup.CSCoreLibLoader;
|
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.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;
|
||||||
@ -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!");
|
||||||
@ -408,112 +394,23 @@ public class SlimefunStartup extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
Bukkit.getScheduler().cancelTasks(this);
|
Bukkit.getScheduler().cancelTasks(this);
|
||||||
|
|
||||||
|
// Finishes all started movements/removals of block data
|
||||||
|
ticker.HALTED = true;
|
||||||
|
ticker.run();
|
||||||
|
|
||||||
try {
|
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()) {
|
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
} catch(Exception x) {
|
} 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 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,57 +68,59 @@ public class TickerTask implements Runnable {
|
|||||||
delete.remove(entry.getKey());
|
delete.remove(entry.getKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (final String c: BlockStorage.getTickingChunks()) {
|
if (!HALTED) {
|
||||||
long timestamp2 = System.currentTimeMillis();
|
for (final String c: BlockStorage.getTickingChunks()) {
|
||||||
chunks++;
|
long timestamp2 = System.currentTimeMillis();
|
||||||
|
chunks++;
|
||||||
blocks:
|
|
||||||
for (final Block b: BlockStorage.getTickingBlocks(c)) {
|
blocks:
|
||||||
if (b.getChunk().isLoaded()) {
|
for (final Block b: BlockStorage.getTickingBlocks(c)) {
|
||||||
final Location l = b.getLocation();
|
if (b.getChunk().isLoaded()) {
|
||||||
final SlimefunItem item = BlockStorage.check(l);
|
final Location l = b.getLocation();
|
||||||
if (item != null) {
|
final SlimefunItem item = BlockStorage.check(l);
|
||||||
machines++;
|
if (item != null) {
|
||||||
try {
|
machines++;
|
||||||
item.getTicker().update();
|
try {
|
||||||
if (item.getTicker().isSynchronized()) {
|
item.getTicker().update();
|
||||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
if (item.getTicker().isSynchronized()) {
|
||||||
|
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() {
|
||||||
@Override
|
|
||||||
public void run() {
|
@Override
|
||||||
try {
|
public void run() {
|
||||||
long timestamp3 = System.currentTimeMillis();
|
try {
|
||||||
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
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_machinetime.put(item.getName(), (map_machinetime.containsKey(item.getName()) ? map_machinetime.get(item.getName()): 0) + (System.currentTimeMillis() - timestamp3));
|
||||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
||||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
||||||
} catch(Exception x) {
|
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
||||||
int errors = 0;
|
} catch(Exception x) {
|
||||||
if (bugged.containsKey(l)) errors = bugged.get(l);
|
int errors = 0;
|
||||||
errors++;
|
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||||
|
errors++;
|
||||||
if (errors == 1) {
|
|
||||||
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
if (errors == 1) {
|
||||||
if (file.exists()) {
|
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||||
file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err");
|
|
||||||
if (file.exists()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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 {
|
||||||
try {
|
PrintStream stream = new PrintStream(file);
|
||||||
PrintStream stream = new PrintStream(file);
|
stream.println();
|
||||||
stream.println();
|
stream.println("Server Software: " + Bukkit.getName());
|
||||||
stream.println("Server Software: " + Bukkit.getName());
|
stream.println(" Build: " + Bukkit.getVersion());
|
||||||
stream.println(" Build: " + Bukkit.getVersion());
|
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
stream.println();
|
||||||
stream.println();
|
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
}
|
||||||
}
|
else {
|
||||||
else {
|
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||||
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();
|
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||||
} catch (FileNotFoundException e) {
|
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||||
e.printStackTrace();
|
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] Exception caught while ticking a Block:" + x.getClass().getName());
|
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||||
System.err.println("[Slimefun] Saved as: ");
|
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
System.err.println("[Slimefun] ");
|
||||||
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] ");
|
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||||
|
|
||||||
bugged_blocks.put(l, errors);
|
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
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
l.getBlock().setType(Material.AIR);
|
l.getBlock().setType(Material.AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bugged_blocks.put(l, errors);
|
bugged_blocks.put(l, errors);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
}
|
else {
|
||||||
else {
|
long timestamp3 = System.currentTimeMillis();
|
||||||
long timestamp3 = System.currentTimeMillis();
|
item.getTicker().tick(b, item, BlockStorage.getBlockInfo(l));
|
||||||
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));
|
int errors = 0;
|
||||||
map_chunk.put(c, (map_chunk.containsKey(c) ? map_chunk.get(c): 0) + 1);
|
if (bugged.containsKey(l)) errors = bugged.get(l);
|
||||||
map_machine.put(item.getName(), (map_machine.containsKey(item.getName()) ? map_machine.get(item.getName()): 0) + 1);
|
errors++;
|
||||||
block_timings.put(l, System.currentTimeMillis() - timestamp3);
|
|
||||||
}
|
if (errors == 1) {
|
||||||
tickers.add(item.getTicker());
|
File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err");
|
||||||
} 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 (file.exists()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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()) {
|
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 {
|
||||||
try {
|
PrintStream stream = new PrintStream(file);
|
||||||
PrintStream stream = new PrintStream(file);
|
stream.println();
|
||||||
stream.println();
|
stream.println("Server Software: " + Bukkit.getName());
|
||||||
stream.println("Server Software: " + Bukkit.getName());
|
stream.println(" Build: " + Bukkit.getVersion());
|
||||||
stream.println(" Build: " + Bukkit.getVersion());
|
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
||||||
stream.println(" Minecraft: " + Bukkit.getBukkitVersion());
|
stream.println();
|
||||||
stream.println();
|
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
||||||
stream.println("Installed Plugins (" + Bukkit.getPluginManager().getPlugins().length + ")");
|
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
||||||
for (Plugin p: Bukkit.getPluginManager().getPlugins()) {
|
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled(p)) {
|
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
||||||
stream.println(" + " + p.getName() + " " + p.getDescription().getVersion());
|
}
|
||||||
}
|
else {
|
||||||
else {
|
stream.println(" - " + p.getName() + " " + p.getDescription().getVersion());
|
||||||
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();
|
System.err.println("[Slimefun] Exception caught while ticking a Block:" + x.getClass().getName());
|
||||||
} catch (FileNotFoundException e) {
|
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
||||||
e.printStackTrace();
|
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] Exception caught while ticking a Block:" + x.getClass().getName());
|
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ() + "(" + item.getName() + ")");
|
||||||
System.err.println("[Slimefun] X: " + l.getBlockX() + " Y: " + l.getBlockY() + " Z: " + l.getBlockZ());
|
System.err.println("[Slimefun] has thrown 4 Exceptions in the last 4 Ticks, the Block has been terminated.");
|
||||||
System.err.println("[Slimefun] Saved as: ");
|
System.err.println("[Slimefun] Check your /plugins/Slimefun/error-reports/ folder for details.");
|
||||||
System.err.println("[Slimefun] /plugins/Slimefun/error-reports/" + file.getName());
|
System.err.println("[Slimefun] ");
|
||||||
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] ");
|
BlockStorage._integrated_removeBlockInfo(l, true);
|
||||||
|
|
||||||
bugged_blocks.put(l, errors);
|
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
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
l.getBlock().setType(Material.AIR);
|
l.getBlock().setType(Material.AIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
bugged_blocks.put(l, errors);
|
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()) {
|
for (Map.Entry<Block, Block> entry: move.entrySet()) {
|
||||||
@ -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));
|
||||||
|
Loading…
Reference in New Issue
Block a user