From 2ea05bce5f1b8030fd616b321ecdac4b7b0303ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 5 Jan 2016 18:27:57 +0100 Subject: [PATCH] Reworked computer P2P tunnel to use events, and cleaned up reconnection, fixes #2087. Just `onTunnelNetworkChange` with tickable is apparently less exhaustive, and less stable. This now avoids issues with network splits and reconnects not being handled in some cases. Also simplified reconnection; there was some duplicate logic in there, with a missing validity check which potentially led to invalid connections. --- .../parts/p2p/PartP2POpenComputers.java | 114 ++++-------------- 1 file changed, 26 insertions(+), 88 deletions(-) diff --git a/src/main/java/appeng/parts/p2p/PartP2POpenComputers.java b/src/main/java/appeng/parts/p2p/PartP2POpenComputers.java index bfb4885d..43a8bf1c 100644 --- a/src/main/java/appeng/parts/p2p/PartP2POpenComputers.java +++ b/src/main/java/appeng/parts/p2p/PartP2POpenComputers.java @@ -24,7 +24,6 @@ import javax.annotation.Nullable; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IIcon; -import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; @@ -39,29 +38,22 @@ import li.cil.oc.api.network.Node; import li.cil.oc.api.network.SidedEnvironment; import li.cil.oc.api.network.Visibility; -import appeng.api.networking.IGridNode; -import appeng.api.networking.ticking.IGridTickable; -import appeng.api.networking.ticking.TickRateModulation; -import appeng.api.networking.ticking.TickingRequest; -import appeng.core.AELog; -import appeng.core.settings.TickRates; -import appeng.hooks.TickHandler; +import appeng.api.networking.events.MENetworkBootingStatusChange; +import appeng.api.networking.events.MENetworkChannelsChanged; +import appeng.api.networking.events.MENetworkEventSubscribe; +import appeng.api.networking.events.MENetworkPowerStatusChange; import appeng.integration.IntegrationRegistry; import appeng.integration.IntegrationType; -import appeng.me.GridAccessException; import appeng.transformer.annotations.Integration.Interface; import appeng.transformer.annotations.Integration.InterfaceList; -import appeng.util.IWorldCallable; @InterfaceList( value = { @Interface( iface = "li.cil.oc.api.network.Environment", iname = IntegrationType.OpenComputers ), @Interface( iface = "li.cil.oc.api.network.SidedEnvironment", iname = IntegrationType.OpenComputers ) } ) -public final class PartP2POpenComputers extends PartP2PTunnel implements IGridTickable, Environment, SidedEnvironment +public final class PartP2POpenComputers extends PartP2PTunnel implements Environment, SidedEnvironment { @Nullable private final Node node; - private final IWorldCallable updateCallback; - public PartP2POpenComputers( final ItemStack is ) { super( is ); @@ -80,8 +72,24 @@ public final class PartP2POpenComputers extends PartP2PTunnel - { - @Nullable - @Override - public Void call( final World world ) throws Exception - { - PartP2POpenComputers.this.updateConnections(); - - return null; - } - } }