Fixed being able to move wireless items in inventory when using a keybinding to open

This commit is contained in:
raoulvdberge
2019-11-17 19:00:00 +01:00
parent a72dccdea4
commit b485c74503
37 changed files with 136 additions and 75 deletions

View File

@@ -10,6 +10,7 @@
- Fixed External Storage not refreshing when the storage is broken or replaced (raoulvdberge) - Fixed External Storage not refreshing when the storage is broken or replaced (raoulvdberge)
- Fixed delay in block update when placing a cable block (raoulvdberge) - Fixed delay in block update when placing a cable block (raoulvdberge)
- Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering (raoulvdberge) - Fixed holder of cable blocks sometimes conflicting with a cable connection while rendering (raoulvdberge)
- Fixed being able to move wireless items in inventory when using a keybinding to open (raoulvdberge)
### 1.7 ### 1.7
NOTE: This is an alpha release. Bugs may happen. Remember to take backups. NOTE: This is an alpha release. Bugs may happen. Remember to take backups.

View File

@@ -237,6 +237,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 ||

View File

@@ -1,7 +1,6 @@
package com.raoulvdberge.refinedstorage.api.network.grid; package com.raoulvdberge.refinedstorage.api.network.grid;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -18,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(PlayerEntity player, ItemStack stack); IGrid createFromStack(PlayerEntity 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.

View File

@@ -42,8 +42,9 @@ public interface IGridManager {
* @param id the grid factory id * @param id the grid factory id
* @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(ResourceLocation id, ServerPlayerEntity player, ItemStack stack); void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, int slotId);
/** /**
* Creates a grid. * Creates a grid.
@@ -52,8 +53,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(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos); Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId);
} }

View File

@@ -15,8 +15,9 @@ public interface INetworkItemManager {
* *
* @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(PlayerEntity player, ItemStack stack); void open(PlayerEntity player, ItemStack stack, int slotId);
/** /**
* Called when the player closes a network item. * Called when the player closes a network item.

View File

@@ -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(INetworkItemManager handler, PlayerEntity player, ItemStack stack); INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId);
} }

View File

@@ -33,16 +33,16 @@ public class GridManager implements IGridManager {
@Override @Override
public void openGrid(ResourceLocation id, ServerPlayerEntity player, BlockPos pos) { public void openGrid(ResourceLocation id, ServerPlayerEntity player, BlockPos pos) {
openGrid(id, player, null, pos); openGrid(id, player, null, pos, -1);
} }
@Override @Override
public void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack) { public void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, int slotId) {
openGrid(id, player, stack, null); openGrid(id, player, stack, null, slotId);
} }
private void openGrid(ResourceLocation id, ServerPlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos) { private void openGrid(ResourceLocation id, ServerPlayerEntity 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;
} }
@@ -59,12 +59,14 @@ public class GridManager implements IGridManager {
if (stack != null) { if (stack != null) {
buf.writeItemStack(stack); buf.writeItemStack(stack);
} }
buf.writeInt(slotId);
}); });
} }
@Override @Override
@Nullable @Nullable
public Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos) { public Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) {
IGridFactory factory = get(id); IGridFactory factory = get(id);
if (factory == null) { if (factory == null) {
@@ -76,7 +78,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);

View File

@@ -19,7 +19,7 @@ public class GridBlockGridFactory implements IGridFactory {
@Override @Override
@Nullable @Nullable
public IGrid createFromStack(PlayerEntity player, ItemStack stack) { public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
return null; return null;
} }

View File

@@ -19,7 +19,7 @@ public class PortableGridBlockGridFactory implements IGridFactory {
@Override @Override
@Nullable @Nullable
public IGrid createFromStack(PlayerEntity player, ItemStack stack) { public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
return null; return null;
} }

View File

@@ -19,8 +19,8 @@ public class PortableGridGridFactory implements IGridFactory {
@Nullable @Nullable
@Override @Override
public IGrid createFromStack(PlayerEntity player, ItemStack stack) { public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
PortableGrid portableGrid = new PortableGrid(player, stack); PortableGrid portableGrid = new PortableGrid(player, stack, slotId);
portableGrid.onOpen(); portableGrid.onOpen();

View File

@@ -19,8 +19,8 @@ public class WirelessFluidGridGridFactory implements IGridFactory {
@Nullable @Nullable
@Override @Override
public IGrid createFromStack(PlayerEntity player, ItemStack stack) { public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessFluidGrid(stack, player.getServer()); return new WirelessFluidGrid(stack, player.getServer(), slotId);
} }
@Nullable @Nullable

View File

@@ -19,8 +19,8 @@ public class WirelessGridGridFactory implements IGridFactory {
@Nullable @Nullable
@Override @Override
public IGrid createFromStack(PlayerEntity player, ItemStack stack) { public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessGrid(stack, player.getServer()); return new WirelessGrid(stack, player.getServer(), slotId);
} }
@Nullable @Nullable

View File

@@ -22,7 +22,7 @@ public class NetworkItemManager implements INetworkItemManager {
} }
@Override @Override
public void open(PlayerEntity player, ItemStack stack) { public void open(PlayerEntity player, ItemStack stack, int slotId) {
boolean inRange = false; boolean inRange = false;
for (INetworkNode node : network.getNodeGraph().all()) { for (INetworkNode node : network.getNodeGraph().all()) {
@@ -47,7 +47,7 @@ public class NetworkItemManager implements INetworkItemManager {
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);

View File

@@ -22,13 +22,13 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem {
private INetworkItemManager handler; private INetworkItemManager handler;
private PlayerEntity player; private PlayerEntity player;
private ItemStack stack; private ItemStack stack;
private int invIndex; private int slotId;
public WirelessCraftingMonitorNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int invIndex) { public WirelessCraftingMonitorNetworkItem(INetworkItemManager handler, PlayerEntity 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
@@ -56,12 +56,12 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem {
return false; return false;
} }
WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, player.getServer()); WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, player.getServer(), slotId);
NetworkHooks.openGui( NetworkHooks.openGui(
(ServerPlayerEntity) player, (ServerPlayerEntity) player,
new CraftingMonitorContainerProvider(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null), new CraftingMonitorContainerProvider(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null),
buf -> buf.writeInt(invIndex) buf -> buf.writeInt(slotId)
); );
drainEnergy(RS.SERVER_CONFIG.getWirelessCraftingMonitor().getOpenUsage()); drainEnergy(RS.SERVER_CONFIG.getWirelessCraftingMonitor().getOpenUsage());

View File

@@ -20,11 +20,13 @@ public class WirelessFluidGridNetworkItem implements INetworkItem {
private INetworkItemManager handler; private INetworkItemManager handler;
private PlayerEntity player; private PlayerEntity player;
private ItemStack stack; private ItemStack stack;
private int slotId;
public WirelessFluidGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { public WirelessFluidGridNetworkItem(INetworkItemManager handler, PlayerEntity 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
@@ -51,7 +53,7 @@ public class WirelessFluidGridNetworkItem implements INetworkItem {
return false; return false;
} }
API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayerEntity) player, stack); API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayerEntity) player, stack, slotId);
drainEnergy(RS.SERVER_CONFIG.getWirelessFluidGrid().getOpenUsage()); drainEnergy(RS.SERVER_CONFIG.getWirelessFluidGrid().getOpenUsage());

View File

@@ -20,11 +20,13 @@ public class WirelessGridNetworkItem implements INetworkItem {
private INetworkItemManager handler; private INetworkItemManager handler;
private PlayerEntity player; private PlayerEntity player;
private ItemStack stack; private ItemStack stack;
private int slotId;
public WirelessGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { public WirelessGridNetworkItem(INetworkItemManager handler, PlayerEntity 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
@@ -51,7 +53,7 @@ public class WirelessGridNetworkItem implements INetworkItem {
return false; return false;
} }
API.instance().getGridManager().openGrid(WirelessGridGridFactory.ID, (ServerPlayerEntity) player, stack); API.instance().getGridManager().openGrid(WirelessGridGridFactory.ID, (ServerPlayerEntity) player, stack, slotId);
drainEnergy(RS.SERVER_CONFIG.getWirelessGrid().getOpenUsage()); drainEnergy(RS.SERVER_CONFIG.getWirelessGrid().getOpenUsage());

View File

@@ -139,4 +139,9 @@ public class CraftingMonitorNetworkNode extends NetworkNode implements ICrafting
TileDataManager.setParameter(CraftingMonitorTile.TAB_PAGE, page); TileDataManager.setParameter(CraftingMonitorTile.TAB_PAGE, page);
} }
} }
@Override
public int getSlotId() {
return -1;
}
} }

View File

@@ -408,6 +408,11 @@ public class GridNetworkNode extends NetworkNode implements INetworkAwareGrid, I
return world.getBlockState(pos).get(NetworkNodeBlock.CONNECTED); return world.getBlockState(pos).get(NetworkNodeBlock.CONNECTED);
} }
@Override
public int getSlotId() {
return -1;
}
@Override @Override
public void onCrafted(PlayerEntity player) { public void onCrafted(PlayerEntity player) {
API.instance().getCraftingGridBehavior().onCrafted(this, currentRecipe, player); API.instance().getCraftingGridBehavior().onCrafted(this, currentRecipe, player);

View File

@@ -60,11 +60,13 @@ public abstract class BaseContainer extends Container {
protected void addPlayerInventory(int xInventory, int yInventory) { protected void addPlayerInventory(int xInventory, int yInventory) {
int id = 0; int id = 0;
int disabledSlotNumber = getDisabledSlotNumber();
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) {
addSlot(new LegacyDisabledSlot(player.inventory, id, x, y)); addSlot(new LegacyDisabledSlot(player.inventory, id, x, y));
} else { } else {
addSlot(new Slot(player.inventory, id, x, y)); addSlot(new Slot(player.inventory, id, x, y));
@@ -75,7 +77,11 @@ public abstract class BaseContainer extends Container {
for (int y = 0; y < 3; y++) { for (int y = 0; y < 3; y++) {
for (int x = 0; x < 9; x++) { for (int x = 0; x < 9; x++) {
if (id == disabledSlotNumber) {
addSlot(new LegacyDisabledSlot(player.inventory, id, xInventory + x * 18, yInventory + y * 18));
} else {
addSlot(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18)); addSlot(new Slot(player.inventory, id, xInventory + x * 18, yInventory + y * 18));
}
id++; id++;
} }
@@ -90,8 +96,12 @@ public abstract class BaseContainer extends Container {
public ItemStack slotClick(int id, int dragType, ClickType clickType, PlayerEntity player) { public ItemStack slotClick(int id, int dragType, ClickType clickType, PlayerEntity 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;
} }
@@ -157,8 +167,8 @@ public abstract class BaseContainer extends Container {
return super.canMergeSlot(stack, slot); return super.canMergeSlot(stack, slot);
} }
protected boolean isHeldItemDisabled() { protected int getDisabledSlotNumber() {
return false; return -1;
} }
@Override @Override

View File

@@ -6,7 +6,6 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftin
import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorUpdateMessage; import com.raoulvdberge.refinedstorage.network.craftingmonitor.CraftingMonitorUpdateMessage;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.CraftingMonitorTile;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.ContainerType; import net.minecraft.inventory.container.ContainerType;
@@ -87,8 +86,8 @@ public class CraftingMonitorContainer extends BaseContainer implements ICrafting
} }
@Override @Override
protected boolean isHeldItemDisabled() { protected int getDisabledSlotNumber() {
return craftingMonitor instanceof WirelessCraftingMonitor; return craftingMonitor.getSlotId();
} }
@Override @Override

View File

@@ -52,7 +52,7 @@ public class FilterContainer extends BaseContainer {
} }
@Override @Override
protected boolean isHeldItemDisabled() { protected int getDisabledSlotNumber() {
return true; return getPlayer().inventory.currentItem;
} }
} }

View File

@@ -19,9 +19,7 @@ import com.raoulvdberge.refinedstorage.container.slot.legacy.LegacyFilterSlot;
import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider; import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider;
import com.raoulvdberge.refinedstorage.tile.BaseTile; import com.raoulvdberge.refinedstorage.tile.BaseTile;
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.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.IContainerListener; import net.minecraft.inventory.container.IContainerListener;
@@ -283,8 +281,7 @@ public class GridContainer extends BaseContainer implements ICraftingGridListene
} }
@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;
} }
} }

View File

@@ -29,7 +29,9 @@ public class GridContainerFactory implements IContainerFactory<GridContainer> {
stack = data.readItemStack(); stack = data.readItemStack();
} }
Pair<IGrid, TileEntity> grid = API.instance().getGridManager().createGrid(id, inv.player, stack, pos); int slotId = data.readInt();
Pair<IGrid, TileEntity> grid = API.instance().getGridManager().createGrid(id, inv.player, stack, pos, slotId);
return new GridContainer(grid.getLeft(), grid.getRight() instanceof BaseTile ? (BaseTile) grid.getRight() : null, inv.player, windowId); return new GridContainer(grid.getLeft(), grid.getRight() instanceof BaseTile ? (BaseTile) grid.getRight() : null, inv.player, windowId);
} }

View File

@@ -11,11 +11,11 @@ import net.minecraftforge.fml.network.IContainerFactory;
public class WirelessCraftingMonitorContainerFactory implements IContainerFactory<CraftingMonitorContainer> { public class WirelessCraftingMonitorContainerFactory implements IContainerFactory<CraftingMonitorContainer> {
@Override @Override
public CraftingMonitorContainer create(int windowId, PlayerInventory inv, PacketBuffer data) { public CraftingMonitorContainer create(int windowId, PlayerInventory inv, PacketBuffer data) {
int invIndex = data.readInt(); int slotId = data.readInt();
ItemStack stack = inv.getStackInSlot(invIndex); ItemStack stack = inv.getStackInSlot(slotId);
WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, null); WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, null, slotId);
return new CraftingMonitorContainer(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null, inv.player, windowId); return new CraftingMonitorContainer(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null, inv.player, windowId);
} }

View File

@@ -44,7 +44,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
ItemStack stack = player.getHeldItem(hand); ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote) { if (!world.isRemote) {
applyNetwork(world.getServer(), stack, n -> n.getNetworkItemManager().open(player, player.getHeldItem(hand)), player::sendMessage); applyNetwork(world.getServer(), stack, n -> n.getNetworkItemManager().open(player, player.getHeldItem(hand), player.inventory.currentItem), player::sendMessage);
} }
return ActionResult.newResult(ActionResultType.SUCCESS, stack); return ActionResult.newResult(ActionResultType.SUCCESS, stack);

View File

@@ -38,16 +38,8 @@ public class WirelessCraftingMonitorItem extends NetworkItem {
@Nonnull @Nonnull
@Override @Override
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
int invIndex = 0; return new WirelessCraftingMonitorNetworkItem(handler, player, stack, slotId);
for (int i = 0; i < player.inventory.getSizeInventory(); ++i) {
if (player.inventory.getStackInSlot(i) == stack) {
invIndex = i;
break;
}
}
return new WirelessCraftingMonitorNetworkItem(handler, player, stack, invIndex);
} }
public static Optional<UUID> getTabSelected(ItemStack stack) { public static Optional<UUID> getTabSelected(ItemStack stack) {

View File

@@ -34,8 +34,8 @@ public class WirelessFluidGridItem extends NetworkItem {
@Nonnull @Nonnull
@Override @Override
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessFluidGridNetworkItem(handler, player, stack); return new WirelessFluidGridNetworkItem(handler, player, stack, slotId);
} }
public static int getSortingType(ItemStack stack) { public static int getSortingType(ItemStack stack) {

View File

@@ -34,8 +34,8 @@ public class WirelessGridItem extends NetworkItem {
@Override @Override
@Nonnull @Nonnull
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack) { public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessGridNetworkItem(handler, player, stack); return new WirelessGridNetworkItem(handler, player, stack, slotId);
} }
public static int getViewType(ItemStack stack) { public static int getViewType(ItemStack stack) {

View File

@@ -51,7 +51,7 @@ public class PortableGridBlockItem extends EnergyBlockItem {
ItemStack stack = player.getHeldItem(hand); ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote) { if (!world.isRemote) {
API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack); API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack, player.inventory.currentItem);
} }
return ActionResult.newResult(ActionResultType.SUCCESS, stack); return ActionResult.newResult(ActionResultType.SUCCESS, stack);

View File

@@ -34,9 +34,9 @@ public class OpenNetworkItemMessage {
ItemStack stack = player.inventory.getStackInSlot(message.slotId); ItemStack stack = player.inventory.getStackInSlot(message.slotId);
if (stack.getItem() instanceof NetworkItem) { if (stack.getItem() instanceof NetworkItem) {
((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack), player::sendMessage); ((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack, message.slotId), player::sendMessage);
} else if (stack.getItem() instanceof PortableGridBlockItem) { } else if (stack.getItem() instanceof PortableGridBlockItem) {
API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, player, stack); API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, player, stack, message.slotId);
} }
}); });
} }

View File

@@ -103,7 +103,7 @@ public class PortableGridBakedModel extends DelegateBakedModel {
@Nullable @Nullable
@Override @Override
public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) { public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) {
PortableGrid portableGrid = new PortableGrid(null, stack); PortableGrid portableGrid = new PortableGrid(null, stack, -1);
IBakedModel myDisk = null; IBakedModel myDisk = null;

View File

@@ -37,4 +37,6 @@ public interface ICraftingMonitor {
void onTabSelectionChanged(Optional<UUID> taskId); void onTabSelectionChanged(Optional<UUID> taskId);
void onTabPageChanged(int page); void onTabPageChanged(int page);
int getSlotId();
} }

View File

@@ -33,10 +33,12 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
private BlockPos nodePos; private BlockPos nodePos;
private int tabPage; private int tabPage;
private Optional<UUID> tabSelected; private Optional<UUID> tabSelected;
private int slotId;
public WirelessCraftingMonitor(ItemStack stack, @Nullable MinecraftServer server) { public WirelessCraftingMonitor(ItemStack stack, @Nullable MinecraftServer server, int slotId) {
this.stack = stack; this.stack = stack;
this.server = server; this.server = server;
this.slotId = slotId;
this.nodeDimension = WirelessCraftingMonitorItem.getDimension(stack); this.nodeDimension = WirelessCraftingMonitorItem.getDimension(stack);
this.nodePos = new BlockPos(WirelessCraftingMonitorItem.getX(stack), WirelessCraftingMonitorItem.getY(stack), WirelessCraftingMonitorItem.getZ(stack)); this.nodePos = new BlockPos(WirelessCraftingMonitorItem.getX(stack), WirelessCraftingMonitorItem.getY(stack), WirelessCraftingMonitorItem.getZ(stack));
@@ -151,4 +153,9 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
RS.NETWORK_HANDLER.sendToServer(new WirelessCraftingMonitorSettingsUpdateMessage(tabSelected, tabPage)); RS.NETWORK_HANDLER.sendToServer(new WirelessCraftingMonitorSettingsUpdateMessage(tabSelected, tabPage));
} }
} }
@Override
public int getSlotId() {
return slotId;
}
} }

View File

@@ -41,6 +41,7 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
private final MinecraftServer server; private final MinecraftServer server;
private final DimensionType nodeDimension; private final DimensionType nodeDimension;
private final BlockPos nodePos; private final BlockPos nodePos;
private final int slotId;
private int sortingType; private int sortingType;
private int sortingDirection; private int sortingDirection;
@@ -60,11 +61,12 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
StackUtils.writeItems(handler, 0, stack.getTag()); StackUtils.writeItems(handler, 0, stack.getTag());
})); }));
public WirelessFluidGrid(ItemStack stack, @Nullable MinecraftServer server) { public WirelessFluidGrid(ItemStack stack, @Nullable MinecraftServer server, int slotId) {
this.stack = stack; this.stack = stack;
this.server = server; this.server = server;
this.nodeDimension = WirelessFluidGridItem.getDimension(stack); this.nodeDimension = WirelessFluidGridItem.getDimension(stack);
this.nodePos = new BlockPos(WirelessFluidGridItem.getX(stack), WirelessFluidGridItem.getY(stack), WirelessFluidGridItem.getZ(stack)); this.nodePos = new BlockPos(WirelessFluidGridItem.getX(stack), WirelessFluidGridItem.getY(stack), WirelessFluidGridItem.getZ(stack));
this.slotId = slotId;
this.sortingType = WirelessFluidGridItem.getSortingType(stack); this.sortingType = WirelessFluidGridItem.getSortingType(stack);
this.sortingDirection = WirelessFluidGridItem.getSortingDirection(stack); this.sortingDirection = WirelessFluidGridItem.getSortingDirection(stack);
@@ -293,6 +295,11 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
return true; return true;
} }
@Override
public int getSlotId() {
return slotId;
}
@Override @Override
public void onClosed(PlayerEntity player) { public void onClosed(PlayerEntity player) {
INetwork network = getNetwork(); INetwork network = getNetwork();

View File

@@ -41,6 +41,7 @@ public class WirelessGrid implements INetworkAwareGrid {
private final MinecraftServer server; private final MinecraftServer server;
private final DimensionType nodeDimension; private final DimensionType nodeDimension;
private final BlockPos nodePos; private final BlockPos nodePos;
private final int slotId;
private int viewType; private int viewType;
private int sortingType; private int sortingType;
@@ -61,11 +62,12 @@ public class WirelessGrid implements INetworkAwareGrid {
StackUtils.writeItems(handler, 0, stack.getTag()); StackUtils.writeItems(handler, 0, stack.getTag());
}); });
public WirelessGrid(ItemStack stack, @Nullable MinecraftServer server) { public WirelessGrid(ItemStack stack, @Nullable MinecraftServer server, int slotId) {
this.stack = stack; this.stack = stack;
this.server = server; this.server = server;
this.nodeDimension = WirelessGridItem.getDimension(stack); this.nodeDimension = WirelessGridItem.getDimension(stack);
this.nodePos = new BlockPos(WirelessGridItem.getX(stack), WirelessGridItem.getY(stack), WirelessGridItem.getZ(stack)); this.nodePos = new BlockPos(WirelessGridItem.getX(stack), WirelessGridItem.getY(stack), WirelessGridItem.getZ(stack));
this.slotId = slotId;
this.viewType = WirelessGridItem.getViewType(stack); this.viewType = WirelessGridItem.getViewType(stack);
this.sortingType = WirelessGridItem.getSortingType(stack); this.sortingType = WirelessGridItem.getSortingType(stack);
@@ -299,6 +301,11 @@ public class WirelessGrid implements INetworkAwareGrid {
return true; return true;
} }
@Override
public int getSlotId() {
return slotId;
}
@Override @Override
public void onClosed(PlayerEntity player) { public void onClosed(PlayerEntity player) {
INetwork network = getNetwork(); INetwork network = getNetwork();

View File

@@ -71,6 +71,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
@Nullable @Nullable
private PlayerEntity player; private PlayerEntity player;
private ItemStack stack; private ItemStack stack;
private int slotId;
private int sortingType; private int sortingType;
private int sortingDirection; private int sortingDirection;
@@ -135,9 +136,10 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
} }
})); }));
public PortableGrid(@Nullable PlayerEntity player, ItemStack stack) { public PortableGrid(@Nullable PlayerEntity player, ItemStack stack, int slotId) {
this.player = player; this.player = player;
this.stack = stack; this.stack = stack;
this.slotId = slotId;
this.sortingType = WirelessGridItem.getSortingType(stack); this.sortingType = WirelessGridItem.getSortingType(stack);
this.sortingDirection = WirelessGridItem.getSortingDirection(stack); this.sortingDirection = WirelessGridItem.getSortingDirection(stack);
@@ -435,6 +437,11 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
return hasDisk(); return hasDisk();
} }
@Override
public int getSlotId() {
return slotId;
}
@Nullable @Nullable
private UUID getDiskId() { private UUID getDiskId() {
return !hasDisk() ? null : ((IStorageDiskProvider) disk.getStackInSlot(0).getItem()).getId(disk.getStackInSlot(0)); return !hasDisk() ? null : ((IStorageDiskProvider) disk.getStackInSlot(0).getItem()).getId(disk.getStackInSlot(0));

View File

@@ -535,6 +535,11 @@ public class PortableGridTile extends BaseTile 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() {