From 373a130f6feb038067cfa4e83239c0268cf5c0d1 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 12 Feb 2023 10:25:16 +0100 Subject: [PATCH 1/6] Bump to v1.11.6 --- CHANGELOG.md | 2 ++ build.gradle | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9ef0cc9f..7b036e181 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [v1.11.5] - 2023-02-12 + ### Fixed - Fixed some craftable items not showing as craftable in JEI diff --git a/build.gradle b/build.gradle index e8d1de153..6eb028f77 100755 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ apply plugin: 'maven-publish' group = 'com.refinedmods' archivesBaseName = 'refinedstorage' -version = '1.11.5' +version = '1.11.6' if (System.getenv('GITHUB_SHA') != null) { version += '+' + System.getenv('GITHUB_SHA').substring(0, 7) From 7b4f733fac4d6bfbdf5d0e17390ef464794c9918 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sun, 12 Feb 2023 11:10:09 +0100 Subject: [PATCH 2/6] Add changelog from v1.10.5. --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b036e181..b41fe6b11 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,13 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Ported to Minecraft 1.19.2. +## [v1.10.5] - 2023-02-12 + +### Fixed + +- Fixed rare multithreading crash +- Fixed Constructor being able to drop more than the maximum stack size for an item + ## [v1.10.4] - 2022-12-20 ### Fixed From c799e29a8a7c82b499e23f989383f26f14745bad Mon Sep 17 00:00:00 2001 From: FeldrinH Date: Sat, 18 Feb 2023 16:59:17 +0200 Subject: [PATCH 3/6] Fix #3441 by correctly synchronizing focus on screen init --- .../refinedstorage/screen/CrafterManagerScreen.java | 3 +++ .../com/refinedmods/refinedstorage/screen/grid/GridScreen.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/main/java/com/refinedmods/refinedstorage/screen/CrafterManagerScreen.java b/src/main/java/com/refinedmods/refinedstorage/screen/CrafterManagerScreen.java index 8a791ebf6..d3743a186 100644 --- a/src/main/java/com/refinedmods/refinedstorage/screen/CrafterManagerScreen.java +++ b/src/main/java/com/refinedmods/refinedstorage/screen/CrafterManagerScreen.java @@ -70,6 +70,9 @@ public class CrafterManagerScreen extends BaseScreen implements IScreen } addRenderableWidget(searchField); + if (searchField.isFocused()) { + setFocused(searchField); + } if (grid.getViewType() != -1) { addSideButton(new GridViewTypeSideButton(this, grid)); From ba2eda5c68a75bede7bba8fe20f88ca117236bc3 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 30 Mar 2023 16:42:13 +0200 Subject: [PATCH 4/6] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b41fe6b11..3be76a8fe 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed + +- Fixed not being able to search with JEI when the Grid is open. + ## [v1.11.5] - 2023-02-12 ### Fixed From fbf2d6760b7e6ef070d3231387521e48c54d46c5 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 30 Mar 2023 16:53:29 +0200 Subject: [PATCH 5/6] Reduced block updates when a controller is turning on and off constantly. Fixes part of #3468 --- CHANGELOG.md | 1 + .../refinedstorage/apiimpl/network/Network.java | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3be76a8fe..e46a5be63 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Fixed not being able to search with JEI when the Grid is open. +- Reduced block updates when a controller is turning on and off constantly. ## [v1.11.5] - 2023-02-12 diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java index a24afc297..dbfac940a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java @@ -56,6 +56,7 @@ import java.util.function.Predicate; public class Network implements INetwork, IRedstoneConfigurable { private static final int THROTTLE_INACTIVE_TO_ACTIVE = 20; private static final int THROTTLE_ACTIVE_TO_INACTIVE = 4; + private static final int THROTTLE_ENERGY_TYPE_CHANGE = 20; private static final String NBT_ENERGY = "Energy"; private static final String NBT_ITEM_STORAGE_TRACKER_ID = "ItemStorageTrackerId"; @@ -89,6 +90,7 @@ public class Network implements INetwork, IRedstoneConfigurable { private boolean throttlingDisabled = true; // Will be enabled after first update private boolean couldRun; private int ticksSinceUpdateChanged; + private int ticksSinceEnergyTypeChanged; private int ticks; private long[] tickTimes = new long[100]; private int tickCounter = 0; @@ -213,12 +215,16 @@ public class Network implements INetwork, IRedstoneConfigurable { ControllerBlock.EnergyType energyType = getEnergyType(); if (lastEnergyType != energyType) { - lastEnergyType = energyType; - - BlockState state = level.getBlockState(pos); - if (state.getBlock() instanceof ControllerBlock) { - level.setBlockAndUpdate(pos, state.setValue(ControllerBlock.ENERGY_TYPE, energyType)); + ++ticksSinceEnergyTypeChanged; + if (ticksSinceEnergyTypeChanged > THROTTLE_ENERGY_TYPE_CHANGE) { + lastEnergyType = energyType; + BlockState state = level.getBlockState(pos); + if (state.getBlock() instanceof ControllerBlock) { + level.setBlockAndUpdate(pos, state.setValue(ControllerBlock.ENERGY_TYPE, energyType)); + } } + } else { + ticksSinceEnergyTypeChanged = 0; } tickTimes[tickCounter % tickTimes.length] = Util.getNanos() - tickStart; From 045b90a463298c273f9775d5d21aed1a8a55c02e Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 30 Mar 2023 17:25:54 +0200 Subject: [PATCH 6/6] Fixed a bunch of issues where chunks would unintentionally be loaded by RS. Fixes part of #3468 --- CHANGELOG.md | 1 + .../refinedstorage/apiimpl/network/Network.java | 4 +++- .../apiimpl/network/NetworkNodeGraph.java | 6 ++++-- .../apiimpl/network/node/DestructorNetworkNode.java | 10 ++++++++++ .../network/node/FluidInterfaceNetworkNode.java | 2 +- .../apiimpl/network/node/NetworkNode.java | 8 ++++++-- .../network/node/NetworkTransmitterNetworkNode.java | 4 ++-- .../apiimpl/network/node/RootNetworkNode.java | 6 +++++- .../craftingmonitor/WirelessCraftingMonitor.java | 12 +++++++----- .../blockentity/grid/WirelessFluidGrid.java | 10 ++++++---- .../blockentity/grid/WirelessGrid.java | 9 ++++++--- .../refinedmods/refinedstorage/item/NetworkItem.java | 8 +++++++- 12 files changed, 58 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e46a5be63..b8fa8af9c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Fixed - Fixed not being able to search with JEI when the Grid is open. +- Fixed a bunch of issues where chunks would unintentionally be loaded by RS. - Reduced block updates when a controller is turning on and off constantly. ## [v1.11.5] - 2023-02-12 diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java index dbfac940a..978044e13 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java @@ -101,8 +101,10 @@ public class Network implements INetwork, IRedstoneConfigurable { this.type = type; this.root = new RootNetworkNode(this, level, pos); this.nodeGraph.addListener(() -> { + if (!level.isLoaded(pos)) { + return; + } BlockEntity blockEntity = level.getBlockEntity(pos); - if (blockEntity instanceof ControllerBlockEntity) { ((ControllerBlockEntity) blockEntity).getDataManager().sendParameterToWatchers(ControllerBlockEntity.NODES); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraph.java index 8ac6f8338..e53001320 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -118,9 +118,11 @@ public class NetworkNodeGraph implements INetworkNodeGraph { for (Direction checkSide : Direction.values()) { if (checkSide != side) { // Avoid going backward INetworkNode nodeOnSide = NetworkUtils.getNodeFromBlockEntity(blockEntity); - if (nodeOnSide == node) { - operator.apply(level, pos.relative(checkSide), checkSide.getOpposite()); + BlockPos relativePos = pos.relative(checkSide); + if (level.isLoaded(relativePos)) { + operator.apply(level, relativePos, checkSide.getOpposite()); + } } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java index 7cd066ecf..359f2a044 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/DestructorNetworkNode.java @@ -100,6 +100,9 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I private void pickupItems() { BlockPos front = pos.relative(getDirection()); + if (!level.isLoaded(front)) { + return; + } List droppedItems = level.getEntitiesOfClass(ItemEntity.class, new AABB(front)); @@ -124,6 +127,9 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I private void breakBlock() { BlockPos front = pos.relative(getDirection()); + if (!level.isLoaded(front)) { + return; + } BlockState frontBlockState = level.getBlockState(front); Block frontBlock = frontBlockState.getBlock(); ItemStack frontStack = frontBlock.getCloneItemStack( @@ -174,6 +180,10 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I private void breakFluid() { BlockPos front = pos.relative(getDirection()); + if (!level.isLoaded(front)) { + return; + } + BlockState frontBlockState = level.getBlockState(front); Block frontBlock = frontBlockState.getBlock(); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java index bdca98482..f09941beb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/FluidInterfaceNetworkNode.java @@ -45,7 +45,7 @@ public class FluidInterfaceNetworkNode extends NetworkNode { protected void onContentsChanged() { super.onContentsChanged(); - if (!level.isClientSide) { + if (!level.isClientSide && level.isLoaded(pos)) { ((FluidInterfaceBlockEntity) level.getBlockEntity(pos)).getDataManager().sendParameterToWatchers(FluidInterfaceBlockEntity.TANK_IN); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java index 53f1e43af..34448cdd3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -237,12 +237,16 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { @Override public void visit(Operator operator) { for (Direction facing : Direction.values()) { - INetworkNode oppositeNode = NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(pos.relative(facing))); + BlockPos facingPos = pos.relative(facing); + if (!level.isLoaded(facingPos)) { + return; + } + INetworkNode oppositeNode = NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(facingPos)); if (oppositeNode == null) { continue; } if (canConduct(facing) && oppositeNode.canReceive(facing.getOpposite())) { - operator.apply(level, pos.relative(facing), facing.getOpposite()); + operator.apply(level, facingPos, facing.getOpposite()); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java index e3eda5f7f..28085d492 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkTransmitterNetworkNode.java @@ -116,11 +116,11 @@ public class NetworkTransmitterNetworkNode extends NetworkNode { if (!isSameDimension()) { Level dimensionLevel = level.getServer().getLevel(receiverDimension); - if (dimensionLevel != null && dimensionLevel.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { + if (dimensionLevel != null && dimensionLevel.isLoaded(receiver) && dimensionLevel.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { operator.apply(dimensionLevel, receiver, null); } } else { - if (level.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { + if (level.isLoaded(receiver) && level.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { operator.apply(level, receiver, null); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RootNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RootNetworkNode.java index 8f5665328..ecf25684d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RootNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RootNetworkNode.java @@ -107,7 +107,11 @@ public class RootNetworkNode implements INetworkNode, INetworkNodeVisitor { @Override public void visit(Operator operator) { for (Direction facing : Direction.values()) { - operator.apply(level, pos.relative(facing), facing.getOpposite()); + BlockPos relativePos = pos.relative(facing); + if (!level.isLoaded(relativePos)) { + continue; + } + operator.apply(level, relativePos, facing.getOpposite()); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/blockentity/craftingmonitor/WirelessCraftingMonitor.java b/src/main/java/com/refinedmods/refinedstorage/blockentity/craftingmonitor/WirelessCraftingMonitor.java index 1e7eab006..76bd21987 100644 --- a/src/main/java/com/refinedmods/refinedstorage/blockentity/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/refinedmods/refinedstorage/blockentity/craftingmonitor/WirelessCraftingMonitor.java @@ -4,15 +4,14 @@ 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.blockentity.data.BlockEntitySynchronizationParameter; 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; -import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter; import com.refinedmods.refinedstorage.util.NetworkUtils; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; - import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -99,10 +98,13 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { private INetwork getNetwork() { Level level = server.getLevel(nodeDimension); - if (level != null) { - return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos))); + if (level == null) { + return null; } - return null; + if (!level.isLoaded(nodePos)) { + return null; + } + return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos))); } public ItemStack getStack() { diff --git a/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessFluidGrid.java b/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessFluidGrid.java index 24726afad..01f537251 100644 --- a/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessFluidGrid.java +++ b/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessFluidGrid.java @@ -22,7 +22,6 @@ import com.refinedmods.refinedstorage.util.StackUtils; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; - import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -93,10 +92,13 @@ public class WirelessFluidGrid implements INetworkAwareGrid { @Nullable public INetwork getNetwork() { Level level = server.getLevel(nodeDimension); - if (level != null) { - return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos))); + if (level == null) { + return null; } - return null; + if (!level.isLoaded(nodePos)) { + return null; + } + return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos))); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessGrid.java b/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessGrid.java index da5e5921f..e937f1f3a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessGrid.java +++ b/src/main/java/com/refinedmods/refinedstorage/blockentity/grid/WirelessGrid.java @@ -95,10 +95,13 @@ public class WirelessGrid implements INetworkAwareGrid { @Nullable public INetwork getNetwork() { Level level = server.getLevel(nodeDimension); - if (level != null) { - return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos))); + if (level == null) { + return null; } - return null; + if (!level.isLoaded(nodePos)) { + return null; + } + return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos))); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java b/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java index 64c60f5a8..4cf0db5a2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/NetworkItem.java @@ -104,7 +104,13 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv return; } - INetwork network = NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(nodeLevel.getBlockEntity(new BlockPos(getX(stack), getY(stack), getZ(stack))))); + BlockPos pos = new BlockPos(getX(stack), getY(stack), getZ(stack)); + if (!nodeLevel.isLoaded(pos)) { + onError.accept(notFound); + return; + } + + INetwork network = NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(nodeLevel.getBlockEntity(pos))); if (network == null) { onError.accept(notFound); return;