Implemented support for sponge economy (#721)

* Implement basic economy support for Sponge

* Implemented global server stats
This commit is contained in:
Yannick Schinko 2018-09-06 22:19:43 +02:00 committed by Rsl1122
parent 2783841e4b
commit 67712f9b26
3 changed files with 132 additions and 0 deletions

View File

@ -22,6 +22,7 @@ import com.djrapitops.pluginbridge.plan.mcmmo.McmmoHook;
import com.djrapitops.pluginbridge.plan.nucleus.NucleusHook;
import com.djrapitops.pluginbridge.plan.protocolsupport.ProtocolSupportHook;
import com.djrapitops.pluginbridge.plan.redprotect.RedProtectHook;
import com.djrapitops.pluginbridge.plan.sponge.SpongeEconomyHook;
import com.djrapitops.pluginbridge.plan.superbvote.SuperbVoteHook;
import com.djrapitops.pluginbridge.plan.towny.TownyHook;
import com.djrapitops.pluginbridge.plan.vault.VaultHook;
@ -74,6 +75,7 @@ public class Bridge {
private static Hook[] getSpongeHooks(HookHandler h) {
return new Hook[]{
new BuyCraftHook(h),
new SpongeEconomyHook(h),
new NucleusHook(h)
};
}

View File

@ -0,0 +1,97 @@
package com.djrapitops.pluginbridge.plan.sponge;
import com.djrapitops.plan.data.element.AnalysisContainer;
import com.djrapitops.plan.data.element.InspectContainer;
import com.djrapitops.plan.data.plugin.ContainerSize;
import com.djrapitops.plan.data.plugin.PluginData;
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
import com.djrapitops.plan.data.store.keys.PlayerKeys;
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
import com.djrapitops.plan.system.cache.DataCache;
import com.djrapitops.plan.utilities.html.icon.Color;
import com.djrapitops.plan.utilities.html.icon.Icon;
import org.spongepowered.api.service.economy.Currency;
import org.spongepowered.api.service.economy.EconomyService;
import org.spongepowered.api.service.economy.account.UniqueAccount;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* PluginData for Sponge.
*
* @author BrainStone
*/
public class SpongeEconomyData extends PluginData {
private static final Color color = Color.AMBER;
private static final String nameMoneyIcon = "money-bill-wave";
private static final Icon moneyIcon = Icon.called(nameMoneyIcon).build();
private static final Icon moneyIconColored = Icon.called(nameMoneyIcon).of(color).build();
private final EconomyService economyService;
public SpongeEconomyData(EconomyService economyService) {
super(ContainerSize.THIRD, "Sponge Economy");
this.economyService = economyService;
setPluginIcon(moneyIconColored);
}
@Override
public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) {
String name = DataCache.getInstance().getName(uuid);
if (name == null) {
return inspectContainer;
}
Optional<UniqueAccount> uOpt = economyService.getOrCreateAccount(uuid);
if (!uOpt.isPresent()) {
return inspectContainer;
}
UniqueAccount acc = uOpt.get();
for(Currency currency : economyService.getCurrencies()) {
BigDecimal balance = acc.getBalance(currency);
inspectContainer.addValue(getWithIcon(currency.getName(), moneyIconColored), currency.format(balance).toPlain());
}
return inspectContainer;
}
@Override
public AnalysisContainer getServerData(Collection<UUID> uuids, AnalysisContainer analysisContainer) {
List<UniqueAccount> players = uuids.stream().map(economyService::getOrCreateAccount)
.filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());
for(Currency currency : economyService.getCurrencies()) {
addCurrencyToContainer(currency, players, analysisContainer);
}
return analysisContainer;
}
private void addCurrencyToContainer(Currency currency, List<UniqueAccount> players, AnalysisContainer analysisContainer) {
BigDecimal totalBalance = BigDecimal.ZERO;
Map<UUID, String> playerBalances = new HashMap<>();
for (UniqueAccount player : players) {
BigDecimal balance = player.getBalance(currency);
totalBalance = totalBalance.add(balance);
playerBalances.put(player.getUniqueId(), currency.format(balance).toPlain());
}
analysisContainer.addValue(getWithIcon("Total Server Balance " + currency.getName(), moneyIconColored), currency.format(totalBalance).toPlain());
analysisContainer.addPlayerTableValues(getWithIcon("Balance " + currency.getName(), moneyIcon), playerBalances);
}
}

View File

@ -0,0 +1,33 @@
package com.djrapitops.pluginbridge.plan.sponge;
import com.djrapitops.plan.data.plugin.HookHandler;
import com.djrapitops.pluginbridge.plan.Hook;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.economy.EconomyService;
import java.util.Optional;
/**
* A Class responsible for hooking to Sponge and registering 1 data sources
*
* @author BrainStone
* @since 4.4.6
*/
public class SpongeEconomyHook extends Hook {
public SpongeEconomyHook(HookHandler hookHandler) {
super("org.spongepowered.api.Sponge", hookHandler);
try {
Optional<EconomyService> serviceOpt = Sponge.getServiceManager().provide(EconomyService.class);
enabled = serviceOpt.isPresent();
} catch(NoClassDefFoundError e) {
enabled = false;
}
}
@Override
public void hook() {
if (enabled) {
addPluginDataSource(new SpongeEconomyData(Sponge.getServiceManager().provide(EconomyService.class).get()));
}
}
}