Skip to content

Commit

Permalink
Refactor/economy (#3663)
Browse files Browse the repository at this point in the history
* Mostly broken code

* Just messing with some ideas, have static EconomyManager and an interface. The latter is used for class specific items such as econ name, and the other is used for function that are class agnostic.

* This is a scrapped idea

* Refactored a bunch of code

* Made it so the account field is now implemented in most areas in towny.

* Code sucessfully compiles

* Added two new interfaces
  - Permissible
  - TownBlockOwner (A port from the original class)

*Since both of these interfaces are implemented, Resident and Town now both directly inherit from TownyObject.

* Fixed initialization bugs

* Nation now conforms to the Economy interface.

* Added javadoc

* Fixed compiler errors from nation transition.

* Changed Economy to EconomyHandler

* Restore legacy methods via deprecation

* Changed EconomyAccount.getEconomyName() to EconomyAccount.getName()

this limits verbosity and repetition in the method calls.

* Added deprecation documentation.

* Re-add support for economy logging.

* Cleaned up logging changes

* EconomyAccount now conforms to EconomyHandler

* Revert "Cleaned up logging changes"

* This reverts commit 3bf863a.

* Auto stash before revert of "Cleaned up logging changes"

* Fix econ logging (again)

* Fix econ logging (again)

* Fix NPE from null log values.

* remove debug code

* Remove unused imports and unused method.

* Create an alias for `TownyInviteSender` and `TownyInviteReceiver`

* Co-authored-by: LlmDl <LlmDlio@gmail.com>
  • Loading branch information
Siris committed Jan 29, 2020
1 parent 783952b commit 734a3f6
Show file tree
Hide file tree
Showing 32 changed files with 708 additions and 541 deletions.
Binary file added .DS_Store
Binary file not shown.
12 changes: 5 additions & 7 deletions src/com/palmergames/bukkit/towny/TownyFormatter.java
Expand Up @@ -9,7 +9,6 @@
import com.palmergames.bukkit.towny.object.ResidentList; import com.palmergames.bukkit.towny.object.ResidentList;
import com.palmergames.bukkit.towny.object.Town; import com.palmergames.bukkit.towny.object.Town;
import com.palmergames.bukkit.towny.object.TownBlock; import com.palmergames.bukkit.towny.object.TownBlock;
import com.palmergames.bukkit.towny.object.TownBlockOwner;
import com.palmergames.bukkit.towny.object.TownBlockType; import com.palmergames.bukkit.towny.object.TownBlockType;
import com.palmergames.bukkit.towny.object.TownyObject; import com.palmergames.bukkit.towny.object.TownyObject;
import com.palmergames.bukkit.towny.object.TownyWorld; import com.palmergames.bukkit.towny.object.TownyWorld;
Expand Down Expand Up @@ -113,7 +112,7 @@ public static List<String> getStatus(TownBlock townBlock) {
List<String> out = new ArrayList<String>(); List<String> out = new ArrayList<String>();


try { try {
TownBlockOwner owner; TownyObject owner;
Town town = townBlock.getTown(); Town town = townBlock.getTown();
TownyWorld world = townBlock.getWorld(); TownyWorld world = townBlock.getWorld();


Expand All @@ -123,7 +122,6 @@ public static List<String> getStatus(TownBlock townBlock) {
owner = townBlock.getTown(); owner = townBlock.getTown();
} }





out.add(ChatTools.formatTitle(TownyFormatter.getFormattedName(owner) + ((BukkitTools.isOnline(owner.getName())) ? TownySettings.getLangString("online") : ""))); out.add(ChatTools.formatTitle(TownyFormatter.getFormattedName(owner) + ((BukkitTools.isOnline(owner.getName())) ? TownySettings.getLangString("online") : "")));
if (!townBlock.getType().equals(TownBlockType.RESIDENTIAL)) if (!townBlock.getType().equals(TownBlockType.RESIDENTIAL))
Expand Down Expand Up @@ -187,7 +185,7 @@ public static List<String> getStatus(Resident resident, Player player) {
// Bank: 534 coins // Bank: 534 coins
if (TownySettings.isUsingEconomy()) if (TownySettings.isUsingEconomy())
if (TownyEconomyHandler.isActive()) if (TownyEconomyHandler.isActive())
out.add(String.format(TownySettings.getLangString("status_bank"), resident.getHoldingFormattedBalance())); out.add(String.format(TownySettings.getLangString("status_bank"), resident.getAccount().getHoldingFormattedBalance()));


// Town: Camelot // Town: Camelot
String line = TownySettings.getLangString("status_town"); String line = TownySettings.getLangString("status_town");
Expand Down Expand Up @@ -397,7 +395,7 @@ public static List<String> getStatus(Town town) {
String bankString = ""; String bankString = "";
if (TownySettings.isUsingEconomy()) { if (TownySettings.isUsingEconomy()) {
if (TownyEconomyHandler.isActive()) { if (TownyEconomyHandler.isActive()) {
bankString = String.format(TownySettings.getLangString("status_bank"), town.getHoldingFormattedBalance()); bankString = String.format(TownySettings.getLangString("status_bank"), town.getAccount().getHoldingFormattedBalance());
if (town.hasUpkeep()) if (town.hasUpkeep())
bankString += String.format(TownySettings.getLangString("status_bank_town2"), new BigDecimal(TownySettings.getTownUpkeepCost(town)).setScale(2, RoundingMode.HALF_UP).doubleValue()); bankString += String.format(TownySettings.getLangString("status_bank_town2"), new BigDecimal(TownySettings.getTownUpkeepCost(town)).setScale(2, RoundingMode.HALF_UP).doubleValue());
if (TownySettings.getUpkeepPenalty() > 0 && town.isOverClaimed()) if (TownySettings.getUpkeepPenalty() > 0 && town.isOverClaimed())
Expand Down Expand Up @@ -476,7 +474,7 @@ public static List<String> getStatus(Nation nation) {
String line = ""; String line = "";
if (TownySettings.isUsingEconomy()) if (TownySettings.isUsingEconomy())
if (TownyEconomyHandler.isActive()) { if (TownyEconomyHandler.isActive()) {
line = String.format(TownySettings.getLangString("status_bank"), nation.getHoldingFormattedBalance()); line = String.format(TownySettings.getLangString("status_bank"), nation.getAccount().getHoldingFormattedBalance());


if (TownySettings.getNationUpkeepCost(nation) > 0) if (TownySettings.getNationUpkeepCost(nation) > 0)
line += String.format(TownySettings.getLangString("status_bank_town2"), TownySettings.getNationUpkeepCost(nation)); line += String.format(TownySettings.getLangString("status_bank_town2"), TownySettings.getNationUpkeepCost(nation));
Expand Down Expand Up @@ -642,7 +640,7 @@ public static List<String> getTaxStatus(Resident resident) {
out.add(TownySettings.getLangString("status_res_taxexempt")); out.add(TownySettings.getLangString("status_res_taxexempt"));
} else { } else {
if (town.isTaxPercentage()) { if (town.isTaxPercentage()) {
out.add(String.format(TownySettings.getLangString("status_res_tax"), resident.getHoldingBalance() * town.getTaxes() / 100)); out.add(String.format(TownySettings.getLangString("status_res_tax"), resident.getAccount().getHoldingBalance() * town.getTaxes() / 100));
} else { } else {
out.add(String.format(TownySettings.getLangString("status_res_tax"), town.getTaxes())); out.add(String.format(TownySettings.getLangString("status_res_tax"), town.getTaxes()));


Expand Down
45 changes: 25 additions & 20 deletions src/com/palmergames/bukkit/towny/TownyLogger.java
@@ -1,9 +1,6 @@
package com.palmergames.bukkit.towny; package com.palmergames.bukkit.towny;


import com.palmergames.bukkit.towny.object.Nation; import com.palmergames.bukkit.towny.object.EconomyAccount;
import com.palmergames.bukkit.towny.object.Resident;
import com.palmergames.bukkit.towny.object.Town;
import com.palmergames.bukkit.towny.object.TownyEconomyObject;
import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -125,30 +122,38 @@ public void refreshDebugLogger() {
ctx.updateLoggers(); ctx.updateLoggers();
} }


public void logMoneyTransaction(TownyEconomyObject a, double amount, TownyEconomyObject b, String reason) { public void logMoneyTransaction(EconomyAccount a, double amount, EconomyAccount b, String reason) {

String sender;
String receiver;

if (a == null) {
sender = "None";
} else {
sender = a.getName();
}

if (b == null) {
receiver = "None";
} else {
receiver = b.getName();
}

if (reason == null) { if (reason == null) {
LOGGER_MONEY.info(String.format("%s,%s,%s,%s", "Unknown Reason", getObjectName(a), amount, getObjectName(b))); LOGGER_MONEY.info(String.format("%s,%s,%s,%s", "Unknown Reason", sender, amount, receiver));
} else { } else {
LOGGER_MONEY.info(String.format("%s,%s,%s,%s", reason, getObjectName(a), amount, getObjectName(b))); LOGGER_MONEY.info(String.format("%s,%s,%s,%s", reason, sender, amount, receiver));
} }
} }


private String getObjectName(TownyEconomyObject obj) { public void logMoneyTransaction(String a, double amount, String b, String reason) {
String type; if (reason == null) {
if (obj == null) { LOGGER_MONEY.info(String.format("%s,%s,%s,%s", "Unknown Reason", a, amount, b));
type = "Server";
} else if (obj instanceof Resident) {
type = "Resident";
} else if (obj instanceof Town) {
type = "Town";
} else if (obj instanceof Nation) {
type = "Nation";
} else { } else {
type = "?"; LOGGER_MONEY.info(String.format("%s,%s,%s,%s", reason, a, amount, b));
} }
return String.format("[%s] %s", type, obj != null ? obj.getName() : "");
} }

public static TownyLogger getInstance() { public static TownyLogger getInstance() {
return instance; return instance;
} }
Expand Down
Expand Up @@ -146,13 +146,13 @@ public String onPlaceholderRequest(Player player, String identifier) {
return nation; return nation;
case "town_balance": // %townyadvanced_town_balance% case "town_balance": // %townyadvanced_town_balance%
try { try {
balance = resident.getTown().getHoldingFormattedBalance(); balance = resident.getTown().getAccount().getHoldingFormattedBalance();
} catch (NotRegisteredException ignored) { } catch (NotRegisteredException ignored) {
} }
return balance; return balance;
case "nation_balance": // %townyadvanced_nation_balance% case "nation_balance": // %townyadvanced_nation_balance%
try { try {
balance = resident.getTown().getNation().getHoldingFormattedBalance(); balance = resident.getTown().getNation().getAccount().getHoldingFormattedBalance();
} catch (NotRegisteredException ignored) { } catch (NotRegisteredException ignored) {
} }
return balance; return balance;
Expand Down
14 changes: 7 additions & 7 deletions src/com/palmergames/bukkit/towny/command/NationCommand.java
Expand Up @@ -76,7 +76,7 @@ public class NationCommand extends BaseCommand implements CommandExecutor {
private static final Comparator<Nation> BY_NAME = (n1, n2) -> n1.getName().compareTo(n2.getName()); private static final Comparator<Nation> BY_NAME = (n1, n2) -> n1.getName().compareTo(n2.getName());
private static final Comparator<Nation> BY_BANK_BALANCE = (n1, n2) -> { private static final Comparator<Nation> BY_BANK_BALANCE = (n1, n2) -> {
try { try {
return Double.compare(n2.getHoldingBalance(), n1.getHoldingBalance()); return Double.compare(n2.getAccount().getHoldingBalance(), n1.getAccount().getHoldingBalance());
} catch (EconomyException e) { } catch (EconomyException e) {
throw new RuntimeException("Failed to get balance. Aborting."); throw new RuntimeException("Failed to get balance. Aborting.");
} }
Expand Down Expand Up @@ -874,7 +874,7 @@ private void nationDeposit(Player player, int amount) {


double bankcap = TownySettings.getNationBankCap(); double bankcap = TownySettings.getNationBankCap();
if (bankcap > 0) { if (bankcap > 0) {
if (amount + nation.getHoldingBalance() > bankcap) if (amount + nation.getAccount().getHoldingBalance() > bankcap)
throw new TownyException(String.format(TownySettings.getLangString("msg_err_deposit_capped"), bankcap)); throw new TownyException(String.format(TownySettings.getLangString("msg_err_deposit_capped"), bankcap));
} }


Expand All @@ -891,7 +891,7 @@ private void nationDeposit(Player player, int amount) {
return; return;
} }


if (!resident.payTo(amount, nation, "Nation Deposit")) if (!resident.getAccount().payTo(amount, nation, "Nation Deposit"))
throw new TownyException(TownySettings.getLangString("msg_insuf_funds")); throw new TownyException(TownySettings.getLangString("msg_insuf_funds"));


TownyMessaging.sendPrefixedNationMessage(nation, String.format(TownySettings.getLangString("msg_xx_deposited_xx"), resident.getName(), amount, "nation")); TownyMessaging.sendPrefixedNationMessage(nation, String.format(TownySettings.getLangString("msg_xx_deposited_xx"), resident.getName(), amount, "nation"));
Expand Down Expand Up @@ -1042,7 +1042,7 @@ public static void newNation(Player player, String name, String capitalName, boo
if ((filteredName == null) || universe.getDataSource().hasNation(filteredName)) if ((filteredName == null) || universe.getDataSource().hasNation(filteredName))
throw new TownyException(String.format(TownySettings.getLangString("msg_err_invalid_name"), name)); throw new TownyException(String.format(TownySettings.getLangString("msg_err_invalid_name"), name));


if (!noCharge && TownySettings.isUsingEconomy() && !town.pay(TownySettings.getNewNationPrice(), "New Nation Cost")) if (!noCharge && TownySettings.isUsingEconomy() && !town.getAccount().pay(TownySettings.getNewNationPrice(), "New Nation Cost"))
throw new TownyException(String.format(TownySettings.getLangString("msg_no_funds_new_nation2"), TownySettings.getNewNationPrice())); throw new TownyException(String.format(TownySettings.getLangString("msg_no_funds_new_nation2"), TownySettings.getNewNationPrice()));


newNation(name, town); newNation(name, town);
Expand All @@ -1063,7 +1063,7 @@ public static Nation newNation(String name, Town town) throws AlreadyRegisteredE
nation.setRegistered(System.currentTimeMillis()); nation.setRegistered(System.currentTimeMillis());
if (TownySettings.isUsingEconomy()) { if (TownySettings.isUsingEconomy()) {
try { try {
nation.setBalance(0, "Deleting Nation"); nation.getAccount().setBalance(0, "Deleting Nation");
} catch (EconomyException e) { } catch (EconomyException e) {
e.printStackTrace(); e.printStackTrace();
} }
Expand Down Expand Up @@ -2100,7 +2100,7 @@ else if (split[0].equalsIgnoreCase("taxes")) {


if(TownySettings.getNationRenameCost() > 0) { if(TownySettings.getNationRenameCost() > 0) {
try { try {
if (TownySettings.isUsingEconomy() && !nation.pay(TownySettings.getNationRenameCost(), String.format("Nation renamed to: %s", split[1]))) if (TownySettings.isUsingEconomy() && !nation.getAccount().pay(TownySettings.getNationRenameCost(), String.format("Nation renamed to: %s", split[1])))
throw new TownyException(String.format(TownySettings.getLangString("msg_err_no_money"), TownyEconomyHandler.getFormattedBalance(TownySettings.getNationRenameCost()))); throw new TownyException(String.format(TownySettings.getLangString("msg_err_no_money"), TownyEconomyHandler.getFormattedBalance(TownySettings.getNationRenameCost())));
} catch (EconomyException e) { } catch (EconomyException e) {
throw new TownyException("Economy Error"); throw new TownyException("Economy Error");
Expand Down Expand Up @@ -2264,7 +2264,7 @@ public static void nationToggle(Player player, String[] split, boolean admin, Na
boolean choice = !nation.isNeutral(); boolean choice = !nation.isNeutral();
double cost = TownySettings.getNationNeutralityCost(); double cost = TownySettings.getNationNeutralityCost();


if (choice && TownySettings.isUsingEconomy() && !nation.pay(cost, "Peaceful Nation Cost")) if (choice && TownySettings.isUsingEconomy() && !nation.getAccount().pay(cost, "Peaceful Nation Cost"))
throw new TownyException(TownySettings.getLangString("msg_nation_cant_peaceful")); throw new TownyException(TownySettings.getLangString("msg_nation_cant_peaceful"));


nation.setNeutral(choice); nation.setNeutral(choice);
Expand Down
4 changes: 2 additions & 2 deletions src/com/palmergames/bukkit/towny/command/PlotCommand.java
Expand Up @@ -195,7 +195,7 @@ public boolean parsePlotCommand(Player player, String[] split) throws TownyExcep
if (maxPlots >= 0 && resident.getTownBlocks().size() + selection.size() > maxPlots) if (maxPlots >= 0 && resident.getTownBlocks().size() + selection.size() > maxPlots)
throw new TownyException(String.format(TownySettings.getLangString("msg_max_plot_own"), maxPlots)); throw new TownyException(String.format(TownySettings.getLangString("msg_max_plot_own"), maxPlots));


if (TownySettings.isUsingEconomy() && (!resident.canPayFromHoldings(cost))) if (TownySettings.isUsingEconomy() && (!resident.getAccount().canPayFromHoldings(cost)))
throw new TownyException(String.format(TownySettings.getLangString("msg_no_funds_claim"), selection.size(), TownyEconomyHandler.getFormattedBalance(cost))); throw new TownyException(String.format(TownySettings.getLangString("msg_no_funds_claim"), selection.size(), TownyEconomyHandler.getFormattedBalance(cost)));


// Start the claim task // Start the claim task
Expand Down Expand Up @@ -519,7 +519,7 @@ public boolean parsePlotCommand(Player player, String[] split) throws TownyExcep
Coord key = Coord.parseCoord(plugin.getCache(player).getLastLocation()); Coord key = Coord.parseCoord(plugin.getCache(player).getLastLocation());


if (OutpostUtil.OutpostTests(town, resident, townyWorld, key, isAdmin, true)) { if (OutpostUtil.OutpostTests(town, resident, townyWorld, key, isAdmin, true)) {
if (TownySettings.isUsingEconomy() && !town.pay(TownySettings.getOutpostCost(), String.format("Plot Set Outpost"))) if (TownySettings.isUsingEconomy() && !town.getAccount().pay(TownySettings.getOutpostCost(), String.format("Plot Set Outpost")))
throw new TownyException(TownySettings.getLangString("msg_err_cannot_afford_to_set_outpost")); throw new TownyException(TownySettings.getLangString("msg_err_cannot_afford_to_set_outpost"));


TownyMessaging.sendMessage(player, String.format(TownySettings.getLangString("msg_plot_set_cost"), TownyEconomyHandler.getFormattedBalance(TownySettings.getOutpostCost()), TownySettings.getLangString("outpost"))); TownyMessaging.sendMessage(player, String.format(TownySettings.getLangString("msg_plot_set_cost"), TownyEconomyHandler.getFormattedBalance(TownySettings.getOutpostCost()), TownySettings.getLangString("outpost")));
Expand Down
4 changes: 2 additions & 2 deletions src/com/palmergames/bukkit/towny/command/ResidentCommand.java
Expand Up @@ -173,9 +173,9 @@ public void parseResidentCommand(final Player player, String[] split) {


if (split[1].equalsIgnoreCase("paybail")) { if (split[1].equalsIgnoreCase("paybail")) {
Resident resident = townyUniverse.getDataSource().getResident(player.getName()); Resident resident = townyUniverse.getDataSource().getResident(player.getName());
if (resident.canPayFromHoldings(TownySettings.getBailAmount())) { if (resident.getAccount().canPayFromHoldings(TownySettings.getBailAmount())) {
Town JailTown = townyUniverse.getDataSource().getTown(resident.getJailTown()); Town JailTown = townyUniverse.getDataSource().getTown(resident.getJailTown());
resident.payTo(TownySettings.getBailAmount(), JailTown, "Bail"); resident.getAccount().payTo(TownySettings.getBailAmount(), JailTown, "Bail");
resident.setJailed(false); resident.setJailed(false);
resident.setJailSpawn(0); resident.setJailSpawn(0);
resident.setJailTown(""); resident.setJailTown("");
Expand Down

0 comments on commit 734a3f6

Please sign in to comment.