diff --git a/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java b/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java index d41fcbca2..9c38f1966 100644 --- a/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java +++ b/main/src/main/java/net/citizensnpcs/npc/skin/Skin.java @@ -155,6 +155,12 @@ private void fetch() { } return; } + if (this.skinName.length() < 3) { + if (Messaging.isDebugging()) { + Messaging.debug("Skin name too short '" + skinName + "'"); + } + return; + } fetching = true; ProfileFetcher.fetch(this.skinName, new ProfileFetchHandler() { @@ -202,6 +208,12 @@ private void fetchForced() { } return; } + if (this.skinName.length() < 3) { + if (Messaging.isDebugging()) { + Messaging.debug("Skin name too short '" + skinName + "'"); + } + return; + } fetching = true; ProfileFetcher.fetchForced(this.skinName, new ProfileFetchHandler() { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index ed4401669..0bdfae146 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -517,11 +517,19 @@ public GameProfile getProfile(SkullMeta meta) { @Override public String getSound(String flag) throws CommandException { try { - String ret = CraftSound.getSound(Sound.valueOf(flag.toUpperCase())); - if (ret == null) - throw new CommandException(Messages.INVALID_SOUND); - return ret; - } catch (Exception e) { + if (CRAFTSOUND_GETSOUND != null) { + String ret = (String) CRAFTSOUND_GETSOUND.invoke(CraftSound.class, Sound.valueOf(flag.toUpperCase())); + if (ret == null) + throw new CommandException(Messages.INVALID_SOUND); + return ret; + } else { + SoundEffect effect = CraftSound.getSoundEffect(Sound.valueOf(flag.toUpperCase())); + if (effect == null) + throw new CommandException(Messages.INVALID_SOUND); + MinecraftKey key = (MinecraftKey) SOUNDEFFECT_KEY.invoke(effect); + return key.getKey(); + } + } catch (Throwable e) { throw new CommandException(Messages.INVALID_SOUND); } } @@ -1849,14 +1857,18 @@ public static void updateNavigation(NavigationAbstract navigation) { private static final MethodHandle ADVANCEMENT_PLAYER_FIELD = NMS.getFinalSetter(EntityPlayer.class, "advancementDataPlayer"); + private static final Set BAD_CONTROLLER_LOOK = EnumSet.of(EntityType.POLAR_BEAR, EntityType.BEE, EntityType.SILVERFISH, EntityType.SHULKER, EntityType.ENDERMITE, EntityType.ENDER_DRAGON, EntityType.BAT, EntityType.SLIME, EntityType.DOLPHIN, EntityType.MAGMA_CUBE, EntityType.HORSE, EntityType.GHAST, EntityType.SHULKER, EntityType.PHANTOM); + private static final MethodHandle BEHAVIOR_MAP = NMS.getGetter(BehaviorController.class, "e"); private static final MethodHandle BUKKITENTITY_FIELD_SETTER = NMS.getSetter(Entity.class, "bukkitEntity"); private static final Map, EntityTypes> CITIZENS_ENTITY_TYPES = Maps.newHashMap(); private static final MethodHandle CRAFT_BOSSBAR_HANDLE_FIELD = NMS.getSetter(CraftBossBar.class, "handle"); + private static MethodHandle CRAFTSOUND_GETSOUND = NMS.getMethodHandle(CraftSound.class, "getSound", false, + Sound.class); private static final float DEFAULT_SPEED = 1F; private static final MethodHandle ENDERDRAGON_BATTLE_FIELD = NMS.getGetter(EntityEnderDragon.class, "bF"); private static DataWatcherObject ENDERMAN_ANGRY = null; @@ -1890,6 +1902,7 @@ public static void updateNavigation(NavigationAbstract navigation) { private static final MethodHandle SIZE_FIELD_GETTER = NMS.getGetter(Entity.class, "size"); private static final MethodHandle SIZE_FIELD_SETTER = NMS.getSetter(Entity.class, "size"); private static Field SKULL_PROFILE_FIELD; + private static MethodHandle SOUNDEFFECT_KEY = NMS.getGetter(SoundEffect.class, "b"); private static MethodHandle TEAM_FIELD; static {