fix curio bugs and wrong slot being locked fixes #3048

This commit is contained in:
Darkere
2021-09-27 15:32:57 +02:00
parent d98872c310
commit e050f0e90a
29 changed files with 192 additions and 112 deletions

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.api.network.grid;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
@@ -17,11 +18,11 @@ public interface IGridFactory {
*
* @param player the player
* @param stack the stack
* @param slotId the slot id, if applicable, otherwise -1
* @param slot the slot, if applicable, otherwise -1
* @return the grid, or null if a problem occurred
*/
@Nullable
IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId);
IGrid createFromStack(PlayerEntity player, ItemStack stack, PlayerSlot slot);
/**
* Creates a grid from a block. Used when {@link #getType()} is BLOCK.

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.api.network.grid;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
@@ -35,9 +36,9 @@ public interface IGridManager {
* @param id the grid factory id
* @param player the player
* @param stack the stack
* @param slotId the slot id, if applicable, otherwise -1
* @param slot the slot
*/
void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, int slotId);
void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, PlayerSlot slot);
/**
* Creates a grid.
@@ -46,9 +47,9 @@ public interface IGridManager {
* @param player the player
* @param stack the stack, if there is one
* @param pos the block position, if there is one
* @param slotId the slot id, if applicable, otherwise -1
* @param slot the slot, if applicable, otherwise -1
* @return a grid, or null if an error has occurred
*/
@Nullable
Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId);
Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, PlayerSlot slot);
}

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.api.network.item;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -15,9 +16,9 @@ public interface INetworkItemManager {
*
* @param player the player that opened the network item
* @param stack the stack that has been opened
* @param slotId the slot id, if applicable, otherwise -1
* @param slot the slot in the players inventory, otherwise -1
*/
void open(PlayerEntity player, ItemStack stack, int slotId);
void open(PlayerEntity player, ItemStack stack, PlayerSlot slot);
/**
* Called when the player closes a network item.

View File

@@ -1,5 +1,6 @@
package com.refinedmods.refinedstorage.api.network.item;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -15,9 +16,9 @@ public interface INetworkItemProvider {
* @param handler the network item handler
* @param player the player
* @param stack the stack
* @param slotId the slot id, if applicable, otherwise -1
* @param slot the slot in the players inventory or -1
* @return the network item
*/
@Nonnull
INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId);
INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot);
}

View File

@@ -5,6 +5,7 @@ import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.api.network.grid.IGridFactory;
import com.refinedmods.refinedstorage.api.network.grid.IGridManager;
import com.refinedmods.refinedstorage.container.factory.GridContainerProvider;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
@@ -28,16 +29,16 @@ public class GridManager implements IGridManager {
@Override
public void openGrid(ResourceLocation id, ServerPlayerEntity player, BlockPos pos) {
openGrid(id, player, null, pos, -1);
openGrid(id, player, null, pos, new PlayerSlot(-1));
}
@Override
public void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, int slotId) {
openGrid(id, player, stack, null, slotId);
public void openGrid(ResourceLocation id, ServerPlayerEntity player, ItemStack stack, PlayerSlot slot) {
openGrid(id, player, stack, null, slot);
}
private void openGrid(ResourceLocation id, ServerPlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) {
Pair<IGrid, TileEntity> grid = createGrid(id, player, stack, pos, slotId);
private void openGrid(ResourceLocation id, ServerPlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, PlayerSlot slot) {
Pair<IGrid, TileEntity> grid = createGrid(id, player, stack, pos, slot);
if (grid == null) {
return;
}
@@ -55,13 +56,13 @@ public class GridManager implements IGridManager {
buf.writeItemStack(stack);
}
buf.writeInt(slotId);
slot.writePlayerSlot(buf);
});
}
@Override
@Nullable
public Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, int slotId) {
public Pair<IGrid, TileEntity> createGrid(ResourceLocation id, PlayerEntity player, @Nullable ItemStack stack, @Nullable BlockPos pos, PlayerSlot slot) {
IGridFactory factory = factories.get(id);
if (factory == null) {
@@ -72,7 +73,7 @@ public class GridManager implements IGridManager {
TileEntity tile = factory.getRelevantTile(player.world, pos);
if (factory.getType() == GridFactoryType.STACK) {
grid = factory.createFromStack(player, stack, slotId);
grid = factory.createFromStack(player, stack, slot);
} else if (factory.getType() == GridFactoryType.BLOCK) {
grid = factory.createFromBlock(player, pos);
}

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.grid.GridFactoryType;
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.api.network.grid.IGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.grid.GridTile;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -19,7 +20,7 @@ public class GridBlockGridFactory implements IGridFactory {
@Override
@Nullable
public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
public IGrid createFromStack(PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return null;
}

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.grid.GridFactoryType;
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.api.network.grid.IGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.grid.portable.PortableGridTile;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -19,7 +20,7 @@ public class PortableGridBlockGridFactory implements IGridFactory {
@Override
@Nullable
public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
public IGrid createFromStack(PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return null;
}

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.grid.GridFactoryType;
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.api.network.grid.IGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.grid.portable.PortableGrid;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -19,8 +20,8 @@ public class PortableGridGridFactory implements IGridFactory {
@Nullable
@Override
public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
PortableGrid portableGrid = new PortableGrid(player, stack, slotId);
public IGrid createFromStack(PlayerEntity player, ItemStack stack, PlayerSlot slot) {
PortableGrid portableGrid = new PortableGrid(player, stack, slot);
portableGrid.onOpen();

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.grid.GridFactoryType;
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.api.network.grid.IGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.grid.WirelessFluidGrid;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -19,8 +20,8 @@ public class WirelessFluidGridGridFactory implements IGridFactory {
@Nullable
@Override
public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessFluidGrid(stack, player.getServer(), slotId);
public IGrid createFromStack(PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return new WirelessFluidGrid(stack, player.getServer(), slot);
}
@Nullable

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.grid.GridFactoryType;
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.api.network.grid.IGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.grid.WirelessGrid;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -19,8 +20,8 @@ public class WirelessGridGridFactory implements IGridFactory {
@Nullable
@Override
public IGrid createFromStack(PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessGrid(stack, player.getServer(), slotId);
public IGrid createFromStack(PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return new WirelessGrid(stack, player.getServer(), slot);
}
@Nullable

View File

@@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.api.network.item.INetworkItem;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemProvider;
import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.vector.Vector3d;
@@ -24,7 +25,7 @@ public class NetworkItemManager implements INetworkItemManager {
}
@Override
public void open(PlayerEntity player, ItemStack stack, int slotId) {
public void open(PlayerEntity player, ItemStack stack, PlayerSlot slot) {
boolean inRange = false;
for (INetworkNodeGraphEntry entry : network.getNodeGraph().all()) {
@@ -54,7 +55,7 @@ public class NetworkItemManager implements INetworkItemManager {
return;
}
INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack, slotId);
INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack, slot);
if (item.onOpen(network)) {
items.put(player, item);

View File

@@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.api.network.item.INetworkItem;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.api.network.security.Permission;
import com.refinedmods.refinedstorage.container.factory.CraftingMonitorContainerProvider;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessCraftingMonitorItem;
import com.refinedmods.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
import com.refinedmods.refinedstorage.util.WorldUtils;
@@ -22,13 +23,13 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem {
private final INetworkItemManager handler;
private final PlayerEntity player;
private final ItemStack stack;
private final int slotId;
private final PlayerSlot slot;
public WirelessCraftingMonitorNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
public WirelessCraftingMonitorNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot) {
this.handler = handler;
this.player = player;
this.stack = stack;
this.slotId = slotId;
this.slot = slot;
}
@Override
@@ -56,13 +57,11 @@ public class WirelessCraftingMonitorNetworkItem implements INetworkItem {
return false;
}
WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, player.getServer(), slotId);
WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, player.getServer(), slot);
NetworkHooks.openGui(
(ServerPlayerEntity) player,
new CraftingMonitorContainerProvider(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null),
buf -> buf.writeInt(slotId)
);
new CraftingMonitorContainerProvider(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null), slot::writePlayerSlot);
drainEnergy(RS.SERVER_CONFIG.getWirelessCraftingMonitor().getOpenUsage());

View File

@@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.api.network.security.Permission;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.WirelessFluidGridGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessFluidGridItem;
import com.refinedmods.refinedstorage.util.WorldUtils;
import net.minecraft.entity.player.PlayerEntity;
@@ -20,13 +21,13 @@ public class WirelessFluidGridNetworkItem implements INetworkItem {
private final INetworkItemManager handler;
private final PlayerEntity player;
private final ItemStack stack;
private final int slotId;
private final PlayerSlot slot;
public WirelessFluidGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
public WirelessFluidGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot) {
this.handler = handler;
this.player = player;
this.stack = stack;
this.slotId = slotId;
this.slot = slot;
}
@Override
@@ -53,7 +54,7 @@ public class WirelessFluidGridNetworkItem implements INetworkItem {
return false;
}
API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayerEntity) player, stack, slotId);
API.instance().getGridManager().openGrid(WirelessFluidGridGridFactory.ID, (ServerPlayerEntity) player, stack, slot);
drainEnergy(RS.SERVER_CONFIG.getWirelessFluidGrid().getOpenUsage());

View File

@@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.api.network.security.Permission;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.WirelessGridGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessGridItem;
import com.refinedmods.refinedstorage.util.WorldUtils;
import net.minecraft.entity.player.PlayerEntity;
@@ -20,13 +21,13 @@ public class WirelessGridNetworkItem implements INetworkItem {
private final INetworkItemManager handler;
private final PlayerEntity player;
private final ItemStack stack;
private final int slotId;
private final PlayerSlot slot;
public WirelessGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
public WirelessGridNetworkItem(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot) {
this.handler = handler;
this.player = player;
this.stack = stack;
this.slotId = slotId;
this.slot = slot;
}
@Override
@@ -53,7 +54,7 @@ public class WirelessGridNetworkItem implements INetworkItem {
return false;
}
API.instance().getGridManager().openGrid(WirelessGridGridFactory.ID, (ServerPlayerEntity) player, stack, slotId);
API.instance().getGridManager().openGrid(WirelessGridGridFactory.ID, (ServerPlayerEntity) player, stack, slot);
drainEnergy(RS.SERVER_CONFIG.getWirelessGrid().getOpenUsage());

View File

@@ -3,6 +3,7 @@ package com.refinedmods.refinedstorage.container.factory;
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.container.GridContainer;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.BaseTile;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack;
@@ -29,9 +30,9 @@ public class GridContainerFactory implements IContainerFactory<GridContainer> {
stack = data.readItemStack();
}
int slotId = data.readInt();
PlayerSlot slot = new PlayerSlot(data);
Pair<IGrid, TileEntity> grid = API.instance().getGridManager().createGrid(id, inv.player, stack, pos, slotId);
Pair<IGrid, TileEntity> grid = API.instance().getGridManager().createGrid(id, inv.player, stack, pos, slot);
return new GridContainer(grid.getLeft(), grid.getRight() instanceof BaseTile ? (BaseTile) grid.getRight() : null, inv.player, windowId);
}

View File

@@ -2,6 +2,7 @@ package com.refinedmods.refinedstorage.container.factory;
import com.refinedmods.refinedstorage.RSContainers;
import com.refinedmods.refinedstorage.container.CraftingMonitorContainer;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.ItemStack;
@@ -11,11 +12,12 @@ import net.minecraftforge.fml.network.IContainerFactory;
public class WirelessCraftingMonitorContainerFactory implements IContainerFactory<CraftingMonitorContainer> {
@Override
public CraftingMonitorContainer create(int windowId, PlayerInventory inv, PacketBuffer data) {
int slotId = data.readInt();
ItemStack stack = inv.getStackInSlot(slotId);
PlayerSlot slot = new PlayerSlot(data);
WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, null, slotId);
ItemStack stack = slot.getStackFromSlot(inv.player);
WirelessCraftingMonitor wirelessCraftingMonitor = new WirelessCraftingMonitor(stack, null, slot);
return new CraftingMonitorContainer(RSContainers.WIRELESS_CRAFTING_MONITOR, wirelessCraftingMonitor, null, inv.player, windowId);
}

View File

@@ -0,0 +1,76 @@
package com.refinedmods.refinedstorage.inventory.player;
import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.util.PacketBufferUtils;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.Hand;
import net.minecraftforge.common.util.LazyOptional;
import top.theillusivec4.curios.api.CuriosApi;
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
import java.util.Optional;
public class PlayerSlot {
int slot;
String curioSlot;
public PlayerSlot(int slot, String curioSlot) {
this.slot = slot;
this.curioSlot = curioSlot;
}
public PlayerSlot(int slot) {
this.slot = slot;
}
public PlayerSlot(PacketBuffer buffer) {
slot = buffer.readInt();
if (buffer.readBoolean()) {
curioSlot = PacketBufferUtils.readString(buffer);
}
}
public ItemStack getStackFromSlot(PlayerEntity player) {
if (curioSlot == null || !CuriosIntegration.isLoaded()) {
return player.inventory.getStackInSlot(slot);
}
LazyOptional<ICuriosItemHandler> curiosHandler = CuriosApi.getCuriosHelper().getCuriosHandler(player);
Optional<ICurioStacksHandler> stacksHandler = curiosHandler.resolve().flatMap((handler ->
handler.getStacksHandler(curioSlot)
));
Optional<ItemStack> stack = stacksHandler.map(handler -> handler.getStacks().getStackInSlot(slot));
return stack.orElse(ItemStack.EMPTY);
}
public void writePlayerSlot(PacketBuffer buffer) {
buffer.writeInt(slot);
buffer.writeBoolean(curioSlot != null);
if (curioSlot != null) {
buffer.writeString(curioSlot);
}
}
public int getSlotIdInPlayerInventory() {
if (curioSlot != null) {
return -1;
}
return slot;
}
public static PlayerSlot getSlotForHand(PlayerEntity player, Hand hand) {
if (hand == Hand.MAIN_HAND) {
return new PlayerSlot(player.inventory.currentItem);
}
//@Volatile Offhand Slot, could use -1 as we aren't using this anywhere.
return new PlayerSlot(40);
}
}

View File

@@ -2,9 +2,11 @@ package com.refinedmods.refinedstorage.item;
import com.refinedmods.refinedstorage.api.network.INetwork;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemProvider;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.render.Styles;
import com.refinedmods.refinedstorage.util.NetworkUtils;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -38,7 +40,7 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote) {
applyNetwork(world.getServer(), stack, n -> n.getNetworkItemManager().open(player, player.getHeldItem(hand), player.inventory.currentItem), err -> player.sendMessage(err, player.getUniqueID()));
applyNetwork(world.getServer(), stack, n -> n.getNetworkItemManager().open(player, player.getHeldItem(hand), PlayerSlot.getSlotForHand(player, hand)), err -> player.sendMessage(err, player.getUniqueID()));
}
return ActionResult.resultSuccess(stack);
@@ -82,6 +84,11 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
}
}
@Override
public ActionResultType itemInteractionForEntity(ItemStack stack, PlayerEntity playerIn, LivingEntity target, Hand hand) {
return super.itemInteractionForEntity(stack, playerIn, target, hand);
}
@Override
public ActionResultType onItemUse(ItemUseContext ctx) {
ItemStack stack = ctx.getPlayer().getHeldItem(ctx.getHand());

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.network.item.INetworkItem;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.apiimpl.network.item.WirelessCraftingMonitorNetworkItem;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -36,8 +37,8 @@ public class WirelessCraftingMonitorItem extends NetworkItem {
@Nonnull
@Override
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessCraftingMonitorNetworkItem(handler, player, stack, slotId);
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return new WirelessCraftingMonitorNetworkItem(handler, player, stack, slot);
}
public static Optional<UUID> getTabSelected(ItemStack stack) {

View File

@@ -6,6 +6,7 @@ import com.refinedmods.refinedstorage.api.network.item.INetworkItem;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.apiimpl.network.item.WirelessFluidGridNetworkItem;
import com.refinedmods.refinedstorage.apiimpl.network.node.GridNetworkNode;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -32,8 +33,8 @@ public class WirelessFluidGridItem extends NetworkItem {
@Nonnull
@Override
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessFluidGridNetworkItem(handler, player, stack, slotId);
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return new WirelessFluidGridNetworkItem(handler, player, stack, slot);
}
public static int getSortingType(ItemStack stack) {

View File

@@ -6,6 +6,7 @@ import com.refinedmods.refinedstorage.api.network.item.INetworkItem;
import com.refinedmods.refinedstorage.api.network.item.INetworkItemManager;
import com.refinedmods.refinedstorage.apiimpl.network.item.WirelessGridNetworkItem;
import com.refinedmods.refinedstorage.apiimpl.network.node.GridNetworkNode;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -32,8 +33,8 @@ public class WirelessGridItem extends NetworkItem {
@Override
@Nonnull
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, int slotId) {
return new WirelessGridNetworkItem(handler, player, stack, slotId);
public INetworkItem provide(INetworkItemManager handler, PlayerEntity player, ItemStack stack, PlayerSlot slot) {
return new WirelessGridNetworkItem(handler, player, stack, slot);
}
public static int getViewType(ItemStack stack) {

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.RSBlocks;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessGridItem;
import com.refinedmods.refinedstorage.render.Styles;
import net.minecraft.client.util.ITooltipFlag;
@@ -50,7 +51,7 @@ public class PortableGridBlockItem extends EnergyBlockItem {
ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote) {
API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack, player.inventory.currentItem);
API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, (ServerPlayerEntity) player, stack, PlayerSlot.getSlotForHand(player, hand));
}
return ActionResult.resultSuccess(stack);

View File

@@ -2,37 +2,29 @@ package com.refinedmods.refinedstorage.network;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.apiimpl.network.grid.factory.PortableGridGridFactory;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem;
import com.refinedmods.refinedstorage.util.PacketBufferUtils;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.fml.network.NetworkEvent;
import top.theillusivec4.curios.api.CuriosApi;
import top.theillusivec4.curios.api.type.capability.ICuriosItemHandler;
import top.theillusivec4.curios.api.type.inventory.ICurioStacksHandler;
import java.util.Optional;
import java.util.function.Supplier;
public class OpenNetworkItemMessage {
private final int slotId;
private final String curioSlot;
private final PlayerSlot slot;
public OpenNetworkItemMessage(int slotId, String curioSlot) {
this.slotId = slotId;
this.curioSlot = curioSlot;
public OpenNetworkItemMessage(PlayerSlot slot) {
this.slot = slot;
}
public static OpenNetworkItemMessage decode(PacketBuffer buf) {
return new OpenNetworkItemMessage(buf.readInt(), PacketBufferUtils.readString(buf));
return new OpenNetworkItemMessage(new PlayerSlot(buf));
}
public static void encode(OpenNetworkItemMessage message, PacketBuffer buf) {
buf.writeInt(message.slotId);
buf.writeString(message.curioSlot);
message.slot.writePlayerSlot(buf);
}
public static void handle(OpenNetworkItemMessage message, Supplier<NetworkEvent.Context> ctx) {
@@ -40,40 +32,20 @@ public class OpenNetworkItemMessage {
if (player != null) {
ctx.get().enqueueWork(() -> {
ItemStack stack = getStackFromSlot(player, message.slotId, message.curioSlot);
ItemStack stack = message.slot.getStackFromSlot(player);
if (stack == null) {
return;
}
if (stack.getItem() instanceof NetworkItem) {
((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack, message.slotId), err -> player.sendMessage(err, player.getUniqueID()));
((NetworkItem) stack.getItem()).applyNetwork(player.getServer(), stack, n -> n.getNetworkItemManager().open(player, stack, message.slot), err -> player.sendMessage(err, player.getUniqueID()));
} else if (stack.getItem() instanceof PortableGridBlockItem) {
API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, player, stack, message.slotId);
API.instance().getGridManager().openGrid(PortableGridGridFactory.ID, player, stack, message.slot);
}
});
}
ctx.get().setPacketHandled(true);
}
private static ItemStack getStackFromSlot(ServerPlayerEntity player, int slotId, String curioSlot) {
if (curioSlot.isEmpty()) {
return player.inventory.getStackInSlot(slotId);
} else {
LazyOptional<ICuriosItemHandler> curiosHandler = CuriosApi.getCuriosHelper().getCuriosHandler(player);
Optional<ICurioStacksHandler> stacksHandler = curiosHandler.resolve().flatMap((handler ->
handler.getStacksHandler(curioSlot)
));
Optional<ItemStack> stack = stacksHandler.map(handler -> handler.getStacks().getStackInSlot(slotId));
if (stack.isPresent()) {
return stack.get();
}
}
return null;
}
}

View File

@@ -5,6 +5,7 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.refinedmods.refinedstorage.RSBlocks;
import com.refinedmods.refinedstorage.block.PortableGridBlock;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.tile.grid.portable.PortableGrid;
import com.refinedmods.refinedstorage.tile.grid.portable.PortableGridDiskState;
import net.minecraft.block.BlockState;
@@ -111,7 +112,7 @@ public class PortableGridBakedModel extends DelegateBakedModel {
@Nullable
@Override
public IBakedModel getOverrideModel(IBakedModel model, ItemStack stack, @Nullable ClientWorld world, @Nullable LivingEntity entity) {
PortableGrid portableGrid = new PortableGrid(null, stack, -1);
PortableGrid portableGrid = new PortableGrid(null, stack, new PlayerSlot(-1));
if (portableGrid.isGridActive()) {
return new PortableGridItemBakedModel(baseConnected, getDiskModel(portableGrid.getDiskState()));

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.RSItems;
import com.refinedmods.refinedstorage.RSKeyBindings;
import com.refinedmods.refinedstorage.integration.curios.CuriosIntegration;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.network.OpenNetworkItemMessage;
import net.minecraft.client.Minecraft;
import net.minecraft.inventory.IInventory;
@@ -60,7 +61,7 @@ public class KeyInputListener {
Optional<ImmutableTriple<String, Integer, ItemStack>> curio = CuriosApi.getCuriosHelper().findEquippedCurio(stack -> validItems.contains(stack.getItem()), Minecraft.getInstance().player);
if (curio.isPresent()) {
RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(curio.get().getMiddle(), curio.get().getLeft()));
RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(new PlayerSlot(curio.get().getMiddle(), curio.get().getLeft())));
return;
}
}
@@ -68,7 +69,7 @@ public class KeyInputListener {
if (slotFound == -1) {
sendError(new TranslationTextComponent("misc.refinedstorage.network_item.shortcut_not_found", new TranslationTextComponent(items[0].getTranslationKey())));
} else {
RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(slotFound, ""));
RS.NETWORK_HANDLER.sendToServer(new OpenNetworkItemMessage(new PlayerSlot(slotFound)));
}
}

View File

@@ -4,6 +4,7 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.autocrafting.ICraftingManager;
import com.refinedmods.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.refinedmods.refinedstorage.api.network.INetwork;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.WirelessCraftingMonitorItem;
import com.refinedmods.refinedstorage.network.craftingmonitor.WirelessCraftingMonitorSettingsUpdateMessage;
@@ -33,12 +34,12 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
private final BlockPos nodePos;
private int tabPage;
private Optional<UUID> tabSelected;
private final int slotId;
private final PlayerSlot slot;
public WirelessCraftingMonitor(ItemStack stack, @Nullable MinecraftServer server, int slotId) {
public WirelessCraftingMonitor(ItemStack stack, @Nullable MinecraftServer server, PlayerSlot slot) {
this.stack = stack;
this.server = server;
this.slotId = slotId;
this.slot = slot;
this.nodeDimension = NetworkItem.getDimension(stack);
this.nodePos = new BlockPos(NetworkItem.getX(stack), NetworkItem.getY(stack), NetworkItem.getZ(stack));
@@ -155,6 +156,6 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
@Override
public int getSlotId() {
return slotId;
return slot.getSlotIdInPlayerInventory();
}
}

View File

@@ -11,6 +11,7 @@ import com.refinedmods.refinedstorage.api.util.IFilter;
import com.refinedmods.refinedstorage.api.util.IStackList;
import com.refinedmods.refinedstorage.apiimpl.storage.cache.listener.FluidGridStorageCacheListener;
import com.refinedmods.refinedstorage.inventory.item.FilterItemHandler;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.WirelessFluidGridItem;
import com.refinedmods.refinedstorage.network.grid.WirelessFluidGridSettingsUpdateMessage;
@@ -42,7 +43,7 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
private final MinecraftServer server;
private final RegistryKey<World> nodeDimension;
private final BlockPos nodePos;
private final int slotId;
private final PlayerSlot slot;
private int sortingType;
private int sortingDirection;
@@ -62,12 +63,12 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
StackUtils.writeItems(handler, 0, stack.getTag());
}));
public WirelessFluidGrid(ItemStack stack, @Nullable MinecraftServer server, int slotId) {
public WirelessFluidGrid(ItemStack stack, @Nullable MinecraftServer server, PlayerSlot slot) {
this.stack = stack;
this.server = server;
this.nodeDimension = NetworkItem.getDimension(stack);
this.nodePos = new BlockPos(NetworkItem.getX(stack), NetworkItem.getY(stack), NetworkItem.getZ(stack));
this.slotId = slotId;
this.slot = slot;
this.sortingType = WirelessFluidGridItem.getSortingType(stack);
this.sortingDirection = WirelessFluidGridItem.getSortingDirection(stack);
@@ -297,7 +298,7 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
@Override
public int getSlotId() {
return slotId;
return slot.getSlotIdInPlayerInventory();
}
@Override

View File

@@ -11,6 +11,7 @@ import com.refinedmods.refinedstorage.api.util.IFilter;
import com.refinedmods.refinedstorage.api.util.IStackList;
import com.refinedmods.refinedstorage.apiimpl.storage.cache.listener.ItemGridStorageCacheListener;
import com.refinedmods.refinedstorage.inventory.item.FilterItemHandler;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.WirelessGridItem;
import com.refinedmods.refinedstorage.network.grid.WirelessGridSettingsUpdateMessage;
@@ -42,7 +43,7 @@ public class WirelessGrid implements INetworkAwareGrid {
private final MinecraftServer server;
private final RegistryKey<World> nodeDimension;
private final BlockPos nodePos;
private final int slotId;
private final PlayerSlot slot;
private int viewType;
private int sortingType;
@@ -63,12 +64,12 @@ public class WirelessGrid implements INetworkAwareGrid {
StackUtils.writeItems(handler, 0, stack.getTag());
});
public WirelessGrid(ItemStack stack, @Nullable MinecraftServer server, int slotId) {
public WirelessGrid(ItemStack stack, @Nullable MinecraftServer server, PlayerSlot slot) {
this.stack = stack;
this.server = server;
this.nodeDimension = NetworkItem.getDimension(stack);
this.nodePos = new BlockPos(NetworkItem.getX(stack), NetworkItem.getY(stack), NetworkItem.getZ(stack));
this.slotId = slotId;
this.slot = slot;
this.viewType = WirelessGridItem.getViewType(stack);
this.sortingType = WirelessGridItem.getSortingType(stack);
@@ -303,7 +304,7 @@ public class WirelessGrid implements INetworkAwareGrid {
@Override
public int getSlotId() {
return slotId;
return slot.getSlotIdInPlayerInventory();
}
@Override

View File

@@ -33,6 +33,7 @@ import com.refinedmods.refinedstorage.apiimpl.storage.tracker.ItemStorageTracker
import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler;
import com.refinedmods.refinedstorage.inventory.item.FilterItemHandler;
import com.refinedmods.refinedstorage.inventory.item.validator.StorageDiskItemValidator;
import com.refinedmods.refinedstorage.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.WirelessGridItem;
import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem;
import com.refinedmods.refinedstorage.network.grid.PortableGridSettingsUpdateMessage;
@@ -73,7 +74,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
@Nullable
private PlayerEntity player;
private ItemStack stack;
private final int slotId;
private final PlayerSlot slot;
private int sortingType;
private int sortingDirection;
@@ -135,10 +136,10 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
}
}));
public PortableGrid(@Nullable PlayerEntity player, ItemStack stack, int slotId) {
public PortableGrid(@Nullable PlayerEntity player, ItemStack stack, PlayerSlot slot) {
this.player = player;
this.stack = stack;
this.slotId = slotId;
this.slot = slot;
this.sortingType = WirelessGridItem.getSortingType(stack);
this.sortingDirection = WirelessGridItem.getSortingDirection(stack);
@@ -435,7 +436,7 @@ public class PortableGrid implements IGrid, IPortableGrid, IStorageDiskContainer
@Override
public int getSlotId() {
return slotId;
return slot.getSlotIdInPlayerInventory();
}
@Nullable