Move reader writer logic to another class, crafting monitor update to crafting manager and use GuiBase.executeLater more
This commit is contained in:
@@ -96,6 +96,8 @@ public interface IRSAPI {
|
|||||||
IReaderWriterHandlerRegistry getReaderWriterHandlerRegistry();
|
IReaderWriterHandlerRegistry getReaderWriterHandlerRegistry();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param name the name of the channel
|
||||||
|
* @param network the network
|
||||||
* @return a new reader writer channel
|
* @return a new reader writer channel
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting;
|
|||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
@@ -216,4 +217,23 @@ public interface ICraftingManager {
|
|||||||
* @return the written tag
|
* @return the written tag
|
||||||
*/
|
*/
|
||||||
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
NBTTagCompound writeToNBT(NBTTagCompound tag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Makes the network send a crafting monitor update to all players as soon as it can.
|
||||||
|
*/
|
||||||
|
void markCraftingMonitorForUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
void sendCraftingMonitorUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a crafting monitor update to a specific player.
|
||||||
|
*
|
||||||
|
* @param player the player
|
||||||
|
*/
|
||||||
|
void sendCraftingMonitorUpdate(EntityPlayerMP player);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,12 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
|
|||||||
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler;
|
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler;
|
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
|
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
|
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@@ -80,57 +79,9 @@ public interface INetwork {
|
|||||||
IStorageCache<FluidStack> getFluidStorageCache();
|
IStorageCache<FluidStack> getFluidStorageCache();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes the network send a crafting monitor update to all players as soon as it can.
|
* @return the {@link IReaderWriterManager} of this network
|
||||||
*/
|
*/
|
||||||
void markCraftingMonitorForUpdate();
|
IReaderWriterManager getReaderWriterManager();
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends a crafting monitor update to all players that are watching a crafting monitor.
|
|
||||||
* <p>
|
|
||||||
* WARNING: In most cases, you should just use {@link INetwork#markCraftingMonitorForUpdate()}, if not,
|
|
||||||
* you can get high bandwidth usage.
|
|
||||||
*/
|
|
||||||
void sendCraftingMonitorUpdate();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends a crafting monitor update to a specific player.
|
|
||||||
*
|
|
||||||
* @param player the player
|
|
||||||
*/
|
|
||||||
void sendCraftingMonitorUpdate(EntityPlayerMP player);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param name the name of the reader writer channel
|
|
||||||
* @return the reader writer channel, or null if nothing was found
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
IReaderWriterChannel getReaderWriterChannel(String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a new reader writer channel.
|
|
||||||
*
|
|
||||||
* @param name the name of this channel
|
|
||||||
*/
|
|
||||||
void addReaderWriterChannel(String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes a reader writer channel.
|
|
||||||
*
|
|
||||||
* @param name the name of the channel to remove
|
|
||||||
*/
|
|
||||||
void removeReaderWriterChannel(String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends a reader writer channel update to all players watching a reader or writer.
|
|
||||||
*/
|
|
||||||
void sendReaderWriterChannelUpdate();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends a reader writer channel update to a specific player.
|
|
||||||
*
|
|
||||||
* @param player the player to send to
|
|
||||||
*/
|
|
||||||
void sendReaderWriterChannelUpdate(EntityPlayerMP player);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserts an item in this network.
|
* Inserts an item in this network.
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ public interface IGrid {
|
|||||||
GridType getType();
|
GridType getType();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param player the player to create a listener for
|
||||||
* @return a listener for this grid, will be attached to the storage cache in {@link #getStorageCache()}
|
* @return a listener for this grid, will be attached to the storage cache in {@link #getStorageCache()}
|
||||||
*/
|
*/
|
||||||
IStorageCacheListener createListener(EntityPlayerMP player);
|
IStorageCacheListener createListener(EntityPlayerMP player);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ public interface IFluidGridHandler {
|
|||||||
/**
|
/**
|
||||||
* Called when a player tries to insert fluids in the grid.
|
* Called when a player tries to insert fluids in the grid.
|
||||||
*
|
*
|
||||||
|
* @param player the player
|
||||||
* @param container a stack with a fluid container we're trying to insert
|
* @param container a stack with a fluid container we're trying to insert
|
||||||
* @return the remainder, or null if there is no remainder
|
* @return the remainder, or null if there is no remainder
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.api.network.readerwriter;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A manager for the reader writer.
|
||||||
|
*/
|
||||||
|
public interface IReaderWriterManager {
|
||||||
|
/**
|
||||||
|
* Updates the channels.
|
||||||
|
*/
|
||||||
|
void update();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param name the name of the channel
|
||||||
|
* @return the channel, or null if nothing was found
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
IReaderWriterChannel getChannel(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a new channel.
|
||||||
|
*
|
||||||
|
* @param name the name of this channel
|
||||||
|
*/
|
||||||
|
void addChannel(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a channel.
|
||||||
|
*
|
||||||
|
* @param name the name of the channel to remove
|
||||||
|
*/
|
||||||
|
void removeChannel(String name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a channel update to all players watching a reader or writer.
|
||||||
|
*/
|
||||||
|
void sendUpdate();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a channel update to a specific player.
|
||||||
|
*
|
||||||
|
* @param player the player to send to
|
||||||
|
*/
|
||||||
|
void sendUpdateTo(EntityPlayerMP player);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param tag the tag to write to
|
||||||
|
*/
|
||||||
|
void writeToNBT(NBTTagCompound tag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param tag the tag to read from
|
||||||
|
*/
|
||||||
|
void readFromNBT(NBTTagCompound tag);
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting;
|
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.*;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.*;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingStep;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingStep;
|
||||||
@@ -10,7 +11,10 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
|
|||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
import com.raoulvdberge.refinedstorage.api.util.IStackList;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
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 com.raoulvdberge.refinedstorage.tile.TileController;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
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.nbt.NBTTagList;
|
||||||
@@ -37,6 +41,8 @@ public class CraftingManager implements ICraftingManager {
|
|||||||
private List<NBTTagCompound> craftingTasksToRead = new ArrayList<>();
|
private List<NBTTagCompound> craftingTasksToRead = new ArrayList<>();
|
||||||
private List<ICraftingStep> runningSteps = new ArrayList<>();
|
private List<ICraftingStep> runningSteps = new ArrayList<>();
|
||||||
|
|
||||||
|
private boolean craftingMonitorUpdateRequested;
|
||||||
|
|
||||||
private int ticks;
|
private int ticks;
|
||||||
|
|
||||||
public CraftingManager(TileController network) {
|
public CraftingManager(TileController network) {
|
||||||
@@ -195,10 +201,16 @@ public class CraftingManager implements ICraftingManager {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if (craftingTasksChanged) {
|
if (craftingTasksChanged) {
|
||||||
network.getNetwork().markCraftingMonitorForUpdate();
|
markCraftingMonitorForUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (craftingMonitorUpdateRequested) {
|
||||||
|
craftingMonitorUpdateRequested = false;
|
||||||
|
|
||||||
|
sendCraftingMonitorUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -246,7 +258,7 @@ public class CraftingManager implements ICraftingManager {
|
|||||||
|
|
||||||
add(task);
|
add(task);
|
||||||
|
|
||||||
network.markCraftingMonitorForUpdate();
|
markCraftingMonitorForUpdate();
|
||||||
|
|
||||||
return task;
|
return task;
|
||||||
}
|
}
|
||||||
@@ -280,6 +292,23 @@ public class CraftingManager implements ICraftingManager {
|
|||||||
craftingTasks.forEach(t -> t.getMissing().clear());
|
craftingTasks.forEach(t -> t.getMissing().clear());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markCraftingMonitorForUpdate() {
|
||||||
|
craftingMonitorUpdateRequested = 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);
|
||||||
|
}
|
||||||
|
|
||||||
private static ICraftingTask readCraftingTask(INetwork network, NBTTagCompound tag) {
|
private static ICraftingTask readCraftingTask(INetwork network, NBTTagCompound tag) {
|
||||||
ItemStack stack = new ItemStack(tag.getCompoundTag(ICraftingTask.NBT_PATTERN_STACK));
|
ItemStack stack = new ItemStack(tag.getCompoundTag(ICraftingTask.NBT_PATTERN_STACK));
|
||||||
|
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ public abstract class CraftingStep implements ICraftingStep {
|
|||||||
|
|
||||||
stack.shrink(toReceive);
|
stack.shrink(toReceive);
|
||||||
|
|
||||||
network.markCraftingMonitorForUpdate();
|
network.getCraftingManager().markCraftingMonitorForUpdate();
|
||||||
|
|
||||||
if (stack.isEmpty()) {
|
if (stack.isEmpty()) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -408,7 +408,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
network.markCraftingMonitorForUpdate();
|
network.getCraftingManager().markCraftingMonitorForUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -493,7 +493,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
|
|
||||||
usedContainers.put(container, timesUsed);
|
usedContainers.put(container, timesUsed);
|
||||||
|
|
||||||
network.markCraftingMonitorForUpdate();
|
network.getCraftingManager().markCraftingMonitorForUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -542,7 +542,7 @@ public class CraftingTask implements ICraftingTask {
|
|||||||
calculate();
|
calculate();
|
||||||
}
|
}
|
||||||
|
|
||||||
network.markCraftingMonitorForUpdate();
|
network.getCraftingManager().markCraftingMonitorForUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
|
|||||||
|
|
||||||
player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), hand.ordinal(), network.world().provider.getDimension(), 0);
|
player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), hand.ordinal(), network.world().provider.getDimension(), 0);
|
||||||
|
|
||||||
network.sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
||||||
|
|
||||||
drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage);
|
drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage);
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public interface IGuiReaderWriter {
|
|||||||
INetwork network = getNetwork();
|
INetwork network = getNetwork();
|
||||||
|
|
||||||
if (network != null && !name.isEmpty()) {
|
if (network != null && !name.isEmpty()) {
|
||||||
network.addReaderWriterChannel(name);
|
network.getReaderWriterManager().addChannel(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ public interface IGuiReaderWriter {
|
|||||||
INetwork network = getNetwork();
|
INetwork network = getNetwork();
|
||||||
|
|
||||||
if (network != null && !name.isEmpty()) {
|
if (network != null && !name.isEmpty()) {
|
||||||
network.removeReaderWriterChannel(name);
|
network.getReaderWriterManager().removeChannel(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
|
|||||||
filterListener.accept(slot);
|
filterListener.accept(slot);
|
||||||
|
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
network.sendCraftingMonitorUpdate();
|
network.getCraftingManager().sendCraftingMonitorUpdate();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
|
|||||||
|
|
||||||
public void onOpened(EntityPlayer player) {
|
public void onOpened(EntityPlayer player) {
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
network.sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade
|
|||||||
|
|
||||||
public void onOpened(EntityPlayer entity) {
|
public void onOpened(EntityPlayer entity) {
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
|
network.getReaderWriterManager().sendUpdateTo((EntityPlayerMP) entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
|
|||||||
@Override
|
@Override
|
||||||
public void setChannel(String channel) {
|
public void setChannel(String channel) {
|
||||||
if (network != null && channel.equals("")) {
|
if (network != null && channel.equals("")) {
|
||||||
IReaderWriterChannel networkChannel = network.getReaderWriterChannel(this.channel);
|
IReaderWriterChannel networkChannel = network.getReaderWriterManager().getChannel(this.channel);
|
||||||
|
|
||||||
if (networkChannel != null) {
|
if (networkChannel != null) {
|
||||||
for (IReaderWriterHandler handler : networkChannel.getHandlers()) {
|
for (IReaderWriterHandler handler : networkChannel.getHandlers()) {
|
||||||
@@ -118,7 +118,7 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
|
|||||||
|
|
||||||
public void onOpened(EntityPlayer entity) {
|
public void onOpened(EntityPlayer entity) {
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
|
network.getReaderWriterManager().sendUpdateTo((EntityPlayerMP) entity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.INetwork;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
|
import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter;
|
||||||
|
import com.raoulvdberge.refinedstorage.network.MessageReaderWriterUpdate;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.nbt.NBTTagList;
|
||||||
|
import net.minecraftforge.common.util.Constants;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ReaderWriterManager implements IReaderWriterManager {
|
||||||
|
private static final String NBT_CHANNELS = "ReaderWriterChannels";
|
||||||
|
private static final String NBT_NAME = "Name";
|
||||||
|
|
||||||
|
private INetwork network;
|
||||||
|
private Runnable listener;
|
||||||
|
private Map<String, IReaderWriterChannel> channels = new HashMap<>();
|
||||||
|
|
||||||
|
public ReaderWriterManager(INetwork network, Runnable listener) {
|
||||||
|
this.network = network;
|
||||||
|
this.listener = listener;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update() {
|
||||||
|
for (IReaderWriterChannel channel : channels.values()) {
|
||||||
|
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
||||||
|
handler.update(channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public IReaderWriterChannel getChannel(String name) {
|
||||||
|
return channels.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addChannel(String name) {
|
||||||
|
channels.put(name, API.instance().createReaderWriterChannel(name, network));
|
||||||
|
|
||||||
|
listener.run();
|
||||||
|
|
||||||
|
sendUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeChannel(String name) {
|
||||||
|
IReaderWriterChannel channel = getChannel(name);
|
||||||
|
|
||||||
|
if (channel != null) {
|
||||||
|
channel.getReaders().forEach(reader -> reader.setChannel(""));
|
||||||
|
channel.getWriters().forEach(writer -> writer.setChannel(""));
|
||||||
|
|
||||||
|
channels.remove(name);
|
||||||
|
|
||||||
|
listener.run();
|
||||||
|
|
||||||
|
sendUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendUpdate() {
|
||||||
|
// @todo: Move to a listener system
|
||||||
|
network.world().getMinecraftServer().getPlayerList().getPlayers().stream()
|
||||||
|
.filter(player -> player.openContainer instanceof ContainerReaderWriter &&
|
||||||
|
((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork() != null &&
|
||||||
|
network.getPosition().equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork().getPosition()))
|
||||||
|
.forEach(this::sendUpdateTo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void sendUpdateTo(EntityPlayerMP player) {
|
||||||
|
RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(new ArrayList<>(channels.keySet())), player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToNBT(NBTTagCompound tag) {
|
||||||
|
NBTTagList readerWriterChannelsList = new NBTTagList();
|
||||||
|
|
||||||
|
for (Map.Entry<String, IReaderWriterChannel> entry : channels.entrySet()) {
|
||||||
|
NBTTagCompound channelTag = entry.getValue().writeToNBT(new NBTTagCompound());
|
||||||
|
|
||||||
|
channelTag.setString(NBT_NAME, entry.getKey());
|
||||||
|
|
||||||
|
readerWriterChannelsList.appendTag(channelTag);
|
||||||
|
}
|
||||||
|
|
||||||
|
tag.setTag(NBT_CHANNELS, readerWriterChannelsList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromNBT(NBTTagCompound tag) {
|
||||||
|
if (tag.hasKey(NBT_CHANNELS)) {
|
||||||
|
NBTTagList readerWriterChannelsList = tag.getTagList(NBT_CHANNELS, Constants.NBT.TAG_COMPOUND);
|
||||||
|
|
||||||
|
for (int i = 0; i < readerWriterChannelsList.tagCount(); ++i) {
|
||||||
|
NBTTagCompound channelTag = readerWriterChannelsList.getCompoundTagAt(i);
|
||||||
|
|
||||||
|
String name = channelTag.getString(NBT_NAME);
|
||||||
|
|
||||||
|
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, network);
|
||||||
|
|
||||||
|
channel.readFromNBT(channelTag);
|
||||||
|
|
||||||
|
channels.put(name, channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,7 +39,7 @@ public class BlockReader extends BlockCable {
|
|||||||
|
|
||||||
if (player.isSneaking()) {
|
if (player.isSneaking()) {
|
||||||
if (reader.getNetwork() != null) {
|
if (reader.getNetwork() != null) {
|
||||||
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel());
|
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
|
||||||
|
|
||||||
if (channel != null) {
|
if (channel != null) {
|
||||||
channel.getHandlers().stream().map(h -> h.getStatusReader(reader, channel)).flatMap(List::stream).forEach(player::sendMessage);
|
channel.getHandlers().stream().map(h -> h.getStatusReader(reader, channel)).flatMap(List::stream).forEach(player::sendMessage);
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class BlockWriter extends BlockCable {
|
|||||||
|
|
||||||
if (player.isSneaking()) {
|
if (player.isSneaking()) {
|
||||||
if (writer.getNetwork() != null) {
|
if (writer.getNetwork() != null) {
|
||||||
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel());
|
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
|
||||||
|
|
||||||
if (channel != null) {
|
if (channel != null) {
|
||||||
channel.getHandlers().stream().map(h -> h.getStatusWriter(writer, channel)).flatMap(List::stream).forEach(player::sendMessage);
|
channel.getHandlers().stream().map(h -> h.getStatusWriter(writer, channel)).flatMap(List::stream).forEach(player::sendMessage);
|
||||||
|
|||||||
@@ -19,13 +19,11 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GuiCraftingMonitor extends GuiBase {
|
public class GuiCraftingMonitor extends GuiBase {
|
||||||
public static List<ICraftingMonitorElement> ELEMENTS = Collections.emptyList();
|
|
||||||
|
|
||||||
public class CraftingMonitorElementDrawers extends ElementDrawers {
|
public class CraftingMonitorElementDrawers extends ElementDrawers {
|
||||||
private IElementDrawer<Integer> overlayDrawer = (x, y, colour) -> {
|
private IElementDrawer<Integer> overlayDrawer = (x, y, color) -> {
|
||||||
GlStateManager.color(1, 1, 1, 1);
|
GlStateManager.color(1, 1, 1, 1);
|
||||||
GlStateManager.disableLighting();
|
GlStateManager.disableLighting();
|
||||||
drawRect(x, y, x + ITEM_WIDTH, y + ITEM_HEIGHT - 1, colour);
|
drawRect(x, y, x + ITEM_WIDTH, y + ITEM_HEIGHT - 1, color);
|
||||||
};
|
};
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -43,11 +41,11 @@ public class GuiCraftingMonitor extends GuiBase {
|
|||||||
private GuiButton cancelAllButton;
|
private GuiButton cancelAllButton;
|
||||||
|
|
||||||
private ICraftingMonitor craftingMonitor;
|
private ICraftingMonitor craftingMonitor;
|
||||||
|
private List<ICraftingMonitorElement> elements = Collections.emptyList();
|
||||||
|
|
||||||
private IElementDrawers drawers = new CraftingMonitorElementDrawers();
|
private IElementDrawers drawers = new CraftingMonitorElementDrawers();
|
||||||
|
|
||||||
private int itemSelected = -1;
|
private int itemSelected = -1;
|
||||||
|
|
||||||
private int itemSelectedX = -1;
|
private int itemSelectedX = -1;
|
||||||
private int itemSelectedY = -1;
|
private int itemSelectedY = -1;
|
||||||
|
|
||||||
@@ -58,8 +56,12 @@ public class GuiCraftingMonitor extends GuiBase {
|
|||||||
this.scrollbar = new Scrollbar(157, 20, 12, 89);
|
this.scrollbar = new Scrollbar(157, 20, 12, 89);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setElements(List<ICraftingMonitorElement> elements) {
|
||||||
|
this.elements = elements;
|
||||||
|
}
|
||||||
|
|
||||||
private List<ICraftingMonitorElement> getElements() {
|
private List<ICraftingMonitorElement> getElements() {
|
||||||
return craftingMonitor.isActive() ? ELEMENTS : Collections.emptyList();
|
return craftingMonitor.isActive() ? elements : Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import net.minecraft.client.gui.GuiTextField;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class GuiDetector extends GuiBase {
|
public class GuiDetector extends GuiBase {
|
||||||
public static GuiTextField AMOUNT;
|
private GuiTextField amount;
|
||||||
|
|
||||||
public GuiDetector(ContainerDetector container) {
|
public GuiDetector(ContainerDetector container) {
|
||||||
super(container, 176, 137);
|
super(container, 176, 137);
|
||||||
@@ -29,13 +29,13 @@ public class GuiDetector extends GuiBase {
|
|||||||
addSideButton(new SideButtonCompare(this, TileDetector.COMPARE, IComparer.COMPARE_NBT));
|
addSideButton(new SideButtonCompare(this, TileDetector.COMPARE, IComparer.COMPARE_NBT));
|
||||||
addSideButton(new SideButtonCompare(this, TileDetector.COMPARE, IComparer.COMPARE_OREDICT));
|
addSideButton(new SideButtonCompare(this, TileDetector.COMPARE, IComparer.COMPARE_OREDICT));
|
||||||
|
|
||||||
AMOUNT = new GuiTextField(0, fontRenderer, x + 41 + 1, y + 23 + 1, 50, fontRenderer.FONT_HEIGHT);
|
amount = new GuiTextField(0, fontRenderer, x + 41 + 1, y + 23 + 1, 50, fontRenderer.FONT_HEIGHT);
|
||||||
AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue()));
|
amount.setText(String.valueOf(TileDetector.AMOUNT.getValue()));
|
||||||
AMOUNT.setEnableBackgroundDrawing(false);
|
amount.setEnableBackgroundDrawing(false);
|
||||||
AMOUNT.setVisible(true);
|
amount.setVisible(true);
|
||||||
AMOUNT.setTextColor(16777215);
|
amount.setTextColor(16777215);
|
||||||
AMOUNT.setCanLoseFocus(true);
|
amount.setCanLoseFocus(true);
|
||||||
AMOUNT.setFocused(false);
|
amount.setFocused(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -48,7 +48,7 @@ public class GuiDetector extends GuiBase {
|
|||||||
|
|
||||||
drawTexture(x, y, 0, 0, screenWidth, screenHeight);
|
drawTexture(x, y, 0, 0, screenWidth, screenHeight);
|
||||||
|
|
||||||
AMOUNT.drawTextBox();
|
amount.drawTextBox();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -59,8 +59,8 @@ public class GuiDetector extends GuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void keyTyped(char character, int keyCode) throws IOException {
|
protected void keyTyped(char character, int keyCode) throws IOException {
|
||||||
if (!checkHotbarKeys(keyCode) && AMOUNT.textboxKeyTyped(character, keyCode)) {
|
if (!checkHotbarKeys(keyCode) && amount.textboxKeyTyped(character, keyCode)) {
|
||||||
Integer result = Ints.tryParse(AMOUNT.getText());
|
Integer result = Ints.tryParse(amount.getText());
|
||||||
|
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
TileDataManager.setParameter(TileDetector.AMOUNT, result);
|
TileDataManager.setParameter(TileDetector.AMOUNT, result);
|
||||||
@@ -74,6 +74,10 @@ public class GuiDetector extends GuiBase {
|
|||||||
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
|
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
|
||||||
super.mouseClicked(mouseX, mouseY, mouseButton);
|
super.mouseClicked(mouseX, mouseY, mouseButton);
|
||||||
|
|
||||||
AMOUNT.mouseClicked(mouseX, mouseY, mouseButton);
|
amount.mouseClicked(mouseX, mouseY, mouseButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GuiTextField getAmount() {
|
||||||
|
return amount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,20 +18,19 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GuiReaderWriter extends GuiBase {
|
public class GuiReaderWriter extends GuiBase {
|
||||||
public static List<String> CHANNELS = Collections.emptyList();
|
|
||||||
|
|
||||||
private static final int VISIBLE_ROWS = 4;
|
private static final int VISIBLE_ROWS = 4;
|
||||||
|
|
||||||
private static final int ITEM_WIDTH = 143;
|
private static final int ITEM_WIDTH = 143;
|
||||||
private static final int ITEM_HEIGHT = 18;
|
private static final int ITEM_HEIGHT = 18;
|
||||||
|
|
||||||
|
private List<String> channels = Collections.emptyList();
|
||||||
|
|
||||||
private GuiButton add;
|
private GuiButton add;
|
||||||
private GuiButton remove;
|
private GuiButton remove;
|
||||||
private GuiTextField name;
|
private GuiTextField name;
|
||||||
private IGuiReaderWriter readerWriter;
|
private IGuiReaderWriter readerWriter;
|
||||||
|
|
||||||
private int itemSelected = -1;
|
private int itemSelected = -1;
|
||||||
|
|
||||||
private int itemSelectedX = -1;
|
private int itemSelectedX = -1;
|
||||||
private int itemSelectedY = -1;
|
private int itemSelectedY = -1;
|
||||||
|
|
||||||
@@ -58,6 +57,14 @@ public class GuiReaderWriter extends GuiBase {
|
|||||||
updateSelection(readerWriter.getChannelParameter().getValue());
|
updateSelection(readerWriter.getChannelParameter().getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<String> getChannels() {
|
||||||
|
return readerWriter.isActive() ? channels : Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setChannels(List<String> channels) {
|
||||||
|
this.channels = channels;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(int x, int y) {
|
public void update(int x, int y) {
|
||||||
if (scrollbar != null) {
|
if (scrollbar != null) {
|
||||||
@@ -152,9 +159,9 @@ public class GuiReaderWriter extends GuiBase {
|
|||||||
@Override
|
@Override
|
||||||
protected void keyTyped(char character, int keyCode) throws IOException {
|
protected void keyTyped(char character, int keyCode) throws IOException {
|
||||||
if (keyCode == Keyboard.KEY_DELETE) {
|
if (keyCode == Keyboard.KEY_DELETE) {
|
||||||
sendRemove();
|
onRemove();
|
||||||
} else if (name.isFocused() && keyCode == Keyboard.KEY_RETURN) {
|
} else if (name.isFocused() && keyCode == Keyboard.KEY_RETURN) {
|
||||||
sendAdd();
|
onAdd();
|
||||||
} else if (!checkHotbarKeys(keyCode) && name.textboxKeyTyped(character, keyCode)) {
|
} else if (!checkHotbarKeys(keyCode) && name.textboxKeyTyped(character, keyCode)) {
|
||||||
// NO OP
|
// NO OP
|
||||||
} else {
|
} else {
|
||||||
@@ -167,13 +174,13 @@ public class GuiReaderWriter extends GuiBase {
|
|||||||
super.actionPerformed(button);
|
super.actionPerformed(button);
|
||||||
|
|
||||||
if (button == add) {
|
if (button == add) {
|
||||||
sendAdd();
|
onAdd();
|
||||||
} else if (button == remove) {
|
} else if (button == remove) {
|
||||||
sendRemove();
|
onRemove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendAdd() {
|
private void onAdd() {
|
||||||
String name = this.name.getText().trim();
|
String name = this.name.getText().trim();
|
||||||
|
|
||||||
if (!name.isEmpty()) {
|
if (!name.isEmpty()) {
|
||||||
@@ -181,7 +188,7 @@ public class GuiReaderWriter extends GuiBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendRemove() {
|
private void onRemove() {
|
||||||
String name = this.name.getText().trim();
|
String name = this.name.getText().trim();
|
||||||
|
|
||||||
if (!name.isEmpty()) {
|
if (!name.isEmpty()) {
|
||||||
@@ -193,8 +200,4 @@ public class GuiReaderWriter extends GuiBase {
|
|||||||
this.itemSelected = getChannels().indexOf(channel);
|
this.itemSelected = getChannels().indexOf(channel);
|
||||||
this.name.setText(itemSelected != -1 ? getChannels().get(itemSelected) : "");
|
this.name.setText(itemSelected != -1 ? getChannels().get(itemSelected) : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> getChannels() {
|
|
||||||
return readerWriter.isActive() ? CHANNELS : Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.network;
|
|||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
|
||||||
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
|
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor;
|
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor;
|
||||||
import com.raoulvdberge.refinedstorage.gui.grid.filtering.GridFilterFilter;
|
import com.raoulvdberge.refinedstorage.gui.grid.filtering.GridFilterFilter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
|
||||||
@@ -70,7 +71,9 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMessage onMessage(MessageCraftingMonitorElements message, MessageContext ctx) {
|
public IMessage onMessage(MessageCraftingMonitorElements message, MessageContext ctx) {
|
||||||
GuiCraftingMonitor.ELEMENTS = message.elements;
|
GuiBase.executeLater(GuiCraftingMonitor.class, craftingMonitor -> {
|
||||||
|
craftingMonitor.setElements(message.elements);
|
||||||
|
});
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.network;
|
package com.raoulvdberge.refinedstorage.network;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter;
|
import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
import net.minecraftforge.fml.common.network.ByteBufUtils;
|
||||||
@@ -8,22 +9,20 @@ 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 java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.List;
|
||||||
|
|
||||||
public class MessageReaderWriterUpdate implements IMessage, IMessageHandler<MessageReaderWriterUpdate, IMessage> {
|
public class MessageReaderWriterUpdate implements IMessage, IMessageHandler<MessageReaderWriterUpdate, IMessage> {
|
||||||
private Collection<String> channels;
|
private List<String> channels = new ArrayList<>();
|
||||||
|
|
||||||
public MessageReaderWriterUpdate() {
|
public MessageReaderWriterUpdate() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageReaderWriterUpdate(Collection<String> channels) {
|
public MessageReaderWriterUpdate(List<String> channels) {
|
||||||
this.channels = channels;
|
this.channels = channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fromBytes(ByteBuf buf) {
|
public void fromBytes(ByteBuf buf) {
|
||||||
this.channels = new ArrayList<>();
|
|
||||||
|
|
||||||
int size = buf.readInt();
|
int size = buf.readInt();
|
||||||
|
|
||||||
for (int i = 0; i < size; ++i) {
|
for (int i = 0; i < size; ++i) {
|
||||||
@@ -42,7 +41,7 @@ public class MessageReaderWriterUpdate implements IMessage, IMessageHandler<Mess
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMessage onMessage(MessageReaderWriterUpdate message, MessageContext ctx) {
|
public IMessage onMessage(MessageReaderWriterUpdate message, MessageContext ctx) {
|
||||||
GuiReaderWriter.CHANNELS = (ArrayList<String>) message.channels;
|
GuiBase.executeLater(GuiReaderWriter.class, readerWriter -> readerWriter.setChannels(message.channels));
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,14 +11,12 @@ import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler
|
|||||||
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
|
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
|
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
|
||||||
import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker;
|
import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingManager;
|
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingManager;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.FluidGridHandler;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.FluidGridHandler;
|
||||||
@@ -26,6 +24,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.ItemGridHand
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageFluidExternal;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageFluidExternal;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageItemExternal;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageItemExternal;
|
||||||
|
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterManager;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
|
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
|
||||||
@@ -35,11 +34,7 @@ import com.raoulvdberge.refinedstorage.block.BlockController;
|
|||||||
import com.raoulvdberge.refinedstorage.block.ControllerEnergyType;
|
import com.raoulvdberge.refinedstorage.block.ControllerEnergyType;
|
||||||
import com.raoulvdberge.refinedstorage.block.ControllerType;
|
import com.raoulvdberge.refinedstorage.block.ControllerType;
|
||||||
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
||||||
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
|
|
||||||
import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter;
|
|
||||||
import com.raoulvdberge.refinedstorage.integration.forgeenergy.EnergyForge;
|
import com.raoulvdberge.refinedstorage.integration.forgeenergy.EnergyForge;
|
||||||
import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorElements;
|
|
||||||
import com.raoulvdberge.refinedstorage.network.MessageReaderWriterUpdate;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable;
|
import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
|
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
|
import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
|
||||||
@@ -47,11 +42,9 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
|||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
|
||||||
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.nbt.NBTTagList;
|
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.ITickable;
|
import net.minecraft.util.ITickable;
|
||||||
@@ -65,7 +58,9 @@ import net.minecraftforge.items.ItemHandlerHelper;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
public class TileController extends TileBase implements ITickable, INetwork, IRedstoneConfigurable, INetworkNode, INetworkNodeProxy<TileController> {
|
public class TileController extends TileBase implements ITickable, INetwork, IRedstoneConfigurable, INetworkNode, INetworkNodeProxy<TileController> {
|
||||||
@@ -116,9 +111,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity";
|
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity";
|
||||||
public static final String NBT_ENERGY_TYPE = "EnergyType";
|
public static final String NBT_ENERGY_TYPE = "EnergyType";
|
||||||
|
|
||||||
private static final String NBT_READER_WRITER_CHANNELS = "ReaderWriterChannels";
|
|
||||||
private static final String NBT_READER_WRITER_NAME = "Name";
|
|
||||||
|
|
||||||
private static final String NBT_ITEM_STORAGE_TRACKER = "ItemStorageTracker";
|
private static final String NBT_ITEM_STORAGE_TRACKER = "ItemStorageTracker";
|
||||||
private static final String NBT_FLUID_STORAGE_TRACKER = "FluidStorageTracker";
|
private static final String NBT_FLUID_STORAGE_TRACKER = "FluidStorageTracker";
|
||||||
|
|
||||||
@@ -139,7 +131,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
private IStorageCache<FluidStack> fluidStorage = new StorageCacheFluid(this);
|
private IStorageCache<FluidStack> fluidStorage = new StorageCacheFluid(this);
|
||||||
private StorageTrackerFluid fluidStorageTracker = new StorageTrackerFluid(this::markDirty);
|
private StorageTrackerFluid fluidStorageTracker = new StorageTrackerFluid(this::markDirty);
|
||||||
|
|
||||||
private Map<String, IReaderWriterChannel> readerWriterChannels = new HashMap<>();
|
private IReaderWriterManager readerWriterManager = new ReaderWriterManager(this, this::markDirty);
|
||||||
|
|
||||||
private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
|
private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
|
||||||
|
|
||||||
@@ -147,8 +139,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
private boolean couldRun;
|
private boolean couldRun;
|
||||||
private int ticksSinceUpdateChanged;
|
private int ticksSinceUpdateChanged;
|
||||||
|
|
||||||
private boolean craftingMonitorUpdateRequested;
|
|
||||||
|
|
||||||
private ControllerType type;
|
private ControllerType type;
|
||||||
private ControllerEnergyType energyType = ControllerEnergyType.OFF;
|
private ControllerEnergyType energyType = ControllerEnergyType.OFF;
|
||||||
|
|
||||||
@@ -197,21 +187,11 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
if (canRun()) {
|
if (canRun()) {
|
||||||
craftingManager.update();
|
craftingManager.update();
|
||||||
|
|
||||||
for (IReaderWriterChannel channel : readerWriterChannels.values()) {
|
readerWriterManager.update();
|
||||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
|
||||||
handler.update(channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!craftingManager.getTasks().isEmpty() || !readerWriterChannels.isEmpty()) {
|
if (!craftingManager.getTasks().isEmpty()) {
|
||||||
markDirty();
|
markDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (craftingMonitorUpdateRequested) {
|
|
||||||
craftingMonitorUpdateRequested = false;
|
|
||||||
|
|
||||||
sendCraftingMonitorUpdate();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getType() == ControllerType.NORMAL) {
|
if (getType() == ControllerType.NORMAL) {
|
||||||
@@ -293,61 +273,8 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markCraftingMonitorForUpdate() {
|
public IReaderWriterManager getReaderWriterManager() {
|
||||||
craftingMonitorUpdateRequested = true;
|
return readerWriterManager;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendCraftingMonitorUpdate() {
|
|
||||||
world.getMinecraftServer().getPlayerList().getPlayers().stream()
|
|
||||||
.filter(player -> player.openContainer instanceof ContainerCraftingMonitor && pos.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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public IReaderWriterChannel getReaderWriterChannel(String name) {
|
|
||||||
return readerWriterChannels.get(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addReaderWriterChannel(String name) {
|
|
||||||
readerWriterChannels.put(name, API.instance().createReaderWriterChannel(name, this));
|
|
||||||
|
|
||||||
sendReaderWriterChannelUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeReaderWriterChannel(String name) {
|
|
||||||
IReaderWriterChannel channel = getReaderWriterChannel(name);
|
|
||||||
|
|
||||||
if (channel != null) {
|
|
||||||
channel.getReaders().forEach(reader -> reader.setChannel(""));
|
|
||||||
channel.getWriters().forEach(writer -> writer.setChannel(""));
|
|
||||||
|
|
||||||
readerWriterChannels.remove(name);
|
|
||||||
|
|
||||||
sendReaderWriterChannelUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendReaderWriterChannelUpdate() {
|
|
||||||
world.getMinecraftServer().getPlayerList().getPlayers().stream()
|
|
||||||
.filter(player -> player.openContainer instanceof ContainerReaderWriter &&
|
|
||||||
((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork() != null &&
|
|
||||||
pos.equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork().getPosition()))
|
|
||||||
.forEach(this::sendReaderWriterChannelUpdate);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendReaderWriterChannelUpdate(EntityPlayerMP player) {
|
|
||||||
RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(readerWriterChannels.keySet()), player);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -557,21 +484,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
|
|
||||||
craftingManager.readFromNBT(tag);
|
craftingManager.readFromNBT(tag);
|
||||||
|
|
||||||
if (tag.hasKey(NBT_READER_WRITER_CHANNELS)) {
|
readerWriterManager.readFromNBT(tag);
|
||||||
NBTTagList readerWriterChannelsList = tag.getTagList(NBT_READER_WRITER_CHANNELS, Constants.NBT.TAG_COMPOUND);
|
|
||||||
|
|
||||||
for (int i = 0; i < readerWriterChannelsList.tagCount(); ++i) {
|
|
||||||
NBTTagCompound channelTag = readerWriterChannelsList.getCompoundTagAt(i);
|
|
||||||
|
|
||||||
String name = channelTag.getString(NBT_READER_WRITER_NAME);
|
|
||||||
|
|
||||||
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, this);
|
|
||||||
|
|
||||||
channel.readFromNBT(channelTag);
|
|
||||||
|
|
||||||
readerWriterChannels.put(name, channel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag.hasKey(NBT_ITEM_STORAGE_TRACKER)) {
|
if (tag.hasKey(NBT_ITEM_STORAGE_TRACKER)) {
|
||||||
itemStorageTracker.readFromNBT(tag.getTagList(NBT_ITEM_STORAGE_TRACKER, Constants.NBT.TAG_COMPOUND));
|
itemStorageTracker.readFromNBT(tag.getTagList(NBT_ITEM_STORAGE_TRACKER, Constants.NBT.TAG_COMPOUND));
|
||||||
@@ -592,17 +505,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
|
|
||||||
craftingManager.writeToNBT(tag);
|
craftingManager.writeToNBT(tag);
|
||||||
|
|
||||||
NBTTagList readerWriterChannelsList = new NBTTagList();
|
readerWriterManager.writeToNBT(tag);
|
||||||
|
|
||||||
for (Map.Entry<String, IReaderWriterChannel> entry : readerWriterChannels.entrySet()) {
|
|
||||||
NBTTagCompound channelTag = entry.getValue().writeToNBT(new NBTTagCompound());
|
|
||||||
|
|
||||||
channelTag.setString(NBT_READER_WRITER_NAME, entry.getKey());
|
|
||||||
|
|
||||||
readerWriterChannelsList.appendTag(channelTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
tag.setTag(NBT_READER_WRITER_CHANNELS, readerWriterChannelsList);
|
|
||||||
|
|
||||||
tag.setTag(NBT_ITEM_STORAGE_TRACKER, itemStorageTracker.serializeNBT());
|
tag.setTag(NBT_ITEM_STORAGE_TRACKER, itemStorageTracker.serializeNBT());
|
||||||
tag.setTag(NBT_FLUID_STORAGE_TRACKER, fluidStorageTracker.serializeNBT());
|
tag.setTag(NBT_FLUID_STORAGE_TRACKER, fluidStorageTracker.serializeNBT());
|
||||||
|
|||||||
@@ -1,18 +1,15 @@
|
|||||||
package com.raoulvdberge.refinedstorage.tile;
|
package com.raoulvdberge.refinedstorage.tile;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDetector;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDetector;
|
||||||
|
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||||
import com.raoulvdberge.refinedstorage.gui.GuiDetector;
|
import com.raoulvdberge.refinedstorage.gui.GuiDetector;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
@@ -30,15 +27,7 @@ public class TileDetector extends TileNode<NetworkNodeDetector> {
|
|||||||
public static final TileDataParameter<Integer, TileDetector> AMOUNT = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getAmount(), (t, v) -> {
|
public static final TileDataParameter<Integer, TileDetector> AMOUNT = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getAmount(), (t, v) -> {
|
||||||
t.getNode().setAmount(v);
|
t.getNode().setAmount(v);
|
||||||
t.getNode().markDirty();
|
t.getNode().markDirty();
|
||||||
}, p -> {
|
}, p -> GuiBase.executeLater(GuiDetector.class, detector -> detector.getAmount().setText(String.valueOf(p))));
|
||||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
|
||||||
GuiScreen gui = Minecraft.getMinecraft().currentScreen;
|
|
||||||
|
|
||||||
if (gui instanceof GuiDetector) {
|
|
||||||
GuiDetector.AMOUNT.setText(String.valueOf(p));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
public TileDetector() {
|
public TileDetector() {
|
||||||
dataManager.addWatchedParameter(COMPARE);
|
dataManager.addWatchedParameter(COMPARE);
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel());
|
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
|
||||||
|
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -106,7 +106,7 @@ public class TileReader extends TileNode<NetworkNodeReader> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel());
|
IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
|
||||||
|
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel());
|
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
|
||||||
|
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
return false;
|
return false;
|
||||||
@@ -90,7 +90,7 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel());
|
IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
|
||||||
|
|
||||||
if (channel == null) {
|
if (channel == null) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class TileCraftingMonitor extends TileNode<NetworkNodeCraftingMonitor> {
|
|||||||
INetwork network = t.getNode().getNetwork();
|
INetwork network = t.getNode().getNetwork();
|
||||||
|
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
network.sendCraftingMonitorUpdate();
|
network.getCraftingManager().sendCraftingMonitorUpdate();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
|
|||||||
INetwork network = getNetwork();
|
INetwork network = getNetwork();
|
||||||
|
|
||||||
if (network != null) {
|
if (network != null) {
|
||||||
network.sendCraftingMonitorUpdate();
|
network.getCraftingManager().sendCraftingMonitorUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -78,11 +78,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
|
|||||||
t.setSearchBoxMode(v);
|
t.setSearchBoxMode(v);
|
||||||
t.markDirty();
|
t.markDirty();
|
||||||
}
|
}
|
||||||
}, p -> {
|
}, p -> GuiBase.executeLater(GuiGrid.class, grid -> grid.updateSearchFieldFocus(p)));
|
||||||
if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) {
|
|
||||||
((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(p);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
public static final TileDataParameter<Integer, TilePortableGrid> SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getSize, (t, v) -> {
|
public static final TileDataParameter<Integer, TilePortableGrid> SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getSize, (t, v) -> {
|
||||||
if (IGrid.isValidSize(v)) {
|
if (IGrid.isValidSize(v)) {
|
||||||
t.setSize(v);
|
t.setSize(v);
|
||||||
|
|||||||
Reference in New Issue
Block a user