diff --git a/pom.xml b/pom.xml
index 6c6537d..3c96b0c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
21
UTF-8
full
- 0.2.0
+ 0.2.4
2.0.1
2.0.0
2.0.1
diff --git a/src/main/java/net/tfminecraft/simplefactions/managers/FactionManager.java b/src/main/java/net/tfminecraft/simplefactions/managers/FactionManager.java
index f73fd1d..307fd70 100644
--- a/src/main/java/net/tfminecraft/simplefactions/managers/FactionManager.java
+++ b/src/main/java/net/tfminecraft/simplefactions/managers/FactionManager.java
@@ -54,6 +54,7 @@
import net.tfminecraft.simplefactions.government.movement.cause.Cause;
import net.tfminecraft.tlibs.TLibs;
import net.tfminecraft.denareconomy.DenarEconomy;
+import net.tfminecraft.denareconomy.accounts.OfflineModifier;
import net.tfminecraft.denareconomy.enums.Accounts;
public class FactionManager implements Listener{
@@ -495,8 +496,6 @@ public void time() {
}
}
- // Existing configuration identifies offline profiles by player name, not UUID.
- @SuppressWarnings("deprecation")
public void settleIncome() {
DailyGuildTransfers buffer = new DailyGuildTransfers();
@@ -555,7 +554,7 @@ public void settleIncome() {
buffer,
DenarEconomyPlayerBank.INSTANCE,
PlayerEconomyManager.get(),
- name -> Bukkit.getOfflinePlayer(name).getUniqueId());
+ OfflineModifier::playerId);
for (Guild g : getAllGuilds()) {
g.refreshDividendEligibility();
}
diff --git a/src/main/java/net/tfminecraft/simplefactions/managers/PlayerManager.java b/src/main/java/net/tfminecraft/simplefactions/managers/PlayerManager.java
index 934fa05..3bfbac3 100644
--- a/src/main/java/net/tfminecraft/simplefactions/managers/PlayerManager.java
+++ b/src/main/java/net/tfminecraft/simplefactions/managers/PlayerManager.java
@@ -1,7 +1,5 @@
package net.tfminecraft.simplefactions.managers;
-import java.util.UUID;
-
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Material;
@@ -269,8 +267,6 @@ private ItemStack signedAgreement(
return i;
}
- // Existing configuration identifies offline profiles by player name, not UUID.
- @SuppressWarnings("deprecation")
@EventHandler
public void earnMoney(PlayerEarnMoneyEvent e) {
String playerName = e.getPlayer();
@@ -285,11 +281,7 @@ public void earnMoney(PlayerEarnMoneyEvent e) {
}
}
}
- Player online = Bukkit.getPlayerExact(playerName);
- UUID playerUuid = online != null
- ? online.getUniqueId()
- : Bukkit.getOfflinePlayer(playerName).getUniqueId();
- PlayerLedger ledger = PlayerEconomyManager.get().getLedger(playerUuid);
+ PlayerLedger ledger = PlayerEconomyManager.get().getLedger(playerName);
if (gross > 0) {
ledger.add(PlayerCashflow.EARNINGS, gross);
}
diff --git a/src/main/java/net/tfminecraft/simplefactions/mercenary/contract/MercenaryEngagements.java b/src/main/java/net/tfminecraft/simplefactions/mercenary/contract/MercenaryEngagements.java
index b633625..bfef86c 100644
--- a/src/main/java/net/tfminecraft/simplefactions/mercenary/contract/MercenaryEngagements.java
+++ b/src/main/java/net/tfminecraft/simplefactions/mercenary/contract/MercenaryEngagements.java
@@ -5,9 +5,7 @@
import java.util.List;
import java.util.UUID;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-
+import net.tfminecraft.denareconomy.accounts.OfflineModifier;
import net.tfminecraft.simplefactions.guild.Guild;
import net.tfminecraft.simplefactions.managers.FactionManager;
import net.tfminecraft.simplefactions.objects.Faction;
@@ -47,15 +45,8 @@ public static PlayerUuidLookup uuidLookup() {
return uuids;
}
- // Existing configuration identifies offline profiles by player name, not UUID.
- @SuppressWarnings("deprecation")
public static PlayerUuidLookup bukkitUuids() {
- return name -> {
- if (name == null || Bukkit.getServer() == null) return null;
- Player online = Bukkit.getPlayerExact(name);
- if (online != null) return online.getUniqueId();
- return Bukkit.getOfflinePlayer(name).getUniqueId();
- };
+ return OfflineModifier::playerId;
}
public static List on(War war, Side side) {
diff --git a/src/main/java/net/tfminecraft/simplefactions/player/PlayerEconomyManager.java b/src/main/java/net/tfminecraft/simplefactions/player/PlayerEconomyManager.java
index cb52cf7..3ec4b41 100644
--- a/src/main/java/net/tfminecraft/simplefactions/player/PlayerEconomyManager.java
+++ b/src/main/java/net/tfminecraft/simplefactions/player/PlayerEconomyManager.java
@@ -4,9 +4,7 @@
import java.util.Map;
import java.util.UUID;
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
-
+import net.tfminecraft.denareconomy.accounts.OfflineModifier;
import net.tfminecraft.simplefactions.SimpleFactions;
import net.tfminecraft.simplefactions.player.income.PlayerLedger;
@@ -24,14 +22,8 @@ public PlayerLedger getLedger(UUID playerUuid) {
return ledgers.computeIfAbsent(playerUuid, ignored -> new PlayerLedger());
}
- // Existing configuration identifies offline profiles by player name, not UUID.
- @SuppressWarnings("deprecation")
public PlayerLedger getLedger(String playerName) {
- if (playerName == null || playerName.isBlank()) {
- return new PlayerLedger();
- }
- OfflinePlayer offline = Bukkit.getOfflinePlayer(playerName);
- UUID uuid = offline.getUniqueId();
+ UUID uuid = OfflineModifier.playerId(playerName);
if (uuid == null) {
return new PlayerLedger();
}
diff --git a/src/main/java/net/tfminecraft/simplefactions/utils/Wealth.java b/src/main/java/net/tfminecraft/simplefactions/utils/Wealth.java
index e33073c..5544bf0 100644
--- a/src/main/java/net/tfminecraft/simplefactions/utils/Wealth.java
+++ b/src/main/java/net/tfminecraft/simplefactions/utils/Wealth.java
@@ -4,29 +4,18 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.bukkit.OfflinePlayer;
import net.tfminecraft.simplefactions.guild.Guild;
import net.tfminecraft.simplefactions.managers.FactionManager;
import net.tfminecraft.simplefactions.objects.Faction;
-import net.tfminecraft.denareconomy.DenarEconomy;
+import net.tfminecraft.denareconomy.accounts.OfflineModifier;
import net.tfminecraft.denareconomy.enums.Accounts;
import net.tfminecraft.simplefactions.managers.RelationManager;
public class Wealth {
- // Existing configuration identifies offline profiles by player name, not UUID.
- @SuppressWarnings("deprecation")
public static double wealth(String player) {
- double wealth = 0;
- OfflinePlayer op = Bukkit.getOfflinePlayer(player);
- if(op.hasPlayedBefore()) {
- UUID uuid = op.getUniqueId();
- wealth += DenarEconomy.getMoneyManager().getBalance(Accounts.POUCH, uuid);
- wealth += DenarEconomy.getMoneyManager().getBalance(Accounts.BANK, uuid);
- }
+ double wealth = OfflineModifier.balance(player, Accounts.POUCH);
+ wealth += OfflineModifier.balance(player, Accounts.BANK);
Guild guild = FactionManager.getGuildByMember(player);
if(guild != null) {
if(guild.getLeader().equalsIgnoreCase(player) && guild.isBase()) {
diff --git a/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/DenarEconomyPlayerBank.java b/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/DenarEconomyPlayerBank.java
index a31b6ff..93a23db 100644
--- a/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/DenarEconomyPlayerBank.java
+++ b/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/DenarEconomyPlayerBank.java
@@ -2,7 +2,7 @@
import java.util.UUID;
-import net.tfminecraft.denareconomy.DenarEconomy;
+import net.tfminecraft.denareconomy.accounts.OfflineModifier;
import net.tfminecraft.denareconomy.enums.Accounts;
public final class DenarEconomyPlayerBank {
@@ -12,6 +12,9 @@ public interface PlayerBank {
boolean withdrawFromBank(UUID playerUuid, double amount);
boolean depositToBank(UUID playerUuid, double amount);
+
+ /** Account id for this name, whether or not they are logged in. */
+ UUID resolve(String playerName);
}
public interface PlayerPouch {
@@ -27,54 +30,34 @@ private DenarEconomyPlayerBank() {}
public static final class Impl implements PlayerBank, PlayerPouch {
private Impl() {}
+ @Override
+ public UUID resolve(String playerName) {
+ return OfflineModifier.playerId(playerName);
+ }
+
@Override
public double getBankBalance(UUID playerUuid) {
- if (playerUuid == null) {
- return 0.0;
- }
- DenarEconomy.getPlayerManager().get(playerUuid);
- return DenarEconomy.getMoneyManager().getBalance(Accounts.BANK, playerUuid);
+ return OfflineModifier.balance(playerUuid, Accounts.BANK);
}
@Override
public boolean withdrawFromBank(UUID playerUuid, double amount) {
- return withdraw(playerUuid, amount, Accounts.BANK);
+ return amount > 0.0 && OfflineModifier.apply(playerUuid, Accounts.BANK, -amount);
}
@Override
public boolean depositToBank(UUID playerUuid, double amount) {
- if (playerUuid == null || amount <= 0.0) {
- return false;
- }
- DenarEconomy.getPlayerManager().get(playerUuid);
- DenarEconomy.getMoneyManager().changeBal(playerUuid.toString(), amount, Accounts.BANK);
- return true;
+ return amount > 0.0 && OfflineModifier.apply(playerUuid, Accounts.BANK, amount);
}
@Override
public double getPouchBalance(UUID playerUuid) {
- if (playerUuid == null) {
- return 0.0;
- }
- DenarEconomy.getPlayerManager().get(playerUuid);
- return DenarEconomy.getMoneyManager().getBalance(Accounts.POUCH, playerUuid);
+ return OfflineModifier.balance(playerUuid, Accounts.POUCH);
}
@Override
public boolean withdrawFromPouch(UUID playerUuid, double amount) {
- return withdraw(playerUuid, amount, Accounts.POUCH);
- }
-
- private boolean withdraw(UUID playerUuid, double amount, Accounts account) {
- if (playerUuid == null || amount <= 0.0) {
- return false;
- }
- double balance = DenarEconomy.getMoneyManager().getBalance(account, playerUuid);
- if (balance < amount) {
- return false;
- }
- DenarEconomy.getMoneyManager().changeBal(playerUuid.toString(), -amount, account);
- return true;
+ return amount > 0.0 && OfflineModifier.apply(playerUuid, Accounts.POUCH, -amount);
}
}
}
diff --git a/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepService.java b/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepService.java
index 66ba892..a73319e 100644
--- a/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepService.java
+++ b/src/main/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepService.java
@@ -54,8 +54,9 @@ public void processDailyUpkeep() {
continue;
}
String playerName = VehicleOwnershipQueries.playerNameFromOwner(vehicle.getOwner());
- UUID playerUuid = VehicleOwnershipQueries.resolvePlayerUuid(playerName);
+ UUID playerUuid = playerBank.resolve(playerName);
if (playerUuid == null) {
+ markUnpaid(vehicle.getUuid(), vehicle.getTypeId(), null, upkeep, now);
continue;
}
chargePlayer(playerUuid, upkeep, vehicle.getTypeId(), vehicle.getUuid(), now);
@@ -80,30 +81,7 @@ private void chargePlayer(
return;
}
if (!playerBank.withdrawFromBank(playerUuid, upkeep)) {
- maintenanceStore.markUnpaid(vehicleUuid, nowMillis);
- persistMaintenance();
- SimpleFactions plugin = SimpleFactions.getInstance();
- if (plugin != null) {
- plugin.getLogger().info(
- "Vehicle upkeep unpaid for player "
- + playerUuid
- + " vehicle "
- + vehicleTypeId
- + " amount "
- + upkeep
- );
- }
- Player online = null;
- if (Bukkit.getServer() != null) {
- online = Bukkit.getPlayer(playerUuid);
- }
- if (online != null && online.isOnline()) {
- online.sendMessage(
- "§cCould not pay vehicle upkeep ("
- + vehicleTypeId
- + "): insufficient bank balance."
- );
- }
+ markUnpaid(vehicleUuid, vehicleTypeId, playerUuid, upkeep, nowMillis);
return;
}
economyManager.getLedger(playerUuid).add(PlayerCashflow.VEHICLE_UPKEEP, -upkeep);
@@ -111,6 +89,38 @@ private void chargePlayer(
persistMaintenance();
}
+ private void markUnpaid(
+ String vehicleUuid,
+ String vehicleTypeId,
+ UUID playerUuid,
+ double upkeep,
+ long nowMillis) {
+ maintenanceStore.markUnpaid(vehicleUuid, nowMillis);
+ persistMaintenance();
+ SimpleFactions plugin = SimpleFactions.getInstance();
+ if (plugin != null) {
+ plugin.getLogger().info(
+ "Vehicle upkeep unpaid for player "
+ + playerUuid
+ + " vehicle "
+ + vehicleTypeId
+ + " amount "
+ + upkeep
+ );
+ }
+ if (playerUuid == null || Bukkit.getServer() == null) {
+ return;
+ }
+ Player online = Bukkit.getPlayer(playerUuid);
+ if (online != null && online.isOnline()) {
+ online.sendMessage(
+ "§cCould not pay vehicle upkeep ("
+ + vehicleTypeId
+ + "): insufficient bank balance."
+ );
+ }
+ }
+
private void persistMaintenance() {
SimpleFactions plugin = SimpleFactions.getInstance();
if (plugin != null) {
diff --git a/src/main/java/net/tfminecraft/simplefactions/vehicles/registry/VehicleOwnershipQueries.java b/src/main/java/net/tfminecraft/simplefactions/vehicles/registry/VehicleOwnershipQueries.java
index bf8f24e..578f51c 100644
--- a/src/main/java/net/tfminecraft/simplefactions/vehicles/registry/VehicleOwnershipQueries.java
+++ b/src/main/java/net/tfminecraft/simplefactions/vehicles/registry/VehicleOwnershipQueries.java
@@ -9,6 +9,7 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
+import net.tfminecraft.denareconomy.accounts.OfflineModifier;
import net.tfminecraft.simplefactions.loaders.VehiclesConfigLoader;
import net.tfminecraft.vehicleframework.data.OwnedVehicleSummary;
import net.tfminecraft.vehicleframework.VehicleFramework;
@@ -91,18 +92,8 @@ public static int countExcludingIgnoreLimit(List personal)
return count;
}
- // Existing configuration identifies offline profiles by player name, not UUID.
- @SuppressWarnings("deprecation")
public static UUID resolvePlayerUuid(String playerName) {
- if (playerName == null || playerName.isBlank() || Bukkit.getServer() == null) {
- return null;
- }
- Player online = Bukkit.getPlayerExact(playerName);
- if (online != null) {
- return online.getUniqueId();
- }
- OfflinePlayer offline = Bukkit.getOfflinePlayer(playerName);
- return offline.getUniqueId();
+ return OfflineModifier.playerId(playerName);
}
public static String resolvePlayerName(UUID playerUuid) {
diff --git a/src/test/java/net/tfminecraft/simplefactions/utils/PostSettlementPayoutsTest.java b/src/test/java/net/tfminecraft/simplefactions/utils/PostSettlementPayoutsTest.java
index a77e2bd..aa12ce0 100644
--- a/src/test/java/net/tfminecraft/simplefactions/utils/PostSettlementPayoutsTest.java
+++ b/src/test/java/net/tfminecraft/simplefactions/utils/PostSettlementPayoutsTest.java
@@ -189,5 +189,10 @@ public boolean depositToBank(UUID playerUuid, double amount) {
balances.put(playerUuid, balance(playerUuid) + amount);
return true;
}
+
+ @Override
+ public UUID resolve(String playerName) {
+ return null;
+ }
}
}
diff --git a/src/test/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepServiceTest.java b/src/test/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepServiceTest.java
index a847c40..71cf530 100644
--- a/src/test/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepServiceTest.java
+++ b/src/test/java/net/tfminecraft/simplefactions/vehicles/maintenance/VehicleUpkeepServiceTest.java
@@ -88,6 +88,7 @@ void tearDown() throws IOException {
void successfulUpkeepWithdrawsBankAndRecordsLedger() {
UUID playerUuid = UUID.randomUUID();
bank.setBalance(playerUuid, 100.0);
+ bank.remember("Alice", playerUuid);
VehicleOwnershipQueries.setSourceForTests(
new FakeOwnedInventory().add("vehicle-1", "ironclad", "player_Alice"));
@@ -100,10 +101,45 @@ void successfulUpkeepWithdrawsBankAndRecordsLedger() {
assertFalse(store.isUnpaid("vehicle-1"));
}
+ @Test
+ void offlineOwnerIsChargedOnTheResolvedAccount() {
+ UUID playerUuid = UUID.randomUUID();
+ UUID standIn = UUID.randomUUID();
+ bank.setBalance(playerUuid, 100.0);
+ bank.remember("Alice", playerUuid);
+ VehicleOwnershipQueries.setSourceForTests(
+ new FakeOwnedInventory().add("vehicle-1", "ironclad", "player_Alice"));
+
+ try (MockedStatic bukkit = mockBukkit("Alice", standIn)) {
+ service.processDailyUpkeep();
+ }
+
+ assertEquals(80.0, bank.getBankBalance(playerUuid));
+ assertEquals(0.0, bank.getBankBalance(standIn));
+ assertEquals(-20.0, economyManager.getLedger(playerUuid).getAmount(PlayerCashflow.VEHICLE_UPKEEP));
+ assertFalse(store.isUnpaid("vehicle-1"));
+ }
+
+ @Test
+ void unknownOwnerIsUnpaidInsteadOfChargedToAStandIn() {
+ UUID standIn = UUID.randomUUID();
+ bank.setBalance(standIn, 100.0);
+ VehicleOwnershipQueries.setSourceForTests(
+ new FakeOwnedInventory().add("vehicle-1", "ironclad", "player_Alice"));
+
+ try (MockedStatic bukkit = mockBukkit("Alice", standIn)) {
+ service.processDailyUpkeep();
+ }
+
+ assertEquals(100.0, bank.getBankBalance(standIn));
+ assertTrue(store.isUnpaid("vehicle-1"));
+ }
+
@Test
void insufficientBalanceSkipsCharge() {
UUID playerUuid = UUID.randomUUID();
bank.setBalance(playerUuid, 10.0);
+ bank.remember("Alice", playerUuid);
VehicleOwnershipQueries.setSourceForTests(
new FakeOwnedInventory().add("vehicle-1", "ironclad", "player_Alice"));
@@ -120,6 +156,7 @@ void insufficientBalanceSkipsCharge() {
void successfulUpkeepClearsExistingUnpaid() {
UUID playerUuid = UUID.randomUUID();
bank.setBalance(playerUuid, 100.0);
+ bank.remember("Alice", playerUuid);
store.markUnpaid("vehicle-1", 1L);
VehicleOwnershipQueries.setSourceForTests(
new FakeOwnedInventory().add("vehicle-1", "ironclad", "player_Alice"));
@@ -145,6 +182,7 @@ void hourlyDecayDamagesUnpaidVehicles() {
void skipsBerthedVehicles() {
UUID playerUuid = UUID.randomUUID();
bank.setBalance(playerUuid, 100.0);
+ bank.remember("Alice", playerUuid);
registry.register(new PlayerVehicleRecord(
playerUuid,
"vehicle-1",
@@ -203,10 +241,24 @@ private DecayCall(String uuid, double fractionOfMax, double minHealthFraction) {
private static final class TestPlayerBank implements PlayerBank {
private final Map balances = new HashMap<>();
+ private final Map names = new HashMap<>();
+
void setBalance(UUID playerUuid, double balance) {
balances.put(playerUuid, balance);
}
+ void remember(String playerName, UUID playerUuid) {
+ names.put(playerName.toLowerCase(java.util.Locale.ROOT), playerUuid);
+ }
+
+ @Override
+ public UUID resolve(String playerName) {
+ if (playerName == null) {
+ return null;
+ }
+ return names.get(playerName.toLowerCase(java.util.Locale.ROOT));
+ }
+
@Override
public double getBankBalance(UUID playerUuid) {
return balances.getOrDefault(playerUuid, 0.0);