1
0
Fork 0

Add tree gun

This commit is contained in:
Moritz Ruth 2020-06-20 20:43:14 +02:00
parent b81e6913fc
commit 3e1ce8cc4e
No known key found for this signature in database
GPG key ID: AFD57E23E753841B
15 changed files with 201 additions and 30 deletions

View file

@ -36,6 +36,7 @@ object Resourcepack {
// Weapons // Weapons
val deagle = Material.IRON_HOE val deagle = Material.IRON_HOE
val sidekickDeagle = Material.GOLDEN_HOE val sidekickDeagle = Material.GOLDEN_HOE
val treeGun = Material.OAK_SAPLING
val glock = Material.STONE_HOE val glock = Material.STONE_HOE
val pistol = Material.WOODEN_HOE val pistol = Material.WOODEN_HOE
val shotgun = Material.IRON_AXE val shotgun = Material.IRON_AXE

View file

@ -17,7 +17,7 @@ class AbortCommand: CommandExecutor {
} }
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
if (GameManager.phase === null) { if (GameManager.phase == null) {
val tttWorld = GameManager.tttWorld val tttWorld = GameManager.tttWorld
if (tttWorld == null) if (tttWorld == null)
sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Zurzeit läuft kein Spiel.") sender.sendMessage("$COMMAND_RESPONSE_PREFIX${ChatColor.RED}Zurzeit läuft kein Spiel.")

View file

@ -97,8 +97,6 @@ object GameManager {
fun reset() { fun reset() {
CorpseManager.destroyAll() CorpseManager.destroyAll()
ItemManager.reset() ItemManager.reset()
tttWorld?.unload()
tttWorld = null
} }
fun abortGame(broadcast: Boolean = false) { fun abortGame(broadcast: Boolean = false) {

View file

@ -21,6 +21,7 @@ import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority import org.bukkit.event.EventPriority
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.block.Action import org.bukkit.event.block.Action
import org.bukkit.event.entity.EntityDamageByBlockEvent
import org.bukkit.event.entity.EntityDamageByEntityEvent import org.bukkit.event.entity.EntityDamageByEntityEvent
import org.bukkit.event.entity.EntityDamageEvent import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.PlayerDeathEvent import org.bukkit.event.entity.PlayerDeathEvent
@ -84,6 +85,11 @@ object GeneralGameListener : Listener {
} }
} }
@EventHandler
fun onEntityDamageByBlock(event: EntityDamageByBlockEvent) {
println(event.damager?.type)
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
fun onEntityDamageHighest(event: EntityDamageEvent) { fun onEntityDamageHighest(event: EntityDamageEvent) {
if (event.entity !is Player) return if (event.entity !is Player) return

View file

@ -4,6 +4,7 @@ import de.moritzruth.spigot_ttt.game.GameListener
import de.moritzruth.spigot_ttt.game.GameManager import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.game.items.impl.* import de.moritzruth.spigot_ttt.game.items.impl.*
import de.moritzruth.spigot_ttt.game.items.impl.weapons.BaseballBat import de.moritzruth.spigot_ttt.game.items.impl.weapons.BaseballBat
import de.moritzruth.spigot_ttt.game.items.impl.weapons.Fireball
import de.moritzruth.spigot_ttt.game.items.impl.weapons.Knife import de.moritzruth.spigot_ttt.game.items.impl.weapons.Knife
import de.moritzruth.spigot_ttt.game.items.impl.weapons.guns.* import de.moritzruth.spigot_ttt.game.items.impl.weapons.guns.*
import de.moritzruth.spigot_ttt.game.players.TTTPlayer import de.moritzruth.spigot_ttt.game.players.TTTPlayer
@ -30,7 +31,7 @@ object ItemManager {
val ITEMS: Set<TTTItem<*>> = setOf( val ITEMS: Set<TTTItem<*>> = setOf(
Deagle, Glock, Pistol, Rifle, SidekickDeagle, BaseballBat, Knife, CloakingDevice, Defibrillator, Deagle, Glock, Pistol, Rifle, SidekickDeagle, BaseballBat, Knife, CloakingDevice, Defibrillator,
EnderPearl, FakeCorpse, Fireball, HealingPotion, MartyrdomGrenade, Radar, SecondChance, Teleporter, EnderPearl, FakeCorpse, Fireball, HealingPotion, MartyrdomGrenade, Radar, SecondChance, Teleporter,
Shotgun, Radar, SecondChance, BoomBody Shotgun, Radar, SecondChance, BoomBody, TreeGun
) )
val listeners get () = ITEMS.mapNotNull { it.listener }.plus(listener) val listeners get () = ITEMS.mapNotNull { it.listener }.plus(listener)

View file

@ -41,9 +41,12 @@ open class TTTItem<InstanceT: TTTItem.Instance>(
it.carrier?.removeItem(it.tttItem, removeInstance = false) it.carrier?.removeItem(it.tttItem, removeInstance = false)
it.remove() it.remove()
} }
instancesByUUID.clear() instancesByUUID.clear()
} }
open fun onReset() {}
fun createInstance(): InstanceT = instanceType.primaryConstructor!!.call() fun createInstance(): InstanceT = instanceType.primaryConstructor!!.call()
.also { instancesByUUID[it.uuid] = it } .also { instancesByUUID[it.uuid] = it }

View file

@ -87,6 +87,8 @@ object Radar: TTTItem<Radar.Instance>(
override fun reset() { override fun reset() {
task.cancel() task.cancel()
active = false
carrier?.let { resendEntityMetadata(it) }
} }
} }

View file

@ -2,6 +2,7 @@ package de.moritzruth.spigot_ttt.game.items.impl
import de.moritzruth.spigot_ttt.Resourcepack import de.moritzruth.spigot_ttt.Resourcepack
import de.moritzruth.spigot_ttt.game.GameManager import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.game.corpses.TTTCorpse
import de.moritzruth.spigot_ttt.game.items.TTTItem import de.moritzruth.spigot_ttt.game.items.TTTItem
import de.moritzruth.spigot_ttt.game.items.TTTItemListener import de.moritzruth.spigot_ttt.game.items.TTTItemListener
import de.moritzruth.spigot_ttt.game.players.* import de.moritzruth.spigot_ttt.game.players.*
@ -11,13 +12,13 @@ import de.moritzruth.spigot_ttt.utils.hideInfo
import de.moritzruth.spigot_ttt.utils.nextTick import de.moritzruth.spigot_ttt.utils.nextTick
import de.moritzruth.spigot_ttt.utils.setAllToItem import de.moritzruth.spigot_ttt.utils.setAllToItem
import org.bukkit.ChatColor import org.bukkit.ChatColor
import org.bukkit.Location
import org.bukkit.boss.BarColor import org.bukkit.boss.BarColor
import org.bukkit.boss.BarStyle import org.bukkit.boss.BarStyle
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent import org.bukkit.event.inventory.InventoryCloseEvent
import org.bukkit.event.inventory.InventoryType import org.bukkit.event.inventory.InventoryType
import org.bukkit.inventory.Inventory
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import org.bukkit.scheduler.BukkitTask import org.bukkit.scheduler.BukkitTask
import java.time.Duration import java.time.Duration
@ -55,13 +56,13 @@ object SecondChance: TTTItem<SecondChance.Instance>(
var timeoutAction: TimeoutAction? = null var timeoutAction: TimeoutAction? = null
lateinit var tttPlayer: TTTPlayer lateinit var tttPlayer: TTTPlayer
fun possiblyTrigger() { fun possiblyTrigger(tttCorpse: TTTCorpse?) {
if (Random.nextBoolean()) trigger() if (Random.nextBoolean()) trigger(tttCorpse)
} }
private fun trigger() { private fun trigger(tttCorpse: TTTCorpse?) {
preventRoundEnd = true preventRoundEnd = true
timeoutAction = TimeoutAction(this) timeoutAction = TimeoutAction(this, tttCorpse)
} }
override fun reset() { override fun reset() {
@ -72,8 +73,7 @@ object SecondChance: TTTItem<SecondChance.Instance>(
tttPlayer = carrier tttPlayer = carrier
} }
class TimeoutAction(private val instance: Instance) { class TimeoutAction(private val instance: Instance, val tttCorpse: TTTCorpse?) {
val deathLocation: Location = instance.requireCarrier().player.location
private val startedAt = Instant.now()!! private val startedAt = Instant.now()!!
private var bossBar = plugin.server.createBossBar( private var bossBar = plugin.server.createBossBar(
"${ChatColor.GREEN}${ChatColor.BOLD}Second Chance", "${ChatColor.GREEN}${ChatColor.BOLD}Second Chance",
@ -82,7 +82,13 @@ object SecondChance: TTTItem<SecondChance.Instance>(
).also { it.addPlayer(instance.tttPlayer.player) } ).also { it.addPlayer(instance.tttPlayer.player) }
init { init {
instance.tttPlayer.player.openInventory(chooseSpawnInventory) openInventory()
}
fun openInventory() {
instance.tttPlayer.player.openInventory(
if (tttCorpse == null) chooseSpawnWithoutCorpseInventory else chooseSpawnInventory
)
} }
private var task: BukkitTask = plugin.server.scheduler.runTaskTimer(plugin, fun() { private var task: BukkitTask = plugin.server.scheduler.runTaskTimer(plugin, fun() {
@ -120,6 +126,23 @@ object SecondChance: TTTItem<SecondChance.Instance>(
setDisplayName("${ChatColor.GREEN}${ChatColor.BOLD}Bei der Leiche") setDisplayName("${ChatColor.GREEN}${ChatColor.BOLD}Bei der Leiche")
}) })
setCommonItems()
}
private val chooseSpawnWithoutCorpseInventory = plugin.server.createInventory(
null,
InventoryType.CHEST,
"${ChatColor.DARK_RED}${ChatColor.BOLD}Second Chance"
).apply {
setAllToItem(setOf(0, 1, 2, 9, 10, 11, 18, 19, 20), ItemStack(ON_CORPSE).applyMeta {
hideInfo()
setDisplayName("${ChatColor.GREEN}${ChatColor.BOLD}Bei der Leiche ${ChatColor.RED}(NICHT VERFÜGBAR)")
})
setCommonItems()
}
private fun Inventory.setCommonItems() {
setAllToItem(setOf(3, 4, 5, 12, 13, 14, 21, 22, 23), ItemStack(Resourcepack.Items.textureless).applyMeta { setAllToItem(setOf(3, 4, 5, 12, 13, 14, 21, 22, 23), ItemStack(Resourcepack.Items.textureless).applyMeta {
hideInfo() hideInfo()
setDisplayName("${ChatColor.RESET}${ChatColor.BOLD}Wo möchtest du spawnen?") setDisplayName("${ChatColor.RESET}${ChatColor.BOLD}Wo möchtest du spawnen?")
@ -135,16 +158,16 @@ object SecondChance: TTTItem<SecondChance.Instance>(
@EventHandler @EventHandler
fun onTTTPlayerTrueDeath(event: TTTPlayerTrueDeathEvent) { fun onTTTPlayerTrueDeath(event: TTTPlayerTrueDeathEvent) {
val instance = getInstance(event.tttPlayer) ?: return val instance = getInstance(event.tttPlayer) ?: return
instance.possiblyTrigger() instance.possiblyTrigger(event.tttCorpse)
event.winnerRoleGroup = PlayerManager.getOnlyRemainingRoleGroup() event.winnerRoleGroup = PlayerManager.getOnlyRemainingRoleGroup()
} }
@EventHandler @EventHandler
fun onInventoryClose(event: InventoryCloseEvent) { fun onInventoryClose(event: InventoryCloseEvent) {
if (event.inventory == chooseSpawnInventory) { if (event.inventory === chooseSpawnInventory || event.inventory === chooseSpawnWithoutCorpseInventory) {
nextTick { nextTick {
handleWithInstance(event) { instance -> handleWithInstance(event) { instance ->
instance.tttPlayer.player.openInventory(chooseSpawnInventory) instance.timeoutAction?.openInventory()
} }
} }
} }
@ -152,14 +175,14 @@ object SecondChance: TTTItem<SecondChance.Instance>(
@EventHandler @EventHandler
fun onInventoryClick(event: InventoryClickEvent) { fun onInventoryClick(event: InventoryClickEvent) {
if (event.clickedInventory != chooseSpawnInventory) return if (event.inventory !== chooseSpawnInventory && event.inventory !== chooseSpawnWithoutCorpseInventory) return
handleWithInstance(event) { instance -> handleWithInstance(event) { instance ->
val timeoutAction = instance.timeoutAction!! val timeoutAction = instance.timeoutAction!!
val location = when (event.currentItem?.type) { val location = when (event.currentItem?.type) {
ON_SPAWN -> GameManager.world.spawnLocation ON_SPAWN -> GameManager.world.spawnLocation
ON_CORPSE -> timeoutAction.deathLocation ON_CORPSE -> timeoutAction.tttCorpse?.location ?: return@handleWithInstance
else -> return@handleWithInstance else -> return@handleWithInstance
} }

View file

@ -1,4 +1,4 @@
package de.moritzruth.spigot_ttt.game.items.impl package de.moritzruth.spigot_ttt.game.items.impl.weapons
import de.moritzruth.spigot_ttt.game.GameManager import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.game.items.ClickEvent import de.moritzruth.spigot_ttt.game.items.ClickEvent
@ -12,8 +12,6 @@ import de.moritzruth.spigot_ttt.utils.clearHeldItemSlot
import de.moritzruth.spigot_ttt.utils.createKillExplosion import de.moritzruth.spigot_ttt.utils.createKillExplosion
import org.bukkit.ChatColor import org.bukkit.ChatColor
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.Sound
import org.bukkit.SoundCategory
import org.bukkit.entity.EntityType import org.bukkit.entity.EntityType
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.entity.ExplosionPrimeEvent import org.bukkit.event.entity.ExplosionPrimeEvent

View file

@ -4,10 +4,10 @@ import de.moritzruth.spigot_ttt.Resourcepack
import de.moritzruth.spigot_ttt.game.GameManager import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.game.items.ClickEvent import de.moritzruth.spigot_ttt.game.items.ClickEvent
import de.moritzruth.spigot_ttt.game.items.LoreHelper import de.moritzruth.spigot_ttt.game.items.LoreHelper
import de.moritzruth.spigot_ttt.game.items.SpawnProbability
import de.moritzruth.spigot_ttt.game.items.TTTItem import de.moritzruth.spigot_ttt.game.items.TTTItem
import de.moritzruth.spigot_ttt.game.players.DeathReason import de.moritzruth.spigot_ttt.game.players.DeathReason
import de.moritzruth.spigot_ttt.game.players.TTTPlayer import de.moritzruth.spigot_ttt.game.players.TTTPlayer
import de.moritzruth.spigot_ttt.game.items.SpawnProbability
import de.moritzruth.spigot_ttt.utils.applyMeta import de.moritzruth.spigot_ttt.utils.applyMeta
import de.moritzruth.spigot_ttt.utils.hideInfo import de.moritzruth.spigot_ttt.utils.hideInfo
import de.moritzruth.spigot_ttt.utils.startExpProgressTask import de.moritzruth.spigot_ttt.utils.startExpProgressTask

View file

@ -0,0 +1,126 @@
package de.moritzruth.spigot_ttt.game.items.impl.weapons.guns
import de.moritzruth.spigot_ttt.Resourcepack
import de.moritzruth.spigot_ttt.game.players.DeathReason
import de.moritzruth.spigot_ttt.game.players.Role
import de.moritzruth.spigot_ttt.game.players.TTTPlayer
import de.moritzruth.spigot_ttt.game.players.roles
import de.moritzruth.spigot_ttt.plugin
import de.moritzruth.spigot_ttt.utils.secondsToTicks
import de.moritzruth.spigot_ttt.utils.sendActionBarMessage
import org.bukkit.ChatColor
import org.bukkit.Material
import org.bukkit.block.BlockFace
import org.bukkit.block.Sign
import org.bukkit.block.data.type.WallSign
import org.bukkit.potion.PotionEffect
import org.bukkit.potion.PotionEffectType
import org.bukkit.scheduler.BukkitTask
object TreeGun: Gun(
type = Type.SPECIAL,
instanceType = Instance::class,
shopInfo = ShopInfo(
buyableBy = roles(Role.JACKAL, Role.TRAITOR),
buyLimit = 2,
price = 1
),
displayName = "${ChatColor.DARK_GREEN}${ChatColor.BOLD}Tree Gun",
itemLore = listOf(
"",
"${ChatColor.GOLD}Verwandelt einen Spieler nach",
"${ChatColor.GOLD}kurzer Zeit in einen Baum",
"",
"${ChatColor.RED}Nur ein Schuss"
),
appendLore = false,
damage = 0.1, // Not really
cooldown = 1.0,
magazineSize = 1,
reloadTime = 0.0,
material = Resourcepack.Items.treeGun,
shootSound = Resourcepack.Sounds.Item.Weapon.Pistol.fire,
reloadSound = Resourcepack.Sounds.Item.Weapon.Pistol.reload
) {
private val transmutingPlayers = mutableSetOf<TransmutingPlayer>()
data class TransmutingPlayer(
val tttPlayer: TTTPlayer,
val killer: TTTPlayer,
val task: BukkitTask
)
override fun onReset() {
transmutingPlayers.forEach { it.task.cancel() }
}
private fun spawnTree(tttPlayer: TTTPlayer) {
val centerLocation = tttPlayer.player.location
for (y in 0..3) {
centerLocation.clone().add(0.0, y.toDouble(), 0.0).block.type = Material.OAK_WOOD
}
for (y in 2..3) {
for (x in -1..1) {
for (z in -1..1) {
if (z == 0 && x == 0) continue
centerLocation.clone()
.add(x.toDouble(), y.toDouble(), z.toDouble())
.block.type = Material.OAK_LEAVES
}
}
}
centerLocation.clone().add(0.0, 4.0, 0.0).block.type = Material.OAK_LEAVES
val signBlock = centerLocation.clone().add(1.0, 1.0, 0.0).block
signBlock.type = Material.OAK_WALL_SIGN
val data = signBlock.blockData as WallSign
data.facing = BlockFace.EAST
signBlock.blockData = data
val state = signBlock.state as Sign
state.setLine(1, "${ChatColor.BLACK}${ChatColor.BOLD}R.I.P.")
state.setLine(2, tttPlayer.player.name)
state.update()
}
fun startTransmuting(tttPlayer: TTTPlayer, killer: TTTPlayer) {
transmutingPlayers.add(TransmutingPlayer(
tttPlayer,
killer,
plugin.server.scheduler.runTaskLater(plugin, fun() {
spawnTree(tttPlayer)
tttPlayer.damage(
1000.0,
DeathReason.Item(TreeGun),
killer,
scream = false,
spawnCorpse = false
)
}, secondsToTicks(6).toLong())
))
tttPlayer.player.addPotionEffect(PotionEffect(
PotionEffectType.SLOW,
1000000,
3,
false,
false
))
}
class Instance: Gun.Instance(TreeGun) {
override fun reload() {
requireCarrier().player.sendActionBarMessage("${ChatColor.RED}Du kannst diese Waffe nicht nachladen")
}
override fun onHit(tttPlayer: TTTPlayer, hitTTTPlayer: TTTPlayer) {
startTransmuting(hitTTTPlayer, tttPlayer)
}
}
}

View file

@ -66,22 +66,35 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClassCompanion = TT
tttClassInstance.init() tttClassInstance.init()
} }
fun damage(damage: Double, reason: DeathReason, damager: TTTPlayer, scream: Boolean = true) { fun damage(
damage: Double,
reason: DeathReason,
damager: TTTPlayer,
scream: Boolean = true,
spawnCorpse: Boolean = true
) {
if (!alive) return if (!alive) return
val event = TTTPlayerDamageEvent(this, damage, reason).call() val event = TTTPlayerDamageEvent(this, damage, reason).call()
val finalHealth = player.health - event.damage val finalHealth = player.health - event.damage
if (finalHealth <= 0.0) onDeath(reason, damager, scream) if (finalHealth <= 0.0) onDeath(reason, damager, scream, spawnCorpse)
else player.damage(damage) else player.damage(damage)
} }
fun onDeath(reason: DeathReason, killer: TTTPlayer?, scream: Boolean = true) { fun onDeath(
reason: DeathReason,
killer: TTTPlayer?,
scream: Boolean = true,
spawnCorpse: Boolean = true
) {
if (!alive) return if (!alive) return
alive = false alive = false
ignoreNextInteract = false ignoreNextInteract = false
player.gameMode = GameMode.SPECTATOR player.gameMode = GameMode.SPECTATOR
player.activePotionEffects.forEach { activePotionEffect -> player.removePotionEffect(activePotionEffect.type) }
Shop.clear(this) Shop.clear(this)
var reallyScream = scream var reallyScream = scream
@ -106,7 +119,8 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClassCompanion = TT
reallyScream = event.scream reallyScream = event.scream
} else { } else {
val tttCorpse = TTTCorpse.spawn(this, reason) val tttCorpse = if (spawnCorpse) TTTCorpse.spawn(this, reason) else null
credits = 0 credits = 0
val onlyRemainingRoleGroup = PlayerManager.getOnlyRemainingRoleGroup() val onlyRemainingRoleGroup = PlayerManager.getOnlyRemainingRoleGroup()
@ -204,7 +218,6 @@ class TTTPlayer(player: Player, role: Role, val tttClass: TTTClassCompanion = TT
player.level = 0 player.level = 0
player.exp = 0F player.exp = 0F
player.allowFlight = player.gameMode == GameMode.CREATIVE player.allowFlight = player.gameMode == GameMode.CREATIVE
player.foodLevel = 20
clearInventory(false) clearInventory(false)
tttClassInstance.reset() tttClassInstance.reset()

View file

@ -10,7 +10,7 @@ class TTTPlayerTrueDeathEvent(
val location: Location, val location: Location,
val killer: TTTPlayer?, val killer: TTTPlayer?,
val scream: Boolean = true, val scream: Boolean = true,
val tttCorpse: TTTCorpse, val tttCorpse: TTTCorpse?,
var winnerRoleGroup: RoleGroup? = null var winnerRoleGroup: RoleGroup? = null
): Event() { ): Event() {
override fun getHandlers(): HandlerList { override fun getHandlers(): HandlerList {

View file

@ -1,5 +1,6 @@
package de.moritzruth.spigot_ttt.game.worlds package de.moritzruth.spigot_ttt.game.worlds
import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.plugin import de.moritzruth.spigot_ttt.plugin
import de.moritzruth.spigot_ttt.utils.ConfigurationFile import de.moritzruth.spigot_ttt.utils.ConfigurationFile
import org.bukkit.World import org.bukkit.World
@ -21,8 +22,7 @@ class TTTWorld(private val sourceWorldDir: File) {
val spawnLocations = SpawnLocationsManager(this) val spawnLocations = SpawnLocationsManager(this)
init { init {
if (world != null) unloadWorld() if (world != null) GameManager.tttWorld = this
if (worldDir.exists()) worldDir.deleteRecursively()
} }
fun load() { fun load() {

View file

@ -2,7 +2,7 @@ package de.moritzruth.spigot_ttt.utils
import de.moritzruth.spigot_ttt.game.GameManager import de.moritzruth.spigot_ttt.game.GameManager
import de.moritzruth.spigot_ttt.game.classes.impl.Stuntman import de.moritzruth.spigot_ttt.game.classes.impl.Stuntman
import de.moritzruth.spigot_ttt.game.items.impl.Fireball import de.moritzruth.spigot_ttt.game.items.impl.weapons.Fireball
import de.moritzruth.spigot_ttt.game.players.DeathReason import de.moritzruth.spigot_ttt.game.players.DeathReason
import de.moritzruth.spigot_ttt.game.players.TTTPlayer import de.moritzruth.spigot_ttt.game.players.TTTPlayer
import org.bukkit.Location import org.bukkit.Location