1
0
Fork 0

feat: 1.20 update

This commit is contained in:
ineanto 2023-06-26 15:36:57 +02:00
parent 47b9690261
commit f795dcd68f
15 changed files with 104 additions and 79 deletions

2
.idea/kotlinc.xml generated
View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="KotlinJpsPluginSettings"> <component name="KotlinJpsPluginSettings">
<option name="version" value="1.8.10" /> <option name="version" value="1.8.21" />
</component> </component>
</project> </project>

8
.idea/misc.xml generated
View file

@ -1,6 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="EntryPointsManager">
<list size="1">
<item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" />
</list>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="18" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="18" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" /> <output url="file://$PROJECT_DIR$/out" />
</component> </component>

View file

@ -1,7 +1,7 @@
import io.github.patrick.gradle.remapper.RemapTask import io.github.patrick.gradle.remapper.RemapTask
plugins { plugins {
kotlin("jvm") version "1.8.10" kotlin("jvm") version "1.8.21"
id("com.github.johnrengelman.shadow") version "7.1.2" id("com.github.johnrengelman.shadow") version "7.1.2"
id("io.github.patrick.remapper") version "1.4.0" id("io.github.patrick.remapper") version "1.4.0"
} }
@ -16,28 +16,29 @@ repositories {
maven("https://oss.sonatype.org/content/repositories/central") maven("https://oss.sonatype.org/content/repositories/central")
maven("https://maven.enginehub.org/repo") maven("https://maven.enginehub.org/repo")
maven("https://repo.xenondevs.xyz/releases") maven("https://repo.xenondevs.xyz/releases")
maven("https://haoshoku.xyz:1234/repository/public/")
} }
dependencies { dependencies {
// Stdlib // Stdlib
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.10") implementation("org.jetbrains.kotlin:kotlin-stdlib:1.8.10")
// InvUI // InvUI
implementation("de.studiocode.invui:InvUI:0.10.2") implementation("xyz.xenondevs.invui:invui:1.11")
// NickAPI // Commons IO
compileOnly("xyz.haoshoku.nick:nickapi:6.3.3-SNAPSHOT") implementation("commons-io:commons-io:2.11.0")
// Spigot // Spigot
compileOnly("org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT:remapped-mojang") compileOnly("org.spigotmc:spigot-api:1.20.1-R0.1-SNAPSHOT")
// WorldEdit // WorldEdit
compileOnly("com.sk89q.worldedit:worldedit-core:7.2.0-SNAPSHOT") compileOnly("com.sk89q.worldedit:worldedit-core:7.3.0-SNAPSHOT")
compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.2.0-SNAPSHOT") compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.3.0-SNAPSHOT")
} }
kotlin { jvmToolchain(17) } kotlin {
jvmToolchain(17)
}
tasks { tasks {
remap { remap {
version.set("1.19.3") version.set("1.20.1")
action.set(RemapTask.Action.MOJANG_TO_SPIGOT) action.set(RemapTask.Action.MOJANG_TO_SPIGOT)
inputTask.set(shadowJar) inputTask.set(shadowJar)
} }

View file

@ -1,3 +1 @@
rootProject.name = "RunnerDragon"
rootProject.name = "Dragon"

View file

@ -4,6 +4,5 @@ enum class GameState {
WAITING, WAITING,
LAUNCH, LAUNCH,
GRACE_PERIOD, GRACE_PERIOD,
GAME, GAME
DRAGON
} }

View file

@ -13,10 +13,12 @@ class EntityDamageListener : Listener {
fun onEntityDamage(event: EntityDamageEvent) { fun onEntityDamage(event: EntityDamageEvent) {
if (event.entity is Player) { if (event.entity is Player) {
val player = (event.entity as Player) val player = (event.entity as Player)
if (player.gameMode == GameMode.SURVIVAL) { if (RunnerDragon.STATE == GameState.GRACE_PERIOD && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
if ((RunnerDragon.STATE == GameState.GRACE_PERIOD || RunnerDragon.STATE == GameState.DRAGON) && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) { if (player.gameMode == GameMode.SURVIVAL) {
event.isCancelled = true event.isCancelled = true
} else if (RunnerDragon.STATE == GameState.LAUNCH || RunnerDragon.STATE == GameState.WAITING) { }
} else if (RunnerDragon.STATE == GameState.LAUNCH || RunnerDragon.STATE == GameState.WAITING) {
if (player.gameMode == GameMode.ADVENTURE || player.gameMode == GameMode.SURVIVAL) {
event.isCancelled = true event.isCancelled = true
} }
} }

View file

@ -8,7 +8,6 @@ import org.bukkit.event.player.PlayerJoinEvent
import xyz.atnrch.dragon.GameState import xyz.atnrch.dragon.GameState
import xyz.atnrch.dragon.RunnerDragon import xyz.atnrch.dragon.RunnerDragon
import xyz.atnrch.dragon.player.DragonPlayer import xyz.atnrch.dragon.player.DragonPlayer
import xyz.haoshoku.nick.api.NickAPI
class PlayerJoinListener : Listener { class PlayerJoinListener : Listener {
@EventHandler @EventHandler
@ -16,16 +15,21 @@ 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)
NickAPI.resetNick(player) // TODO (Ineanto, 6/26/23): Set nick
NickAPI.resetUniqueId(player)
NickAPI.resetGameProfileName(player) /**
NickAPI.resetSkin(player) * NickAPI.resetNick(player)
NickAPI.setUniqueId(player, player.uniqueId) * NickAPI.resetUniqueId(player)
* NickAPI.resetGameProfileName(player)
* NickAPI.resetSkin(player)
* NickAPI.setUniqueId(player, player.uniqueId)
*/
event.joinMessage = "(${ChatColor.GREEN}+${ChatColor.WHITE}) ${player.name}" event.joinMessage = "(${ChatColor.GREEN}+${ChatColor.WHITE}) ${player.name}"
if (RunnerDragon.STATE == GameState.WAITING) { if (RunnerDragon.STATE == GameState.WAITING) {
dragonPlayer.sendMessage("Bienvenue !") dragonPlayer.sendMessage("Bienvenue !")
dragonPlayer.instantiatePlayer() dragonPlayer.instantiatePlayer()
dragonPlayer.player.gameMode = GameMode.ADVENTURE
dragonPlayer.setTeamItem(true) dragonPlayer.setTeamItem(true)
} }

View file

@ -20,27 +20,25 @@ class EnderDragonListener : Listener {
fun onEnderDragonDeath(event: EntityDeathEvent) { fun onEnderDragonDeath(event: EntityDeathEvent) {
if (event.entity is EnderDragon) { if (event.entity is EnderDragon) {
val dragon = event.entity as EnderDragon val dragon = event.entity as EnderDragon
val damageEvent = dragon.lastDamageCause ?: return val lastDamageCause = dragon.lastDamageCause ?: return
val entity: Entity = lastDamageCause.entity
var player: Player? = null var player: Player? = null
when (damageEvent.cause) { when (lastDamageCause.cause) {
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION -> { EntityDamageEvent.DamageCause.BLOCK_EXPLOSION -> {
val first: Optional<UUID> = RunnerDragon.LAST_BED_INTERACT.asMap().entries.stream() val first: Optional<UUID> = RunnerDragon.LAST_BED_INTERACT.asMap().entries.stream()
.sorted { a, b -> b.value.compareTo(a.value) } .sorted { a, b -> b.value.compareTo(a.value) }
.map { it.key } .map { it.key }
.findFirst() .findFirst()
if (first.isEmpty) {
return
}
player = Bukkit.getPlayer(first.get()) ?: return player = Bukkit.getPlayer(first.get()) ?: return
} }
EntityDamageEvent.DamageCause.ENTITY_ATTACK, EntityDamageEvent.DamageCause.PROJECTILE -> { EntityDamageEvent.DamageCause.ENTITY_ATTACK, EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK, EntityDamageEvent.DamageCause.PROJECTILE -> {
val damager: Entity = damageEvent.entity if (entity is Projectile) {
if (damager is Projectile) { player = entity.shooter as Player
player = damager.shooter as Player } else if (entity is Player) {
} else if (damager is Player) { Bukkit.broadcastMessage("Last damage dealt by ${entity.name}")
player = damager player = entity
} }
} }
@ -51,7 +49,7 @@ class EnderDragonListener : Listener {
val team = dragonPlayer?.getTeam() val team = dragonPlayer?.getTeam()
if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) { if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) {
Bukkit.getOnlinePlayers().forEach { Bukkit.getOnlinePlayers().forEach {
if (it.location.world!!.environment.equals(Environment.THE_END).not()) { if ((it.location.world!!.environment == Environment.THE_END).not()) {
it.playSound(it.location, Sound.ENTITY_ENDER_DRAGON_DEATH, 1f, 0.5f) it.playSound(it.location, Sound.ENTITY_ENDER_DRAGON_DEATH, 1f, 0.5f)
} }
} }
@ -59,7 +57,7 @@ class EnderDragonListener : Listener {
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}LE DRAGON A ÉTÉ TUÉ PAR L'ÉQUIPE ${team?.displayName}${ChatColor.GOLD}${ChatColor.BOLD}!") Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}LE DRAGON A ÉTÉ TUÉ PAR L'ÉQUIPE ${team?.displayName}${ChatColor.GOLD}${ChatColor.BOLD}!")
} }
SecondFight.start(dragon, dragonPlayer) SecondFight.start(dragon)
} }
} }
} }

View file

@ -8,25 +8,31 @@ import org.bukkit.entity.EnderDragon
import org.bukkit.potion.PotionEffect import org.bukkit.potion.PotionEffect
import org.bukkit.potion.PotionEffectType import org.bukkit.potion.PotionEffectType
import xyz.atnrch.dragon.RunnerDragon import xyz.atnrch.dragon.RunnerDragon
import xyz.atnrch.dragon.player.DragonPlayer
class SecondFight { class SecondFight {
companion object { companion object {
fun start(dragon: EnderDragon, dragonPlayer: DragonPlayer?) { fun start(dragon: EnderDragon) {
for (i in 0..2) { Bukkit.getScheduler().scheduleSyncDelayedTask(
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}???") RunnerDragon.instance, {
} Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.MAGIC}??ZFjZI19112::!d!zq?")
for (i in 0..2) {
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}???")
}
Bukkit.getOnlinePlayers().forEach { Bukkit.getOnlinePlayers().forEach {
if (it.location.world!!.environment != World.Environment.THE_END) { it.addPotionEffect(PotionEffect(PotionEffectType.BLINDNESS, 5, 1))
it.teleport(dragonPlayer!!.player.location) it.playSound(it.location, Sound.ENTITY_LIGHTNING_BOLT_IMPACT, 1f, 0.5f)
} if (it.location.world!!.environment != World.Environment.THE_END) {
it.addPotionEffect(PotionEffect(PotionEffectType.BLINDNESS, 5, 1)) it.teleport(RunnerDragon.WORLD_END.spawnLocation)
it.playSound(it.location, Sound.ENTITY_LIGHTNING_BOLT_IMPACT, 1f, 0.5f) }
} }
dragon.dragonBattle!!.initiateRespawn() Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}")
dragon.dragonBattle!!.resetCrystals()
dragon.dragonBattle!!.resetCrystals()
dragon.dragonBattle!!.initiateRespawn()
}, 20L * 5
)
} }
} }
} }

View file

@ -9,6 +9,7 @@ import org.bukkit.event.block.BlockBreakEvent
import org.bukkit.event.block.BlockPlaceEvent import org.bukkit.event.block.BlockPlaceEvent
import org.bukkit.event.entity.EntityDamageEvent import org.bukkit.event.entity.EntityDamageEvent
import org.bukkit.event.entity.FoodLevelChangeEvent import org.bukkit.event.entity.FoodLevelChangeEvent
import org.bukkit.event.player.PlayerInteractAtEntityEvent
import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.event.player.PlayerInteractEvent
import xyz.atnrch.dragon.GameState import xyz.atnrch.dragon.GameState
import xyz.atnrch.dragon.RunnerDragon import xyz.atnrch.dragon.RunnerDragon
@ -18,7 +19,7 @@ class WaitingListener : Listener {
@EventHandler @EventHandler
fun onBlockBreak(event: BlockPlaceEvent) { fun onBlockBreak(event: BlockPlaceEvent) {
val player = event.player val player = event.player
if (RunnerDragon.STATE == GameState.WAITING && player.gameMode == GameMode.SURVIVAL) { if (RunnerDragon.STATE == GameState.WAITING && player.gameMode == GameMode.ADVENTURE) {
event.isCancelled = true event.isCancelled = true
} }
} }
@ -26,7 +27,7 @@ class WaitingListener : Listener {
@EventHandler @EventHandler
fun onBlockBreak(event: BlockBreakEvent) { fun onBlockBreak(event: BlockBreakEvent) {
val player = event.player val player = event.player
if (RunnerDragon.STATE == GameState.WAITING && player.gameMode == GameMode.SURVIVAL) { if (RunnerDragon.STATE == GameState.WAITING && player.gameMode == GameMode.ADVENTURE) {
event.isCancelled = true event.isCancelled = true
} }
} }
@ -35,7 +36,7 @@ class WaitingListener : Listener {
fun onEntityDamage(event: EntityDamageEvent) { fun onEntityDamage(event: EntityDamageEvent) {
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.WAITING && player.gameMode == GameMode.SURVIVAL) { if (RunnerDragon.STATE == GameState.WAITING && player.gameMode == GameMode.ADVENTURE) {
event.isCancelled = true event.isCancelled = true
} }
} }
@ -43,18 +44,25 @@ class WaitingListener : Listener {
@EventHandler @EventHandler
fun onFoodLevelChange(event: FoodLevelChangeEvent) { fun onFoodLevelChange(event: FoodLevelChangeEvent) {
if (RunnerDragon.STATE == GameState.WAITING && event.entity.gameMode == GameMode.SURVIVAL) { if (RunnerDragon.STATE == GameState.WAITING && event.entity.gameMode == GameMode.ADVENTURE) {
event.isCancelled = true event.isCancelled = true
} }
} }
@EventHandler @EventHandler
fun onItemInteract(event: PlayerInteractEvent) { fun onItemInteract(event: PlayerInteractEvent) {
if (RunnerDragon.STATE == GameState.WAITING && event.player.gameMode == GameMode.SURVIVAL) { if (RunnerDragon.STATE == GameState.WAITING && event.player.gameMode == GameMode.ADVENTURE) {
if (event.item?.itemMeta?.displayName == "${ChatColor.GOLD}Choisir une équipe") { if (event.item?.itemMeta?.displayName == "${ChatColor.GOLD}Choisir une équipe") {
CandleInventory(event.player) CandleInventory(event.player)
} }
event.isCancelled = true event.isCancelled = true
} }
} }
@EventHandler
fun onItemInteract(event: PlayerInteractAtEntityEvent) {
if (RunnerDragon.STATE == GameState.WAITING && event.player.gameMode == GameMode.ADVENTURE) {
event.isCancelled = true
}
}
} }

View file

@ -1,25 +1,24 @@
package xyz.atnrch.dragon.inventory package xyz.atnrch.dragon.inventory
import de.studiocode.invui.gui.GUI
import de.studiocode.invui.gui.builder.GUIBuilder
import de.studiocode.invui.gui.builder.guitype.GUIType
import de.studiocode.invui.item.Item
import de.studiocode.invui.item.builder.ItemBuilder
import de.studiocode.invui.item.impl.SimpleItem
import de.studiocode.invui.window.impl.single.SimpleWindow
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.entity.Player import org.bukkit.entity.Player
import xyz.atnrch.dragon.RunnerDragon import xyz.atnrch.dragon.RunnerDragon
import xyz.xenondevs.invui.gui.Gui
import xyz.xenondevs.invui.item.Item
import xyz.xenondevs.invui.item.builder.ItemBuilder
import xyz.xenondevs.invui.item.impl.SimpleItem
import xyz.xenondevs.invui.window.Window
class CandleInventory(val player: Player) { class CandleInventory(val player: Player) {
private var gui: GUI private var gui: Gui
init { init {
val items = arrayListOf<Item>() val items = arrayListOf<Item>()
RunnerDragon.instance.teamManager.getTeams().forEach { RunnerDragon.instance.teamManager.getTeams().forEach {
items.add(CandleItem(it)) items.add(CandleItem(it))
} }
gui = GUIBuilder(GUIType.NORMAL)
gui = Gui.normal()
.setStructure( .setStructure(
"# # # # # # # # #", "# # # # # # # # #",
"# x x x x x x x #", "# x x x x x x x #",
@ -29,6 +28,6 @@ class CandleInventory(val player: Player) {
.addIngredient('#', SimpleItem(ItemBuilder(Material.BLACK_STAINED_GLASS_PANE))) .addIngredient('#', SimpleItem(ItemBuilder(Material.BLACK_STAINED_GLASS_PANE)))
.build() .build()
items.forEach { item -> gui.addItems(item) } items.forEach { item -> gui.addItems(item) }
SimpleWindow(player, "RunnerDragon", gui).show() Window.single().setTitle("RunnerDragon").setGui(gui).open(player)
} }
} }

View file

@ -1,8 +1,5 @@
package xyz.atnrch.dragon.inventory package xyz.atnrch.dragon.inventory
import de.studiocode.invui.item.ItemProvider
import de.studiocode.invui.item.builder.ItemBuilder
import de.studiocode.invui.item.impl.BaseItem
import org.bukkit.ChatColor import org.bukkit.ChatColor
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.inventory.ClickType import org.bukkit.event.inventory.ClickType
@ -10,8 +7,11 @@ import org.bukkit.event.inventory.InventoryClickEvent
import xyz.atnrch.dragon.RunnerDragon import xyz.atnrch.dragon.RunnerDragon
import xyz.atnrch.dragon.teams.CandleColor import xyz.atnrch.dragon.teams.CandleColor
import xyz.atnrch.dragon.teams.Team import xyz.atnrch.dragon.teams.Team
import xyz.xenondevs.invui.item.ItemProvider
import xyz.xenondevs.invui.item.builder.ItemBuilder
import xyz.xenondevs.invui.item.impl.AbstractItem
class CandleItem(private val team: Team) : BaseItem() { class CandleItem(private val team: Team) : AbstractItem() {
override fun getItemProvider(): ItemProvider { override fun getItemProvider(): ItemProvider {
val material = CandleColor.getFromTeamColor(team.teamColor) val material = CandleColor.getFromTeamColor(team.teamColor)

View file

@ -7,7 +7,6 @@ import org.bukkit.Material
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import xyz.atnrch.dragon.RunnerDragon import xyz.atnrch.dragon.RunnerDragon
import xyz.atnrch.dragon.teams.Team import xyz.atnrch.dragon.teams.Team
import xyz.haoshoku.nick.api.NickAPI
import java.util.* import java.util.*
@ -15,7 +14,7 @@ class DragonPlayer(uuid: UUID) {
val player = Bukkit.getPlayer(uuid)!! val player = Bukkit.getPlayer(uuid)!!
fun instantiatePlayer() { fun instantiatePlayer() {
RunnerDragon.instance.worldManager.teleportAtSpawn(player) // really useful? RunnerDragon.instance.worldManager.teleportAtSpawn(player)
updateHeaderFooter() updateHeaderFooter()
impulse101() impulse101()
setTeam(Team.DEFAULT_TEAM) setTeam(Team.DEFAULT_TEAM)
@ -74,8 +73,11 @@ class DragonPlayer(uuid: UUID) {
} }
fun updateDisplayName() { fun updateDisplayName() {
NickAPI.nick(player, "${getTeam()!!.teamColor.chatColor}${player.name}") // TODO (Ineanto, 6/26/23): Update nick
NickAPI.refreshPlayer(player) /**
* NickAPI.nick(player, "${getTeam()!!.teamColor.chatColor}${player.name}")
* NickAPI.refreshPlayer(player)
*/
} }
private fun formatDuration(totalSeconds: Int): String { private fun formatDuration(totalSeconds: Int): String {

View file

@ -8,7 +8,7 @@ import java.util.*
class TeamManager( class TeamManager(
private val instance: RunnerDragon, private val instance: RunnerDragon,
private val teams: ArrayList<Team> = arrayListOf(), private val teams: ArrayList<Team> = arrayListOf(),
private val convert: HashMap<ChatColor, Team> = hashMapOf(), private val convert: EnumMap<ChatColor, Team> = EnumMap(ChatColor::class.java),
private val players: HashMap<UUID, Team> = hashMapOf() private val players: HashMap<UUID, Team> = hashMapOf()
) { ) {
fun createTeams(size: Int) { fun createTeams(size: Int) {

View file

@ -1,8 +1,8 @@
name: RunnerDragon name: RunnerDragon
main: xyz.atnrch.dragon.RunnerDragon main: xyz.atnrch.dragon.RunnerDragon
version: 1.0 version: 1.0-SNAPSHOT
api-version: 1.19 api-version: "1.20"
depend: [NickAPI, WorldEdit] depend: [WorldEdit]
commands: commands:
rd: rd:
description: "Contrôle RunnerDragon." description: "Contrôle RunnerDragon."