Revert networkmasterregistry changes.
This commit is contained in:
@@ -3,7 +3,6 @@ package refinedstorage.api.network;
|
|||||||
import cofh.api.energy.EnergyStorage;
|
import cofh.api.energy.EnergyStorage;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||||
@@ -19,14 +18,6 @@ public interface INetworkMaster {
|
|||||||
*/
|
*/
|
||||||
World getWorld();
|
World getWorld();
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes this network.
|
|
||||||
* Starting from this call {@link INetworkMaster#update()} will be called every server tick.
|
|
||||||
*
|
|
||||||
* @param world The world this network is in
|
|
||||||
*/
|
|
||||||
void setWorld(World world);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The energy storage of this network
|
* @return The energy storage of this network
|
||||||
*/
|
*/
|
||||||
@@ -60,12 +51,12 @@ public interface INetworkMaster {
|
|||||||
/**
|
/**
|
||||||
* @param slave The slave to add
|
* @param slave The slave to add
|
||||||
*/
|
*/
|
||||||
void addSlave(BlockPos slave);
|
void addSlave(INetworkSlave slave);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param slave The slave to remove
|
* @param slave The slave to remove
|
||||||
*/
|
*/
|
||||||
void removeSlave(BlockPos slave);
|
void removeSlave(INetworkSlave slave);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The grid handler for this network
|
* @return The grid handler for this network
|
||||||
@@ -203,8 +194,4 @@ public interface INetworkMaster {
|
|||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
ItemStack getItem(ItemStack stack, int flags);
|
ItemStack getItem(ItemStack stack, int flags);
|
||||||
|
|
||||||
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
|
||||||
|
|
||||||
void readFromNBT(NBTTagCompound tag);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,700 +0,0 @@
|
|||||||
package refinedstorage.apiimpl.network;
|
|
||||||
|
|
||||||
import cofh.api.energy.EnergyStorage;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.nbt.NBTTagList;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.common.util.Constants;
|
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
|
||||||
import refinedstorage.RefinedStorage;
|
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
|
||||||
import refinedstorage.RefinedStorageUtils;
|
|
||||||
import refinedstorage.api.RefinedStorageCapabilities;
|
|
||||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
|
||||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
|
||||||
import refinedstorage.api.network.IGridHandler;
|
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
|
||||||
import refinedstorage.api.network.INetworkSlave;
|
|
||||||
import refinedstorage.api.network.IWirelessGridHandler;
|
|
||||||
import refinedstorage.api.storage.CompareFlags;
|
|
||||||
import refinedstorage.api.storage.IStorage;
|
|
||||||
import refinedstorage.api.storage.IStorageProvider;
|
|
||||||
import refinedstorage.apiimpl.autocrafting.BasicCraftingTask;
|
|
||||||
import refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
|
||||||
import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask;
|
|
||||||
import refinedstorage.block.BlockController;
|
|
||||||
import refinedstorage.block.EnumControllerType;
|
|
||||||
import refinedstorage.container.ContainerGrid;
|
|
||||||
import refinedstorage.item.ItemPattern;
|
|
||||||
import refinedstorage.network.MessageGridItems;
|
|
||||||
import refinedstorage.tile.TileCable;
|
|
||||||
import refinedstorage.tile.TileCrafter;
|
|
||||||
import refinedstorage.tile.TileWirelessTransmitter;
|
|
||||||
import refinedstorage.tile.config.RedstoneMode;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class NetworkMaster implements INetworkMaster {
|
|
||||||
public static final int ENERGY_CAPACITY = 32000;
|
|
||||||
|
|
||||||
public static final String NBT_CRAFTING_TASKS = "CraftingTasks";
|
|
||||||
public static final String NBT_ENERGY = "Energy";
|
|
||||||
public static final String NBT_SLAVES = "Slaves";
|
|
||||||
public static final String NBT_SLAVE_X = "X";
|
|
||||||
public static final String NBT_SLAVE_Y = "Y";
|
|
||||||
public static final String NBT_SLAVE_Z = "Z";
|
|
||||||
|
|
||||||
private GridHandler gridHandler = new GridHandler(this);
|
|
||||||
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
|
||||||
|
|
||||||
private List<ItemStack> items = new ArrayList<ItemStack>();
|
|
||||||
private List<ItemStack> combinedItems = new ArrayList<ItemStack>();
|
|
||||||
private Set<Integer> combinedItemsIndices = new HashSet<Integer>();
|
|
||||||
|
|
||||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
|
||||||
|
|
||||||
private List<BlockPos> slaves = new ArrayList<BlockPos>();
|
|
||||||
private List<INetworkSlave> actualSlaves = new ArrayList<INetworkSlave>();
|
|
||||||
private Map<BlockPos, Boolean> slaveConnectivity = new HashMap<BlockPos, Boolean>();
|
|
||||||
private List<BlockPos> slavesToAdd = new ArrayList<BlockPos>();
|
|
||||||
private List<BlockPos> slavesToLoad = new ArrayList<BlockPos>();
|
|
||||||
private List<BlockPos> slavesToRemove = new ArrayList<BlockPos>();
|
|
||||||
|
|
||||||
private List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
|
||||||
|
|
||||||
private Stack<ICraftingTask> craftingTasks = new Stack<ICraftingTask>();
|
|
||||||
private List<ICraftingTask> craftingTasksToAddAsLast = new ArrayList<ICraftingTask>();
|
|
||||||
private List<ICraftingTask> craftingTasksToAdd = new ArrayList<ICraftingTask>();
|
|
||||||
private List<ICraftingTask> craftingTasksToCancel = new ArrayList<ICraftingTask>();
|
|
||||||
|
|
||||||
private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY);
|
|
||||||
private int energyUsage;
|
|
||||||
|
|
||||||
private boolean couldRun;
|
|
||||||
private long lastEnergyUpdate;
|
|
||||||
|
|
||||||
private int ticks;
|
|
||||||
|
|
||||||
private EnumControllerType type;
|
|
||||||
|
|
||||||
private World world;
|
|
||||||
private BlockPos pos;
|
|
||||||
|
|
||||||
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
|
||||||
|
|
||||||
public NetworkMaster(BlockPos pos, World world) {
|
|
||||||
this.pos = pos;
|
|
||||||
|
|
||||||
setWorld(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
public NetworkMaster(BlockPos pos) {
|
|
||||||
this.pos = pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
public RedstoneMode getRedstoneMode() {
|
|
||||||
return redstoneMode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRedstoneMode(RedstoneMode mode) {
|
|
||||||
this.redstoneMode = mode;
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public EnergyStorage getEnergy() {
|
|
||||||
return energy;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnergyUsage() {
|
|
||||||
return energyUsage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockPos getPosition() {
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public World getWorld() {
|
|
||||||
return world;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setWorld(World world) {
|
|
||||||
this.world = world;
|
|
||||||
this.type = (EnumControllerType) world.getBlockState(pos).getValue(BlockController.TYPE);
|
|
||||||
|
|
||||||
for (BlockPos slavePos : slavesToLoad) {
|
|
||||||
INetworkSlave slave = world.getTileEntity(slavePos).getCapability(RefinedStorageCapabilities.NETWORK_SLAVE_CAPABILITY, null);
|
|
||||||
|
|
||||||
slave.forceConnect(this);
|
|
||||||
|
|
||||||
if (!(slave instanceof TileCable)) {
|
|
||||||
slaves.add(slavePos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.slavesToLoad.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canRun() {
|
|
||||||
return energy.getEnergyStored() > 0 && energy.getEnergyStored() >= energyUsage && redstoneMode.isEnabled(world, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update() {
|
|
||||||
boolean forceUpdate = !slavesToAdd.isEmpty() || !slavesToRemove.isEmpty();
|
|
||||||
|
|
||||||
for (BlockPos slave : slavesToAdd) {
|
|
||||||
if (!slaves.contains(slave)) {
|
|
||||||
slaves.add(slave);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
slavesToAdd.clear();
|
|
||||||
|
|
||||||
slaves.removeAll(slavesToRemove);
|
|
||||||
slavesToRemove.clear();
|
|
||||||
|
|
||||||
int lastEnergy = energy.getEnergyStored();
|
|
||||||
|
|
||||||
if (canRun()) {
|
|
||||||
if (ticks % 20 == 0 || forceUpdate) {
|
|
||||||
updateSlaves();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (INetworkSlave slave : getSlaves()) {
|
|
||||||
if (slave.canUpdate()) {
|
|
||||||
slave.updateSlave();
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean active = slave.canUpdate();
|
|
||||||
|
|
||||||
if (!slaveConnectivity.containsKey(slave.getPosition()) || slaveConnectivity.get(slave.getPosition()) != active) {
|
|
||||||
slaveConnectivity.put(slave.getPosition(), active);
|
|
||||||
|
|
||||||
if (slave.canSendConnectivityUpdate()) {
|
|
||||||
RefinedStorageUtils.updateBlock(world, slave.getPosition());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
|
||||||
taskToCancel.onCancelled(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
craftingTasks.removeAll(craftingTasksToCancel);
|
|
||||||
craftingTasksToCancel.clear();
|
|
||||||
|
|
||||||
for (ICraftingTask task : craftingTasksToAdd) {
|
|
||||||
craftingTasks.push(task);
|
|
||||||
}
|
|
||||||
|
|
||||||
craftingTasksToAdd.clear();
|
|
||||||
|
|
||||||
for (ICraftingTask task : craftingTasksToAddAsLast) {
|
|
||||||
craftingTasks.add(0, task);
|
|
||||||
}
|
|
||||||
|
|
||||||
craftingTasksToAddAsLast.clear();
|
|
||||||
|
|
||||||
if (!craftingTasks.empty()) {
|
|
||||||
ICraftingTask top = craftingTasks.peek();
|
|
||||||
|
|
||||||
if (ticks % top.getPattern().getContainer(world).getSpeed() == 0 && top.update(this)) {
|
|
||||||
top.onDone(this);
|
|
||||||
|
|
||||||
craftingTasks.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (!slaves.isEmpty()) {
|
|
||||||
disconnectAll();
|
|
||||||
updateSlaves();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (couldRun != canRun()) {
|
|
||||||
couldRun = canRun();
|
|
||||||
|
|
||||||
world.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER);
|
|
||||||
}
|
|
||||||
|
|
||||||
wirelessGridHandler.update();
|
|
||||||
|
|
||||||
if (type == EnumControllerType.NORMAL && energyUsage > 0) {
|
|
||||||
if (energy.getEnergyStored() - energyUsage >= 0) {
|
|
||||||
energy.extractEnergy(energyUsage, false);
|
|
||||||
} else {
|
|
||||||
energy.setEnergyStored(0);
|
|
||||||
}
|
|
||||||
} else if (type == EnumControllerType.CREATIVE) {
|
|
||||||
energy.setEnergyStored(energy.getMaxEnergyStored());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (energy.getEnergyStored() != lastEnergy) {
|
|
||||||
world.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER);
|
|
||||||
|
|
||||||
if (System.currentTimeMillis() - lastEnergyUpdate > 1500) {
|
|
||||||
lastEnergyUpdate = System.currentTimeMillis();
|
|
||||||
|
|
||||||
RefinedStorageUtils.updateBlock(world, pos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ticks++;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<INetworkSlave> getSlaves() {
|
|
||||||
return actualSlaves;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addSlave(BlockPos slave) {
|
|
||||||
slavesToAdd.add(slave);
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeSlave(BlockPos slave) {
|
|
||||||
slavesToRemove.add(slave);
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IGridHandler getGridHandler() {
|
|
||||||
return gridHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IWirelessGridHandler getWirelessGridHandler() {
|
|
||||||
return wirelessGridHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnectAll() {
|
|
||||||
for (INetworkSlave slave : getSlaves()) {
|
|
||||||
slave.disconnect(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
slaves.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ItemStack> getItems() {
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ICraftingTask> getCraftingTasks() {
|
|
||||||
return craftingTasks;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCraftingTask(ICraftingTask task) {
|
|
||||||
craftingTasksToAdd.add(task);
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addCraftingTaskAsLast(ICraftingTask task) {
|
|
||||||
craftingTasksToAddAsLast.add(task);
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ICraftingTask createCraftingTask(ICraftingPattern pattern) {
|
|
||||||
if (pattern.isProcessing()) {
|
|
||||||
return new ProcessingCraftingTask(pattern);
|
|
||||||
} else {
|
|
||||||
return new BasicCraftingTask(pattern);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void cancelCraftingTask(ICraftingTask task) {
|
|
||||||
craftingTasksToCancel.add(task);
|
|
||||||
|
|
||||||
markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ICraftingPattern> getPatterns() {
|
|
||||||
return patterns;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<ICraftingPattern> getPattern(ItemStack pattern, int flags) {
|
|
||||||
List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
|
||||||
|
|
||||||
for (ICraftingPattern craftingPattern : getPatterns()) {
|
|
||||||
for (ItemStack output : craftingPattern.getOutputs()) {
|
|
||||||
if (RefinedStorageUtils.compareStack(output, pattern, flags)) {
|
|
||||||
patterns.add(craftingPattern);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return patterns;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ICraftingPattern getPatternWithBestScore(ItemStack pattern) {
|
|
||||||
return getPatternWithBestScore(pattern, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ICraftingPattern getPatternWithBestScore(ItemStack pattern, int flags) {
|
|
||||||
List<ICraftingPattern> patterns = getPattern(pattern, flags);
|
|
||||||
|
|
||||||
if (patterns.isEmpty()) {
|
|
||||||
return null;
|
|
||||||
} else if (patterns.size() == 1) {
|
|
||||||
return patterns.get(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int highestScore = 0;
|
|
||||||
int highestPattern = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < patterns.size(); ++i) {
|
|
||||||
int score = 0;
|
|
||||||
|
|
||||||
for (ItemStack input : patterns.get(i).getInputs()) {
|
|
||||||
ItemStack stored = getItem(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
|
||||||
|
|
||||||
score += stored != null ? stored.stackSize : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (score > highestScore) {
|
|
||||||
highestScore = score;
|
|
||||||
highestPattern = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return patterns.get(highestPattern);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateSlaves() {
|
|
||||||
this.energyUsage = 0;
|
|
||||||
this.actualSlaves.clear();
|
|
||||||
this.storages.clear();
|
|
||||||
this.patterns.clear();
|
|
||||||
|
|
||||||
int range = 0;
|
|
||||||
|
|
||||||
for (BlockPos slavePos : slaves) {
|
|
||||||
TileEntity tile = world.getTileEntity(slavePos);
|
|
||||||
|
|
||||||
if (tile == null || !tile.hasCapability(RefinedStorageCapabilities.NETWORK_SLAVE_CAPABILITY, null)) {
|
|
||||||
removeSlave(slavePos);
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
INetworkSlave slave = tile.getCapability(RefinedStorageCapabilities.NETWORK_SLAVE_CAPABILITY, null);
|
|
||||||
|
|
||||||
actualSlaves.add(slave);
|
|
||||||
|
|
||||||
if (!slave.canUpdate()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (slave instanceof TileWirelessTransmitter) {
|
|
||||||
range += ((TileWirelessTransmitter) slave).getRange();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (slave instanceof IStorageProvider) {
|
|
||||||
((IStorageProvider) slave).provide(storages);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (slave instanceof TileCrafter) {
|
|
||||||
TileCrafter crafter = (TileCrafter) slave;
|
|
||||||
|
|
||||||
for (int i = 0; i < crafter.getPatterns().getSlots(); ++i) {
|
|
||||||
ItemStack pattern = crafter.getPatterns().getStackInSlot(i);
|
|
||||||
|
|
||||||
if (pattern != null && ItemPattern.isValid(pattern)) {
|
|
||||||
patterns.add(new CraftingPattern(crafter.getPos().getX(), crafter.getPos().getY(), crafter.getPos().getZ(), ItemPattern.isProcessing(pattern), ItemPattern.getInputs(pattern), ItemPattern.getOutputs(pattern), ItemPattern.getByproducts(pattern)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.energyUsage += slave.getEnergyUsage();
|
|
||||||
}
|
|
||||||
|
|
||||||
wirelessGridHandler.setRange(range);
|
|
||||||
|
|
||||||
Collections.sort(storages, new Comparator<IStorage>() {
|
|
||||||
@Override
|
|
||||||
public int compare(IStorage left, IStorage right) {
|
|
||||||
int leftStored = left.getStored();
|
|
||||||
int rightStored = right.getStored();
|
|
||||||
|
|
||||||
if (leftStored == rightStored) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (leftStored > rightStored) ? -1 : 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Collections.sort(storages, new Comparator<IStorage>() {
|
|
||||||
@Override
|
|
||||||
public int compare(IStorage left, IStorage right) {
|
|
||||||
if (left.getPriority() == right.getPriority()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (left.getPriority() > right.getPriority()) ? -1 : 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
updateItems();
|
|
||||||
updateItemsWithClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateItems() {
|
|
||||||
items.clear();
|
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
|
||||||
storage.addItems(items);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ICraftingPattern pattern : patterns) {
|
|
||||||
for (ItemStack output : pattern.getOutputs()) {
|
|
||||||
ItemStack patternStack = output.copy();
|
|
||||||
patternStack.stackSize = 0;
|
|
||||||
items.add(patternStack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
combinedItems.clear();
|
|
||||||
combinedItemsIndices.clear();
|
|
||||||
|
|
||||||
for (int i = 0; i < items.size(); ++i) {
|
|
||||||
if (combinedItemsIndices.contains(i)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack stack = items.get(i);
|
|
||||||
|
|
||||||
for (int j = i + 1; j < items.size(); ++j) {
|
|
||||||
if (combinedItemsIndices.contains(j)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack otherStack = items.get(j);
|
|
||||||
|
|
||||||
if (RefinedStorageUtils.compareStackNoQuantity(stack, otherStack)) {
|
|
||||||
// We copy here so we don't modify the quantity of the ItemStack IStorage uses.
|
|
||||||
// We re-get the ItemStack because the stack may change from a previous iteration in this loop
|
|
||||||
ItemStack newStack = items.get(i).copy();
|
|
||||||
newStack.stackSize += otherStack.stackSize;
|
|
||||||
items.set(i, newStack);
|
|
||||||
|
|
||||||
combinedItems.add(otherStack);
|
|
||||||
combinedItemsIndices.add(j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
items.removeAll(combinedItems);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateItemsWithClient() {
|
|
||||||
for (EntityPlayer player : world.playerEntities) {
|
|
||||||
if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition())) {
|
|
||||||
updateItemsWithClient((EntityPlayerMP) player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateItemsWithClient(EntityPlayerMP player) {
|
|
||||||
RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack push(ItemStack stack, int size, boolean simulate) {
|
|
||||||
if (stack == null || stack.getItem() == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (storages.isEmpty()) {
|
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
int orginalSize = size;
|
|
||||||
|
|
||||||
ItemStack remainder = stack;
|
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
|
||||||
remainder = storage.push(remainder, size, simulate);
|
|
||||||
|
|
||||||
if (remainder == null) {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
size = remainder.stackSize;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int sizePushed = remainder != null ? (orginalSize - remainder.stackSize) : orginalSize;
|
|
||||||
|
|
||||||
if (!simulate && sizePushed > 0) {
|
|
||||||
updateItems();
|
|
||||||
updateItemsWithClient();
|
|
||||||
|
|
||||||
for (int i = 0; i < sizePushed; ++i) {
|
|
||||||
if (!craftingTasks.empty()) {
|
|
||||||
ICraftingTask top = craftingTasks.peek();
|
|
||||||
|
|
||||||
if (top instanceof ProcessingCraftingTask) {
|
|
||||||
((ProcessingCraftingTask) top).onPushed(stack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return remainder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack take(ItemStack stack, int size) {
|
|
||||||
return take(stack, size, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack take(ItemStack stack, int size, int flags) {
|
|
||||||
int requested = size;
|
|
||||||
int received = 0;
|
|
||||||
|
|
||||||
ItemStack newStack = null;
|
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
|
||||||
ItemStack took = storage.take(stack, requested - received, flags);
|
|
||||||
|
|
||||||
if (took != null) {
|
|
||||||
if (newStack == null) {
|
|
||||||
newStack = took;
|
|
||||||
} else {
|
|
||||||
newStack.stackSize += took.stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
received += took.stackSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requested == received) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (newStack != null) {
|
|
||||||
updateItems();
|
|
||||||
updateItemsWithClient();
|
|
||||||
}
|
|
||||||
|
|
||||||
return newStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemStack getItem(ItemStack stack, int flags) {
|
|
||||||
for (ItemStack otherStack : items) {
|
|
||||||
if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) {
|
|
||||||
return otherStack;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFromNBT(NBTTagCompound tag) {
|
|
||||||
energy.readFromNBT(tag);
|
|
||||||
|
|
||||||
if (tag.hasKey(RedstoneMode.NBT)) {
|
|
||||||
redstoneMode = RedstoneMode.getById(tag.getInteger(RedstoneMode.NBT));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag.hasKey(NBT_CRAFTING_TASKS)) {
|
|
||||||
NBTTagList taskList = tag.getTagList(NBT_CRAFTING_TASKS, Constants.NBT.TAG_COMPOUND);
|
|
||||||
|
|
||||||
for (int i = 0; i < taskList.tagCount(); ++i) {
|
|
||||||
NBTTagCompound taskTag = taskList.getCompoundTagAt(i);
|
|
||||||
|
|
||||||
CraftingPattern pattern = CraftingPattern.readFromNBT(taskTag.getCompoundTag(CraftingPattern.NBT));
|
|
||||||
|
|
||||||
if (pattern != null) {
|
|
||||||
switch (taskTag.getInteger("Type")) {
|
|
||||||
case BasicCraftingTask.ID:
|
|
||||||
addCraftingTask(new BasicCraftingTask(taskTag, pattern));
|
|
||||||
break;
|
|
||||||
case ProcessingCraftingTask.ID:
|
|
||||||
addCraftingTask(new ProcessingCraftingTask(taskTag, pattern));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag.hasKey(NBT_SLAVES)) {
|
|
||||||
NBTTagList slavesTag = tag.getTagList(NBT_SLAVES, Constants.NBT.TAG_COMPOUND);
|
|
||||||
|
|
||||||
for (int i = 0; i < slavesTag.tagCount(); ++i) {
|
|
||||||
NBTTagCompound slave = slavesTag.getCompoundTagAt(i);
|
|
||||||
|
|
||||||
slavesToLoad.add(new BlockPos(slave.getInteger(NBT_SLAVE_X), slave.getInteger(NBT_SLAVE_Y), slave.getInteger(NBT_SLAVE_Z)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
|
||||||
energy.writeToNBT(tag);
|
|
||||||
|
|
||||||
tag.setInteger(RedstoneMode.NBT, redstoneMode.id);
|
|
||||||
|
|
||||||
NBTTagList list = new NBTTagList();
|
|
||||||
|
|
||||||
for (ICraftingTask task : craftingTasks) {
|
|
||||||
NBTTagCompound taskTag = new NBTTagCompound();
|
|
||||||
task.writeToNBT(taskTag);
|
|
||||||
list.appendTag(taskTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.setTag(NBT_CRAFTING_TASKS, list);
|
|
||||||
|
|
||||||
NBTTagList slavesTag = new NBTTagList();
|
|
||||||
|
|
||||||
for (BlockPos slave : slaves) {
|
|
||||||
NBTTagCompound slaveTag = new NBTTagCompound();
|
|
||||||
|
|
||||||
slaveTag.setInteger(NBT_SLAVE_X, slave.getX());
|
|
||||||
slaveTag.setInteger(NBT_SLAVE_Y, slave.getY());
|
|
||||||
slaveTag.setInteger(NBT_SLAVE_Z, slave.getZ());
|
|
||||||
|
|
||||||
slavesTag.appendTag(slaveTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.setTag(NBT_SLAVES, slavesTag);
|
|
||||||
|
|
||||||
return tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void markDirty() {
|
|
||||||
if (world != null) {
|
|
||||||
NetworkMasterSavedData.getOrLoad(world).markDirty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
package refinedstorage.apiimpl.network;
|
|
||||||
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraftforge.event.world.WorldEvent;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent;
|
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class NetworkMasterEventHandler {
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onWorldTick(TickEvent.WorldTickEvent e) {
|
|
||||||
if (e.phase == TickEvent.Phase.START) {
|
|
||||||
Map<BlockPos, INetworkMaster> networks = NetworkMasterRegistry.get(e.world);
|
|
||||||
|
|
||||||
if (networks != null) {
|
|
||||||
for (INetworkMaster network : networks.values()) {
|
|
||||||
if (network.getWorld() == null) {
|
|
||||||
network.setWorld(e.world);
|
|
||||||
}
|
|
||||||
|
|
||||||
network.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onWorldLoad(WorldEvent.Load e) {
|
|
||||||
if (!e.getWorld().isRemote) {
|
|
||||||
NetworkMasterSavedData.getOrLoad(e.getWorld());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onWorldUnload(WorldEvent.Unload e) {
|
|
||||||
NetworkMasterRegistry.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package refinedstorage.apiimpl.network;
|
|
||||||
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class NetworkMasterRegistry {
|
|
||||||
public static final Map<Integer, Map<BlockPos, INetworkMaster>> NETWORKS = new HashMap<Integer, Map<BlockPos, INetworkMaster>>();
|
|
||||||
|
|
||||||
public static void add(World world, INetworkMaster network) {
|
|
||||||
add(world.provider.getDimension(), network);
|
|
||||||
|
|
||||||
NetworkMasterSavedData.getOrLoad(world).markDirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void add(int dim, INetworkMaster network) {
|
|
||||||
if (NETWORKS.get(dim) == null) {
|
|
||||||
NETWORKS.put(dim, new HashMap<BlockPos, INetworkMaster>());
|
|
||||||
}
|
|
||||||
|
|
||||||
NETWORKS.get(dim).put(network.getPosition(), network);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void remove(World world, BlockPos pos) {
|
|
||||||
if (get(world) != null) {
|
|
||||||
INetworkMaster network = get(world).get(pos);
|
|
||||||
|
|
||||||
if (network != null) {
|
|
||||||
get(world).remove(pos);
|
|
||||||
|
|
||||||
NetworkMasterSavedData.getOrLoad(world).markDirty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static INetworkMaster get(World world, BlockPos pos) {
|
|
||||||
return get(world) == null ? null : get(world).get(pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Map<BlockPos, INetworkMaster> get(World world) {
|
|
||||||
return NETWORKS.get(world.provider.getDimension());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void clear() {
|
|
||||||
NETWORKS.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
package refinedstorage.apiimpl.network;
|
|
||||||
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.nbt.NBTTagList;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraft.world.WorldSavedData;
|
|
||||||
import net.minecraftforge.common.util.Constants;
|
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class NetworkMasterSavedData extends WorldSavedData {
|
|
||||||
public static final String ID = "RSNetworks";
|
|
||||||
public static final String NBT_NETWORKS = "Networks";
|
|
||||||
public static final String NBT_NETWORK_X = "X";
|
|
||||||
public static final String NBT_NETWORK_Y = "Y";
|
|
||||||
public static final String NBT_NETWORK_Z = "Z";
|
|
||||||
public static final String NBT_NETWORK_DIM = "Dim";
|
|
||||||
public static final String NBT_NETWORK_DATA = "Data";
|
|
||||||
|
|
||||||
public NetworkMasterSavedData(String name) {
|
|
||||||
super(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void readFromNBT(NBTTagCompound tag) {
|
|
||||||
NBTTagList networks = tag.getTagList(NBT_NETWORKS, Constants.NBT.TAG_COMPOUND);
|
|
||||||
|
|
||||||
for (int i = 0; i < networks.tagCount(); ++i) {
|
|
||||||
NBTTagCompound networkTag = networks.getCompoundTagAt(i);
|
|
||||||
|
|
||||||
INetworkMaster network = new NetworkMaster(new BlockPos(networkTag.getInteger(NBT_NETWORK_X), networkTag.getInteger(NBT_NETWORK_Y), networkTag.getInteger(NBT_NETWORK_Z)));
|
|
||||||
|
|
||||||
network.readFromNBT(networkTag.getCompoundTag(NBT_NETWORK_DATA));
|
|
||||||
|
|
||||||
NetworkMasterRegistry.add(networkTag.getInteger(NBT_NETWORK_DIM), network);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
|
||||||
NBTTagList networks = new NBTTagList();
|
|
||||||
|
|
||||||
for (Map.Entry<Integer, Map<BlockPos, INetworkMaster>> entry : NetworkMasterRegistry.NETWORKS.entrySet()) {
|
|
||||||
for (INetworkMaster network : entry.getValue().values()) {
|
|
||||||
NBTTagCompound networkTag = new NBTTagCompound();
|
|
||||||
|
|
||||||
networkTag.setInteger(NBT_NETWORK_X, network.getPosition().getX());
|
|
||||||
networkTag.setInteger(NBT_NETWORK_Y, network.getPosition().getY());
|
|
||||||
networkTag.setInteger(NBT_NETWORK_Z, network.getPosition().getZ());
|
|
||||||
networkTag.setInteger(NBT_NETWORK_DIM, entry.getKey());
|
|
||||||
|
|
||||||
networkTag.setTag(NBT_NETWORK_DATA, network.writeToNBT(new NBTTagCompound()));
|
|
||||||
|
|
||||||
networks.appendTag(networkTag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.setTag(NBT_NETWORKS, networks);
|
|
||||||
|
|
||||||
return tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static NetworkMasterSavedData getOrLoad(World world) {
|
|
||||||
NetworkMasterSavedData instance = (NetworkMasterSavedData) world.getMapStorage().getOrLoadData(NetworkMasterSavedData.class, ID);
|
|
||||||
|
|
||||||
if (instance == null) {
|
|
||||||
instance = new NetworkMasterSavedData(ID);
|
|
||||||
|
|
||||||
world.getMapStorage().setData(ID, instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,14 +15,11 @@ import net.minecraft.tileentity.TileEntity;
|
|||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.TextComponentTranslation;
|
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
import refinedstorage.RefinedStorageGui;
|
import refinedstorage.RefinedStorageGui;
|
||||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
|
||||||
import refinedstorage.apiimpl.network.NetworkMasterRegistry;
|
|
||||||
import refinedstorage.item.ItemBlockController;
|
import refinedstorage.item.ItemBlockController;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.controller.TileController;
|
||||||
|
|
||||||
@@ -68,7 +65,7 @@ public class BlockController extends BlockBase {
|
|||||||
TileController controller = (TileController) world.getTileEntity(pos);
|
TileController controller = (TileController) world.getTileEntity(pos);
|
||||||
|
|
||||||
return super.getActualState(state, world, pos)
|
return super.getActualState(state, world, pos)
|
||||||
.withProperty(ENERGY, (int) Math.ceil((float) controller.getEnergy() / (float) NetworkMaster.ENERGY_CAPACITY * 8f));
|
.withProperty(ENERGY, controller.getEnergyScaled(8));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -84,11 +81,7 @@ public class BlockController extends BlockBase {
|
|||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
if (((TileController) world.getTileEntity(pos)).getNetwork() == null) {
|
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.CONTROLLER, world, pos.getX(), pos.getY(), pos.getZ());
|
||||||
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:no_network"));
|
|
||||||
} else {
|
|
||||||
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.CONTROLLER, world, pos.getX(), pos.getY(), pos.getZ());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -97,15 +90,13 @@ public class BlockController extends BlockBase {
|
|||||||
@Override
|
@Override
|
||||||
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) {
|
public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) {
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
NetworkMaster network = new NetworkMaster(pos, world);
|
TileController controller = (TileController) world.getTileEntity(pos);
|
||||||
|
|
||||||
NBTTagCompound tag = stack.getTagCompound();
|
NBTTagCompound tag = stack.getTagCompound();
|
||||||
|
|
||||||
if (tag != null && tag.hasKey(NetworkMaster.NBT_ENERGY)) {
|
if (tag != null && tag.hasKey(TileController.NBT_ENERGY)) {
|
||||||
network.getEnergy().receiveEnergy(tag.getInteger(NetworkMaster.NBT_ENERGY), false);
|
controller.getEnergy().receiveEnergy(tag.getInteger(TileController.NBT_ENERGY), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
NetworkMasterRegistry.add(world, network);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
super.onBlockPlacedBy(world, pos, state, player, stack);
|
super.onBlockPlacedBy(world, pos, state, player, stack);
|
||||||
@@ -114,7 +105,7 @@ public class BlockController extends BlockBase {
|
|||||||
@Override
|
@Override
|
||||||
public void breakBlock(World world, BlockPos pos, IBlockState state) {
|
public void breakBlock(World world, BlockPos pos, IBlockState state) {
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
NetworkMasterRegistry.remove(world, pos);
|
((TileController) world.getTileEntity(pos)).disconnectAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
super.breakBlock(world, pos, state);
|
super.breakBlock(world, pos, state);
|
||||||
@@ -126,9 +117,8 @@ public class BlockController extends BlockBase {
|
|||||||
|
|
||||||
ItemStack stack = new ItemStack(RefinedStorageBlocks.CONTROLLER, 1, RefinedStorageBlocks.CONTROLLER.getMetaFromState(state));
|
ItemStack stack = new ItemStack(RefinedStorageBlocks.CONTROLLER, 1, RefinedStorageBlocks.CONTROLLER.getMetaFromState(state));
|
||||||
|
|
||||||
NBTTagCompound tag = new NBTTagCompound();
|
stack.setTagCompound(new NBTTagCompound());
|
||||||
tag.setInteger(NetworkMaster.NBT_ENERGY, ((TileController) world.getTileEntity(pos)).getEnergyStored(null));
|
stack.getTagCompound().setInteger(TileController.NBT_ENERGY, ((TileController) world.getTileEntity(pos)).getEnergy().getEnergyStored());
|
||||||
stack.setTagCompound(tag);
|
|
||||||
|
|
||||||
drops.add(stack);
|
drops.add(stack);
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package refinedstorage.gui;
|
|||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
import refinedstorage.RefinedStorageUtils;
|
import refinedstorage.RefinedStorageUtils;
|
||||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
|
||||||
import refinedstorage.container.ContainerController;
|
import refinedstorage.container.ContainerController;
|
||||||
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
|
||||||
import refinedstorage.tile.controller.ClientSlave;
|
import refinedstorage.tile.controller.ClientSlave;
|
||||||
@@ -46,7 +45,7 @@ public class GuiController extends GuiBase {
|
|||||||
|
|
||||||
drawTexture(x, y, 0, 0, width, height);
|
drawTexture(x, y, 0, 0, width, height);
|
||||||
|
|
||||||
int barHeightNew = (int) ((float) controller.getEnergy() / (float) NetworkMaster.ENERGY_CAPACITY * (float) barHeight);
|
int barHeightNew = controller.getEnergyScaled(barHeight);
|
||||||
|
|
||||||
drawTexture(x + barX, y + barY + barHeight - barHeightNew, 178, barHeight - barHeightNew, barWidth, barHeightNew);
|
drawTexture(x + barX, y + barY + barHeight - barHeightNew, 178, barHeight - barHeightNew, barWidth, barHeightNew);
|
||||||
}
|
}
|
||||||
@@ -103,7 +102,7 @@ public class GuiController extends GuiBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) {
|
if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) {
|
||||||
drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", controller.getEnergyUsage()) + "\n" + t("misc.refinedstorage:energy_stored", controller.getEnergy(), NetworkMaster.ENERGY_CAPACITY));
|
drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", controller.getEnergyUsage()) + "\n" + t("misc.refinedstorage:energy_stored", controller.getEnergy().getEnergyStored(), TileController.ENERGY_CAPACITY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import net.minecraft.item.ItemStack;
|
|||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
|
||||||
import refinedstorage.block.EnumControllerType;
|
import refinedstorage.block.EnumControllerType;
|
||||||
|
import refinedstorage.tile.controller.TileController;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -21,11 +21,11 @@ public class ItemBlockController extends ItemBlockBase {
|
|||||||
if (stack.getMetadata() != EnumControllerType.CREATIVE.getId()) {
|
if (stack.getMetadata() != EnumControllerType.CREATIVE.getId()) {
|
||||||
int energyStored = 0;
|
int energyStored = 0;
|
||||||
|
|
||||||
if (stack.getTagCompound() != null && stack.getTagCompound().hasKey(NetworkMaster.NBT_ENERGY)) {
|
if (stack.getTagCompound() != null && stack.getTagCompound().hasKey(TileController.NBT_ENERGY)) {
|
||||||
energyStored = stack.getTagCompound().getInteger(NetworkMaster.NBT_ENERGY);
|
energyStored = stack.getTagCompound().getInteger(TileController.NBT_ENERGY);
|
||||||
}
|
}
|
||||||
|
|
||||||
list.add(I18n.format("misc.refinedstorage:energy_stored", energyStored, NetworkMaster.ENERGY_CAPACITY));
|
list.add(I18n.format("misc.refinedstorage:energy_stored", energyStored, TileController.ENERGY_CAPACITY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ public class ItemBlockController extends ItemBlockBase {
|
|||||||
tag = new NBTTagCompound();
|
tag = new NBTTagCompound();
|
||||||
}
|
}
|
||||||
|
|
||||||
tag.setInteger(NetworkMaster.NBT_ENERGY, stack.getMetadata() == EnumControllerType.CREATIVE.getId() ? NetworkMaster.ENERGY_CAPACITY : 0);
|
tag.setInteger(TileController.NBT_ENERGY, stack.getMetadata() == EnumControllerType.CREATIVE.getId() ? TileController.ENERGY_CAPACITY : 0);
|
||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ import net.minecraft.item.IItemPropertyGetter;
|
|||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.*;
|
import net.minecraft.util.*;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.TextComponentTranslation;
|
import net.minecraft.util.text.TextComponentTranslation;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.tile.controller.TileController;
|
||||||
import refinedstorage.apiimpl.network.NetworkMasterRegistry;
|
|
||||||
import refinedstorage.tile.grid.TileGrid;
|
import refinedstorage.tile.grid.TileGrid;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -134,10 +134,10 @@ public class ItemWirelessGrid extends ItemEnergyContainer {
|
|||||||
@Override
|
@Override
|
||||||
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
|
public ActionResult<ItemStack> onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
|
||||||
if (!world.isRemote && hasValidNBT(stack) && getDimensionId(stack) == player.dimension) {
|
if (!world.isRemote && hasValidNBT(stack) && getDimensionId(stack) == player.dimension) {
|
||||||
INetworkMaster network = NetworkMasterRegistry.get(player.worldObj, new BlockPos(getX(stack), getY(stack), getZ(stack)));
|
TileEntity tile = world.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)));
|
||||||
|
|
||||||
if (network != null) {
|
if (tile instanceof TileController) {
|
||||||
if (network.getWirelessGridHandler().onOpen(player, hand)) {
|
if (((TileController) tile).getWirelessGridHandler().onOpen(player, hand)) {
|
||||||
return new ActionResult(EnumActionResult.SUCCESS, stack);
|
return new ActionResult(EnumActionResult.SUCCESS, stack);
|
||||||
} else {
|
} else {
|
||||||
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.out_of_range"));
|
player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.out_of_range"));
|
||||||
|
|||||||
@@ -8,20 +8,20 @@ import net.minecraftforge.fml.common.network.ByteBufUtils;
|
|||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.container.ContainerGrid;
|
import refinedstorage.container.ContainerGrid;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MessageGridItems implements IMessage, IMessageHandler<MessageGridItems, IMessage> {
|
public class MessageGridItems implements IMessage, IMessageHandler<MessageGridItems, IMessage> {
|
||||||
private NetworkMaster network;
|
private INetworkMaster network;
|
||||||
private List<ItemStack> items = new ArrayList<ItemStack>();
|
private List<ItemStack> items = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
public MessageGridItems() {
|
public MessageGridItems() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageGridItems(NetworkMaster network) {
|
public MessageGridItems(INetworkMaster network) {
|
||||||
this.network = network;
|
this.network = network;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import net.minecraft.init.Blocks;
|
|||||||
import net.minecraft.init.Items;
|
import net.minecraft.init.Items;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
@@ -18,7 +17,6 @@ import refinedstorage.RefinedStorage;
|
|||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
import refinedstorage.RefinedStorageItems;
|
import refinedstorage.RefinedStorageItems;
|
||||||
import refinedstorage.api.RefinedStorageAPI;
|
import refinedstorage.api.RefinedStorageAPI;
|
||||||
import refinedstorage.apiimpl.network.NetworkMasterEventHandler;
|
|
||||||
import refinedstorage.apiimpl.solderer.*;
|
import refinedstorage.apiimpl.solderer.*;
|
||||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||||
import refinedstorage.block.BlockBase;
|
import refinedstorage.block.BlockBase;
|
||||||
@@ -480,7 +478,6 @@ public class CommonProxy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void init(FMLInitializationEvent e) {
|
public void init(FMLInitializationEvent e) {
|
||||||
MinecraftForge.EVENT_BUS.register(new NetworkMasterEventHandler());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postInit(FMLPostInitializationEvent e) {
|
public void postInit(FMLPostInitializationEvent e) {
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import refinedstorage.RefinedStorageUtils;
|
|||||||
import refinedstorage.api.RefinedStorageCapabilities;
|
import refinedstorage.api.RefinedStorageCapabilities;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.network.INetworkSlave;
|
import refinedstorage.api.network.INetworkSlave;
|
||||||
import refinedstorage.apiimpl.network.NetworkMasterRegistry;
|
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
import refinedstorage.tile.config.RedstoneMode;
|
import refinedstorage.tile.config.RedstoneMode;
|
||||||
import refinedstorage.tile.controller.TileController;
|
import refinedstorage.tile.controller.TileController;
|
||||||
@@ -23,6 +22,7 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
|
|||||||
public static final String NBT_CONNECTED = "Connected";
|
public static final String NBT_CONNECTED = "Connected";
|
||||||
|
|
||||||
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
||||||
|
private boolean active;
|
||||||
|
|
||||||
protected boolean connected;
|
protected boolean connected;
|
||||||
protected INetworkMaster network;
|
protected INetworkMaster network;
|
||||||
@@ -41,6 +41,27 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
if (!worldObj.isRemote) {
|
||||||
|
if (ticks == 0) {
|
||||||
|
refreshConnection(worldObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isActive()) {
|
||||||
|
updateSlave();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (active != isActive()) {
|
||||||
|
RefinedStorageUtils.updateBlock(worldObj, pos);
|
||||||
|
|
||||||
|
active = isActive();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
super.update();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void connect(World world, INetworkMaster network) {
|
public void connect(World world, INetworkMaster network) {
|
||||||
if (network.canRun()) {
|
if (network.canRun()) {
|
||||||
@@ -48,7 +69,7 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
|
|||||||
this.connected = true;
|
this.connected = true;
|
||||||
|
|
||||||
if (!(this instanceof TileCable)) {
|
if (!(this instanceof TileCable)) {
|
||||||
this.network.addSlave(pos);
|
this.network.addSlave(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
world.notifyNeighborsOfStateChange(pos, getBlockType());
|
world.notifyNeighborsOfStateChange(pos, getBlockType());
|
||||||
@@ -70,7 +91,7 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
|
|||||||
this.connected = false;
|
this.connected = false;
|
||||||
|
|
||||||
if (this.network != null) {
|
if (this.network != null) {
|
||||||
this.network.removeSlave(pos);
|
this.network.removeSlave(this);
|
||||||
this.network = null;
|
this.network = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,11 +108,7 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
|
|||||||
|
|
||||||
if (network == null) {
|
if (network == null) {
|
||||||
if (controller != null) {
|
if (controller != null) {
|
||||||
INetworkMaster network = NetworkMasterRegistry.get(world, controller.getPos());
|
connect(world, network);
|
||||||
|
|
||||||
if (network != null) {
|
|
||||||
connect(world, network);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (controller == null) {
|
if (controller == null) {
|
||||||
|
|||||||
@@ -1,83 +1,635 @@
|
|||||||
package refinedstorage.tile.controller;
|
package refinedstorage.tile.controller;
|
||||||
|
|
||||||
|
import cofh.api.energy.EnergyStorage;
|
||||||
import cofh.api.energy.IEnergyReceiver;
|
import cofh.api.energy.IEnergyReceiver;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.inventory.Container;
|
import net.minecraft.inventory.Container;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.nbt.NBTTagList;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.util.Constants;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
|
import refinedstorage.RefinedStorageUtils;
|
||||||
|
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||||
|
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||||
|
import refinedstorage.api.network.IGridHandler;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.network.INetworkSlave;
|
import refinedstorage.api.network.INetworkSlave;
|
||||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
import refinedstorage.api.network.IWirelessGridHandler;
|
||||||
import refinedstorage.apiimpl.network.NetworkMasterRegistry;
|
import refinedstorage.api.storage.CompareFlags;
|
||||||
|
import refinedstorage.api.storage.IStorage;
|
||||||
|
import refinedstorage.api.storage.IStorageProvider;
|
||||||
|
import refinedstorage.apiimpl.autocrafting.BasicCraftingTask;
|
||||||
|
import refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
||||||
|
import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask;
|
||||||
|
import refinedstorage.apiimpl.network.GridHandler;
|
||||||
|
import refinedstorage.apiimpl.network.WirelessGridHandler;
|
||||||
import refinedstorage.block.BlockController;
|
import refinedstorage.block.BlockController;
|
||||||
import refinedstorage.block.EnumControllerType;
|
import refinedstorage.block.EnumControllerType;
|
||||||
import refinedstorage.container.ContainerController;
|
import refinedstorage.container.ContainerController;
|
||||||
|
import refinedstorage.container.ContainerGrid;
|
||||||
|
import refinedstorage.item.ItemPattern;
|
||||||
|
import refinedstorage.network.MessageGridItems;
|
||||||
import refinedstorage.tile.ISynchronizedContainer;
|
import refinedstorage.tile.ISynchronizedContainer;
|
||||||
import refinedstorage.tile.TileBase;
|
import refinedstorage.tile.TileBase;
|
||||||
|
import refinedstorage.tile.TileCrafter;
|
||||||
|
import refinedstorage.tile.TileWirelessTransmitter;
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
import refinedstorage.tile.config.RedstoneMode;
|
import refinedstorage.tile.config.RedstoneMode;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class TileController extends TileBase implements IEnergyReceiver, ISynchronizedContainer, IRedstoneModeConfig {
|
public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ISynchronizedContainer, IRedstoneModeConfig {
|
||||||
private INetworkMaster network;
|
public static final int ENERGY_CAPACITY = 32000;
|
||||||
|
|
||||||
// Only used client side
|
public static final String NBT_CRAFTING_TASKS = "CraftingTasks";
|
||||||
private List<ClientSlave> clientSlaves = new ArrayList<ClientSlave>();
|
public static final String NBT_ENERGY = "Energy";
|
||||||
private int energy;
|
|
||||||
|
private GridHandler gridHandler = new GridHandler(this);
|
||||||
|
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
||||||
|
|
||||||
|
private List<ItemStack> items = new ArrayList<ItemStack>();
|
||||||
|
private List<ItemStack> combinedItems = new ArrayList<ItemStack>();
|
||||||
|
private Set<Integer> combinedItemsIndices = new HashSet<Integer>();
|
||||||
|
|
||||||
|
private List<IStorage> storages = new ArrayList<IStorage>();
|
||||||
|
|
||||||
|
private List<INetworkSlave> slaves = new ArrayList<INetworkSlave>();
|
||||||
|
private List<INetworkSlave> slavesToAdd = new ArrayList<INetworkSlave>();
|
||||||
|
private List<INetworkSlave> slavesToRemove = new ArrayList<INetworkSlave>();
|
||||||
|
|
||||||
|
private List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
||||||
|
|
||||||
|
private Stack<ICraftingTask> craftingTasks = new Stack<ICraftingTask>();
|
||||||
|
private List<ICraftingTask> craftingTasksToAddAsLast = new ArrayList<ICraftingTask>();
|
||||||
|
private List<ICraftingTask> craftingTasksToAdd = new ArrayList<ICraftingTask>();
|
||||||
|
private List<ICraftingTask> craftingTasksToCancel = new ArrayList<ICraftingTask>();
|
||||||
|
|
||||||
|
private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY);
|
||||||
private int energyUsage;
|
private int energyUsage;
|
||||||
private EnumControllerType type;
|
|
||||||
private RedstoneMode redstoneMode;
|
|
||||||
|
|
||||||
public INetworkMaster getNetwork() {
|
private boolean couldRun;
|
||||||
if (network == null) {
|
private long lastEnergyUpdate;
|
||||||
network = NetworkMasterRegistry.get(worldObj, pos);
|
|
||||||
|
private EnumControllerType type;
|
||||||
|
|
||||||
|
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
||||||
|
|
||||||
|
private List<ClientSlave> clientSlaves;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockPos getPosition() {
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public World getWorld() {
|
||||||
|
return worldObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EnergyStorage getEnergy() {
|
||||||
|
return energy;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canRun() {
|
||||||
|
return energy.getEnergyStored() > 0 && energy.getEnergyStored() >= energyUsage && redstoneMode.isEnabled(worldObj, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
if (!worldObj.isRemote) {
|
||||||
|
boolean forceUpdate = !slavesToAdd.isEmpty() || !slavesToRemove.isEmpty();
|
||||||
|
|
||||||
|
for (INetworkSlave slave : slavesToAdd) {
|
||||||
|
if (!slaves.contains(slave)) {
|
||||||
|
slaves.add(slave);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slavesToAdd.clear();
|
||||||
|
|
||||||
|
slaves.removeAll(slavesToRemove);
|
||||||
|
slavesToRemove.clear();
|
||||||
|
|
||||||
|
int lastEnergy = energy.getEnergyStored();
|
||||||
|
|
||||||
|
if (canRun()) {
|
||||||
|
if (ticks % 20 == 0 || forceUpdate) {
|
||||||
|
updateSlaves();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
||||||
|
taskToCancel.onCancelled(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
craftingTasks.removeAll(craftingTasksToCancel);
|
||||||
|
craftingTasksToCancel.clear();
|
||||||
|
|
||||||
|
for (ICraftingTask task : craftingTasksToAdd) {
|
||||||
|
craftingTasks.push(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
craftingTasksToAdd.clear();
|
||||||
|
|
||||||
|
for (ICraftingTask task : craftingTasksToAddAsLast) {
|
||||||
|
craftingTasks.add(0, task);
|
||||||
|
}
|
||||||
|
|
||||||
|
craftingTasksToAddAsLast.clear();
|
||||||
|
|
||||||
|
if (!craftingTasks.empty()) {
|
||||||
|
ICraftingTask top = craftingTasks.peek();
|
||||||
|
|
||||||
|
if (ticks % top.getPattern().getContainer(worldObj).getSpeed() == 0 && top.update(this)) {
|
||||||
|
top.onDone(this);
|
||||||
|
|
||||||
|
craftingTasks.pop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (!slaves.isEmpty()) {
|
||||||
|
disconnectAll();
|
||||||
|
updateSlaves();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (couldRun != canRun()) {
|
||||||
|
couldRun = canRun();
|
||||||
|
|
||||||
|
worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER);
|
||||||
|
}
|
||||||
|
|
||||||
|
wirelessGridHandler.update();
|
||||||
|
|
||||||
|
if (type == EnumControllerType.NORMAL && energyUsage > 0) {
|
||||||
|
if (energy.getEnergyStored() - energyUsage >= 0) {
|
||||||
|
energy.extractEnergy(energyUsage, false);
|
||||||
|
} else {
|
||||||
|
energy.setEnergyStored(0);
|
||||||
|
}
|
||||||
|
} else if (type == EnumControllerType.CREATIVE) {
|
||||||
|
energy.setEnergyStored(energy.getMaxEnergyStored());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (energy.getEnergyStored() != lastEnergy) {
|
||||||
|
worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER);
|
||||||
|
|
||||||
|
if (System.currentTimeMillis() - lastEnergyUpdate > 1500) {
|
||||||
|
lastEnergyUpdate = System.currentTimeMillis();
|
||||||
|
|
||||||
|
RefinedStorageUtils.updateBlock(worldObj, pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return network;
|
super.update();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<INetworkSlave> getSlaves() {
|
||||||
|
return slaves;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ClientSlave> getClientSlaves() {
|
||||||
|
return clientSlaves;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addSlave(INetworkSlave slave) {
|
||||||
|
slavesToAdd.add(slave);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeSlave(INetworkSlave slave) {
|
||||||
|
slavesToRemove.add(slave);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IGridHandler getGridHandler() {
|
||||||
|
return gridHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IWirelessGridHandler getWirelessGridHandler() {
|
||||||
|
return wirelessGridHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disconnectAll() {
|
||||||
|
for (INetworkSlave slave : getSlaves()) {
|
||||||
|
slave.disconnect(worldObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
slaves.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ItemStack> getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ICraftingTask> getCraftingTasks() {
|
||||||
|
return craftingTasks;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCraftingTask(ICraftingTask task) {
|
||||||
|
craftingTasksToAdd.add(task);
|
||||||
|
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCraftingTaskAsLast(ICraftingTask task) {
|
||||||
|
craftingTasksToAddAsLast.add(task);
|
||||||
|
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ICraftingTask createCraftingTask(ICraftingPattern pattern) {
|
||||||
|
if (pattern.isProcessing()) {
|
||||||
|
return new ProcessingCraftingTask(pattern);
|
||||||
|
} else {
|
||||||
|
return new BasicCraftingTask(pattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cancelCraftingTask(ICraftingTask task) {
|
||||||
|
craftingTasksToCancel.add(task);
|
||||||
|
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ICraftingPattern> getPatterns() {
|
||||||
|
return patterns;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ICraftingPattern> getPattern(ItemStack pattern, int flags) {
|
||||||
|
List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
||||||
|
|
||||||
|
for (ICraftingPattern craftingPattern : getPatterns()) {
|
||||||
|
for (ItemStack output : craftingPattern.getOutputs()) {
|
||||||
|
if (RefinedStorageUtils.compareStack(output, pattern, flags)) {
|
||||||
|
patterns.add(craftingPattern);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return patterns;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ICraftingPattern getPatternWithBestScore(ItemStack pattern) {
|
||||||
|
return getPatternWithBestScore(pattern, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ICraftingPattern getPatternWithBestScore(ItemStack pattern, int flags) {
|
||||||
|
List<ICraftingPattern> patterns = getPattern(pattern, flags);
|
||||||
|
|
||||||
|
if (patterns.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
} else if (patterns.size() == 1) {
|
||||||
|
return patterns.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int highestScore = 0;
|
||||||
|
int highestPattern = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < patterns.size(); ++i) {
|
||||||
|
int score = 0;
|
||||||
|
|
||||||
|
for (ItemStack input : patterns.get(i).getInputs()) {
|
||||||
|
ItemStack stored = getItem(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
||||||
|
|
||||||
|
score += stored != null ? stored.stackSize : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (score > highestScore) {
|
||||||
|
highestScore = score;
|
||||||
|
highestPattern = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return patterns.get(highestPattern);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateSlaves() {
|
||||||
|
this.energyUsage = 0;
|
||||||
|
this.storages.clear();
|
||||||
|
this.patterns.clear();
|
||||||
|
|
||||||
|
int range = 0;
|
||||||
|
|
||||||
|
for (INetworkSlave slave : slaves) {
|
||||||
|
if (!slave.canUpdate()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slave instanceof TileWirelessTransmitter) {
|
||||||
|
range += ((TileWirelessTransmitter) slave).getRange();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slave instanceof IStorageProvider) {
|
||||||
|
((IStorageProvider) slave).provide(storages);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slave instanceof TileCrafter) {
|
||||||
|
TileCrafter crafter = (TileCrafter) slave;
|
||||||
|
|
||||||
|
for (int i = 0; i < crafter.getPatterns().getSlots(); ++i) {
|
||||||
|
ItemStack pattern = crafter.getPatterns().getStackInSlot(i);
|
||||||
|
|
||||||
|
if (pattern != null && ItemPattern.isValid(pattern)) {
|
||||||
|
patterns.add(new CraftingPattern(crafter.getPos().getX(), crafter.getPos().getY(), crafter.getPos().getZ(), ItemPattern.isProcessing(pattern), ItemPattern.getInputs(pattern), ItemPattern.getOutputs(pattern), ItemPattern.getByproducts(pattern)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.energyUsage += slave.getEnergyUsage();
|
||||||
|
}
|
||||||
|
|
||||||
|
wirelessGridHandler.setRange(range);
|
||||||
|
|
||||||
|
Collections.sort(storages, new Comparator<IStorage>() {
|
||||||
|
@Override
|
||||||
|
public int compare(IStorage left, IStorage right) {
|
||||||
|
int leftStored = left.getStored();
|
||||||
|
int rightStored = right.getStored();
|
||||||
|
|
||||||
|
if (leftStored == rightStored) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (leftStored > rightStored) ? -1 : 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Collections.sort(storages, new Comparator<IStorage>() {
|
||||||
|
@Override
|
||||||
|
public int compare(IStorage left, IStorage right) {
|
||||||
|
if (left.getPriority() == right.getPriority()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (left.getPriority() > right.getPriority()) ? -1 : 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
updateItems();
|
||||||
|
updateItemsWithClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateItems() {
|
||||||
|
items.clear();
|
||||||
|
|
||||||
|
for (IStorage storage : storages) {
|
||||||
|
storage.addItems(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ICraftingPattern pattern : patterns) {
|
||||||
|
for (ItemStack output : pattern.getOutputs()) {
|
||||||
|
ItemStack patternStack = output.copy();
|
||||||
|
patternStack.stackSize = 0;
|
||||||
|
items.add(patternStack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
combinedItems.clear();
|
||||||
|
combinedItemsIndices.clear();
|
||||||
|
|
||||||
|
for (int i = 0; i < items.size(); ++i) {
|
||||||
|
if (combinedItemsIndices.contains(i)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack stack = items.get(i);
|
||||||
|
|
||||||
|
for (int j = i + 1; j < items.size(); ++j) {
|
||||||
|
if (combinedItemsIndices.contains(j)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemStack otherStack = items.get(j);
|
||||||
|
|
||||||
|
if (RefinedStorageUtils.compareStackNoQuantity(stack, otherStack)) {
|
||||||
|
// We copy here so we don't modify the quantity of the ItemStack IStorage uses.
|
||||||
|
// We re-get the ItemStack because the stack may change from a previous iteration in this loop
|
||||||
|
ItemStack newStack = items.get(i).copy();
|
||||||
|
newStack.stackSize += otherStack.stackSize;
|
||||||
|
items.set(i, newStack);
|
||||||
|
|
||||||
|
combinedItems.add(otherStack);
|
||||||
|
combinedItemsIndices.add(j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
items.removeAll(combinedItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateItemsWithClient() {
|
||||||
|
for (EntityPlayer player : worldObj.playerEntities) {
|
||||||
|
if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition())) {
|
||||||
|
updateItemsWithClient((EntityPlayerMP) player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateItemsWithClient(EntityPlayerMP player) {
|
||||||
|
RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack push(ItemStack stack, int size, boolean simulate) {
|
||||||
|
if (stack == null || stack.getItem() == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (storages.isEmpty()) {
|
||||||
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
int orginalSize = size;
|
||||||
|
|
||||||
|
ItemStack remainder = stack;
|
||||||
|
|
||||||
|
for (IStorage storage : storages) {
|
||||||
|
remainder = storage.push(remainder, size, simulate);
|
||||||
|
|
||||||
|
if (remainder == null) {
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
size = remainder.stackSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int sizePushed = remainder != null ? (orginalSize - remainder.stackSize) : orginalSize;
|
||||||
|
|
||||||
|
if (!simulate && sizePushed > 0) {
|
||||||
|
updateItems();
|
||||||
|
updateItemsWithClient();
|
||||||
|
|
||||||
|
for (int i = 0; i < sizePushed; ++i) {
|
||||||
|
if (!craftingTasks.empty()) {
|
||||||
|
ICraftingTask top = craftingTasks.peek();
|
||||||
|
|
||||||
|
if (top instanceof ProcessingCraftingTask) {
|
||||||
|
((ProcessingCraftingTask) top).onPushed(stack);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return remainder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack take(ItemStack stack, int size) {
|
||||||
|
return take(stack, size, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack take(ItemStack stack, int size, int flags) {
|
||||||
|
int requested = size;
|
||||||
|
int received = 0;
|
||||||
|
|
||||||
|
ItemStack newStack = null;
|
||||||
|
|
||||||
|
for (IStorage storage : storages) {
|
||||||
|
ItemStack took = storage.take(stack, requested - received, flags);
|
||||||
|
|
||||||
|
if (took != null) {
|
||||||
|
if (newStack == null) {
|
||||||
|
newStack = took;
|
||||||
|
} else {
|
||||||
|
newStack.stackSize += took.stackSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
received += took.stackSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requested == received) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newStack != null) {
|
||||||
|
updateItems();
|
||||||
|
updateItemsWithClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
return newStack;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack getItem(ItemStack stack, int flags) {
|
||||||
|
for (ItemStack otherStack : items) {
|
||||||
|
if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) {
|
||||||
|
return otherStack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromNBT(NBTTagCompound tag) {
|
||||||
|
energy.readFromNBT(tag);
|
||||||
|
|
||||||
|
if (tag.hasKey(RedstoneMode.NBT)) {
|
||||||
|
redstoneMode = RedstoneMode.getById(tag.getInteger(RedstoneMode.NBT));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tag.hasKey(NBT_CRAFTING_TASKS)) {
|
||||||
|
NBTTagList taskList = tag.getTagList(NBT_CRAFTING_TASKS, Constants.NBT.TAG_COMPOUND);
|
||||||
|
|
||||||
|
for (int i = 0; i < taskList.tagCount(); ++i) {
|
||||||
|
NBTTagCompound taskTag = taskList.getCompoundTagAt(i);
|
||||||
|
|
||||||
|
CraftingPattern pattern = CraftingPattern.readFromNBT(taskTag.getCompoundTag(CraftingPattern.NBT));
|
||||||
|
|
||||||
|
if (pattern != null) {
|
||||||
|
switch (taskTag.getInteger("Type")) {
|
||||||
|
case BasicCraftingTask.ID:
|
||||||
|
addCraftingTask(new BasicCraftingTask(taskTag, pattern));
|
||||||
|
break;
|
||||||
|
case ProcessingCraftingTask.ID:
|
||||||
|
addCraftingTask(new ProcessingCraftingTask(taskTag, pattern));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||||
|
energy.writeToNBT(tag);
|
||||||
|
|
||||||
|
tag.setInteger(RedstoneMode.NBT, redstoneMode.id);
|
||||||
|
|
||||||
|
NBTTagList list = new NBTTagList();
|
||||||
|
|
||||||
|
for (ICraftingTask task : craftingTasks) {
|
||||||
|
NBTTagCompound taskTag = new NBTTagCompound();
|
||||||
|
task.writeToNBT(taskTag);
|
||||||
|
list.appendTag(taskTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.setTag(NBT_CRAFTING_TASKS, list);
|
||||||
|
|
||||||
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
|
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
|
||||||
super.writeUpdate(tag);
|
super.writeUpdate(tag);
|
||||||
|
|
||||||
tag.setInteger(NetworkMaster.NBT_ENERGY, getNetwork() != null ? getNetwork().getEnergy().getEnergyStored() : 0);
|
tag.setInteger(NBT_ENERGY, energy.getEnergyStored());
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readUpdate(NBTTagCompound tag) {
|
public void readUpdate(NBTTagCompound tag) {
|
||||||
energy = tag.getInteger(NetworkMaster.NBT_ENERGY);
|
energy.setEnergyStored(tag.getInteger(NBT_ENERGY));
|
||||||
|
|
||||||
super.readUpdate(tag);
|
super.readUpdate(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) {
|
public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate) {
|
||||||
return getNetwork() != null ? getNetwork().getEnergy().receiveEnergy(maxReceive, simulate) : 0;
|
return energy.receiveEnergy(maxReceive, simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnergyStored(EnumFacing from) {
|
public int getEnergyStored(EnumFacing from) {
|
||||||
return getNetwork() != null ? getNetwork().getEnergy().getEnergyStored() : 0;
|
return energy.getEnergyStored();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getEnergyScaled(int i) {
|
public int getEnergyScaled(int i) {
|
||||||
float stored = worldObj.isRemote ? energy : (getNetwork() != null ? getNetwork().getEnergy().getEnergyStored() : 0);
|
return (int) ((float) energy.getEnergyStored() / (float) ENERGY_CAPACITY * (float) i);
|
||||||
float max = NetworkMaster.ENERGY_CAPACITY;
|
|
||||||
|
|
||||||
return (int) (stored / max * (float) i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getMaxEnergyStored(EnumFacing from) {
|
public int getMaxEnergyStored(EnumFacing from) {
|
||||||
return getNetwork() != null ? getNetwork().getEnergy().getMaxEnergyStored() : 0;
|
return energy.getMaxEnergyStored();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -87,22 +639,12 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RedstoneMode getRedstoneMode() {
|
public RedstoneMode getRedstoneMode() {
|
||||||
return worldObj.isRemote ? redstoneMode : (getNetwork() != null ? ((NetworkMaster) getNetwork()).getRedstoneMode() : RedstoneMode.IGNORE);
|
return redstoneMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setRedstoneMode(RedstoneMode mode) {
|
public void setRedstoneMode(RedstoneMode mode) {
|
||||||
if (getNetwork() != null) {
|
this.redstoneMode = mode;
|
||||||
((NetworkMaster) getNetwork()).setRedstoneMode(mode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ClientSlave> getClientSlaves() {
|
|
||||||
return clientSlaves;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getEnergy() {
|
|
||||||
return energy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
@@ -119,7 +661,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readContainerData(ByteBuf buf) {
|
public void readContainerData(ByteBuf buf) {
|
||||||
this.energy = buf.readInt();
|
energy.setEnergyStored(buf.readInt());
|
||||||
this.energyUsage = buf.readInt();
|
this.energyUsage = buf.readInt();
|
||||||
this.redstoneMode = RedstoneMode.getById(buf.readInt());
|
this.redstoneMode = RedstoneMode.getById(buf.readInt());
|
||||||
|
|
||||||
@@ -142,25 +684,25 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeContainerData(ByteBuf buf) {
|
public void writeContainerData(ByteBuf buf) {
|
||||||
buf.writeInt(getNetwork() != null ? getNetwork().getEnergy().getEnergyStored() : 0);
|
buf.writeInt(energy.getEnergyStored());
|
||||||
buf.writeInt(getNetwork() != null ? getNetwork().getEnergyUsage() : 0);
|
buf.writeInt(energyUsage);
|
||||||
|
|
||||||
buf.writeInt(getNetwork() != null ? ((NetworkMaster) getNetwork()).getRedstoneMode().id : RedstoneMode.IGNORE.id);
|
buf.writeInt(redstoneMode.id);
|
||||||
|
|
||||||
if (getNetwork() != null) {
|
List<ClientSlave> clientSlaves = new ArrayList<ClientSlave>();
|
||||||
List<ClientSlave> clientSlaves = new ArrayList<ClientSlave>();
|
|
||||||
|
|
||||||
for (INetworkSlave slave : getNetwork().getSlaves()) {
|
for (INetworkSlave slave : slaves) {
|
||||||
if (slave.canUpdate()) {
|
if (slave.canUpdate()) {
|
||||||
IBlockState state = worldObj.getBlockState(slave.getPosition());
|
IBlockState state = worldObj.getBlockState(slave.getPosition());
|
||||||
|
|
||||||
ClientSlave clientSlave = new ClientSlave();
|
ClientSlave clientSlave = new ClientSlave();
|
||||||
|
|
||||||
clientSlave.energyUsage = slave.getEnergyUsage();
|
clientSlave.energyUsage = slave.getEnergyUsage();
|
||||||
clientSlave.amount = 1;
|
clientSlave.amount = 1;
|
||||||
clientSlave.stack = new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state));
|
clientSlave.stack = new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state));
|
||||||
|
|
||||||
if (clientSlave.stack.getItem() != null && clientSlaves.contains(clientSlave)) {
|
if (clientSlave.stack.getItem() != null) {
|
||||||
|
if (clientSlaves.contains(clientSlave)) {
|
||||||
for (ClientSlave other : clientSlaves) {
|
for (ClientSlave other : clientSlaves) {
|
||||||
if (other.equals(clientSlave)) {
|
if (other.equals(clientSlave)) {
|
||||||
other.amount++;
|
other.amount++;
|
||||||
@@ -173,16 +715,14 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buf.writeInt(clientSlaves.size());
|
buf.writeInt(clientSlaves.size());
|
||||||
|
|
||||||
for (ClientSlave slave : clientSlaves) {
|
for (ClientSlave slave : clientSlaves) {
|
||||||
buf.writeInt(slave.energyUsage);
|
buf.writeInt(slave.energyUsage);
|
||||||
buf.writeInt(slave.amount);
|
buf.writeInt(slave.amount);
|
||||||
ByteBufUtils.writeItemStack(buf, slave.stack);
|
ByteBufUtils.writeItemStack(buf, slave.stack);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
buf.writeInt(0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,18 +2,18 @@ package refinedstorage.tile.grid;
|
|||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageUtils;
|
import refinedstorage.RefinedStorageUtils;
|
||||||
import refinedstorage.api.network.IGridHandler;
|
import refinedstorage.api.network.IGridHandler;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
|
||||||
import refinedstorage.apiimpl.network.NetworkMasterRegistry;
|
|
||||||
import refinedstorage.block.EnumGridType;
|
import refinedstorage.block.EnumGridType;
|
||||||
import refinedstorage.item.ItemWirelessGrid;
|
import refinedstorage.item.ItemWirelessGrid;
|
||||||
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
import refinedstorage.network.MessageWirelessGridSettingsUpdate;
|
||||||
import refinedstorage.tile.config.IRedstoneModeConfig;
|
import refinedstorage.tile.config.IRedstoneModeConfig;
|
||||||
|
import refinedstorage.tile.controller.TileController;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -60,23 +60,25 @@ public class WirelessGrid implements IGrid {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IGridHandler getGridHandler() {
|
public IGridHandler getGridHandler() {
|
||||||
INetworkMaster network = NetworkMasterRegistry.get(world, controllerPos);
|
TileController controller = getController();
|
||||||
|
|
||||||
if (network != null) {
|
return controller != null ? controller.getGridHandler() : null;
|
||||||
return network.getGridHandler();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClose(EntityPlayer player) {
|
public void onClose(EntityPlayer player) {
|
||||||
INetworkMaster network = NetworkMasterRegistry.get(world, controllerPos);
|
TileController controller = getController();
|
||||||
|
|
||||||
if (network != null) {
|
if (controller != null) {
|
||||||
network.getWirelessGridHandler().onClose(player);
|
controller.getWirelessGridHandler().onClose(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TileController getController() {
|
||||||
|
TileEntity tile = world.getTileEntity(controllerPos);
|
||||||
|
|
||||||
|
return tile instanceof TileController ? (TileController) tile : null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getSortingType() {
|
public int getSortingType() {
|
||||||
return sortingType;
|
return sortingType;
|
||||||
|
|||||||
Reference in New Issue
Block a user