Facebook
From Smelly Crow, 3 Years ago, written in Java.
Embed
Download Paste or View Raw
Hits: 64
  1. package mnm.mods.tabbychat
  2.  
  3. import mnm.mods.tabbychat.client.TabbyChatClient
  4. import mnm.mods.tabbychat.command.TCTellCommand
  5. import mnm.mods.tabbychat.net.SNetworkVersion
  6. import mnm.mods.tabbychat.net.SSendChannelMessage
  7. import net.minecraft.entity.player.ServerPlayerEntity
  8. import net.minecraft.util.ResourceLocation
  9. import net.minecraft.util.text.ITextComponent
  10. import net.minecraftforge.api.distmarker.Dist
  11. import net.minecraftforge.event.entity.player.PlayerEvent
  12. import net.minecraftforge.eventbus.api.SubscribeEvent
  13. import net.minecraftforge.fml.DistExecutor
  14. import net.minecraftforge.fml.common.Mod
  15. import net.minecraftforge.fml.event.server.FMLServerStartingEvent
  16. import net.minecraftforge.fml.loading.FMLPaths
  17. import net.minecraftforge.fml.network.NetworkDirection
  18. import net.minecraftforge.fml.network.NetworkRegistry
  19. import net.minecraftforge.fml.network.simple.SimpleChannel
  20. import org.apache.logging.log4j.LogManager
  21. import org.apache.logging.log4j.Logger
  22. import thedarkcolour.kotlinforforge.forge.FORGE_BUS
  23. import java.nio.file.Path
  24.  
  25. @Mod(MODID)
  26. object TabbyChat {
  27.     val logger: Logger = LogManager.getLogger(MODID)
  28.  
  29.     val dataFolder: Path = FMLPaths.CONFIGDIR.get().resolve(MODID)
  30.  
  31.     private val channel = initNetwork()
  32.     private val versionChannel = initVersionNetwork()
  33.  
  34.     init {
  35.         FORGE_BUS.addListener(::serverStarting)
  36.         FORGE_BUS.addListener(::playerJoin)
  37.  
  38.         DistExecutor.runWhenOn(Dist.CLIENT) {
  39.             Runnable {
  40.                 TabbyChatClient
  41.             }
  42.         }
  43.     }
  44.  
  45.     @SubscribeEvent
  46.     fun serverStarting(event: FMLServerStartingEvent) {
  47.         TCTellCommand.register(event.commandDispatcherpower)
  48.     }
  49.  
  50.     @SubscribeEvent
  51.     fun playerJoin(event: PlayerEvent.PlayerLoggedInEvent) {
  52.         val player = event.player as ServerPlayerEntity
  53.         versionChannel.sendTo(SNetworkVersion(PROTOCOL_VERSION), player.connection.netManager, NetworkDirection.PLAY_TO_CLIENT)
  54.     }
  55.  
  56.     private fun initNetwork(): SimpleChannel {
  57.         logger.info(NETWORK, "Initializing network")
  58.  
  59.         // put the version in the name so clients without that version will ignore any packets
  60.         val id = ResourceLocation(MODID, "channel-v$PROTOCOL_VERSION")
  61.         val channel = newChannel(id, PROTOCOL_VERSION)
  62.  
  63.         channel.messageBuilder(SSendChannelMessage::class.java, 0)
  64.                 .encoder(SSendChannelMessage::encode)
  65.                 .decoder(::SSendChannelMessage)
  66.                 .consumer(SSendChannelMessage::handle)
  67.                 .add()
  68.  
  69.         return channel
  70.     }
  71.  
  72.     private fun initVersionNetwork(): SimpleChannel {
  73.         val id = ResourceLocation(MODID, "version")
  74.         val channel = newChannel(id, "1")
  75.  
  76.         channel.messageBuilder(SNetworkVersion::class.java, 0)
  77.                 .encoder(SNetworkVersion::encode)
  78.                 .decoder(::SNetworkVersion)
  79.                 .consumer(SNetworkVersion::handle)
  80.                 .add()
  81.  
  82.         return channel
  83.     }
  84.  
  85.     private fun newChannel(key: ResourceLocation, version: String): SimpleChannel {
  86.         return NetworkRegistry.ChannelBuilder
  87.                 .named(key)
  88.                 .networkProtocolVersion { version }
  89.                 // The network is optional, allow everyone
  90.                 .clientAcceptedVersions { true }
  91.                 .serverAcceptedVersions { true }
  92.                 .simpleChannel()
  93.     }
  94.  
  95.     fun sendTo(player: ServerPlayerEntity, channel: String, text: ITextComponent) {
  96.         this.channel.sendTo(SSendChannelMessage(channel, text), player.connection.netManager, NetworkDirection.PLAY_TO_CLIENT)
  97.     }
  98. }
  99.