Basic item grid actions (insert/extract)
This commit is contained in:
@@ -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"));
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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()
|
||||
);
|
||||
|
||||
|
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user