package openmods.network.event; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import cpw.mods.fml.common.eventhandler.Event; import cpw.mods.fml.common.network.handshake.NetworkDispatcher; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.List; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; public abstract class NetworkEvent extends Event { final List<NetworkEvent> replies = Lists.newArrayList(); NetworkDispatcher dispatcher; public EntityPlayer sender; protected abstract void readFromStream(DataInput input) throws IOException; protected abstract void writeToStream(DataOutput output) throws IOException; protected void appendLogInfo(List<String> info) {} public void reply(NetworkEvent reply) { Preconditions.checkState(dispatcher != null, "Can't call this method outside event handler"); reply.dispatcher = dispatcher; this.replies.add(reply); } public void sendToAll() { NetworkEventManager.INSTANCE.dispatcher().senders.global.sendMessage(this); } public void sendToServer() { NetworkEventManager.INSTANCE.dispatcher().senders.client.sendMessage(this); } public void sendToPlayer(EntityPlayer player) { NetworkEventManager.INSTANCE.dispatcher().senders.player.sendMessage(this, player); } public void sendToEntity(Entity entity) { NetworkEventManager.INSTANCE.dispatcher().senders.entity.sendMessage(this, entity); } public List<Object> serialize() { return NetworkEventManager.INSTANCE.dispatcher().senders.serialize(this); } }