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")
implementation("club.mcscrims:core:1.4.3.1")
implementation("club.mcscrims:spigot:1.4.3.1")
implementation("club.mcscrims:core:1.4.3.2")
implementation("club.mcscrims:spigot:1.4.3.2")
compileOnly("io.papermc.paper:paper-api: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.luckperms.api.LuckPerms
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import org.bukkit.plugin.java.JavaPlugin
class SpeedHG : JavaPlugin() {
@@ -83,16 +84,16 @@ class SpeedHG : JavaPlugin() {
{
instance = this
loadConfigurations()
setupDatabase()
networkManager = SpigotNetworkManager.getInstance()!!
worldManager = WorldManager( this )
worldManager.deleteWorld()
}
override fun onEnable()
{
loadConfigurations()
setupDatabase()
networkManager = SpigotNetworkManager.getInstance()!!
worldManager.setupWorld()
chatFormatter = ChatFormatter.create(
@@ -150,6 +151,18 @@ class SpeedHG : JavaPlugin() {
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 >>
*/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -46,11 +46,12 @@ class AnchorKit(
player: Player
) {
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 )
.hideAttributes()
.build()
items.add( anvilItem )
player.inventory.setItem( 0, anvilItem )
}

View File

@@ -1,15 +1,20 @@
package club.mcscrims.speedhg.kit.impl
import club.mcscrims.speedhg.SpeedHG
import club.mcscrims.speedhg.SpeedHG.Companion.content
import club.mcscrims.speedhg.ability.AbilityContext
import club.mcscrims.speedhg.game.GameManager
import club.mcscrims.speedhg.kit.AbstractKit
import club.mcscrims.speedhg.kit.KitMetaData
import club.mcscrims.speedhg.kit.PlayStyle
import club.mcscrims.spigot.item.ItemBuilder
import club.mcscrims.spigot.util.GroundDetector
import net.kyori.adventure.text.Component
import org.bukkit.Bukkit
import org.bukkit.GameMode
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.event.block.Action
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.inventory.ItemStack
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(
id: String,
@@ -46,33 +57,33 @@ class BlackPantherKit(
PlayStyle.DEFENSIVE ->
{
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 )
.hideAttributes()
.build()
items.add( blackDye )
player.inventory.setItem( 0, blackDye )
}
PlayStyle.OFFENSIVE ->
{
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 )
.hideAttributes()
.build()
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 )
.hideAttributes()
.build()
items.addAll(listOf( blackDye, blazePowder ))
player.inventory.setItem( 0, blackDye )
player.inventory.setItem( 1, blazePowder )
}
else -> {}
}
}
@@ -127,11 +138,11 @@ class BlackPantherKit(
if ( playStyle == PlayStyle.DEFENSIVE )
{
launchAndDash( player )
return
}
push( player )
}
Material.BLAZE_POWDER ->
@@ -153,6 +164,101 @@ class BlackPantherKit(
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(
player: Player
) {

View File

@@ -42,11 +42,12 @@ class BlitzcrankKit(
player: Player
) {
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 )
.hideAttributes()
.build()
items.add( hotsItem )
player.inventory.setItem( 0, hotsItem )
when( playStyle )
@@ -54,26 +55,26 @@ class BlitzcrankKit(
PlayStyle.DEFENSIVE ->
{
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 )
.hideAttributes()
.build()
items.add( fishingRodItem )
player.inventory.setItem( 1, fishingRodItem )
}
PlayStyle.OFFENSIVE ->
{
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 )
.hideAttributes()
.build()
items.add( pufferfishItem )
player.inventory.setItem( 1, pufferfishItem )
}
else -> {}
}
}
@@ -203,7 +204,7 @@ class BlitzcrankKit(
target.velocity = hookDirection
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(

View File

@@ -202,7 +202,16 @@ class GameStateListener(
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

View File

@@ -11,7 +11,7 @@ class RecraftInspector(
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 maxRecraftAmount = plugin.pluginConfig.data.game.recraftNerf[ "max_amount" ] as Int
private val maxRecraftAmount = plugin.pluginConfig.data.game.recraftNerf[ "max_amount" ] as Double
fun startRunnable()
{

View File

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

View File

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

View File

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