Skip to content

Commit

Permalink
1.1.4
Browse files Browse the repository at this point in the history
传入 from 坐标和 Event 于Kether 使用
  • Loading branch information
YsGqHY committed Dec 11, 2024
1 parent 765505d commit 370e738
Show file tree
Hide file tree
Showing 7 changed files with 203 additions and 56 deletions.
21 changes: 17 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,32 @@ import io.izzel.taboolib.gradle.*
plugins {
`java-library`
`maven-publish`
id("io.izzel.taboolib") version "2.0.11"
id("io.izzel.taboolib") version "2.0.20"
id("org.jetbrains.kotlin.jvm") version "1.8.22"
}

taboolib {

env {
install(UNIVERSAL, BUKKIT_ALL, KETHER, NMS_UTIL, NAVIGATION, EXPANSION_JAVASCRIPT)
install(
Bukkit,
Kether,
Basic,
BukkitHook,
BukkitNMS,
BukkitNMSUtil,
BukkitUtil,
BukkitNavigation,
I18n,
JavaScript,
Jexl,
MinecraftChat,
MinecraftEffect
)
}

version {
taboolib = "6.1.2-beta11"
taboolib = "6.2.0"
}
}

Expand All @@ -23,7 +37,6 @@ repositories {
}

dependencies {
compileOnly("ink.ptms:nms-all:1.0.0")
compileOnly("ink.ptms.core:v11902:11902-minimize:mapped")
compileOnly("ink.ptms.core:v11902:11902-minimize:universal")
compileOnly(kotlin("stdlib"))
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
group=kim.hhhhhy.regions
version=1.0.9
version=1.1.4
65 changes: 41 additions & 24 deletions src/main/kotlin/kim/hhhhhy/regions/data/AreaSettings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ import kim.hhhhhy.regions.listeners.AreaListener
import kim.hhhhhy.regions.utils.evalKether
import org.bukkit.Location
import org.bukkit.entity.Player
import org.bukkit.event.Cancellable
import org.bukkit.event.Event
import taboolib.module.navigation.BoundingBox
import taboolib.common.platform.function.console
import taboolib.common.platform.function.info
import taboolib.common.platform.function.submit
import taboolib.common.platform.service.PlatformExecutor
import taboolib.module.configuration.Config
import taboolib.module.configuration.Configuration
import taboolib.module.kether.*
import taboolib.module.lang.sendInfo
import taboolib.platform.util.onlinePlayers
import java.util.concurrent.ConcurrentHashMap
Expand Down Expand Up @@ -52,11 +54,15 @@ data class AreaSettings(
playerAreas.clear()
onlinePlayers.forEach {
stopTick(it)
check(it, it.location)
check(it, it.location, it.location)
}
console().sendInfo("plugin-areas-reload")
}

fun ScriptFrame.getEvent(): Event {
return variables().get<Any?>("@RegionEvent").orElse(null) as? Event ?: error("No event selected.")
}

private fun getAreas(location: Location): List<String> {
val x = location.blockX
val y = location.blockY
Expand All @@ -76,33 +82,33 @@ data class AreaSettings(
.map { (key, _) -> key }
}

private fun runEnterAction(player: Player, id: String) {
private fun runEnterAction(player: Player, id: String, from: Location, event: Event?) {
val actions = areasData[id]?.actions?.enter
if (ConfigSettings.baffleCache.hasNext("${player.name}-Enter-$id").not()) {
if (ConfigSettings.cooldown > 0 && ConfigSettings.baffleCache.hasNext("${player.name}-Enter-$id").not()) {
return
}
actions?.evalKether(player)
startTick(player, id)
actions?.evalKether(player, mapOf("frX" to from.x, "frY" to from.y, "frZ" to from.z, "frW" to from.world?.name), listOf("@RegionEvent" to event))
startTick(player, id, from, event)
}
private fun runLeaveAction(player: Player, id: String) {
private fun runLeaveAction(player: Player, id: String, from: Location, event: Event?) {
stopTick(player, id)
val actions = areasData[id]?.actions?.leave
if (ConfigSettings.baffleCache.hasNext("${player.name}-Leave-$id").not()) {
if (ConfigSettings.cooldown > 0 && ConfigSettings.baffleCache.hasNext("${player.name}-Leave-$id").not()) {
return
}
actions?.evalKether(player)
actions?.evalKether(player, mapOf("frX" to from.x, "frY" to from.y, "frZ" to from.z, "frW" to from.world?.name), listOf("@RegionEvent" to event))
}
private fun runTickAction(player: Player, id: String) {
private fun runTickAction(player: Player, id: String, from: Location, event: Event?) {
val actions = areasData[id]?.actions?.tick
actions?.evalKether(player)
actions?.evalKether(player, mapOf("frX" to from.x, "frY" to from.y, "frZ" to from.z, "frW" to from.world?.name), listOf("@RegionEvent" to event))
}

private fun startTick(player: Player, id: String) {
private fun startTick(player: Player, id: String, from: Location, event: Event?) {
val period = areasData[id]!!.tickPeriod
val tasks = playerAreas.computeIfAbsent(player.name) { ConcurrentHashMap() }
tasks[id] = submit(period = period) {
if (playerAreas[player.name]?.contains(id) == true) {
runTickAction(player, id)
runTickAction(player, id, from, event)
} else {
return@submit
}
Expand All @@ -124,26 +130,26 @@ data class AreaSettings(
/**
* 执行一次区域类型动作
*/
private fun runActions(player: Player, id: String, type: AreaType) {
private fun runActions(player: Player, id: String, type: AreaType, from: Location, event: Event? = null) {
when (type) {
ENTER -> {
runEnterAction(player, id)
runEnterAction(player, id, from, event)
}
LEAVE -> {
runLeaveAction(player, id)
runLeaveAction(player, id, from, event)
}
TICK -> {
runTickAction(player, id)
runTickAction(player, id, from, event)
}
ALL -> {
runEnterAction(player, id)
runLeaveAction(player, id)
runTickAction(player, id)
runEnterAction(player, id, from, event)
runLeaveAction(player, id, from, event)
runTickAction(player, id, from, event)
}
}
}

fun check(player: Player, location: Location) {
fun check(player: Player, location: Location, from: Location, event: Event? = null) {
val areas = getAreas(location)

if (areas.isNotEmpty()) {
Expand All @@ -153,15 +159,15 @@ data class AreaSettings(
if (filter.isNotEmpty()) {
filter.forEach { (name, id) ->
if (AreaListener.playerSet.remove(name to id)) {
runActions(player, id, LEAVE)
runActions(player, id, LEAVE, from, event)
}
}
}

// 进入区域
areas.forEach {
if (AreaListener.playerSet.add(player.name to it)) {
runActions(player, it, ENTER)
runActions(player, it, ENTER, from, event)
}
}
} else {
Expand All @@ -172,11 +178,22 @@ data class AreaSettings(
if (filter.isNotEmpty()) {
filter.forEach { (name, id) ->
if (AreaListener.playerSet.remove(name to id)) {
runActions(player, id, LEAVE)
runActions(player, id, LEAVE, from, event)
}
}
}
}
}


@KetherParser(["region-event-cancel"], shared = true)
fun parserCancel() = scriptParser {
actionNow {
val e = getEvent()
if (e is Cancellable) {
e.isCancelled = true
}
}
}
}
}
4 changes: 2 additions & 2 deletions src/main/kotlin/kim/hhhhhy/regions/data/ConfigSettings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ object ConfigSettings {
lateinit var config: Configuration
private set

private var cooldown: Long = 3000
var cooldown: Long = 3000

var baffleCache = Baffle.of(cooldown, TimeUnit.MILLISECONDS)

Expand All @@ -23,8 +23,8 @@ object ConfigSettings {
fun reloadConfig() {
cooldown = config.getLong("CommandBaffle.time", 3000)
actionTick = config.getLong("AreaSettings.TickAction", 20)
baffleCache = Baffle.of(cooldown, TimeUnit.MILLISECONDS)
console().sendInfo("plugin-config-reload")

}

}
12 changes: 6 additions & 6 deletions src/main/kotlin/kim/hhhhhy/regions/listeners/AreaListener.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,32 +16,32 @@ object AreaListener {
@SubscribeEvent
fun onPlayerMove(e: PlayerMoveEvent) {
val to = e.to ?: return
if (!e.isBlockMovement()) {
if (!e.isMovement()) {
return
}
val player = e.player
AreaSettings.check(player, to)
AreaSettings.check(player, to, e.from, e)
}

@SubscribeEvent
fun onPlayerChangeWorld(e: PlayerChangedWorldEvent) {
AreaSettings.stopTick(e.player)
AreaSettings.check(e.player, e.player.location)
AreaSettings.check(e.player, e.player.location, e.from.spawnLocation, e)
}

@SubscribeEvent
fun onTeleport(e: PlayerTeleportEvent) {
val from = e.from
val to = e.to ?: return
if (from.world?.name == to.world?.name && from.x == to.x && from.y == to.y && from.z == to.z) return
val player = e.player
AreaSettings.check(player, to)
AreaSettings.check(player, to, from, e)
}

@SubscribeEvent
fun onPlayerJoin(e: PlayerJoinEvent) {
AreaSettings.check(e.player, e.player.location)
AreaSettings.check(e.player, e.player.location, e.player.location, e)
}

@SubscribeEvent
fun onPlayerQuit(e: PlayerQuitEvent) {
playerSet.removeAll { it.first == e.player.name }
Expand Down
Loading

0 comments on commit 370e738

Please sign in to comment.