Networks that are not chunkloaded won't work. Cherry-picked with some changes from #2618

This commit is contained in:
raoulvdberge
2020-07-16 23:52:59 +02:00
parent 9cbc25efe4
commit c3a3927cbe
4 changed files with 16 additions and 20 deletions

View File

@@ -1,6 +1,8 @@
# Refined Storage Changelog
### 1.9.2
- Fixed crash with forge version 67 (Darkere)
- Fixed crash with Forge version 67 (Darkere)
- Networks that are in a chunk that isn't loaded will no longer work, they will turn off. Chunkload the Controller to maintain a functioning network over long distances (Darkere/raoulvdberge)
### 1.9.1
- Fixed server crash (raoulvdberge)

View File

@@ -81,6 +81,7 @@ public class Network implements INetwork, IRedstoneConfigurable {
private int lastEnergyUsage;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private boolean amILoaded = false;
private boolean throttlingDisabled = true; // Will be enabled after first update
private boolean couldRun;
private int ticksSinceUpdateChanged;
@@ -114,7 +115,7 @@ public class Network implements INetwork, IRedstoneConfigurable {
@Override
public boolean canRun() {
return energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(world, pos);
return amILoaded && energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(world, pos);
}
@Override
@@ -135,6 +136,8 @@ public class Network implements INetwork, IRedstoneConfigurable {
@Override
public void update() {
if (!world.isRemote) {
amILoaded = world.isBlockPresent(pos);
updateEnergyUsage();
if (canRun()) {

View File

@@ -1,6 +1,7 @@
package com.refinedmods.refinedstorage.apiimpl.network;
import com.refinedmods.refinedstorage.api.network.INetwork;
import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
import com.refinedmods.refinedstorage.apiimpl.API;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.event.TickEvent;
@@ -18,6 +19,14 @@ public class NetworkListener {
}
e.world.getProfiler().endSection();
e.world.getProfiler().startSection("network node ticking");
for (INetworkNode node : API.instance().getNetworkNodeManager((ServerWorld) e.world).all()) {
node.update();
}
e.world.getProfiler().endSection();
}
}
}

View File

@@ -3,34 +3,16 @@ package com.refinedmods.refinedstorage.apiimpl.network;
import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
import com.refinedmods.refinedstorage.api.network.security.Permission;
import com.refinedmods.refinedstorage.api.util.Action;
import com.refinedmods.refinedstorage.apiimpl.API;
import com.refinedmods.refinedstorage.util.NetworkUtils;
import com.refinedmods.refinedstorage.util.WorldUtils;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.Direction;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorld;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.world.BlockEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
public class NetworkNodeListener {
@SubscribeEvent
public void onWorldTick(TickEvent.WorldTickEvent e) {
if (!e.world.isRemote()) {
if (e.phase == TickEvent.Phase.END) {
e.world.getProfiler().startSection("network node ticking");
for (INetworkNode node : API.instance().getNetworkNodeManager((ServerWorld) e.world).all()) {
node.update();
}
e.world.getProfiler().endSection();
}
}
}
@SubscribeEvent
public void onBlockPlace(BlockEvent.EntityPlaceEvent e) {
if (!e.getWorld().isRemote() && e.getEntity() instanceof PlayerEntity) {