Lazy load Economy reference in MoneyThingParser.

The eager loading results in nothing but nulls because ThingManager (and, by proxy, MoneyThingParser) is instantiated on load, while the Economy provider from Vault is fetched on enable.

The bug was introduced with 4c34a183c7.

This fixes #451
This commit is contained in:
Andreas Troelsen 2018-05-04 03:16:19 +02:00
parent 8013be1724
commit 2fcb20b2ae
3 changed files with 7 additions and 5 deletions

View File

@ -2,13 +2,15 @@ package com.garbagemule.MobArena.things;
import net.milkbowl.vault.economy.Economy;
import java.util.function.Supplier;
class MoneyThingParser implements ThingParser {
private static final String PREFIX_LONG = "money:";
private static final String PREFIX_SHORT = "$";
private Economy economy;
private Supplier<Economy> economy;
MoneyThingParser(Economy economy) {
MoneyThingParser(Supplier<Economy> economy) {
this.economy = economy;
}
@ -18,7 +20,7 @@ class MoneyThingParser implements ThingParser {
if (money == null) {
return null;
}
return new MoneyThing(economy, Double.parseDouble(money));
return new MoneyThing(economy.get(), Double.parseDouble(money));
}
private String trimPrefix(String s) {

View File

@ -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::getEconomy));
items = parser;
}

View File

@ -22,7 +22,7 @@ public class MoneyThingParserTest {
@Before
public void setup() {
Economy economy = mock(Economy.class);
subject = new MoneyThingParser(economy);
subject = new MoneyThingParser(() -> economy);
}
@Test