Skip to content

Commit

Permalink
Added ElasticEconomy
Browse files Browse the repository at this point in the history
BlobLibAPI economy methods are deprecated, use BlobLibAPI.getElasticEconomy instead
This is because VaultAPI2 allows economy plugins to be multi-currency providers. ElasticEconomy allows old economy providers (non multi-currency) to still be an ElasticEconomy the same way a MultiEconomy (a multi-currency economy) can be an ElasticEconomy. This was done so you the plugin developer instead of overcomplicating, you can just check if ElasticEconomy#isSingleEconomy returns true. It will also notify as an error to server admin whenever ElasticEconomy is absent. You can still check if ElasticEconomy is absent by doing ElasticEconomy#isAbsent
  • Loading branch information
anjoismysign committed Apr 1, 2023
1 parent efb92cf commit 68116fb
Show file tree
Hide file tree
Showing 12 changed files with 495 additions and 51 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

<groupId>us.mytheria</groupId>
<artifactId>bloblib</artifactId>
<version>1.645s</version>
<version>1.647s</version>
<packaging>jar</packaging>

<name>BlobLib</name>
Expand Down Expand Up @@ -226,7 +226,7 @@
<dependency>
<groupId>net.milkbowl.vault</groupId>
<artifactId>vaultapi</artifactId>
<version>2.0-SNAPSHOT-PRE2</version>
<version>1.7.4</version>
</dependency>
</dependencies>
</project>
27 changes: 27 additions & 0 deletions src/main/java/us/mytheria/bloblib/BlobLibAPI.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package us.mytheria.bloblib;

import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
Expand All @@ -9,6 +10,7 @@
import us.mytheria.bloblib.entities.listeners.BlobDropListener;
import us.mytheria.bloblib.entities.listeners.BlobSelPosListener;
import us.mytheria.bloblib.entities.listeners.BlobSelectorListener;
import us.mytheria.bloblib.vault.multieconomy.ElasticEconomy;

import java.util.List;
import java.util.function.Consumer;
Expand Down Expand Up @@ -80,12 +82,25 @@ public static <T> void addSelectorListener(Player player, Consumer<T> consumer,
BlobSelectorListener.wise(player, consumer, timerMessageKey, selector));
}

/**
* @return The ElasticEconomy
*/
public static ElasticEconomy getElasticEconomy() {
ElasticEconomy economy = main.getVaultManager().getElasticEconomy();
if (economy.isAbsent())
Bukkit.getLogger().severe("ElasticEconomy is not present. This is " +
"because there is no legacy Economy provider nor a MultiEconomy provider...");
return economy;
}

/**
* Formats the given amount of cash.
*
* @param amount Amount to format
* @return Formatted amount
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static String format(double amount) {
return main.getVaultManager().getVaultEconomyWorker().format(amount);
}
Expand All @@ -95,7 +110,9 @@ public static String format(double amount) {
*
* @param player to deposit to
* @param amount amount to deposit
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static void addCash(Player player, double amount) {
main.getVaultManager().getVaultEconomyWorker().addCash(player, amount);
}
Expand All @@ -105,7 +122,9 @@ public static void addCash(Player player, double amount) {
*
* @param player to deposit to
* @param amount amount to deposit
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static void withdrawCash(Player player, double amount) {
main.getVaultManager().getVaultEconomyWorker().withdrawCash(player, amount);
}
Expand All @@ -116,7 +135,9 @@ public static void withdrawCash(Player player, double amount) {
*
* @param player to deposit to
* @param amount amount to deposit
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static void setCash(Player player, double amount) {
main.getVaultManager().getVaultEconomyWorker().setCash(player, amount);
}
Expand All @@ -127,7 +148,9 @@ public static void setCash(Player player, double amount) {
* @param player to check
* @param amount amount to check
* @return true if player has amount
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static boolean hasCashAmount(Player player, double amount) {
return main.getVaultManager().getVaultEconomyWorker().hasCashAmount(player, amount);
}
Expand All @@ -137,14 +160,18 @@ public static boolean hasCashAmount(Player player, double amount) {
*
* @param player to check
* @return amount of money
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static double getCash(Player player) {
return main.getVaultManager().getVaultEconomyWorker().getCash(player);
}

/**
* @return true if a vault economy plugin is being used
* @deprecated Use {@link #getElasticEconomy()} instead
*/
@Deprecated
public static boolean hasVaultEconomyDependency() {
return main.getVaultManager().isVaultEcoInstalled();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,18 @@
public class BlobEconomy<T extends WalletOwner> implements MultiEconomy {
private final WalletOwnerManager<T> manager;
private final BlobPlugin plugin;
private final IdentityEconomy defaultEconomy;

protected BlobEconomy(WalletOwnerManager<T> manager, boolean force) {
this.manager = manager;
this.plugin = manager.getPlugin();
Bukkit.getScheduler().runTask(plugin, () -> {
Plugin vault = Bukkit.getPluginManager().getPlugin("Vault");
if (vault != null) {
MultiEconomyWrapper wrapper = new MultiEconomyWrapper(this);
wrapper.registerProviders(force);
}
});
manager.updateImplementations();
this.defaultEconomy = manager.getImplementation(manager.getDefaultCurrency().getKey());
Plugin vault = Bukkit.getPluginManager().getPlugin("Vault");
if (vault != null) {
MultiEconomyWrapper wrapper = new MultiEconomyWrapper(this);
wrapper.registerProviders(force);
}
}

@Override
Expand All @@ -47,12 +48,12 @@ public boolean existsImplementation(String name, String worldName) {

@Override
public IdentityEconomy getImplementation(String name) {
return manager.convertOrNull(name);
return manager.getImplementation(name);
}

@Override
public IdentityEconomy getDefault() {
return manager.convertOrNull(manager.getDefaultCurrency().getKey());
return defaultEconomy;
}

@Override
Expand All @@ -62,7 +63,7 @@ public IdentityEconomy getDefault(String world) {

@Override
public Collection<IdentityEconomy> getAllImplementations() {
return manager.listAllAsEconomies();
return manager.retrieveImplementations();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class WalletOwnerManager<T extends WalletOwner> extends Manager implement
protected ObjectDirector<Currency> currencyDirector;
@Nullable
private EconomyPHExpansion<T> economyPHExpansion;
private HashMap<String, CurrencyEconomy> implementations;

protected WalletOwnerManager(ManagerDirector managerDirector, Function<BlobCrudable, BlobCrudable> newBorn,
Function<BlobCrudable, T> generator,
Expand All @@ -56,7 +57,7 @@ protected WalletOwnerManager(ManagerDirector managerDirector, Function<BlobCruda
this.registeredEconomy = false;
saving = new HashSet<>();
crudManager = BlobCrudManagerBuilder.PLAYER(plugin, crudableName, newBorn, logActivity);
reload();
saveAll();
}

@Override
Expand All @@ -67,6 +68,7 @@ public void unload() {
@Override
public void reload() {
unload();
Bukkit.getScheduler().runTaskAsynchronously(getPlugin(), this::updateImplementations);
}

@EventHandler
Expand Down Expand Up @@ -178,7 +180,7 @@ public BlobEconomy<T> registerEconomy(Currency defaultCurrency,
if (registeredEconomy)
throw new IllegalStateException("BlobPlugin already registered their BlobEconomy");
registeredEconomy = true;
this.defaultCurrency = defaultCurrency.getKey();
this.defaultCurrency = Objects.requireNonNull(defaultCurrency).getKey();
this.currencyDirector = currencyDirector;
return new BlobEconomy<>(this, force);
}
Expand Down Expand Up @@ -267,16 +269,38 @@ public WalletOwnerManager<T> unregisterPlaceholderAPIExpansion() {
}

@Nullable
public CurrencyEconomy convertOrNull(String key) {
Currency currency = currencyDirector.getObjectManager().getObject(key);
if (currency == null)
return null;
return new CurrencyEconomy(currency, this);
public CurrencyEconomy getImplementation(String key) {
if (!implementations.containsKey(key)) {
Bukkit.getLogger().severe("Implementation doesn't exist. Currently available " +
"implementations: " + Arrays.toString(implementations.values().stream()
.map(CurrencyEconomy::getName)
.toArray()));
}
return implementations.get(key);
}

public Collection<IdentityEconomy> listAllAsEconomies() {
return currencyDirector.getObjectManager().values().stream()
.map(currency -> new CurrencyEconomy(currency, this))
public Collection<IdentityEconomy> retrieveImplementations() {
return implementations.values()
.stream()
.map(currencyEconomy -> (IdentityEconomy) currencyEconomy)
.collect(Collectors.toList());
}

private HashMap<String, CurrencyEconomy> convertAll() {
HashMap<String, CurrencyEconomy> map = new HashMap<>();
currencyDirector.getObjectManager().values().stream()
.map(currency -> new CurrencyEconomy(currency, this))
.forEach(currencyEconomy -> map.put(currencyEconomy.getName(), currencyEconomy));
return map;
}

/**
* Updates the implementations of the BlobEconomy.
*/
protected void updateImplementations() {
if (!registeredEconomy) {
throw new IllegalStateException("BlobPlugin has not registered their BlobEconomy");
}
this.implementations = convertAll();
}
}

0 comments on commit 68116fb

Please sign in to comment.