Skip to content

Commit

Permalink
Merge pull request #73 from DongShaoNB/feat/support-sunlight
Browse files Browse the repository at this point in the history
[FEATURE] Support SunLight
  • Loading branch information
DongShaoNB authored Aug 15, 2024
2 parents c24cbc3 + cd2f7dd commit 632f0c5
Show file tree
Hide file tree
Showing 11 changed files with 186 additions and 26 deletions.
4 changes: 4 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ dependencies {
compileOnly("net.william278.huskhomes:huskhomes-bukkit:4.7")
// AdvancedTeleport
compileOnly(files("lib/AdvancedTeleport-Bukkit-6.1.1-all.jar"))
// nightcore
compileOnly(files("lib/nightcore-2.6.3.jar"))
// SunLight
compileOnly(files("lib/SunLight-3.12.1.jar"))
// AuthMe
compileOnly("fr.xephi:authme:5.7.0-SNAPSHOT")
// CatSeedLogin
Expand Down
Binary file added lib/SunLight-3.12.1.jar
Binary file not shown.
Binary file added lib/nightcore-2.6.3.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ enum class BasicPlugin {
EssentialsX,
HuskHomes,
AdvancedTeleport,
SunLight,
None

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,14 @@ import cc.dsnb.bedrockplayersupport.command.*
import cc.dsnb.bedrockplayersupport.config.LangConfig
import cc.dsnb.bedrockplayersupport.config.MainConfig
import cc.dsnb.bedrockplayersupport.form.MainForm
import cc.dsnb.bedrockplayersupport.form.basic.ATForm
import cc.dsnb.bedrockplayersupport.form.basic.CMIForm
import cc.dsnb.bedrockplayersupport.form.basic.EssXForm
import cc.dsnb.bedrockplayersupport.form.basic.HuskHomesForm
import cc.dsnb.bedrockplayersupport.form.basic.*
import cc.dsnb.bedrockplayersupport.listener.MainTabCompleteListener
import cc.dsnb.bedrockplayersupport.listener.PlayerRespawnListener
import cc.dsnb.bedrockplayersupport.listener.auth.AuthMeListener
import cc.dsnb.bedrockplayersupport.listener.auth.CatSeedLoginListener
import cc.dsnb.bedrockplayersupport.listener.auth.NexAuthListener
import cc.dsnb.bedrockplayersupport.listener.auth.OtherAuthListener
import cc.dsnb.bedrockplayersupport.listener.basic.ATListener
import cc.dsnb.bedrockplayersupport.listener.basic.CMIListener
import cc.dsnb.bedrockplayersupport.listener.basic.EssXListener
import cc.dsnb.bedrockplayersupport.listener.basic.HuskHomesListener
import cc.dsnb.bedrockplayersupport.listener.basic.*
import cc.dsnb.bedrockplayersupport.manager.ConfigManager
import cc.dsnb.bedrockplayersupport.util.UpdateUtil
import com.github.Anon8281.universalScheduler.UniversalScheduler
Expand Down Expand Up @@ -49,6 +43,7 @@ class BedrockPlayerSupport : JavaPlugin() {
lateinit var essxForm: EssXForm
lateinit var huskhomesForm: HuskHomesForm
lateinit var atForm: ATForm
lateinit var sunlightForm: SunLightForm
lateinit var floodgateApi: FloodgateApi
val miniMessage = MiniMessage.miniMessage()
const val PREFIX = "[BedrockPlayerSupport] "
Expand Down Expand Up @@ -130,6 +125,14 @@ class BedrockPlayerSupport : JavaPlugin() {
))
) {
BasicPlugin.AdvancedTeleport
} else if (pluginManager.isPluginEnabled("SunLight") && ("sunlight".equals(
mainConfigManager.getConfigData().basicPlugin(), ignoreCase = true
) || "auto".equals(
mainConfigManager.getConfigData().basicPlugin(),
ignoreCase = true
))
) {
BasicPlugin.SunLight
} else {
BasicPlugin.None
}
Expand Down Expand Up @@ -192,6 +195,11 @@ class BedrockPlayerSupport : JavaPlugin() {
pluginManager.registerEvents(ATListener(), this)
}

BasicPlugin.SunLight -> {
sunlightForm = SunLightForm()
pluginManager.registerEvents(SunLightListener(), this)
}

BasicPlugin.None -> {
// Don't need to do anything
}
Expand Down Expand Up @@ -238,6 +246,7 @@ class BedrockPlayerSupport : JavaPlugin() {
BasicPlugin.EssentialsX -> "EssentialsX"
BasicPlugin.HuskHomes -> "HuskHomes"
BasicPlugin.AdvancedTeleport -> "AdvancedTeleport"
BasicPlugin.SunLight -> "SunLight"
BasicPlugin.None -> "None"
}
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,7 @@ class WarpFormCommand : CommandExecutor {
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<String>): Boolean {
if (sender is Player) {
if (BedrockPlayerSupport.floodgateApi.isFloodgatePlayer(sender.uniqueId)) {
when (BedrockPlayerSupport.basicPlugin) {
CMI -> BedrockPlayerSupport.cmiForm.sendWarpForm(sender)
EssentialsX -> BedrockPlayerSupport.essxForm.sendWarpForm(sender)
HuskHomes -> BedrockPlayerSupport.huskhomesForm.sendWarpForm(sender)
AdvancedTeleport -> BedrockPlayerSupport.atForm.sendWarpForm(sender)
None -> {
// Don't need to do anything
}
}
BedrockPlayerSupport.mainForm.openBedrockWarpForm(sender)
} else {
sender.sendMessage(
BedrockPlayerSupport.miniMessage.deserialize(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ interface MainConfig {
@ConfKey("plugin.basic")
@ConfComments(
"填写正在使用的基础插件",
"可选值: auto/cmi/essentialsx/huskhomes/advancedteleport/none",
"可选值: auto/cmi/essentialsx/huskhomes/advancedteleport/sunlight/none",
"auto为自动检测 none为没有基础插件(即关闭功能)",
"Fill in the basic plugins currently in use",
"Optional value: auto/cmi/essentialsx/huskhomes/advancedteleport/none",
"Optional value: auto/cmi/essentialsx/huskhomes/advancedteleport/sunlight/none",
"auto is for automatic detection, none for no basic plugin (i.e. disable function)"
)
@DefaultString("auto")
Expand Down Expand Up @@ -108,7 +108,10 @@ interface MainConfig {

@ConfKey("form.back.command")
@ConfComments(
"返回死亡点命令", "The command of back death location"
"返回死亡点命令",
"部分插件会用 /dback 或 其他命令, 请在此处替换",
"The command of back death location",
"If the command of back death location is /dback or other command, please replace it here",
)
@DefaultString("/back")
@Order(71)
Expand Down
47 changes: 42 additions & 5 deletions src/main/kotlin/cc/dsnb/bedrockplayersupport/form/MainForm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@ class MainForm {
).validResultHandler { _, customFormResponse ->
when (customFormResponse.asDropdown(0)) {
0 -> player.chat("/tpa " + onlinePlayerNameList[customFormResponse.asDropdown(1)])
1 -> player.chat("/tpahere " + onlinePlayerNameList[customFormResponse.asDropdown(1)])
1 -> if (BedrockPlayerSupport.basicPlugin == SunLight) {
player.chat("/tphere " + onlinePlayerNameList[customFormResponse.asDropdown(1)])
} else {
player.chat("/tpahere " + onlinePlayerNameList[customFormResponse.asDropdown(1)])
}
}
}
BedrockPlayerSupport.floodgateApi.sendForm(uuid, form)
Expand All @@ -87,8 +91,17 @@ class MainForm {
.button2(legacySection.serialize(miniMessage.deserialize(langConfig.receivedTpFormDenyButton())))
.validResultHandler { _, modalFormResponse ->
when (modalFormResponse.clickedButtonId()) {
0 -> receiver.chat("/tpaccept")
1 -> receiver.chat("/tpdeny")
0 -> if (BedrockPlayerSupport.basicPlugin == SunLight) {
receiver.chat("/tpyes")
} else {
receiver.chat("/tpaccept")
}

1 -> if (BedrockPlayerSupport.basicPlugin == SunLight) {
receiver.chat("/tpno")
} else {
receiver.chat("/tpdeny")
}
}
}
} else if (tpType === TeleportType.TpaHere) {
Expand All @@ -106,8 +119,17 @@ class MainForm {
.button2(legacySection.serialize(miniMessage.deserialize(langConfig.receivedTpFormDenyButton())))
.validResultHandler { _, modalFormResponse ->
when (modalFormResponse.clickedButtonId()) {
0 -> receiver.chat("/tpaccept")
1 -> receiver.chat("/tpdeny")
0 -> if (BedrockPlayerSupport.basicPlugin == SunLight) {
receiver.chat("/tpyes")
} else {
receiver.chat("/tpaccept")
}

1 -> if (BedrockPlayerSupport.basicPlugin == SunLight) {
receiver.chat("/tpno")
} else {
receiver.chat("/tpdeny")
}
}
}
}
Expand Down Expand Up @@ -154,6 +176,7 @@ class MainForm {
EssentialsX -> BedrockPlayerSupport.essxForm.sendDelHomeForm(player)
HuskHomes -> BedrockPlayerSupport.huskhomesForm.sendDelHomeForm(player)
AdvancedTeleport -> BedrockPlayerSupport.atForm.sendDelHomeForm(player)
SunLight -> BedrockPlayerSupport.sunlightForm.sendDelHomeForm(player)
None -> {
// Don't need to do anything
}
Expand All @@ -166,6 +189,7 @@ class MainForm {
EssentialsX -> BedrockPlayerSupport.essxForm.sendGoHomeForm(player)
HuskHomes -> BedrockPlayerSupport.huskhomesForm.sendGoHomeForm(player)
AdvancedTeleport -> BedrockPlayerSupport.atForm.sendGoHomeForm(player)
SunLight -> BedrockPlayerSupport.sunlightForm.sendGoHomeForm(player)
None -> {
// Don't need to do anything
}
Expand Down Expand Up @@ -201,4 +225,17 @@ class MainForm {
BedrockPlayerSupport.floodgateApi.sendForm(uuid, form)
}

fun openBedrockWarpForm(player: Player) {
when (BedrockPlayerSupport.basicPlugin) {
CMI -> BedrockPlayerSupport.cmiForm.sendWarpForm(player)
EssentialsX -> BedrockPlayerSupport.essxForm.sendWarpForm(player)
HuskHomes -> BedrockPlayerSupport.huskhomesForm.sendWarpForm(player)
AdvancedTeleport -> BedrockPlayerSupport.atForm.sendWarpForm(player)
SunLight -> BedrockPlayerSupport.sunlightForm.sendWarpForm(player)
None -> {
// Don't need to do anything
}
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package cc.dsnb.bedrockplayersupport.form.basic

import cc.dsnb.bedrockplayersupport.BedrockPlayerSupport
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
import org.bukkit.entity.Player
import org.geysermc.cumulus.form.SimpleForm
import su.nightexpress.sunlight.SunLightAPI
import su.nightexpress.sunlight.module.warps.WarpsModule

class SunLightForm {

fun sendDelHomeForm(player: Player) {
val slUser = SunLightAPI.PLUGIN.userManager.getUserData(player)
player.sendMessage(slUser.id)
val playerHomesList = SunLightAPI.PLUGIN.data.getHomes(slUser.id)
val form = SimpleForm.builder()
.title(
LegacyComponentSerializer.legacySection().serialize(
BedrockPlayerSupport.miniMessage.deserialize(
BedrockPlayerSupport.langConfigManager.getConfigData().delHomeFormTitle()
)
)
)
.validResultHandler { simpleFormResponse ->
player.chat("/delhome ${simpleFormResponse.clickedButton().text()}")
}
playerHomesList.forEach { form.button(it.id) }
BedrockPlayerSupport.floodgateApi.sendForm(player.uniqueId, form)
}

fun sendGoHomeForm(player: Player) {
val slUser = SunLightAPI.PLUGIN.userManager.getUserData(player)
val playerHomesList = SunLightAPI.PLUGIN.data.getHomes(slUser.id)
val form = SimpleForm.builder()
.title(
LegacyComponentSerializer.legacySection().serialize(
BedrockPlayerSupport.miniMessage.deserialize(
BedrockPlayerSupport.langConfigManager.getConfigData().goHomeFormTitle()
)
)
)
.validResultHandler { simpleFormResponse ->
player.chat("/home ${simpleFormResponse.clickedButton().text()}")
}
playerHomesList.forEach { form.button(it.id) }
BedrockPlayerSupport.floodgateApi.sendForm(player.uniqueId, form)
}

fun sendWarpForm(player: Player) {
val warps = SunLightAPI.PLUGIN.moduleManager.getModule(WarpsModule::class.java).let {
if (it.isPresent) {
it.get().warps
} else {
if ("zh_cn".equals(BedrockPlayerSupport.languageInUse, ignoreCase = true)) {
throw NullPointerException("在加载传送点模块时遇到错误, 请联系 BedrockPlayerSupport 插件作者")
} else {
throw NullPointerException("An error was encountered while loading the warp module, please contact BedrockPlayerSupport plguin author")
}
}
}
val form = SimpleForm.builder()
.title(
LegacyComponentSerializer.legacySection().serialize(
BedrockPlayerSupport.miniMessage.deserialize(
BedrockPlayerSupport.langConfigManager.getConfigData().warpFormTitle()
)
)
)
.validResultHandler { simpleFormResponse ->
player.chat("/warp ${simpleFormResponse.clickedButton().text()}")
}
warps.forEach { form.button(it.id) }
BedrockPlayerSupport.floodgateApi.sendForm(player.uniqueId, form)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class MainTabCompleteListener : TabCompleter {
if (sender.hasPermission("bedrockplayersupport.admin")) {
return when (strings.size) {
1 -> listOf("status", "reload")
else -> return null
else -> null
}
}
return null
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package cc.dsnb.bedrockplayersupport.listener.basic

import cc.dsnb.bedrockplayersupport.BedrockPlayerSupport
import cc.dsnb.bedrockplayersupport.TeleportType
import org.bukkit.Bukkit
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
import su.nightexpress.sunlight.api.event.PlayerTeleportRequestEvent
import su.nightexpress.sunlight.module.ptp.Mode

class SunLightListener : Listener {

@EventHandler
fun onPlayerTeleportRequest(event: PlayerTeleportRequestEvent) {
val requestMode = event.request.mode
val requester = Bukkit.getPlayer(event.request.senderInfo.id)
val receiver = Bukkit.getPlayer(event.request.targetInfo.id)
if (requester != null && receiver != null) {
val receiverUUID = receiver.uniqueId
if (BedrockPlayerSupport.floodgateApi.isFloodgatePlayer(receiverUUID)) {
if (requestMode == Mode.REQUEST) {
BedrockPlayerSupport.mainForm.openBedrockReceiveTeleportForm(
TeleportType.Tpa,
requester,
receiver
)
} else if (requestMode == Mode.INVITE) {
BedrockPlayerSupport.mainForm.openBedrockReceiveTeleportForm(
TeleportType.TpaHere,
requester,
receiver
)
}
}
}
}

}

0 comments on commit 632f0c5

Please sign in to comment.