diff --git a/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java b/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java index 170e7bab9..639f9c112 100644 --- a/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java +++ b/src/main/java/net/minecraftforge/fml/network/NetworkEvent.java @@ -232,7 +232,7 @@ public class NetworkEvent extends Event return null; } - NetworkManager getNetworkManager() { + public NetworkManager getNetworkManager() { return networkManager; } } diff --git a/src/main/java/net/minecraftforge/fml/network/simple/SimpleChannel.java b/src/main/java/net/minecraftforge/fml/network/simple/SimpleChannel.java index 0e88fad26..060839880 100644 --- a/src/main/java/net/minecraftforge/fml/network/simple/SimpleChannel.java +++ b/src/main/java/net/minecraftforge/fml/network/simple/SimpleChannel.java @@ -24,31 +24,42 @@ import net.minecraft.client.Minecraft; import net.minecraft.network.NetworkManager; import net.minecraft.network.IPacket; import net.minecraft.network.PacketBuffer; -import net.minecraft.world.dimension.DimensionType; import net.minecraftforge.fml.network.*; import org.apache.commons.lang3.tuple.Pair; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.IntSupplier; import java.util.function.Supplier; +@SuppressWarnings("OptionalUsedAsFieldOrParameterType") public class SimpleChannel { private final NetworkInstance instance; private final IndexedMessageCodec indexedCodec; + private final Optional> registryChangeConsumer; private List>>> loginPackets; - public SimpleChannel(NetworkInstance instance) - { + public SimpleChannel(NetworkInstance instance) { + this(instance, Optional.empty()); + } + + private SimpleChannel(NetworkInstance instance, Optional> registryChangeNotify) { this.instance = instance; this.indexedCodec = new IndexedMessageCodec(); this.loginPackets = new ArrayList<>(); instance.addListener(this::networkEventListener); instance.addGatherListener(this::networkLoginGather); + this.registryChangeConsumer = registryChangeNotify; + } + + public SimpleChannel(NetworkInstance instance, Consumer registryChangeNotify) { + this(instance, Optional.of(registryChangeNotify)); } private void networkLoginGather(final NetworkEvent.GatherLoginPayloadsEvent gatherEvent) { @@ -62,7 +73,11 @@ public class SimpleChannel } private void networkEventListener(final NetworkEvent networkEvent) { - this.indexedCodec.consume(networkEvent.getPayload(), networkEvent.getLoginIndex(), networkEvent.getSource()); + if (networkEvent instanceof NetworkEvent.ChannelRegistrationChangeEvent) { + this.registryChangeConsumer.ifPresent(l->l.accept(((NetworkEvent.ChannelRegistrationChangeEvent) networkEvent))); + } else { + this.indexedCodec.consume(networkEvent.getPayload(), networkEvent.getLoginIndex(), networkEvent.getSource()); + } } public int encodeMessage(MSG message, final PacketBuffer target) {