summaryrefslogtreewikicommitdiff
path: root/bukkit/src
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2026-03-28 17:04:05 -0400
committerFreya Murphy <freya@freyacat.org>2026-03-28 17:04:20 -0400
commit3a3e80a1793601293402bca5cafdfde664121b14 (patch)
tree94fe8d50762563d252b86ca92a10d3a1823b0853 /bukkit/src
parentinitial (diff)
downloadkenshinshideandseek2-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.kt1
-rw-r--r--bukkit/src/Shim.kt2
-rw-r--r--bukkit/src/disguise/Disguise.kt12
-rw-r--r--bukkit/src/event/MovementListener.kt28
-rw-r--r--bukkit/src/event/PlaceListener.kt21
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)
+ }
+}