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
|
# Refined Storage Changelog
|
||||||
|
|
||||||
### 1.9.2
|
### 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
|
### 1.9.1
|
||||||
- Fixed server crash (raoulvdberge)
|
- Fixed server crash (raoulvdberge)
|
||||||
|
@@ -81,6 +81,7 @@ public class Network implements INetwork, IRedstoneConfigurable {
|
|||||||
private int lastEnergyUsage;
|
private int lastEnergyUsage;
|
||||||
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
|
||||||
|
|
||||||
|
private boolean amILoaded = false;
|
||||||
private boolean throttlingDisabled = true; // Will be enabled after first update
|
private boolean throttlingDisabled = true; // Will be enabled after first update
|
||||||
private boolean couldRun;
|
private boolean couldRun;
|
||||||
private int ticksSinceUpdateChanged;
|
private int ticksSinceUpdateChanged;
|
||||||
@@ -114,7 +115,7 @@ public class Network implements INetwork, IRedstoneConfigurable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canRun() {
|
public boolean canRun() {
|
||||||
return energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(world, pos);
|
return amILoaded && energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(world, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -135,6 +136,8 @@ public class Network implements INetwork, IRedstoneConfigurable {
|
|||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
if (!world.isRemote) {
|
if (!world.isRemote) {
|
||||||
|
amILoaded = world.isBlockPresent(pos);
|
||||||
|
|
||||||
updateEnergyUsage();
|
updateEnergyUsage();
|
||||||
|
|
||||||
if (canRun()) {
|
if (canRun()) {
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package com.refinedmods.refinedstorage.apiimpl.network;
|
package com.refinedmods.refinedstorage.apiimpl.network;
|
||||||
|
|
||||||
import com.refinedmods.refinedstorage.api.network.INetwork;
|
import com.refinedmods.refinedstorage.api.network.INetwork;
|
||||||
|
import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
|
||||||
import com.refinedmods.refinedstorage.apiimpl.API;
|
import com.refinedmods.refinedstorage.apiimpl.API;
|
||||||
import net.minecraft.world.server.ServerWorld;
|
import net.minecraft.world.server.ServerWorld;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
@@ -18,6 +19,14 @@ public class NetworkListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
e.world.getProfiler().endSection();
|
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.node.INetworkNode;
|
||||||
import com.refinedmods.refinedstorage.api.network.security.Permission;
|
import com.refinedmods.refinedstorage.api.network.security.Permission;
|
||||||
import com.refinedmods.refinedstorage.api.util.Action;
|
import com.refinedmods.refinedstorage.api.util.Action;
|
||||||
import com.refinedmods.refinedstorage.apiimpl.API;
|
|
||||||
import com.refinedmods.refinedstorage.util.NetworkUtils;
|
import com.refinedmods.refinedstorage.util.NetworkUtils;
|
||||||
import com.refinedmods.refinedstorage.util.WorldUtils;
|
import com.refinedmods.refinedstorage.util.WorldUtils;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.IWorld;
|
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.event.world.BlockEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
|
|
||||||
public class NetworkNodeListener {
|
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
|
@SubscribeEvent
|
||||||
public void onBlockPlace(BlockEvent.EntityPlaceEvent e) {
|
public void onBlockPlace(BlockEvent.EntityPlaceEvent e) {
|
||||||
if (!e.getWorld().isRemote() && e.getEntity() instanceof PlayerEntity) {
|
if (!e.getWorld().isRemote() && e.getEntity() instanceof PlayerEntity) {
|
||||||
|
Reference in New Issue
Block a user