1616
1717package cz .neumimto .rpg .api .skills .types ;
1818
19+ import com .typesafe .config .Config ;
1920import cz .neumimto .rpg .api .entity .players .IActiveCharacter ;
21+ import cz .neumimto .rpg .api .permissions .PermissionService ;
2022import cz .neumimto .rpg .api .skills .PlayerSkillContext ;
23+ import cz .neumimto .rpg .api .skills .SkillData ;
2124import cz .neumimto .rpg .api .skills .SkillExecutionType ;
2225import cz .neumimto .rpg .api .skills .SkillResult ;
26+ import cz .neumimto .rpg .api .skills .tree .SkillTree ;
27+ import cz .neumimto .rpg .api .skills .utils .SkillLoadingErrors ;
28+
29+ import javax .inject .Inject ;
30+ import java .util .HashSet ;
31+ import java .util .List ;
32+ import java .util .Set ;
2333
2434public class PermissionSkill extends AbstractSkill <IActiveCharacter > {
2535
36+ @ Inject
37+ private PermissionService permissionService ;
38+
2639 @ Override
2740 public SkillResult onPreUse (IActiveCharacter character , PlayerSkillContext esi ) {
2841 return SkillResult .CANCELLED ;
@@ -36,16 +49,48 @@ public SkillExecutionType getSkillExecutionType() {
3649 @ Override
3750 public void skillLearn (IActiveCharacter IActiveCharacter , PlayerSkillContext context ) {
3851 super .skillLearn (IActiveCharacter , context );
52+ PermissionData permissionData = (PermissionData ) context .getSkillData ();
53+ if (permissionData .permissions != null ) {
54+ permissionService .addPermissions (IActiveCharacter , permissionData .permissions );
55+ }
3956 }
4057
4158 @ Override
42- public void skillUpgrade (IActiveCharacter IActiveCharacter , int level , PlayerSkillContext context ) {
43- super .skillUpgrade (IActiveCharacter , level , context );
59+ public void skillRefund (IActiveCharacter IActiveCharacter , PlayerSkillContext context ) {
60+ super .skillRefund (IActiveCharacter , context );
61+ PermissionData permissionData = (PermissionData ) context .getSkillData ();
62+ if (permissionData .permissions != null ) {
63+ permissionService .removePermissions (IActiveCharacter , permissionData .permissions );
64+ }
4465 }
4566
4667 @ Override
47- public void skillRefund (IActiveCharacter IActiveCharacter , PlayerSkillContext context ) {
48- super .skillRefund (IActiveCharacter , context );
68+ public <T extends SkillData > void loadSkillData (T skillData , SkillTree context , SkillLoadingErrors errors , Config c ) {
69+ PermissionData permissionData = (PermissionData ) skillData ;
70+ List <String > permissions = c .getStringList ("Permissions" );
71+ if (permissions != null ) {
72+ permissionData .permissions = new HashSet <>(permissions );
73+ }
4974 }
5075
76+ @ Override
77+ public SkillData constructSkillData () {
78+ return new PermissionData (getId ());
79+ }
80+
81+ public class PermissionData extends SkillData {
82+ private Set <String > permissions ;
83+
84+ public PermissionData (String skill ) {
85+ super (skill );
86+ }
87+
88+ public Set <String > getPermissions () {
89+ return permissions ;
90+ }
91+
92+ public void setPermissions (Set <String > permissions ) {
93+ this .permissions = permissions ;
94+ }
95+ }
5196}
0 commit comments