Advertisement
Guest User

Untitled

a guest
Jul 30th, 2014
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 4.74 KB | None | 0 0
  1. package pw.bowser.hysteria.extras.modules
  2.  
  3. import pw.bowser.hysteria.module.internal.HysteriaModule
  4. import pw.bowser.libhysteria.toggles.TogglesMixin
  5. import pw.bowser.libhysteria.modules.ModuleManifest
  6. import pw.bowser.hysteria.events.EventClient
  7. import pw.bowser.hysteria.eventsimpl.minecraft.player.PreMotionUpdate
  8. import pw.bowser.hysteria.eventsimpl.network.PacketSendEvent
  9. import net.minecraft.network.play.client.{C07PacketPlayerDigging, C08PacketPlayerBlockPlacement, C03PacketPlayer}
  10.  
  11. import net.minecraft.network.Packet
  12. import pw.bowser.hysteria.commands.companion.Command
  13. import pw.bowser.hysteria.util.commands.ToggleFlag
  14. import pw.bowser.hysteria.config.ConfigurationFlag
  15. import pw.bowser.hysteria.minecraft.abstractionlayer.TimeUtil
  16. import pw.bowser.hysteria.commands.HysteriaCommand
  17. import scala.collection.mutable
  18.  
  19. /**
  20.  * Date: 5/16/14
  21.  * Time: 10:52 PM
  22.  */
  23. @ModuleManifest(
  24.   groupId     = "pw.hysteria",
  25.   name        = "StridedMovement",
  26.   version     = "0.1",
  27.   description = "Buffers all movement while on and then flushes every few ticks",
  28.   commands    = Array("stm")
  29. )
  30. class StridedMovement extends HysteriaModule with TogglesMixin {
  31.  
  32.   private val flushTimer          = new TimeUtil
  33.  
  34.   private val packetBuffer        = new mutable.Queue[Packet]
  35.   private val packetsAllow        = new mutable.HashSet[Packet]
  36.  
  37.   private val packetSendListener  = EventClient[PacketSendEvent] {event =>
  38.     event.packet match {
  39.       case p: C03PacketPlayer if !packetsAllow.contains(p) =>
  40.         packetBuffer.enqueue(event.packet)
  41.         event.cancel()
  42.       case p: C08PacketPlayerBlockPlacement if !packetsAllow.contains(p) =>
  43.         packetBuffer.enqueue(event.packet)
  44.         event.cancel()
  45.       case p: C07PacketPlayerDigging if !packetsAllow.contains(p) =>
  46.         packetBuffer.enqueue(event.packet)
  47.         event.cancel()
  48.       case p: Packet if packetsAllow.contains(p)=>
  49.         packetsAllow -= p
  50.       case _ => // Ignore
  51.     }
  52.  
  53.     if(flushTimer.hasPassed(configuration.getLong("stride_interval"))){
  54.       flushPacketBuffer()
  55.     }
  56.   }
  57.  
  58.   private val preMotionListener   = EventClient[PreMotionUpdate] {event =>
  59.     if(minecraftToolkit.isInWorld
  60.         && minecraftToolkit.thePlayer.motionX == 0
  61.         && minecraftToolkit.thePlayer.motionY >= -0.2
  62.         && minecraftToolkit.thePlayer.motionZ == 0)
  63.       event.cancel()
  64.   }
  65.  
  66.   private var command: HysteriaCommand = null
  67.  
  68.  
  69.   override def initModule(): Unit = {
  70.     super.initModule()
  71.  
  72.     command = Command(Array("stm"),
  73.                       ToggleFlag(Array("@if_none"), this),
  74.                       ConfigurationFlag(Array("i", "interval"), configuration, "stride_interval", ConfigurationFlag.Transforms.LONG))
  75.  
  76.     configuration.setPropertyIfNew("stride_interval", 2300L)
  77.   }
  78.  
  79.   override def enableModule(): Unit = {
  80.     super.enableModule()
  81.  
  82.     commandDispatcher.registerCommand(command)
  83.     toggleRegistry.enrollToggleable(this)
  84.   }
  85.  
  86.   override def disableModule(): Unit = {
  87.     super.disableModule()
  88.  
  89.     commandDispatcher.unRegisterCommand(command)
  90.     toggleRegistry.disenrollToggleable(this)
  91.   }
  92.  
  93.   /**
  94.    * Should return the distinguished name of the toggles
  95.    * The distinguished name should be unique to the toggles, ie, `pw.bowser.mods.mod.distinguished_name_here`
  96.    * @return dn
  97.    */
  98.   override def distinguishedName: String = "pw.hysteria.strided_movement"
  99.  
  100.   /**
  101.    * Get the name of the toggleable
  102.    *
  103.    * @return name
  104.    */
  105.   override def displayName: String = "StridedMovement"
  106.  
  107.  
  108.   override def statusText: Option[String] = Some(s"${packetBuffer.size}")
  109.  
  110.  
  111.   override def conflictingToggles: List[String] = List("pw.hysteria.paralyze", "pw.hysteria.deferred_movement")
  112.  
  113.  
  114.   override def canPersist: Boolean = false
  115.  
  116.   /**
  117.    * Called when the toggles is enabled or required
  118.    * The implementation should store logic to start and enable functionality here.
  119.    */
  120.   override def enable(): Unit = {
  121.     packetBuffer.clear()
  122.     packetsAllow.clear()
  123.  
  124.     eventSystem.subscribe(classOf[PacketSendEvent], packetSendListener)
  125.     eventSystem.subscribe(classOf[PreMotionUpdate], preMotionListener)
  126.     super.enable()
  127.   }
  128.  
  129.   /**
  130.    * Called when the toggles is disabled or suppressed.
  131.    * The implementation should store logic to halt and disable functionality here.
  132.    */
  133.   override def disable(): Unit = {
  134.     eventSystem.unSubscribe(classOf[PacketSendEvent], packetSendListener)
  135.     eventSystem.unSubscribe(classOf[PreMotionUpdate], preMotionListener)
  136.  
  137.     flushPacketBuffer()
  138.     super.disable()
  139.   }
  140.  
  141.   private def flushPacketBuffer(): Unit = {
  142.     while(!packetBuffer.isEmpty){
  143.       val packet = packetBuffer.dequeue()
  144.       packetsAllow += packet
  145.       minecraftToolkit.sendPacket(packet)
  146.     }
  147.   }
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement