mirror of
https://github.com/xHyroM/lighteco.git
synced 2024-11-24 15:51:06 +01:00
feat: save every currency as BigDecimal
This commit is contained in:
parent
d7b93e4cd7
commit
2ab1bdeb85
15 changed files with 80 additions and 90 deletions
|
@ -7,5 +7,5 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||
|
||||
public interface CurrencyRegisterEvent extends LightEcoEvent {
|
||||
@Position(0)
|
||||
@NonNull Currency<?> getCurrency();
|
||||
@NonNull Currency getCurrency();
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@ import java.util.Collection;
|
|||
import java.util.List;
|
||||
|
||||
public interface CurrencyManager {
|
||||
@NonNull Collection<Currency<?>> getRegisteredCurrencies();
|
||||
@NonNull Collection<Currency> getRegisteredCurrencies();
|
||||
|
||||
<T> Currency<T> getCurrency(@NonNull String identifier);
|
||||
Currency getCurrency(@NonNull String identifier);
|
||||
|
||||
void registerCurrency(@NonNull Currency<?> currency);
|
||||
void registerCurrency(@NonNull Currency currency);
|
||||
|
||||
List<User> getTopUsers(@NonNull Currency<?> currency, int length);
|
||||
List<User> getTopUsers(@NonNull Currency currency, int length);
|
||||
}
|
||||
|
|
|
@ -1,14 +1,8 @@
|
|||
package dev.xhyrom.lighteco.api.model.currency;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
public abstract class Currency<T> {
|
||||
@Getter
|
||||
private final Class<T> valueType;
|
||||
public Currency(Class<T> valueType) {
|
||||
this.valueType = valueType;
|
||||
}
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public abstract class Currency {
|
||||
public abstract String getIdentifier();
|
||||
/**
|
||||
* Get the type of the currency, either {@link Type#LOCAL} or {@link Type#GLOBAL}
|
||||
|
@ -20,12 +14,22 @@ public abstract class Currency<T> {
|
|||
|
||||
public abstract boolean isPayable();
|
||||
|
||||
/**
|
||||
* Get the number of decimal places this currency has
|
||||
* If zero, the currency is considered to be a whole number (integer)
|
||||
*
|
||||
* @return The number of decimal places
|
||||
*/
|
||||
public int getDecimalPlaces() {
|
||||
return 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the users that have a balance in this currency
|
||||
*
|
||||
* @return The users
|
||||
*/
|
||||
public abstract T getDefaultBalance();
|
||||
public abstract BigDecimal getDefaultBalance();
|
||||
|
||||
/**
|
||||
* Calculate the tax for the given amount
|
||||
|
@ -34,7 +38,7 @@ public abstract class Currency<T> {
|
|||
* @param amount The amount to calculate the tax for
|
||||
* @return The tax
|
||||
*/
|
||||
public T calculateTax(T amount) {
|
||||
public BigDecimal calculateTax(BigDecimal amount) {
|
||||
return getDefaultBalance();
|
||||
};
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package dev.xhyrom.lighteco.api.model.user;
|
|||
import dev.xhyrom.lighteco.api.model.currency.Currency;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.UUID;
|
||||
|
||||
public interface User {
|
||||
|
@ -26,7 +27,7 @@ public interface User {
|
|||
* @param currency the currency
|
||||
* @return the balance
|
||||
*/
|
||||
<T> T getBalance(@NonNull Currency<?> currency);
|
||||
BigDecimal getBalance(@NonNull Currency currency);
|
||||
|
||||
/**
|
||||
* Set the balance of this user for the specified currency.
|
||||
|
@ -34,5 +35,5 @@ public interface User {
|
|||
* @param currency the currency
|
||||
* @param balance the balance
|
||||
*/
|
||||
<T> void setBalance(@NonNull Currency<?> currency, @NonNull T balance);
|
||||
void setBalance(@NonNull Currency currency, @NonNull BigDecimal balance);
|
||||
}
|
||||
|
|
|
@ -12,8 +12,8 @@ import org.bukkit.plugin.java.JavaPlugin;
|
|||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstrap {
|
||||
@Getter
|
||||
public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstrap {
|
||||
private final JavaPlugin loader;
|
||||
private final BukkitLightEcoPlugin plugin = new BukkitLightEcoPlugin(this);
|
||||
|
||||
|
|
|
@ -13,8 +13,8 @@ import org.bukkit.entity.Player;
|
|||
import org.bukkit.plugin.ServicePriority;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
public class BukkitLightEcoPlugin extends AbstractLightEcoPlugin {
|
||||
@Getter
|
||||
public class BukkitLightEcoPlugin extends AbstractLightEcoPlugin {
|
||||
private final BukkitLightEcoBootstrap bootstrap;
|
||||
|
||||
@Getter
|
||||
|
|
|
@ -2,11 +2,9 @@ package dev.xhyrom.lighteco.bukkittest;
|
|||
|
||||
import dev.xhyrom.lighteco.api.model.currency.Currency;
|
||||
|
||||
public class TestCurrency extends Currency<Integer> {
|
||||
public TestCurrency() {
|
||||
super(Integer.class);
|
||||
}
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class TestCurrency extends Currency {
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return "test";
|
||||
|
@ -23,12 +21,12 @@ public class TestCurrency extends Currency<Integer> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Integer getDefaultBalance() {
|
||||
return 0;
|
||||
public BigDecimal getDefaultBalance() {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer calculateTax(Integer amount) {
|
||||
return 0;
|
||||
public BigDecimal calculateTax(BigDecimal amount) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,11 +2,9 @@ package dev.xhyrom.lighteco.bukkittest;
|
|||
|
||||
import dev.xhyrom.lighteco.api.model.currency.Currency;
|
||||
|
||||
public class TestCurrency2 extends Currency<Double> {
|
||||
public TestCurrency2() {
|
||||
super(Double.class);
|
||||
}
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class TestCurrency2 extends Currency {
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return "test2";
|
||||
|
@ -23,12 +21,17 @@ public class TestCurrency2 extends Currency<Double> {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Double getDefaultBalance() {
|
||||
return 0.0;
|
||||
public int getDecimalPlaces() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Double calculateTax(Double amount) {
|
||||
return 0.0;
|
||||
public BigDecimal getDefaultBalance() {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal calculateTax(BigDecimal amount) {
|
||||
return BigDecimal.ZERO;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ import org.bukkit.event.Listener;
|
|||
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
public class TestPlugin extends JavaPlugin implements Listener {
|
||||
@Override
|
||||
public void onEnable() {
|
||||
|
@ -27,7 +29,7 @@ public class TestPlugin extends JavaPlugin implements Listener {
|
|||
getLogger().info("TestCurrency registered!");
|
||||
|
||||
currencyManager.getRegisteredCurrencies().forEach(currency -> {
|
||||
getLogger().info("Currency: " + currency.getIdentifier() + " (" + currency.getType() + ", " + currency.getValueType() + ", " + currency.isPayable() + ")");
|
||||
getLogger().info("Currency: " + currency.getIdentifier() + " (" + currency.getType() + ", " + currency.getDecimalPlaces() + ", " + currency.isPayable() + ")");
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -44,7 +46,7 @@ public class TestPlugin extends JavaPlugin implements Listener {
|
|||
String command = message.split(" ")[0];
|
||||
String[] args = message.substring(command.length()).trim().split(" ");
|
||||
|
||||
Currency<?> currency = currencyManager.getCurrency(args[0]);
|
||||
Currency currency = currencyManager.getCurrency(args[0]);
|
||||
|
||||
switch (command) {
|
||||
case "balance": {
|
||||
|
@ -52,10 +54,10 @@ public class TestPlugin extends JavaPlugin implements Listener {
|
|||
break;
|
||||
}
|
||||
case "add": {
|
||||
if (currency.getValueType().equals(Integer.class)) {
|
||||
user.setBalance(currency, Integer.parseInt(args[1]));
|
||||
} else if (currency.getValueType().equals(Double.class)) {
|
||||
user.setBalance(currency, Double.parseDouble(args[1]));
|
||||
if (currency.getDecimalPlaces() > 0) {
|
||||
user.setBalance(currency, BigDecimal.valueOf(Integer.parseInt(args[1])));
|
||||
} else {
|
||||
user.setBalance(currency, BigDecimal.valueOf(Double.parseDouble(args[1])));
|
||||
}
|
||||
|
||||
provider.getUserManager().saveUser(user).thenAccept(aVoid -> player.sendMessage("Saved!"));
|
||||
|
|
|
@ -15,31 +15,31 @@ public class ApiCurrencyManager extends ApiAbstractManager<dev.xhyrom.lighteco.c
|
|||
super(plugin, handler);
|
||||
}
|
||||
|
||||
private Currency<?> wrap(dev.xhyrom.lighteco.common.model.currency.Currency<?> handler) {
|
||||
private Currency wrap(dev.xhyrom.lighteco.common.model.currency.Currency handler) {
|
||||
return handler.getProxy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Collection<Currency<?>> getRegisteredCurrencies() {
|
||||
public @NonNull Collection<Currency> getRegisteredCurrencies() {
|
||||
return this.handler.values()
|
||||
.stream().map(this::wrap)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Currency<T> getCurrency(@NonNull String identifier) {
|
||||
return (Currency<T>) wrap(this.handler.getIfLoaded(identifier));
|
||||
public Currency getCurrency(@NonNull String identifier) {
|
||||
return wrap(this.handler.getIfLoaded(identifier));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCurrency(@NonNull Currency<?> currency) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency<?> internal = new dev.xhyrom.lighteco.common.model.currency.Currency<>(plugin, currency);
|
||||
public void registerCurrency(@NonNull Currency currency) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency internal = new dev.xhyrom.lighteco.common.model.currency.Currency(plugin, currency);
|
||||
this.handler.registerCurrency(internal);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<User> getTopUsers(@NonNull Currency<?> currency, int length) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency<?> internal = this.handler.getIfLoaded(currency.getIdentifier());
|
||||
public List<User> getTopUsers(@NonNull Currency currency, int length) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency internal = this.handler.getIfLoaded(currency.getIdentifier());
|
||||
return this.handler.getTopUsers(internal, length)
|
||||
.stream().map(dev.xhyrom.lighteco.common.model.user.User::getProxy)
|
||||
.collect(Collectors.toList());
|
||||
|
|
|
@ -4,6 +4,7 @@ import dev.xhyrom.lighteco.api.model.currency.Currency;
|
|||
import dev.xhyrom.lighteco.api.model.user.User;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.UUID;
|
||||
|
||||
public class ApiUser implements User {
|
||||
|
@ -24,8 +25,8 @@ public class ApiUser implements User {
|
|||
}
|
||||
|
||||
@Override
|
||||
public <T> T getBalance(@NonNull Currency<?> currency) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency<?> internal = this.handler.getPlugin()
|
||||
public BigDecimal getBalance(@NonNull Currency currency) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency internal = this.handler.getPlugin()
|
||||
.getCurrencyManager()
|
||||
.getIfLoaded(currency.getIdentifier());
|
||||
|
||||
|
@ -33,8 +34,8 @@ public class ApiUser implements User {
|
|||
}
|
||||
|
||||
@Override
|
||||
public <T> void setBalance(@NonNull Currency<?> currency, @NonNull T balance) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency<?> internal = this.handler.getPlugin()
|
||||
public void setBalance(@NonNull Currency currency, @NonNull BigDecimal balance) {
|
||||
dev.xhyrom.lighteco.common.model.currency.Currency internal = this.handler.getPlugin()
|
||||
.getCurrencyManager()
|
||||
.getIfLoaded(currency.getIdentifier());
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface CurrencyManager extends Manager<String, Currency<?>> {
|
||||
@NonNull Collection<Currency<?>> getRegisteredCurrencies();
|
||||
public interface CurrencyManager extends Manager<String, Currency> {
|
||||
@NonNull Collection<Currency> getRegisteredCurrencies();
|
||||
|
||||
void registerCurrency(@NonNull Currency<?> currency);
|
||||
void registerCurrency(@NonNull Currency currency);
|
||||
|
||||
List<User> getTopUsers(@NonNull Currency<?> currency, int length);
|
||||
List<User> getTopUsers(@NonNull Currency currency, int length);
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import java.util.List;
|
|||
|
||||
import static dev.xhyrom.lighteco.api.model.currency.Currency.Type;
|
||||
|
||||
public class StandardCurrencyManager extends AbstractManager<String, Currency<?>> implements CurrencyManager {
|
||||
public class StandardCurrencyManager extends AbstractManager<String, Currency> implements CurrencyManager {
|
||||
private final LightEcoPlugin plugin;
|
||||
|
||||
public StandardCurrencyManager(LightEcoPlugin plugin) {
|
||||
|
@ -21,47 +21,31 @@ public class StandardCurrencyManager extends AbstractManager<String, Currency<?>
|
|||
}
|
||||
|
||||
@Override
|
||||
public Currency<?> apply(String identifier) {
|
||||
public Currency apply(String identifier) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Currency<?> getOrMake(String identifier) {
|
||||
public Currency getOrMake(String identifier) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NonNull Collection<Currency<?>> getRegisteredCurrencies() {
|
||||
public @NonNull Collection<Currency> getRegisteredCurrencies() {
|
||||
return this.values();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerCurrency(@NonNull Currency<?> currency) {
|
||||
if (currency.getType() == Type.GLOBAL && this.plugin.getPlatformType().isLocal())
|
||||
throw new IllegalArgumentException("Cannot register global currency on local platform");
|
||||
|
||||
if (currency.getType() == Type.LOCAL && this.plugin.getPlatformType().isProxy())
|
||||
throw new IllegalArgumentException("Cannot register local currency on proxy platform");
|
||||
|
||||
if (!isValidValueType(currency.getValueType()))
|
||||
throw new IllegalArgumentException("Invalid value type " + currency.getValueType().getName() + " for currency " + currency.getIdentifier());
|
||||
|
||||
public void registerCurrency(@NonNull Currency currency) {
|
||||
if (this.isLoaded(currency.getIdentifier()))
|
||||
throw new IllegalArgumentException("Currency with identifier " + currency.getIdentifier() + " already registered");
|
||||
|
||||
this.map.put(currency.getIdentifier(), currency);
|
||||
}
|
||||
|
||||
private boolean isValidValueType(Class<?> clazz) {
|
||||
return clazz == Integer.class || clazz == Long.class ||
|
||||
clazz == Double.class || clazz == Float.class ||
|
||||
clazz == Short.class || clazz == BigInteger.class ||
|
||||
clazz == BigDecimal.class;
|
||||
}
|
||||
|
||||
// TODO: finish
|
||||
@Override
|
||||
public List<User> getTopUsers(@NonNull Currency<?> currency, int length) {
|
||||
public List<User> getTopUsers(@NonNull Currency currency, int length) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,17 +4,18 @@ import dev.xhyrom.lighteco.common.model.user.User;
|
|||
import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
public class Currency<T> {
|
||||
public class Currency {
|
||||
private final LightEcoPlugin plugin;
|
||||
|
||||
@Getter
|
||||
private final dev.xhyrom.lighteco.api.model.currency.Currency<T> proxy;
|
||||
private final dev.xhyrom.lighteco.api.model.currency.Currency proxy;
|
||||
|
||||
public Currency(LightEcoPlugin plugin, dev.xhyrom.lighteco.api.model.currency.Currency<T> proxy) {
|
||||
public Currency(LightEcoPlugin plugin, dev.xhyrom.lighteco.api.model.currency.Currency proxy) {
|
||||
this.plugin = plugin;
|
||||
this.proxy = proxy;
|
||||
}
|
||||
|
@ -27,11 +28,7 @@ public class Currency<T> {
|
|||
return proxy.getType();
|
||||
}
|
||||
|
||||
public Class<T> getValueType() {
|
||||
return proxy.getValueType();
|
||||
}
|
||||
|
||||
public T getDefaultBalance() {
|
||||
public BigDecimal getDefaultBalance() {
|
||||
return proxy.getDefaultBalance();
|
||||
}
|
||||
|
||||
|
|
|
@ -17,18 +17,18 @@ public class User {
|
|||
|
||||
@Getter
|
||||
private final UUID uniqueId;
|
||||
private final TypedMap<Currency<?>> balances = new TypedMap<>();
|
||||
private final TypedMap<Currency> balances = new TypedMap<>();
|
||||
|
||||
public User(LightEcoPlugin plugin, UUID uniqueId) {
|
||||
this.plugin = plugin;
|
||||
this.uniqueId = uniqueId;
|
||||
}
|
||||
|
||||
public <T> T getBalance(@NonNull Currency<?> currency) {
|
||||
public <T> T getBalance(@NonNull Currency currency) {
|
||||
return balances.<T>getOrDefault(currency, (T) currency.getDefaultBalance());
|
||||
}
|
||||
|
||||
public <T> void setBalance(@NonNull Currency<?> currency, @NonNull T balance) {
|
||||
public <T> void setBalance(@NonNull Currency currency, @NonNull T balance) {
|
||||
balances.put(currency, balance);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue