Refactor crafting monitor update/listening system.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
package com.raoulvdberge.refinedstorage.api.autocrafting;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorListener;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
@@ -98,24 +98,17 @@ public interface ICraftingManager {
|
||||
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
||||
|
||||
/**
|
||||
* Makes the network send a crafting monitor update to all players as soon as it can.
|
||||
* @param listener the listener
|
||||
*/
|
||||
// TODO: rework system to be subscribed-based
|
||||
void markCraftingMonitorForUpdate();
|
||||
void addListener(ICraftingMonitorListener listener);
|
||||
|
||||
/**
|
||||
* Sends a crafting monitor update to all players that are watching a crafting monitor.
|
||||
* <p>
|
||||
* WARNING: In most cases, you should just use {@link ICraftingManager#markCraftingMonitorForUpdate()}, if not, you can get high bandwidth usage.
|
||||
* @param listener the listener
|
||||
*/
|
||||
// TODO: rework system to be subscribed-based
|
||||
void sendCraftingMonitorUpdate();
|
||||
void removeListener(ICraftingMonitorListener listener);
|
||||
|
||||
/**
|
||||
* Sends a crafting monitor update to a specific player.
|
||||
*
|
||||
* @param player the player
|
||||
* Calls all {@link ICraftingMonitorListener}s.
|
||||
*/
|
||||
// TODO: rework system to be subscribed-based
|
||||
void sendCraftingMonitorUpdate(EntityPlayerMP player);
|
||||
void onTaskChanged();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||
|
||||
/**
|
||||
* Add this listener to a {@link ICraftingManager} to listen to crafting task changes.
|
||||
*/
|
||||
public interface ICraftingMonitorListener {
|
||||
/**
|
||||
* Called when this listener is attached to a {@link ICraftingManager}.
|
||||
*/
|
||||
void onAttached();
|
||||
|
||||
/**
|
||||
* Called when any task changes.
|
||||
*/
|
||||
void onChanged();
|
||||
}
|
||||
@@ -1,28 +1,22 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternContainer;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorListener;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorElements;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileController;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraftforge.items.IItemHandlerModifiable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
public class CraftingManager implements ICraftingManager {
|
||||
private TileController network;
|
||||
@@ -35,7 +29,7 @@ public class CraftingManager implements ICraftingManager {
|
||||
private List<ICraftingTask> tasksToAdd = new ArrayList<>();
|
||||
private List<ICraftingTask> tasksToCancel = new ArrayList<>();
|
||||
|
||||
private boolean updateRequested;
|
||||
private Set<ICraftingMonitorListener> listeners = new HashSet<>();
|
||||
|
||||
public CraftingManager(TileController network) {
|
||||
this.network = network;
|
||||
@@ -86,38 +80,49 @@ public class CraftingManager implements ICraftingManager {
|
||||
if (network.canRun()) {
|
||||
boolean changed = !tasksToCancel.isEmpty() || !tasksToAdd.isEmpty();
|
||||
|
||||
tasksToCancel.forEach(ICraftingTask::onCancelled);
|
||||
tasks.removeAll(tasksToCancel);
|
||||
tasksToCancel.clear();
|
||||
this.tasksToCancel.forEach(ICraftingTask::onCancelled);
|
||||
this.tasks.removeAll(tasksToCancel);
|
||||
this.tasksToCancel.clear();
|
||||
|
||||
tasksToAdd.stream().filter(ICraftingTask::isValid).forEach(tasks::add);
|
||||
tasksToAdd.clear();
|
||||
this.tasksToAdd.stream().filter(ICraftingTask::isValid).forEach(tasks::add);
|
||||
this.tasksToAdd.clear();
|
||||
|
||||
boolean anyFinished = tasks.removeIf(ICraftingTask::update);
|
||||
|
||||
if (changed || anyFinished) {
|
||||
markCraftingMonitorForUpdate();
|
||||
onTaskChanged();
|
||||
}
|
||||
}
|
||||
|
||||
if (updateRequested) {
|
||||
updateRequested = false;
|
||||
|
||||
sendCraftingMonitorUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
// TODO
|
||||
public void readFromNBT(NBTTagCompound tag) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
// TODO
|
||||
public NBTTagCompound writeToNBT(NBTTagCompound tag) {
|
||||
// TODO
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addListener(ICraftingMonitorListener listener) {
|
||||
listeners.add(listener);
|
||||
|
||||
listener.onAttached();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeListener(ICraftingMonitorListener listener) {
|
||||
listeners.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTaskChanged() {
|
||||
listeners.forEach(ICraftingMonitorListener::onChanged);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public ICraftingTask schedule(ItemStack stack, int toSchedule, int compare) {
|
||||
@@ -135,9 +140,8 @@ public class CraftingManager implements ICraftingManager {
|
||||
if (task != null) {
|
||||
task.calculate();
|
||||
|
||||
add(task);
|
||||
|
||||
markCraftingMonitorForUpdate();
|
||||
this.add(task);
|
||||
this.onTaskChanged();
|
||||
|
||||
return task;
|
||||
}
|
||||
@@ -148,13 +152,19 @@ public class CraftingManager implements ICraftingManager {
|
||||
|
||||
@Override
|
||||
public void track(ItemStack stack, int size) {
|
||||
int initialSize = size;
|
||||
|
||||
for (ICraftingTask task : tasks) {
|
||||
size = task.onTrackedItemInserted(stack, size);
|
||||
|
||||
if (size == 0) {
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (size != initialSize) {
|
||||
this.onTaskChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -164,18 +174,18 @@ public class CraftingManager implements ICraftingManager {
|
||||
|
||||
@Override
|
||||
public void rebuild() {
|
||||
patterns.clear();
|
||||
containerInventories.clear();
|
||||
this.patterns.clear();
|
||||
this.containerInventories.clear();
|
||||
|
||||
for (INetworkNode node : network.getNodeGraph().all()) {
|
||||
if (node instanceof ICraftingPatternContainer && node.canUpdate()) {
|
||||
ICraftingPatternContainer container = (ICraftingPatternContainer) node;
|
||||
|
||||
patterns.addAll(container.getPatterns());
|
||||
this.patterns.addAll(container.getPatterns());
|
||||
|
||||
IItemHandlerModifiable handler = container.getPatternInventory();
|
||||
if (handler != null) {
|
||||
containerInventories.computeIfAbsent(container.getName(), k -> new ArrayList<>()).add(handler);
|
||||
this.containerInventories.computeIfAbsent(container.getName(), k -> new ArrayList<>()).add(handler);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -194,21 +204,4 @@ public class CraftingManager implements ICraftingManager {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markCraftingMonitorForUpdate() {
|
||||
this.updateRequested = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCraftingMonitorUpdate() {
|
||||
network.world().getMinecraftServer().getPlayerList().getPlayers().stream()
|
||||
.filter(player -> player.openContainer instanceof ContainerCraftingMonitor && network.getPosition().equals(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor().getNetworkPosition()))
|
||||
.forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()), player));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCraftingMonitorUpdate(EntityPlayerMP player) {
|
||||
RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()), player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,21 +31,32 @@ public class CraftingExtractor {
|
||||
return status;
|
||||
}
|
||||
|
||||
// TODO: send crafting monitor update when this changes
|
||||
public void updateStatus() {
|
||||
boolean updated = false;
|
||||
|
||||
for (int i = 0; i < items.size(); ++i) {
|
||||
if (status.get(i) != CraftingExtractorItemStatus.EXTRACTED) {
|
||||
ItemStack stack = items.get(i);
|
||||
|
||||
ItemStack inNetwork = network.extractItem(stack, stack.getCount(), true);
|
||||
|
||||
CraftingExtractorItemStatus previousStatus = status.get(i);
|
||||
|
||||
if (inNetwork == null || inNetwork.getCount() < stack.getCount()) {
|
||||
status.set(i, CraftingExtractorItemStatus.MISSING);
|
||||
} else {
|
||||
status.set(i, CraftingExtractorItemStatus.AVAILABLE);
|
||||
}
|
||||
|
||||
if (previousStatus != status.get(i)) {
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (updated) {
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isAllAvailable() {
|
||||
@@ -56,7 +67,6 @@ public class CraftingExtractor {
|
||||
return !items.isEmpty() && status.stream().allMatch(s -> s == CraftingExtractorItemStatus.EXTRACTED);
|
||||
}
|
||||
|
||||
// TODO: send crafting monitor update when this changes
|
||||
public void extractOne() {
|
||||
for (int i = 0; i < items.size(); ++i) {
|
||||
if (status.get(i) == CraftingExtractorItemStatus.AVAILABLE) {
|
||||
@@ -67,23 +77,26 @@ public class CraftingExtractor {
|
||||
|
||||
status.set(i, CraftingExtractorItemStatus.EXTRACTED);
|
||||
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: send crafting monitor update when this changes
|
||||
public void extractOneAndInsert(@Nullable IItemHandler dest) {
|
||||
public void extractOneAndInsert(@Nullable IItemHandler handler) {
|
||||
for (int i = 0; i < items.size(); ++i) {
|
||||
if (status.get(i) == CraftingExtractorItemStatus.AVAILABLE) {
|
||||
CraftingExtractorItemStatus previousStatus = status.get(i);
|
||||
|
||||
if (previousStatus == CraftingExtractorItemStatus.AVAILABLE || previousStatus == CraftingExtractorItemStatus.MACHINE_DOES_NOT_ACCEPT || previousStatus == CraftingExtractorItemStatus.MACHINE_NONE) {
|
||||
ItemStack extracted = network.extractItem(items.get(i), items.get(i).getCount(), true);
|
||||
if (extracted == null) {
|
||||
throw new IllegalStateException("Extraction simulation failed while available");
|
||||
}
|
||||
|
||||
if (dest == null) {
|
||||
if (handler == null) {
|
||||
status.set(i, CraftingExtractorItemStatus.MACHINE_NONE);
|
||||
} else if (ItemHandlerHelper.insertItem(dest, extracted, false).isEmpty()) {
|
||||
} else if (ItemHandlerHelper.insertItem(handler, extracted, false).isEmpty()) {
|
||||
extracted = network.extractItem(items.get(i), items.get(i).getCount(), false);
|
||||
if (extracted == null) {
|
||||
throw new IllegalStateException("Did not extract anything while available");
|
||||
@@ -94,6 +107,10 @@ public class CraftingExtractor {
|
||||
status.set(i, CraftingExtractorItemStatus.MACHINE_DOES_NOT_ACCEPT);
|
||||
}
|
||||
|
||||
if (previousStatus != status.get(i)) {
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,13 +18,15 @@ public class CraftingInserter {
|
||||
public void insert(ItemStack stack) {
|
||||
items.addLast(new CraftingInserterItem(stack, CraftingInserterItemStatus.WAITING));
|
||||
|
||||
network.getCraftingManager().sendCraftingMonitorUpdate();
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
}
|
||||
|
||||
public void insertSingle() {
|
||||
public void insertOne() {
|
||||
CraftingInserterItem item = items.peekFirst();
|
||||
|
||||
if (item != null) {
|
||||
CraftingInserterItemStatus currentStatus = item.getStatus();
|
||||
|
||||
if (network.insertItem(item.getStack(), item.getStack().getCount(), true) == null) {
|
||||
ItemStack inserted = network.insertItem(item.getStack(), item.getStack().getCount(), false);
|
||||
if (inserted != null) {
|
||||
@@ -32,11 +34,13 @@ public class CraftingInserter {
|
||||
}
|
||||
|
||||
items.pop();
|
||||
} else {
|
||||
item.setStatus(CraftingInserterItemStatus.FULL);
|
||||
}
|
||||
|
||||
network.getCraftingManager().sendCraftingMonitorUpdate();
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
} else if (currentStatus != CraftingInserterItemStatus.FULL) {
|
||||
item.setStatus(CraftingInserterItemStatus.FULL);
|
||||
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -179,12 +179,12 @@ public class CraftingTask implements ICraftingTask {
|
||||
if (ticks % getTickInterval(step.getPattern().getContainer().getSpeedUpgradeCount()) == 0 && step.canExecute() && step.execute()) {
|
||||
step.setCompleted();
|
||||
|
||||
network.getCraftingManager().sendCraftingMonitorUpdate();
|
||||
network.getCraftingManager().onTaskChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inserter.insertSingle();
|
||||
inserter.insertOne();
|
||||
|
||||
ticks++;
|
||||
|
||||
@@ -192,8 +192,8 @@ public class CraftingTask implements ICraftingTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
// TODO
|
||||
public void onCancelled() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,11 +10,13 @@ import net.minecraft.item.ItemStack;
|
||||
import java.util.List;
|
||||
|
||||
public class CraftingStepProcess extends CraftingStep {
|
||||
private INetwork network;
|
||||
private CraftingExtractor extractor;
|
||||
private IStackList<ItemStack> itemsToReceive = API.instance().createItemStackList();
|
||||
|
||||
public CraftingStepProcess(ICraftingPattern pattern, INetwork network, List<ItemStack> toExtract) {
|
||||
super(pattern);
|
||||
this.network = network;
|
||||
this.extractor = new CraftingExtractor(network, toExtract);
|
||||
|
||||
for (ItemStack output : pattern.getOutputs()) {
|
||||
|
||||
@@ -10,7 +10,6 @@ import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraftforge.energy.CapabilityEnergy;
|
||||
@@ -46,8 +45,6 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
|
||||
|
||||
player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), hand.ordinal(), network.world().provider.getDimension(), 0);
|
||||
|
||||
network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
||||
|
||||
drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage);
|
||||
|
||||
return true;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||
@@ -74,21 +75,15 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
|
||||
return TileCraftingMonitor.REDSTONE_MODE;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return network != null ? network.getPosition() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ICraftingTask> getTasks() {
|
||||
return network != null ? network.getCraftingManager().getTasks() : Collections.emptyList();
|
||||
}
|
||||
|
||||
public void onOpened(EntityPlayer player) {
|
||||
if (network != null) {
|
||||
network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
||||
}
|
||||
@Nullable
|
||||
@Override
|
||||
public ICraftingManager getCraftingManager() {
|
||||
return network != null ? network.getCraftingManager() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,8 +23,8 @@ public class BlockCraftingMonitor extends BlockNode {
|
||||
|
||||
@Override
|
||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||
if (!world.isRemote && tryOpenNetworkGui(RSGui.CRAFTING_MONITOR, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFTING)) {
|
||||
((TileCraftingMonitor) world.getTileEntity(pos)).getNode().onOpened(player);
|
||||
if (!world.isRemote) {
|
||||
tryOpenNetworkGui(RSGui.CRAFTING_MONITOR, player, world, pos, side, Permission.MODIFY, Permission.AUTOCRAFTING);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -1,18 +1,24 @@
|
||||
package com.raoulvdberge.refinedstorage.container;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorListener;
|
||||
import com.raoulvdberge.refinedstorage.gui.IResizableDisplay;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorElements;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor;
|
||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class ContainerCraftingMonitor extends ContainerBase {
|
||||
public class ContainerCraftingMonitor extends ContainerBase implements ICraftingMonitorListener {
|
||||
private ICraftingMonitor craftingMonitor;
|
||||
private IResizableDisplay resizableDisplay;
|
||||
private boolean addedListener;
|
||||
|
||||
public ContainerCraftingMonitor(ICraftingMonitor craftingMonitor, @Nullable TileCraftingMonitor craftingMonitorTile, EntityPlayer player, IResizableDisplay resizableDisplay) {
|
||||
super(craftingMonitorTile, player);
|
||||
@@ -30,12 +36,31 @@ public class ContainerCraftingMonitor extends ContainerBase {
|
||||
addPlayerInventory(8, resizableDisplay.getYPlayerInventory());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detectAndSendChanges() {
|
||||
super.detectAndSendChanges();
|
||||
|
||||
ICraftingManager manager = craftingMonitor.getCraftingManager();
|
||||
if (!getPlayer().world.isRemote) {
|
||||
if (manager != null && !addedListener) {
|
||||
System.out.println("Added");
|
||||
manager.addListener(this);
|
||||
|
||||
this.addedListener = true;
|
||||
} else if (manager == null && addedListener) {
|
||||
this.addedListener = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onContainerClosed(EntityPlayer player) {
|
||||
super.onContainerClosed(player);
|
||||
|
||||
if (!player.getEntityWorld().isRemote) {
|
||||
craftingMonitor.onClosed(player);
|
||||
ICraftingManager manager = craftingMonitor.getCraftingManager();
|
||||
if (!player.getEntityWorld().isRemote && manager != null && addedListener) {
|
||||
System.out.println("Removed");
|
||||
manager.removeListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,4 +99,15 @@ public class ContainerCraftingMonitor extends ContainerBase {
|
||||
protected boolean isHeldItemDisabled() {
|
||||
return craftingMonitor instanceof WirelessCraftingMonitor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttached() {
|
||||
onChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChanged() {
|
||||
System.out.println("Changed");
|
||||
RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(craftingMonitor), (EntityPlayerMP) getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
@@ -16,11 +16,11 @@ public interface ICraftingMonitor {
|
||||
|
||||
TileDataParameter<Integer, ?> getRedstoneModeParameter();
|
||||
|
||||
@Nullable
|
||||
BlockPos getNetworkPosition();
|
||||
|
||||
List<ICraftingTask> getTasks();
|
||||
|
||||
@Nullable
|
||||
ICraftingManager getCraftingManager();
|
||||
|
||||
int getSize();
|
||||
|
||||
void onSizeChanged(int size);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.raoulvdberge.refinedstorage.tile.craftingmonitor;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||
@@ -16,6 +17,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -52,11 +54,6 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockPos getNetworkPosition() {
|
||||
return network;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ICraftingTask> getTasks() {
|
||||
INetwork network = getNetwork();
|
||||
@@ -68,6 +65,18 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ICraftingManager getCraftingManager() {
|
||||
INetwork network = getNetwork();
|
||||
|
||||
if (network != null) {
|
||||
return network.getCraftingManager();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return size;
|
||||
|
||||
Reference in New Issue
Block a user