diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index 13c077059..3af06856c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -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> e) { e.getRegistry().register(new UpgradeWithEnchantedBookRecipeSerializer().setRegistryName(RS.ID, "upgrade_with_enchanted_book")); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 924a76229..eebc8372d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -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 diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java index 2233b97f6..66e707897 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/GridNetworkNode.java @@ -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 diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index 05ccdf39a..c915548b3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -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; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemInsertHeld.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemInsertHeld.java.off deleted file mode 100644 index 372458f8c..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemInsertHeld.java.off +++ /dev/null @@ -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 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); - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemPull.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemPull.java.off deleted file mode 100644 index 91c9fa6c6..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridItemPull.java.off +++ /dev/null @@ -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 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); - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java index 11cace6c3..dc5c2cce5 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java @@ -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) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemInsertHeldMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemInsertHeldMessage.java new file mode 100644 index 000000000..009ddb70f --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemInsertHeldMessage.java @@ -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 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); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemPullMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemPullMessage.java new file mode 100644 index 000000000..70f27f4ca --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemPullMessage.java @@ -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 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); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java index d8951b937..86b2aa3e6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java @@ -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 implements IScreenInfo @Override public String getSearchFieldText() { - return searchField == null ? "" : searchField.getText(); + return searchField.getText(); } @Override @@ -441,7 +443,11 @@ public class GridScreen extends BaseScreen 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 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)); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java index fb38b62ec..c68c91840 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/BaseGridView.java @@ -42,7 +42,7 @@ public abstract class BaseGridView implements IGridView { List> 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() ); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/NetworkUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/NetworkUtils.java index 5a6266ed7..369140d7e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/NetworkUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/NetworkUtils.java @@ -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 + } } } }