Fire a custom packet channel registration/deregistration event, for any mods that care about that
kind of thing
This commit is contained in:
parent
b70742e72d
commit
135633b2ad
|
@ -17,6 +17,7 @@ import java.util.Arrays;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -43,6 +44,7 @@ import net.minecraft.entity.Entity;
|
|||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.launchwrapper.Launch;
|
||||
import net.minecraft.network.INetHandler;
|
||||
import net.minecraft.network.NetHandlerPlayServer;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.ServerStatusResponse;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
|
@ -70,6 +72,8 @@ import cpw.mods.fml.common.ModContainer;
|
|||
import cpw.mods.fml.common.ModMetadata;
|
||||
import cpw.mods.fml.common.ObfuscationReflectionHelper;
|
||||
import cpw.mods.fml.common.WrongMinecraftVersionException;
|
||||
import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||
import cpw.mods.fml.common.registry.GameData;
|
||||
import cpw.mods.fml.common.toposort.ModSortingException;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
@ -710,4 +714,17 @@ public class FMLClientHandler implements IFMLSidedHandler
|
|||
throw new RuntimeException("Timeout waiting for client thread to catch up!");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireNetRegistrationEvent(EventBus bus, NetworkManager manager, Set<String> channelSet, String channel, Side side)
|
||||
{
|
||||
if (side == Side.CLIENT)
|
||||
{
|
||||
bus.post(new FMLNetworkEvent.CustomPacketRegistrationEvent<NetHandlerPlayClient>(manager, channelSet, channel, side, NetHandlerPlayClient.class));
|
||||
}
|
||||
else
|
||||
{
|
||||
bus.post(new FMLNetworkEvent.CustomPacketRegistrationEvent<NetHandlerPlayServer>(manager, channelSet, channel, side, NetHandlerPlayServer.class));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ package cpw.mods.fml.common;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
|
@ -30,10 +29,8 @@ import net.minecraft.server.MinecraftServer;
|
|||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.storage.SaveHandler;
|
||||
import net.minecraft.world.storage.WorldInfo;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
@ -42,7 +39,6 @@ import com.google.common.collect.Lists;
|
|||
import com.google.common.collect.MapMaker;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
import cpw.mods.fml.common.gameevent.InputEvent;
|
||||
import cpw.mods.fml.common.gameevent.PlayerEvent;
|
||||
|
@ -503,4 +499,9 @@ public class FMLCommonHandler
|
|||
{
|
||||
sidedDelegate.waitForPlayClient();
|
||||
}
|
||||
|
||||
public void fireNetRegistrationEvent(NetworkManager manager, Set<String> channelSet, String channel, Side side)
|
||||
{
|
||||
sidedDelegate.fireNetRegistrationEvent(bus(), manager, channelSet, channel, side);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,10 +13,12 @@
|
|||
package cpw.mods.fml.common;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.network.INetHandler;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
||||
public interface IFMLSidedHandler
|
||||
|
@ -50,4 +52,6 @@ public interface IFMLSidedHandler
|
|||
INetHandler getClientPlayHandler();
|
||||
|
||||
void waitForPlayClient();
|
||||
|
||||
void fireNetRegistrationEvent(EventBus bus, NetworkManager manager, Set<String> channelSet, String channel, Side side);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package cpw.mods.fml.common.network;
|
||||
|
||||
import java.util.Set;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import net.minecraft.network.INetHandler;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.play.INetHandlerPlayClient;
|
||||
|
@ -52,6 +54,19 @@ public class FMLNetworkEvent<T extends INetHandler> extends Event {
|
|||
}
|
||||
}
|
||||
|
||||
public static class CustomPacketRegistrationEvent<S extends INetHandler> extends FMLNetworkEvent<S> {
|
||||
public final ImmutableSet<String> registrations;
|
||||
public final String operation;
|
||||
public final Side side;
|
||||
public CustomPacketRegistrationEvent(NetworkManager manager, Set<String> registrations, String operation, Side side, Class<S> type)
|
||||
{
|
||||
super(type.cast(manager.func_150729_e()), type, manager);
|
||||
this.registrations = ImmutableSet.copyOf(registrations);
|
||||
this.side = side;
|
||||
this.operation = operation;
|
||||
}
|
||||
}
|
||||
|
||||
public static abstract class CustomPacketEvent<S extends INetHandler> extends FMLNetworkEvent<S> {
|
||||
/**
|
||||
* The packet that generated the event
|
||||
|
|
|
@ -1,28 +1,30 @@
|
|||
package cpw.mods.fml.common.network.handshake;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import java.util.Set;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import com.google.common.base.Charsets;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.network.NetworkRegistry;
|
||||
import cpw.mods.fml.common.network.internal.FMLProxyPacket;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
|
||||
public class ChannelRegistrationHandler extends SimpleChannelInboundHandler<FMLProxyPacket> {
|
||||
@Override
|
||||
protected void channelRead0(ChannelHandlerContext ctx, FMLProxyPacket msg) throws Exception
|
||||
{
|
||||
Side side = ctx.channel().attr(NetworkRegistry.CHANNEL_SOURCE).get();
|
||||
NetworkManager manager = msg.getOrigin();
|
||||
if (msg.channel().equals("REGISTER") || msg.channel().equals("UNREGISTER"))
|
||||
{
|
||||
byte[] data = new byte[msg.payload().readableBytes()];
|
||||
msg.payload().readBytes(data);
|
||||
String channels = new String(data,Charsets.UTF_8);
|
||||
String[] split = channels.split("\0");
|
||||
for (String channel : split)
|
||||
{
|
||||
System.out.printf("Register %s from %s\n",channel, side);
|
||||
}
|
||||
Set<String> channelSet = ImmutableSet.copyOf(split);
|
||||
FMLCommonHandler.instance().fireNetRegistrationEvent(manager, channelSet, msg.channel(), side);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -17,12 +17,14 @@ import java.io.FileInputStream;
|
|||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import net.minecraft.network.INetHandler;
|
||||
import net.minecraft.network.NetHandlerPlayServer;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.StringTranslate;
|
||||
|
@ -34,6 +36,8 @@ import cpw.mods.fml.common.FMLLog;
|
|||
import cpw.mods.fml.common.IFMLSidedHandler;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.eventhandler.EventBus;
|
||||
import cpw.mods.fml.common.network.FMLNetworkEvent;
|
||||
import cpw.mods.fml.common.registry.LanguageRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
||||
|
@ -226,4 +230,10 @@ public class FMLServerHandler implements IFMLSidedHandler
|
|||
{
|
||||
// NOOP
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fireNetRegistrationEvent(EventBus bus, NetworkManager manager, Set<String> channelSet, String channel, Side side)
|
||||
{
|
||||
bus.post(new FMLNetworkEvent.CustomPacketRegistrationEvent<NetHandlerPlayServer>(manager, channelSet, channel, side, NetHandlerPlayServer.class));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue