From ce392bddc3d4afc780ac8deb0176f509ea8bf75e Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Sat, 12 May 2018 12:11:12 +0200 Subject: [PATCH] Don't depend directly on Vault in MoneyThingParser. It turns out that the method reference on MobArena#getEconomy() in ThingManager is a tight enough dependency on Vault's Economy interface that it results in a NoClassDefFoundError if Vault isn't present. By resorting to a more "naive" approach of resolving the Economy instance from the main plugin class on every parse call in MoneyThingParser, the NoClassDefFoundError is avoided along with the load/enable ordering issue that was fixed with the lazy-fetching in commit 2fcb20b2aee838435ff59f3aa9ee7713b2b2963d. This reverts 2fcb20b2aee838435ff59f3aa9ee7713b2b2963d and partly 4c34a183c7c64120584874b31a5b710349862fd3. Fixes #463 --- .../MobArena/things/MoneyThingParser.java | 12 +++++------- .../garbagemule/MobArena/things/ThingManager.java | 2 +- .../MobArena/things/MoneyThingParserTest.java | 7 ++++++- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/garbagemule/MobArena/things/MoneyThingParser.java b/src/main/java/com/garbagemule/MobArena/things/MoneyThingParser.java index f45bec6..12563a0 100644 --- a/src/main/java/com/garbagemule/MobArena/things/MoneyThingParser.java +++ b/src/main/java/com/garbagemule/MobArena/things/MoneyThingParser.java @@ -1,17 +1,15 @@ package com.garbagemule.MobArena.things; -import net.milkbowl.vault.economy.Economy; - -import java.util.function.Supplier; +import com.garbagemule.MobArena.MobArena; class MoneyThingParser implements ThingParser { private static final String PREFIX_LONG = "money:"; private static final String PREFIX_SHORT = "$"; - private Supplier economy; + private MobArena plugin; - MoneyThingParser(Supplier economy) { - this.economy = economy; + MoneyThingParser(MobArena plugin) { + this.plugin = plugin; } @Override @@ -20,7 +18,7 @@ class MoneyThingParser implements ThingParser { if (money == null) { return null; } - return new MoneyThing(economy.get(), Double.parseDouble(money)); + return new MoneyThing(plugin.getEconomy(), Double.parseDouble(money)); } private String trimPrefix(String s) { diff --git a/src/main/java/com/garbagemule/MobArena/things/ThingManager.java b/src/main/java/com/garbagemule/MobArena/things/ThingManager.java index 66985a4..4dc72df 100644 --- a/src/main/java/com/garbagemule/MobArena/things/ThingManager.java +++ b/src/main/java/com/garbagemule/MobArena/things/ThingManager.java @@ -12,7 +12,7 @@ public class ThingManager implements ThingParser { public ThingManager(MobArena plugin, ItemStackThingParser parser) { parsers = new ArrayList<>(); parsers.add(new CommandThingParser()); - parsers.add(new MoneyThingParser(plugin::getEconomy)); + parsers.add(new MoneyThingParser(plugin)); items = parser; } diff --git a/src/test/java/com/garbagemule/MobArena/things/MoneyThingParserTest.java b/src/test/java/com/garbagemule/MobArena/things/MoneyThingParserTest.java index b268a85..0635d40 100644 --- a/src/test/java/com/garbagemule/MobArena/things/MoneyThingParserTest.java +++ b/src/test/java/com/garbagemule/MobArena/things/MoneyThingParserTest.java @@ -5,7 +5,9 @@ import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import com.garbagemule.MobArena.MobArena; import net.milkbowl.vault.economy.Economy; import org.junit.Before; import org.junit.Rule; @@ -21,8 +23,11 @@ public class MoneyThingParserTest { @Before public void setup() { + MobArena plugin = mock(MobArena.class); Economy economy = mock(Economy.class); - subject = new MoneyThingParser(() -> economy); + when(plugin.getEconomy()).thenReturn(economy); + + subject = new MoneyThingParser(plugin); } @Test