From 287dcba37a74dce59020ca7ac2aba3669ae6cf8b Mon Sep 17 00:00:00 2001 From: David Kirchner Date: Fri, 6 Oct 2017 23:54:56 -0700 Subject: [PATCH] Don't consume XP until we are about to unlock the requested research. Fixes TheBusyBiscuit/Slimefun4#195. --- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 106 +++++++++--------- 1 file changed, 55 insertions(+), 51 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 6bd8c048c..c7d1886e6 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -672,34 +672,37 @@ public class SlimefunGuide { @Override public void run(final Player p) { - if (research.canUnlock(p)) { - p.setLevel(p.getLevel() - research.getCost()); - - if (research.hasUnlocked(p)) openCategory(p, category, true, selected_page, experimental); - else if (!Research.isResearching(p)) { - if (p.getGameMode() == GameMode.CREATIVE) { - research.unlock(p, true); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - - @Override - public void run() { - openCategory(p, category, survival, selected_page, experimental); - } - }, 1L); - } - else { - research.unlock(p, false); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - - @Override - public void run() { - openCategory(p, category, survival, selected_page, experimental); - } - }, 103L); - } - } - } - else Messages.local.sendTranslation(p, "messages.not-enough-xp", true); + if (!Research.isResearching(p)) { + if (research.canUnlock(p)) { + if (research.hasUnlocked(p)) + openCategory(p, category, true, selected_page, experimental); + else { + if (!(p.getGameMode() == GameMode.CREATIVE && Research.creative_research)) { + p.setLevel(p.getLevel() - research.getCost()); + } + + if (p.getGameMode() == GameMode.CREATIVE) { + research.unlock(p, true); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + + @Override + public void run() { + openCategory(p, category, survival, selected_page, experimental); + } + }, 1L); + } else { + research.unlock(p, false); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + + @Override + public void run() { + openCategory(p, category, survival, selected_page, experimental); + } + }, 103L); + } + } + } else Messages.local.sendTranslation(p, "messages.not-enough-xp", true); + } } }); } @@ -859,30 +862,31 @@ public class SlimefunGuide { @Override public boolean onClick(final Player p, int slot, ItemStack item, ClickAction action) { - if (research.canUnlock(p)) { - if (!(p.getGameMode() == GameMode.CREATIVE && Research.creative_research)) { - p.setLevel(p.getLevel() - research.getCost()); - } - - if (research.hasUnlocked(p)) openCategory(p, category, true, selected_page, experimental); - else if (!Research.isResearching(p)) { - if (p.getGameMode() == GameMode.CREATIVE) { - research.unlock(p, Research.creative_research); - openCategory(p, category, survival, selected_page, experimental); - } - else { - research.unlock(p, false); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - - @Override - public void run() { - openCategory(p, category, survival, selected_page, experimental); - } - }, 103L); - } - } + if (!Research.isResearching(p)) { + if (research.canUnlock(p)) { + if (research.hasUnlocked(p)) + openCategory(p, category, true, selected_page, experimental); + else { + if (!(p.getGameMode() == GameMode.CREATIVE && Research.creative_research)) { + p.setLevel(p.getLevel() - research.getCost()); + } + + if (p.getGameMode() == GameMode.CREATIVE) { + research.unlock(p, Research.creative_research); + openCategory(p, category, survival, selected_page, experimental); + } else { + research.unlock(p, false); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + + @Override + public void run() { + openCategory(p, category, survival, selected_page, experimental); + } + }, 103L); + } + } + } else Messages.local.sendTranslation(p, "messages.not-enough-xp", true); } - else Messages.local.sendTranslation(p, "messages.not-enough-xp", true); return false; } });