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"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="1.8.10" />
<option name="version" value="1.8.21" />
</component>
</project>

8
.idea/misc.xml generated
View file

@ -1,6 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<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="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">
<output url="file://$PROJECT_DIR$/out" />
</component>

View file

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

View file

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

View file

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

View file

@ -13,10 +13,12 @@ class EntityDamageListener : Listener {
fun onEntityDamage(event: EntityDamageEvent) {
if (event.entity is Player) {
val player = (event.entity as Player)
if (player.gameMode == GameMode.SURVIVAL) {
if ((RunnerDragon.STATE == GameState.GRACE_PERIOD || RunnerDragon.STATE == GameState.DRAGON) && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
if (RunnerDragon.STATE == GameState.GRACE_PERIOD && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
if (player.gameMode == GameMode.SURVIVAL) {
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
}
}

View file

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

View file

@ -20,27 +20,25 @@ class EnderDragonListener : Listener {
fun onEnderDragonDeath(event: EntityDeathEvent) {
if (event.entity is 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
when (damageEvent.cause) {
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()
if (first.isEmpty) {
return
}
player = Bukkit.getPlayer(first.get()) ?: return
}
EntityDamageEvent.DamageCause.ENTITY_ATTACK, EntityDamageEvent.DamageCause.PROJECTILE -> {
val damager: Entity = damageEvent.entity
if (damager is Projectile) {
player = damager.shooter as Player
} else if (damager is Player) {
player = damager
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) {
Bukkit.broadcastMessage("Last damage dealt by ${entity.name}")
player = entity
}
}
@ -51,7 +49,7 @@ class EnderDragonListener : Listener {
val team = dragonPlayer?.getTeam()
if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) {
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)
}
}
@ -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}!")
}
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.PotionEffectType
import xyz.atnrch.dragon.RunnerDragon
import xyz.atnrch.dragon.player.DragonPlayer
class SecondFight {
companion object {
fun start(dragon: EnderDragon, dragonPlayer: DragonPlayer?) {
for (i in 0..2) {
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}???")
}
fun start(dragon: EnderDragon) {
Bukkit.getScheduler().scheduleSyncDelayedTask(
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 {
if (it.location.world!!.environment != World.Environment.THE_END) {
it.teleport(dragonPlayer!!.player.location)
}
it.addPotionEffect(PotionEffect(PotionEffectType.BLINDNESS, 5, 1))
it.playSound(it.location, Sound.ENTITY_LIGHTNING_BOLT_IMPACT, 1f, 0.5f)
}
Bukkit.getOnlinePlayers().forEach {
it.addPotionEffect(PotionEffect(PotionEffectType.BLINDNESS, 5, 1))
it.playSound(it.location, Sound.ENTITY_LIGHTNING_BOLT_IMPACT, 1f, 0.5f)
if (it.location.world!!.environment != World.Environment.THE_END) {
it.teleport(RunnerDragon.WORLD_END.spawnLocation)
}
}
dragon.dragonBattle!!.initiateRespawn()
dragon.dragonBattle!!.resetCrystals()
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}")
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.entity.EntityDamageEvent
import org.bukkit.event.entity.FoodLevelChangeEvent
import org.bukkit.event.player.PlayerInteractAtEntityEvent
import org.bukkit.event.player.PlayerInteractEvent
import xyz.atnrch.dragon.GameState
import xyz.atnrch.dragon.RunnerDragon
@ -18,7 +19,7 @@ class WaitingListener : Listener {
@EventHandler
fun onBlockBreak(event: BlockPlaceEvent) {
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
}
}
@ -26,7 +27,7 @@ class WaitingListener : Listener {
@EventHandler
fun onBlockBreak(event: BlockBreakEvent) {
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
}
}
@ -35,7 +36,7 @@ class WaitingListener : Listener {
fun onEntityDamage(event: EntityDamageEvent) {
if (event.entity is 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
}
}
@ -43,18 +44,25 @@ class WaitingListener : Listener {
@EventHandler
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
}
}
@EventHandler
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") {
CandleInventory(event.player)
}
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
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.entity.Player
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) {
private var gui: GUI
private var gui: Gui
init {
val items = arrayListOf<Item>()
RunnerDragon.instance.teamManager.getTeams().forEach {
items.add(CandleItem(it))
}
gui = GUIBuilder(GUIType.NORMAL)
gui = Gui.normal()
.setStructure(
"# # # # # # # # #",
"# x x x x x x x #",
@ -29,6 +28,6 @@ class CandleInventory(val player: Player) {
.addIngredient('#', SimpleItem(ItemBuilder(Material.BLACK_STAINED_GLASS_PANE)))
.build()
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
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.entity.Player
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.teams.CandleColor
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 {
val material = CandleColor.getFromTeamColor(team.teamColor)

View file

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

View file

@ -8,7 +8,7 @@ import java.util.*
class TeamManager(
private val instance: RunnerDragon,
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()
) {
fun createTeams(size: Int) {

View file

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