Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package dev.slne.surf.protect.paper.command.commands.protection

import com.github.shynixn.mccoroutine.folia.entityDispatcher
import com.github.shynixn.mccoroutine.folia.launch
import dev.jorel.commandapi.arguments.AsyncPlayerProfileArgument
import dev.jorel.commandapi.kotlindsl.commandAPICommand
import dev.jorel.commandapi.kotlindsl.optionalArgument
import dev.slne.surf.protect.paper.dialogs.ProtectionMainDialog
import dev.slne.surf.protect.paper.menu.view.ProtectionMainView
import dev.slne.surf.protect.paper.permission.ProtectPermissionRegistry
import dev.slne.surf.protect.paper.plugin
import dev.slne.surf.surfapi.bukkit.api.command.executors.playerExecutorSuspend
import dev.slne.surf.surfapi.bukkit.api.command.util.awaitAsyncPlayerProfileOptional
import dev.slne.surf.surfapi.bukkit.api.command.util.idOrThrow
import kotlinx.coroutines.future.await
import dev.slne.surf.surfapi.bukkit.api.inventory.framework.viewFrame
import kotlinx.coroutines.withContext
import org.bukkit.Bukkit

fun protectionCommand() = commandAPICommand("protect") {
Expand All @@ -20,8 +23,10 @@ fun protectionCommand() = commandAPICommand("protect") {
playerExecutorSuspend { sender, args ->
val player = args.awaitAsyncPlayerProfileOptional("player")

if(player == null) {
sender.showDialog(ProtectionMainDialog.mainDialog(sender, sender))
if (player == null) {
withContext(plugin.entityDispatcher(sender)) {
viewFrame.open(ProtectionMainView::class.java, sender)
}
return@playerExecutorSuspend
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@ import dev.slne.surf.protect.paper.region.visual.visualizer.ProtectionVisualizer
import dev.slne.surf.surfapi.bukkit.api.dialog.base
import dev.slne.surf.surfapi.bukkit.api.dialog.builder.actionButton
import dev.slne.surf.surfapi.bukkit.api.dialog.dialog
import dev.slne.surf.surfapi.bukkit.api.dialog.noticeDialogWithBuilder
import dev.slne.surf.surfapi.bukkit.api.dialog.type
import dev.slne.surf.surfapi.core.api.messages.Colors
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
import dev.slne.surf.surfapi.core.api.messages.adventure.text
import io.papermc.paper.dialog.Dialog
import io.papermc.paper.registry.data.dialog.DialogBase
Expand All @@ -35,9 +34,6 @@ object ProtectionMainDialog {
if (viewer.hasPermission(ProtectPermissionRegistry.PROTECTION_CREATE_PERMISSION)) {
action(createProtectionButton(target))
}
if (viewer.hasPermission(ProtectPermissionRegistry.PROTECTION_SETTINGS_PERMISSION)) {
action(protectionsSettingsButton(target))
}
}
}
}
Expand All @@ -56,36 +52,21 @@ object ProtectionMainDialog {
action {
playerCallback { viewer ->
val state = ProtectionVisualizerManager.switchVisualizing(viewer)
viewer.showDialog(visualizerStateChangedDialog(state))
viewer.sendText {
appendInfoPrefix()
info("Du hast die Visualisierung der Grundstücke ")
if (state) success("aktiviert") else error("deaktiviert")
info(". Bitte warte einen kleinen Moment, bis die Änderungen wirksam werden.")
}
}
}
}

private fun visualizerStateChangedDialog(newState: Boolean) = noticeDialogWithBuilder(
title = text("Protections — Visualizer", Colors.PRIMARY)
) {
info("Du hast die Visualisierung der Grundstücke ")
if (newState) {
success("aktiviert")
} else {
error("deaktiviert")
}
info(". Bitte warte einen kleinen Moment, bis die Änderungen wirksam werden.")
}

private fun createProtectionButton(target: OfflinePlayer) = actionButton {
label { text("Grundstück erstellen") }
tooltip { info("Erstelle ein neues Grundstück") }
action {
callback { it.showDialog(ProtectionCreateDialog.protectionCreateDialog(target)) }
}
}

private fun protectionsSettingsButton(target: OfflinePlayer) = actionButton {
label { text("Einstellungen") }
tooltip { info("Ändere die Einstellungen für Protection system") }
action {
playerCallback { it.showDialog(ProtectionSettingsDialog.settingsDialog(it, target)) }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
package dev.slne.surf.protect.paper.dialogs.sub

import com.github.shynixn.mccoroutine.folia.launch
import com.google.common.collect.ImmutableMap
import dev.slne.surf.protect.paper.menu.view.member.ProtectionMemberView
import dev.slne.surf.protect.paper.plugin
import dev.slne.surf.protect.paper.region.info.RegionInfo
import dev.slne.surf.protect.paper.region.visual.visualizer.ProtectionVisualizerManager
Expand All @@ -12,6 +14,8 @@ import dev.slne.surf.surfapi.bukkit.api.dialog.builder.actionButton
import dev.slne.surf.surfapi.bukkit.api.dialog.dialog
import dev.slne.surf.surfapi.bukkit.api.dialog.type
import dev.slne.surf.surfapi.bukkit.api.extensions.server
import dev.slne.surf.surfapi.bukkit.api.inventory.framework.viewFrame
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
import dev.slne.surf.surfapi.core.api.service.PlayerLookupService
import io.papermc.paper.registry.data.dialog.ActionButton
import io.papermc.paper.registry.data.dialog.DialogBase
Expand Down Expand Up @@ -52,13 +56,25 @@ object ProtectionAddMemberDialog {
customClick { response, viewer ->
val memberName = response.getText("member_name") ?: return@customClick
if (!namePattern.matches(memberName)) {
viewer.showDialog(createInvalidMemberNameNotice(target, info, memberName))
viewer.sendText {
appendErrorPrefix()
error("Der Name '")
variableValue(memberName)
error("' ist ungültig. Er muss zwischen 2 und 16 Zeichen lang sein und darf nur Buchstaben, Zahlen und Unterstriche enthalten.")
}
viewer.showDialog(addMemberDialog(target, info, memberName.trim()))
return@customClick
}
plugin.launch {
val validatedUuid = PlayerLookupService.getUuid(memberName)
if (validatedUuid == null) {
viewer.showDialog(createNoPlayerFoundNotice(target, info, memberName))
viewer.sendText {
appendErrorPrefix()
error("Der Spieler '")
variableValue(memberName)
error("' wurde nicht gefunden. Bitte überprüfe, dass der Name korrekt ist und versuche es erneut.")
}
viewer.showDialog(addMemberDialog(target, info, memberName.trim()))
return@launch
}
val offlinePlayer = server.getOfflinePlayer(validatedUuid)
Expand All @@ -67,134 +83,49 @@ object ProtectionAddMemberDialog {
}

if (!offlinePlayer.hasPlayedBefore()) {
viewer.showDialog(
createPlayerNotPlayedBeforeNotice(
target,
info,
memberName
)
)
viewer.sendText {
appendErrorPrefix()
error("Der Spieler '")
variableValue(memberName)
error("' hat noch nie auf diesem Server gespielt. Bitte füge den Spieler hinzu, nachdem er mindestens einmal online war.")
}
viewer.showDialog(addMemberDialog(target, info, memberName.trim()))
return@launch
}

val memberPlayer = memberName.toLocalPlayer()
info.region.members.addPlayer(memberPlayer)
ProtectionVisualizerManager.onRegionMemberChange(info.region)

viewer.showDialog(
createMemberAddedNotice(target, info, memberName)
)
}
}
}
}

private fun createInvalidMemberNameNotice(
target: OfflinePlayer,
info: RegionInfo,
input: String
) = dialog {
base {
title { text("Protection — Ungültiger Name") }
body {
plainMessage {
error("Der Name '")
variableValue(input)
error("' ist ungültig. Er muss zwischen 2 und 16 Zeichen lang sein und darf nur Buchstaben, Zahlen und Unterstriche enthalten.")
}
}
}
type {
notice {
label { text("Zurück") }
action {
callback {
it.showDialog(addMemberDialog(target, info, input.trim()))
}
}
}
}
}

private fun createNoPlayerFoundNotice(
target: OfflinePlayer,
info: RegionInfo,
input: String
) = dialog {
base {
title { text("Protection — Spieler nicht gefunden") }
body {
plainMessage {
error("Der Spieler '")
variableValue(input)
error("' wurde nicht gefunden. Bitte überprüfe, dass der Name korrekt ist und versuche es erneut.")
}
}
}
type {
notice {
label { text("Zurück") }
action {
callback {
it.showDialog(addMemberDialog(target, info, input.trim()))
}
}
}
}
}

private fun createPlayerNotPlayedBeforeNotice(
target: OfflinePlayer,
info: RegionInfo,
input: String
) = dialog {
base {
title { text("Protection — Spieler hat noch nicht gespielt") }
body {
plainMessage {
error("Der Spieler '")
variableValue(input)
error("' hat noch nie auf diesem Server gespielt. Bitte füge den Spieler hinzu, nachdem er mindestens einmal online war.")
}
}
}
type {
notice {
label { text("Zurück") }
action {
callback {
it.showDialog(addMemberDialog(target, info, input.trim()))
viewer.sendText {
appendSuccessPrefix()
success("Das Mitglied '")
variableValue(memberName)
success("' wurde erfolgreich zur Protection hinzugefügt.")
}
plugin.launch {
viewFrame.open(
ProtectionMemberView::class.java,
viewer,
ImmutableMap.of("region-info", info)
)
}
}
}
}
}
}

private fun createMemberAddedNotice(
target: OfflinePlayer,
info: RegionInfo,
memberName: String
) = dialog {
base {
title { text("Protection — Mitglied hinzugefügt") }
body {
plainMessage {
success("Das Mitglied '")
variableValue(memberName)
success("' wurde erfolgreich zur Protection hinzugefügt.")
}
}
}
type {
notice(backButton(info, target))
}
}

private fun backButton(info: RegionInfo, target: OfflinePlayer): ActionButton = actionButton {
label { text("Zurück") }
action {
callback {
it.showDialog(ProtectionMemberDialog.createProtectionMemberDialog(target, info))
playerCallback { player ->
plugin.launch {
viewFrame.open(
ProtectionMemberView::class.java,
player,
ImmutableMap.of("region-info", info)
)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,13 @@ import dev.slne.surf.protect.paper.plugin
import dev.slne.surf.protect.paper.region.ProtectionRegion
import dev.slne.surf.protect.paper.region.settings.ProtectionSettings
import dev.slne.surf.protect.paper.user.ProtectionUser
import dev.slne.surf.surfapi.bukkit.api.dialog.*
import dev.slne.surf.surfapi.bukkit.api.dialog.builder.actionButton
import dev.slne.surf.surfapi.core.api.messages.Colors
import dev.slne.surf.surfapi.bukkit.api.dialog.dialog
import dev.slne.surf.surfapi.core.api.messages.adventure.appendNewline
import dev.slne.surf.surfapi.core.api.messages.adventure.clickCopiesToClipboard
import dev.slne.surf.surfapi.core.api.messages.adventure.clickOpensUrl
import dev.slne.surf.surfapi.core.api.messages.adventure.sendText
import io.papermc.paper.event.player.PlayerCustomClickEvent
import io.papermc.paper.registry.data.dialog.DialogBase
import net.kyori.adventure.text.Component
import org.bukkit.OfflinePlayer

object ProtectionCreateDialog {
Expand Down Expand Up @@ -67,8 +65,9 @@ object ProtectionCreateDialog {
plugin.launch(plugin.entityDispatcher(player)) {
val user = ProtectionUser.getProtectionUser(player)
val regionCreation = ProtectionRegion(user, player, player.inventory.contents)
val success =
user.startRegionCreation(regionCreation) { createErrorNoticeDialog(it) }
val success = user.startRegionCreation(regionCreation) { message ->
player.sendText { appendErrorPrefix(); append(message) }
}
if (success) {
player.clearDialogs()
}
Expand All @@ -77,17 +76,6 @@ object ProtectionCreateDialog {
}
}

private fun createErrorNoticeDialog(message: Component) = noticeDialog {
base {
title { error("Protections — Fehler") }
body {
plainMessage(400) {
append(message.colorIfAbsent(Colors.ERROR))
}
}
}
}


private fun createBackButton(target: OfflinePlayer) = actionButton {
label { text("Zurück") }
Expand Down
Loading
Loading