diff --git a/CHANGELOG.md b/CHANGELOG.md index c5994925c..8b0dea418 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.9.8 - Fixed server crash when scrolling in Grid (Darkere) +- Fixed various issues of things working without power (Darkere) ### 1.9.7 - Added functionality to move items in the Grid with shift/ctrl + scrolling (Darkere) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/CraftingGridBehavior.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/CraftingGridBehavior.java index e3efb20d2..3363e6c80 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/CraftingGridBehavior.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/CraftingGridBehavior.java @@ -92,7 +92,7 @@ public class CraftingGridBehavior implements ICraftingGridBehavior { int maxCrafted = crafted.getMaxStackSize(); int amountCrafted = 0; - boolean useNetwork = network != null; + boolean useNetwork = network != null && grid.isGridActive(); IStackList availableItems = null; if (useNetwork) { @@ -170,7 +170,7 @@ public class CraftingGridBehavior implements ICraftingGridBehavior { // Only if we are a crafting grid. Pattern grids can just be emptied. if (grid.getGridType() == GridType.CRAFTING) { // If we are connected, try to insert into network. If it fails, stop. - if (network != null) { + if (network != null && grid.isGridActive()) { if (!network.insertItem(slot, slot.getCount(), Action.SIMULATE).isEmpty()) { return; } else { @@ -200,7 +200,7 @@ public class CraftingGridBehavior implements ICraftingGridBehavior { boolean found = false; // If we are connected, first try to get the possibilities from the network - if (network != null) { + if (network != null && grid.isGridActive()) { for (ItemStack possibility : possibilities) { ItemStack took = network.extractItem(possibility, 1, IComparer.COMPARE_NBT, Action.PERFORM); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 28b1c4306..825a388eb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -36,7 +36,7 @@ public class FluidGridHandler implements IFluidGridHandler { public void onExtract(ServerPlayerEntity player, UUID id, boolean shift) { FluidStack stack = network.getFluidStorageCache().getList().get(id); - if (stack == null || stack.getAmount() < FluidAttributes.BUCKET_VOLUME || !network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) { + if (stack == null || stack.getAmount() < FluidAttributes.BUCKET_VOLUME || !network.getSecurityManager().hasPermission(Permission.EXTRACT, player) || !network.canRun()) { return; } @@ -63,7 +63,7 @@ public class FluidGridHandler implements IFluidGridHandler { @Override @Nonnull public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) { - if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) { + if (!network.getSecurityManager().hasPermission(Permission.INSERT, player) || !network.canRun()) { return container; } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 2ad4dd686..4232695a6 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -48,7 +48,7 @@ public class ItemGridHandler implements IItemGridHandler { public void onExtract(ServerPlayerEntity player, UUID id, int preferredSlot, int flags) { ItemStack item = network.getItemStorageCache().getList().get(id); - if (item == null || !network.getSecurityManager().hasPermission(Permission.EXTRACT, player)) { + if (item == null || !network.getSecurityManager().hasPermission(Permission.EXTRACT, player) || !network.canRun()) { return; } @@ -133,7 +133,7 @@ public class ItemGridHandler implements IItemGridHandler { @Override @Nonnull public ItemStack onInsert(ServerPlayerEntity player, ItemStack stack, boolean single) { - if (!network.getSecurityManager().hasPermission(Permission.INSERT, player)) { + if (!network.getSecurityManager().hasPermission(Permission.INSERT, player) || !network.canRun()) { return stack; } @@ -157,7 +157,7 @@ public class ItemGridHandler implements IItemGridHandler { @Override public void onInsertHeldItem(ServerPlayerEntity player, boolean single) { - if (player.inventory.getItemStack().isEmpty() || !network.getSecurityManager().hasPermission(Permission.INSERT, player)) { + if (player.inventory.getItemStack().isEmpty() || !network.getSecurityManager().hasPermission(Permission.INSERT, player) || !network.canRun()) { return; } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java index b9600b085..bc826a393 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/grid/handler/PortableFluidGridHandler.java @@ -28,6 +28,10 @@ public class PortableFluidGridHandler implements IFluidGridHandler { @Override public void onExtract(ServerPlayerEntity player, UUID id, boolean shift) { + if (!portableGrid.isGridActive()) { + return; + } + FluidStack stack = portableGrid.getFluidCache().getList().get(id); if (stack == null || stack.getAmount() < FluidAttributes.BUCKET_VOLUME) { @@ -71,6 +75,10 @@ public class PortableFluidGridHandler implements IFluidGridHandler { @Override @Nonnull public ItemStack onInsert(ServerPlayerEntity player, ItemStack container) { + if (!portableGrid.isGridActive()) { + return container; + } + Pair result = StackUtils.getFluid(container, true); if (!result.getValue().isEmpty() && portableGrid.getFluidStorage().insert(result.getValue(), result.getValue().getAmount(), Action.SIMULATE).isEmpty()) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/GridNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/GridNetworkNode.java index a30aad782..c953c7279 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/GridNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/GridNetworkNode.java @@ -429,19 +429,32 @@ public class GridNetworkNode extends NetworkNode implements INetworkAwareGrid, I @Override public void onClear(PlayerEntity player) { - if (type == GridType.CRAFTING && network != null && network.getSecurityManager().hasPermission(Permission.INSERT, player)) { - for (int i = 0; i < matrix.getSizeInventory(); ++i) { - ItemStack slot = matrix.getStackInSlot(i); + if (type == GridType.CRAFTING) { + if (network != null && network.canRun() && network.getSecurityManager().hasPermission(Permission.INSERT, player)) { + for (int i = 0; i < matrix.getSizeInventory(); ++i) { + ItemStack slot = matrix.getStackInSlot(i); - if (!slot.isEmpty()) { - matrix.setInventorySlotContents(i, network.insertItem(slot, slot.getCount(), Action.PERFORM)); + if (!slot.isEmpty()) { + matrix.setInventorySlotContents(i, network.insertItem(slot, slot.getCount(), Action.PERFORM)); - network.getItemStorageTracker().changed(player, slot.copy()); + network.getItemStorageTracker().changed(player, slot.copy()); + } + } + } else { + for (int i = 0; i < matrix.getSizeInventory(); i++) { + ItemStack slot = matrix.getStackInSlot(i); + + if (!slot.isEmpty()) { + player.inventory.addItemStackToInventory(matrix.getStackInSlot(i)); + } + + onCraftingMatrixChanged(); } } } else if (type == GridType.PATTERN) { clearMatrix(); } + } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java b/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java index cb9138efe..4ae593fee 100644 --- a/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java +++ b/src/main/java/com/refinedmods/refinedstorage/integration/jei/GridRecipeTransferHandler.java @@ -102,9 +102,11 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler gridStacks = ((GridScreen) container.getScreenInfoProvider()).getView().getAllStacks(); // Check grid - for (IGridStack gridStack : gridStacks) { - if (gridStack instanceof ItemGridStack) { - tracker.addAvailableStack(((ItemGridStack) gridStack).getStack(), gridStack); + if (container.getGrid().isGridActive()) { + for (IGridStack gridStack : gridStacks) { + if (gridStack instanceof ItemGridStack) { + tracker.addAvailableStack(((ItemGridStack) gridStack).getStack(), gridStack); + } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java index 93d6a7e55..b6257e3a2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemGridScrollMessage.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.network.grid; import com.refinedmods.refinedstorage.container.GridContainer; +import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; @@ -36,8 +37,9 @@ public class GridItemGridScrollMessage { public static void handle(GridItemGridScrollMessage message, Supplier ctx) { ctx.get().enqueueWork(() -> { - if (ctx.get().getSender() != null && ctx.get().getSender().openContainer instanceof GridContainer) { - ((GridContainer) ctx.get().getSender().openContainer).getGrid().getItemHandler().onGridScroll(ctx.get().getSender(), message.id, message.shift, message.up); + ServerPlayerEntity player = ctx.get().getSender(); + if (player != null && player.openContainer instanceof GridContainer && ((GridContainer) player.openContainer).getGrid().getItemHandler() != null) { + ((GridContainer) player.openContainer).getGrid().getItemHandler().onGridScroll(player, message.id, message.shift, message.up); } }); ctx.get().setPacketHandled(true); diff --git a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemInventoryScrollMessage.java b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemInventoryScrollMessage.java index bbb9b2bdb..71daaf9ca 100644 --- a/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemInventoryScrollMessage.java +++ b/src/main/java/com/refinedmods/refinedstorage/network/grid/GridItemInventoryScrollMessage.java @@ -1,6 +1,7 @@ package com.refinedmods.refinedstorage.network.grid; import com.refinedmods.refinedstorage.container.GridContainer; +import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.network.PacketBuffer; import net.minecraftforge.fml.network.NetworkEvent; @@ -29,8 +30,9 @@ public class GridItemInventoryScrollMessage { public static void handle(GridItemInventoryScrollMessage message, Supplier ctx) { ctx.get().enqueueWork(() -> { - if (ctx.get().getSender() != null && ctx.get().getSender().openContainer instanceof GridContainer) { - ((GridContainer) ctx.get().getSender().openContainer).getGrid().getItemHandler().onInventoryScroll(ctx.get().getSender(), message.slot, message.shift, message.up); + ServerPlayerEntity player = ctx.get().getSender(); + if (player != null && player.openContainer instanceof GridContainer && ((GridContainer) player.openContainer).getGrid().getItemHandler() != null) { + ((GridContainer) player.openContainer).getGrid().getItemHandler().onInventoryScroll(player, message.slot, message.shift, message.up); } }); ctx.get().setPacketHandled(true); diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java index 166bf539f..488db1397 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/grid/GridScreen.java @@ -448,16 +448,14 @@ public class GridScreen extends BaseScreen implements IScreenInfo RS.NETWORK_HANDLER.sendToServer(new GridPatternCreateMessage(((GridNetworkNode) grid).getPos())); + return true; + } else if (clickedClear) { + minecraft.getSoundHandler().play(SimpleSound.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); + + RS.NETWORK_HANDLER.sendToServer(new GridClearMessage()); + return true; } else if (grid.isGridActive()) { - if (clickedClear) { - minecraft.getSoundHandler().play(SimpleSound.master(SoundEvents.UI_BUTTON_CLICK, 1.0F)); - - RS.NETWORK_HANDLER.sendToServer(new GridClearMessage()); - - return true; - } - ItemStack held = container.getPlayer().inventory.getItemStack(); if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && !held.isEmpty() && (clickedButton == 0 || clickedButton == 1)) {