From e2cc0f3f03019edba99e285c2b29e476e200feb6 Mon Sep 17 00:00:00 2001 From: AppleDash Date: Mon, 4 Nov 2019 04:49:41 -0500 Subject: [PATCH] Make async transactions not crash the server --- .../saneeconomy/economy/EconomyManager.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java index d7fd94b..8fba8e9 100644 --- a/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java +++ b/SaneEconomyCore/src/main/java/org/appledash/saneeconomy/economy/EconomyManager.java @@ -17,8 +17,7 @@ import java.math.BigDecimal; import java.util.LinkedHashMap; import java.util.Map; import java.util.UUID; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; +import java.util.concurrent.*; /** * Created by AppleDash on 6/13/2016. @@ -144,17 +143,25 @@ public class EconomyManager { if (Bukkit.getServer().getPluginManager() != null) { // Bukkit.getServer().getPluginManager() == null from our JUnit tests. SaneEconomyTransactionEvent evt = new SaneEconomyTransactionEvent(transaction); - Future future = Bukkit.getServer().getScheduler().callSyncMethod(SaneEconomy.getInstance(), () -> { + if (Bukkit.isPrimaryThread()) { Bukkit.getServer().getPluginManager().callEvent(evt); - return evt; - }); - try { - if (future.get().isCancelled()) { + if (evt.isCancelled()) { return new TransactionResult(transaction, TransactionResult.Status.CANCELLED_BY_PLUGIN); } - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); + } else { + Future future = Bukkit.getServer().getScheduler().callSyncMethod(SaneEconomy.getInstance(), () -> { + Bukkit.getServer().getPluginManager().callEvent(evt); + return evt; + }); + + try { + if (future.get().isCancelled()) { + return new TransactionResult(transaction, TransactionResult.Status.CANCELLED_BY_PLUGIN); + } + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } } /*