Cleanup of the tile data syncing system
This commit is contained in:
		| @@ -10,9 +10,9 @@ public interface IGuiReaderWriter { | |||||||
|  |  | ||||||
|     void setChannel(String channel); |     void setChannel(String channel); | ||||||
|  |  | ||||||
|     TileDataParameter<String> getChannelParameter(); |     TileDataParameter<String, ?> getChannelParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getRedstoneModeParameter(); |     TileDataParameter<Integer, ?> getRedstoneModeParameter(); | ||||||
|  |  | ||||||
|     INetwork getNetwork(); |     INetwork getNetwork(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,19 +6,19 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| public interface IGuiStorage { | public interface IGuiStorage { | ||||||
|     String getGuiTitle(); |     String getGuiTitle(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getTypeParameter(); |     TileDataParameter<Integer, ?> getTypeParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getRedstoneModeParameter(); |     TileDataParameter<Integer, ?> getRedstoneModeParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getCompareParameter(); |     TileDataParameter<Integer, ?> getCompareParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getFilterParameter(); |     TileDataParameter<Integer, ?> getFilterParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getPriorityParameter(); |     TileDataParameter<Integer, ?> getPriorityParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<AccessType> getAccessTypeParameter(); |     TileDataParameter<AccessType, ?> getAccessTypeParameter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Boolean> getVoidExcessParameter(); |     TileDataParameter<Boolean, ?> getVoidExcessParameter(); | ||||||
|  |  | ||||||
|     String getVoidExcessType(); |     String getVoidExcessType(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -70,7 +70,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileCraftingMonitor.REDSTONE_MODE; |         return TileCraftingMonitor.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -243,37 +243,37 @@ public class NetworkNodeFluidStorage extends NetworkNode implements IGuiStorage, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getTypeParameter() { |     public TileDataParameter<Integer, ?> getTypeParameter() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileFluidStorage.REDSTONE_MODE; |         return TileFluidStorage.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getCompareParameter() { |     public TileDataParameter<Integer, ?> getCompareParameter() { | ||||||
|         return TileFluidStorage.COMPARE; |         return TileFluidStorage.COMPARE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getFilterParameter() { |     public TileDataParameter<Integer, ?> getFilterParameter() { | ||||||
|         return TileFluidStorage.MODE; |         return TileFluidStorage.MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getPriorityParameter() { |     public TileDataParameter<Integer, ?> getPriorityParameter() { | ||||||
|         return TileFluidStorage.PRIORITY; |         return TileFluidStorage.PRIORITY; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Boolean> getVoidExcessParameter() { |     public TileDataParameter<Boolean, ?> getVoidExcessParameter() { | ||||||
|         return TileFluidStorage.VOID_EXCESS; |         return TileFluidStorage.VOID_EXCESS; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<AccessType> getAccessTypeParameter() { |     public TileDataParameter<AccessType, ?> getAccessTypeParameter() { | ||||||
|         return TileFluidStorage.ACCESS_TYPE; |         return TileFluidStorage.ACCESS_TYPE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -532,7 +532,7 @@ public class NetworkNodeGrid extends NetworkNode implements IGrid { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeConfig() { |     public TileDataParameter<Integer, ?> getRedstoneModeConfig() { | ||||||
|         return TileGrid.REDSTONE_MODE; |         return TileGrid.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -47,12 +47,12 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<String> getChannelParameter() { |     public TileDataParameter<String, ?> getChannelParameter() { | ||||||
|         return TileReader.CHANNEL; |         return TileReader.CHANNEL; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileReader.REDSTONE_MODE; |         return TileReader.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -250,37 +250,37 @@ public class NetworkNodeStorage extends NetworkNode implements IGuiStorage, ISto | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getTypeParameter() { |     public TileDataParameter<Integer, ?> getTypeParameter() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileStorage.REDSTONE_MODE; |         return TileStorage.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getCompareParameter() { |     public TileDataParameter<Integer, ?> getCompareParameter() { | ||||||
|         return TileStorage.COMPARE; |         return TileStorage.COMPARE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getFilterParameter() { |     public TileDataParameter<Integer, ?> getFilterParameter() { | ||||||
|         return TileStorage.MODE; |         return TileStorage.MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getPriorityParameter() { |     public TileDataParameter<Integer, ?> getPriorityParameter() { | ||||||
|         return TileStorage.PRIORITY; |         return TileStorage.PRIORITY; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Boolean> getVoidExcessParameter() { |     public TileDataParameter<Boolean, ?> getVoidExcessParameter() { | ||||||
|         return TileStorage.VOID_EXCESS; |         return TileStorage.VOID_EXCESS; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<AccessType> getAccessTypeParameter() { |     public TileDataParameter<AccessType, ?> getAccessTypeParameter() { | ||||||
|         return TileStorage.ACCESS_TYPE; |         return TileStorage.ACCESS_TYPE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -79,12 +79,12 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<String> getChannelParameter() { |     public TileDataParameter<String, ?> getChannelParameter() { | ||||||
|         return TileWriter.CHANNEL; |         return TileWriter.CHANNEL; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileWriter.REDSTONE_MODE; |         return TileWriter.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -263,37 +263,37 @@ public class NetworkNodeDiskDrive extends NetworkNode implements IGuiStorage, IS | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getTypeParameter() { |     public TileDataParameter<Integer, ?> getTypeParameter() { | ||||||
|         return TileDiskDrive.TYPE; |         return TileDiskDrive.TYPE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileDiskDrive.REDSTONE_MODE; |         return TileDiskDrive.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getCompareParameter() { |     public TileDataParameter<Integer, ?> getCompareParameter() { | ||||||
|         return TileDiskDrive.COMPARE; |         return TileDiskDrive.COMPARE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getFilterParameter() { |     public TileDataParameter<Integer, ?> getFilterParameter() { | ||||||
|         return TileDiskDrive.MODE; |         return TileDiskDrive.MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getPriorityParameter() { |     public TileDataParameter<Integer, ?> getPriorityParameter() { | ||||||
|         return TileDiskDrive.PRIORITY; |         return TileDiskDrive.PRIORITY; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Boolean> getVoidExcessParameter() { |     public TileDataParameter<Boolean, ?> getVoidExcessParameter() { | ||||||
|         return TileDiskDrive.VOID_EXCESS; |         return TileDiskDrive.VOID_EXCESS; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<AccessType> getAccessTypeParameter() { |     public TileDataParameter<AccessType, ?> getAccessTypeParameter() { | ||||||
|         return TileDiskDrive.ACCESS_TYPE; |         return TileDiskDrive.ACCESS_TYPE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -239,32 +239,32 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return TileExternalStorage.REDSTONE_MODE; |         return TileExternalStorage.REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getCompareParameter() { |     public TileDataParameter<Integer, ?> getCompareParameter() { | ||||||
|         return TileExternalStorage.COMPARE; |         return TileExternalStorage.COMPARE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getFilterParameter() { |     public TileDataParameter<Integer, ?> getFilterParameter() { | ||||||
|         return TileExternalStorage.MODE; |         return TileExternalStorage.MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getPriorityParameter() { |     public TileDataParameter<Integer, ?> getPriorityParameter() { | ||||||
|         return TileExternalStorage.PRIORITY; |         return TileExternalStorage.PRIORITY; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Boolean> getVoidExcessParameter() { |     public TileDataParameter<Boolean, ?> getVoidExcessParameter() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<AccessType> getAccessTypeParameter() { |     public TileDataParameter<AccessType, ?> getAccessTypeParameter() { | ||||||
|         return TileExternalStorage.ACCESS_TYPE; |         return TileExternalStorage.ACCESS_TYPE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -301,7 +301,7 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getTypeParameter() { |     public TileDataParameter<Integer, ?> getTypeParameter() { | ||||||
|         return TileExternalStorage.TYPE; |         return TileExternalStorage.TYPE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,9 +9,9 @@ import net.minecraft.inventory.Container; | |||||||
| import net.minecraft.util.Tuple; | import net.minecraft.util.Tuple; | ||||||
|  |  | ||||||
| public class GuiPriority extends GuiCraftingStart { | public class GuiPriority extends GuiCraftingStart { | ||||||
|     private TileDataParameter<Integer> priority; |     private TileDataParameter<Integer, ?> priority; | ||||||
|  |  | ||||||
|     public GuiPriority(GuiBase parent, TileDataParameter<Integer> priority) { |     public GuiPriority(GuiBase parent, TileDataParameter<Integer, ?> priority) { | ||||||
|         super(parent, null, new Container() { |         super(parent, null, new Container() { | ||||||
|             @Override |             @Override | ||||||
|             public boolean canInteractWith(EntityPlayer player) { |             public boolean canInteractWith(EntityPlayer player) { | ||||||
|   | |||||||
| @@ -8,9 +8,9 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| import net.minecraft.util.text.TextFormatting; | import net.minecraft.util.text.TextFormatting; | ||||||
|  |  | ||||||
| public class SideButtonAccessType extends SideButton { | public class SideButtonAccessType extends SideButton { | ||||||
|     private TileDataParameter<AccessType> parameter; |     private TileDataParameter<AccessType, ?> parameter; | ||||||
|  |  | ||||||
|     public SideButtonAccessType(GuiBase gui, TileDataParameter<AccessType> parameter) { |     public SideButtonAccessType(GuiBase gui, TileDataParameter<AccessType, ?> parameter) { | ||||||
|         super(gui); |         super(gui); | ||||||
|  |  | ||||||
|         this.parameter = parameter; |         this.parameter = parameter; | ||||||
|   | |||||||
| @@ -7,10 +7,10 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| import net.minecraft.util.text.TextFormatting; | import net.minecraft.util.text.TextFormatting; | ||||||
|  |  | ||||||
| public class SideButtonCompare extends SideButton { | public class SideButtonCompare extends SideButton { | ||||||
|     private TileDataParameter<Integer> parameter; |     private TileDataParameter<Integer, ?> parameter; | ||||||
|     private int mask; |     private int mask; | ||||||
|  |  | ||||||
|     public SideButtonCompare(GuiBase gui, TileDataParameter<Integer> parameter, int mask) { |     public SideButtonCompare(GuiBase gui, TileDataParameter<Integer, ?> parameter, int mask) { | ||||||
|         super(gui); |         super(gui); | ||||||
|  |  | ||||||
|         this.parameter = parameter; |         this.parameter = parameter; | ||||||
|   | |||||||
| @@ -7,9 +7,9 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| import net.minecraft.util.text.TextFormatting; | import net.minecraft.util.text.TextFormatting; | ||||||
|  |  | ||||||
| public class SideButtonMode extends SideButton { | public class SideButtonMode extends SideButton { | ||||||
|     private TileDataParameter<Integer> parameter; |     private TileDataParameter<Integer, ?> parameter; | ||||||
|  |  | ||||||
|     public SideButtonMode(GuiBase gui, TileDataParameter<Integer> parameter) { |     public SideButtonMode(GuiBase gui, TileDataParameter<Integer, ?> parameter) { | ||||||
|         super(gui); |         super(gui); | ||||||
|  |  | ||||||
|         this.parameter = parameter; |         this.parameter = parameter; | ||||||
|   | |||||||
| @@ -6,9 +6,9 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| import net.minecraft.util.text.TextFormatting; | import net.minecraft.util.text.TextFormatting; | ||||||
|  |  | ||||||
| public class SideButtonRedstoneMode extends SideButton { | public class SideButtonRedstoneMode extends SideButton { | ||||||
|     private TileDataParameter<Integer> parameter; |     private TileDataParameter<Integer, ?> parameter; | ||||||
|  |  | ||||||
|     public SideButtonRedstoneMode(GuiBase gui, TileDataParameter<Integer> parameter) { |     public SideButtonRedstoneMode(GuiBase gui, TileDataParameter<Integer, ?> parameter) { | ||||||
|         super(gui); |         super(gui); | ||||||
|  |  | ||||||
|         this.parameter = parameter; |         this.parameter = parameter; | ||||||
|   | |||||||
| @@ -7,9 +7,9 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| import net.minecraft.util.text.TextFormatting; | import net.minecraft.util.text.TextFormatting; | ||||||
|  |  | ||||||
| public class SideButtonType extends SideButton { | public class SideButtonType extends SideButton { | ||||||
|     private TileDataParameter<Integer> type; |     private TileDataParameter<Integer, ?> type; | ||||||
|  |  | ||||||
|     public SideButtonType(GuiBase gui, TileDataParameter<Integer> type) { |     public SideButtonType(GuiBase gui, TileDataParameter<Integer, ?> type) { | ||||||
|         super(gui); |         super(gui); | ||||||
|  |  | ||||||
|         this.type = type; |         this.type = type; | ||||||
|   | |||||||
| @@ -6,10 +6,10 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | |||||||
| import net.minecraft.util.text.TextFormatting; | import net.minecraft.util.text.TextFormatting; | ||||||
|  |  | ||||||
| public class SideButtonVoidExcess extends SideButton { | public class SideButtonVoidExcess extends SideButton { | ||||||
|     private TileDataParameter<Boolean> parameter; |     private TileDataParameter<Boolean, ?> parameter; | ||||||
|     private String type; |     private String type; | ||||||
|  |  | ||||||
|     public SideButtonVoidExcess(GuiBase gui, TileDataParameter<Boolean> parameter, String type) { |     public SideButtonVoidExcess(GuiBase gui, TileDataParameter<Boolean, ?> parameter, String type) { | ||||||
|         super(gui); |         super(gui); | ||||||
|  |  | ||||||
|         this.parameter = parameter; |         this.parameter = parameter; | ||||||
|   | |||||||
| @@ -28,10 +28,6 @@ import javax.annotation.Nullable; | |||||||
| import java.util.*; | import java.util.*; | ||||||
|  |  | ||||||
| public class ItemPattern extends ItemBase implements ICraftingPatternProvider { | public class ItemPattern extends ItemBase implements ICraftingPatternProvider { | ||||||
|     /** |  | ||||||
|      * A cache that maps a stack to a crafting pattern. |  | ||||||
|      * Only used client side for rendering and tooltips, to avoid crafting pattern allocations and crafting pattern output calculation (which is expensive). |  | ||||||
|      */ |  | ||||||
|     private static Map<ItemStack, CraftingPattern> PATTERN_CACHE = new HashMap<>(); |     private static Map<ItemStack, CraftingPattern> PATTERN_CACHE = new HashMap<>(); | ||||||
|  |  | ||||||
|     private static final String NBT_SLOT = "Slot_%d"; |     private static final String NBT_SLOT = "Slot_%d"; | ||||||
| @@ -82,6 +78,7 @@ public class ItemPattern extends ItemBase implements ICraftingPatternProvider { | |||||||
|         } else { |         } else { | ||||||
|             tooltip.add(TextFormatting.RED + I18n.format("misc.refinedstorage:pattern.invalid") + TextFormatting.RESET); |             tooltip.add(TextFormatting.RED + I18n.format("misc.refinedstorage:pattern.invalid") + TextFormatting.RESET); | ||||||
|  |  | ||||||
|  |             // @todo: Removal in a future version | ||||||
|             // Display a helpful message stating the outputs if this is a legacy pattern |             // Display a helpful message stating the outputs if this is a legacy pattern | ||||||
|             if (stack.hasTagCompound() && stack.getTagCompound().hasKey("Inputs") && stack.getTagCompound().hasKey("Outputs")) { |             if (stack.hasTagCompound() && stack.getTagCompound().hasKey("Inputs") && stack.getTagCompound().hasKey("Outputs")) { | ||||||
|                 tooltip.add(TextFormatting.WHITE + "This pattern is a legacy pattern made before RS 1.0, please re-make!" + TextFormatting.RESET); |                 tooltip.add(TextFormatting.WHITE + "This pattern is a legacy pattern made before RS 1.0, please re-make!" + TextFormatting.RESET); | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ public class MessageTileDataParameter implements IMessage, IMessageHandler<Messa | |||||||
|     public void toBytes(ByteBuf buf) { |     public void toBytes(ByteBuf buf) { | ||||||
|         buf.writeInt(parameter.getId()); |         buf.writeInt(parameter.getId()); | ||||||
|  |  | ||||||
|         parameter.getSerializer().write((PacketBuffer) buf, parameter.getValueProducer().getValue(tile)); |         parameter.getSerializer().write((PacketBuffer) buf, parameter.getValueProducer().apply(tile)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| package com.raoulvdberge.refinedstorage.network; | package com.raoulvdberge.refinedstorage.network; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.container.ContainerBase; | import com.raoulvdberge.refinedstorage.container.ContainerBase; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; | import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import io.netty.buffer.ByteBuf; | import io.netty.buffer.ByteBuf; | ||||||
| @@ -10,6 +9,8 @@ import net.minecraft.inventory.Container; | |||||||
| import net.minecraft.network.PacketBuffer; | import net.minecraft.network.PacketBuffer; | ||||||
| import net.minecraftforge.fml.common.network.simpleimpl.IMessage; | import net.minecraftforge.fml.common.network.simpleimpl.IMessage; | ||||||
|  |  | ||||||
|  | import java.util.function.BiConsumer; | ||||||
|  |  | ||||||
| public class MessageTileDataParameterUpdate extends MessageHandlerPlayerToServer<MessageTileDataParameterUpdate> implements IMessage { | public class MessageTileDataParameterUpdate extends MessageHandlerPlayerToServer<MessageTileDataParameterUpdate> implements IMessage { | ||||||
|     private TileDataParameter parameter; |     private TileDataParameter parameter; | ||||||
|     private Object value; |     private Object value; | ||||||
| @@ -49,10 +50,10 @@ public class MessageTileDataParameterUpdate extends MessageHandlerPlayerToServer | |||||||
|         Container c = player.openContainer; |         Container c = player.openContainer; | ||||||
|  |  | ||||||
|         if (c instanceof ContainerBase) { |         if (c instanceof ContainerBase) { | ||||||
|             ITileDataConsumer consumer = message.parameter.getValueConsumer(); |             BiConsumer consumer = message.parameter.getValueConsumer(); | ||||||
|  |  | ||||||
|             if (consumer != null) { |             if (consumer != null) { | ||||||
|                 consumer.setValue(((ContainerBase) c).getTile(), message.value); |                 consumer.accept(((ContainerBase) c).getTile(), message.value); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.tile; | |||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeConstructor; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeConstructor; | ||||||
| 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.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -13,19 +11,11 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileConstructor extends TileNode<NetworkNodeConstructor> { | public class TileConstructor extends TileNode<NetworkNodeConstructor> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileConstructor> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileConstructor> TYPE = IType.createParameter(); | ||||||
|     public static final TileDataParameter<Boolean> DROP = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileConstructor>() { |     public static final TileDataParameter<Boolean, TileConstructor> DROP = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isDrop(), (t, v) -> { | ||||||
|         @Override |         t.getNode().setDrop(v); | ||||||
|         public Boolean getValue(TileConstructor tile) { |         t.getNode().markDirty(); | ||||||
|             return tile.getNode().isDrop(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileConstructor>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileConstructor tile, Boolean value) { |  | ||||||
|             tile.getNode().setDrop(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public TileConstructor() { |     public TileConstructor() { | ||||||
|   | |||||||
| @@ -41,7 +41,6 @@ import com.raoulvdberge.refinedstorage.integration.forgeenergy.EnergyForge; | |||||||
| import com.raoulvdberge.refinedstorage.network.*; | import com.raoulvdberge.refinedstorage.network.*; | ||||||
| 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.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; | import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import com.raoulvdberge.refinedstorage.tile.grid.IGrid; | import com.raoulvdberge.refinedstorage.tile.grid.IGrid; | ||||||
| @@ -69,35 +68,22 @@ import java.util.*; | |||||||
| 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> { | ||||||
|     public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter(); |     private static final Comparator<ClientNode> CLIENT_NODE_COMPARATOR = (left, right) -> { | ||||||
|  |         if (left.getEnergyUsage() == right.getEnergyUsage()) { | ||||||
|     public static final TileDataParameter<Integer> ENERGY_USAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileController>() { |             return 0; | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileController tile) { |  | ||||||
|             return tile.getEnergyUsage(); |  | ||||||
|         } |         } | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileController>() { |         return (left.getEnergyUsage() > right.getEnergyUsage()) ? -1 : 1; | ||||||
|         @Override |     }; | ||||||
|         public Integer getValue(TileController tile) { |  | ||||||
|             return tile.energy.getEnergyStored(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> ENERGY_CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileController>() { |     public static final TileDataParameter<Integer, TileController> REDSTONE_MODE = RedstoneMode.createParameter(); | ||||||
|         @Override |     public static final TileDataParameter<Integer, TileController> ENERGY_USAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, TileController::getEnergyUsage); | ||||||
|         public Integer getValue(TileController tile) { |     public static final TileDataParameter<Integer, TileController> ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getEnergy().getEnergyStored()); | ||||||
|             return tile.energy.getMaxEnergyStored(); |     public static final TileDataParameter<Integer, TileController> ENERGY_CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getEnergy().getMaxEnergyStored()); | ||||||
|         } |     public static final TileDataParameter<List<ClientNode>, TileController> NODES = new TileDataParameter<>(RSSerializers.CLIENT_NODE_SERIALIZER, new ArrayList<>(), t -> { | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<List<ClientNode>> NODES = new TileDataParameter<>(RSSerializers.CLIENT_NODE_SERIALIZER, new ArrayList<>(), new ITileDataProducer<List<ClientNode>, TileController>() { |  | ||||||
|         @Override |  | ||||||
|         public List<ClientNode> getValue(TileController tile) { |  | ||||||
|         List<ClientNode> nodes = new ArrayList<>(); |         List<ClientNode> nodes = new ArrayList<>(); | ||||||
|  |  | ||||||
|             for (INetworkNode node : tile.nodeGraph.all()) { |         for (INetworkNode node : t.nodeGraph.all()) { | ||||||
|             if (node.canUpdate()) { |             if (node.canUpdate()) { | ||||||
|                 ItemStack stack = node.getItemStack(); |                 ItemStack stack = node.getItemStack(); | ||||||
|  |  | ||||||
| @@ -120,7 +106,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe | |||||||
|         nodes.sort(CLIENT_NODE_COMPARATOR); |         nodes.sort(CLIENT_NODE_COMPARATOR); | ||||||
|  |  | ||||||
|         return nodes; |         return nodes; | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public static final String NBT_ENERGY = "Energy"; |     public static final String NBT_ENERGY = "Energy"; | ||||||
| @@ -129,14 +114,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe | |||||||
|     private static final String NBT_READER_WRITER_CHANNELS = "ReaderWriterChannels"; |     private static final String NBT_READER_WRITER_CHANNELS = "ReaderWriterChannels"; | ||||||
|     private static final String NBT_READER_WRITER_NAME = "Name"; |     private static final String NBT_READER_WRITER_NAME = "Name"; | ||||||
|  |  | ||||||
|     private static final Comparator<ClientNode> CLIENT_NODE_COMPARATOR = (left, right) -> { |  | ||||||
|         if (left.getEnergyUsage() == right.getEnergyUsage()) { |  | ||||||
|             return 0; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return (left.getEnergyUsage() > right.getEnergyUsage()) ? -1 : 1; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     private IItemGridHandler itemGridHandler = new ItemGridHandler(this); |     private IItemGridHandler itemGridHandler = new ItemGridHandler(this); | ||||||
|     private IFluidGridHandler fluidGridHandler = new FluidGridHandler(this); |     private IFluidGridHandler fluidGridHandler = new FluidGridHandler(this); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDestructo | |||||||
| import com.raoulvdberge.refinedstorage.tile.config.IComparable; | import com.raoulvdberge.refinedstorage.tile.config.IComparable; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.IFilterable; | import com.raoulvdberge.refinedstorage.tile.config.IFilterable; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.IType; | import com.raoulvdberge.refinedstorage.tile.config.IType; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -14,20 +12,12 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileDestructor extends TileNode<NetworkNodeDestructor> { | public class TileDestructor extends TileNode<NetworkNodeDestructor> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileDestructor> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileDestructor> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileDestructor> TYPE = IType.createParameter(); | ||||||
|     public static final TileDataParameter<Boolean> PICKUP = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileDestructor>() { |     public static final TileDataParameter<Boolean, TileDestructor> PICKUP = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isPickupItem(), (t, v) -> { | ||||||
|         @Override |         t.getNode().setPickupItem(v); | ||||||
|         public Boolean getValue(TileDestructor tile) { |         t.getNode().markDirty(); | ||||||
|             return tile.getNode().isPickupItem(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileDestructor>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileDestructor tile, Boolean value) { |  | ||||||
|             tile.getNode().setPickupItem(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public TileDestructor() { |     public TileDestructor() { | ||||||
|   | |||||||
| @@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDetector; | |||||||
| 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.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.client.Minecraft; | import net.minecraft.client.Minecraft; | ||||||
| import net.minecraft.client.gui.GuiScreen; | import net.minecraft.client.gui.GuiScreen; | ||||||
| @@ -21,41 +19,23 @@ import javax.annotation.Nonnull; | |||||||
| public class TileDetector extends TileNode<NetworkNodeDetector> { | public class TileDetector extends TileNode<NetworkNodeDetector> { | ||||||
|     private static final String NBT_POWERED = "Powered"; |     private static final String NBT_POWERED = "Powered"; | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileDetector> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileDetector> TYPE = IType.createParameter(); | ||||||
|  |     public static final TileDataParameter<Integer, TileDetector> MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getMode(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileDetector>() { |         if (v == NetworkNodeDetector.MODE_UNDER || v == NetworkNodeDetector.MODE_EQUAL || v == NetworkNodeDetector.MODE_ABOVE || v == NetworkNodeDetector.MODE_AUTOCRAFTING) { | ||||||
|         @Override |             t.getNode().setMode(v); | ||||||
|         public Integer getValue(TileDetector tile) { |             t.getNode().markDirty(); | ||||||
|             return tile.getNode().getMode(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TileDetector>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileDetector tile, Integer value) { |  | ||||||
|             if (value == NetworkNodeDetector.MODE_UNDER || value == NetworkNodeDetector.MODE_EQUAL || value == NetworkNodeDetector.MODE_ABOVE || value == NetworkNodeDetector.MODE_AUTOCRAFTING) { |  | ||||||
|                 tile.getNode().setMode(value); |  | ||||||
|                 tile.getNode().markDirty(); |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TileDetector> AMOUNT = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getAmount(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> AMOUNT = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileDetector>() { |         t.getNode().setAmount(v); | ||||||
|         @Override |         t.getNode().markDirty(); | ||||||
|         public Integer getValue(TileDetector tile) { |     }, p -> { | ||||||
|             return tile.getNode().getAmount(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TileDetector>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileDetector tile, Integer value) { |  | ||||||
|             tile.getNode().setAmount(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { |         if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { | ||||||
|             GuiScreen gui = Minecraft.getMinecraft().currentScreen; |             GuiScreen gui = Minecraft.getMinecraft().currentScreen; | ||||||
|  |  | ||||||
|             if (gui instanceof GuiDetector) { |             if (gui instanceof GuiDetector) { | ||||||
|                 ((GuiDetector) gui).AMOUNT.setText(String.valueOf(parameter.getValue())); |                 GuiDetector.AMOUNT.setText(String.valueOf(p)); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|   | |||||||
| @@ -4,7 +4,6 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType; | |||||||
| import com.raoulvdberge.refinedstorage.api.storage.IStorageDisk; | import com.raoulvdberge.refinedstorage.api.storage.IStorageDisk; | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.NetworkNodeDiskDrive; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.*; | import com.raoulvdberge.refinedstorage.tile.config.*; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.nbt.NBTTagCompound; | import net.minecraft.nbt.NBTTagCompound; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -18,38 +17,33 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileDiskDrive extends TileNode<NetworkNodeDiskDrive> { | public class TileDiskDrive extends TileNode<NetworkNodeDiskDrive> { | ||||||
|     public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter(); |     public static final TileDataParameter<Integer, TileDiskDrive> PRIORITY = IPrioritizable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileDiskDrive> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileDiskDrive> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileDiskDrive> TYPE = IType.createParameter(); | ||||||
|     public static final TileDataParameter<Boolean> VOID_EXCESS = IExcessVoidable.createParameter(); |     public static final TileDataParameter<Boolean, TileDiskDrive> VOID_EXCESS = IExcessVoidable.createParameter(); | ||||||
|     public static final TileDataParameter<AccessType> ACCESS_TYPE = IAccessType.createParameter(); |     public static final TileDataParameter<AccessType, TileDiskDrive> ACCESS_TYPE = IAccessType.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileDiskDrive>() { |     public static final TileDataParameter<Integer, TileDiskDrive> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileDiskDrive tile) { |  | ||||||
|         int stored = 0; |         int stored = 0; | ||||||
|  |  | ||||||
|             for (IStorageDisk storage : tile.getNode().getItemStorages()) { |         for (IStorageDisk storage : t.getNode().getItemStorages()) { | ||||||
|             if (storage != null) { |             if (storage != null) { | ||||||
|                 stored += storage.getStored(); |                 stored += storage.getStored(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|             for (IStorageDisk storage : tile.getNode().getFluidStorages()) { |         for (IStorageDisk storage : t.getNode().getFluidStorages()) { | ||||||
|             if (storage != null) { |             if (storage != null) { | ||||||
|                 stored += storage.getStored(); |                 stored += storage.getStored(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return stored; |         return stored; | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|     public static final TileDataParameter<Integer> CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileDiskDrive>() { |     public static final TileDataParameter<Integer, TileDiskDrive> CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileDiskDrive tile) { |  | ||||||
|         int capacity = 0; |         int capacity = 0; | ||||||
|  |  | ||||||
|             for (IStorageDisk storage : tile.getNode().getItemStorages()) { |         for (IStorageDisk storage : t.getNode().getItemStorages()) { | ||||||
|             if (storage != null) { |             if (storage != null) { | ||||||
|                 if (storage.getCapacity() == -1) { |                 if (storage.getCapacity() == -1) { | ||||||
|                     return -1; |                     return -1; | ||||||
| @@ -59,7 +53,7 @@ public class TileDiskDrive extends TileNode<NetworkNodeDiskDrive> { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|             for (IStorageDisk storage : tile.getNode().getFluidStorages()) { |         for (IStorageDisk storage : t.getNode().getFluidStorages()) { | ||||||
|             if (storage != null) { |             if (storage != null) { | ||||||
|                 if (storage.getCapacity() == -1) { |                 if (storage.getCapacity() == -1) { | ||||||
|                     return -1; |                     return -1; | ||||||
| @@ -70,7 +64,6 @@ public class TileDiskDrive extends TileNode<NetworkNodeDiskDrive> { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         return capacity; |         return capacity; | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     private static final String NBT_DISK_STATE = "DiskState_%d"; |     private static final String NBT_DISK_STATE = "DiskState_%d"; | ||||||
|   | |||||||
| @@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskmanipulator.Netw | |||||||
| import com.raoulvdberge.refinedstorage.tile.config.IComparable; | import com.raoulvdberge.refinedstorage.tile.config.IComparable; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.IFilterable; | import com.raoulvdberge.refinedstorage.tile.config.IFilterable; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.IType; | import com.raoulvdberge.refinedstorage.tile.config.IType; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.nbt.NBTTagCompound; | import net.minecraft.nbt.NBTTagCompound; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -19,21 +17,12 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileDiskManipulator extends TileNode<NetworkNodeDiskManipulator> { | public class TileDiskManipulator extends TileNode<NetworkNodeDiskManipulator> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileDiskManipulator> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileDiskManipulator> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileDiskManipulator> TYPE = IType.createParameter(); | ||||||
|  |     public static final TileDataParameter<Integer, TileDiskManipulator> IO_MODE = new TileDataParameter<>(DataSerializers.VARINT, NetworkNodeDiskManipulator.IO_MODE_INSERT, t -> t.getNode().getIoMode(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> IO_MODE = new TileDataParameter<>(DataSerializers.VARINT, NetworkNodeDiskManipulator.IO_MODE_INSERT, new ITileDataProducer<Integer, TileDiskManipulator>() { |         t.getNode().setIoMode(v); | ||||||
|         @Override |         t.getNode().markDirty(); | ||||||
|         public Integer getValue(TileDiskManipulator tile) { |  | ||||||
|             return tile.getNode().getIoMode(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TileDiskManipulator>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileDiskManipulator tile, Integer value) { |  | ||||||
|             tile.getNode().setIoMode(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     private Integer[] diskState = new Integer[6]; |     private Integer[] diskState = new Integer[6]; | ||||||
|   | |||||||
| @@ -5,9 +5,6 @@ import com.raoulvdberge.refinedstorage.container.ContainerExporter; | |||||||
| import com.raoulvdberge.refinedstorage.gui.GuiExporter; | import com.raoulvdberge.refinedstorage.gui.GuiExporter; | ||||||
| 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.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataListener; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.client.Minecraft; | import net.minecraft.client.Minecraft; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| @@ -18,17 +15,10 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileExporter extends TileNode<NetworkNodeExporter> { | public class TileExporter extends TileNode<NetworkNodeExporter> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileExporter> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileExporter> TYPE = IType.createParameter(); | ||||||
|     public static final TileDataParameter<Boolean> REGULATOR = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileExporter>() { |     public static final TileDataParameter<Boolean, TileExporter> REGULATOR = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isRegulator(), (t, v) -> { | ||||||
|         @Override |         NetworkNodeExporter exporter = t.getNode(); | ||||||
|         public Boolean getValue(TileExporter tile) { |  | ||||||
|             return tile.getNode().isRegulator(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileExporter>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileExporter tile, Boolean value) { |  | ||||||
|             NetworkNodeExporter exporter = tile.getNode(); |  | ||||||
|  |  | ||||||
|         for (int i = 0; i < exporter.getItemFilters().getSlots() + exporter.getFluidFilters().getSlots(); ++i) { |         for (int i = 0; i < exporter.getItemFilters().getSlots() + exporter.getFluidFilters().getSlots(); ++i) { | ||||||
|             ItemStack slot = i >= exporter.getItemFilters().getSlots() ? exporter.getFluidFilters().getStackInSlot(i - exporter.getItemFilters().getSlots()) : exporter.getItemFilters().getStackInSlot(i); |             ItemStack slot = i >= exporter.getItemFilters().getSlots() ? exporter.getFluidFilters().getStackInSlot(i - exporter.getItemFilters().getSlots()) : exporter.getItemFilters().getStackInSlot(i); | ||||||
| @@ -38,37 +28,24 @@ public class TileExporter extends TileNode<NetworkNodeExporter> { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|             exporter.setRegulator(value); |         exporter.setRegulator(v); | ||||||
|         exporter.markDirty(); |         exporter.markDirty(); | ||||||
|  |  | ||||||
|             tile.world.getMinecraftServer().getPlayerList().getPlayers().stream() |         t.world.getMinecraftServer().getPlayerList().getPlayers().stream() | ||||||
|                 .filter(player -> player.openContainer instanceof ContainerExporter && ((ContainerExporter) player.openContainer).getTile().getPos().equals(tile.getPos())) |             .filter(player -> player.openContainer instanceof ContainerExporter && ((ContainerExporter) player.openContainer).getTile().getPos().equals(t.getPos())) | ||||||
|             .forEach(player -> { |             .forEach(player -> { | ||||||
|                 ((ContainerExporter) player.openContainer).initSlots(); |                 ((ContainerExporter) player.openContainer).initSlots(); | ||||||
|  |  | ||||||
|                 player.openContainer.detectAndSendChanges(); |                 player.openContainer.detectAndSendChanges(); | ||||||
|             }); |             }); | ||||||
|         } |     }, p -> { | ||||||
|     }, new ITileDataListener<Boolean>() { |  | ||||||
|         @Override |  | ||||||
|         public void onChanged(TileDataParameter<Boolean> parameter) { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiExporter) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiExporter) { | ||||||
|             ((ContainerExporter) ((GuiExporter) Minecraft.getMinecraft().currentScreen).inventorySlots).initSlots(); |             ((ContainerExporter) ((GuiExporter) Minecraft.getMinecraft().currentScreen).inventorySlots).initSlots(); | ||||||
|         } |         } | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Boolean, TileExporter> CRAFT_ONLY = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isCraftOnly(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Boolean> CRAFT_ONLY = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileExporter>() { |         t.getNode().setCraftOnly(v); | ||||||
|         @Override |         t.getNode().markDirty(); | ||||||
|         public Boolean getValue(TileExporter tile) { |  | ||||||
|             return tile.getNode().isCraftOnly(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileExporter>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileExporter tile, Boolean value) { |  | ||||||
|             tile.getNode().setCraftOnly(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public TileExporter() { |     public TileExporter() { | ||||||
|   | |||||||
| @@ -5,7 +5,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.Netw | |||||||
| 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.tile.config.*; | import com.raoulvdberge.refinedstorage.tile.config.*; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -14,44 +13,36 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileExternalStorage extends TileNode<NetworkNodeExternalStorage> { | public class TileExternalStorage extends TileNode<NetworkNodeExternalStorage> { | ||||||
|     public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter(); |     public static final TileDataParameter<Integer, TileExternalStorage> PRIORITY = IPrioritizable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileExternalStorage> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileExternalStorage> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileExternalStorage> TYPE = IType.createParameter(); | ||||||
|     public static final TileDataParameter<AccessType> ACCESS_TYPE = IAccessType.createParameter(); |     public static final TileDataParameter<AccessType, TileExternalStorage> ACCESS_TYPE = IAccessType.createParameter(); | ||||||
|  |     public static final TileDataParameter<Integer, TileExternalStorage> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { | ||||||
|     public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileExternalStorage>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileExternalStorage tile) { |  | ||||||
|         int stored = 0; |         int stored = 0; | ||||||
|  |  | ||||||
|             for (StorageItemExternal storage : tile.getNode().getItemStorages()) { |         for (StorageItemExternal storage : t.getNode().getItemStorages()) { | ||||||
|             stored += storage.getStored(); |             stored += storage.getStored(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|             for (StorageFluidExternal storage : tile.getNode().getFluidStorages()) { |         for (StorageFluidExternal storage : t.getNode().getFluidStorages()) { | ||||||
|             stored += storage.getStored(); |             stored += storage.getStored(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return stored; |         return stored; | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TileExternalStorage> CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { | ||||||
|     public static final TileDataParameter<Integer> CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileExternalStorage>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileExternalStorage tile) { |  | ||||||
|         int capacity = 0; |         int capacity = 0; | ||||||
|  |  | ||||||
|             for (StorageItemExternal storage : tile.getNode().getItemStorages()) { |         for (StorageItemExternal storage : t.getNode().getItemStorages()) { | ||||||
|             capacity += storage.getCapacity(); |             capacity += storage.getCapacity(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|             for (StorageFluidExternal storage : tile.getNode().getFluidStorages()) { |         for (StorageFluidExternal storage : t.getNode().getFluidStorages()) { | ||||||
|             capacity += storage.getCapacity(); |             capacity += storage.getCapacity(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return capacity; |         return capacity; | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public TileExternalStorage() { |     public TileExternalStorage() { | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ package com.raoulvdberge.refinedstorage.tile; | |||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidInterface; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidInterface; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.IComparable; | import com.raoulvdberge.refinedstorage.tile.config.IComparable; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; | import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.util.EnumFacing; | import net.minecraft.util.EnumFacing; | ||||||
| @@ -16,21 +15,9 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileFluidInterface extends TileNode<NetworkNodeFluidInterface> { | public class TileFluidInterface extends TileNode<NetworkNodeFluidInterface> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileFluidInterface> COMPARE = IComparable.createParameter(); | ||||||
|  |     public static final TileDataParameter<FluidStack, TileFluidInterface> TANK_IN = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, null, t -> t.getNode().getTankIn().getFluid()); | ||||||
|     public static final TileDataParameter<FluidStack> TANK_IN = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, null, new ITileDataProducer<FluidStack, TileFluidInterface>() { |     public static final TileDataParameter<FluidStack, TileFluidInterface> TANK_OUT = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, null, t -> t.getNode().getTankOut().getFluid()); | ||||||
|         @Override |  | ||||||
|         public FluidStack getValue(TileFluidInterface tile) { |  | ||||||
|             return tile.getNode().getTankIn().getFluid(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<FluidStack> TANK_OUT = new TileDataParameter<>(RSSerializers.FLUID_STACK_SERIALIZER, null, new ITileDataProducer<FluidStack, TileFluidInterface>() { |  | ||||||
|         @Override |  | ||||||
|         public FluidStack getValue(TileFluidInterface tile) { |  | ||||||
|             return tile.getNode().getTankOut().getFluid(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public TileFluidInterface() { |     public TileFluidInterface() { | ||||||
|         dataManager.addWatchedParameter(COMPARE); |         dataManager.addWatchedParameter(COMPARE); | ||||||
|   | |||||||
| @@ -3,7 +3,6 @@ package com.raoulvdberge.refinedstorage.tile; | |||||||
| import com.raoulvdberge.refinedstorage.api.storage.AccessType; | import com.raoulvdberge.refinedstorage.api.storage.AccessType; | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidStorage; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeFluidStorage; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.*; | import com.raoulvdberge.refinedstorage.tile.config.*; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -12,17 +11,12 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileFluidStorage extends TileNode<NetworkNodeFluidStorage> { | public class TileFluidStorage extends TileNode<NetworkNodeFluidStorage> { | ||||||
|     public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter(); |     public static final TileDataParameter<Integer, TileFluidStorage> PRIORITY = IPrioritizable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileFluidStorage> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Boolean> VOID_EXCESS = IExcessVoidable.createParameter(); |     public static final TileDataParameter<Boolean, TileFluidStorage> VOID_EXCESS = IExcessVoidable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileFluidStorage> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<AccessType> ACCESS_TYPE = IAccessType.createParameter(); |     public static final TileDataParameter<AccessType, TileFluidStorage> ACCESS_TYPE = IAccessType.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileFluidStorage>() { |     public static final TileDataParameter<Integer, TileFluidStorage> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getStorage().getStored()); | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileFluidStorage tile) { |  | ||||||
|             return tile.getNode().getStorage().getStored(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public TileFluidStorage() { |     public TileFluidStorage() { | ||||||
|         dataManager.addWatchedParameter(PRIORITY); |         dataManager.addWatchedParameter(PRIORITY); | ||||||
|   | |||||||
| @@ -11,9 +11,9 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileImporter extends TileNode<NetworkNodeImporter> { | public class TileImporter extends TileNode<NetworkNodeImporter> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileImporter> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileImporter> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |     public static final TileDataParameter<Integer, TileImporter> TYPE = IType.createParameter(); | ||||||
|  |  | ||||||
|     public TileImporter() { |     public TileImporter() { | ||||||
|         dataManager.addWatchedParameter(COMPARE); |         dataManager.addWatchedParameter(COMPARE); | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileInterface extends TileNode<NetworkNodeInterface> { | public class TileInterface extends TileNode<NetworkNodeInterface> { | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileInterface> COMPARE = IComparable.createParameter(); | ||||||
|  |  | ||||||
|     public TileInterface() { |     public TileInterface() { | ||||||
|         dataManager.addWatchedParameter(COMPARE); |         dataManager.addWatchedParameter(COMPARE); | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile; | package com.raoulvdberge.refinedstorage.tile; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeNetworkTransmitter; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeNetworkTransmitter; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.EnumFacing; | import net.minecraft.util.EnumFacing; | ||||||
| @@ -14,28 +13,13 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileNetworkTransmitter extends TileNode<NetworkNodeNetworkTransmitter> { | public class TileNetworkTransmitter extends TileNode<NetworkNodeNetworkTransmitter> { | ||||||
|     public static final TileDataParameter<Integer> DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileNetworkTransmitter>() { |     public static final TileDataParameter<Integer, TileNetworkTransmitter> DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { | ||||||
|         @Override |         NetworkNodeNetworkTransmitter transmitter = t.getNode(); | ||||||
|         public Integer getValue(TileNetworkTransmitter tile) { |  | ||||||
|             NetworkNodeNetworkTransmitter transmitter = tile.getNode(); |  | ||||||
|  |  | ||||||
|         return (transmitter.getReceiver() != null && transmitter.isSameDimension()) ? transmitter.getDistance() : -1; |         return (transmitter.getReceiver() != null && transmitter.isSameDimension()) ? transmitter.getDistance() : -1; | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> RECEIVER_DIMENSION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileNetworkTransmitter>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileNetworkTransmitter tile) { |  | ||||||
|             return tile.getNode().getReceiverDimension(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Boolean> RECEIVER_DIMENSION_SUPPORTED = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileNetworkTransmitter>() { |  | ||||||
|         @Override |  | ||||||
|         public Boolean getValue(TileNetworkTransmitter tile) { |  | ||||||
|             return tile.getNode().isDimensionSupported(); |  | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TileNetworkTransmitter> RECEIVER_DIMENSION = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getReceiverDimension()); | ||||||
|  |     public static final TileDataParameter<Boolean, TileNetworkTransmitter> RECEIVER_DIMENSION_SUPPORTED = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isDimensionSupported()); | ||||||
|  |  | ||||||
|     public TileNetworkTransmitter() { |     public TileNetworkTransmitter() { | ||||||
|         dataManager.addWatchedParameter(DISTANCE); |         dataManager.addWatchedParameter(DISTANCE); | ||||||
|   | |||||||
| @@ -20,14 +20,15 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public abstract class TileNode<N extends NetworkNode> extends TileBase implements INetworkNodeProxy<N>, IRedstoneConfigurable, IWrenchable { | public abstract class TileNode<N extends NetworkNode> extends TileBase implements INetworkNodeProxy<N>, IRedstoneConfigurable, IWrenchable { | ||||||
|     public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter(); |     public static final TileDataParameter<Integer, TileNode> REDSTONE_MODE = RedstoneMode.createParameter(); | ||||||
|  |  | ||||||
|  |     protected static final String NBT_ACTIVE = "Active"; | ||||||
|  |  | ||||||
|  |     // @todo: Remove in a later version | ||||||
|     private NBTTagCompound legacyTag; |     private NBTTagCompound legacyTag; | ||||||
|  |  | ||||||
|     private N clientNode; |     private N clientNode; | ||||||
|  |  | ||||||
|     protected static final String NBT_ACTIVE = "Active"; |  | ||||||
|  |  | ||||||
|     public TileNode() { |     public TileNode() { | ||||||
|         dataManager.addWatchedParameter(REDSTONE_MODE); |         dataManager.addWatchedParameter(REDSTONE_MODE); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -8,8 +8,6 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; | |||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter; | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeReader; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeReader; | ||||||
| import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter; | import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.client.Minecraft; | import net.minecraft.client.Minecraft; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -24,27 +22,19 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileReader extends TileNode<NetworkNodeReader> { | public class TileReader extends TileNode<NetworkNodeReader> { | ||||||
|     static <T extends TileNode> TileDataParameter<String> createChannelParameter() { |     static <T extends TileNode> TileDataParameter<String, T> createChannelParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.STRING, "", new ITileDataProducer<String, T>() { |         return new TileDataParameter<>(DataSerializers.STRING, "", t -> ((IGuiReaderWriter) t.getNode()).getChannel(), (t, v) -> { | ||||||
|             @Override |             ((IGuiReaderWriter) t.getNode()).setChannel(v); | ||||||
|             public String getValue(T tile) { |  | ||||||
|                 return ((IGuiReaderWriter) tile.getNode()).getChannel(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<String, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, String value) { |  | ||||||
|                 ((IGuiReaderWriter) tile.getNode()).setChannel(value); |  | ||||||
|  |  | ||||||
|                 tile.getNode().markDirty(); |             t.getNode().markDirty(); | ||||||
|             } |         }, p -> { | ||||||
|         }, parameter -> { |  | ||||||
|             if (Minecraft.getMinecraft().currentScreen instanceof GuiReaderWriter) { |             if (Minecraft.getMinecraft().currentScreen instanceof GuiReaderWriter) { | ||||||
|                 ((GuiReaderWriter) Minecraft.getMinecraft().currentScreen).updateSelection(parameter.getValue()); |                 ((GuiReaderWriter) Minecraft.getMinecraft().currentScreen).updateSelection(p); | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static final TileDataParameter<String> CHANNEL = createChannelParameter(); |     public static final TileDataParameter<String, TileReader> CHANNEL = createChannelParameter(); | ||||||
|  |  | ||||||
|     public TileReader() { |     public TileReader() { | ||||||
|         dataManager.addWatchedParameter(CHANNEL); |         dataManager.addWatchedParameter(CHANNEL); | ||||||
|   | |||||||
| @@ -2,7 +2,6 @@ package com.raoulvdberge.refinedstorage.tile; | |||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe; | import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRecipe; | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeSolderer; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeSolderer; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.nbt.NBTTagCompound; | import net.minecraft.nbt.NBTTagCompound; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -16,28 +15,13 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileSolderer extends TileNode<NetworkNodeSolderer> { | public class TileSolderer extends TileNode<NetworkNodeSolderer> { | ||||||
|     public static final TileDataParameter<Integer> DURATION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileSolderer>() { |     public static final TileDataParameter<Integer, TileSolderer> DURATION = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> { | ||||||
|         @Override |         ISoldererRecipe recipe = t.getNode().getRecipe(); | ||||||
|         public Integer getValue(TileSolderer tile) { |  | ||||||
|             ISoldererRecipe recipe = tile.getNode().getRecipe(); |  | ||||||
|  |  | ||||||
|         return recipe == null ? 0 : recipe.getDuration(); |         return recipe == null ? 0 : recipe.getDuration(); | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> PROGRESS = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileSolderer>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileSolderer tile) { |  | ||||||
|             return tile.getNode().getProgress(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Boolean> WORKING = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileSolderer>() { |  | ||||||
|         @Override |  | ||||||
|         public Boolean getValue(TileSolderer tile) { |  | ||||||
|             return tile.getNode().isWorking(); |  | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TileSolderer> PROGRESS = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getProgress()); | ||||||
|  |     public static final TileDataParameter<Boolean, TileSolderer> WORKING = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isWorking()); | ||||||
|  |  | ||||||
|     private boolean working; |     private boolean working; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,7 +3,6 @@ package com.raoulvdberge.refinedstorage.tile; | |||||||
| import com.raoulvdberge.refinedstorage.api.storage.AccessType; | import com.raoulvdberge.refinedstorage.api.storage.AccessType; | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorage; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeStorage; | ||||||
| import com.raoulvdberge.refinedstorage.tile.config.*; | import com.raoulvdberge.refinedstorage.tile.config.*; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -12,17 +11,12 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileStorage extends TileNode<NetworkNodeStorage> { | public class TileStorage extends TileNode<NetworkNodeStorage> { | ||||||
|     public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter(); |     public static final TileDataParameter<Integer, TileStorage> PRIORITY = IPrioritizable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |     public static final TileDataParameter<Integer, TileStorage> COMPARE = IComparable.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> MODE = IFilterable.createParameter(); |     public static final TileDataParameter<Integer, TileStorage> MODE = IFilterable.createParameter(); | ||||||
|     public static final TileDataParameter<AccessType> ACCESS_TYPE = IAccessType.createParameter(); |     public static final TileDataParameter<AccessType, TileStorage> ACCESS_TYPE = IAccessType.createParameter(); | ||||||
|     public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileStorage>() { |     public static final TileDataParameter<Integer, TileStorage> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getStorage().getStored()); | ||||||
|         @Override |     public static final TileDataParameter<Boolean, TileStorage> VOID_EXCESS = IExcessVoidable.createParameter(); | ||||||
|         public Integer getValue(TileStorage tile) { |  | ||||||
|             return tile.getNode().getStorage().getStored(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|     public static final TileDataParameter<Boolean> VOID_EXCESS = IExcessVoidable.createParameter(); |  | ||||||
|  |  | ||||||
|     public TileStorage() { |     public TileStorage() { | ||||||
|         dataManager.addWatchedParameter(PRIORITY); |         dataManager.addWatchedParameter(PRIORITY); | ||||||
|   | |||||||
| @@ -13,13 +13,13 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> { | public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> { | ||||||
|  |     public static final TileDataParameter<Integer, TileStorageMonitor> COMPARE = IComparable.createParameter(); | ||||||
|  |     public static final TileDataParameter<Integer, TileStorageMonitor> TYPE = IType.createParameter(); | ||||||
|  |  | ||||||
|     private static final String NBT_TYPE = "Type"; |     private static final String NBT_TYPE = "Type"; | ||||||
|     private static final String NBT_STACK = "Stack"; |     private static final String NBT_STACK = "Stack"; | ||||||
|     private static final String NBT_AMOUNT = "Amount"; |     private static final String NBT_AMOUNT = "Amount"; | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter(); |  | ||||||
|     public static final TileDataParameter<Integer> TYPE = IType.createParameter(); |  | ||||||
|  |  | ||||||
|     private int type; |     private int type; | ||||||
|     private int amount; |     private int amount; | ||||||
|     @Nullable |     @Nullable | ||||||
|   | |||||||
| @@ -1,7 +1,6 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile; | package com.raoulvdberge.refinedstorage.tile; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeWirelessTransmitter; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeWirelessTransmitter; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -10,12 +9,7 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileWirelessTransmitter extends TileNode<NetworkNodeWirelessTransmitter> { | public class TileWirelessTransmitter extends TileNode<NetworkNodeWirelessTransmitter> { | ||||||
|     public static final TileDataParameter<Integer> RANGE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileWirelessTransmitter>() { |     public static final TileDataParameter<Integer, TileWirelessTransmitter> RANGE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getRange()); | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileWirelessTransmitter tile) { |  | ||||||
|             return tile.getNode().getRange(); |  | ||||||
|         } |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     public TileWirelessTransmitter() { |     public TileWirelessTransmitter() { | ||||||
|         dataManager.addWatchedParameter(RANGE); |         dataManager.addWatchedParameter(RANGE); | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileWriter extends TileNode<NetworkNodeWriter> { | public class TileWriter extends TileNode<NetworkNodeWriter> { | ||||||
|     public static final TileDataParameter<String> CHANNEL = TileReader.createChannelParameter(); |     public static final TileDataParameter<String, TileWriter> CHANNEL = TileReader.createChannelParameter(); | ||||||
|  |  | ||||||
|     public TileWriter() { |     public TileWriter() { | ||||||
|         dataManager.addWatchedParameter(CHANNEL); |         dataManager.addWatchedParameter(CHANNEL); | ||||||
|   | |||||||
| @@ -2,25 +2,13 @@ package com.raoulvdberge.refinedstorage.tile.config; | |||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | ||||||
| import com.raoulvdberge.refinedstorage.api.storage.AccessType; | import com.raoulvdberge.refinedstorage.api.storage.AccessType; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; | import com.raoulvdberge.refinedstorage.tile.data.RSSerializers; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
|  |  | ||||||
| public interface IAccessType { | public interface IAccessType { | ||||||
|     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<AccessType> createParameter() { |     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<AccessType, T> createParameter() { | ||||||
|         return new TileDataParameter<>(RSSerializers.ACCESS_TYPE_SERIALIZER, AccessType.INSERT_EXTRACT, new ITileDataProducer<AccessType, T>() { |         return new TileDataParameter<>(RSSerializers.ACCESS_TYPE_SERIALIZER, AccessType.INSERT_EXTRACT, t -> ((IAccessType) t.getNode()).getAccessType(), (t, v) -> ((IAccessType) t.getNode()).setAccessType(v)); | ||||||
|             @Override |  | ||||||
|             public AccessType getValue(T tile) { |  | ||||||
|                 return ((IAccessType) tile.getNode()).getAccessType(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<AccessType, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, AccessType value) { |  | ||||||
|                 ((IAccessType) tile.getNode()).setAccessType(value); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     AccessType getAccessType(); |     AccessType getAccessType(); | ||||||
|   | |||||||
| @@ -1,25 +1,13 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.config; | package com.raoulvdberge.refinedstorage.tile.config; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
|  |  | ||||||
| public interface IComparable { | public interface IComparable { | ||||||
|     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer> createParameter() { |     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer, T> createParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() { |         return new TileDataParameter<>(DataSerializers.VARINT, 0, t -> ((IComparable) t.getNode()).getCompare(), (t, v) -> ((IComparable) t.getNode()).setCompare(v)); | ||||||
|             @Override |  | ||||||
|             public Integer getValue(T tile) { |  | ||||||
|                 return ((IComparable) tile.getNode()).getCompare(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<Integer, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, Integer value) { |  | ||||||
|                 ((IComparable) tile.getNode()).setCompare(value); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     int getCompare(); |     int getCompare(); | ||||||
|   | |||||||
| @@ -1,25 +1,13 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.config; | package com.raoulvdberge.refinedstorage.tile.config; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
|  |  | ||||||
| public interface IExcessVoidable { | public interface IExcessVoidable { | ||||||
|     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Boolean> createParameter() { |     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Boolean, T> createParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, T>() { |         return new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> ((IExcessVoidable) t.getNode()).getVoidExcess(), (t, v) -> ((IExcessVoidable) t.getNode()).setVoidExcess(v)); | ||||||
|             @Override |  | ||||||
|             public Boolean getValue(T tile) { |  | ||||||
|                 return ((IExcessVoidable) tile.getNode()).getVoidExcess(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<Boolean, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, Boolean value) { |  | ||||||
|                 ((IExcessVoidable) tile.getNode()).setVoidExcess(value); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     boolean getVoidExcess(); |     boolean getVoidExcess(); | ||||||
|   | |||||||
| @@ -5,8 +5,6 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | |||||||
| import com.raoulvdberge.refinedstorage.apiimpl.API; | import com.raoulvdberge.refinedstorage.apiimpl.API; | ||||||
| import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; | import com.raoulvdberge.refinedstorage.inventory.ItemHandlerFluid; | ||||||
| import com.raoulvdberge.refinedstorage.item.filter.ItemFilter; | import com.raoulvdberge.refinedstorage.item.filter.ItemFilter; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -18,18 +16,10 @@ public interface IFilterable { | |||||||
|     int WHITELIST = 0; |     int WHITELIST = 0; | ||||||
|     int BLACKLIST = 1; |     int BLACKLIST = 1; | ||||||
|  |  | ||||||
|     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer> createParameter() { |     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer, T> createParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() { |         return new TileDataParameter<>(DataSerializers.VARINT, 0, t -> ((IFilterable) t.getNode()).getMode(), (t, v) -> { | ||||||
|             @Override |             if (v == WHITELIST || v == BLACKLIST) { | ||||||
|             public Integer getValue(T tile) { |                 ((IFilterable) t.getNode()).setMode(v); | ||||||
|                 return ((IFilterable) tile.getNode()).getMode(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<Integer, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, Integer value) { |  | ||||||
|                 if (value == WHITELIST || value == BLACKLIST) { |  | ||||||
|                     ((IFilterable) tile.getNode()).setMode(value); |  | ||||||
|                 } |  | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -1,25 +1,13 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.config; | package com.raoulvdberge.refinedstorage.tile.config; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
|  |  | ||||||
| public interface IPrioritizable { | public interface IPrioritizable { | ||||||
|     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer> createParameter() { |     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer, T> createParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() { |         return new TileDataParameter<>(DataSerializers.VARINT, 0, t -> ((IPrioritizable) t.getNode()).getPriority(), (t, v) -> ((IPrioritizable) t.getNode()).setPriority(v)); | ||||||
|             @Override |  | ||||||
|             public Integer getValue(T tile) { |  | ||||||
|                 return ((IPrioritizable) tile.getNode()).getPriority(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<Integer, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, Integer value) { |  | ||||||
|                 ((IPrioritizable) tile.getNode()).setPriority(value); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     int getPriority(); |     int getPriority(); | ||||||
|   | |||||||
| @@ -2,8 +2,6 @@ package com.raoulvdberge.refinedstorage.tile.config; | |||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; | ||||||
| import com.raoulvdberge.refinedstorage.container.ContainerBase; | import com.raoulvdberge.refinedstorage.container.ContainerBase; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
| @@ -13,23 +11,15 @@ public interface IType { | |||||||
|     int ITEMS = 0; |     int ITEMS = 0; | ||||||
|     int FLUIDS = 1; |     int FLUIDS = 1; | ||||||
|  |  | ||||||
|     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer> createParameter() { |     static <T extends TileEntity & INetworkNodeProxy> TileDataParameter<Integer, T> createParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer<Integer, T>() { |         return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, t -> ((IType) t.getNode()).getType(), (t, v) -> { | ||||||
|             @Override |             if (v == 0 || v == 1) { | ||||||
|             public Integer getValue(T tile) { |                 ((IType) t.getNode()).setType(v); | ||||||
|                 return ((IType) tile.getNode()).getType(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<Integer, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, Integer value) { |  | ||||||
|                 if (value == 0 || value == 1) { |  | ||||||
|                     ((IType) tile.getNode()).setType(value); |  | ||||||
|  |  | ||||||
|                     tile.getWorld().playerEntities.stream() |                 t.getWorld().playerEntities.stream() | ||||||
|                         .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos())) |                     .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(t.getPos())) | ||||||
|                     .forEach(p -> p.openContainer.detectAndSendChanges()); |                     .forEach(p -> p.openContainer.detectAndSendChanges()); | ||||||
|             } |             } | ||||||
|             } |  | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.config; | package com.raoulvdberge.refinedstorage.tile.config; | ||||||
|  |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.nbt.NBTTagCompound; | import net.minecraft.nbt.NBTTagCompound; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -43,17 +41,7 @@ public enum RedstoneMode { | |||||||
|         return id < 0 || id >= values().length ? IGNORE : values()[id]; |         return id < 0 || id >= values().length ? IGNORE : values()[id]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static <T extends TileEntity> TileDataParameter<Integer> createParameter() { |     public static <T extends TileEntity & IRedstoneConfigurable> TileDataParameter<Integer, T> createParameter() { | ||||||
|         return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, T>() { |         return new TileDataParameter<>(DataSerializers.VARINT, IGNORE.ordinal(), t -> t.getRedstoneMode().ordinal(), (t, v) -> t.setRedstoneMode(RedstoneMode.getById(v))); | ||||||
|             @Override |  | ||||||
|             public Integer getValue(T tile) { |  | ||||||
|                 return ((IRedstoneConfigurable) tile).getRedstoneMode().ordinal(); |  | ||||||
|             } |  | ||||||
|         }, new ITileDataConsumer<Integer, T>() { |  | ||||||
|             @Override |  | ||||||
|             public void setValue(T tile, Integer value) { |  | ||||||
|                 ((IRedstoneConfigurable) tile).setRedstoneMode(RedstoneMode.getById(value)); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ public interface ICraftingMonitor { | |||||||
|  |  | ||||||
|     void onCancelled(EntityPlayerMP player, int id); |     void onCancelled(EntityPlayerMP player, int id); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getRedstoneModeParameter(); |     TileDataParameter<Integer, ?> getRedstoneModeParameter(); | ||||||
|  |  | ||||||
|     @Nullable |     @Nullable | ||||||
|     BlockPos getNetworkPosition(); |     BlockPos getNetworkPosition(); | ||||||
|   | |||||||
| @@ -3,8 +3,6 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; | |||||||
| import com.raoulvdberge.refinedstorage.api.network.INetwork; | import com.raoulvdberge.refinedstorage.api.network.INetwork; | ||||||
| import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor; | import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor; | ||||||
| import com.raoulvdberge.refinedstorage.tile.TileNode; | import com.raoulvdberge.refinedstorage.tile.TileNode; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| import net.minecraft.util.math.BlockPos; | import net.minecraft.util.math.BlockPos; | ||||||
| @@ -13,23 +11,15 @@ import net.minecraft.world.World; | |||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
|  |  | ||||||
| public class TileCraftingMonitor extends TileNode<NetworkNodeCraftingMonitor> { | public class TileCraftingMonitor extends TileNode<NetworkNodeCraftingMonitor> { | ||||||
|     public static final TileDataParameter<Boolean> VIEW_AUTOMATED = new TileDataParameter<>(DataSerializers.BOOLEAN, true, new ITileDataProducer<Boolean, TileCraftingMonitor>() { |     public static final TileDataParameter<Boolean, TileCraftingMonitor> VIEW_AUTOMATED = new TileDataParameter<>(DataSerializers.BOOLEAN, true, t -> t.getNode().canViewAutomated(), (t, v) -> { | ||||||
|         @Override |         t.getNode().setViewAutomated(v); | ||||||
|         public Boolean getValue(TileCraftingMonitor tile) { |         t.getNode().markDirty(); | ||||||
|             return tile.getNode().canViewAutomated(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileCraftingMonitor>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileCraftingMonitor tile, Boolean value) { |  | ||||||
|             tile.getNode().setViewAutomated(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|  |  | ||||||
|             INetwork network = tile.getNode().getNetwork(); |         INetwork network = t.getNode().getNetwork(); | ||||||
|  |  | ||||||
|         if (network != null) { |         if (network != null) { | ||||||
|             network.sendCraftingMonitorUpdate(); |             network.sendCraftingMonitorUpdate(); | ||||||
|         } |         } | ||||||
|         } |  | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public TileCraftingMonitor() { |     public TileCraftingMonitor() { | ||||||
|   | |||||||
| @@ -74,7 +74,7 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeParameter() { |     public TileDataParameter<Integer, ?> getRedstoneModeParameter() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,7 +0,0 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.data; |  | ||||||
|  |  | ||||||
| import net.minecraft.tileentity.TileEntity; |  | ||||||
|  |  | ||||||
| public interface ITileDataConsumer<T, E extends TileEntity> { |  | ||||||
|     void setValue(E tile, T value); |  | ||||||
| } |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.data; |  | ||||||
|  |  | ||||||
| public interface ITileDataListener<T> { |  | ||||||
|     void onChanged(TileDataParameter<T> parameter); |  | ||||||
| } |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| package com.raoulvdberge.refinedstorage.tile.data; |  | ||||||
|  |  | ||||||
| import net.minecraft.tileentity.TileEntity; |  | ||||||
|  |  | ||||||
| public interface ITileDataProducer<T, E extends TileEntity> { |  | ||||||
|     T getValue(E tile); |  | ||||||
| } |  | ||||||
| @@ -17,26 +17,11 @@ public class TileDataManager { | |||||||
|     private static Map<Integer, TileDataParameter> REGISTRY = new HashMap<>(); |     private static Map<Integer, TileDataParameter> REGISTRY = new HashMap<>(); | ||||||
|  |  | ||||||
|     private List<TileDataParameter> parameters = new ArrayList<>(); |     private List<TileDataParameter> parameters = new ArrayList<>(); | ||||||
|  |  | ||||||
|     private List<TileDataParameter> watchedParameters = new ArrayList<>(); |     private List<TileDataParameter> watchedParameters = new ArrayList<>(); | ||||||
|     private List<Object> watchedParametersCache = new ArrayList<>(); |     private List<Object> watchedParametersCache = new ArrayList<>(); | ||||||
|  |  | ||||||
|     private List<EntityPlayer> watchers = new ArrayList<>(); |     private List<EntityPlayer> watchers = new ArrayList<>(); | ||||||
|  |  | ||||||
|     public static void registerParameter(TileDataParameter<?> parameter) { |  | ||||||
|         parameter.setId(LAST_ID); |  | ||||||
|  |  | ||||||
|         REGISTRY.put(LAST_ID++, parameter); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static TileDataParameter<?> getParameter(int id) { |  | ||||||
|         return REGISTRY.get(id); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static <T> void setParameter(TileDataParameter<T> parameter, T value) { |  | ||||||
|         RS.INSTANCE.network.sendToServer(new MessageTileDataParameterUpdate(parameter, value)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private TileEntity tile; |     private TileEntity tile; | ||||||
|  |  | ||||||
|     public TileDataManager(TileEntity tile) { |     public TileDataManager(TileEntity tile) { | ||||||
| @@ -47,7 +32,7 @@ public class TileDataManager { | |||||||
|         return watchers; |         return watchers; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void addParameter(TileDataParameter<?> parameter) { |     public void addParameter(TileDataParameter parameter) { | ||||||
|         parameters.add(parameter); |         parameters.add(parameter); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -55,7 +40,7 @@ public class TileDataManager { | |||||||
|         return parameters; |         return parameters; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void addWatchedParameter(TileDataParameter<?> parameter) { |     public void addWatchedParameter(TileDataParameter parameter) { | ||||||
|         addParameter(parameter); |         addParameter(parameter); | ||||||
|  |  | ||||||
|         watchedParameters.add(parameter); |         watchedParameters.add(parameter); | ||||||
| @@ -66,7 +51,7 @@ public class TileDataManager { | |||||||
|         for (int i = 0; i < watchedParameters.size(); ++i) { |         for (int i = 0; i < watchedParameters.size(); ++i) { | ||||||
|             TileDataParameter parameter = watchedParameters.get(i); |             TileDataParameter parameter = watchedParameters.get(i); | ||||||
|  |  | ||||||
|             Object real = parameter.getValueProducer().getValue(tile); |             Object real = parameter.getValueProducer().apply(tile); | ||||||
|             Object cached = watchedParametersCache.get(i); |             Object cached = watchedParametersCache.get(i); | ||||||
|  |  | ||||||
|             if (!real.equals(cached)) { |             if (!real.equals(cached)) { | ||||||
| @@ -81,11 +66,25 @@ public class TileDataManager { | |||||||
|         parameters.forEach(p -> sendParameter(player, p)); |         parameters.forEach(p -> sendParameter(player, p)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void sendParameterToWatchers(TileDataParameter<?> parameter) { |     public void sendParameterToWatchers(TileDataParameter parameter) { | ||||||
|         watchers.forEach(p -> sendParameter((EntityPlayerMP) p, parameter)); |         watchers.forEach(p -> sendParameter((EntityPlayerMP) p, parameter)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void sendParameter(EntityPlayerMP player, TileDataParameter<?> parameter) { |     public void sendParameter(EntityPlayerMP player, TileDataParameter parameter) { | ||||||
|         RS.INSTANCE.network.sendTo(new MessageTileDataParameter(tile, parameter), player); |         RS.INSTANCE.network.sendTo(new MessageTileDataParameter(tile, parameter), player); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public static void registerParameter(TileDataParameter parameter) { | ||||||
|  |         parameter.setId(LAST_ID); | ||||||
|  |  | ||||||
|  |         REGISTRY.put(LAST_ID++, parameter); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static TileDataParameter getParameter(int id) { | ||||||
|  |         return REGISTRY.get(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static void setParameter(TileDataParameter parameter, Object value) { | ||||||
|  |         RS.INSTANCE.network.sendToServer(new MessageTileDataParameterUpdate(parameter, value)); | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,23 +3,30 @@ package com.raoulvdberge.refinedstorage.tile.data; | |||||||
| import net.minecraft.network.datasync.DataSerializer; | import net.minecraft.network.datasync.DataSerializer; | ||||||
| import net.minecraft.tileentity.TileEntity; | import net.minecraft.tileentity.TileEntity; | ||||||
|  |  | ||||||
| public class TileDataParameter<T> { | import javax.annotation.Nullable; | ||||||
|  | import java.util.function.BiConsumer; | ||||||
|  | import java.util.function.Consumer; | ||||||
|  | import java.util.function.Function; | ||||||
|  |  | ||||||
|  | public class TileDataParameter<T, E extends TileEntity> { | ||||||
|     private int id; |     private int id; | ||||||
|     private DataSerializer<T> serializer; |     private DataSerializer<T> serializer; | ||||||
|     private ITileDataProducer<T, ? extends TileEntity> valueProducer; |     private Function<E, T> valueProducer; | ||||||
|     private ITileDataConsumer<T, ? extends TileEntity> valueConsumer; |     @Nullable | ||||||
|     private ITileDataListener<T> listener; |     private BiConsumer<E, T> valueConsumer; | ||||||
|  |     @Nullable | ||||||
|  |     private Consumer<T> listener; | ||||||
|     private T value; |     private T value; | ||||||
|  |  | ||||||
|     public TileDataParameter(DataSerializer<T> serializer, T defaultValue, ITileDataProducer<T, ? extends TileEntity> producer) { |     public TileDataParameter(DataSerializer<T> serializer, T defaultValue, Function<E, T> producer) { | ||||||
|         this(serializer, defaultValue, producer, null); |         this(serializer, defaultValue, producer, null); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public TileDataParameter(DataSerializer<T> serializer, T defaultValue, ITileDataProducer<T, ? extends TileEntity> producer, ITileDataConsumer<T, ? extends TileEntity> consumer) { |     public TileDataParameter(DataSerializer<T> serializer, T defaultValue, Function<E, T> producer, @Nullable BiConsumer<E, T> consumer) { | ||||||
|         this(serializer, defaultValue, producer, consumer, null); |         this(serializer, defaultValue, producer, consumer, null); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public TileDataParameter(DataSerializer<T> serializer, T defaultValue, ITileDataProducer<T, ? extends TileEntity> producer, ITileDataConsumer<T, ? extends TileEntity> consumer, ITileDataListener<T> listener) { |     public TileDataParameter(DataSerializer<T> serializer, T defaultValue, Function<E, T> producer, @Nullable BiConsumer<E, T> consumer, @Nullable Consumer<T> listener) { | ||||||
|         this.value = defaultValue; |         this.value = defaultValue; | ||||||
|         this.serializer = serializer; |         this.serializer = serializer; | ||||||
|         this.valueProducer = producer; |         this.valueProducer = producer; | ||||||
| @@ -39,11 +46,12 @@ public class TileDataParameter<T> { | |||||||
|         return serializer; |         return serializer; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ITileDataProducer<T, ? extends TileEntity> getValueProducer() { |     public Function<E, T> getValueProducer() { | ||||||
|         return valueProducer; |         return valueProducer; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ITileDataConsumer<T, ? extends TileEntity> getValueConsumer() { |     @Nullable | ||||||
|  |     public BiConsumer<E, T> getValueConsumer() { | ||||||
|         return valueConsumer; |         return valueConsumer; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -51,7 +59,7 @@ public class TileDataParameter<T> { | |||||||
|         this.value = value; |         this.value = value; | ||||||
|  |  | ||||||
|         if (listener != null) { |         if (listener != null) { | ||||||
|             listener.onChanged(this); |             listener.accept(value); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -64,7 +64,7 @@ public interface IGrid { | |||||||
|  |  | ||||||
|     ItemHandlerBase getFilter(); |     ItemHandlerBase getFilter(); | ||||||
|  |  | ||||||
|     TileDataParameter<Integer> getRedstoneModeConfig(); |     TileDataParameter<Integer, ?> getRedstoneModeConfig(); | ||||||
|  |  | ||||||
|     InventoryCrafting getCraftingMatrix(); |     InventoryCrafting getCraftingMatrix(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -5,8 +5,6 @@ import com.raoulvdberge.refinedstorage.block.GridType; | |||||||
| import com.raoulvdberge.refinedstorage.container.ContainerGrid; | import com.raoulvdberge.refinedstorage.container.ContainerGrid; | ||||||
| import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; | import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; | ||||||
| import com.raoulvdberge.refinedstorage.tile.TileNode; | import com.raoulvdberge.refinedstorage.tile.TileNode; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import net.minecraft.client.Minecraft; | import net.minecraft.client.Minecraft; | ||||||
| import net.minecraft.network.datasync.DataSerializers; | import net.minecraft.network.datasync.DataSerializers; | ||||||
| @@ -20,163 +18,83 @@ import javax.annotation.Nonnull; | |||||||
| import javax.annotation.Nullable; | import javax.annotation.Nullable; | ||||||
|  |  | ||||||
| public class TileGrid extends TileNode<NetworkNodeGrid> { | public class TileGrid extends TileNode<NetworkNodeGrid> { | ||||||
|     public static final TileDataParameter<Integer> VIEW_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() { |     public static final TileDataParameter<Integer, TileGrid> VIEW_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getViewType(), (t, v) -> { | ||||||
|         @Override |         if (NetworkNodeGrid.isValidViewType(v)) { | ||||||
|         public Integer getValue(TileGrid tile) { |             t.getNode().setViewType(v); | ||||||
|             return tile.getNode().getViewType(); |             t.getNode().markDirty(); | ||||||
|         } |         } | ||||||
|     }, new ITileDataConsumer<Integer, TileGrid>() { |     }, p -> GuiGrid.markForSorting()); | ||||||
|         @Override |     public static final TileDataParameter<Integer, TileGrid> SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getSortingDirection(), (t, v) -> { | ||||||
|         public void setValue(TileGrid tile, Integer value) { |         if (NetworkNodeGrid.isValidSortingDirection(v)) { | ||||||
|             if (NetworkNodeGrid.isValidViewType(value)) { |             t.getNode().setSortingDirection(v); | ||||||
|                 tile.getNode().setViewType(value); |             t.getNode().markDirty(); | ||||||
|                 tile.getNode().markDirty(); |  | ||||||
|         } |         } | ||||||
|  |     }, p -> GuiGrid.markForSorting()); | ||||||
|  |     public static final TileDataParameter<Integer, TileGrid> SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getSortingType(), (t, v) -> { | ||||||
|  |         if (NetworkNodeGrid.isValidSortingType(v)) { | ||||||
|  |             t.getNode().setSortingType(v); | ||||||
|  |             t.getNode().markDirty(); | ||||||
|         } |         } | ||||||
|     }, parameter -> GuiGrid.markForSorting()); |     }, p -> GuiGrid.markForSorting()); | ||||||
|  |     public static final TileDataParameter<Integer, TileGrid> SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getSearchBoxMode(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() { |         if (NetworkNodeGrid.isValidSearchBoxMode(v)) { | ||||||
|         @Override |             t.getNode().setSearchBoxMode(v); | ||||||
|         public Integer getValue(TileGrid tile) { |             t.getNode().markDirty(); | ||||||
|             return tile.getNode().getSortingDirection(); |  | ||||||
|         } |         } | ||||||
|     }, new ITileDataConsumer<Integer, TileGrid>() { |     }, p -> { | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSortingDirection(value)) { |  | ||||||
|                 tile.getNode().setSortingDirection(value); |  | ||||||
|                 tile.getNode().markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> GuiGrid.markForSorting()); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileGrid tile) { |  | ||||||
|             return tile.getNode().getSortingType(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSortingType(value)) { |  | ||||||
|                 tile.getNode().setSortingType(value); |  | ||||||
|                 tile.getNode().markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> GuiGrid.markForSorting()); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TileGrid tile) { |  | ||||||
|             return tile.getNode().getSearchBoxMode(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSearchBoxMode(value)) { |  | ||||||
|                 tile.getNode().setSearchBoxMode(value); |  | ||||||
|                 tile.getNode().markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { | ||||||
|             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(parameter.getValue()); |             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(p); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TileGrid> SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getSize(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() { |         if (NetworkNodeGrid.isValidSize(v)) { | ||||||
|         @Override |             t.getNode().setSize(v); | ||||||
|         public Integer getValue(TileGrid tile) { |             t.getNode().markDirty(); | ||||||
|             return tile.getNode().getSize(); |  | ||||||
|         } |         } | ||||||
|     }, new ITileDataConsumer<Integer, TileGrid>() { |     }, p -> { | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSize(value)) { |  | ||||||
|                 tile.getNode().setSize(value); |  | ||||||
|                 tile.getNode().markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen != null) { |         if (Minecraft.getMinecraft().currentScreen != null) { | ||||||
|             Minecraft.getMinecraft().currentScreen.initGui(); |             Minecraft.getMinecraft().currentScreen.initGui(); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TileGrid> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getTabSelected(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileGrid>() { |         t.getNode().setTabSelected(v == t.getNode().getTabSelected() ? -1 : v); | ||||||
|         @Override |         t.getNode().markDirty(); | ||||||
|         public Integer getValue(TileGrid tile) { |     }, p -> { | ||||||
|             return tile.getNode().getTabSelected(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Integer value) { |  | ||||||
|             tile.getNode().setTabSelected(value == tile.getNode().getTabSelected() ? -1 : value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { | ||||||
|             ((GuiGrid) Minecraft.getMinecraft().currentScreen).markForSorting(); |             ((GuiGrid) Minecraft.getMinecraft().currentScreen).markForSorting(); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Boolean, TileGrid> OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isOredictPattern(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Boolean> OREDICT_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileGrid>() { |         t.getNode().setOredictPattern(v); | ||||||
|         @Override |         t.getNode().markDirty(); | ||||||
|         public Boolean getValue(TileGrid tile) { |     }, p -> { | ||||||
|             return tile.getNode().isOredictPattern(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Boolean value) { |  | ||||||
|             tile.getNode().setOredictPattern(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { | ||||||
|             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateOredictPattern(parameter.getValue()); |             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateOredictPattern(p); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Boolean, TileGrid> PROCESSING_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isProcessingPattern(), (t, v) -> { | ||||||
|  |         t.getNode().setProcessingPattern(v); | ||||||
|  |         t.getNode().markDirty(); | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Boolean> PROCESSING_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileGrid>() { |         t.getNode().onPatternMatrixClear(); | ||||||
|         @Override |  | ||||||
|         public Boolean getValue(TileGrid tile) { |  | ||||||
|             return tile.getNode().isProcessingPattern(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Boolean value) { |  | ||||||
|             tile.getNode().setProcessingPattern(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|  |  | ||||||
|             tile.getNode().onPatternMatrixClear(); |         t.world.getMinecraftServer().getPlayerList().getPlayers().stream() | ||||||
|  |             .filter(player -> player.openContainer instanceof ContainerGrid && ((ContainerGrid) player.openContainer).getTile() != null && ((ContainerGrid) player.openContainer).getTile().getPos().equals(t.getPos())) | ||||||
|             tile.world.getMinecraftServer().getPlayerList().getPlayers().stream() |  | ||||||
|                 .filter(player -> player.openContainer instanceof ContainerGrid && ((ContainerGrid) player.openContainer).getTile() != null && ((ContainerGrid) player.openContainer).getTile().getPos().equals(tile.getPos())) |  | ||||||
|             .forEach(player -> { |             .forEach(player -> { | ||||||
|                 ((ContainerGrid) player.openContainer).initSlots(); |                 ((ContainerGrid) player.openContainer).initSlots(); | ||||||
|                 ((ContainerGrid) player.openContainer).sendAllSlots(); |                 ((ContainerGrid) player.openContainer).sendAllSlots(); | ||||||
|             }); |             }); | ||||||
|         } |     }, p -> { | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen != null) { |         if (Minecraft.getMinecraft().currentScreen != null) { | ||||||
|             Minecraft.getMinecraft().currentScreen.initGui(); |             Minecraft.getMinecraft().currentScreen.initGui(); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Boolean, TileGrid> BLOCKING_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().isBlockingPattern(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Boolean> BLOCKING_PATTERN = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileGrid>() { |         t.getNode().setBlockingPattern(v); | ||||||
|         @Override |         t.getNode().markDirty(); | ||||||
|         public Boolean getValue(TileGrid tile) { |     }, p -> { | ||||||
|             return tile.getNode().isBlockingPattern(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Boolean, TileGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TileGrid tile, Boolean value) { |  | ||||||
|             tile.getNode().setBlockingPattern(value); |  | ||||||
|             tile.getNode().markDirty(); |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { | ||||||
|             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateBlockingPattern(parameter.getValue()); |             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateBlockingPattern(p); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -169,7 +169,7 @@ public class WirelessFluidGrid implements IGrid { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeConfig() { |     public TileDataParameter<Integer, ?> getRedstoneModeConfig() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -203,7 +203,7 @@ public class WirelessGrid implements IGrid { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeConfig() { |     public TileDataParameter<Integer, ?> getRedstoneModeConfig() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -305,7 +305,7 @@ public class PortableGrid implements IGrid, IPortableGrid { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeConfig() { |     public TileDataParameter<Integer, ?> getRedstoneModeConfig() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -29,8 +29,6 @@ import com.raoulvdberge.refinedstorage.item.filter.FilterTab; | |||||||
| import com.raoulvdberge.refinedstorage.tile.TileBase; | import com.raoulvdberge.refinedstorage.tile.TileBase; | ||||||
| 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.ITileDataConsumer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer; |  | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; | import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; | ||||||
| import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; | ||||||
| import com.raoulvdberge.refinedstorage.tile.grid.IGrid; | import com.raoulvdberge.refinedstorage.tile.grid.IGrid; | ||||||
| @@ -54,100 +52,49 @@ import java.util.ArrayList; | |||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, IRedstoneConfigurable { | public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, IRedstoneConfigurable { | ||||||
|     public static final TileDataParameter<Integer> ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { |     public static final TileDataParameter<Integer, TilePortableGrid> REDSTONE_MODE = RedstoneMode.createParameter(); | ||||||
|         @Override |     public static final TileDataParameter<Integer, TilePortableGrid> ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.energyStorage.getEnergyStored()); | ||||||
|         public Integer getValue(TilePortableGrid tile) { |     public static final TileDataParameter<Integer, TilePortableGrid> SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getSortingDirection(), (t, v) -> { | ||||||
|             return tile.energyStorage.getEnergyStored(); |         if (NetworkNodeGrid.isValidSortingDirection(v)) { | ||||||
|  |             t.setSortingDirection(v); | ||||||
|  |             t.markDirty(); | ||||||
|         } |         } | ||||||
|     }); |     }, p -> GuiGrid.markForSorting()); | ||||||
|  |     public static final TileDataParameter<Integer, TilePortableGrid> SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getSortingType(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { |         if (NetworkNodeGrid.isValidSortingType(v)) { | ||||||
|         @Override |             t.setSortingType(v); | ||||||
|         public Integer getValue(TilePortableGrid tile) { |             t.markDirty(); | ||||||
|             return tile.getSortingDirection(); |  | ||||||
|         } |         } | ||||||
|     }, new ITileDataConsumer<Integer, TilePortableGrid>() { |     }, p -> GuiGrid.markForSorting()); | ||||||
|         @Override |     public static final TileDataParameter<Integer, TilePortableGrid> SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getSearchBoxMode(), (t, v) -> { | ||||||
|         public void setValue(TilePortableGrid tile, Integer value) { |         if (NetworkNodeGrid.isValidSearchBoxMode(v)) { | ||||||
|             if (NetworkNodeGrid.isValidSortingDirection(value)) { |             t.setSearchBoxMode(v); | ||||||
|                 tile.setSortingDirection(value); |             t.markDirty(); | ||||||
|                 tile.markDirty(); |  | ||||||
|         } |         } | ||||||
|         } |     }, p -> { | ||||||
|     }, parameter -> GuiGrid.markForSorting()); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TilePortableGrid tile) { |  | ||||||
|             return tile.getSortingType(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TilePortableGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TilePortableGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSortingType(value)) { |  | ||||||
|                 tile.setSortingType(value); |  | ||||||
|                 tile.markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> GuiGrid.markForSorting()); |  | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public Integer getValue(TilePortableGrid tile) { |  | ||||||
|             return tile.getSearchBoxMode(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TilePortableGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TilePortableGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSearchBoxMode(value)) { |  | ||||||
|                 tile.setSearchBoxMode(value); |  | ||||||
|                 tile.markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { | ||||||
|             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(parameter.getValue()); |             ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(p); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TilePortableGrid> SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getSize(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { |         if (NetworkNodeGrid.isValidSize(v)) { | ||||||
|         @Override |             t.setSize(v); | ||||||
|         public Integer getValue(TilePortableGrid tile) { |             t.markDirty(); | ||||||
|             return tile.getSize(); |  | ||||||
|         } |         } | ||||||
|     }, new ITileDataConsumer<Integer, TilePortableGrid>() { |     }, p -> { | ||||||
|         @Override |  | ||||||
|         public void setValue(TilePortableGrid tile, Integer value) { |  | ||||||
|             if (NetworkNodeGrid.isValidSize(value)) { |  | ||||||
|                 tile.setSize(value); |  | ||||||
|                 tile.markDirty(); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen != null) { |         if (Minecraft.getMinecraft().currentScreen != null) { | ||||||
|             Minecraft.getMinecraft().currentScreen.initGui(); |             Minecraft.getMinecraft().currentScreen.initGui(); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |     public static final TileDataParameter<Integer, TilePortableGrid> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getTabSelected(), (t, v) -> { | ||||||
|     public static final TileDataParameter<Integer> TAB_SELECTED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TilePortableGrid>() { |         t.setTabSelected(v == t.getTabSelected() ? -1 : v); | ||||||
|         @Override |         t.markDirty(); | ||||||
|         public Integer getValue(TilePortableGrid tile) { |     }, p -> { | ||||||
|             return tile.getTabSelected(); |  | ||||||
|         } |  | ||||||
|     }, new ITileDataConsumer<Integer, TilePortableGrid>() { |  | ||||||
|         @Override |  | ||||||
|         public void setValue(TilePortableGrid tile, Integer value) { |  | ||||||
|             tile.setTabSelected(value == tile.getTabSelected() ? -1 : value); |  | ||||||
|             tile.markDirty(); |  | ||||||
|         } |  | ||||||
|     }, parameter -> { |  | ||||||
|         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { |         if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { | ||||||
|             ((GuiGrid) Minecraft.getMinecraft().currentScreen).markForSorting(); |             ((GuiGrid) Minecraft.getMinecraft().currentScreen).markForSorting(); | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
|  |  | ||||||
|     public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter(); |  | ||||||
|  |  | ||||||
|     private static final String NBT_ENERGY = "Energy"; |     private static final String NBT_ENERGY = "Energy"; | ||||||
|     private static final String NBT_DISK_STATE = "DiskState"; |     private static final String NBT_DISK_STATE = "DiskState"; | ||||||
|     private static final String NBT_CONNECTED = "Connected"; |     private static final String NBT_CONNECTED = "Connected"; | ||||||
| @@ -225,13 +172,13 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, | |||||||
|     private boolean connected; |     private boolean connected; | ||||||
|  |  | ||||||
|     public TilePortableGrid() { |     public TilePortableGrid() { | ||||||
|  |         dataManager.addWatchedParameter(REDSTONE_MODE); | ||||||
|         dataManager.addWatchedParameter(ENERGY_STORED); |         dataManager.addWatchedParameter(ENERGY_STORED); | ||||||
|         dataManager.addWatchedParameter(SORTING_DIRECTION); |         dataManager.addWatchedParameter(SORTING_DIRECTION); | ||||||
|         dataManager.addWatchedParameter(SORTING_TYPE); |         dataManager.addWatchedParameter(SORTING_TYPE); | ||||||
|         dataManager.addWatchedParameter(SEARCH_BOX_MODE); |         dataManager.addWatchedParameter(SEARCH_BOX_MODE); | ||||||
|         dataManager.addWatchedParameter(SIZE); |         dataManager.addWatchedParameter(SIZE); | ||||||
|         dataManager.addWatchedParameter(TAB_SELECTED); |         dataManager.addWatchedParameter(TAB_SELECTED); | ||||||
|         dataManager.addWatchedParameter(REDSTONE_MODE); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public PortableGridDiskState getDiskState() { |     public PortableGridDiskState getDiskState() { | ||||||
| @@ -420,7 +367,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public TileDataParameter<Integer> getRedstoneModeConfig() { |     public TileDataParameter<Integer, TilePortableGrid> getRedstoneModeConfig() { | ||||||
|         return REDSTONE_MODE; |         return REDSTONE_MODE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Raoul Van den Berge
					Raoul Van den Berge