Files
GameModes-SpeedHG/src/main/kotlin/club/mcscrims/speedhg/SpeedHG.kt
TDSTOS 1f9a43fb89 Add DataPackManager & SurfaceBlockPopulator
Introduce DataPackManager to generate/install a datapack into the target world folder (biome overrides, simplified noise_settings) and call install() during onLoad after the world folder is prepared. Add SurfaceBlockPopulator to apply surface/sub-surface block overrides (for TerraformGenerator worlds) and register it in onEnable via a WorldInitEvent listener for the configured target world. Refactor WorldManager to extract deletion logic into deleteWorld() and delete existing world/_nether/_the_end before unpacking the selected map. Also update imports and wiring to support these changes.
2026-04-04 18:51:14 +02:00

249 lines
7.2 KiB
Kotlin

package club.mcscrims.speedhg
import club.mcscrims.speedhg.command.KitCommand
import club.mcscrims.speedhg.command.LeaderboardCommand
import club.mcscrims.speedhg.command.PerksCommand
import club.mcscrims.speedhg.command.RankingCommand
import club.mcscrims.speedhg.command.TimerCommand
import club.mcscrims.speedhg.config.CustomGameManager
import club.mcscrims.speedhg.config.CustomGameSettings
import club.mcscrims.speedhg.config.LanguageManager
import club.mcscrims.speedhg.database.DatabaseManager
import club.mcscrims.speedhg.database.StatsManager
import club.mcscrims.speedhg.disaster.DisasterManager
import club.mcscrims.speedhg.game.GameManager
import club.mcscrims.speedhg.game.PodiumManager
import club.mcscrims.speedhg.game.modules.AntiRunningManager
import club.mcscrims.speedhg.gui.listener.MenuListener
import club.mcscrims.speedhg.kit.KitManager
import club.mcscrims.speedhg.kit.impl.*
import club.mcscrims.speedhg.kit.listener.KitEventDispatcher
import club.mcscrims.speedhg.listener.ConnectListener
import club.mcscrims.speedhg.listener.GameStateListener
import club.mcscrims.speedhg.listener.SoupListener
import club.mcscrims.speedhg.listener.StatsListener
import club.mcscrims.speedhg.perk.PerkManager
import club.mcscrims.speedhg.perk.impl.BloodlustPerk
import club.mcscrims.speedhg.perk.impl.FeatherweightPerk
import club.mcscrims.speedhg.perk.impl.OraclePerk
import club.mcscrims.speedhg.perk.impl.VampirePerk
import club.mcscrims.speedhg.perk.listener.PerkEventDispatcher
import club.mcscrims.speedhg.ranking.RankingManager
import club.mcscrims.speedhg.scoreboard.ScoreboardManager
import club.mcscrims.speedhg.webhook.DiscordWebhookManager
import club.mcscrims.speedhg.world.DataPackManager
import club.mcscrims.speedhg.world.SurfaceBlockPopulator
import club.mcscrims.speedhg.world.WorldManager
import org.bukkit.Bukkit
import org.bukkit.Material
import org.bukkit.NamespacedKey
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.world.WorldInitEvent
import org.bukkit.inventory.ItemStack
import org.bukkit.inventory.ShapelessRecipe
import org.bukkit.plugin.java.JavaPlugin
class SpeedHG : JavaPlugin() {
companion object {
lateinit var instance: SpeedHG
private set
}
lateinit var languageManager: LanguageManager
private set
lateinit var gameManager: GameManager
private set
lateinit var antiRunningManager: AntiRunningManager
private set
lateinit var scoreboardManager: ScoreboardManager
private set
lateinit var kitManager: KitManager
private set
lateinit var perkManager: PerkManager
private set
lateinit var databaseManager: DatabaseManager
private set
lateinit var statsManager: StatsManager
private set
lateinit var discordWebhookManager: DiscordWebhookManager
private set
lateinit var customGameManager: CustomGameManager
private set
lateinit var rankingManager: RankingManager
private set
lateinit var podiumManager: PodiumManager
private set
lateinit var disasterManager: DisasterManager
private set
override fun onLoad()
{
instance = this
customGameManager = CustomGameManager( this )
customGameManager.load()
saveDefaultConfig()
reloadConfig()
val worldManager = WorldManager( this )
worldManager.prepareRandomWorld()
val dataPackManager = DataPackManager( this )
dataPackManager.install()
}
override fun onEnable()
{
server.pluginManager.registerEvents(object : Listener {
@EventHandler
fun onWorldInit(
event: WorldInitEvent
) {
val targetWorldName = config.getString( "map-system.target-world-name", "world" )
if ( event.world.name != targetWorldName ) return
event.world.populators.add( SurfaceBlockPopulator() )
logger.info( "[SpeedHG] SurfaceBlockPopulator für '${event.world.name}' registriert." )
}
}, this )
databaseManager = DatabaseManager( this )
try {
databaseManager.connect()
} catch ( e: Exception ) {
logger.severe( "[Database] Verbindung fehlgeschlagen: ${e.message}" )
logger.severe( "[Database] Plugin wird deaktiviert." )
server.pluginManager.disablePlugin( this )
return
}
statsManager = StatsManager( this )
statsManager.initialize()
languageManager = LanguageManager( this )
gameManager = GameManager( this )
rankingManager = RankingManager( this )
podiumManager = PodiumManager( this )
antiRunningManager = AntiRunningManager( this )
scoreboardManager = ScoreboardManager( this )
kitManager = KitManager( this )
discordWebhookManager = DiscordWebhookManager( this )
perkManager = PerkManager( this )
perkManager.initialize()
disasterManager = DisasterManager( this )
disasterManager.start()
registerKits()
registerPerks()
registerCommands()
registerListener()
registerRecipes()
logger.info("SpeedHG wurde geladen!")
}
override fun onDisable()
{
podiumManager.cleanup()
if ( ::perkManager.isInitialized ) perkManager.shutdown()
if ( ::statsManager.isInitialized ) statsManager.shutdown()
if ( ::databaseManager.isInitialized ) databaseManager.disconnect()
kitManager.clearAll()
super.onDisable()
}
private fun registerKits()
{
kitManager.registerKit( ArmorerKit() )
kitManager.registerKit( BackupKit() )
kitManager.registerKit( BlackPantherKit() )
kitManager.registerKit( GladiatorKit() )
kitManager.registerKit( GoblinKit() )
kitManager.registerKit( IceMageKit() )
kitManager.registerKit( RattlesnakeKit() )
kitManager.registerKit( TheWorldKit() )
kitManager.registerKit( VenomKit() )
kitManager.registerKit( VoodooKit() )
}
private fun registerPerks()
{
perkManager.registerPerk( OraclePerk() )
perkManager.registerPerk( VampirePerk() )
perkManager.registerPerk( FeatherweightPerk() )
perkManager.registerPerk( BloodlustPerk() )
}
private fun registerCommands()
{
val kitCommand = KitCommand()
getCommand( "kit" )?.apply {
setExecutor( kitCommand )
tabCompleter = kitCommand
}
val timerCommand = TimerCommand( this )
getCommand( "timer" )?.apply {
setExecutor( timerCommand )
tabCompleter = timerCommand
}
val rankingCommand = RankingCommand( this )
getCommand( "ranking" )?.apply {
setExecutor( rankingCommand )
tabCompleter = rankingCommand
}
getCommand( "leaderboard" )?.setExecutor( LeaderboardCommand() )
getCommand( "perks" )?.setExecutor( PerksCommand() )
}
private fun registerListener()
{
val pm = Bukkit.getPluginManager()
pm.registerEvents( ConnectListener(), this )
pm.registerEvents( GameStateListener(), this )
pm.registerEvents( SoupListener(), this )
pm.registerEvents(KitEventDispatcher( this, kitManager ), this )
pm.registerEvents( StatsListener(), this )
pm.registerEvents( MenuListener(), this )
pm.registerEvents(PerkEventDispatcher( this, perkManager ), this )
}
private fun registerRecipes()
{
val soup = ItemStack( Material.MUSHROOM_STEW )
val cocoRecipe = ShapelessRecipe(NamespacedKey.minecraft( "cocoa_soup" ), soup )
cocoRecipe.addIngredient( Material.COCOA_BEANS )
cocoRecipe.addIngredient( Material.BOWL )
val cactiRecipe = ShapelessRecipe(NamespacedKey.minecraft( "cacti_soup" ), soup )
cactiRecipe.addIngredient( Material.CACTUS )
cactiRecipe.addIngredient( Material.BOWL )
Bukkit.addRecipe( cocoRecipe )
Bukkit.addRecipe( cactiRecipe )
}
}