2018-01-04 10:36:51 +01:00
package com.massivecraft.factions.cmd ;
2019-09-14 21:13:01 +02:00
import com.massivecraft.factions.FactionsPlugin ;
import com.massivecraft.factions.struct.Permission ;
2018-01-04 10:36:51 +01:00
import com.massivecraft.factions.struct.Relation ;
2018-02-06 04:46:53 +01:00
import com.massivecraft.factions.struct.Role ;
2018-01-04 10:36:51 +01:00
import com.massivecraft.factions.zcore.fperms.Access ;
2018-02-12 02:38:04 +01:00
import com.massivecraft.factions.zcore.fperms.Permissable ;
2018-02-03 21:49:04 +01:00
import com.massivecraft.factions.zcore.fperms.PermissableAction ;
2019-08-05 14:05:22 +02:00
import com.massivecraft.factions.zcore.fperms.gui.PermissableActionFrame ;
import com.massivecraft.factions.zcore.fperms.gui.PermissableRelationFrame ;
2018-01-04 10:36:51 +01:00
import com.massivecraft.factions.zcore.util.TL ;
2018-03-02 22:57:36 +01:00
import java.util.Arrays ;
import java.util.HashSet ;
import java.util.Set ;
2018-01-05 08:16:24 +01:00
2018-01-04 10:36:51 +01:00
public class CmdPerm extends FCommand {
2019-09-15 11:14:14 +02:00
public CmdPerm ( ) {
super ( ) ;
this . aliases . add ( " perm " ) ;
this . aliases . add ( " perms " ) ;
this . aliases . add ( " permission " ) ;
this . aliases . add ( " permissions " ) ;
this . optionalArgs . put ( " relation " , " relation " ) ;
this . optionalArgs . put ( " action " , " action " ) ;
this . optionalArgs . put ( " access " , " access " ) ;
this . requirements = new CommandRequirements . Builder ( Permission . PERMISSIONS )
. playerOnly ( )
. memberOnly ( )
. withRole ( Role . LEADER )
. build ( ) ;
}
@Override
public void perform ( CommandContext context ) {
if ( context . args . size ( ) = = 0 ) {
new PermissableRelationFrame ( context . faction ) . buildGUI ( context . fPlayer ) ;
return ;
} else if ( context . args . size ( ) = = 1 & & getPermissable ( context . argAsString ( 0 ) ) ! = null ) {
new PermissableActionFrame ( context . faction ) . buildGUI ( context . fPlayer , getPermissable ( context . argAsString ( 0 ) ) ) ;
return ;
}
// If not opening GUI, then setting the permission manually.
if ( context . args . size ( ) ! = 3 ) {
context . msg ( TL . COMMAND_PERM_DESCRIPTION ) ;
return ;
}
Set < Permissable > permissables = new HashSet < > ( ) ;
Set < PermissableAction > permissableActions = new HashSet < > ( ) ;
boolean allRelations = context . argAsString ( 0 ) . equalsIgnoreCase ( " all " ) ;
boolean allActions = context . argAsString ( 1 ) . equalsIgnoreCase ( " all " ) ;
if ( allRelations ) {
permissables . addAll ( context . faction . getPermissions ( ) . keySet ( ) ) ;
} else {
Permissable permissable = getPermissable ( context . argAsString ( 0 ) ) ;
if ( permissable = = null ) {
context . msg ( TL . COMMAND_PERM_INVALID_RELATION ) ;
return ;
}
permissables . add ( permissable ) ;
}
if ( allActions ) {
permissableActions . addAll ( Arrays . asList ( PermissableAction . values ( ) ) ) ;
} else {
PermissableAction permissableAction = PermissableAction . fromString ( context . argAsString ( 1 ) ) ;
if ( permissableAction = = null ) {
context . msg ( TL . COMMAND_PERM_INVALID_ACTION ) ;
return ;
}
permissableActions . add ( permissableAction ) ;
}
Access access = Access . fromString ( context . argAsString ( 2 ) ) ;
if ( access = = null ) {
context . msg ( TL . COMMAND_PERM_INVALID_ACCESS ) ;
return ;
}
for ( Permissable permissable : permissables ) {
for ( PermissableAction permissableAction : permissableActions ) {
context . faction . setPermission ( permissable , permissableAction , access ) ;
}
}
context . msg ( TL . COMMAND_PERM_SET , context . argAsString ( 1 ) , access . name ( ) , context . argAsString ( 0 ) ) ;
FactionsPlugin . getInstance ( ) . log ( String . format ( TL . COMMAND_PERM_SET . toString ( ) , context . argAsString ( 1 ) , access . name ( ) , context . argAsString ( 0 ) ) + " for faction " + context . fPlayer . getTag ( ) ) ;
}
private Permissable getPermissable ( String name ) {
if ( Role . fromString ( name . toUpperCase ( ) ) ! = null ) {
return Role . fromString ( name . toUpperCase ( ) ) ;
} else if ( Relation . fromString ( name . toUpperCase ( ) ) ! = null ) {
return Relation . fromString ( name . toUpperCase ( ) ) ;
} else {
return null ;
}
}
@Override
public TL getUsageTranslation ( ) {
return TL . COMMAND_PERM_DESCRIPTION ;
}
2018-01-04 10:36:51 +01:00
2018-03-26 23:43:15 +02:00
}