From c3a3927cbebea1df9e83a6f49f6da0caa097a14d Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 16 Jul 2020 23:52:59 +0200 Subject: [PATCH] Networks that are not chunkloaded won't work. Cherry-picked with some changes from #2618 --- CHANGELOG.md | 4 +++- .../apiimpl/network/Network.java | 5 ++++- .../apiimpl/network/NetworkListener.java | 9 +++++++++ .../apiimpl/network/NetworkNodeListener.java | 18 ------------------ 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6da2b4eab..f05376af8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) 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 9d7125b70..a11280e51 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/Network.java @@ -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()) { diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkListener.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkListener.java index b37043299..5e4bf4bfb 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkListener.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkListener.java @@ -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(); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeListener.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeListener.java index d464e8bd0..22074df79 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeListener.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/NetworkNodeListener.java @@ -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) {