diff --git a/src/main/kotlin/nl/skbotnl/rewindfixog/Events.kt b/src/main/kotlin/nl/skbotnl/rewindfixog/Events.kt new file mode 100644 index 0000000..01682a0 --- /dev/null +++ b/src/main/kotlin/nl/skbotnl/rewindfixog/Events.kt @@ -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) + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/nl/skbotnl/rewindfixog/MoveBoatRunnable.kt b/src/main/kotlin/nl/skbotnl/rewindfixog/MoveBoatRunnable.kt index f62ec5e..8d4e17d 100644 --- a/src/main/kotlin/nl/skbotnl/rewindfixog/MoveBoatRunnable.kt +++ b/src/main/kotlin/nl/skbotnl/rewindfixog/MoveBoatRunnable.kt @@ -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)) } } \ No newline at end of file diff --git a/src/main/kotlin/nl/skbotnl/rewindfixog/RewindFixOG.kt b/src/main/kotlin/nl/skbotnl/rewindfixog/RewindFixOG.kt index 05cd829..75bfbe6 100644 --- a/src/main/kotlin/nl/skbotnl/rewindfixog/RewindFixOG.kt +++ b/src/main/kotlin/nl/skbotnl/rewindfixog/RewindFixOG.kt @@ -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 + } + 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) } }