Performance improvement

This commit is contained in:
Raoul Van den Berge
2016-05-18 02:20:25 +02:00
parent c30b047e98
commit 077841252f
24 changed files with 62 additions and 38 deletions

View File

@@ -19,7 +19,7 @@ import refinedstorage.proxy.CommonProxy;
@Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION)
public final class RefinedStorage {
public static final String ID = "refinedstorage";
public static final String VERSION = "0.6.4";
public static final String VERSION = "0.6.5";
public static final SimpleNetworkWrapper NETWORK = NetworkRegistry.INSTANCE.newSimpleChannel(ID);

View File

@@ -21,8 +21,8 @@ import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks;
import refinedstorage.RefinedStorageGui;
import refinedstorage.item.ItemBlockController;
import refinedstorage.tile.TileController;
import refinedstorage.tile.TileMachine;
import refinedstorage.tile.controller.TileController;
import java.util.ArrayList;
import java.util.List;

View File

@@ -4,7 +4,7 @@ import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import refinedstorage.container.ContainerController;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
import java.util.List;

View File

@@ -6,7 +6,7 @@ import net.minecraft.client.gui.GuiTextField;
import net.minecraftforge.fml.client.FMLClientHandler;
import org.lwjgl.input.Keyboard;
import refinedstorage.container.ContainerDummy;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
import java.io.IOException;

View File

@@ -14,6 +14,7 @@ import refinedstorage.tile.*;
import refinedstorage.tile.autocrafting.TileCrafter;
import refinedstorage.tile.autocrafting.TileCraftingMonitor;
import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder;
import refinedstorage.tile.controller.TileController;
import refinedstorage.tile.grid.TileGrid;
import refinedstorage.tile.grid.WirelessGrid;
import refinedstorage.tile.solderer.TileSolderer;

View File

@@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import refinedstorage.RefinedStorageBlocks;
import refinedstorage.block.EnumControllerType;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
import java.util.List;

View File

@@ -17,7 +17,7 @@ import net.minecraft.util.text.translation.I18n;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageBlocks;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
import refinedstorage.tile.grid.TileGrid;
import java.util.List;

View File

@@ -9,7 +9,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.proxy.ClientProxy;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
public class MessageControllerEnergyUpdate implements IMessage, IMessageHandler<MessageControllerEnergyUpdate, IMessage> {
public static long LAST_RE_RENDER;

View File

@@ -5,7 +5,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
public class MessageWirelessGridCraftingStart extends MessageHandlerPlayerToServer<MessageWirelessGridCraftingStart> implements IMessage {
private int controllerX;

View File

@@ -5,7 +5,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import refinedstorage.storage.ItemGroup;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
import refinedstorage.tile.grid.WirelessGrid;
import java.util.ArrayList;

View File

@@ -5,7 +5,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
public class MessageWirelessGridStoragePull extends MessageHandlerPlayerToServer<MessageWirelessGridStoragePull> implements IMessage {
private int controllerX;

View File

@@ -5,7 +5,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import refinedstorage.tile.TileController;
import refinedstorage.tile.controller.TileController;
public class MessageWirelessGridStoragePush extends MessageHandlerPlayerToServer<MessageWirelessGridStoragePush> implements IMessage {
private int controllerX;

View File

@@ -26,6 +26,7 @@ import refinedstorage.tile.*;
import refinedstorage.tile.autocrafting.TileCrafter;
import refinedstorage.tile.autocrafting.TileCraftingMonitor;
import refinedstorage.tile.autocrafting.TileProcessingPatternEncoder;
import refinedstorage.tile.controller.TileController;
import refinedstorage.tile.grid.TileGrid;
import refinedstorage.tile.solderer.*;

View File

@@ -156,4 +156,27 @@ public class ItemGroup {
public boolean compareNoQuantity(ItemStack stack) {
return compare(stack, RefinedStorageUtils.COMPARE_NBT | RefinedStorageUtils.COMPARE_DAMAGE);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ItemGroup itemGroup = (ItemGroup) o;
if (quantity != itemGroup.quantity) return false;
if (damage != itemGroup.damage) return false;
if (!type.equals(itemGroup.type)) return false;
return tag != null ? tag.equals(itemGroup.tag) : itemGroup.tag == null;
}
@Override
public int hashCode() {
int result = type.hashCode();
result = 31 * result + quantity;
result = 31 * result + damage;
result = 31 * result + (tag != null ? tag.hashCode() : 0);
return result;
}
}

View File

@@ -4,6 +4,7 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import refinedstorage.tile.controller.TileController;
import java.util.Set;

View File

@@ -4,6 +4,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.controller.TileController;
public class CraftingTaskScheduler {
public static String NBT_SCHEDULED = "CraftingTaskScheduled";

View File

@@ -10,6 +10,7 @@ import refinedstorage.RefinedStorageUtils;
import refinedstorage.network.MessageMachineConnectedUpdate;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.RedstoneMode;
import refinedstorage.tile.controller.TileController;
import java.util.HashSet;
import java.util.Set;

View File

@@ -6,8 +6,8 @@ import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.text.TextFormatting;
import net.minecraftforge.common.util.Constants;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.TileController;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.controller.TileController;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,8 +1,8 @@
package refinedstorage.tile.autocrafting.task;
import net.minecraft.nbt.NBTTagCompound;
import refinedstorage.tile.TileController;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.controller.TileController;
public interface ICraftingTask {
CraftingPattern getPattern();

View File

@@ -7,9 +7,9 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityHopper;
import net.minecraft.util.text.TextFormatting;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.TileController;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.autocrafting.TileCrafter;
import refinedstorage.tile.controller.TileController;
public class ProcessingCraftingTask implements ICraftingTask {
public static final int ID = 1;

View File

@@ -1,4 +1,4 @@
package refinedstorage.tile;
package refinedstorage.tile.controller;
import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyReceiver;
@@ -27,6 +27,10 @@ import refinedstorage.network.MessageWirelessGridItems;
import refinedstorage.storage.IStorage;
import refinedstorage.storage.IStorageProvider;
import refinedstorage.storage.ItemGroup;
import refinedstorage.tile.ISynchronizedContainer;
import refinedstorage.tile.TileBase;
import refinedstorage.tile.TileMachine;
import refinedstorage.tile.TileWirelessTransmitter;
import refinedstorage.tile.autocrafting.CraftingPattern;
import refinedstorage.tile.autocrafting.TileCrafter;
import refinedstorage.tile.autocrafting.task.BasicCraftingTask;
@@ -73,6 +77,8 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
private List<WirelessGridConsumer> wirelessGridConsumers = new ArrayList<WirelessGridConsumer>();
private List<WirelessGridConsumer> wirelessGridConsumersToRemove = new ArrayList<WirelessGridConsumer>();
private List<ItemGroup> combinedGroups = new ArrayList<ItemGroup>();
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private List<TileMachine> machines = new ArrayList<TileMachine>();
@@ -322,46 +328,36 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
}
}
combineItems();
}
private void combineItems() {
List<Integer> markedIndexes = new ArrayList<Integer>();
combinedGroups.clear();
for (int i = 0; i < itemGroups.size(); ++i) {
if (markedIndexes.contains(i)) {
ItemGroup group = itemGroups.get(i);
if (combinedGroups.contains(group)) {
continue;
}
ItemGroup group = itemGroups.get(i);
// If the item doesn't exist anymore, remove it from storage to avoid crashes
if (group.getType() == null) {
markedIndexes.add(i);
combinedGroups.add(group);
} else {
for (int j = i + 1; j < itemGroups.size(); ++j) {
if (markedIndexes.contains(j)) {
ItemGroup otherGroup = itemGroups.get(j);
if (combinedGroups.contains(otherGroup)) {
continue;
}
ItemGroup otherGroup = itemGroups.get(j);
if (group.compareNoQuantity(otherGroup)) {
group.setQuantity(group.getQuantity() + otherGroup.getQuantity());
markedIndexes.add(j);
combinedGroups.add(otherGroup);
}
}
}
}
List<ItemGroup> markedItems = new ArrayList<ItemGroup>();
for (int i : markedIndexes) {
markedItems.add(itemGroups.get(i));
}
itemGroups.removeAll(markedItems);
itemGroups.removeAll(combinedGroups);
}
public boolean push(ItemStack stack) {

View File

@@ -14,8 +14,8 @@ import refinedstorage.network.MessageWirelessGridSettingsUpdate;
import refinedstorage.network.MessageWirelessGridStoragePull;
import refinedstorage.network.MessageWirelessGridStoragePush;
import refinedstorage.storage.ItemGroup;
import refinedstorage.tile.TileController;
import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.controller.TileController;
import java.util.ArrayList;
import java.util.List;