Prefer storing the methods instead of getting them every time
This commit is contained in:
		| @@ -133,6 +133,8 @@ public enum DisguiseType { | ||||
|  | ||||
|     ZOMBIE_VILLAGER; | ||||
|  | ||||
|     private static Method isVillager, getVariant, getSkeletonType; | ||||
|  | ||||
|     static { | ||||
|         // We set the entity type in this so that we can safely ignore disguisetypes which don't exist in older versions of MC. | ||||
|         // Without erroring up everything. | ||||
| @@ -167,6 +169,20 @@ public enum DisguiseType { | ||||
|                 // This version of craftbukkit doesn't have the disguise. | ||||
|             } | ||||
|         } | ||||
|         try { | ||||
|             isVillager = org.bukkit.entity.Zombie.class.getMethod("isVillager"); | ||||
|         } catch (Throwable ignored) { | ||||
|             // This version doesn't have villagers | ||||
|         } | ||||
|         try { | ||||
|             getVariant = org.bukkit.entity.Horse.class.getMethod("getVariant"); | ||||
|         } catch (Throwable ignored) { | ||||
|             // This version doesn't have horses | ||||
|         } | ||||
|         try { | ||||
|             getSkeletonType = org.bukkit.entity.Skeleton.class.getMethod("getSkeletonType"); | ||||
|         } catch (Throwable ignored) { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static DisguiseType getType(Entity entity) { | ||||
| @@ -174,18 +190,16 @@ public enum DisguiseType { | ||||
|         switch (disguiseType) { | ||||
|         case ZOMBIE: | ||||
|             try { | ||||
|                 Method isVillager = entity.getClass().getMethod("isVillager"); | ||||
|                 if ((Boolean) isVillager.invoke(entity)) { | ||||
|                     disguiseType = DisguiseType.ZOMBIE_VILLAGER; | ||||
|                 } | ||||
|             } catch (NoSuchMethodException ex) { | ||||
|             } catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
|             } | ||||
|             break; | ||||
|         case HORSE: | ||||
|             try { | ||||
|                 Object variant = entity.getClass().getMethod("getVariant").invoke(entity); | ||||
|                 Object variant = getVariant.invoke(entity); | ||||
|                 disguiseType = DisguiseType.valueOf(((Enum) variant).name()); | ||||
|             } catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
| @@ -193,11 +207,10 @@ public enum DisguiseType { | ||||
|             break; | ||||
|         case SKELETON: | ||||
|             try { | ||||
|                 Object type = entity.getClass().getMethod("getSkeletonType").invoke(entity); | ||||
|                 if (((Enum) type).name().equals("WITHER")) { | ||||
|                 Object type = getSkeletonType.invoke(entity); | ||||
|                 if (type == org.bukkit.entity.Skeleton.SkeletonType.WITHER) { | ||||
|                     disguiseType = DisguiseType.WITHER_SKELETON; | ||||
|                 } | ||||
|             } catch (NoSuchMethodException ex) { | ||||
|             } catch (Exception ex) { | ||||
|                 ex.printStackTrace(); | ||||
|             } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user