1
0
Fork 0

refactor: cleanup whatever that was

This commit is contained in:
ineanto 2025-09-06 21:10:39 +02:00
parent 3f49698c4c
commit 7665ef9114
Signed by: ineanto
GPG key ID: E511F9CAA2F9CE84
10 changed files with 97 additions and 185 deletions

View file

@ -1,9 +1,12 @@
- [ ] Démarrage en forme de Title
- [ ] Système de bounties pour les nazes (objectifs à complèter) - [ ] Système de bounties pour les nazes (objectifs à complèter)
- [ ] Système de palier par équipe (qui en est où par rapport au dragon) - [ ] Système de palier par équipe (qui en est où par rapport au dragon)
- [ ] Classer les équipes qui ont le plus tapé le dragon
- [ ] Calculer le deuxième groupe le plus proche de l'Enderdragon
- [ ] Démarrage en forme de Title
- [ ] spread le spawn dans un rayon de 1000 blocks
- [ x ] Calculer le deuxième groupe le plus proche de l'Enderdragon
Après que les premiers joueurs aient passé le portail de l'End,
balancer les coordonnées
```kotlin ```kotlin
val advancement = Advancement.Builder.advancement().save({}, "runnerdragon:test").toBukkit() val advancement = Advancement.Builder.advancement().save({}, "runnerdragon:test").toBukkit()

View file

@ -17,7 +17,7 @@ import xyz.ineanto.dragon.commands.GameCommand
import xyz.ineanto.dragon.event.* import xyz.ineanto.dragon.event.*
import xyz.ineanto.dragon.event.end.BedInteractListener import xyz.ineanto.dragon.event.end.BedInteractListener
import xyz.ineanto.dragon.event.end.BlockPlaceListener import xyz.ineanto.dragon.event.end.BlockPlaceListener
import xyz.ineanto.dragon.event.end.EnderDragonListener import xyz.ineanto.dragon.event.end.FinalBlowListener
import xyz.ineanto.dragon.event.waiting.WaitingListener import xyz.ineanto.dragon.event.waiting.WaitingListener
import xyz.ineanto.dragon.player.PlayerManager import xyz.ineanto.dragon.player.PlayerManager
import xyz.ineanto.dragon.scoreboard.ScoreboardTeams import xyz.ineanto.dragon.scoreboard.ScoreboardTeams
@ -86,7 +86,7 @@ class RunnerDragon : JavaPlugin() {
server.pluginManager.registerEvents(DimensionEntranceListener(), this) server.pluginManager.registerEvents(DimensionEntranceListener(), this)
server.pluginManager.registerEvents(BedInteractListener(), this) server.pluginManager.registerEvents(BedInteractListener(), this)
server.pluginManager.registerEvents(EnderDragonListener(), this) server.pluginManager.registerEvents(FinalBlowListener(), this)
server.pluginManager.registerEvents(PlayerJoinListener(), this) server.pluginManager.registerEvents(PlayerJoinListener(), this)
server.pluginManager.registerEvents(PlayerQuitListener(), this) server.pluginManager.registerEvents(PlayerQuitListener(), this)
server.pluginManager.registerEvents(PlayerRespawnListener(), this) server.pluginManager.registerEvents(PlayerRespawnListener(), this)

View file

@ -1,13 +0,0 @@
package xyz.ineanto.dragon.assets
data class Asset(
private val qualifier: String,
val name: String,
var path: String = "assets/${qualifier}/${name}.png"
) {
class Icons {
companion object {
val DENY: Asset = Asset("icon", "deny")
}
}
}

View file

@ -0,0 +1,13 @@
package xyz.ineanto.dragon.coordinates
import org.bukkit.entity.Player
class CoordsDumper {
// TODO (Ineanto, 06/09/2025): Coords
// tous les joueurs (x, y, z + dimension + équipe)
// stronghold (x, y, z + dimension)
fun dumpCoords(player: Player) {
}
}

View file

@ -11,6 +11,8 @@ import xyz.ineanto.dragon.RunnerDragon
class EntityDamageListener : Listener { class EntityDamageListener : Listener {
@EventHandler @EventHandler
fun onEntityDamage(event: EntityDamageEvent) { fun onEntityDamage(event: EntityDamageEvent) {
// TODO (Ineanto, 06/09/2025): annuler les dégâts entre membres d'une même équipe
if (event.entity is Player) { if (event.entity is Player) {
val player = (event.entity as Player) val player = (event.entity as Player)
if (RunnerDragon.STATE == GameState.GRACE_PERIOD && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) { if (RunnerDragon.STATE == GameState.GRACE_PERIOD && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {

View file

@ -16,8 +16,6 @@ class PlayerJoinListener : Listener {
val player = event.player val player = event.player
val dragonPlayer: DragonPlayer = RunnerDragon.instance.playerManager.addPlayer(player.uniqueId) val dragonPlayer: DragonPlayer = RunnerDragon.instance.playerManager.addPlayer(player.uniqueId)
// TODO (Ineanto, 6/26/23): Set nick
event.joinMessage( event.joinMessage(
Component.text("(", NamedTextColor.WHITE) Component.text("(", NamedTextColor.WHITE)
.append(Component.text("+", NamedTextColor.GREEN)) .append(Component.text("+", NamedTextColor.GREEN))

View file

@ -1,95 +0,0 @@
package xyz.ineanto.dragon.event.end
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.format.TextDecoration
import net.kyori.adventure.text.minimessage.MiniMessage
import org.bukkit.Bukkit
import org.bukkit.Sound
import org.bukkit.World.Environment
import org.bukkit.entity.EnderDragon
import org.bukkit.entity.Entity
import org.bukkit.entity.Player
import org.bukkit.entity.Projectile
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.EntityDeathEvent
import xyz.ineanto.dragon.RunnerDragon
import java.util.*
class EnderDragonListener : Listener {
@EventHandler
fun onEnderDragonDeath(event: EntityDeathEvent) {
if (event.entity is EnderDragon) {
val dragon = event.entity as EnderDragon
val lastDamageCause = dragon.lastDamageCause ?: return
val entity: Entity = lastDamageCause.entity
var player: Player? = null
when (lastDamageCause.cause) {
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION -> {
val first: Optional<UUID> = RunnerDragon.LAST_BED_INTERACT.asMap().entries.stream()
.sorted { a, b -> b.value.compareTo(a.value) }
.map { it.key }
.findFirst()
player = Bukkit.getPlayer(first.get()) ?: return
}
EntityDamageEvent.DamageCause.ENTITY_ATTACK, EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK, EntityDamageEvent.DamageCause.PROJECTILE -> {
if (entity is Projectile) {
player = entity.shooter as Player
} else if (entity is Player) {
player = entity
}
}
else -> {}
}
val dragonPlayer = player?.uniqueId?.let { RunnerDragon.instance.playerManager.getPlayer(it) }
val team = dragonPlayer?.getTeam()
if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) {
Bukkit.getOnlinePlayers().forEach {
if ((it.location.world!!.environment == Environment.THE_END).not()) {
it.playSound(it.location, Sound.ENTITY_ENDER_DRAGON_DEATH, 1f, 0.5f)
}
}
val victoryComponent: Component = Component.text()
.append(RunnerDragon.PREFIX)
.appendSpace()
.append(
MiniMessage.miniMessage().deserialize("<gradient:#ff8b26:#ff6193><b>VICTOIRE !</b></gradient>")
)
.build()
val teamComponent = Component.text()
.append(RunnerDragon.PREFIX)
.appendSpace()
.append(
Component.text(
"Le dragon a été tué par l'équipe :",
NamedTextColor.WHITE
)
)
.appendSpace()
team?.let {
teamComponent.append(team.displayName)
} ?: {
teamComponent.append(Component.text("???", NamedTextColor.RED, TextDecoration.OBFUSCATED))
}
teamComponent.appendSpace()
teamComponent.append(Component.text("!", NamedTextColor.WHITE, TextDecoration.BOLD))
Bukkit.broadcast(victoryComponent)
Bukkit.broadcast(teamComponent.build())
}
//SecondFight.start(dragon)
}
}
}

View file

@ -0,0 +1,72 @@
package xyz.ineanto.dragon.event.end
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.format.TextDecoration
import net.kyori.adventure.text.minimessage.MiniMessage
import org.bukkit.Bukkit
import org.bukkit.NamespacedKey
import org.bukkit.Sound
import org.bukkit.World.Environment
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerAdvancementDoneEvent
import xyz.ineanto.dragon.RunnerDragon
import xyz.ineanto.dragon.teams.Team
class FinalBlowListener : Listener {
@EventHandler
fun onEnderDragonDeath(event: PlayerAdvancementDoneEvent) {
if (event.advancement == Bukkit.getAdvancement(NamespacedKey.fromString("minecraft:story/follow_ender_eye")!!)) {
// TODO (Ineanto, 06/09/2025): dumper les coords du stronghold
}
if (event.advancement == Bukkit.getAdvancement(NamespacedKey.fromString("minecraft:end/kill_dragon")!!)) {
// TODO (Ineanto, 06/09/2025): finir ce bordel
val player = event.player
val dragonPlayer = player.uniqueId.let { RunnerDragon.instance.playerManager.getPlayer(it) }
val team: Team? = dragonPlayer.getTeam()
Bukkit.getOnlinePlayers().forEach {
if ((it.location.world!!.environment == Environment.THE_END).not()) {
it.playSound(it.location, Sound.ENTITY_ENDER_DRAGON_DEATH, 1f, 0.5f)
}
}
val victoryComponent: Component = Component.text()
.append(RunnerDragon.PREFIX)
.appendSpace()
.append(
MiniMessage.miniMessage().deserialize("<gradient:#ff8b26:#ff6193><b>VICTOIRE !</b></gradient>")
)
.build()
val teamComponent = Component.text()
.append(RunnerDragon.PREFIX)
.appendSpace()
.append(
Component.text(
"Le dragon a été tué par l'équipe :",
NamedTextColor.WHITE
)
)
.appendSpace()
teamComponent.appendSpace()
teamComponent.append(Component.text("!", NamedTextColor.WHITE, TextDecoration.BOLD))
team?.let {
teamComponent.append(team.displayName)
} ?: {
teamComponent.append(Component.text("???", NamedTextColor.RED, TextDecoration.OBFUSCATED))
}
Bukkit.broadcast(victoryComponent)
Bukkit.broadcast(teamComponent.build())
//SecondFight.start(dragon)
}
}
}

View file

@ -1,70 +0,0 @@
package xyz.ineanto.dragon.inventory
import net.kyori.adventure.key.Key
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.format.TextDecoration
import ru.brikster.glyphs.compile.GlyphCompiler
import ru.brikster.glyphs.glyph.Glyph
import ru.brikster.glyphs.glyph.GlyphComponentBuilder
import ru.brikster.glyphs.glyph.GlyphComponentBuilder.PositionType
import ru.brikster.glyphs.glyph.image.ImageGlyph
import ru.brikster.glyphs.glyph.image.TextureProperties
import ru.brikster.glyphs.glyph.space.mojang.MojangSpacesGlyph
import ru.brikster.glyphs.resources.GlyphResources
import team.unnamed.creative.texture.Texture
class TeamSelectionScreen {
fun show() {
// Glyphs objects
var spaces = MojangSpacesGlyph.create()
var guiBackground = ImageGlyph.of(
Key.key(Glyph.DEFAULT_NAMESPACE, "gui/gui_background"),
Texture.of(
Key.key(Glyph.DEFAULT_NAMESPACE, "gui/gui_background"),
GlyphResources.resourceFromJar("gui_background.png")
),
TextureProperties(/* height */ 256, /* ascent */ 19)
)
var exampleButton = ImageGlyph.of(
Key.key(Glyph.DEFAULT_NAMESPACE, "gui/example_button"),
Texture.of(
Key.key(Glyph.DEFAULT_NAMESPACE, "gui/example_button"),
GlyphResources.resourceFromJar("example_button.png")
),
TextureProperties(/* height */ 22, /* ascent */ -56
)
)
var font = GlyphResources.minecraftFontGlyphCollection(
listOf(
TextureProperties(/* height */ 12, /* ascent */ -6),
TextureProperties(/* height */ 8, /* ascent */ -24
),
TextureProperties(/* height */ 8, /* ascent */-36)
)
);
val resources = GlyphCompiler.instance()
.compile(spaces, guiBackground, exampleButton, font);
resources.addAll(GlyphResources.blankSlotResources());
//createResourcepack(resources)
val title = GlyphComponentBuilder.gui(spaces)
.append(guiBackground)
.append(/* position */ 131, exampleButton)
.append(/* position */ 16, font.translate(/* height */ 12, /* ascent */ -6, "Example text"))
.append(/* position */ 16, font.translate(/* height */ 8, /* ascent */ -24, "Hello "))
.append(PositionType.RELATIVE, font.translate(/* height */ 8, /* ascent */ -24, "world..."))
.append(
PositionType.ABSOLUTE, /* position */
16,
font.translate(/* height */ 8, /* ascent */ -36, "Hello world...", NamedTextColor.LIGHT_PURPLE)
)
.build()
.append(Component.text("Test menu with glyphs", NamedTextColor.DARK_GRAY, TextDecoration.UNDERLINED))
}
}

View file

@ -122,7 +122,9 @@ class DragonPlayer(uuid: UUID) {
} }
fun updateDisplayName() { fun updateDisplayName() {
val team = RunnerDragon.instance.teamManager.getPlayerTeam(bukkitPlayer)
// TODO (Ineanto, 06/09/2025): do this via scoreboard teams
} }
private fun formatDuration(totalSeconds: Int): String { private fun formatDuration(totalSeconds: Int): String {