Fix start errors

This commit is contained in:
TDSTOS
2025-12-12 05:12:09 +01:00
parent 1acb5681fc
commit bb47145a73
16 changed files with 200 additions and 61 deletions

View File

@@ -43,8 +43,8 @@ dependencies {
compileOnly("org.popcraft:chunky-common:1.3.38") compileOnly("org.popcraft:chunky-common:1.3.38")
implementation("club.mcscrims:core:1.4.3.1") implementation("club.mcscrims:core:1.4.3.2")
implementation("club.mcscrims:spigot:1.4.3.1") implementation("club.mcscrims:spigot:1.4.3.2")
compileOnly("io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT") compileOnly("io.papermc.paper:paper-api:1.21.1-R0.1-SNAPSHOT")
paperweight.paperDevBundle("1.21.1-R0.1-SNAPSHOT") paperweight.paperDevBundle("1.21.1-R0.1-SNAPSHOT")

View File

@@ -36,6 +36,7 @@ import net.kyori.adventure.text.Component
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
import net.luckperms.api.LuckPerms import net.luckperms.api.LuckPerms
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.entity.Player
import org.bukkit.plugin.java.JavaPlugin import org.bukkit.plugin.java.JavaPlugin
class SpeedHG : JavaPlugin() { class SpeedHG : JavaPlugin() {
@@ -83,16 +84,16 @@ class SpeedHG : JavaPlugin() {
{ {
instance = this instance = this
loadConfigurations()
setupDatabase()
networkManager = SpigotNetworkManager.getInstance()!!
worldManager = WorldManager( this ) worldManager = WorldManager( this )
worldManager.deleteWorld() worldManager.deleteWorld()
} }
override fun onEnable() override fun onEnable()
{ {
loadConfigurations()
setupDatabase()
networkManager = SpigotNetworkManager.getInstance()!!
worldManager.setupWorld() worldManager.setupWorld()
chatFormatter = ChatFormatter.create( chatFormatter = ChatFormatter.create(
@@ -150,6 +151,18 @@ class SpeedHG : JavaPlugin() {
getCommand("kits")?.setExecutor(KitsCommand( this, kitInventoryManager )) getCommand("kits")?.setExecutor(KitsCommand( this, kitInventoryManager ))
} }
fun getAlivePlayers(): List<Player>
{
val alivePlayers = mutableListOf<Player>()
runBlocking {
val players = playerRepository.findAlivePlayers( server.name )
alivePlayers.addAll(players.map { Bukkit.getPlayer( it.uuid )!! })
}
return alivePlayers
}
/* /*
* LUCKPERMS >> * LUCKPERMS >>
*/ */

View File

@@ -20,7 +20,7 @@ class KitsCommand(
): Boolean { ): Boolean {
if ( sender !is Player ) if ( sender !is Player )
{ {
sender.sendMessage("§cOnly players can use this command.") plugin.chatManager.sendSenderMessage( sender, "default.only_players" )
return true return true
} }

View File

@@ -1,6 +1,5 @@
package club.mcscrims.speedhg.config package club.mcscrims.speedhg.config
import club.mcscrims.core.config.ConfigData
import club.mcscrims.core.config.DurationEntry import club.mcscrims.core.config.DurationEntry
import club.mcscrims.core.config.DurationType import club.mcscrims.core.config.DurationType
import club.mcscrims.core.config.annotations.ConfigClass import club.mcscrims.core.config.annotations.ConfigClass
@@ -56,7 +55,7 @@ data class PluginConfig(
data class GameConfig( data class GameConfig(
val name: String = "SpeedHG", val name: String = "SpeedHG",
val variantName: String = "Solo - Single Kit", val variantName: String = "Solo - Single Kit",
val minimumPlayers: Int = 8, val minimumPlayers: Int = 2,
val competitiveGame: Boolean = false, val competitiveGame: Boolean = false,
val competitiveCommands: List<String> = emptyList(), val competitiveCommands: List<String> = emptyList(),
val playerStates: Map<String, StateConfig> = getPlayerStates(), val playerStates: Map<String, StateConfig> = getPlayerStates(),
@@ -78,7 +77,7 @@ data class PluginConfig(
playerState: String playerState: String
): DurationEntry ): DurationEntry
{ {
return SpeedHG.instance.pluginConfig.parseDuration( "game.playerStates.$playerState.duration" ) return (getPlayerStates()[ playerState ]?.duration as DurationEntry )
} }
data class StateConfig( data class StateConfig(

View File

@@ -6,6 +6,7 @@ import club.mcscrims.spigot.scheduler.SchedulerManager
import club.mcscrims.spigot.scheduler.TaskRegistration import club.mcscrims.spigot.scheduler.TaskRegistration
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.scheduler.BukkitTask
abstract class GameState( abstract class GameState(
val name: String, val name: String,
@@ -15,7 +16,7 @@ abstract class GameState(
protected val durationSeconds: Int? = null protected val durationSeconds: Int? = null
) { ) {
private var tickTask: TaskRegistration? = null private var tickTask: BukkitTask? = null
private var remainingSeconds: Int = durationSeconds ?: 0 private var remainingSeconds: Int = durationSeconds ?: 0
private var isActive: Boolean = false private var isActive: Boolean = false
@@ -25,7 +26,7 @@ abstract class GameState(
isActive = true isActive = true
remainingSeconds = durationSeconds ?: 0 remainingSeconds = durationSeconds ?: 0
if ( durationSeconds != null && durationSeconds > 0 ) if ( durationSeconds != null )
startTicking() startTicking()
} }
@@ -42,12 +43,11 @@ abstract class GameState(
private fun startTicking() private fun startTicking()
{ {
tickTask = schedulerManager.runRepeating( 20L, 20L ) tickTask = Bukkit.getScheduler().runTaskTimer( plugin, { ->
{
if ( !isActive ) if ( !isActive )
{ {
stopTicking() stopTicking()
return@runRepeating return@runTaskTimer
} }
try { try {
@@ -62,7 +62,7 @@ abstract class GameState(
if (plugin.pluginConfig.data.getDuration( name ).type == DurationType.INCREASING ) if (plugin.pluginConfig.data.getDuration( name ).type == DurationType.INCREASING )
{ {
remainingSeconds++ remainingSeconds++
return@runRepeating return@runTaskTimer
} }
remainingSeconds-- remainingSeconds--
@@ -75,7 +75,7 @@ abstract class GameState(
e.printStackTrace() e.printStackTrace()
} }
} }
} }, 20L, 20L )
} }
private fun stopTicking() { private fun stopTicking() {

View File

@@ -30,7 +30,7 @@ class FeastState(
private val random = Random() private val random = Random()
internal var feastLocation: Location internal var feastLocation: Location
internal lateinit var feastBox: BoundingBox internal var feastBox: BoundingBox
internal var feastHeight: Int = 1 internal var feastHeight: Int = 1
init init

View File

@@ -10,6 +10,7 @@ import org.bukkit.entity.Player
import org.bukkit.event.entity.EntityDamageByEntityEvent import org.bukkit.event.entity.EntityDamageByEntityEvent
import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.event.player.PlayerMoveEvent import org.bukkit.event.player.PlayerMoveEvent
import org.bukkit.inventory.ItemStack
abstract class AbstractKit( abstract class AbstractKit(
val id: String, val id: String,
@@ -23,6 +24,7 @@ abstract class AbstractKit(
) { ) {
lateinit var config: Map<String, Double> lateinit var config: Map<String, Double>
val items = mutableListOf<ItemStack>()
abstract fun onSelect( player: Player ) abstract fun onSelect( player: Player )
@@ -93,7 +95,7 @@ abstract class AbstractKit(
} }
enum class PlayStyle { enum class PlayStyle {
OFFENSIVE, DEFENSIVE, NULL OFFENSIVE, DEFENSIVE
} }
enum class KitMetaData { enum class KitMetaData {

View File

@@ -70,6 +70,7 @@ class KitManager(
Component::class.java, Component::class.java,
List::class.java, List::class.java,
Material::class.java, Material::class.java,
PlayStyle::class.java,
SpeedHG::class.java, SpeedHG::class.java,
AbilityContext::class.java, AbilityContext::class.java,
GameManager::class.java GameManager::class.java
@@ -80,7 +81,7 @@ class KitManager(
displayName, displayName,
description, description,
icon, icon,
PlayStyle.NULL, PlayStyle.DEFENSIVE,
plugin, plugin,
plugin.abilityContext, plugin.abilityContext,
plugin.gameManager plugin.gameManager

View File

@@ -46,11 +46,12 @@ class AnchorKit(
player: Player player: Player
) { ) {
anvilItem = ItemBuilder( plugin, Material.ANVIL ) anvilItem = ItemBuilder( plugin, Material.ANVIL )
.name(plugin.chatFormatter.format( "kits.anchor.items.anvil.${playStyle.name.lowercase()}" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "anchor", "anvil" )!![ playStyle.name.lowercase() ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
items.add( anvilItem )
player.inventory.setItem( 0, anvilItem ) player.inventory.setItem( 0, anvilItem )
} }

View File

@@ -1,15 +1,20 @@
package club.mcscrims.speedhg.kit.impl package club.mcscrims.speedhg.kit.impl
import club.mcscrims.speedhg.SpeedHG import club.mcscrims.speedhg.SpeedHG
import club.mcscrims.speedhg.SpeedHG.Companion.content
import club.mcscrims.speedhg.ability.AbilityContext import club.mcscrims.speedhg.ability.AbilityContext
import club.mcscrims.speedhg.game.GameManager import club.mcscrims.speedhg.game.GameManager
import club.mcscrims.speedhg.kit.AbstractKit import club.mcscrims.speedhg.kit.AbstractKit
import club.mcscrims.speedhg.kit.KitMetaData import club.mcscrims.speedhg.kit.KitMetaData
import club.mcscrims.speedhg.kit.PlayStyle import club.mcscrims.speedhg.kit.PlayStyle
import club.mcscrims.spigot.item.ItemBuilder import club.mcscrims.spigot.item.ItemBuilder
import club.mcscrims.spigot.util.GroundDetector
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component
import org.bukkit.Bukkit
import org.bukkit.GameMode
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.Particle
import org.bukkit.entity.EnderPearl
import org.bukkit.entity.EntityType
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.block.Action import org.bukkit.event.block.Action
import org.bukkit.event.entity.EntityDamageByEntityEvent import org.bukkit.event.entity.EntityDamageByEntityEvent
@@ -17,6 +22,12 @@ import org.bukkit.event.player.PlayerInteractEvent
import org.bukkit.event.player.PlayerMoveEvent import org.bukkit.event.player.PlayerMoveEvent
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import org.bukkit.metadata.FixedMetadataValue import org.bukkit.metadata.FixedMetadataValue
import org.bukkit.potion.PotionEffect
import org.bukkit.potion.PotionEffectType
import org.bukkit.scheduler.BukkitRunnable
import org.bukkit.util.Vector
import kotlin.math.max
import kotlin.math.roundToInt
class BlackPantherKit( class BlackPantherKit(
id: String, id: String,
@@ -46,33 +57,33 @@ class BlackPantherKit(
PlayStyle.DEFENSIVE -> PlayStyle.DEFENSIVE ->
{ {
blackDye = ItemBuilder( plugin, Material.BLACK_DYE ) blackDye = ItemBuilder( plugin, Material.BLACK_DYE )
.name(plugin.chatFormatter.format( "kits.anchor.items.blackDye.${playStyle.name.lowercase()}" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "blackpanther", "blackDye" )!![ "null" ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
items.add( blackDye )
player.inventory.setItem( 0, blackDye ) player.inventory.setItem( 0, blackDye )
} }
PlayStyle.OFFENSIVE -> PlayStyle.OFFENSIVE ->
{ {
blackDye = ItemBuilder( plugin, Material.BLACK_DYE ) blackDye = ItemBuilder( plugin, Material.BLACK_DYE )
.name(plugin.chatFormatter.format( "kits.anchor.items.blackDye.${playStyle.name.lowercase()}" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "blackpanther", "blackDye" )!![ playStyle.name.lowercase() ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
blazePowder = ItemBuilder( plugin, Material.BLAZE_POWDER ) blazePowder = ItemBuilder( plugin, Material.BLAZE_POWDER )
.name(plugin.chatFormatter.format( "kits.anchor.items.blazePowder" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "blackpanther", "blazePowder" )!![ playStyle.name.lowercase() ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
items.addAll(listOf( blackDye, blazePowder ))
player.inventory.setItem( 0, blackDye ) player.inventory.setItem( 0, blackDye )
player.inventory.setItem( 1, blazePowder ) player.inventory.setItem( 1, blazePowder )
} }
else -> {}
} }
} }
@@ -127,11 +138,11 @@ class BlackPantherKit(
if ( playStyle == PlayStyle.DEFENSIVE ) if ( playStyle == PlayStyle.DEFENSIVE )
{ {
launchAndDash( player )
return return
} }
push( player )
} }
Material.BLAZE_POWDER -> Material.BLAZE_POWDER ->
@@ -153,6 +164,101 @@ class BlackPantherKit(
override fun onMove( player: Player, event: PlayerMoveEvent ) {} override fun onMove( player: Player, event: PlayerMoveEvent ) {}
private fun push(
player: Player
) {
plugin.getAlivePlayers().stream()
.filter { it != player }
.filter { it.location.distance( player.location ) <= defaultRadius }
.forEach { nearby ->
val pushDirection = nearby.location.toVector().subtract( player.location.toVector() ).normalize()
pushDirection.multiply( 1.0 )
pushDirection.setY( 0.5 )
nearby.velocity = pushDirection
val enderPearl = player.world.spawnEntity( player.location, EntityType.ENDER_PEARL ) as EnderPearl
enderPearl.velocity = pushDirection
enderPearl.setMetadata( KitMetaData.IS_BLACK_PANTHER.getKey(), FixedMetadataValue( plugin, true ))
object : BukkitRunnable()
{
override fun run()
{
if (GroundDetector.isOnGround( nearby ))
{
this.cancel()
return
}
nearby.world.spawnParticle( Particle.END_ROD, nearby.location, 5, 0.2, 0.2, 0.2 )
}
}.runTaskTimer( plugin, 0L, 2L )
}
}
private fun launchAndDash(
player: Player,
upwardVelocity: Double = 2.2,
waitTicks: Long = 60L,
dashSpeed: Double = 2.8,
horizontalOnly: Boolean = true,
yBoost: Double = 0.2,
noFallDamageMillis: Double = 1.0
) {
if ( !player.isOnline ) return
if ( player.isInsideVehicle ) player.leaveVehicle()
if ( player.gameMode == GameMode.SPECTATOR ) return
player.velocity = Vector( 0.0, upwardVelocity, 0.0 )
player.fallDistance = 0f
if ( noFallDamageMillis > 0 )
player.addPotionEffect(PotionEffect( PotionEffectType.RESISTANCE, ( noFallDamageMillis * 20 ).toInt(), 999, false, false, false ))
Bukkit.getScheduler().runTaskLater( plugin, { ->
val p = Bukkit.getPlayer( player.uniqueId ) ?: return@runTaskLater
if ( !p.isOnline ) return@runTaskLater
var dir = p.eyeLocation.direction
if ( horizontalOnly ) dir = Vector( dir.x, 0.0, dir.z )
dir = if ( dir.lengthSquared() < 1e-6 ) Vector( 0, 0, 0 ) else dir.normalize()
val dash = dir.multiply( dashSpeed ).add(Vector( 0.0, yBoost, 0.0 ))
p.velocity = dash
}, max( 0L, waitTicks ))
object : BukkitRunnable()
{
override fun run()
{
if (GroundDetector.isOnGround( player ))
{
player.world.createExplosion(
player.location,
explosionMultiplier.roundToInt().toFloat(),
false, true
)
val alivePlayers = plugin.getAlivePlayers().stream()
.filter { it != player }
.filter { it.location.distance( player.location ) <= defaultRadius }
.toList()
alivePlayers.forEach { nearby ->
nearby.damage( 6.0, player )
}
plugin.chatManager.sendMessage( player, "kits.blackPanther.messages.wakandaForever.hit", "{hit}" to alivePlayers.size.toString() )
this.cancel()
}
}
}.runTaskTimer( plugin, max( 0L, waitTicks ) + 5L, 5L )
}
private fun extraDamage( private fun extraDamage(
player: Player player: Player
) { ) {

View File

@@ -42,11 +42,12 @@ class BlitzcrankKit(
player: Player player: Player
) { ) {
hotsItem = ItemBuilder( plugin, Material.HEART_OF_THE_SEA ) hotsItem = ItemBuilder( plugin, Material.HEART_OF_THE_SEA )
.name(plugin.chatFormatter.format( "kits.blitzcrank.items.hots" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "blitzcrank", "hots" )!![ playStyle.name.lowercase() ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
items.add( hotsItem )
player.inventory.setItem( 0, hotsItem ) player.inventory.setItem( 0, hotsItem )
when( playStyle ) when( playStyle )
@@ -54,26 +55,26 @@ class BlitzcrankKit(
PlayStyle.DEFENSIVE -> PlayStyle.DEFENSIVE ->
{ {
fishingRodItem = ItemBuilder( plugin, Material.FISHING_ROD ) fishingRodItem = ItemBuilder( plugin, Material.FISHING_ROD )
.name(plugin.chatFormatter.format( "kits.blitzcrank.items.fishing_rod" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "blitzcrank", "fishingrod" )!![ playStyle.name.lowercase() ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
items.add( fishingRodItem )
player.inventory.setItem( 1, fishingRodItem ) player.inventory.setItem( 1, fishingRodItem )
} }
PlayStyle.OFFENSIVE -> PlayStyle.OFFENSIVE ->
{ {
pufferfishItem = ItemBuilder( plugin, Material.PUFFERFISH ) pufferfishItem = ItemBuilder( plugin, Material.PUFFERFISH )
.name(plugin.chatFormatter.format( "kits.blitzcrank.items.pufferfish" ).content()) .name(plugin.messageConfig.data.getKitItemNames( "blitzcrank", "pufferfish" )!![ playStyle.name.lowercase() ]!!)
.unbreakable( true ) .unbreakable( true )
.hideAttributes() .hideAttributes()
.build() .build()
items.add( pufferfishItem )
player.inventory.setItem( 1, pufferfishItem ) player.inventory.setItem( 1, pufferfishItem )
} }
else -> {}
} }
} }
@@ -203,7 +204,7 @@ class BlitzcrankKit(
target.velocity = hookDirection target.velocity = hookDirection
plugin.chatManager.sendMessage( player, "kits.blitzcrank.messages.hook.player", "{player}" to target.getDisplayName ) plugin.chatManager.sendMessage( player, "kits.blitzcrank.messages.hook.player", "{player}" to target.getDisplayName )
plugin.chatManager.sendMessage( player, "kits.blitzcrank.messages.hook.target" ) plugin.chatManager.sendMessage( target, "kits.blitzcrank.messages.hook.target" )
} }
private fun stunNearby( private fun stunNearby(

View File

@@ -202,7 +202,16 @@ class GameStateListener(
return return
} }
TODO( "Kit & perk items" ) val kit = plugin.kitManager.getSelectedKit( player )
?: return
val items = kit.items.ifEmpty { return }
if (items.contains( event.itemDrop.itemStack ))
{
event.isCancelled = true
player.playSound( player, Sound.BLOCK_NOTE_BLOCK_BASS, 1f, 1f )
}
} }
@EventHandler @EventHandler

View File

@@ -11,7 +11,7 @@ class RecraftInspector(
private val beforeState = plugin.pluginConfig.data.game.recraftNerf[ "before_state" ] as String private val beforeState = plugin.pluginConfig.data.game.recraftNerf[ "before_state" ] as String
private val recraftNerfEnabled = plugin.pluginConfig.data.game.recraftNerf[ "enabled" ] as Boolean private val recraftNerfEnabled = plugin.pluginConfig.data.game.recraftNerf[ "enabled" ] as Boolean
private val maxRecraftAmount = plugin.pluginConfig.data.game.recraftNerf[ "max_amount" ] as Int private val maxRecraftAmount = plugin.pluginConfig.data.game.recraftNerf[ "max_amount" ] as Double
fun startRunnable() fun startRunnable()
{ {

View File

@@ -12,7 +12,7 @@ class WorldManager(
private val plugin: SpeedHG private val plugin: SpeedHG
) { ) {
private lateinit var worldName: String private var worldName = "world"
private lateinit var world: World private lateinit var world: World
fun highestLocationWithRadius( fun highestLocationWithRadius(
@@ -113,21 +113,21 @@ class WorldManager(
// CHUNKY >> // CHUNKY >>
plugin.logger.info("Setting up world... [Stage [3]: CHUNKY]") // plugin.logger.info("Setting up world... [Stage [3]: CHUNKY]")
val chunky = Bukkit.getServicesManager().load( ChunkyAPI::class.java ) // val chunky = Bukkit.getServicesManager().load( ChunkyAPI::class.java )
//
if ( chunky == null || chunky.version() != 0 ) // if ( chunky == null || chunky.version() != 0 )
{ // {
plugin.isReady = true // plugin.isReady = true
return // return
} // }
//
val radius = world.worldBorder.size / 2 // val radius = world.worldBorder.size / 2
//
chunky.startTask( worldName, "square", 0.0, 0.0, radius, radius, "concentric" ) // chunky.startTask( worldName, "square", 0.0, 0.0, radius, radius, "concentric" )
chunky.onGenerationComplete { plugin.isReady = true } // chunky.onGenerationComplete { plugin.isReady = true }
//
plugin.server.dispatchCommand( Bukkit.getConsoleSender(), "chunky silent" ) // plugin.server.dispatchCommand( Bukkit.getConsoleSender(), "chunky silent" )
// FINISH >> // FINISH >>
@@ -150,7 +150,9 @@ class WorldManager(
fun getWorld(): World? fun getWorld(): World?
{ {
return if ( !::world.isInitialized ) return if ( !::world.isInitialized )
setWorld( plugin.pluginConfig.data.world.name ) try {
setWorld( plugin.pluginConfig.data.world.name )
} catch ( _: Exception ) { null }
else this.world else this.world
} }

View File

@@ -57,25 +57,25 @@ game:
playerStates: playerStates:
waiting: waiting:
scoreboard: 'Waiting - %time%' scoreboard: 'Waiting - %time%'
duration: FIXED:-1 duration: "FIXED:-1"
preStart: preStart:
scoreboard: 'Waiting - %time%' scoreboard: 'Waiting - %time%'
duration: FIXED:300 duration: "FIXED:300"
immunity: immunity:
scoreboard: 'Playing - %time%' scoreboard: 'Playing - %time%'
duration: FIXED:90 duration: "FIXED:90"
battle: battle:
scoreboard: 'Playing - %time%' scoreboard: 'Playing - %time%'
duration: INCREASING duration: "INCREASING"
feast: feast:
scoreboard: 'Playing - %time%' scoreboard: 'Playing - %time%'
duration: FIXED:300 duration: "FIXED:300"
deathmatch: deathmatch:
scoreboard: 'Playing - %time%' scoreboard: 'Playing - %time%'
duration: INCREASING duration: "INCREASING"
end: end:
scoreboard: 'Ending - %time%' scoreboard: 'Ending - %time%'
duration: FIXED:60 duration: "FIXED:60"
recraftNerf: recraftNerf:
enabled: false enabled: false

View File

@@ -3,6 +3,11 @@ version: '1.0.0'
main: club.mcscrims.speedhg.SpeedHG main: club.mcscrims.speedhg.SpeedHG
api-version: '1.21' api-version: '1.21'
depend:
- "WorldEdit"
- "Apollo-Bukkit"
- "McScrims-CoreSystem"
commands: commands:
kits: kits:
description: Open the kit selection menu description: Open the kit selection menu