Move crafting patterns to interface
This commit is contained in:
19
src/main/java/refinedstorage/api/autocrafting/ICraftingPattern.java
Executable file
19
src/main/java/refinedstorage/api/autocrafting/ICraftingPattern.java
Executable file
@@ -0,0 +1,19 @@
|
||||
package refinedstorage.api.autocrafting;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public interface ICraftingPattern {
|
||||
ICraftingPatternContainer getContainer(World world);
|
||||
|
||||
boolean isProcessing();
|
||||
|
||||
ItemStack[] getInputs();
|
||||
|
||||
ItemStack[] getOutputs();
|
||||
|
||||
ItemStack[] getByproducts();
|
||||
|
||||
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package refinedstorage.api.autocrafting;
|
||||
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
public interface ICraftingPatternContainer {
|
||||
int getSpeed();
|
||||
|
||||
IItemHandler getConnectedInventory();
|
||||
}
|
||||
18
src/main/java/refinedstorage/api/autocrafting/ICraftingTask.java
Executable file
18
src/main/java/refinedstorage/api/autocrafting/ICraftingTask.java
Executable file
@@ -0,0 +1,18 @@
|
||||
package refinedstorage.api.autocrafting;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
|
||||
public interface ICraftingTask {
|
||||
ICraftingPattern getPattern();
|
||||
|
||||
boolean update(INetworkMaster network);
|
||||
|
||||
void onDone(INetworkMaster network);
|
||||
|
||||
void onCancelled(INetworkMaster network);
|
||||
|
||||
void writeToNBT(NBTTagCompound tag);
|
||||
|
||||
String getInfo();
|
||||
}
|
||||
@@ -6,18 +6,13 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.autocrafting.CraftingPattern;
|
||||
import refinedstorage.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.tile.config.RedstoneMode;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
public interface INetworkMaster {
|
||||
RedstoneMode getRedstoneMode();
|
||||
|
||||
void setRedstoneMode(RedstoneMode mode);
|
||||
|
||||
World getWorld();
|
||||
|
||||
void setWorld(World world);
|
||||
@@ -50,17 +45,17 @@ public interface INetworkMaster {
|
||||
|
||||
void addCraftingTaskAsLast(ICraftingTask task);
|
||||
|
||||
ICraftingTask createCraftingTask(CraftingPattern pattern);
|
||||
ICraftingTask createCraftingTask(ICraftingPattern pattern);
|
||||
|
||||
void cancelCraftingTask(ICraftingTask task);
|
||||
|
||||
List<CraftingPattern> getPatterns();
|
||||
List<ICraftingPattern> getPatterns();
|
||||
|
||||
List<CraftingPattern> getPattern(ItemStack pattern, int flags);
|
||||
List<ICraftingPattern> getPattern(ItemStack pattern, int flags);
|
||||
|
||||
CraftingPattern getPatternWithBestScore(ItemStack pattern);
|
||||
ICraftingPattern getPatternWithBestScore(ItemStack pattern);
|
||||
|
||||
CraftingPattern getPatternWithBestScore(ItemStack pattern, int flags);
|
||||
ICraftingPattern getPatternWithBestScore(ItemStack pattern, int flags);
|
||||
|
||||
void updateItemsWithClient();
|
||||
|
||||
|
||||
@@ -10,6 +10,10 @@ public interface IWirelessGridHandler {
|
||||
|
||||
void onClose(EntityPlayer player);
|
||||
|
||||
void setRange(int range);
|
||||
|
||||
int getRange();
|
||||
|
||||
void drainEnergy(EntityPlayer player, int energy);
|
||||
|
||||
WirelessGridConsumer getConsumer(EntityPlayer player);
|
||||
|
||||
@@ -2,11 +2,6 @@ package refinedstorage.api.storage;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Should be implemented as a capability on tile entities.
|
||||
*
|
||||
* @see refinedstorage.api.RefinedStorageCapabilities#STORAGE_PROVIDER_CAPABILITY
|
||||
*/
|
||||
public interface IStorageProvider {
|
||||
/**
|
||||
* @param storages A list containing previously added storages
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package refinedstorage.autocrafting.task;
|
||||
package refinedstorage.apiimpl.autocrafting;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
||||
import refinedstorage.autocrafting.CraftingPattern;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -19,21 +20,21 @@ public class BasicCraftingTask implements ICraftingTask {
|
||||
public static final String NBT_CHILD_TASKS = "ChildTasks";
|
||||
public static final String NBT_TOOK = "Took";
|
||||
|
||||
private CraftingPattern pattern;
|
||||
private ICraftingPattern pattern;
|
||||
private boolean satisfied[];
|
||||
private boolean checked[];
|
||||
private boolean childTasks[];
|
||||
private List<ItemStack> itemsTook = new ArrayList<ItemStack>();
|
||||
private boolean updatedOnce;
|
||||
|
||||
public BasicCraftingTask(CraftingPattern pattern) {
|
||||
public BasicCraftingTask(ICraftingPattern pattern) {
|
||||
this.pattern = pattern;
|
||||
this.satisfied = new boolean[pattern.getInputs().length];
|
||||
this.checked = new boolean[pattern.getInputs().length];
|
||||
this.childTasks = new boolean[pattern.getInputs().length];
|
||||
}
|
||||
|
||||
public BasicCraftingTask(NBTTagCompound tag, CraftingPattern pattern) {
|
||||
public BasicCraftingTask(NBTTagCompound tag, ICraftingPattern pattern) {
|
||||
this.pattern = pattern;
|
||||
this.satisfied = RefinedStorageUtils.readBooleanArray(tag, NBT_SATISFIED);
|
||||
this.checked = RefinedStorageUtils.readBooleanArray(tag, NBT_CHECKED);
|
||||
@@ -46,11 +47,13 @@ public class BasicCraftingTask implements ICraftingTask {
|
||||
}
|
||||
}
|
||||
|
||||
public CraftingPattern getPattern() {
|
||||
@Override
|
||||
public ICraftingPattern getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public boolean update(NetworkMaster network) {
|
||||
@Override
|
||||
public boolean update(INetworkMaster network) {
|
||||
this.updatedOnce = true;
|
||||
|
||||
boolean done = true;
|
||||
@@ -70,7 +73,7 @@ public class BasicCraftingTask implements ICraftingTask {
|
||||
|
||||
satisfied[i] = true;
|
||||
} else if (!childTasks[i]) {
|
||||
CraftingPattern pattern = network.getPatternWithBestScore(input);
|
||||
ICraftingPattern pattern = network.getPatternWithBestScore(input);
|
||||
|
||||
if (pattern != null) {
|
||||
network.addCraftingTask(network.createCraftingTask(pattern));
|
||||
@@ -90,7 +93,7 @@ public class BasicCraftingTask implements ICraftingTask {
|
||||
|
||||
// @todo: handle no space
|
||||
@Override
|
||||
public void onDone(NetworkMaster network) {
|
||||
public void onDone(INetworkMaster network) {
|
||||
for (ItemStack output : pattern.getOutputs()) {
|
||||
network.push(output, output.stackSize, false);
|
||||
}
|
||||
@@ -104,7 +107,7 @@ public class BasicCraftingTask implements ICraftingTask {
|
||||
|
||||
// @todo: handle no space
|
||||
@Override
|
||||
public void onCancelled(NetworkMaster network) {
|
||||
public void onCancelled(INetworkMaster network) {
|
||||
for (ItemStack took : itemsTook) {
|
||||
network.push(took, took.stackSize, false);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package refinedstorage.autocrafting;
|
||||
package refinedstorage.apiimpl.autocrafting;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
@@ -6,10 +6,12 @@ import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.ICraftingPatternContainer;
|
||||
import refinedstorage.item.ItemPattern;
|
||||
import refinedstorage.tile.TileCrafter;
|
||||
|
||||
public class CraftingPattern {
|
||||
public class CraftingPattern implements ICraftingPattern {
|
||||
public static final String NBT = "Pattern";
|
||||
public static final String NBT_CRAFTER_X = "CrafterX";
|
||||
public static final String NBT_CRAFTER_Y = "CrafterY";
|
||||
@@ -34,7 +36,8 @@ public class CraftingPattern {
|
||||
this.byproducts = byproducts;
|
||||
}
|
||||
|
||||
public TileCrafter getCrafter(World world) {
|
||||
@Override
|
||||
public ICraftingPatternContainer getContainer(World world) {
|
||||
if (crafter == null) {
|
||||
crafter = (TileCrafter) world.getTileEntity(new BlockPos(crafterX, crafterY, crafterZ));
|
||||
}
|
||||
@@ -42,23 +45,27 @@ public class CraftingPattern {
|
||||
return crafter;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isProcessing() {
|
||||
return processing;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] getInputs() {
|
||||
return inputs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] getOutputs() {
|
||||
return outputs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack[] getByproducts() {
|
||||
return byproducts;
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound tag) {
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
tag.setBoolean(ItemPattern.NBT_PROCESSING, processing);
|
||||
|
||||
NBTTagList inputsTag = new NBTTagList();
|
||||
@@ -84,6 +91,8 @@ public class CraftingPattern {
|
||||
tag.setInteger(NBT_CRAFTER_X, crafter.getPos().getX());
|
||||
tag.setInteger(NBT_CRAFTER_Y, crafter.getPos().getY());
|
||||
tag.setInteger(NBT_CRAFTER_Z, crafter.getPos().getZ());
|
||||
|
||||
return tag;
|
||||
}
|
||||
|
||||
public static CraftingPattern readFromNBT(NBTTagCompound tag) {
|
||||
@@ -1,8 +1,9 @@
|
||||
package refinedstorage.autocrafting;
|
||||
package refinedstorage.apiimpl.autocrafting;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
|
||||
public class CraftingTaskScheduler {
|
||||
@@ -15,7 +16,7 @@ public class CraftingTaskScheduler {
|
||||
}
|
||||
|
||||
public void schedule(INetworkMaster network, int compare, ItemStack item) {
|
||||
CraftingPattern pattern = network.getPatternWithBestScore(item, compare);
|
||||
ICraftingPattern pattern = network.getPatternWithBestScore(item, compare);
|
||||
|
||||
if (pattern != null) {
|
||||
scheduledItem = item;
|
||||
@@ -1,13 +1,13 @@
|
||||
package refinedstorage.autocrafting.task;
|
||||
package refinedstorage.apiimpl.autocrafting;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
||||
import refinedstorage.autocrafting.CraftingPattern;
|
||||
import refinedstorage.tile.TileCrafter;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.ICraftingPatternContainer;
|
||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||
import refinedstorage.api.network.INetworkMaster;
|
||||
|
||||
public class ProcessingCraftingTask implements ICraftingTask {
|
||||
public static final int ID = 1;
|
||||
@@ -16,20 +16,20 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
||||
public static final String NBT_CHILD_TASKS = "ChildTasks";
|
||||
public static final String NBT_SATISFIED = "Satisfied";
|
||||
|
||||
private CraftingPattern pattern;
|
||||
private ICraftingPattern pattern;
|
||||
private boolean inserted[];
|
||||
private boolean childTasks[];
|
||||
private boolean satisfied[];
|
||||
private boolean updatedOnce;
|
||||
|
||||
public ProcessingCraftingTask(CraftingPattern pattern) {
|
||||
public ProcessingCraftingTask(ICraftingPattern pattern) {
|
||||
this.pattern = pattern;
|
||||
this.inserted = new boolean[pattern.getInputs().length];
|
||||
this.childTasks = new boolean[pattern.getInputs().length];
|
||||
this.satisfied = new boolean[pattern.getOutputs().length];
|
||||
}
|
||||
|
||||
public ProcessingCraftingTask(NBTTagCompound tag, CraftingPattern pattern) {
|
||||
public ProcessingCraftingTask(NBTTagCompound tag, ICraftingPattern pattern) {
|
||||
this.pattern = pattern;
|
||||
this.inserted = RefinedStorageUtils.readBooleanArray(tag, NBT_INSERTED);
|
||||
this.childTasks = RefinedStorageUtils.readBooleanArray(tag, NBT_CHILD_TASKS);
|
||||
@@ -37,33 +37,32 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftingPattern getPattern() {
|
||||
public ICraftingPattern getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean update(NetworkMaster network) {
|
||||
public boolean update(INetworkMaster network) {
|
||||
this.updatedOnce = true;
|
||||
|
||||
TileCrafter crafter = pattern.getCrafter(network.getWorld());
|
||||
IItemHandler handler = RefinedStorageUtils.getItemHandler(crafter.getFacingTile(), crafter.getDirection().getOpposite());
|
||||
ICraftingPatternContainer container = pattern.getContainer(network.getWorld());
|
||||
|
||||
if (handler != null) {
|
||||
if (container.getConnectedInventory() != null) {
|
||||
for (int i = 0; i < inserted.length; ++i) {
|
||||
if (!inserted[i]) {
|
||||
ItemStack input = pattern.getInputs()[i];
|
||||
ItemStack took = network.take(input, 1);
|
||||
|
||||
if (took != null) {
|
||||
if (ItemHandlerHelper.insertItem(handler, took, true) == null) {
|
||||
ItemHandlerHelper.insertItem(handler, took, false);
|
||||
if (ItemHandlerHelper.insertItem(container.getConnectedInventory(), took, true) == null) {
|
||||
ItemHandlerHelper.insertItem(container.getConnectedInventory(), took, false);
|
||||
|
||||
inserted[i] = true;
|
||||
} else {
|
||||
network.push(took, took.stackSize, false);
|
||||
}
|
||||
} else if (!childTasks[i]) {
|
||||
CraftingPattern pattern = network.getPatternWithBestScore(input);
|
||||
ICraftingPattern pattern = network.getPatternWithBestScore(input);
|
||||
|
||||
if (pattern != null) {
|
||||
childTasks[i] = true;
|
||||
@@ -101,12 +100,12 @@ public class ProcessingCraftingTask implements ICraftingTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDone(NetworkMaster network) {
|
||||
public void onDone(INetworkMaster network) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelled(NetworkMaster network) {
|
||||
public void onCancelled(INetworkMaster network) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@@ -4,9 +4,9 @@ import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.InventoryHelper;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||
import refinedstorage.api.network.IGridHandler;
|
||||
import refinedstorage.autocrafting.CraftingPattern;
|
||||
import refinedstorage.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.item.ItemWirelessGrid;
|
||||
import refinedstorage.network.GridPullFlags;
|
||||
|
||||
@@ -98,7 +98,7 @@ public class GridHandler implements IGridHandler {
|
||||
|
||||
int quantityPerRequest = 0;
|
||||
|
||||
CraftingPattern pattern = network.getPatternWithBestScore(stack);
|
||||
ICraftingPattern pattern = network.getPatternWithBestScore(stack);
|
||||
|
||||
if (pattern != null) {
|
||||
for (ItemStack output : pattern.getOutputs()) {
|
||||
|
||||
@@ -14,6 +14,8 @@ 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;
|
||||
@@ -21,10 +23,9 @@ import refinedstorage.api.network.IWirelessGridHandler;
|
||||
import refinedstorage.api.storage.CompareFlags;
|
||||
import refinedstorage.api.storage.IStorage;
|
||||
import refinedstorage.api.storage.IStorageProvider;
|
||||
import refinedstorage.autocrafting.CraftingPattern;
|
||||
import refinedstorage.autocrafting.task.BasicCraftingTask;
|
||||
import refinedstorage.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.autocrafting.task.ProcessingCraftingTask;
|
||||
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;
|
||||
@@ -62,7 +63,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
private List<BlockPos> slavesToLoad = new ArrayList<BlockPos>();
|
||||
private List<BlockPos> slavesToRemove = new ArrayList<BlockPos>();
|
||||
|
||||
private List<CraftingPattern> patterns = new ArrayList<CraftingPattern>();
|
||||
private List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
||||
|
||||
private Stack<ICraftingTask> craftingTasks = new Stack<ICraftingTask>();
|
||||
private List<ICraftingTask> craftingTasksToAddAsLast = new ArrayList<ICraftingTask>();
|
||||
@@ -72,7 +73,6 @@ public class NetworkMaster implements INetworkMaster {
|
||||
private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY);
|
||||
private int energyUsage;
|
||||
|
||||
private int wirelessGridRange;
|
||||
private boolean couldRun;
|
||||
private long lastEnergyUpdate;
|
||||
|
||||
@@ -105,22 +105,27 @@ public class NetworkMaster implements INetworkMaster {
|
||||
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);
|
||||
@@ -138,10 +143,12 @@ public class NetworkMaster implements INetworkMaster {
|
||||
this.slavesToLoad.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canRun() {
|
||||
return energy.getEnergyStored() > 0 && energy.getEnergyStored() >= energyUsage && redstoneMode.isEnabled(world, pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
for (BlockPos slave : slavesToAdd) {
|
||||
if (!slaves.contains(slave)) {
|
||||
@@ -199,7 +206,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
if (!craftingTasks.empty()) {
|
||||
ICraftingTask top = craftingTasks.peek();
|
||||
|
||||
if (ticks % top.getPattern().getCrafter(world).getSpeed() == 0 && top.update(this)) {
|
||||
if (ticks % top.getPattern().getContainer(world).getSpeed() == 0 && top.update(this)) {
|
||||
top.onDone(this);
|
||||
|
||||
craftingTasks.pop();
|
||||
@@ -241,6 +248,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
ticks++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<INetworkSlave> getSlaves() {
|
||||
return new Iterator<INetworkSlave>() {
|
||||
private int index;
|
||||
@@ -262,18 +270,21 @@ public class NetworkMaster implements INetworkMaster {
|
||||
};
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
@@ -283,10 +294,6 @@ public class NetworkMaster implements INetworkMaster {
|
||||
return wirelessGridHandler;
|
||||
}
|
||||
|
||||
public int getWirelessGridRange() {
|
||||
return wirelessGridRange;
|
||||
}
|
||||
|
||||
public void disconnectAll() {
|
||||
Iterator<INetworkSlave> slaves = getSlaves();
|
||||
|
||||
@@ -297,27 +304,32 @@ public class NetworkMaster implements INetworkMaster {
|
||||
this.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();
|
||||
}
|
||||
|
||||
public ICraftingTask createCraftingTask(CraftingPattern pattern) {
|
||||
@Override
|
||||
public ICraftingTask createCraftingTask(ICraftingPattern pattern) {
|
||||
if (pattern.isProcessing()) {
|
||||
return new ProcessingCraftingTask(pattern);
|
||||
} else {
|
||||
@@ -325,20 +337,23 @@ public class NetworkMaster implements INetworkMaster {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancelCraftingTask(ICraftingTask task) {
|
||||
craftingTasksToCancel.add(task);
|
||||
|
||||
markDirty();
|
||||
}
|
||||
|
||||
public List<CraftingPattern> getPatterns() {
|
||||
@Override
|
||||
public List<ICraftingPattern> getPatterns() {
|
||||
return patterns;
|
||||
}
|
||||
|
||||
public List<CraftingPattern> getPattern(ItemStack pattern, int flags) {
|
||||
List<CraftingPattern> patterns = new ArrayList<CraftingPattern>();
|
||||
@Override
|
||||
public List<ICraftingPattern> getPattern(ItemStack pattern, int flags) {
|
||||
List<ICraftingPattern> patterns = new ArrayList<ICraftingPattern>();
|
||||
|
||||
for (CraftingPattern craftingPattern : getPatterns()) {
|
||||
for (ICraftingPattern craftingPattern : getPatterns()) {
|
||||
for (ItemStack output : craftingPattern.getOutputs()) {
|
||||
if (RefinedStorageUtils.compareStack(output, pattern, flags)) {
|
||||
patterns.add(craftingPattern);
|
||||
@@ -349,12 +364,14 @@ public class NetworkMaster implements INetworkMaster {
|
||||
return patterns;
|
||||
}
|
||||
|
||||
public CraftingPattern getPatternWithBestScore(ItemStack pattern) {
|
||||
@Override
|
||||
public ICraftingPattern getPatternWithBestScore(ItemStack pattern) {
|
||||
return getPatternWithBestScore(pattern, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
|
||||
}
|
||||
|
||||
public CraftingPattern getPatternWithBestScore(ItemStack pattern, int flags) {
|
||||
List<CraftingPattern> patterns = getPattern(pattern, flags);
|
||||
@Override
|
||||
public ICraftingPattern getPatternWithBestScore(ItemStack pattern, int flags) {
|
||||
List<ICraftingPattern> patterns = getPattern(pattern, flags);
|
||||
|
||||
if (patterns.isEmpty()) {
|
||||
return null;
|
||||
@@ -384,11 +401,12 @@ public class NetworkMaster implements INetworkMaster {
|
||||
}
|
||||
|
||||
private void updateSlaves() {
|
||||
this.wirelessGridRange = 0;
|
||||
this.energyUsage = 0;
|
||||
this.storages.clear();
|
||||
this.patterns.clear();
|
||||
|
||||
int range = 0;
|
||||
|
||||
Iterator<INetworkSlave> slaves = getSlaves();
|
||||
while (slaves.hasNext()) {
|
||||
INetworkSlave slave = slaves.next();
|
||||
@@ -398,7 +416,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
}
|
||||
|
||||
if (slave instanceof TileWirelessTransmitter) {
|
||||
this.wirelessGridRange += ((TileWirelessTransmitter) slave).getRange();
|
||||
range += ((TileWirelessTransmitter) slave).getRange();
|
||||
}
|
||||
|
||||
if (slave instanceof IStorageProvider) {
|
||||
@@ -420,6 +438,8 @@ public class NetworkMaster implements INetworkMaster {
|
||||
this.energyUsage += slave.getEnergyUsage();
|
||||
}
|
||||
|
||||
wirelessGridHandler.setRange(range);
|
||||
|
||||
Collections.sort(storages, new Comparator<IStorage>() {
|
||||
@Override
|
||||
public int compare(IStorage left, IStorage right) {
|
||||
@@ -456,7 +476,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
storage.addItems(items);
|
||||
}
|
||||
|
||||
for (CraftingPattern pattern : patterns) {
|
||||
for (ICraftingPattern pattern : patterns) {
|
||||
for (ItemStack output : pattern.getOutputs()) {
|
||||
ItemStack patternStack = output.copy();
|
||||
patternStack.stackSize = 0;
|
||||
@@ -497,6 +517,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
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())) {
|
||||
@@ -505,10 +526,12 @@ public class NetworkMaster implements INetworkMaster {
|
||||
}
|
||||
}
|
||||
|
||||
@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;
|
||||
@@ -552,10 +575,12 @@ public class NetworkMaster implements INetworkMaster {
|
||||
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;
|
||||
@@ -588,6 +613,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
return newStack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getItem(ItemStack stack, int flags) {
|
||||
for (ItemStack otherStack : items) {
|
||||
if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) {
|
||||
@@ -598,6 +624,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
energy.readFromNBT(tag);
|
||||
|
||||
@@ -637,6 +664,7 @@ public class NetworkMaster implements INetworkMaster {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
energy.writeToNBT(tag);
|
||||
|
||||
|
||||
@@ -19,6 +19,8 @@ import java.util.List;
|
||||
public class WirelessGridHandler implements IWirelessGridHandler {
|
||||
private NetworkMaster network;
|
||||
|
||||
private int range;
|
||||
|
||||
private List<WirelessGridConsumer> consumers = new ArrayList<WirelessGridConsumer>();
|
||||
private List<WirelessGridConsumer> consumersToRemove = new ArrayList<WirelessGridConsumer>();
|
||||
|
||||
@@ -46,7 +48,7 @@ public class WirelessGridHandler implements IWirelessGridHandler {
|
||||
public boolean onOpen(EntityPlayer player, EnumHand hand) {
|
||||
int distance = (int) Math.sqrt(Math.pow(network.getPosition().getX() - player.posX, 2) + Math.pow(network.getPosition().getY() - player.posY, 2) + Math.pow(network.getPosition().getZ() - player.posZ, 2));
|
||||
|
||||
if (distance > network.getWirelessGridRange()) {
|
||||
if (distance > range) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -70,6 +72,16 @@ public class WirelessGridHandler implements IWirelessGridHandler {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRange() {
|
||||
return range;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRange(int range) {
|
||||
this.range = range;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drainEnergy(EntityPlayer player, int energy) {
|
||||
WirelessGridConsumer consumer = getConsumer(player);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package refinedstorage.api.storage;
|
||||
package refinedstorage.apiimpl.storage;
|
||||
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -7,6 +7,7 @@ import net.minecraft.nbt.NBTTagList;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.api.storage.IStorage;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
@@ -1,19 +0,0 @@
|
||||
package refinedstorage.autocrafting.task;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import refinedstorage.apiimpl.network.NetworkMaster;
|
||||
import refinedstorage.autocrafting.CraftingPattern;
|
||||
|
||||
public interface ICraftingTask {
|
||||
CraftingPattern getPattern();
|
||||
|
||||
boolean update(NetworkMaster network);
|
||||
|
||||
void onDone(NetworkMaster network);
|
||||
|
||||
void onCancelled(NetworkMaster network);
|
||||
|
||||
void writeToNBT(NBTTagCompound tag);
|
||||
|
||||
String getInfo();
|
||||
}
|
||||
@@ -11,7 +11,7 @@ import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.RefinedStorageBlocks;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.api.storage.NBTStorage;
|
||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||
import refinedstorage.block.EnumStorageType;
|
||||
import refinedstorage.tile.TileStorage;
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.world.World;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.api.storage.NBTStorage;
|
||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||
import refinedstorage.block.EnumStorageType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -8,7 +8,7 @@ import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import refinedstorage.RefinedStorageBlocks;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.api.storage.NBTStorage;
|
||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||
import refinedstorage.tile.TileStorage;
|
||||
|
||||
@JEIPlugin
|
||||
|
||||
@@ -18,9 +18,9 @@ import refinedstorage.RefinedStorage;
|
||||
import refinedstorage.RefinedStorageBlocks;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.api.solderer.SoldererRegistry;
|
||||
import refinedstorage.api.storage.NBTStorage;
|
||||
import refinedstorage.apiimpl.network.NetworkMasterEventHandler;
|
||||
import refinedstorage.apiimpl.solderer.*;
|
||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||
import refinedstorage.block.BlockBase;
|
||||
import refinedstorage.block.EnumControllerType;
|
||||
import refinedstorage.block.EnumGridType;
|
||||
|
||||
@@ -14,7 +14,7 @@ import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.autocrafting.CraftingTaskScheduler;
|
||||
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
|
||||
import refinedstorage.container.ContainerConstructor;
|
||||
import refinedstorage.container.slot.SlotSpecimen;
|
||||
import refinedstorage.inventory.BasicItemHandler;
|
||||
|
||||
@@ -11,7 +11,8 @@ import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.api.autocrafting.ICraftingPatternContainer;
|
||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||
import refinedstorage.container.ContainerCrafter;
|
||||
import refinedstorage.inventory.BasicItemHandler;
|
||||
import refinedstorage.inventory.BasicItemValidator;
|
||||
@@ -19,7 +20,7 @@ import refinedstorage.inventory.IItemValidator;
|
||||
import refinedstorage.item.ItemPattern;
|
||||
import refinedstorage.item.ItemUpgrade;
|
||||
|
||||
public class TileCrafter extends TileSlave {
|
||||
public class TileCrafter extends TileSlave implements ICraftingPatternContainer {
|
||||
private BasicItemHandler patterns = new BasicItemHandler(9, this, new IItemValidator() {
|
||||
@Override
|
||||
public boolean valid(ItemStack stack) {
|
||||
@@ -46,7 +47,7 @@ public class TileCrafter extends TileSlave {
|
||||
@Override
|
||||
public void disconnect(World world) {
|
||||
for (ICraftingTask task : network.getCraftingTasks()) {
|
||||
if (task.getPattern().getCrafter(worldObj) == this) {
|
||||
if (task.getPattern().getContainer(world) == this) {
|
||||
network.cancelCraftingTask(task);
|
||||
}
|
||||
}
|
||||
@@ -72,10 +73,16 @@ public class TileCrafter extends TileSlave {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSpeed() {
|
||||
return 20 - (RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_SPEED) * 4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IItemHandler getConnectedInventory() {
|
||||
return RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite());
|
||||
}
|
||||
|
||||
public IItemHandler getPatterns() {
|
||||
return patterns;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.inventory.Container;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||
import refinedstorage.autocrafting.task.ICraftingTask;
|
||||
import refinedstorage.api.autocrafting.ICraftingTask;
|
||||
import refinedstorage.container.ContainerCraftingMonitor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
@@ -14,7 +14,7 @@ import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.api.storage.IStorage;
|
||||
import refinedstorage.api.storage.IStorageProvider;
|
||||
import refinedstorage.api.storage.NBTStorage;
|
||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||
import refinedstorage.block.EnumStorageType;
|
||||
import refinedstorage.container.ContainerDiskDrive;
|
||||
import refinedstorage.inventory.BasicItemHandler;
|
||||
|
||||
@@ -11,7 +11,7 @@ import net.minecraftforge.items.IItemHandler;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
import refinedstorage.RefinedStorageItems;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.autocrafting.CraftingTaskScheduler;
|
||||
import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler;
|
||||
import refinedstorage.container.ContainerExporter;
|
||||
import refinedstorage.inventory.BasicItemHandler;
|
||||
import refinedstorage.inventory.BasicItemValidator;
|
||||
|
||||
@@ -11,7 +11,7 @@ import refinedstorage.RefinedStorageBlocks;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.api.storage.IStorage;
|
||||
import refinedstorage.api.storage.IStorageProvider;
|
||||
import refinedstorage.api.storage.NBTStorage;
|
||||
import refinedstorage.apiimpl.storage.NBTStorage;
|
||||
import refinedstorage.block.BlockStorage;
|
||||
import refinedstorage.block.EnumStorageType;
|
||||
import refinedstorage.container.ContainerStorage;
|
||||
|
||||
@@ -88,13 +88,13 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
|
||||
@Override
|
||||
public RedstoneMode getRedstoneMode() {
|
||||
return worldObj.isRemote ? redstoneMode : (getNetwork() != null ? getNetwork().getRedstoneMode() : RedstoneMode.IGNORE);
|
||||
return worldObj.isRemote ? redstoneMode : (getNetwork() != null ? ((NetworkMaster) getNetwork()).getRedstoneMode() : RedstoneMode.IGNORE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRedstoneMode(RedstoneMode mode) {
|
||||
if (getNetwork() != null) {
|
||||
getNetwork().setRedstoneMode(mode);
|
||||
((NetworkMaster) getNetwork()).setRedstoneMode(mode);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,7 +146,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
|
||||
buf.writeInt(getNetwork() != null ? getNetwork().getEnergy().getEnergyStored() : 0);
|
||||
buf.writeInt(getNetwork() != null ? getNetwork().getEnergyUsage() : 0);
|
||||
|
||||
buf.writeInt(getNetwork() != null ? getNetwork().getRedstoneMode().id : RedstoneMode.IGNORE.id);
|
||||
buf.writeInt(getNetwork() != null ? ((NetworkMaster) getNetwork()).getRedstoneMode().id : RedstoneMode.IGNORE.id);
|
||||
|
||||
if (getNetwork() != null) {
|
||||
List<ClientSlave> clientSlaves = new ArrayList<ClientSlave>();
|
||||
|
||||
Reference in New Issue
Block a user