init 16
This commit is contained in:
@@ -47,7 +47,12 @@ class Console {
|
|||||||
/**
|
/**
|
||||||
* 主世界
|
* 主世界
|
||||||
*/
|
*/
|
||||||
private var overworld = Bukkit.getWorld("world")!!
|
val overworld = Bukkit.getWorld("world")!!
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下界
|
||||||
|
*/
|
||||||
|
val nether = Bukkit.getWorld("world_nether")!!
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 速通者队伍
|
* 速通者队伍
|
||||||
@@ -101,6 +106,16 @@ class Console {
|
|||||||
*/
|
*/
|
||||||
private lateinit var speedrunnerList: List<Player>
|
private lateinit var speedrunnerList: List<Player>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家离开主世界时最后的位置
|
||||||
|
*/
|
||||||
|
private val playerLocInWorld: MutableMap<UUID, Location> = HashMap()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家离开下界时最后的位置
|
||||||
|
*/
|
||||||
|
private val playerLocInNether: MutableMap<UUID, Location> = HashMap()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 猎人持有的指南针指向的速通者在speedrunnerList中的index
|
* 猎人持有的指南针指向的速通者在speedrunnerList中的index
|
||||||
*/
|
*/
|
||||||
@@ -133,13 +148,13 @@ class Console {
|
|||||||
itemMeta.addEnchant(Enchantment.VANISHING_CURSE, 1, false)
|
itemMeta.addEnchant(Enchantment.VANISHING_CURSE, 1, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// bukkit task start
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 猎人重生Task,保留这些引用方便在游戏结束时取消这些任务
|
* 猎人重生Task,保留这些引用方便在游戏结束时取消这些任务
|
||||||
*/
|
*/
|
||||||
private val hunterRespawnTasks: MutableMap<Player, BukkitTask> = HashMap()
|
private val hunterRespawnTasks: MutableMap<Player, BukkitTask> = HashMap()
|
||||||
|
|
||||||
// bukkit task start
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 游戏开始前的倒计时任务
|
* 游戏开始前的倒计时任务
|
||||||
*/
|
*/
|
||||||
@@ -354,7 +369,7 @@ class Console {
|
|||||||
it.inventory.addItem(hunterCompass)
|
it.inventory.addItem(hunterCompass)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自动更新指南针任务开始运行
|
// “自动更新指南针”任务开始运行
|
||||||
compassRefreshTask = compassTask.runTaskTimer(Minehunt.instance(), 0, 20)
|
compassRefreshTask = compassTask.runTaskTimer(Minehunt.instance(), 0, 20)
|
||||||
|
|
||||||
// 通知速通者
|
// 通知速通者
|
||||||
@@ -468,6 +483,7 @@ class Console {
|
|||||||
* 处理玩家死亡
|
* 处理玩家死亡
|
||||||
*/
|
*/
|
||||||
fun handlePlayerDeath(player: Player) {
|
fun handlePlayerDeath(player: Player) {
|
||||||
|
Bukkit.getPlayer(player.uniqueId)
|
||||||
if (isSpeedrunner(player)) {
|
if (isSpeedrunner(player)) {
|
||||||
// 速通者置为旁观者模式,加入淘汰名单
|
// 速通者置为旁观者模式,加入淘汰名单
|
||||||
player.gameMode = GameMode.SPECTATOR
|
player.gameMode = GameMode.SPECTATOR
|
||||||
@@ -514,6 +530,9 @@ class Console {
|
|||||||
ruleListObjective.displaySlot = DisplaySlot.SIDEBAR
|
ruleListObjective.displaySlot = DisplaySlot.SIDEBAR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新规则时刷新对应规则项的后缀
|
||||||
|
*/
|
||||||
fun refreshEntry(ruleKey: RuleKey<*>) {
|
fun refreshEntry(ruleKey: RuleKey<*>) {
|
||||||
val teamForOneRule = scoreboard.getTeam(ruleKey.name) ?: return
|
val teamForOneRule = scoreboard.getTeam(ruleKey.name) ?: return
|
||||||
teamForOneRule.suffix(
|
teamForOneRule.suffix(
|
||||||
@@ -523,6 +542,18 @@ class Console {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 记录玩家进入传送门时的位置
|
||||||
|
*/
|
||||||
|
fun recordLocAtPortal(player: Player, location: Location) {
|
||||||
|
val world = location.world
|
||||||
|
if (world.uid == overworld.uid) {
|
||||||
|
playerLocInWorld[player.uniqueId] = location
|
||||||
|
} else if (world.uid == nether.uid) {
|
||||||
|
playerLocInNether[player.uniqueId] = location
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 游戏阶段
|
* 游戏阶段
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import org.bukkit.event.entity.PlayerDeathEvent
|
|||||||
import org.bukkit.event.player.PlayerDropItemEvent
|
import org.bukkit.event.player.PlayerDropItemEvent
|
||||||
import org.bukkit.event.player.PlayerJoinEvent
|
import org.bukkit.event.player.PlayerJoinEvent
|
||||||
import org.bukkit.event.player.PlayerMoveEvent
|
import org.bukkit.event.player.PlayerMoveEvent
|
||||||
|
import org.bukkit.event.player.PlayerPortalEvent
|
||||||
|
import org.bukkit.event.player.PlayerTeleportEvent
|
||||||
import xyz.fortern.minehunt.Console
|
import xyz.fortern.minehunt.Console
|
||||||
import xyz.fortern.minehunt.Console.GameStage
|
import xyz.fortern.minehunt.Console.GameStage
|
||||||
|
|
||||||
@@ -63,10 +65,21 @@ class PlayerListener(
|
|||||||
|
|
||||||
val player = event.player
|
val player = event.player
|
||||||
// 猎人等待出生时,或等待复活时,阻止其移动
|
// 猎人等待出生时,或等待复活时,阻止其移动
|
||||||
if (console.isHunter(player) && (console.hunterSpawnCD != null || player.gameMode == GameMode.SPECTATOR))
|
if (console.isHunter(player) && player.gameMode == GameMode.SPECTATOR)
|
||||||
event.isCancelled = true
|
event.isCancelled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 玩家想要传送时,在特定情况下阻止玩家传送
|
||||||
|
*/
|
||||||
|
@EventHandler
|
||||||
|
fun onHunterReadyTP(event: PlayerTeleportEvent) {
|
||||||
|
val player = event.player
|
||||||
|
if (console.isHunter(player) && player.gameMode == GameMode.SPECTATOR && event.cause != PlayerTeleportEvent.TeleportCause.PLUGIN) {
|
||||||
|
event.isCancelled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理玩家死亡事件
|
* 处理玩家死亡事件
|
||||||
*/
|
*/
|
||||||
@@ -86,6 +99,15 @@ class PlayerListener(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 改变维度时,记录最后的位置
|
// 监听传送门传送事件。改变维度时,记录最后的位置。
|
||||||
|
@EventHandler
|
||||||
|
fun onPlayerChangeWorld(event: PlayerPortalEvent) {
|
||||||
|
if (console.stage != GameStage.PROCESSING) return
|
||||||
|
|
||||||
|
// 我们用了Kotlin有了更装B的写法
|
||||||
|
event.from.world?.let {
|
||||||
|
console.recordLocAtPortal(event.player, event.from)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user