1 | package sh.okx.rankup.requirements.requirement.mcmmo; | |
2 | ||
3 | import com.gmail.nossr50.datatypes.player.McMMOPlayer; | |
4 | import com.gmail.nossr50.util.player.UserManager; | |
5 | import java.lang.reflect.InvocationTargetException; | |
6 | import java.lang.reflect.Method; | |
7 | import org.bukkit.entity.Player; | |
8 | ||
9 | /** | |
10 | * Because mcMMO like changing the name of their skill types. | |
11 | * Singleton class to access different mcMMO versions. | |
12 | */ | |
13 | public class McMMOSkillUtil { | |
14 | private static McMMOSkillUtil instance; | |
15 | ||
16 | private Class<?> skillTypeClass; | |
17 | private Method values; | |
18 | private Method valueOf; | |
19 | //private Class<?> userManagerClass; | |
20 | private Method getSkillLevel; | |
21 | ||
22 | private McMMOSkillUtil() { | |
23 | final String pckg = "com.gmail.nossr50.datatypes.skills."; | |
24 | try { | |
25 | skillTypeClass = Class.forName(pckg + "PrimarySkillType"); | |
26 | } catch (ClassNotFoundException e0) { | |
27 | try { | |
28 | skillTypeClass = Class.forName(pckg + "PrimarySkill"); | |
29 | } catch (ClassNotFoundException e1) { | |
30 | try { | |
31 | skillTypeClass = Class.forName(pckg + "SkillType"); | |
32 | } catch (ClassNotFoundException e2) { | |
33 | throw new UnsupportedOperationException("mcMMO Skill Type class not found"); | |
34 | } | |
35 | } | |
36 | } | |
37 | try { | |
38 | values = skillTypeClass.getMethod("values"); | |
39 | } catch (NoSuchMethodException e) { | |
40 | throw new UnsupportedOperationException("mcMMO " + skillTypeClass + ".values() not found"); | |
41 | } | |
42 | try { | |
43 | valueOf = skillTypeClass.getMethod("valueOf", String.class); | |
44 | } catch (NoSuchMethodException e) { | |
45 | throw new UnsupportedOperationException("mcMMO" + skillTypeClass + ".valueOf(String) not found"); | |
46 | } | |
47 | ||
48 | /*try { | |
49 | userManagerClass = Class.forName("com.gmail.nossr50.util.player.UserManager"); | |
50 | } catch (ClassNotFoundException e) { | |
51 | throw new RuntimeException("mcMMO UserManager class not found"); | |
52 | }*/ | |
53 | ||
54 | try { | |
55 | getSkillLevel = McMMOPlayer.class.getMethod("getSkillLevel", skillTypeClass); | |
56 | } catch (NoSuchMethodException e) { | |
57 | throw new UnsupportedOperationException("mcMMO UserManager.getSkillLevel(" + skillTypeClass + ") not found"); | |
58 | } | |
59 | } | |
60 | ||
61 | public static McMMOSkillUtil getInstance() { | |
62 |
1
1. getInstance : negated conditional → NO_COVERAGE |
if (instance == null) { |
63 | instance = new McMMOSkillUtil(); | |
64 | } | |
65 |
1
1. getInstance : replaced return value with null for sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil::getInstance → NO_COVERAGE |
return instance; |
66 | } | |
67 | ||
68 | /*public String[] getSkills() { | |
69 | try { | |
70 | Enum<?>[] skills = (Enum<?>[]) values.invoke(null); | |
71 | String[] stringSkills = new String[skills.length]; | |
72 | for (int i = 0; i < skills.length; i++) { | |
73 | stringSkills[i] = skills[i].name(); | |
74 | } | |
75 | return stringSkills; | |
76 | } catch (IllegalAccessException | InvocationTargetException e) { | |
77 | throw new RuntimeException(e); | |
78 | } | |
79 | }*/ | |
80 | ||
81 | public int getSkillLevel(Player player, String skill) { | |
82 | McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); | |
83 | try { | |
84 | Object skillType = skillTypeClass.cast(valueOf.invoke(null, skill.toUpperCase())); | |
85 |
1
1. getSkillLevel : replaced int return with 0 for sh/okx/rankup/requirements/requirement/mcmmo/McMMOSkillUtil::getSkillLevel → NO_COVERAGE |
return (int) getSkillLevel.invoke(mcMMOPlayer, skillType); |
86 | } catch (IllegalAccessException | InvocationTargetException e) { | |
87 | throw new RuntimeException(e); | |
88 | } | |
89 | } | |
90 | } | |
Mutations | ||
62 |
1.1 |
|
65 |
1.1 |
|
85 |
1.1 |