Archived
0
This commit is contained in:
Dico
2018-09-26 12:38:55 +01:00
parent c6c1bbf670
commit ed3c85951a
5 changed files with 190 additions and 113 deletions

View File

@@ -1,9 +1,6 @@
package io.dico.parcels2.command
import io.dico.dicore.command.Command
import io.dico.dicore.command.CommandException
import io.dico.dicore.command.ExecutionContext
import io.dico.dicore.command.IContextFilter
import io.dico.dicore.command.*
import io.dico.dicore.command.parameter.type.ParameterTypes
import io.dico.parcels2.Interactables
import io.dico.parcels2.ParcelProvider
@@ -14,17 +11,38 @@ import org.bukkit.entity.Player
class ParcelOptionsInteractCommand(val parcelProvider: ParcelProvider) : Command() {
init {
setShortDescription("View and/or change the setting")
setDescription(shortDescription)
addContextFilter(IContextFilter.PLAYER_ONLY)
addContextFilter(IContextFilter.INHERIT_PERMISSIONS)
addParameter("allowed", "allowed", ParameterTypes.BOOLEAN)
addParameter("allowed", "new setting", ParameterTypes.BOOLEAN)
requiredParameters(0)
}
override fun execute(sender: CommandSender, context: ExecutionContext): String? {
val parcel = parcelProvider.getParcelRequired(sender as Player, Privilege.CAN_MANAGE)
val interactableClassName = context.address.mainKey
val allowed: Boolean = context.get("allowed")
val change = parcel.interactableConfig.setInteractable(Interactables[interactableClassName], allowed)
val interactableClass = Interactables[context.address.mainKey]
val allowed: Boolean? = context.get("allowed")
val parcel = 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.chatController.getChatFormatForType(EMessageType.BAD_NEWS)
val cannotColor = context.address.chatController.getChatFormatForType(EMessageType.GOOD_NEWS)
val resetColor = context.address.chatController.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")