Move reader writer logic to another class, crafting monitor update to crafting manager and use GuiBase.executeLater more

This commit is contained in:
raoulvdberge
2018-03-14 10:22:17 +01:00
parent d6b5f15cb0
commit e7b7c3052b
29 changed files with 323 additions and 239 deletions

View File

@@ -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

View File

@@ -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);
} }

View File

@@ -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.

View File

@@ -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);

View File

@@ -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
*/ */

View File

@@ -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);
}

View File

@@ -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));

View File

@@ -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;

View File

@@ -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();
} }
} }

View File

@@ -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);

View File

@@ -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);
} }
} }
} }

View File

@@ -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);
} }
} }

View File

@@ -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);
} }
} }
} }

View File

@@ -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);
} }
} }
} }

View File

@@ -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);
}
}
}
}

View File

@@ -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);

View File

@@ -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);

View File

@@ -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

View File

@@ -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;
} }
} }

View File

@@ -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();
}
} }

View File

@@ -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;
} }

View File

@@ -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;
} }

View File

@@ -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());

View File

@@ -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);

View File

@@ -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;

View File

@@ -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;

View File

@@ -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();
} }
}); });

View File

@@ -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();
} }
} }
}; };

View File

@@ -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);