diff --git a/src/main/kotlin/club/mcscrims/speedhg/command/LeaderboardCommand.kt b/src/main/kotlin/club/mcscrims/speedhg/command/LeaderboardCommand.kt index c7aa81d..509173d 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/command/LeaderboardCommand.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/command/LeaderboardCommand.kt @@ -1,6 +1,7 @@ package club.mcscrims.speedhg.command import club.mcscrims.speedhg.SpeedHG +import club.mcscrims.speedhg.ranking.Rank import club.mcscrims.speedhg.util.sendMsg import org.bukkit.command.Command import org.bukkit.command.CommandExecutor @@ -39,9 +40,12 @@ class LeaderboardCommand : CommandExecutor { val rank = ( index + 1 ).toString() val playerName = stats.name - val score = stats.scrimScore.toString() + val score = stats.scrimScore - player.sendMsg( "commands.leaderboard.line", "rank" to rank, "name" to playerName, "score" to score ) + val rankFromPlayer = Rank.fromPlayer( score, stats.wins + stats.losses ) + val playerRank = "${rankFromPlayer.tag} ${rankFromPlayer.subTierRoman( score )}" + + player.sendMsg( "commands.leaderboard.line", "playerrank" to playerRank, "rank" to rank, "name" to playerName, "score" to score.toString() ) } // 3. Footer senden diff --git a/src/main/kotlin/club/mcscrims/speedhg/config/LanguageManager.kt b/src/main/kotlin/club/mcscrims/speedhg/config/LanguageManager.kt index 57a1975..b6b4424 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/config/LanguageManager.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/config/LanguageManager.kt @@ -131,8 +131,10 @@ class LanguageManager( placeholders: Map ): Component { + val prefixRaw = getDefaultRawMessage( "default.prefix" ) + val prefixTag = Placeholder.parsed( "prefix", prefixRaw ) val raw = languages[ defaultLanguage ]?.strings?.get( key ) ?: "Missing Key: $key" - val tags = placeholders.map { (k, v) -> Placeholder.parsed( k, v ) } + val tags = placeholders.map { (k, v) -> Placeholder.parsed( k, v ) }.plus( prefixTag ) return miniMessage.deserialize( raw, *tags.toTypedArray() ) } diff --git a/src/main/kotlin/club/mcscrims/speedhg/game/GameManager.kt b/src/main/kotlin/club/mcscrims/speedhg/game/GameManager.kt index ddb17f4..aaf59e2 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/game/GameManager.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/game/GameManager.kt @@ -43,6 +43,7 @@ class GameManager( private val startBorder = plugin.config.getDouble("game.border-start", 300.0) private val endBorder = plugin.config.getDouble("game.border-end", 20.0) private val borderShrinkTime = plugin.config.getLong("game.border-shrink-time", 600) + private val maxRadiusTeleport = plugin.config.getDouble("game.max-radius-teleport", 50.0) val feastManager = FeastManager( plugin ) val pitManager = PitManager( plugin ) @@ -199,7 +200,7 @@ class GameManager( player.activePotionEffects.forEach { player.removePotionEffect( it.type ) } player.addPotionEffects(listOf( speedEffect, hasteEffect )) - teleportRandomly( player, world, startBorder / 2 ) + teleportRandomly( player, world, maxRadiusTeleport ) plugin.kitManager.applyKit( player ) // verteilt Items + ruft onAssign + passive.onActivate plugin.perkManager.applyPerks( player ) diff --git a/src/main/kotlin/club/mcscrims/speedhg/listener/ConnectListener.kt b/src/main/kotlin/club/mcscrims/speedhg/listener/ConnectListener.kt index 82031e7..e78a23e 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/listener/ConnectListener.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/listener/ConnectListener.kt @@ -48,10 +48,6 @@ class ConnectListener : Listener { val player = event.player event.quitMessage( null ) - if ( plugin.gameManager.currentState == GameState.INGAME || - plugin.gameManager.currentState == GameState.INVINCIBILITY ) - return - Bukkit.getOnlinePlayers().forEach { p -> p.sendMsg( "game.quit", "name" to player.name ) } diff --git a/src/main/kotlin/club/mcscrims/speedhg/listener/GameStateListener.kt b/src/main/kotlin/club/mcscrims/speedhg/listener/GameStateListener.kt index cb33ad2..4506bdf 100644 --- a/src/main/kotlin/club/mcscrims/speedhg/listener/GameStateListener.kt +++ b/src/main/kotlin/club/mcscrims/speedhg/listener/GameStateListener.kt @@ -15,6 +15,7 @@ import org.bukkit.event.block.BlockPlaceEvent import org.bukkit.event.block.LeavesDecayEvent import org.bukkit.event.enchantment.EnchantItemEvent import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.entity.EntitySpawnEvent import org.bukkit.event.entity.FoodLevelChangeEvent import org.bukkit.event.entity.ItemDespawnEvent import org.bukkit.event.inventory.* @@ -326,7 +327,13 @@ class GameStateListener : Listener { if (!item.type.name.contains( "iron", true )) return - // TODO: add before feast check and deny item crafting + if ( !feastStarted ) + { + event.result = Event.Result.DENY + player.sendMsg( "no_iron_before_feast" ) + player.playSound( player.location, Sound.BLOCK_NOTE_BLOCK_BASS, 1f, 1f ) + return + } if ( item.type.maxDurability > 0 ) { @@ -335,4 +342,12 @@ class GameStateListener : Listener { } } + @EventHandler + fun onEntitySpawn( + event: EntitySpawnEvent + ) { + if ( feastStarted ) return + event.isCancelled = true + } + } \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index ff990ec..8f4fefb 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -10,6 +10,7 @@ game: border-start: 600.0 border-end: 100.0 border-shrink-time: 900 # 10 Minuten + max-radius-teleport: 50.0 ranked: false anti-runner: diff --git a/src/main/resources/languages/en_US.yml b/src/main/resources/languages/en_US.yml index 580857d..1c1329f 100644 --- a/src/main/resources/languages/en_US.yml +++ b/src/main/resources/languages/en_US.yml @@ -59,6 +59,7 @@ build: craft: no_shift_click: 'Shift-click is not allowed while crafting!' no_shield: 'Shields are not allowed in SpeedHG!' + no_iron_before_feast: 'Iron is not allowed before the feast!' iron_nerf: 'Your item has been nerfed as it contains iron!' feast: @@ -205,50 +206,50 @@ gui: confirm_name: '✔ Confirm Search' confirm_click: 'Click to confirm' perk_selector: - title: 'Perk-Auswahl' - slot_empty: 'Perk-Slot : Leer' - slot_hint: 'Klicke einen Perk zum Ausrüsten' + title: 'Perk Selection' + slot_empty: 'Perk slot : Empty' + slot_hint: 'Click a perk to select' slot_title: 'Slot : ' - equipped_label: '✔ Ausgerüstet' - click_equip: 'Klick zum Ausrüsten' - click_deselect: 'Klick zum Abwählen' - slots_full: 'Slots voll! Klicke einen aktiven Perk zum Abwählen.' - game_running: 'Perks können während des Spiels nicht geändert werden!' - selected: 'Ausgerüstet: !' - deselected: 'Abgewählt: !' - close: '✕ Schließen' + equipped_label: '✔ Equipped' + click_equip: 'Click to equip' + click_deselect: 'Click to unequip' + slots_full: 'Slots are full! Click an active perk to unequip.' + game_running: 'Perks cannot be changed while the game is running!' + selected: 'Equipped: !' + deselected: 'Unequipped: !' + close: '✕ Close' perks: oracle: name: 'Oracle' lore: - ' ' - - 'Zeigt Kit + Distanz des nächsten' - - 'Gegners (Schleichen / Kompass).' + - 'Shows kit + distance to the next' + - 'enemy (Sneak / Compass).' - ' ' - - 'Synergie: Spielo-Kit zeigt Gamble-Ausgang.' + - 'Synergy: Gamble-Kit shows gamble output.' vampire: name: 'Vampire' lore: - ' ' - - '10% Chance bei Nahkampftreffer:' - - '½ Herz heilen.' + - '10% chance on a melee hit:' + - 'heal ½ hearts.' featherweight: name: 'Featherweight' lore: - ' ' - - 'Vollständig immun gegen' - - 'Fallschaden.' + - 'Fully immune against' + - 'fall damage.' bloodlust: name: 'Bloodlust' lore: - ' ' - - 'Nach einem Kill:' - - 'Speed I + Regen I für 5 Sekunden.' - message: '⚔ Blutrausch! Speed I + Regen I für 5 Sekunden!' + - 'After a kill:' + - 'Speed I + Regen I for 5 seconds.' + message: '⚔ Bloodlust! Speed I + Regen I for 5 seconds!' enderblue: name: 'Enderblood'