blob: fbe4333e0dd0c93d10558684f617ceed971e1c64 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
package io.dico.parcels2.command
import io.dico.dicore.command.*
import io.dico.dicore.command.parameter.type.ParameterTypes
import io.dico.parcels2.Interactables
import io.dico.parcels2.ParcelsPlugin
import io.dico.parcels2.Privilege
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
class ParcelOptionsInteractCommand(val plugin: ParcelsPlugin) : Command() {
init {
setShortDescription("View and/or change the setting")
setDescription(shortDescription)
addContextFilter(IContextFilter.PLAYER_ONLY)
addContextFilter(IContextFilter.INHERIT_PERMISSIONS)
addParameter("allowed", "new setting", ParameterTypes.BOOLEAN)
requiredParameters(0)
}
override fun execute(sender: CommandSender, context: ExecutionContext): String? {
if (!plugin.storage.isConnected) err("Parcels cannot have their options changed right now because of a database error")
val interactableClass = Interactables[context.address.mainKey]
val allowed: Boolean? = context.get("allowed")
val parcel = plugin.parcelProvider.getParcelRequired(sender as Player,
if (allowed == null) Privilege.DEFAULT else Privilege.CAN_MANAGE)
if (allowed == null) {
val setting = parcel.interactableConfig.isInteractable(interactableClass)
val default = setting == interactableClass.interactableByDefault
val canColor = context.address.chatHandler.getChatFormatForType(EMessageType.BAD_NEWS)
val cannotColor = context.address.chatHandler.getChatFormatForType(EMessageType.GOOD_NEWS)
val resetColor = context.address.chatHandler.getChatFormatForType(EMessageType.RESULT)
val settingString = (if (setting) "${canColor}can" else "${cannotColor}cannot") + resetColor
val defaultString = if (default) " (default)" else ""
return "Players $settingString interact with ${interactableClass.name} on this parcel$defaultString"
}
val change = parcel.interactableConfig.setInteractable(interactableClass, allowed)
val interactableClassName = interactableClass.name
return when {
allowed && change -> "Other players can now interact with $interactableClassName"
allowed && !change -> err("Other players could already interact with $interactableClassName")
change -> "Other players can not interact with $interactableClassName anymore"
else -> err("Other players were not allowed to interact with $interactableClassName")
}
}
}
|