diff options
| author | Freya Murphy <freya@freyacat.org> | 2026-03-28 17:04:05 -0400 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2026-03-28 17:04:20 -0400 |
| commit | 3a3e80a1793601293402bca5cafdfde664121b14 (patch) | |
| tree | 94fe8d50762563d252b86ca92a10d3a1823b0853 /bukkit/src | |
| parent | initial (diff) | |
| download | kenshinshideandseek2-3a3e80a1793601293402bca5cafdfde664121b14.tar.gz kenshinshideandseek2-3a3e80a1793601293402bca5cafdfde664121b14.tar.bz2 kenshinshideandseek2-3a3e80a1793601293402bca5cafdfde664121b14.zip | |
2.0.0-alpha1v2.0.0-alpha1
Diffstat (limited to 'bukkit/src')
| -rw-r--r-- | bukkit/src/Plugin.kt | 1 | ||||
| -rw-r--r-- | bukkit/src/Shim.kt | 2 | ||||
| -rw-r--r-- | bukkit/src/disguise/Disguise.kt | 12 | ||||
| -rw-r--r-- | bukkit/src/event/MovementListener.kt | 28 | ||||
| -rw-r--r-- | bukkit/src/event/PlaceListener.kt | 21 |
5 files changed, 49 insertions, 15 deletions
diff --git a/bukkit/src/Plugin.kt b/bukkit/src/Plugin.kt index 325d4cd..3f71955 100644 --- a/bukkit/src/Plugin.kt +++ b/bukkit/src/Plugin.kt @@ -52,6 +52,7 @@ class KhsPlugin : JavaPlugin() { InventoryListener(this) JoinLeaveListener(this) MovementListener(this) + PlaceListener(this) PlayerListener(this) PacketListener(this) RespawnListener(this) diff --git a/bukkit/src/Shim.kt b/bukkit/src/Shim.kt index fa568f9..4e53344 100644 --- a/bukkit/src/Shim.kt +++ b/bukkit/src/Shim.kt @@ -33,7 +33,7 @@ class BukkitLogger(val plugin: KhsPlugin) : Logger { class BukkitKhsShim(val plugin: KhsPlugin) : KhsShim { override val pluginVersion: String override val mcVersion: List<UInt> - override val platform: String = "bukkit" + override val platform: String = "Bukkit" init { // parse mc version diff --git a/bukkit/src/disguise/Disguise.kt b/bukkit/src/disguise/Disguise.kt index 8c86188..60564ec 100644 --- a/bukkit/src/disguise/Disguise.kt +++ b/bukkit/src/disguise/Disguise.kt @@ -79,6 +79,7 @@ class Disguise(val plugin: KhsPlugin, val player: BukkitPlayer, val material: Ma respawnHitbox() } sendBlockUpdate(blockLocation, material) + block?.setTicksLived(1) } else if (isSolid) { isSolid = false removeHitbox() @@ -114,8 +115,7 @@ class Disguise(val plugin: KhsPlugin, val player: BukkitPlayer, val material: Ma val loc = player.location.add(0.0, 1000.0, 0.0) val block: FallingBlock? = - runCatching { world.spawnFallingBlock(loc, material.createBlockData()) } - .getOrElse { null } + runCatching { world.spawnFallingBlock(loc, material, 0x0) }.getOrElse { null } if (block == null) return if (plugin.shim.supports(10)) block.setGravity(false) @@ -204,14 +204,10 @@ class Disguise(val plugin: KhsPlugin, val player: BukkitPlayer, val material: Ma } } - fun startSolidifying() { + fun startSolidifying(lastLocation: Location) { if (isSolid || hasSolidifyingTask) return hasSolidifyingTask = true - plugin.server.scheduler.scheduleSyncDelayedTask( - plugin, - { solidifyUpdate(player.location.clone(), 3u) }, - 10, - ) + solidifyUpdate(lastLocation, 3u) } fun solidifyUpdate(lastLocation: Location, time: UInt) { diff --git a/bukkit/src/event/MovementListener.kt b/bukkit/src/event/MovementListener.kt index 9b80415..e35123e 100644 --- a/bukkit/src/event/MovementListener.kt +++ b/bukkit/src/event/MovementListener.kt @@ -9,6 +9,7 @@ import cat.freya.khs.event.onMove import cat.freya.khs.world.Position as KhsPosition import java.util.UUID import java.util.concurrent.ConcurrentHashMap +import org.bukkit.Location import org.bukkit.Material import org.bukkit.entity.Player as BukkitPlayer import org.bukkit.event.EventHandler @@ -19,6 +20,7 @@ import org.bukkit.event.player.PlayerMoveEvent class MovementListener(val plugin: KhsPlugin) : Listener { private val prevPlayersOnGround: MutableSet<UUID> = ConcurrentHashMap.newKeySet<UUID>() + private val playerLastPosition: MutableMap<UUID, Location> = ConcurrentHashMap<UUID, Location>() init { plugin.server.pluginManager.registerEvents(this, plugin) @@ -34,6 +36,21 @@ class MovementListener(val plugin: KhsPlugin) : Listener { } } + private fun updateDisguise(player: BukkitPlayer) { + // update disguise (if exists) + val disguise = plugin.disguiser.getDisguise(player) ?: return + val current = player.location.clone() + val last = playerLastPosition.put(player.uniqueId, current) ?: return + if (last.world != current.world) return + + val dist = last.distance(current) + if (dist > 0.1) { + disguise.shouldBeSolid = false + } else { + disguise.startSolidifying(last) + } + } + @EventHandler(priority = EventPriority.HIGHEST) fun onPlayerMove(event: PlayerMoveEvent) { val bukkitPlayer = event.player ?: return @@ -60,12 +77,11 @@ class MovementListener(val plugin: KhsPlugin) : Listener { val khsEvent = MoveEvent(plugin.khs, khsPlayer, to) onMove(khsEvent) - if (khsEvent.cancelled) event.setCancelled(true) + if (khsEvent.cancelled) { + event.setCancelled(true) + return + } - // update disguise (if exists) - val disguise = plugin.disguiser.getDisguise(bukkitPlayer) ?: return - val dest = event.to ?: return - if (!khsEvent.cancelled && event.from.distance(dest) > 0.1) disguise.shouldBeSolid = false - disguise.startSolidifying() + updateDisguise(bukkitPlayer) } } diff --git a/bukkit/src/event/PlaceListener.kt b/bukkit/src/event/PlaceListener.kt new file mode 100644 index 0000000..e0088cb --- /dev/null +++ b/bukkit/src/event/PlaceListener.kt @@ -0,0 +1,21 @@ +package cat.freya.khs.bukkit.event + +import cat.freya.khs.bukkit.KhsPlugin +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.entity.EntityChangeBlockEvent + +class PlaceListener(val plugin: KhsPlugin) : Listener { + + init { + plugin.server.pluginManager.registerEvents(this, plugin) + } + + @EventHandler(priority = EventPriority.HIGHEST) + fun onEntityChangeBlock(event: EntityChangeBlockEvent) { + val entity = event.entity + val disguise = plugin.disguiser.getByEntityId(entity.entityId) + if (disguise != null) event.setCancelled(true) + } +} |