package vazkii.botania.common.network; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.relauncher.Side; import vazkii.botania.common.lib.LibMisc; public final class PacketHandler { private static final SimpleNetworkWrapper HANDLER = new SimpleNetworkWrapper(LibMisc.NETWORK_CHANNEL); public static void init() { int id = 0; HANDLER.registerMessage(PacketBotaniaEffect.Handler.class, PacketBotaniaEffect.class, id++, Side.CLIENT); HANDLER.registerMessage(PacketLeftClick.Handler.class, PacketLeftClick.class, id++, Side.SERVER); HANDLER.registerMessage(PacketDodge.Handler.class, PacketDodge.class, id++, Side.SERVER); HANDLER.registerMessage(PacketJump.Handler.class, PacketJump.class, id++, Side.SERVER); } /** * Send message to all within 64 blocks that have this chunk loaded */ public static void sendToNearby(World world, BlockPos pos, IMessage toSend) { if(world instanceof WorldServer) { WorldServer ws = (WorldServer) world; for (EntityPlayer player : ws.playerEntities) { EntityPlayerMP playerMP = (EntityPlayerMP) player; if (playerMP.getDistanceSq(pos) < 64 * 64 && ws.getPlayerChunkMap().isPlayerWatchingChunk(playerMP, pos.getX() >> 4, pos.getZ() >> 4)) { HANDLER.sendTo(toSend, playerMP); } } } } public static void sendToNearby(World world, Entity e, IMessage toSend) { sendToNearby(world, new BlockPos(e), toSend); } public static void sendTo(EntityPlayerMP playerMP, IMessage toSend) { HANDLER.sendTo(toSend, playerMP); } public static void sendToServer(IMessage msg) { HANDLER.sendToServer(msg); } private PacketHandler() {} }