Another possible fix for #986 - "Disks Disappearing"

This commit is contained in:
raoulvdberge
2017-05-23 18:29:12 +02:00
parent 0e0afa3bcc
commit 594c674506
5 changed files with 85 additions and 8 deletions

View File

@@ -14,6 +14,8 @@ import java.util.List;
public final class RSConfig {
private Configuration config;
public boolean debugLog;
//region Energy
public int controllerBaseUsage;
public int cableUsage;
@@ -135,6 +137,8 @@ public final class RSConfig {
}
private void loadConfig() {
debugLog = config.getBoolean("debugLog", "misc", false, "Whether to debug log diagnostic info to a file");
//region Energy
controllerBaseUsage = config.getInt("controllerBase", ENERGY, 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller");
cableUsage = config.getInt("cable", ENERGY, 0, 0, Integer.MAX_VALUE, "The energy used by Cables");

View File

@@ -58,8 +58,13 @@ import javax.annotation.Nullable;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public final class RSUtils {
public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
@@ -588,4 +593,33 @@ public final class RSUtils {
vertexBuffer.pos(xCoord, yCoord + maskTop, zLevel).tex(uMin, vMin).endVertex();
tessellator.draw();
}
private static Logger debugLog = Logger.getLogger("Refined Storage");
private static FileHandler debugLogFileHandler;
public static void debugLog(String message) {
if (RS.INSTANCE.config.debugLog) {
if (debugLogFileHandler == null) {
try {
debugLogFileHandler = new FileHandler("refinedstorage_debuglog_" + new SimpleDateFormat("Y-m-d_HH_mm_ss").format(Calendar.getInstance().getTime()) + ".log");
} catch (Exception e) {
e.printStackTrace();
}
debugLogFileHandler.setFormatter(new Formatter() {
private SimpleDateFormat logFormatter = new SimpleDateFormat("Y-m-d HH:mm:ss");
@Override
public String format(LogRecord record) {
return "[" + logFormatter.format(new Date(record.getMillis())) + "] " + record.getMessage() + "\r\n";
}
});
debugLog.setUseParentHandlers(false);
debugLog.addHandler(debugLogFileHandler);
}
debugLog.info(message);
}
}
}

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.apiimpl.network;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
import com.raoulvdberge.refinedstorage.apiimpl.API;
@@ -36,7 +37,11 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
if (tag.hasKey(NBT_NODES)) {
NBTTagList list = tag.getTagList(NBT_NODES, Constants.NBT.TAG_COMPOUND);
int nodesRead = 0;
int toRead = list.tagCount();
RSUtils.debugLog("Reading " + toRead + " nodes...");
int read = 0;
for (int i = 0; i < list.tagCount(); ++i) {
NBTTagCompound nodeTag = list.getCompoundTagAt(i);
@@ -50,16 +55,28 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
if (factory != null) {
setNode(pos, factory.apply(data));
++nodesRead;
RSUtils.debugLog("Node at " + pos + " read... (" + (++read) + "/" + toRead + ")");
} else {
RSUtils.debugLog("Factory for node at " + pos + " is null (id: " + id + ")");
}
}
RSUtils.debugLog("Read " + read + " nodes out of " + toRead + " to read");
} else {
RSUtils.debugLog("Cannot read nodes, as there is no 'nodes' tag on this WorldSavedData");
}
}
@Override
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
int toWrite = all().size();
RSUtils.debugLog("Writing " + toWrite + " nodes...");
NBTTagList list = new NBTTagList();
int written = 0;
for (INetworkNode node : all()) {
NBTTagCompound nodeTag = new NBTTagCompound();
@@ -67,11 +84,15 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
nodeTag.setLong(NBT_NODE_POS, node.getPos().toLong());
nodeTag.setTag(NBT_NODE_DATA, node.write(new NBTTagCompound()));
RSUtils.debugLog("Node at " + node.getPos() + " written... (" + (++written) + "/" + toWrite + ")");
list.appendTag(nodeTag);
}
tag.setTag(NBT_NODES, list);
RSUtils.debugLog("Wrote " + written + " nodes out of " + toWrite + " to write");
return tag;
}
@@ -98,6 +119,8 @@ public class NetworkNodeManager extends WorldSavedData implements INetworkNodeMa
@Override
public void clear() {
RSUtils.debugLog("Clearing all nodes!");
nodes.clear();
}

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
import com.raoulvdberge.refinedstorage.apiimpl.API;
@@ -30,6 +31,18 @@ public abstract class BlockNode extends BlockBase {
return true;
}
@Override
public void onBlockAdded(World world, BlockPos pos, IBlockState state) {
super.onBlockAdded(world, pos, state);
RSUtils.debugLog("Node block placed at " + pos + "!");
INetworkNodeManager manager = API.instance().getNetworkNodeManager(world);
manager.setNode(pos, ((TileNode) createTileEntity(world, state)).createNode());
manager.markForSaving();
}
@Override
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) {
super.onBlockPlacedBy(world, pos, state, placer, stack);
@@ -39,6 +52,8 @@ public abstract class BlockNode extends BlockBase {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileNode) {
RSUtils.debugLog("Reading configuration from wrench at " + pos + "!");
((TileNode) tile).getNode().readConfiguration(stack.getTagCompound().getCompoundTag(NBT_REFINED_STORAGE_DATA));
((TileNode) tile).getNode().markDirty();
}
@@ -58,6 +73,8 @@ public abstract class BlockNode extends BlockBase {
removeTile(world, pos, state);
RSUtils.debugLog("Node block broken at " + pos + "!");
manager.removeNode(pos);
manager.markForSaving();

View File

@@ -1,6 +1,6 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
import com.raoulvdberge.refinedstorage.api.util.IWrenchable;
import com.raoulvdberge.refinedstorage.apiimpl.API;
@@ -102,13 +102,10 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
return clientNode;
}
INetworkNodeManager manager = API.instance().getNetworkNodeManager(getWorld());
NetworkNode node = (NetworkNode) manager.getNode(pos);
NetworkNode node = (NetworkNode) API.instance().getNetworkNodeManager(getWorld()).getNode(pos);
if (node == null) {
manager.setNode(pos, node = createNode());
manager.markForSaving();
throw new IllegalStateException("Node cannot be null!");
}
if (node.getContainer().world() == null) {
@@ -136,6 +133,8 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
} else if (legacyTag.getSize() == 6 + 1 && hasMeta && hasForgeData && hasForgeCaps) {
// NO OP
} else {
RSUtils.debugLog("Reading legacy tag data at " + pos + "!");
node.read(legacyTag);
node.markDirty();