Create common nms module.

This commit is contained in:
alexcrea 2024-08-07 23:20:04 +02:00
parent 056892ee1e
commit 7d20ea83c3
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
13 changed files with 108 additions and 70 deletions

View file

@ -0,0 +1,14 @@
group = rootProject.group
version = rootProject.version
repositories {
// ProtocoLib
maven (url = "https://repo.dmulloy2.net/repository/public/" )
}
dependencies {
// Protocolib
compileOnly("com.comphenix.protocol:ProtocolLib:5.1.0")
}

View file

@ -0,0 +1,13 @@
package xyz.alexcrea.cuanvil.dependency.packet
import org.bukkit.entity.Player
abstract class AbstractPacketManager : PacketManager {
override val canSetInstantBuild: Boolean
get() = false
override fun setInstantBuild(player: Player, instantBuild: Boolean) {
// Default empty.
}
}

View file

@ -0,0 +1,4 @@
package xyz.alexcrea.cuanvil.dependency.packet
// ProtocoLib not installed and not in a supported version: We do nothing
class NoPacketManager: AbstractPacketManager()

View file

@ -0,0 +1,17 @@
package xyz.alexcrea.cuanvil.dependency.packet
import org.bukkit.entity.Player
interface PacketManager {
/**
* If the provided packet manager if able to set instant build.
*/
val canSetInstantBuild: Boolean
/**
* Try to set instant build properties
*/
fun setInstantBuild(player: Player, instantBuild: Boolean)
}

View file

@ -0,0 +1,39 @@
package xyz.alexcrea.cuanvil.dependency.packet
import com.comphenix.protocol.PacketType
import com.comphenix.protocol.ProtocolLibrary
import com.comphenix.protocol.ProtocolManager
import com.comphenix.protocol.events.PacketContainer
import org.bukkit.entity.Player
import java.lang.reflect.InvocationTargetException
class ProtocoLibWrapper: PacketManager {
private val protocolManager: ProtocolManager = ProtocolLibrary.getProtocolManager();
override val canSetInstantBuild: Boolean
get() = true
override fun setInstantBuild(player: Player, instantBuild: Boolean) {
val packet = PacketContainer(PacketType.Play.Server.ABILITIES)
// Set player's properties
packet.float
.write(0, player.flySpeed / 2)
.write(1, player.walkSpeed / 2)
packet.booleans
.write(0, player.isInvulnerable)
.write(1, player.isFlying)
.write(2, player.allowFlight)
.write(3, instantBuild)
// Send packet
try {
protocolManager.sendServerPacket(player, packet)
} catch (e: InvocationTargetException) {
e.printStackTrace()
}
}
}