diff --git a/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java b/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java index fc2b6af2..d83a804f 100644 --- a/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java +++ b/src/main/java/net/citizensnpcs/api/ai/goals/WanderGoal.java @@ -4,6 +4,7 @@ import org.bukkit.Location; import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; @@ -35,8 +36,9 @@ private Location findRandomPosition() { int x = base.getBlockX() + random.nextInt(2 * xrange) - xrange; int y = base.getBlockY() + random.nextInt(2 * yrange) - yrange; int z = base.getBlockZ() + random.nextInt(2 * xrange) - xrange; - Block block = base.getWorld().getBlockAt(x, y - 2, z); - if (MinecraftBlockExaminer.canStandOn(block)) { + Block block = base.getWorld().getBlockAt(x, y, z); + if (MinecraftBlockExaminer.canStandOn(block) + && MinecraftBlockExaminer.canStandIn(block.getRelative(BlockFace.UP).getType())) { found = block.getLocation().add(0, 1, 0); break; } diff --git a/src/main/java/net/citizensnpcs/api/util/ItemStorage.java b/src/main/java/net/citizensnpcs/api/util/ItemStorage.java index 7ab274a9..297528ef 100644 --- a/src/main/java/net/citizensnpcs/api/util/ItemStorage.java +++ b/src/main/java/net/citizensnpcs/api/util/ItemStorage.java @@ -39,7 +39,9 @@ public class ItemStorage { private static void deserialiseBanner(DataKey root, Banner meta) { - meta.setBaseColor(DyeColor.valueOf(root.getString("banner.basecolor"))); + if (root.keyExists("banner.basecolor")) { + meta.setBaseColor(DyeColor.valueOf(root.getString("banner.basecolor"))); + } if (root.keyExists("banner.patterns")) { for (DataKey sub : root.getRelative("banner.patterns").getIntegerSubKeys()) { Pattern pattern = new Pattern(DyeColor.valueOf(sub.getString("color")), @@ -160,7 +162,9 @@ private static void deserialiseMeta(DataKey root, ItemStack res) { if (root.keyExists("banner")) { BannerMeta meta = ensureMeta(res); - meta.setBaseColor(DyeColor.valueOf(root.getString("banner.basecolor"))); + if (root.keyExists("banner.basecolor")) { + meta.setBaseColor(DyeColor.valueOf(root.getString("banner.basecolor"))); + } if (root.keyExists("banner.patterns")) { for (DataKey sub : root.getRelative("banner.patterns").getIntegerSubKeys()) { Pattern pattern = new Pattern(DyeColor.valueOf(sub.getString("color")), @@ -250,7 +254,11 @@ public static void saveItem(DataKey key, ItemStack item) { } private static void serialiseBanner(DataKey root, Banner banner) { - root.setString("basecolor", banner.getBaseColor().name()); + if (banner.getBaseColor() != null) { + root.setString("basecolor", banner.getBaseColor().name()); + } else { + root.removeKey("basecolor"); + } List patterns = banner.getPatterns(); root.removeKey("patterns"); for (int i = 0; i < patterns.size(); i++) { @@ -407,7 +415,11 @@ private static void serialiseMeta(DataKey key, ItemMeta meta) { if (meta instanceof BannerMeta) { BannerMeta banner = (BannerMeta) meta; DataKey root = key.getRelative("banner"); - root.setString("basecolor", banner.getBaseColor().name()); + if (banner.getBaseColor() != null) { + root.setString("basecolor", banner.getBaseColor().name()); + } else { + root.removeKey("basecolor"); + } List patterns = banner.getPatterns(); root.removeKey("patterns"); for (int i = 0; i < patterns.size(); i++) {