Added sell multipliers (#4770)

Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com>
This commit is contained in:
Justin M. 2024-12-08 19:08:23 -06:00 committed by GitHub
parent 424816ef51
commit e1091d887d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 45 additions and 1 deletions

View File

@ -418,6 +418,8 @@ public interface ISettings extends IConf {
boolean showZeroBaltop(); boolean showZeroBaltop();
BigDecimal getMultiplier(final User user);
int getMaxItemLore(); int getMaxItemLore();
Tag getPrimaryColor(); Tag getPrimaryColor();

View File

@ -149,6 +149,8 @@ public class Settings implements net.ess3.api.ISettings {
private Map<String, String> worldAliases; private Map<String, String> worldAliases;
private Tag primaryColor = DEFAULT_PRIMARY_COLOR; private Tag primaryColor = DEFAULT_PRIMARY_COLOR;
private Tag secondaryColor = DEFAULT_SECONDARY_COLOR; private Tag secondaryColor = DEFAULT_SECONDARY_COLOR;
private Set<String> multiplierPerms;
private BigDecimal defaultMultiplier;
public Settings(final IEssentials ess) { public Settings(final IEssentials ess) {
this.ess = ess; this.ess = ess;
@ -921,6 +923,8 @@ public class Settings implements net.ess3.api.ISettings {
worldAliases = _getWorldAliases(); worldAliases = _getWorldAliases();
primaryColor = _getPrimaryColor(); primaryColor = _getPrimaryColor();
secondaryColor = _getSecondaryColor(); secondaryColor = _getSecondaryColor();
multiplierPerms = _getMultiplierPerms();
defaultMultiplier = _getDefaultMultiplier();
reloadCount.incrementAndGet(); reloadCount.incrementAndGet();
} }
@ -2090,6 +2094,33 @@ public class Settings implements net.ess3.api.ISettings {
} }
@Override @Override
public BigDecimal getMultiplier(final User user) {
BigDecimal multiplier = defaultMultiplier;
if (multiplierPerms == null) {
return defaultMultiplier;
}
for (final String multiplierPerm : multiplierPerms) {
if (user.isAuthorized("essentials.sell.multiplier." + multiplierPerm)) {
final BigDecimal value = config.getBigDecimal("sell-multipliers." + multiplierPerm, BigDecimal.ZERO);
if (value.compareTo(multiplier) > 0) {
multiplier = value;
}
}
}
return multiplier;
}
private BigDecimal _getDefaultMultiplier() {
return config.getBigDecimal("sell-multipliers.default", BigDecimal.ONE);
}
private Set<String> _getMultiplierPerms() {
final CommentedConfigurationNode section = config.getSection("sell-multipliers");
return section == null ? null : ConfigurateUtil.getKeys(section);
}
public int getMaxItemLore() { public int getMaxItemLore() {
return config.getInt("max-itemlore-lines", 10); return config.getInt("max-itemlore-lines", 10);
} }

View File

@ -93,7 +93,8 @@ public class Commandsell extends EssentialsCommand {
private BigDecimal sellItem(final User user, final ItemStack is, final String[] args, final boolean isBulkSell) throws Exception { private BigDecimal sellItem(final User user, final ItemStack is, final String[] args, final boolean isBulkSell) throws Exception {
final int amount = ess.getWorth().getAmount(ess, user, is, args, isBulkSell); final int amount = ess.getWorth().getAmount(ess, user, is, args, isBulkSell);
final BigDecimal worth = ess.getWorth().getPrice(ess, is); final BigDecimal originalWorth = ess.getWorth().getPrice(ess, is);
final BigDecimal worth = originalWorth == null ? null : originalWorth.multiply(ess.getSettings().getMultiplier(user));
if (worth == null) { if (worth == null) {
throw new TranslatableException("itemCannotBeSold"); throw new TranslatableException("itemCannotBeSold");

View File

@ -41,6 +41,7 @@ public class SignSell extends EssentialsSign {
//noinspection BigDecimalMethodWithoutRoundingCalled //noinspection BigDecimalMethodWithoutRoundingCalled
BigDecimal pricePerSingleItem = chargeAmount.divide(new BigDecimal(initialItemAmount)); BigDecimal pricePerSingleItem = chargeAmount.divide(new BigDecimal(initialItemAmount));
pricePerSingleItem = pricePerSingleItem.multiply(new BigDecimal(newItemAmount)); pricePerSingleItem = pricePerSingleItem.multiply(new BigDecimal(newItemAmount));
pricePerSingleItem = pricePerSingleItem.multiply(ess.getSettings().getMultiplier(player));
money = new Trade(pricePerSingleItem, ess); money = new Trade(pricePerSingleItem, ess);
} }
} }

View File

@ -879,6 +879,15 @@ baltop-requirements:
# For 1'234,50 use fr-ch # For 1'234,50 use fr-ch
#currency-symbol-format-locale: en-US #currency-symbol-format-locale: en-US
# Allow players to receive multipliers for items sold with /sell or the sell sign.
# You can set the default multiplier using the 'default' rank below.
# To grant different multipliers to different people, you need to define a 'multiplier-rank' below.
# Create the 'multiplier-rank' below, and give the matching permission: essentials.sell.multiplier.<multiplier-rank>
sell-multipliers:
default: 1.0
double: 2.0
triple: 3.0
############################################################ ############################################################
# +------------------------------------------------------+ # # +------------------------------------------------------+ #
# | Help | # # | Help | #