Fix horse speed, gravity for boats, added sprint-swimming for <1.13

This commit is contained in:
SKBotNL committed 2023-06-23 20:35:54 +02:00
1 parent 3942d9e94d
commit 6d1214bd1a
3 files changed
+54 -12

No files matched your search

@@ -0,0 +1,27 @@
package nl.skbotnl.rewindfixog
import org.bukkit.entity.Boat
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerMoveEvent
import org.bukkit.event.vehicle.VehicleDestroyEvent
class Events : Listener {
@EventHandler
fun onVehicleDestroy(event: VehicleDestroyEvent) {
if (event.vehicle is Boat && event.attacker == null) {
event.isCancelled = true
}
}
@EventHandler
fun onMove(event: PlayerMoveEvent) {
val player = event.player
if (RewindFixOG.viaApi.getPlayerVersion(player.uniqueId) > 107) {
return
}
if (player.isInWater && player.isSprinting) {
player.velocity = player.location.direction.multiply(0.17)
}
}
}
@@ -8,6 +8,6 @@ import org.bukkit.util.Vector
class MoveBoatRunnable(private val boat: EntityBoat, private val vec: Vector) : Runnable {
override fun run() {
// move(EnumMoveType arg0, Vec3D arg1)
boat.a(EnumMoveType.a, Vec3D(vec.x, vec.y, vec.z))
boat.a(EnumMoveType.b, Vec3D(vec.x, vec.y, vec.z))
}
}
@@ -6,9 +6,11 @@ import com.comphenix.protocol.events.ListenerPriority
import com.comphenix.protocol.events.PacketAdapter
import com.comphenix.protocol.events.PacketEvent
import com.viaversion.viaversion.api.Via
import com.viaversion.viaversion.api.ViaAPI
import net.minecraft.world.entity.animal.horse.EntityHorseAbstract
import net.minecraft.world.entity.vehicle.EntityBoat
import org.bukkit.Bukkit
import org.bukkit.attribute.Attribute
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftAbstractHorse
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftBoat
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftLlama
@@ -17,36 +19,47 @@ import org.bukkit.scheduler.BukkitRunnable
import org.bukkit.util.Vector
class RewindFixOG : JavaPlugin() {
private var plugin: RewindFixOG? = null
companion object {
lateinit var plugin: RewindFixOG
lateinit var viaApi: ViaAPI<Any>
}
override fun onEnable() {
val protocolManager = ProtocolLibrary.getProtocolManager()
plugin = this
viaApi = Via.getAPI()
object : BukkitRunnable() {
override fun run() {
for (player in Bukkit.getOnlinePlayers()) {
if (player.vehicle == null) {
return
}
val api = Via.getAPI()
if (api.getPlayerVersion(player.uniqueId) > 107) {
if (viaApi.getPlayerVersion(player.uniqueId) > 107) {
return
}
if (player.vehicle is CraftLlama) {
return
}
if (player.vehicle is CraftAbstractHorse) {
if (player.vehicle is CraftAbstractHorse && player.vehicle !is CraftLlama) {
val abstractHorse = player.vehicle as CraftAbstractHorse
if (abstractHorse.inventory.saddle == null) {
return
}
val downVec = Vector(0, -1, 0)
val nmsHorse: EntityHorseAbstract = abstractHorse.handle
Bukkit.getScheduler().runTask(plugin!!, MoveHorseRunnable(nmsHorse, downVec))
val nmsHorse = abstractHorse.handle
Bukkit.getScheduler().runTask(plugin, MoveHorseRunnable(nmsHorse, downVec))
}
if (player.vehicle is CraftBoat) {
if ((player.vehicle as CraftBoat).isInWater) {
return
}
val craftBoat = player.vehicle as CraftBoat
val downVec = Vector(0.0, -0.5, 0.0)
val nmsBoat = craftBoat.handle
Bukkit.getScheduler().runTask(plugin, MoveBoatRunnable(nmsBoat, downVec))
}
}
}
}.runTaskTimer(this, 0L, 1L)
protocolManager.addPacketListener(object : PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Client.STEER_VEHICLE) {
protocolManager.addPacketListener(object :
PacketAdapter(this, ListenerPriority.NORMAL, PacketType.Play.Client.STEER_VEHICLE) {
override fun onPacketReceiving(event: PacketEvent) {
val player = event.player
val api = Via.getAPI()
@@ -80,14 +93,16 @@ class RewindFixOG : JavaPlugin() {
if (craftHorse.inventory.saddle == null) {
return
}
val speed = craftHorse.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED)?.value ?: return
val nmsHorse: EntityHorseAbstract = craftHorse.handle
val loc = player.location
val vec = loc.direction
vec.setY(0)
vec.multiply(0.75)
vec.multiply(3 * speed)
Bukkit.getScheduler().runTask(plugin, MoveHorseRunnable(nmsHorse, vec))
}
}
})
this.server.pluginManager.registerEvents(Events(), this)
}
}