001 package cpw.mods.fml.common.network; 002 003 import static cpw.mods.fml.common.network.FMLPacket.Type.MOD_IDENTIFIERS; 004 005 import java.util.Collection; 006 import java.util.Map; 007 import java.util.Map.Entry; 008 009 import net.minecraft.network.INetworkManager; 010 import net.minecraft.network.packet.NetHandler; 011 012 import com.google.common.collect.Maps; 013 import com.google.common.io.ByteArrayDataInput; 014 import com.google.common.io.ByteArrayDataOutput; 015 import com.google.common.io.ByteStreams; 016 017 public class ModIdentifiersPacket extends FMLPacket 018 { 019 020 private Map<String, Integer> modIds = Maps.newHashMap(); 021 022 public ModIdentifiersPacket() 023 { 024 super(MOD_IDENTIFIERS); 025 } 026 027 @Override 028 public byte[] generatePacket(Object... data) 029 { 030 ByteArrayDataOutput dat = ByteStreams.newDataOutput(); 031 Collection<NetworkModHandler >networkMods = FMLNetworkHandler.instance().getNetworkIdMap().values(); 032 033 dat.writeInt(networkMods.size()); 034 for (NetworkModHandler handler : networkMods) 035 { 036 dat.writeUTF(handler.getContainer().getModId()); 037 dat.writeInt(handler.getNetworkId()); 038 } 039 040 // TODO send the other id maps as well 041 return dat.toByteArray(); 042 } 043 044 @Override 045 public FMLPacket consumePacket(byte[] data) 046 { 047 ByteArrayDataInput dat = ByteStreams.newDataInput(data); 048 int listSize = dat.readInt(); 049 for (int i = 0; i < listSize; i++) 050 { 051 String modId = dat.readUTF(); 052 int networkId = dat.readInt(); 053 modIds.put(modId, networkId); 054 } 055 return this; 056 } 057 058 @Override 059 public void execute(INetworkManager network, FMLNetworkHandler handler, NetHandler netHandler, String userName) 060 { 061 for (Entry<String,Integer> idEntry : modIds.entrySet()) 062 { 063 handler.bindNetworkId(idEntry.getKey(), idEntry.getValue()); 064 } 065 // TODO other id maps 066 } 067 }