diff --git a/build.gradle.kts b/build.gradle.kts index ae2b356..264d260 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,12 +6,12 @@ plugins { } repositories { - maven("https://repo.nexomc.com/releases") + maven("https://repo.nexomc.com/snapshots") } dependencies { compileOnly("dev.slne.surf.npc:surf-npc-api:+") - compileOnly("com.nexomc:nexo:1.16.1") + compileOnly("com.nexomc:nexo:1.25.0-dev.11") implementation("dev.slne.surf.event:surf-event-base-api-common:+") implementation("dev.slne.surf.tab:surf-tab-api:+") compileOnly("dev.slne.surf.parkour:surf-parkour-api:+") @@ -36,7 +36,6 @@ surfPaperPluginApi { serverDependencies { registerSoft("surf-npc-paper") - registerSoft("surf-hologram-paper") registerSoft("surf-parkour-paper") registerSoft("Nexo") registerSoft("surf-trophy-paper") @@ -44,4 +43,4 @@ surfPaperPluginApi { registerSoft("surf-settings-paper") registerRequired("surf-queue-paper") } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index f9d87bf..8453d7c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ kotlin.code.style=official kotlin.stdlib.default.dependency=false org.gradle.parallel=true -version=3.1.8 +version=3.1.9 diff --git a/src/main/kotlin/dev/slne/surf/lobby/config/LobbyConfig.kt b/src/main/kotlin/dev/slne/surf/lobby/config/LobbyConfig.kt index a3866d5..5c6bacd 100644 --- a/src/main/kotlin/dev/slne/surf/lobby/config/LobbyConfig.kt +++ b/src/main/kotlin/dev/slne/surf/lobby/config/LobbyConfig.kt @@ -1,5 +1,6 @@ package dev.slne.surf.lobby.config +import org.bukkit.Bukkit import org.bukkit.Location import org.spongepowered.configurate.objectmapping.ConfigSerializable @@ -11,6 +12,9 @@ data class LobbyConfig( val survivalServerName: String = "survival", val lobbyCategory: String = "lobby", val spawnPoint: LocationConfig = LocationConfig.default(), + val externalEventEnabled: Boolean = false, + val externalEventReplacesDefault: Boolean = false, + val externalEventTeleportLocation: LocationConfig = LocationConfig.default() ) { @ConfigSerializable data class LocationConfig( @@ -22,7 +26,7 @@ data class LobbyConfig( val pitch: Float ) { fun toLocation(): Location { - val worldInstance = org.bukkit.Bukkit.getWorld(world) + val worldInstance = Bukkit.getWorld(world) ?: throw IllegalArgumentException("World '$world' not found") return Location(worldInstance, x, y, z, yaw, pitch) @@ -30,7 +34,7 @@ data class LobbyConfig( companion object { fun default() = LocationConfig( - world = "world", + world = Bukkit.getWorlds().first().name, x = 0.5, y = 100.0, z = 0.5, @@ -39,4 +43,4 @@ data class LobbyConfig( ) } } -} \ No newline at end of file +} diff --git a/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcHook.kt b/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcHook.kt index 00557dd..cf85379 100644 --- a/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcHook.kt +++ b/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcHook.kt @@ -2,7 +2,6 @@ package dev.slne.surf.lobby.hook.npc import com.github.shynixn.mccoroutine.folia.launch import dev.slne.surf.api.core.font.toSmallCaps -import dev.slne.surf.api.core.messages.adventure.clickOpensUrl import dev.slne.surf.api.core.messages.adventure.playSound import dev.slne.surf.api.core.messages.adventure.sendText import dev.slne.surf.core.api.common.SurfCoreApi @@ -53,7 +52,7 @@ object SurfNpcHook { private fun createSurvivalNpc() { survivalNpc = npc { displayName = { - note("Nepomuk".toSmallCaps()).decorate(TextDecoration.BOLD) + note("CastSMP".toSmallCaps()).decorate(TextDecoration.BOLD) appendNewline() spacer("26.1.2+") } @@ -67,6 +66,7 @@ object SurfNpcHook { withEventHandler { queueToSurvivalServer(it.player) } + scale(1.5) } } @@ -86,6 +86,17 @@ object SurfNpcHook { withEventHandler { val player = it.player + if (lobbyConfig.externalEventEnabled && lobbyConfig.externalEventReplacesDefault) { + player.teleportAsync(lobbyConfig.externalEventTeleportLocation.toLocation()) + .thenRun { + player.playSound(true) { + type(Sound.ENTITY_ENDERMAN_TELEPORT) + pitch(1.1f) + } + } + return@withEventHandler + } + when (eventServerBridge.state.get()) { EventServerState.OPEN -> { queueToEventServer(player) @@ -113,13 +124,14 @@ object SurfNpcHook { } rotationType = NpcRotationType.FIXED + scale(1.5) } } private fun createSpawnSurvivalNpc() { spawnSurvivalNpc = npc { displayName = { - note("Survival".toSmallCaps(), TextDecoration.BOLD) + note("CastSMP".toSmallCaps(), TextDecoration.BOLD) } type = EntityType.MANNEQUIN uniqueName = "spawn_survival" @@ -133,11 +145,12 @@ object SurfNpcHook { player.teleportAsync(Locations.SURVIVAL_TELEPORT.getLocation()).thenRun { player.playSound(true) { type(Sound.ENTITY_ENDERMAN_TELEPORT) - pitch(2.0f) + pitch(1.5f) } } } rotationType = NpcRotationType.FIXED + scale(1.5) } } @@ -151,17 +164,30 @@ object SurfNpcHook { skin = SurfNpcSkins.EVENT.getSkin() location = Locations.SPAWN_EVENT.getLocation() + withKickback() withEventHandler { val player = it.player + if (lobbyConfig.externalEventEnabled && lobbyConfig.externalEventReplacesDefault) { + player.teleportAsync(lobbyConfig.externalEventTeleportLocation.toLocation()) + .thenRun { + player.playSound(true) { + type(Sound.ENTITY_ENDERMAN_TELEPORT) + pitch(1.1f) + } + } + return@withEventHandler + } + player.teleportAsync(Locations.EVENT_TELEPORT.getLocation()).thenRun { player.playSound(true) { type(Sound.ENTITY_ENDERMAN_TELEPORT) - pitch(2.0f) + pitch(1.5f) } } } + scale(1.5) rotationType = NpcRotationType.FIXED } } @@ -178,6 +204,7 @@ object SurfNpcHook { location = Locations.SPAWN_SHOP.getLocation() withKickback() rotationType = NpcRotationType.FIXED + scale(1.5) } } @@ -201,6 +228,7 @@ object SurfNpcHook { } } rotationType = NpcRotationType.FIXED + scale(1.5) } } diff --git a/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcSkins.kt b/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcSkins.kt index 62234ba..09e8d7c 100644 --- a/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcSkins.kt +++ b/src/main/kotlin/dev/slne/surf/lobby/hook/npc/SurfNpcSkins.kt @@ -2,6 +2,7 @@ package dev.slne.surf.lobby.hook.npc import dev.slne.surf.api.core.util.objectSetOf import dev.slne.surf.npc.api.npc.skin.NpcSkin +import dev.slne.surf.npc.api.npc.skin.NpcSkinPart enum class SurfNpcSkins(val skinValue: String, val skinSignature: String) { UNKNOWN( @@ -9,18 +10,19 @@ enum class SurfNpcSkins(val skinValue: String, val skinSignature: String) { "VjpajnLZ4dIdfrXQJFFyV7Fp/IKEcQmEZIbiVR3MtFalVQ8BS5wCv8dsQeTmwZbv4zo4lL1urA4boAC9NIcP8KK+ucg19kgGrNDTs3Gmo7j57kZipDqKHJZMaHcvGx2Vur61YNL+cLQ9kwHaPwWdEdd9SDCJuXpvlBLrIxM8bqacyE1S/aATU388373xg2rNPCOxUy4YhScqeDSkBYdlYJ6xqQTwVIZZ8iwE/rqjq/X66VMRL6EtwwOqGqUBusvIiAfnGsyqMJ4rtohRsF9YHOR4cIk8K6E12ryl8uyp/HAkOYvfuk7TQuQSZpfgkH0aObjAeFPLGGGbV+P1cyezZm0I3erOQhviN9zfeaiuTHBmfP+RSb6dw+eQVKkdE2GkNinRp5EX5pltR3wREos2Muh2LXw3gGgWR3HvKnAZ1ofgAcIGk6pq9IKTpGaRZYhjIMpMXGsiRlgYqN4BmEDhTlV1XIldpatju6QnbTYyr8oJ97Z5FEVkhQ+5GsQnU9Rx+GyANhJjGVU06WiS/3H42SxbKaoPPIbBGPN3H8JTWO5Av3Y2zYLhWLhPFKF0b09FbhmkMJq0W9qE82DoByY/mhRmwTb1yrbKwXwxScEC4CSvbQBxwNjtp2WwttYs3L/x4Sxf4PgkPL0lvUF+yt+OGkHgJw4EzxV2giJaLfsXmsQ=" ), SURVIVAL( - "ewogICJ0aW1lc3RhbXAiIDogMTcxODMwMzkwNzU2NCwKICAicHJvZmlsZUlkIiA6ICJlY2Q0ZTI4NjdkMmE0MTE2OTljYzlkMjMzYmM1YmEyMyIsCiAgInByb2ZpbGVOYW1lIiA6ICJSYXRlZEtub3QiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTVjZDIwMDg4OGI4NGZiODA0YTE0YTQyY2IzNjI0ZDc3NTRiNDM3YTU3YjBjZWNiZTA0MmFkNTQzZmQxZGUxZCIKICAgIH0KICB9Cn0=", - "FSgou42Te1dqA7iMoa8SVRNEF79y1GglInfk9a3dqkzqJ+QBT9Im8Ddy81J/TfT9CxhXqaopovMUOecmKDn+8+HzQV4PUFqxp1EeKD2uNZ9w4UC2nTgAhIQImCoqmv3oevI5eDqJooFp4U4uiz4VG0dRMNFak1HSM5Qy63ZTnVxtYRTwGqsFIo79wAjhRuHgb8S3mtYhpwmK2NerM/j/FwB0FA+WK/dvXwTlz/34nVGpRMAWpwJcbipO0THK2lE1o8Yl803XEs0EgduU7BHnXg0r0zl9ddeLJ/7eb7/KNRCBaxEBaN1fw3KgbpqYrvkBdhuDBxmBIYjnWhSwA2MENmypyf5UR3sYSmwEjR4LKmUxuDXyqJrKBRcd3jftRR8TWl91knoNi62HyXFHdFOgLaD3Bmzj0wIgPth5mNjSVWqKC9/lWa60Lmr9g/DRtjQ79YvRntnpRKn8CGNigpklm4vZs8NoLaBcNJzVHmBREdQ36uQzIZrGvpnnur4sWqQQuC3k8pVjA4XW3xhpGtqP/F0GqIOlVFymNzhsCXvQ19uXq12PkqcWwAeERJKu+S0Ud6vi5uwqGgEANmLZlbYecHY/FGOAlT89J7I8pgVetlVosW0YO5fbqwyFDzTzr+FzHkkr+bZ+u+YyGhYW9yPT/qEHaNsqUv/0Bt+KL+BFVG8=" + "ewogICJ0aW1lc3RhbXAiIDogMTc4MDUwNjUwOTkxOSwKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvODBlNTQ1ZGRiOTY2NTRmYWI1NTVlNDZkMWM0OGZmNmQyYmY0YzkyZDRlNzRmYWExZDVlZGViMTQxODhhYmFhYiIKICAgIH0KICB9Cn0=", + "CKoBVXu6KLkXdmPz7Bf04Gs95vGUlzl+3hQhoXXHyUlAS7rOEFGekN7aa3Q2PWaGLoyzdusI33p4Ybywa/2j81TJ0QlIo7/Nb+IVhoLG+NOqkBZs72QVGGkH/NWzlZ76Lj08OaNMNqjcbFvdPUt83HpcoW1RsQdT/xkGQf/IH0UbO5NKBoqb0rsFfc2tWvbmCzI5ciUAhNJI1C2qe5ysUkSylwLZaURI1MwrclQCCZpefpz4LbcvYyl/TB6si2UOX6i4IuiTVHPBm75Px6imzSTNbjacmSFLXQdpdKE5y8pD5WPPQgCnYTOHo92YZPju0e+uXaUWAWCOVJ4yrxOl4j+gE3/Tyi/VYEDeLc7E+oLczQ5qFG4wcuj5Yp8ftmknSr3Obkj6sJEj73p4ylDUW5BOe2CtX1mhB1ORC8C0xd4BmwJcNgraoOpnDp4LLY3qAr6cSzIglaVaE+a24IUKzvXq6kw4FCDgyoFCljDEsVYRbsmXT9ddNaAIf8MovrRdzR+/vU47c1/VxJZApksXGEm7JPX/O7tIrrND0Pwp4eIy2LvsbatWD7ckEjbGkvNC0ke+61UKoq0La6fFHl9KHVxGH6Mnq7V76yMfXniCkOrTZHCXzWwF687NcGUwtIZTkW/LCqT9LeGCwUpoYo4hExe7arE5YHp9mUpP+E3AbH0=" ), EVENT( - "ewogICJ0aW1lc3RhbXAiIDogMTY3OTU5NzMxMjA2NiwKICAicHJvZmlsZUlkIiA6ICIxNmFkYTc5YjFjMDk0MjllOWEyOGQ5MjgwZDNjNjE5ZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJMYXp1bGl0ZV9adG9uZSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82YjZjYThhM2YwMTY5YzgxNDdkMGYyNjNlMTA3ZDU3YTIyMDdhZjU5NmZkMjAyNmY4OGU4MjkzMjBlNTk3NTc1IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=", - "NV9vQ1TRhq39aCIY8ghXvUmghxcHkiZ2S+wjlrFDSl4yGKcnsflvjTEGkTM/cAOklqeIfHeoPtRM4r5wCEL+QVRmfKUSGdBg83uWBiX1yFB7uowEDBx8vyzZHrUuBrj3GuP/V41LCDIPStdnWmwXTEk0Rsa36EJ6EkijEVTWuE7OVIIELpZJ0oBxYR9aqja81Mt8dTLnGbX2oLOovNfpqbs+Fy3JGhFWC/cWdy1p0jrzytrxthqYGTfYP3WMOkIFOXshynurxvKGKoOYDEPfFgUeadJJKblonZZ4tbkv4eNeClTewAE8nm914GYh2Cjelw9rZuYc9rDjU5+G+s8mcafY6Hlx1IlIYOg7pgoorRTpUUU7FbeBqchh6aclf+hDlQqsXQDAWjCdvPrKfqDbv9P9S08ZrZQYdZqyF4aN67fLt/bz59PY46ZMjE3xGSSBaxCLs0cQUMEoxT73NUak6d/kbU9/kNhIkgn7cj2B4hrL4KvtgZB8EHz8Od79DqyxLhIRZTW02Mnvcf1z4CNYTtaOzs261tVFe2SrShzYJrrHW9tKWmetFLxwT9Zu+ddayzBK5x2sYTEIbhqne1PXq7/+BF49LPRSy76c42lJpYKz+YpfVGq3+lMTkxyce+hew4+dQG5oXX7W178ZaYdq7JFNM6ffTxfayjX0sbD5wXg=" + "ewogICJ0aW1lc3RhbXAiIDogMTc4MjIyMzQ2ODk4OCwKICAicHJvZmlsZUlkIiA6ICJhZmEwYmMzZTA1MjQ0MTM4YjkxMDIxY2Y3ODE2YjRkZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbGV4aXNNYWRkIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzc1NThlZjJiOWY5NjU1NTU4MTMzZmU5MDliM2Q5MzkxMWUyZDYwYWVjY2RkMDcyZmNhNTY3NmNlNjZhMTY4YTkiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==", + "ancAwwN6/cur413zm5hFp4xGY6KDcp4DVi1/VZtf76VHcOle8A5efThe1IK7DTSMqN/Uz+vQOdlmdW28iFyoaFOgmjfpu6Mnr/BqzWrXluNLhHe8CK12hMTOofH6pBSz1MckWLI9lbg6F1cdJoG6b97EuX4rjPZSjlKMVpHBVrs2hYQWsh2riKb56/HfTAgI2b9ZTaexXI14n55UFfkbCI3NqDmEOfmuVJIbDxNfsj107W+Cs+oLhxatmcwUrfqLv3R09ECfhQIzOfGgFDuN2BUX8UhPtONVJQ9Y2YpOsDY4lrJzyKM5vaIN1uHLSNb5mw97M6WRYQiwpUq0QdNvHF9jDzgfw5WbPifB3P9tuI3lhQach6uyAAN0GXIqIAsvFxOoHBMuwN3G3CX5GNZ49GEa/jDwOEZodcMN04hKqkJw5yfSzJFU0NRPWNI6HDMehNB2SLoM1SvY8roIgfylhxZeu0SHdtmKmUfEc2JnVOIo1algsa9kaJCGwBE58UW6AgewwajAhQa+rmdzsNvNg/FR6CXIEdJVJOmUubASv5BqNpHCTsfAHJ78PG8WBEAK7dBv+WWLfmawYICRRNxa5+x5+GhJHKb9Cr5qwHyU9lVk7qMu6PdHqaqNafOvKownYI1L6Fvfz7Cq0yW+++twbSr8wWjz/CFpJV78bDlFlWg=" ), RULES( - "ewogICJ0aW1lc3RhbXAiIDogMTY0OTU0MTEwOTQzNCwKICAicHJvZmlsZUlkIiA6ICJjYmFkZmRmNTRkZTM0N2UwODQ3MjUyMDIyYTFkNGRkZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJNeHJuaW5nIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E0Y2M3ZWZiNjNlZTU4YTA2ZTBlYmJlZjdiN2U5ZTg1OGZmYTE3OGNhNWM2MjcxYzg5NjllODhlMDVlY2YwMzMiCiAgICB9CiAgfQp9", - "b5ODc0ibj8ux9FjBwtqgXPYmLd3ZKsMARL2bl8CYh0xALmCqcUXfgSwbCNU3A+DWvu86VGu4P3utw2286UNy46Zgfw0Dw4n0yyOUXD9VXU+dEh9NMN98fvjcV54TySkI9xk+yfkLweEXN+rK0AlcxJwdhDqihb4ZOYmR4zVqyPcU1ol1iZium5T+YLNilAl0eUoYd7DU74bGfkRDDrsTfU/hx65kk0nhPu7PhkYueGBw2voiyyTWdiXrXpgzK3z5q1VRTaovXAJOp60l2w/9nv3QktlviL/HcZ2uLy8YYWPZMWtKxZ79SJvTgh1gxYJq7dY0JSnNc+6yURRBAquSzypRPC5JdNFLt7NEfmeZGF8excrhXVcd938AiZsVS/+e5wjUOsqCzrqcfGAJdlZsPs1eoguLJMKHwYQSnNEeFFp6wMHLtKKr6RzMiH/5o6ZFwShM6UJv2PNX/qB0wZ3nTf4mwX+nW2AHKBr3YBi40VEBrOqTnBNkc87GGl7Mw5vwcNOluFpruKlNcxeG9BcLAxrPgft5LyFYyhQC5FGThJTbHxif2tRjTpzDqjiPmPa9XNM0gSJt+9mSrdAgl74jf4okwpCBXC6D+oDlZEQAsT21coypSMWu6tUkxPqzYPdo6UJFJCsDeRUzTUufe65xiX8vUIN1/4Y7pBK0DiZLTC0=" + "ewogICJ0aW1lc3RhbXAiIDogMTYyMTkyNjMzOTIxNywKICAicHJvZmlsZUlkIiA6ICJjNjc3MGJjZWMzZjE0ODA3ODc4MTU0NWRhMGFmMDI1NCIsCiAgInByb2ZpbGVOYW1lIiA6ICJDVUNGTDE2IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2IzYjNhMzM2YTc3Y2FiOGI3NDQ2ODY4Y2VhMjkyMTkwZTc3Mjk4ZjJiNjBlODM1YjkwNTY4NjI1MDJkNjU0NjAiCiAgICB9CiAgfQp9", + "gbIH16YWg05ykuKXq1Whju1CN68gDa3C3TeCr8aNZ+hHsl6aw+sGUJC9a1brV1IzOFhXKyjxe6AcjVQM6/7wltkGCZ0HNh0BiOglWXK2pbv5xZF6v5pM3YPaDNQ37gxEDsnxw8XJkVGHFNKaFz6dNIn/sjUU0uPiwlv1772zX2EN0FcyWB+YgpKDjZ4x0xs+DytxrFQatvdrEIHnEWzq4bGGoDomN8yQccPhqB1rtDGp3TuXvzSfjwDvzzo7aVuFk6qfILW6DctAP+w6bfFE2OpgQoZrAX5/lcgjPGcMbdDi9eWHHh4BFuTJ68ZYzXyXK4j1NHRxtkCPajgdfTKmMzKhyZ5iRcASREaU7wAqErSY2ZBLx99kjfilI8qJ/wDxlnrFrYEbT0iRbLWLjThtO7X0e8+KSAe/1TKp4EdmhQ9YBd9OYTmW7tmDyRU15ukeKHUOA2njIXXDg58Rq6n2+6drb0mPJ6e69+ibu2Gg+Ou1tOxsS5XhFpnquAHCipSbqOBkyZcttR0KCxt23KENVG+66jhCjWTseXEh/yJhUhMvL18kkDQeO3OED0JRh/IG8M/lQEk1V8qT4FTTX3tATsLPbgGQtU5RlvKE4pTusN5v4ZFq+wVEXuZyNiwKgxNt4UUYsifRJ27wcwg/0YH8O7EAnJgUnGWAlurMEaFALow=" ) ; - fun getSkin() = NpcSkin(name, skinValue, skinSignature, objectSetOf()) + fun getSkin() = + NpcSkin(name, skinValue, skinSignature, objectSetOf(*NpcSkinPart.entries.toTypedArray())) } \ No newline at end of file diff --git a/src/main/kotlin/dev/slne/surf/lobby/hook/trophy/TrophyHook.kt b/src/main/kotlin/dev/slne/surf/lobby/hook/trophy/TrophyHook.kt index 6b1e640..1375bc6 100644 --- a/src/main/kotlin/dev/slne/surf/lobby/hook/trophy/TrophyHook.kt +++ b/src/main/kotlin/dev/slne/surf/lobby/hook/trophy/TrophyHook.kt @@ -1,10 +1,10 @@ package dev.slne.surf.lobby.hook.trophy -import dev.slne.surf.trophy.api.surfTrophyApi +import dev.slne.surf.trophy.api.SurfTrophyApi import org.bukkit.entity.Player object TrophyHook { fun openMenu(player: Player) { - surfTrophyApi.showTrophyMenu(player.uniqueId, player.uniqueId) + SurfTrophyApi.showTrophyMenu(player.uniqueId, player.uniqueId) } } \ No newline at end of file diff --git a/src/main/kotlin/dev/slne/surf/lobby/inventory/impl/NavigatorInventory.kt b/src/main/kotlin/dev/slne/surf/lobby/inventory/impl/NavigatorInventory.kt index 4a87288..8fc6629 100644 --- a/src/main/kotlin/dev/slne/surf/lobby/inventory/impl/NavigatorInventory.kt +++ b/src/main/kotlin/dev/slne/surf/lobby/inventory/impl/NavigatorInventory.kt @@ -7,7 +7,6 @@ import com.github.shynixn.mccoroutine.folia.launch import com.sksamuel.aedile.core.expireAfterWrite import dev.slne.surf.api.core.font.toSmallCaps import dev.slne.surf.api.core.messages.adventure.buildText -import dev.slne.surf.api.core.messages.adventure.clickOpensUrl import dev.slne.surf.api.core.messages.adventure.playSound import dev.slne.surf.api.core.messages.adventure.sendText import dev.slne.surf.api.paper.builder.buildItem @@ -67,6 +66,19 @@ object NavigatorInventory : View() { render.layoutSlot('E').withItem(eventServerItem).onClick { click -> val player = click.player + + if (lobbyConfig.externalEventEnabled && lobbyConfig.externalEventReplacesDefault) { + player.teleportAsync(lobbyConfig.externalEventTeleportLocation.toLocation()) + .thenRun { + player.playSound(true) { + type(Sound.ENTITY_ENDERMAN_TELEPORT) + pitch(1.1f) + } + } + player.closeInventory() + return@onClick + } + player.teleportAsync(Locations.EVENT_TELEPORT.getLocation()).thenRun { player.playSound(true) { type(Sound.ENTITY_ENDERMAN_TELEPORT) @@ -98,8 +110,8 @@ object NavigatorInventory : View() { appendInfoPrefix() info("Das Regelwerk findest du hier: ") append { - variableValue("server.castcrafter.de/rules") - clickOpensUrl("https://server.castcrafter.de/rules") + variableValue("docs.castcrafter.de/rules") + clickOpensUrl("https://docs.castcrafter.de/rules") } } } @@ -111,7 +123,7 @@ object NavigatorInventory : View() { private val connectingPlayers = Caffeine.newBuilder().expireAfterWrite(5.minutes).build() -fun lobbySelectorView() = paginatedSurfView("Lobby Auswahl") { +fun lobbySelectorView() = paginatedSurfView("Lobbies") { pagination { lazySource { SurfCoreApi.getServerByCategory(lobbyConfig.lobbyCategory) @@ -245,18 +257,38 @@ private val cosmeticsItem private val survivalServerItem get() = plugin.getInvisibleItem().apply { displayName { - primary("Survival Server") + primary("CastSMP ") + darkSpacer("(Survival)") } buildLore { emptyLine() + line { + note("Beschreibung:".toSmallCaps()) + } + line { + info("Der ") + variableValue("CastSMP") + info(" ist ein") + variableValue(" friedlicher") + info(" Survival Server.") + } + + line { + info("Hier kannst du entspannt") + variableValue(" deine Träume") + info(" verwirklichen.") + } + + emptyLine() + line { note("Status:".toSmallCaps()) } line { when (SurfCoreApi.getServerByName(lobbyConfig.survivalServerName)?.state) { - SurfServerState.RUNNING -> success("Der Survival Server ist erreichbar") - else -> error("Der Survival Server ist derzeit nicht erreichbar") + SurfServerState.RUNNING -> success("Der CastSMP ist erreichbar") + else -> error("Der CastSMP ist derzeit nicht erreichbar") } } @@ -313,4 +345,4 @@ private val eventServerItem } } } - } \ No newline at end of file + }