Networks that are not chunkloaded won't work. Cherry-picked with some changes from #2618
This commit is contained in:
@@ -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)
|
||||
|
@@ -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()) {
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user