Fixed a bunch of issues where chunks would unintentionally be loaded by RS. Fixes part of #3468

This commit is contained in:
raoulvdberge
2023-03-30 17:25:54 +02:00
parent fbf2d6760b
commit 045b90a463
12 changed files with 58 additions and 22 deletions

View File

@@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
### Fixed ### Fixed
- Fixed not being able to search with JEI when the Grid is open. - 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. - Reduced block updates when a controller is turning on and off constantly.
## [v1.11.5] - 2023-02-12 ## [v1.11.5] - 2023-02-12

View File

@@ -101,8 +101,10 @@ public class Network implements INetwork, IRedstoneConfigurable {
this.type = type; this.type = type;
this.root = new RootNetworkNode(this, level, pos); this.root = new RootNetworkNode(this, level, pos);
this.nodeGraph.addListener(() -> { this.nodeGraph.addListener(() -> {
if (!level.isLoaded(pos)) {
return;
}
BlockEntity blockEntity = level.getBlockEntity(pos); BlockEntity blockEntity = level.getBlockEntity(pos);
if (blockEntity instanceof ControllerBlockEntity) { if (blockEntity instanceof ControllerBlockEntity) {
((ControllerBlockEntity) blockEntity).getDataManager().sendParameterToWatchers(ControllerBlockEntity.NODES); ((ControllerBlockEntity) blockEntity).getDataManager().sendParameterToWatchers(ControllerBlockEntity.NODES);
} }

View File

@@ -118,9 +118,11 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
for (Direction checkSide : Direction.values()) { for (Direction checkSide : Direction.values()) {
if (checkSide != side) { // Avoid going backward if (checkSide != side) { // Avoid going backward
INetworkNode nodeOnSide = NetworkUtils.getNodeFromBlockEntity(blockEntity); INetworkNode nodeOnSide = NetworkUtils.getNodeFromBlockEntity(blockEntity);
if (nodeOnSide == node) { 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());
}
} }
} }
} }

View File

@@ -100,6 +100,9 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
private void pickupItems() { private void pickupItems() {
BlockPos front = pos.relative(getDirection()); BlockPos front = pos.relative(getDirection());
if (!level.isLoaded(front)) {
return;
}
List<ItemEntity> droppedItems = level.getEntitiesOfClass(ItemEntity.class, new AABB(front)); List<ItemEntity> droppedItems = level.getEntitiesOfClass(ItemEntity.class, new AABB(front));
@@ -124,6 +127,9 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
private void breakBlock() { private void breakBlock() {
BlockPos front = pos.relative(getDirection()); BlockPos front = pos.relative(getDirection());
if (!level.isLoaded(front)) {
return;
}
BlockState frontBlockState = level.getBlockState(front); BlockState frontBlockState = level.getBlockState(front);
Block frontBlock = frontBlockState.getBlock(); Block frontBlock = frontBlockState.getBlock();
ItemStack frontStack = frontBlock.getCloneItemStack( ItemStack frontStack = frontBlock.getCloneItemStack(
@@ -174,6 +180,10 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
private void breakFluid() { private void breakFluid() {
BlockPos front = pos.relative(getDirection()); BlockPos front = pos.relative(getDirection());
if (!level.isLoaded(front)) {
return;
}
BlockState frontBlockState = level.getBlockState(front); BlockState frontBlockState = level.getBlockState(front);
Block frontBlock = frontBlockState.getBlock(); Block frontBlock = frontBlockState.getBlock();

View File

@@ -45,7 +45,7 @@ public class FluidInterfaceNetworkNode extends NetworkNode {
protected void onContentsChanged() { protected void onContentsChanged() {
super.onContentsChanged(); super.onContentsChanged();
if (!level.isClientSide) { if (!level.isClientSide && level.isLoaded(pos)) {
((FluidInterfaceBlockEntity) level.getBlockEntity(pos)).getDataManager().sendParameterToWatchers(FluidInterfaceBlockEntity.TANK_IN); ((FluidInterfaceBlockEntity) level.getBlockEntity(pos)).getDataManager().sendParameterToWatchers(FluidInterfaceBlockEntity.TANK_IN);
} }

View File

@@ -237,12 +237,16 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor {
@Override @Override
public void visit(Operator operator) { public void visit(Operator operator) {
for (Direction facing : Direction.values()) { 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) { if (oppositeNode == null) {
continue; continue;
} }
if (canConduct(facing) && oppositeNode.canReceive(facing.getOpposite())) { if (canConduct(facing) && oppositeNode.canReceive(facing.getOpposite())) {
operator.apply(level, pos.relative(facing), facing.getOpposite()); operator.apply(level, facingPos, facing.getOpposite());
} }
} }
} }

View File

@@ -116,11 +116,11 @@ public class NetworkTransmitterNetworkNode extends NetworkNode {
if (!isSameDimension()) { if (!isSameDimension()) {
Level dimensionLevel = level.getServer().getLevel(receiverDimension); 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); operator.apply(dimensionLevel, receiver, null);
} }
} else { } else {
if (level.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) { if (level.isLoaded(receiver) && level.getBlockEntity(receiver) instanceof NetworkReceiverBlockEntity) {
operator.apply(level, receiver, null); operator.apply(level, receiver, null);
} }
} }

View File

@@ -107,7 +107,11 @@ public class RootNetworkNode implements INetworkNode, INetworkNodeVisitor {
@Override @Override
public void visit(Operator operator) { public void visit(Operator operator) {
for (Direction facing : Direction.values()) { 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());
} }
} }
} }

View File

@@ -4,15 +4,14 @@ import com.refinedmods.refinedstorage.RS;
import com.refinedmods.refinedstorage.api.autocrafting.ICraftingManager; import com.refinedmods.refinedstorage.api.autocrafting.ICraftingManager;
import com.refinedmods.refinedstorage.api.autocrafting.task.ICraftingTask; import com.refinedmods.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.refinedmods.refinedstorage.api.network.INetwork; 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.inventory.player.PlayerSlot;
import com.refinedmods.refinedstorage.item.NetworkItem; import com.refinedmods.refinedstorage.item.NetworkItem;
import com.refinedmods.refinedstorage.item.WirelessCraftingMonitorItem; import com.refinedmods.refinedstorage.item.WirelessCraftingMonitorItem;
import com.refinedmods.refinedstorage.network.craftingmonitor.WirelessCraftingMonitorSettingsUpdateMessage; import com.refinedmods.refinedstorage.network.craftingmonitor.WirelessCraftingMonitorSettingsUpdateMessage;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.NetworkUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -99,11 +98,14 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
private INetwork getNetwork() { private INetwork getNetwork() {
Level level = server.getLevel(nodeDimension); Level level = server.getLevel(nodeDimension);
if (level != null) { if (level == null) {
return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos)));
}
return null; return null;
} }
if (!level.isLoaded(nodePos)) {
return null;
}
return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos)));
}
public ItemStack getStack() { public ItemStack getStack() {
return stack; return stack;

View File

@@ -22,7 +22,6 @@ import com.refinedmods.refinedstorage.util.StackUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
@@ -93,11 +92,14 @@ public class WirelessFluidGrid implements INetworkAwareGrid {
@Nullable @Nullable
public INetwork getNetwork() { public INetwork getNetwork() {
Level level = server.getLevel(nodeDimension); Level level = server.getLevel(nodeDimension);
if (level != null) { if (level == null) {
return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos)));
}
return null; return null;
} }
if (!level.isLoaded(nodePos)) {
return null;
}
return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos)));
}
@Override @Override
public IStorageCacheListener createListener(ServerPlayer player) { public IStorageCacheListener createListener(ServerPlayer player) {

View File

@@ -95,11 +95,14 @@ public class WirelessGrid implements INetworkAwareGrid {
@Nullable @Nullable
public INetwork getNetwork() { public INetwork getNetwork() {
Level level = server.getLevel(nodeDimension); Level level = server.getLevel(nodeDimension);
if (level != null) { if (level == null) {
return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos)));
}
return null; return null;
} }
if (!level.isLoaded(nodePos)) {
return null;
}
return NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromBlockEntity(level.getBlockEntity(nodePos)));
}
@Override @Override
public IStorageCacheListener createListener(ServerPlayer player) { public IStorageCacheListener createListener(ServerPlayer player) {

View File

@@ -104,7 +104,13 @@ public abstract class NetworkItem extends EnergyItem implements INetworkItemProv
return; 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) { if (network == null) {
onError.accept(notFound); onError.accept(notFound);
return; return;