Basic item grid actions (insert/extract)

This commit is contained in:
raoulvdberge
2019-10-08 21:54:11 +02:00
parent e3cec30e18
commit 209cbf421b
12 changed files with 139 additions and 108 deletions

View File

@@ -1,11 +1,13 @@
package com.raoulvdberge.refinedstorage;
import com.raoulvdberge.refinedstorage.api.network.grid.GridType;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeListener;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.GridFactoryGridBlock;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.CableNetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.diskdrive.DiskDriveNetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.storage.FluidStorageType;
import com.raoulvdberge.refinedstorage.apiimpl.storage.ItemStorageType;
@@ -36,6 +38,7 @@ import net.minecraft.inventory.container.ContainerType;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.crafting.IRecipeSerializer;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.api.distmarker.Dist;
@@ -85,18 +88,19 @@ public final class RS {
API.instance().getStorageDiskRegistry().add(StorageDiskFactoryItem.ID, new StorageDiskFactoryItem());
API.instance().getStorageDiskRegistry().add(StorageDiskFactoryFluid.ID, new StorageDiskFactoryFluid());
API.instance().getNetworkNodeRegistry().add(DiskDriveNetworkNode.ID, (tag, world, pos) -> {
DiskDriveNetworkNode drive = new DiskDriveNetworkNode(world, pos);
drive.read(tag);
return drive;
});
API.instance().getNetworkNodeRegistry().add(CableNetworkNode.ID, (tag, world, pos) -> new CableNetworkNode(world, pos));
API.instance().getNetworkNodeRegistry().add(GridNetworkNode.ID, (tag, world, pos) -> new GridNetworkNode(world, pos, GridType.NORMAL));
API.instance().getNetworkNodeRegistry().add(DiskDriveNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new DiskDriveNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(CableNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new CableNetworkNode(world, pos)));
API.instance().getNetworkNodeRegistry().add(GridNetworkNode.ID, (tag, world, pos) -> readAndReturn(tag, new GridNetworkNode(world, pos, GridType.NORMAL)));
API.instance().getGridManager().add(GridFactoryGridBlock.ID, new GridFactoryGridBlock());
}
private INetworkNode readAndReturn(CompoundNBT tag, NetworkNode node) {
node.read(tag);
return node;
}
@SubscribeEvent
public void onRegisterRecipeSerializers(RegistryEvent.Register<IRecipeSerializer<?>> e) {
e.getRegistry().register(new UpgradeWithEnchantedBookRecipeSerializer().setRegistryName(RS.ID, "upgrade_with_enchanted_book"));

View File

@@ -102,7 +102,7 @@ public class ItemGridHandler implements IItemGridHandler {
}
}
network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridExtractUsage);
// TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridExtractUsage);
}
}
@@ -116,7 +116,7 @@ public class ItemGridHandler implements IItemGridHandler {
ItemStack remainder = network.insertItem(stack, stack.getCount(), Action.PERFORM);
network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage);
// TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage);
return remainder;
}
@@ -148,7 +148,7 @@ public class ItemGridHandler implements IItemGridHandler {
player.updateHeldItem();
network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage);
// TODO network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage);
}
@Override

View File

@@ -451,7 +451,7 @@ public class GridNetworkNode extends NetworkNode implements IGridNetworkAware, I
@Override
public boolean isActive() {
return world.getBlockState(pos).get(NodeBlock.CONNECTED);
return getBlockState().get(NodeBlock.CONNECTED);
}
@Override

View File

@@ -33,6 +33,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor {
protected INetwork network;
protected World world;
protected BlockPos pos;
private BlockState cachedBlockState;
protected int ticks;
protected RedstoneMode redstoneMode = RedstoneMode.IGNORE;
@Nullable
@@ -60,6 +61,14 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor {
this.pos = pos;
}
public BlockState getBlockState() {
if (cachedBlockState == null) {
cachedBlockState = world.getBlockState(pos);
}
return cachedBlockState;
}
public RedstoneMode getRedstoneMode() {
return redstoneMode;
}

View File

@@ -1,42 +0,0 @@
package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.container.GridContainer;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.Container;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class MessageGridItemInsertHeld extends MessageHandlerPlayerToServer<MessageGridItemInsertHeld> implements IMessage {
private boolean single;
public MessageGridItemInsertHeld() {
}
public MessageGridItemInsertHeld(boolean single) {
this.single = single;
}
@Override
public void fromBytes(ByteBuf buf) {
single = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeBoolean(single);
}
@Override
public void handle(MessageGridItemInsertHeld message, ServerPlayerEntity player) {
Container container = player.openContainer;
if (container instanceof ContainerGrid) {
IGrid grid = ((ContainerGrid) container).getGrid();
if (grid.getItemHandler() != null) {
grid.getItemHandler().onInsertHeldItem(player, message.single);
}
}
}
}

View File

@@ -1,46 +0,0 @@
package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.container.GridContainer;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.Container;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
public class MessageGridItemPull extends MessageHandlerPlayerToServer<MessageGridItemPull> implements IMessage {
private int hash;
private int flags;
public MessageGridItemPull() {
}
public MessageGridItemPull(int hash, int flags) {
this.hash = hash;
this.flags = flags;
}
@Override
public void fromBytes(ByteBuf buf) {
hash = buf.readInt();
flags = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeInt(hash);
buf.writeInt(flags);
}
@Override
public void handle(MessageGridItemPull message, ServerPlayerEntity player) {
Container container = player.openContainer;
if (container instanceof ContainerGrid) {
IGrid grid = ((ContainerGrid) container).getGrid();
if (grid.getItemHandler() != null) {
grid.getItemHandler().onExtract(player, message.hash, message.flags);
}
}
}
}

View File

@@ -4,6 +4,8 @@ import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.network.disk.StorageDiskSizeRequestMessage;
import com.raoulvdberge.refinedstorage.network.disk.StorageDiskSizeResponseMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridItemDeltaMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridItemInsertHeldMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridItemPullMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridItemUpdateMessage;
import com.raoulvdberge.refinedstorage.network.tiledata.TileDataParameterMessage;
import com.raoulvdberge.refinedstorage.network.tiledata.TileDataParameterUpdateMessage;
@@ -34,6 +36,8 @@ public class NetworkHandler {
handler.registerMessage(id++, TileDataParameterUpdateMessage.class, TileDataParameterUpdateMessage::encode, TileDataParameterUpdateMessage::decode, TileDataParameterUpdateMessage::handle);
handler.registerMessage(id++, GridItemUpdateMessage.class, GridItemUpdateMessage::encode, GridItemUpdateMessage::decode, GridItemUpdateMessage::handle);
handler.registerMessage(id++, GridItemDeltaMessage.class, GridItemDeltaMessage::encode, GridItemDeltaMessage::decode, GridItemDeltaMessage::handle);
handler.registerMessage(id++, GridItemPullMessage.class, GridItemPullMessage::encode, GridItemPullMessage::decode, GridItemPullMessage::handle);
handler.registerMessage(id++, GridItemInsertHeldMessage.class, GridItemInsertHeldMessage::encode, GridItemInsertHeldMessage::decode, GridItemInsertHeldMessage::handle);
}
public void sendToServer(Object message) {

View File

@@ -0,0 +1,46 @@
package com.raoulvdberge.refinedstorage.network.grid;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.container.GridContainer;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.Container;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.network.NetworkEvent;
import java.util.function.Supplier;
public class GridItemInsertHeldMessage {
private boolean single;
public GridItemInsertHeldMessage(boolean single) {
this.single = single;
}
public static GridItemInsertHeldMessage decode(PacketBuffer buf) {
return new GridItemInsertHeldMessage(buf.readBoolean());
}
public static void encode(GridItemInsertHeldMessage message, PacketBuffer buf) {
buf.writeBoolean(message.single);
}
public static void handle(GridItemInsertHeldMessage message, Supplier<NetworkEvent.Context> ctx) {
ServerPlayerEntity player = ctx.get().getSender();
ctx.get().enqueueWork(() -> {
if (player != null) {
Container container = player.openContainer;
if (container instanceof GridContainer) {
IGrid grid = ((GridContainer) container).getGrid();
if (grid.getItemHandler() != null) {
grid.getItemHandler().onInsertHeldItem(player, message.single);
}
}
}
});
ctx.get().setPacketHandled(true);
}
}

View File

@@ -0,0 +1,48 @@
package com.raoulvdberge.refinedstorage.network.grid;
import com.raoulvdberge.refinedstorage.api.network.grid.IGrid;
import com.raoulvdberge.refinedstorage.container.GridContainer;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.inventory.container.Container;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.fml.network.NetworkEvent;
import java.util.function.Supplier;
public class GridItemPullMessage {
private int hash;
private int flags;
public GridItemPullMessage(int hash, int flags) {
this.hash = hash;
this.flags = flags;
}
public static GridItemPullMessage decode(PacketBuffer buf) {
return new GridItemPullMessage(buf.readInt(), buf.readInt());
}
public static void encode(GridItemPullMessage message, PacketBuffer buf) {
buf.writeInt(message.hash);
buf.writeInt(message.flags);
}
public static void handle(GridItemPullMessage message, Supplier<NetworkEvent.Context> ctx) {
ServerPlayerEntity player = ctx.get().getSender();
ctx.get().enqueueWork(() -> {
if (player != null) {
Container container = player.openContainer;
if (container instanceof GridContainer) {
IGrid grid = ((GridContainer) container).getGrid();
if (grid.getItemHandler() != null) {
grid.getItemHandler().onExtract(player, message.hash, message.flags);
}
}
}
});
ctx.get().setPacketHandled(true);
}
}

View File

@@ -10,6 +10,8 @@ import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler
import com.raoulvdberge.refinedstorage.apiimpl.network.node.GridNetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.render.ElementDrawers;
import com.raoulvdberge.refinedstorage.container.GridContainer;
import com.raoulvdberge.refinedstorage.network.grid.GridItemInsertHeldMessage;
import com.raoulvdberge.refinedstorage.network.grid.GridItemPullMessage;
import com.raoulvdberge.refinedstorage.screen.BaseScreen;
import com.raoulvdberge.refinedstorage.screen.IScreenInfoProvider;
import com.raoulvdberge.refinedstorage.screen.grid.sorting.*;
@@ -215,7 +217,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
@Override
public String getSearchFieldText() {
return searchField == null ? "" : searchField.getText();
return searchField.getText();
}
@Override
@@ -441,7 +443,11 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
ItemStack held = container.getPlayer().inventory.getItemStack();
if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) {
// @TODO RS.INSTANCE.network.sendToServer(grid.getGridType() == GridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1));
if (grid.getGridType() == GridType.NORMAL) {
RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1));
} else if (grid.getGridType() == GridType.FLUID) {
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridFluidInsertHeld());
}
return true;
}
@@ -472,7 +478,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
flags |= IItemGridHandler.EXTRACT_SINGLE;
}
// @TODO RS.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags));
RS.NETWORK_HANDLER.sendToServer(new GridItemPullMessage(stack.getHash(), flags));
}
}

View File

@@ -42,7 +42,7 @@ public abstract class BaseGridView implements IGridView {
List<Predicate<IGridStack>> filters = GridFilterParser.getFilters(
grid,
screen.getSearchField() != null ? screen.getSearchField().getText() : "",
screen.getSearchFieldText(),
(grid.getTabSelected() >= 0 && grid.getTabSelected() < grid.getTabs().size()) ? grid.getTabs().get(grid.getTabSelected()).getFilters() : grid.getFilters()
);

View File

@@ -28,11 +28,13 @@ public class NetworkUtils {
if (proxy != null) {
INetworkNode node = proxy.getNode();
for (Permission permission : permissionsRequired) {
if (!node.getNetwork().getSecurityManager().hasPermission(permission, player)) {
WorldUtils.sendNoPermissionMessage(player);
if (node.getNetwork() != null) {
for (Permission permission : permissionsRequired) {
if (!node.getNetwork().getSecurityManager().hasPermission(permission, player)) {
WorldUtils.sendNoPermissionMessage(player);
return true; // Avoid placing blocks
return true; // Avoid placing blocks
}
}
}
}