Compare commits
7 Commits
develop
...
support/1.
Author | SHA1 | Date | |
---|---|---|---|
eb81b15f16 | |||
5aa9627328 | |||
![]() |
2ed9fc1f7b | ||
![]() |
7fd7eac594 | ||
![]() |
3248514a65 | ||
![]() |
98ed5b89c2 | ||
![]() |
e72f1b64bc |
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
### 1.6.16
|
### 1.6.16
|
||||||
- Updated Russian translation (Bytegm)
|
- Updated Russian translation (Bytegm)
|
||||||
|
- Fixed erroring controller tile entity (ian-rampage)
|
||||||
|
- Fixed Inventory Tweaks sorting not respecting locked slots (Landmaster)
|
||||||
|
- Fixed OpenComputers driver voiding excess fluids (BlueAgent)
|
||||||
|
- Fixed being able to move wireless items in inventory (raoulvdberge, Dabombber)
|
||||||
|
|
||||||
### 1.6.15
|
### 1.6.15
|
||||||
- Fixed recipes with more than 1 bucket of fluid not transferring from JEI (Darkere)
|
- Fixed recipes with more than 1 bucket of fluid not transferring from JEI (Darkere)
|
||||||
|
@@ -231,6 +231,11 @@ public interface IGrid {
|
|||||||
*/
|
*/
|
||||||
boolean isActive();
|
boolean isActive();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the slot id where this grid is located, if applicable, otherwise -1
|
||||||
|
*/
|
||||||
|
int getSlotId();
|
||||||
|
|
||||||
static boolean isValidViewType(int type) {
|
static boolean isValidViewType(int type) {
|
||||||
return type == VIEW_TYPE_NORMAL ||
|
return type == VIEW_TYPE_NORMAL ||
|
||||||
type == VIEW_TYPE_CRAFTABLES ||
|
type == VIEW_TYPE_CRAFTABLES ||
|
||||||
|
@@ -17,10 +17,11 @@ public interface IGridFactory {
|
|||||||
*
|
*
|
||||||
* @param player the player
|
* @param player the player
|
||||||
* @param stack the stack
|
* @param stack the stack
|
||||||
|
* @param slotId the slot id, if applicable, otherwise -1
|
||||||
* @return the grid, or null if a problem occurred
|
* @return the grid, or null if a problem occurred
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
IGrid createFromStack(EntityPlayer player, ItemStack stack);
|
IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a grid from a block. Used when {@link #getType()} is BLOCK.
|
* Creates a grid from a block. Used when {@link #getType()} is BLOCK.
|
||||||
|
@@ -41,8 +41,9 @@ public interface IGridManager {
|
|||||||
* @param id the grid factory id as returned from {@link #add(IGridFactory)}
|
* @param id the grid factory id as returned from {@link #add(IGridFactory)}
|
||||||
* @param player the player
|
* @param player the player
|
||||||
* @param stack the stack
|
* @param stack the stack
|
||||||
|
* @param slotId the slot id, if applicable, otherwise -1
|
||||||
*/
|
*/
|
||||||
void openGrid(int id, EntityPlayerMP player, ItemStack stack);
|
void openGrid(int id, EntityPlayerMP player, ItemStack stack, int slotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a grid.
|
* Creates a grid.
|
||||||
@@ -51,8 +52,9 @@ public interface IGridManager {
|
|||||||
* @param player the player
|
* @param player the player
|
||||||
* @param stack the stack, if there is one
|
* @param stack the stack, if there is one
|
||||||
* @param pos the block position, if there is one
|
* @param pos the block position, if there is one
|
||||||
|
* @param slotId the slot id, if applicable, otherwise -1
|
||||||
* @return a grid, or null if an error has occurred
|
* @return a grid, or null if an error has occurred
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
Pair<IGrid, TileEntity> createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos);
|
Pair<IGrid, TileEntity> createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId);
|
||||||
}
|
}
|
||||||
|
@@ -15,8 +15,9 @@ public interface INetworkItemHandler {
|
|||||||
*
|
*
|
||||||
* @param player the player that opened the network item
|
* @param player the player that opened the network item
|
||||||
* @param stack the stack that has been opened
|
* @param stack the stack that has been opened
|
||||||
|
* @param slotId the slot id, if applicable, otherwise -1
|
||||||
*/
|
*/
|
||||||
void open(EntityPlayer player, ItemStack stack);
|
void open(EntityPlayer player, ItemStack stack, int slotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the player closes a network item.
|
* Called when the player closes a network item.
|
||||||
|
@@ -15,8 +15,9 @@ public interface INetworkItemProvider {
|
|||||||
* @param handler the network item handler
|
* @param handler the network item handler
|
||||||
* @param player the player
|
* @param player the player
|
||||||
* @param stack the stack
|
* @param stack the stack
|
||||||
|
* @param slotId the slot id, if applicable, otherwise -1
|
||||||
* @return the network item
|
* @return the network item
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack);
|
INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId);
|
||||||
}
|
}
|
||||||
|
@@ -15,7 +15,7 @@ import javax.annotation.Nullable;
|
|||||||
public class GridFactoryGridBlock implements IGridFactory {
|
public class GridFactoryGridBlock implements IGridFactory {
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public IGrid createFromStack(EntityPlayer player, ItemStack stack) {
|
public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,8 +15,8 @@ import javax.annotation.Nullable;
|
|||||||
public class GridFactoryPortableGrid implements IGridFactory {
|
public class GridFactoryPortableGrid implements IGridFactory {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IGrid createFromStack(EntityPlayer player, ItemStack stack) {
|
public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return new PortableGrid(player, stack);
|
return new PortableGrid(player, stack, slotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@@ -15,7 +15,7 @@ import javax.annotation.Nullable;
|
|||||||
public class GridFactoryPortableGridBlock implements IGridFactory {
|
public class GridFactoryPortableGridBlock implements IGridFactory {
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public IGrid createFromStack(EntityPlayer player, ItemStack stack) {
|
public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,8 +15,8 @@ import javax.annotation.Nullable;
|
|||||||
public class GridFactoryWirelessFluidGrid implements IGridFactory {
|
public class GridFactoryWirelessFluidGrid implements IGridFactory {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IGrid createFromStack(EntityPlayer player, ItemStack stack) {
|
public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return new WirelessFluidGrid(stack);
|
return new WirelessFluidGrid(stack, slotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@@ -15,8 +15,8 @@ import javax.annotation.Nullable;
|
|||||||
public class GridFactoryWirelessGrid implements IGridFactory {
|
public class GridFactoryWirelessGrid implements IGridFactory {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IGrid createFromStack(EntityPlayer player, ItemStack stack) {
|
public IGrid createFromStack(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return new WirelessGrid(stack);
|
return new WirelessGrid(stack, slotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@@ -43,16 +43,16 @@ public class GridManager implements IGridManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void openGrid(int id, EntityPlayerMP player, BlockPos pos) {
|
public void openGrid(int id, EntityPlayerMP player, BlockPos pos) {
|
||||||
openGrid(id, player, null, pos);
|
openGrid(id, player, null, pos, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void openGrid(int id, EntityPlayerMP player, ItemStack stack) {
|
public void openGrid(int id, EntityPlayerMP player, ItemStack stack, int slotId) {
|
||||||
openGrid(id, player, stack, null);
|
openGrid(id, player, stack, null, slotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openGrid(int id, EntityPlayerMP player, @Nullable ItemStack stack, @Nullable BlockPos pos) {
|
private void openGrid(int id, EntityPlayerMP player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) {
|
||||||
Pair<IGrid, TileEntity> grid = createGrid(id, player, stack, pos);
|
Pair<IGrid, TileEntity> grid = createGrid(id, player, stack, pos, slotId);
|
||||||
if (grid == null) {
|
if (grid == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@ public class GridManager implements IGridManager {
|
|||||||
// So we first send the window id in MessageGridOpen.
|
// So we first send the window id in MessageGridOpen.
|
||||||
|
|
||||||
// The order is preserved by TCP.
|
// The order is preserved by TCP.
|
||||||
RS.INSTANCE.network.sendTo(new MessageGridOpen(player.currentWindowId, pos, id, stack), player);
|
RS.INSTANCE.network.sendTo(new MessageGridOpen(player.currentWindowId, pos, id, stack, slotId), player);
|
||||||
|
|
||||||
player.openContainer = new ContainerGrid(grid.getLeft(), new ResizableDisplayDummy(), grid.getRight() instanceof TileBase ? (TileBase) grid.getRight() : null, player);
|
player.openContainer = new ContainerGrid(grid.getLeft(), new ResizableDisplayDummy(), grid.getRight() instanceof TileBase ? (TileBase) grid.getRight() : null, player);
|
||||||
player.openContainer.windowId = player.currentWindowId;
|
player.openContainer.windowId = player.currentWindowId;
|
||||||
@@ -84,7 +84,7 @@ public class GridManager implements IGridManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public Pair<IGrid, TileEntity> createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos) {
|
public Pair<IGrid, TileEntity> createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) {
|
||||||
IGridFactory factory = get(id);
|
IGridFactory factory = get(id);
|
||||||
|
|
||||||
if (factory == null) {
|
if (factory == null) {
|
||||||
@@ -96,7 +96,7 @@ public class GridManager implements IGridManager {
|
|||||||
|
|
||||||
switch (factory.getType()) {
|
switch (factory.getType()) {
|
||||||
case STACK:
|
case STACK:
|
||||||
grid = factory.createFromStack(player, stack);
|
grid = factory.createFromStack(player, stack, slotId);
|
||||||
break;
|
break;
|
||||||
case BLOCK:
|
case BLOCK:
|
||||||
grid = factory.createFromBlock(player, pos);
|
grid = factory.createFromBlock(player, pos);
|
||||||
|
@@ -23,7 +23,7 @@ public class GridOpenHandler implements Runnable {
|
|||||||
public void run() {
|
public void run() {
|
||||||
EntityPlayer player = Minecraft.getMinecraft().player;
|
EntityPlayer player = Minecraft.getMinecraft().player;
|
||||||
|
|
||||||
Pair<IGrid, TileEntity> grid = API.instance().getGridManager().createGrid(message.getGridId(), player, message.getStack(), message.getPos());
|
Pair<IGrid, TileEntity> grid = API.instance().getGridManager().createGrid(message.getGridId(), player, message.getStack(), message.getPos(), message.getSlotId());
|
||||||
|
|
||||||
if (grid == null) {
|
if (grid == null) {
|
||||||
return;
|
return;
|
||||||
|
@@ -23,7 +23,7 @@ public class NetworkItemHandler implements INetworkItemHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void open(EntityPlayer player, ItemStack stack) {
|
public void open(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
boolean inRange = false;
|
boolean inRange = false;
|
||||||
|
|
||||||
for (INetworkNode node : network.getNodeGraph().all()) {
|
for (INetworkNode node : network.getNodeGraph().all()) {
|
||||||
@@ -46,7 +46,7 @@ public class NetworkItemHandler implements INetworkItemHandler {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack);
|
INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack, slotId);
|
||||||
|
|
||||||
if (item.onOpen(network)) {
|
if (item.onOpen(network)) {
|
||||||
items.put(player, item);
|
items.put(player, item);
|
||||||
|
@@ -17,13 +17,13 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
|
|||||||
private INetworkItemHandler handler;
|
private INetworkItemHandler handler;
|
||||||
private EntityPlayer player;
|
private EntityPlayer player;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
private int invIndex;
|
private int slotId;
|
||||||
|
|
||||||
public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int invIndex) {
|
public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.invIndex = invIndex;
|
this.slotId = slotId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -43,7 +43,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), invIndex, 0, 0);
|
player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), slotId, 0, 0);
|
||||||
|
|
||||||
drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage);
|
drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage);
|
||||||
|
|
||||||
|
@@ -19,11 +19,13 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem {
|
|||||||
private INetworkItemHandler handler;
|
private INetworkItemHandler handler;
|
||||||
private EntityPlayer player;
|
private EntityPlayer player;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
|
private int slotId;
|
||||||
|
|
||||||
public NetworkItemWirelessFluidGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
|
public NetworkItemWirelessFluidGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.slotId = slotId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -43,7 +45,7 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
API.instance().getGridManager().openGrid(WirelessFluidGrid.ID, (EntityPlayerMP) player, stack);
|
API.instance().getGridManager().openGrid(WirelessFluidGrid.ID, (EntityPlayerMP) player, stack, slotId);
|
||||||
|
|
||||||
drainEnergy(RS.INSTANCE.config.wirelessFluidGridOpenUsage);
|
drainEnergy(RS.INSTANCE.config.wirelessFluidGridOpenUsage);
|
||||||
|
|
||||||
|
@@ -19,11 +19,13 @@ public class NetworkItemWirelessGrid implements INetworkItem {
|
|||||||
private INetworkItemHandler handler;
|
private INetworkItemHandler handler;
|
||||||
private EntityPlayer player;
|
private EntityPlayer player;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
|
private int slotId;
|
||||||
|
|
||||||
public NetworkItemWirelessGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
|
public NetworkItemWirelessGrid(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.slotId = slotId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -43,7 +45,7 @@ public class NetworkItemWirelessGrid implements INetworkItem {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
API.instance().getGridManager().openGrid(WirelessGrid.ID, (EntityPlayerMP) player, stack);
|
API.instance().getGridManager().openGrid(WirelessGrid.ID, (EntityPlayerMP) player, stack, slotId);
|
||||||
|
|
||||||
drainEnergy(RS.INSTANCE.config.wirelessGridOpenUsage);
|
drainEnergy(RS.INSTANCE.config.wirelessGridOpenUsage);
|
||||||
|
|
||||||
|
@@ -262,13 +262,13 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
|||||||
case 0:
|
case 0:
|
||||||
return 1;
|
return 1;
|
||||||
case 1:
|
case 1:
|
||||||
return 2;
|
|
||||||
case 2:
|
|
||||||
return 3;
|
|
||||||
case 3:
|
|
||||||
return 4;
|
return 4;
|
||||||
|
case 2:
|
||||||
|
return 8;
|
||||||
|
case 3:
|
||||||
|
return 16;
|
||||||
case 4:
|
case 4:
|
||||||
return 5;
|
return 32;
|
||||||
default:
|
default:
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@@ -135,4 +135,9 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
|
|||||||
TileDataManager.setParameter(TileCraftingMonitor.TAB_PAGE, page);
|
TileDataManager.setParameter(TileCraftingMonitor.TAB_PAGE, page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
|
import com.raoulvdberge.refinedstorage.RSItems;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.Action;
|
import com.raoulvdberge.refinedstorage.api.util.Action;
|
||||||
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
import com.raoulvdberge.refinedstorage.api.util.IComparer;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||||
@@ -8,6 +9,7 @@ import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
|||||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerBase;
|
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerBase;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerUpgrade;
|
import com.raoulvdberge.refinedstorage.inventory.item.ItemHandlerUpgrade;
|
||||||
import com.raoulvdberge.refinedstorage.inventory.listener.ListenerNetworkNode;
|
import com.raoulvdberge.refinedstorage.inventory.listener.ListenerNetworkNode;
|
||||||
|
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||||
import com.raoulvdberge.refinedstorage.item.ItemUpgrade;
|
import com.raoulvdberge.refinedstorage.item.ItemUpgrade;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
|
||||||
@@ -83,21 +85,15 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
|||||||
ItemStack slot = itemFilters.getStackInSlot(filterSlot);
|
ItemStack slot = itemFilters.getStackInSlot(filterSlot);
|
||||||
|
|
||||||
if (!slot.isEmpty()) {
|
if (!slot.isEmpty()) {
|
||||||
int stackSize = upgrades.getItemInteractCount();
|
if (slot.getItem() == RSItems.FILTER) {
|
||||||
|
for (ItemStack slotFilter : ItemFilter.getFilterItemsFromCache(slot)) {
|
||||||
ItemStack took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.SIMULATE);
|
if (!slotFilter.isEmpty()) {
|
||||||
|
doExport(handler, slotFilter);
|
||||||
if (took == null) {
|
}
|
||||||
if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
|
}
|
||||||
network.getCraftingManager().request(new SlottedCraftingRequest(this, filterSlot), slot, stackSize);
|
} else {
|
||||||
}
|
doExport(handler, slot);
|
||||||
} else if (ItemHandlerHelper.insertItem(handler, took, true).isEmpty()) {
|
}
|
||||||
took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.PERFORM);
|
|
||||||
|
|
||||||
if (took != null) {
|
|
||||||
ItemHandlerHelper.insertItem(handler, took, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filterSlot++;
|
filterSlot++;
|
||||||
@@ -152,6 +148,24 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void doExport(IItemHandler handler, ItemStack slot) {
|
||||||
|
int stackSize = upgrades.getItemInteractCount();
|
||||||
|
|
||||||
|
ItemStack took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.SIMULATE);
|
||||||
|
|
||||||
|
if (took == null) {
|
||||||
|
if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) {
|
||||||
|
network.getCraftingManager().request(new SlottedCraftingRequest(this, filterSlot), slot, stackSize);
|
||||||
|
}
|
||||||
|
} else if (ItemHandlerHelper.insertItem(handler, took, true).isEmpty()) {
|
||||||
|
took = network.extractItem(slot, Math.min(slot.getMaxStackSize(), stackSize), compare, Action.PERFORM);
|
||||||
|
|
||||||
|
if (took != null) {
|
||||||
|
ItemHandlerHelper.insertItem(handler, took, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getCompare() {
|
public int getCompare() {
|
||||||
return compare;
|
return compare;
|
||||||
|
@@ -449,6 +449,11 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware, I
|
|||||||
// NO OP
|
// NO OP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCrafted(EntityPlayer player) {
|
public void onCrafted(EntityPlayer player) {
|
||||||
onCrafted(this, world, player);
|
onCrafted(this, world, player);
|
||||||
|
@@ -57,13 +57,29 @@ public abstract class ContainerBase extends Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void addPlayerInventory(int xInventory, int yInventory) {
|
protected void addPlayerInventory(int xInventory, int yInventory) {
|
||||||
int id = 0;
|
int disabledSlotNumber = getDisabledSlotNumber();
|
||||||
|
|
||||||
|
int id = 9;
|
||||||
|
|
||||||
|
for (int y = 0; y < 3; y++) {
|
||||||
|
for (int x = 0; x < 9; x++) {
|
||||||
|
if (id == disabledSlotNumber) {
|
||||||
|
addSlotToContainer(new SlotLegacyDisabled(player.inventory, id, xInventory + x * 18, yInventory + y * 18));
|
||||||
|
} else {
|
||||||
|
addSlotToContainer(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18));
|
||||||
|
}
|
||||||
|
|
||||||
|
id++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
id = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 9; i++) {
|
for (int i = 0; i < 9; i++) {
|
||||||
int x = xInventory + i * 18;
|
int x = xInventory + i * 18;
|
||||||
int y = yInventory + 4 + (3 * 18);
|
int y = yInventory + 4 + (3 * 18);
|
||||||
|
|
||||||
if (isHeldItemDisabled() && i == player.inventory.currentItem) {
|
if (id == disabledSlotNumber) {
|
||||||
addSlotToContainer(new SlotLegacyDisabled(player.inventory, id, x, y));
|
addSlotToContainer(new SlotLegacyDisabled(player.inventory, id, x, y));
|
||||||
} else {
|
} else {
|
||||||
addSlotToContainer(new Slot(player.inventory, id, x, y));
|
addSlotToContainer(new Slot(player.inventory, id, x, y));
|
||||||
@@ -71,14 +87,6 @@ public abstract class ContainerBase extends Container {
|
|||||||
|
|
||||||
id++;
|
id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int y = 0; y < 3; y++) {
|
|
||||||
for (int x = 0; x < 9; x++) {
|
|
||||||
addSlotToContainer(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18));
|
|
||||||
|
|
||||||
id++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<SlotFilterFluid> getFluidSlots() {
|
public List<SlotFilterFluid> getFluidSlots() {
|
||||||
@@ -89,8 +97,12 @@ public abstract class ContainerBase extends Container {
|
|||||||
public ItemStack slotClick(int id, int dragType, ClickType clickType, EntityPlayer player) {
|
public ItemStack slotClick(int id, int dragType, ClickType clickType, EntityPlayer player) {
|
||||||
Slot slot = id >= 0 ? getSlot(id) : null;
|
Slot slot = id >= 0 ? getSlot(id) : null;
|
||||||
|
|
||||||
|
int disabledSlotNumber = getDisabledSlotNumber();
|
||||||
|
|
||||||
// Prevent swapping disabled held item with the number keys (dragType is the slot we're swapping with)
|
// Prevent swapping disabled held item with the number keys (dragType is the slot we're swapping with)
|
||||||
if (isHeldItemDisabled() && clickType == ClickType.SWAP && dragType == player.inventory.currentItem) {
|
if (disabledSlotNumber != -1 &&
|
||||||
|
clickType == ClickType.SWAP &&
|
||||||
|
dragType == disabledSlotNumber) {
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,8 +168,8 @@ public abstract class ContainerBase extends Container {
|
|||||||
return super.canMergeSlot(stack, slot);
|
return super.canMergeSlot(stack, slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isHeldItemDisabled() {
|
protected int getDisabledSlotNumber() {
|
||||||
return false;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -82,8 +82,8 @@ public class ContainerCraftingMonitor extends ContainerBase implements ICrafting
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isHeldItemDisabled() {
|
protected int getDisabledSlotNumber() {
|
||||||
return craftingMonitor instanceof WirelessCraftingMonitor;
|
return craftingMonitor.getSlotId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -53,7 +53,7 @@ public class ContainerFilter extends ContainerBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isHeldItemDisabled() {
|
protected int getDisabledSlotNumber() {
|
||||||
return true;
|
return getPlayer().inventory.currentItem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,9 +18,7 @@ import com.raoulvdberge.refinedstorage.container.slot.legacy.SlotLegacyFilter;
|
|||||||
import com.raoulvdberge.refinedstorage.gui.IResizableDisplay;
|
import com.raoulvdberge.refinedstorage.gui.IResizableDisplay;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
||||||
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
import com.raoulvdberge.refinedstorage.tile.config.IType;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.inventory.IContainerListener;
|
import net.minecraft.inventory.IContainerListener;
|
||||||
@@ -271,8 +269,7 @@ public class ContainerGrid extends ContainerBase implements IGridCraftingListene
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isHeldItemDisabled() {
|
protected int getDisabledSlotNumber() {
|
||||||
// Here we check for the concrete portable grid type, not IPortableGrid, because we *CAN* move the held item in the portable grid tile
|
return grid.getSlotId();
|
||||||
return grid instanceof WirelessGrid || grid instanceof PortableGrid;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -143,7 +143,7 @@ public class GuiHandler implements IGuiHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private WirelessCraftingMonitor getWirelessCraftingMonitor(EntityPlayer player, int invIndex) {
|
private WirelessCraftingMonitor getWirelessCraftingMonitor(EntityPlayer player, int invIndex) {
|
||||||
return new WirelessCraftingMonitor(player.inventory.getStackInSlot(invIndex));
|
return new WirelessCraftingMonitor(player.inventory.getStackInSlot(invIndex), invIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int invIndex) {
|
private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int invIndex) {
|
||||||
|
@@ -258,10 +258,16 @@ public class EnvironmentNetwork extends AbstractManagedEnvironment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Actually do it and return how much fluid we've inserted
|
// Actually do it and return how much fluid we've inserted
|
||||||
FluidStack extracted = node.getNetwork().extractFluid(stack, stack.amount, Action.PERFORM);
|
FluidStack extractedActual = node.getNetwork().extractFluid(stack, filledAmountSim, Action.PERFORM);
|
||||||
handler.fill(extracted, true);
|
int filledAmountActual = handler.fill(extractedActual, true);
|
||||||
|
|
||||||
return new Object[]{filledAmountSim};
|
// Attempt to insert excess fluid back into the network
|
||||||
|
// This shouldn't need to happen for most tanks, unless input cap decreases based on insert amount
|
||||||
|
if (extractedActual != null && extractedActual.amount > filledAmountActual) {
|
||||||
|
node.getNetwork().insertFluid(stack, extractedActual.amount - filledAmountActual, Action.PERFORM);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Object[]{filledAmountActual};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Callback(doc = "function(stack:table):table -- Gets a fluid from the network.")
|
@Callback(doc = "function(stack:table):table -- Gets a fluid from the network.")
|
||||||
|
@@ -15,11 +15,13 @@ import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
|||||||
import net.minecraft.client.resources.I18n;
|
import net.minecraft.client.resources.I18n;
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.EnumActionResult;
|
import net.minecraft.util.EnumActionResult;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.NonNullList;
|
||||||
import net.minecraft.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
@@ -28,7 +30,9 @@ import net.minecraftforge.fml.relauncher.SideOnly;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class ItemFilter extends ItemBase {
|
public class ItemFilter extends ItemBase {
|
||||||
private static final String NBT_COMPARE = "Compare";
|
private static final String NBT_COMPARE = "Compare";
|
||||||
@@ -40,6 +44,13 @@ public class ItemFilter extends ItemBase {
|
|||||||
private static final String NBT_TYPE = "Type";
|
private static final String NBT_TYPE = "Type";
|
||||||
public static final String NBT_FLUID_FILTERS = "FluidFilters";
|
public static final String NBT_FLUID_FILTERS = "FluidFilters";
|
||||||
|
|
||||||
|
private static Map<ItemStack, NonNullList<ItemStack>> FILTER_CACHE = new HashMap<>();
|
||||||
|
|
||||||
|
public static NonNullList<ItemStack> getFilterItemsFromCache(ItemStack stack) {
|
||||||
|
FILTER_CACHE.putIfAbsent(stack, new ItemHandlerFilterItems(stack).getFilteredItems());
|
||||||
|
return FILTER_CACHE.get(stack);
|
||||||
|
}
|
||||||
|
|
||||||
public ItemFilter() {
|
public ItemFilter() {
|
||||||
super(new ItemInfo(RS.ID, "filter"));
|
super(new ItemInfo(RS.ID, "filter"));
|
||||||
|
|
||||||
|
@@ -47,7 +47,7 @@ public abstract class ItemNetworkItem extends ItemEnergyItem implements INetwork
|
|||||||
ItemStack stack = player.getHeldItem(hand);
|
ItemStack stack = player.getHeldItem(hand);
|
||||||
|
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.getHeldItem(hand)), player::sendMessage);
|
applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.getHeldItem(hand), player.inventory.currentItem), player::sendMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
||||||
|
@@ -33,16 +33,8 @@ public class ItemWirelessCraftingMonitor extends ItemNetworkItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
|
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
int invIndex = 0;
|
return new NetworkItemWirelessCraftingMonitor(handler, player, stack, slotId);
|
||||||
for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
|
|
||||||
if (player.inventory.getStackInSlot(i) == stack) {
|
|
||||||
invIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new NetworkItemWirelessCraftingMonitor(handler, player, stack, invIndex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<UUID> getTabSelected(ItemStack stack) {
|
public static Optional<UUID> getTabSelected(ItemStack stack) {
|
||||||
|
@@ -29,8 +29,8 @@ public class ItemWirelessFluidGrid extends ItemNetworkItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
|
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return new NetworkItemWirelessFluidGrid(handler, player, stack);
|
return new NetworkItemWirelessFluidGrid(handler, player, stack, slotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getSortingType(ItemStack stack) {
|
public static int getSortingType(ItemStack stack) {
|
||||||
|
@@ -34,8 +34,8 @@ public class ItemWirelessGrid extends ItemNetworkItem {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nonnull
|
@Nonnull
|
||||||
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) {
|
public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
return new NetworkItemWirelessGrid(handler, player, stack);
|
return new NetworkItemWirelessGrid(handler, player, stack, slotId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getViewType(ItemStack stack) {
|
public static int getViewType(ItemStack stack) {
|
||||||
|
@@ -30,7 +30,7 @@ public class ItemBlockPortableGrid extends ItemBlockEnergyItem {
|
|||||||
ItemStack stack = player.getHeldItem(hand);
|
ItemStack stack = player.getHeldItem(hand);
|
||||||
|
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
API.instance().getGridManager().openGrid(PortableGrid.ID, (EntityPlayerMP) player, stack);
|
API.instance().getGridManager().openGrid(PortableGrid.ID, (EntityPlayerMP) player, stack, player.inventory.currentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
|
||||||
|
@@ -18,12 +18,13 @@ public class MessageGridOpen implements IMessage, IMessageHandler<MessageGridOpe
|
|||||||
private BlockPos pos;
|
private BlockPos pos;
|
||||||
@Nullable
|
@Nullable
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
|
private int slotId;
|
||||||
private int gridId;
|
private int gridId;
|
||||||
|
|
||||||
public MessageGridOpen() {
|
public MessageGridOpen() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessageGridOpen(int windowId, @Nullable BlockPos pos, int gridId, @Nullable ItemStack stack) {
|
public MessageGridOpen(int windowId, @Nullable BlockPos pos, int gridId, @Nullable ItemStack stack, int slotId) {
|
||||||
if (pos == null && stack == null) {
|
if (pos == null && stack == null) {
|
||||||
throw new IllegalArgumentException("Can't be both null");
|
throw new IllegalArgumentException("Can't be both null");
|
||||||
}
|
}
|
||||||
@@ -32,12 +33,14 @@ public class MessageGridOpen implements IMessage, IMessageHandler<MessageGridOpe
|
|||||||
this.pos = pos;
|
this.pos = pos;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.gridId = gridId;
|
this.gridId = gridId;
|
||||||
|
this.slotId = slotId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fromBytes(ByteBuf buf) {
|
public void fromBytes(ByteBuf buf) {
|
||||||
windowId = buf.readInt();
|
windowId = buf.readInt();
|
||||||
gridId = buf.readInt();
|
gridId = buf.readInt();
|
||||||
|
slotId = buf.readInt();
|
||||||
|
|
||||||
if (buf.readBoolean()) {
|
if (buf.readBoolean()) {
|
||||||
pos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
|
pos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
|
||||||
@@ -52,6 +55,7 @@ public class MessageGridOpen implements IMessage, IMessageHandler<MessageGridOpe
|
|||||||
public void toBytes(ByteBuf buf) {
|
public void toBytes(ByteBuf buf) {
|
||||||
buf.writeInt(windowId);
|
buf.writeInt(windowId);
|
||||||
buf.writeInt(gridId);
|
buf.writeInt(gridId);
|
||||||
|
buf.writeInt(slotId);
|
||||||
|
|
||||||
buf.writeBoolean(pos != null);
|
buf.writeBoolean(pos != null);
|
||||||
if (pos != null) {
|
if (pos != null) {
|
||||||
@@ -84,6 +88,10 @@ public class MessageGridOpen implements IMessage, IMessageHandler<MessageGridOpe
|
|||||||
return gridId;
|
return gridId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSlotId() {
|
||||||
|
return slotId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMessage onMessage(MessageGridOpen message, MessageContext ctx) {
|
public IMessage onMessage(MessageGridOpen message, MessageContext ctx) {
|
||||||
Minecraft.getMinecraft().addScheduledTask(new GridOpenHandler(message));
|
Minecraft.getMinecraft().addScheduledTask(new GridOpenHandler(message));
|
||||||
|
@@ -10,7 +10,6 @@ import com.raoulvdberge.refinedstorage.util.StackUtils;
|
|||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.fluids.Fluid;
|
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||||
|
|
||||||
|
@@ -25,9 +25,9 @@ public class MessageNetworkItemOpen extends MessageHandlerPlayerToServer<Message
|
|||||||
ItemStack stack = player.inventory.getStackInSlot(message.slotId);
|
ItemStack stack = player.inventory.getStackInSlot(message.slotId);
|
||||||
|
|
||||||
if (stack.getItem() instanceof ItemNetworkItem) {
|
if (stack.getItem() instanceof ItemNetworkItem) {
|
||||||
((ItemNetworkItem) stack.getItem()).applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.inventory.getStackInSlot(message.slotId)), player::sendMessage);
|
((ItemNetworkItem) stack.getItem()).applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, stack, message.slotId), player::sendMessage);
|
||||||
} else if (stack.getItem() == Item.getItemFromBlock(RSBlocks.PORTABLE_GRID)) { // @Hack
|
} else if (stack.getItem() == Item.getItemFromBlock(RSBlocks.PORTABLE_GRID)) { // @Hack
|
||||||
API.instance().getGridManager().openGrid(PortableGrid.ID, player, stack);
|
API.instance().getGridManager().openGrid(PortableGrid.ID, player, stack, message.slotId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -510,6 +510,14 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
|
|||||||
return world;
|
return world;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public World getWorld()
|
||||||
|
{
|
||||||
|
// This is provided by net.minecraft.TileEntity - and needed as a part of INetworkNode
|
||||||
|
// After obfuscation - these two methods will not be the same - so we have to redefine this here
|
||||||
|
return this.world;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void read(NBTTagCompound tag) {
|
public void read(NBTTagCompound tag) {
|
||||||
super.read(tag);
|
super.read(tag);
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
package com.raoulvdberge.refinedstorage.tile.config;
|
package com.raoulvdberge.refinedstorage.tile.config;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RSItems;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
|
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.fluid.FluidInventory;
|
import com.raoulvdberge.refinedstorage.inventory.fluid.FluidInventory;
|
||||||
|
import com.raoulvdberge.refinedstorage.item.ItemFilter;
|
||||||
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;
|
||||||
@@ -24,21 +26,44 @@ public interface IFilterable {
|
|||||||
|
|
||||||
static boolean acceptsItem(IItemHandler filters, int mode, int compare, ItemStack stack) {
|
static boolean acceptsItem(IItemHandler filters, int mode, int compare, ItemStack stack) {
|
||||||
if (mode == WHITELIST) {
|
if (mode == WHITELIST) {
|
||||||
|
int slots = 0;
|
||||||
|
|
||||||
for (int i = 0; i < filters.getSlots(); ++i) {
|
for (int i = 0; i < filters.getSlots(); ++i) {
|
||||||
ItemStack slot = filters.getStackInSlot(i);
|
ItemStack slot = filters.getStackInSlot(i);
|
||||||
|
|
||||||
if (API.instance().getComparer().isEqual(slot, stack, compare)) {
|
if (!slot.isEmpty()) {
|
||||||
return true;
|
slots++;
|
||||||
|
|
||||||
|
if (slot.getItem() == RSItems.FILTER) {
|
||||||
|
for (ItemStack slotInFilter : ItemFilter.getFilterItemsFromCache(slot)) {
|
||||||
|
if (!slotInFilter.isEmpty() && API.instance().getComparer().isEqual(
|
||||||
|
slotInFilter,
|
||||||
|
stack,
|
||||||
|
compare
|
||||||
|
)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (API.instance().getComparer().isEqual(slot, stack, compare)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return slots == 0;
|
||||||
return false;
|
|
||||||
} else if (mode == BLACKLIST) {
|
} else if (mode == BLACKLIST) {
|
||||||
for (int i = 0; i < filters.getSlots(); ++i) {
|
for (int i = 0; i < filters.getSlots(); ++i) {
|
||||||
ItemStack slot = filters.getStackInSlot(i);
|
ItemStack slot = filters.getStackInSlot(i);
|
||||||
|
|
||||||
if (API.instance().getComparer().isEqual(slot, stack, compare)) {
|
if (!slot.isEmpty()) {
|
||||||
return false;
|
if (slot.getItem() == RSItems.FILTER) {
|
||||||
|
for (ItemStack slotInFilter : ItemFilter.getFilterItemsFromCache(slot)) {
|
||||||
|
if (!slotInFilter.isEmpty() && API.instance().getComparer().isEqual(slotInFilter, stack, compare)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (API.instance().getComparer().isEqual(slot, stack, compare)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -36,4 +36,6 @@ public interface ICraftingMonitor {
|
|||||||
void onTabSelectionChanged(Optional<UUID> taskId);
|
void onTabSelectionChanged(Optional<UUID> taskId);
|
||||||
|
|
||||||
void onTabPageChanged(int page);
|
void onTabPageChanged(int page);
|
||||||
|
|
||||||
|
int getSlotId();
|
||||||
}
|
}
|
||||||
|
@@ -28,9 +28,11 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
|
|||||||
private BlockPos network;
|
private BlockPos network;
|
||||||
private int tabPage;
|
private int tabPage;
|
||||||
private Optional<UUID> tabSelected;
|
private Optional<UUID> tabSelected;
|
||||||
|
private int slotId;
|
||||||
|
|
||||||
public WirelessCraftingMonitor(ItemStack stack) {
|
public WirelessCraftingMonitor(ItemStack stack, int slotId) {
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.slotId = slotId;
|
||||||
this.networkDimension = ItemWirelessCraftingMonitor.getDimensionId(stack);
|
this.networkDimension = ItemWirelessCraftingMonitor.getDimensionId(stack);
|
||||||
this.network = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack));
|
this.network = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack));
|
||||||
this.tabPage = ItemWirelessCraftingMonitor.getTabPage(stack);
|
this.tabPage = ItemWirelessCraftingMonitor.getTabPage(stack);
|
||||||
@@ -138,4 +140,9 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
|
|||||||
RS.INSTANCE.network.sendToServer(new MessageWirelessCraftingMonitorSettings(tabSelected, tabPage));
|
RS.INSTANCE.network.sendToServer(new MessageWirelessCraftingMonitorSettings(tabSelected, tabPage));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return slotId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,7 @@ public class WirelessFluidGrid implements IGridNetworkAware {
|
|||||||
|
|
||||||
private int networkDimension;
|
private int networkDimension;
|
||||||
private BlockPos network;
|
private BlockPos network;
|
||||||
|
private int slotId;
|
||||||
|
|
||||||
private int sortingType;
|
private int sortingType;
|
||||||
private int sortingDirection;
|
private int sortingDirection;
|
||||||
@@ -62,11 +63,12 @@ public class WirelessFluidGrid implements IGridNetworkAware {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public WirelessFluidGrid(ItemStack stack) {
|
public WirelessFluidGrid(ItemStack stack, int slotId) {
|
||||||
this.networkDimension = ItemWirelessFluidGrid.getDimensionId(stack);
|
this.networkDimension = ItemWirelessFluidGrid.getDimensionId(stack);
|
||||||
this.network = new BlockPos(ItemWirelessFluidGrid.getX(stack), ItemWirelessFluidGrid.getY(stack), ItemWirelessFluidGrid.getZ(stack));
|
this.network = new BlockPos(ItemWirelessFluidGrid.getX(stack), ItemWirelessFluidGrid.getY(stack), ItemWirelessFluidGrid.getZ(stack));
|
||||||
|
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.slotId = slotId;
|
||||||
|
|
||||||
this.sortingType = ItemWirelessFluidGrid.getSortingType(stack);
|
this.sortingType = ItemWirelessFluidGrid.getSortingType(stack);
|
||||||
this.sortingDirection = ItemWirelessFluidGrid.getSortingDirection(stack);
|
this.sortingDirection = ItemWirelessFluidGrid.getSortingDirection(stack);
|
||||||
@@ -294,6 +296,11 @@ public class WirelessFluidGrid implements IGridNetworkAware {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return slotId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClosed(EntityPlayer player) {
|
public void onClosed(EntityPlayer player) {
|
||||||
INetwork network = getNetwork();
|
INetwork network = getNetwork();
|
||||||
|
@@ -39,6 +39,7 @@ public class WirelessGrid implements IGridNetworkAware {
|
|||||||
|
|
||||||
private int networkDimension;
|
private int networkDimension;
|
||||||
private BlockPos network;
|
private BlockPos network;
|
||||||
|
private int slotId;
|
||||||
|
|
||||||
private int viewType;
|
private int viewType;
|
||||||
private int sortingType;
|
private int sortingType;
|
||||||
@@ -63,11 +64,12 @@ public class WirelessGrid implements IGridNetworkAware {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public WirelessGrid(ItemStack stack) {
|
public WirelessGrid(ItemStack stack, int slotId) {
|
||||||
this.networkDimension = ItemWirelessGrid.getDimensionId(stack);
|
this.networkDimension = ItemWirelessGrid.getDimensionId(stack);
|
||||||
this.network = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack));
|
this.network = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack));
|
||||||
|
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.slotId = slotId;
|
||||||
|
|
||||||
this.viewType = ItemWirelessGrid.getViewType(stack);
|
this.viewType = ItemWirelessGrid.getViewType(stack);
|
||||||
this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
||||||
@@ -300,6 +302,12 @@ public class WirelessGrid implements IGridNetworkAware {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return slotId;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClosed(EntityPlayer player) {
|
public void onClosed(EntityPlayer player) {
|
||||||
INetwork network = getNetwork();
|
INetwork network = getNetwork();
|
||||||
|
@@ -63,6 +63,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
|
|||||||
|
|
||||||
private EntityPlayer player;
|
private EntityPlayer player;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
|
private int slotId;
|
||||||
|
|
||||||
private int sortingType;
|
private int sortingType;
|
||||||
private int sortingDirection;
|
private int sortingDirection;
|
||||||
@@ -132,9 +133,10 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public PortableGrid(EntityPlayer player, ItemStack stack) {
|
public PortableGrid(EntityPlayer player, ItemStack stack, int slotId) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.slotId = slotId;
|
||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
this.sortingType = ItemWirelessGrid.getSortingType(stack);
|
||||||
@@ -426,6 +428,11 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return slotId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AccessType getAccessType() {
|
public AccessType getAccessType() {
|
||||||
return AccessType.INSERT_EXTRACT;
|
return AccessType.INSERT_EXTRACT;
|
||||||
|
@@ -519,6 +519,11 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
|
|||||||
return redstoneMode.isEnabled(world, pos);
|
return redstoneMode.isEnabled(world, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSlotId() {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public IStorageCache getCache() {
|
public IStorageCache getCache() {
|
||||||
|
Reference in New Issue
Block a user