Towny Classic

Towny Classic

3.2k Downloads

Conversion of legacy economy fails

alekso56 opened this issue · 11 comments

commented

What steps will reproduce the problem?

[16:33:51 WARN]: [Towny] Async task for Towny v0.101.0.0 generated an exception
java.lang.NullPointerException: Cannot invoke "java.util.UUID.version()" because "this.uuid" is null
        at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.object.economy.Account.asOfflinePlayer(Account.java:462) ~[Towny-0.101.0.0.jar:?]
        at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.object.economy.adapter.VaultEconomyAdapter.hasAccount(VaultEconomyAdapter.java:32) ~[Towny-0.101.0.0.jar:?]
        at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.command.TownyAdminCommand.lambda$parseAdminConvertEconomyCommand$18(TownyAdminCommand.java:2985) ~[Towny-0.101.0.0.jar:?]
        at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.scheduling.TaskScheduler.lambda$runAsync$9(TaskScheduler.java:114) ~[Towny-0.101.0.0.jar:?]
        at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.scheduling.impl.FoliaTaskScheduler.lambda$runAsync$6(FoliaTaskScheduler.java:126) ~[Towny-0.101.0.0.jar:?]
        at io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler$AsyncScheduledTask.run(FoliaAsyncScheduler.java:217) ~[paper-1.21.3.jar:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

What is the expected output?

More than 50% progress before it exits.

Towny version

v0.101.0.0

Server version

1.21.3

Please use Pastebin.com to link the following files

  1. Your full server startup from the logs\latest.log:
  2. Your Towny config.yml:
  3. Your townyperms.yml:
  4. Your log's error:

(optional) If this is to do with permissions,
5. Your permissions file:

(optional) If this is to do with chat,
6. Your chatconfig.yml:
7. Your channels.yml:

commented
commented
commented

Im using essentialsx, 2.21.0-dev+149-424816e.

commented
[17:31:59] [Server thread/INFO]: alekso56 issued server command: /townyadmin eco convert modern
[17:32:00] [Server thread/INFO]: alekso56 issued server command: /towny:confirm
[17:32:13] [Folia Async Scheduler Thread #4/INFO]: [Essentials] Created a User for alekso56 (246b09e6-60f3-4daa-a28c-60a4ae28e71e) for non Bukkit type: com.earth2me.essentials.OfflinePlayerStub
[17:32:13] [Folia Async Scheduler Thread #4/WARN]: [Essentials] Essentials will not log any more warnings for com.earth2me.essentials.OfflinePlayerStub. Please report this to the EssentialsX team.
[17:32:13] [Folia Async Scheduler Thread #4/WARN]: [Towny] Async task for Towny v0.101.0.0 generated an exception
java.lang.NullPointerException: Cannot invoke "java.util.UUID.version()" because "this.uuid" is null
	at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.object.economy.Account.asOfflinePlayer(Account.java:462) ~[Towny-0.101.0.0.jar:?]
	at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.object.economy.adapter.VaultEconomyAdapter.hasAccount(VaultEconomyAdapter.java:32) ~[Towny-0.101.0.0.jar:?]
	at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.command.TownyAdminCommand.lambda$parseAdminConvertEconomyCommand$18(TownyAdminCommand.java:2985) ~[Towny-0.101.0.0.jar:?]
	at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.scheduling.TaskScheduler.lambda$runAsync$9(TaskScheduler.java:114) ~[Towny-0.101.0.0.jar:?]
	at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.scheduling.impl.FoliaTaskScheduler.lambda$runAsync$6(FoliaTaskScheduler.java:126) ~[Towny-0.101.0.0.jar:?]
	at io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler$AsyncScheduledTask.run(FoliaAsyncScheduler.java:217) ~[paper-1.21.3.jar:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
	at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

commented

Turn on debug_mode in the towny config and then try converting again, the log should show more information.

commented

It basicly prints this:

[02:40:26 INFO]: Found 7555 accounts to convert. Beginning conversion now.
[17:32:13] [Folia Async Scheduler Thread #4/INFO]: [Essentials] Created a User for alekso56 (246b09e6-60f3-4daa-a28c-60a4ae28e71e) for non Bukkit type: com.earth2me.essentials.OfflinePlayerStub
[17:32:13] [Folia Async Scheduler Thread #4/WARN]: [Essentials] Essentials will not log any more warnings for com.earth2me.essentials.OfflinePlayerStub. Please report this to the EssentialsX team.
[Towny] Creating new account for 246b09e6-60f3-4daa-a28c-60a4ae28e71e 
 [Towny] Setting balance of account 246b09e6-60f3-4daa-a28c-60a4ae28e71e to 300.0

untill randomly this error appears after "setting balance of account"
so it clearly does not get the uuid from whatever essentials or offline player is feeding it, maybe just a username.

[02:40:26 DEBUG]: [Towny] Setting balance of account 3d1d4125-922c-47b4-ae8c-e863ff654f43 to 300.0
[02:40:26 WARN]: [Towny] Async task for Towny v0.101.0.0 generated an exception
java.lang.NullPointerException: Cannot invoke "java.util.UUID.version()" because "this.uuid" is null
       at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.object.economy.Account.asOfflinePlayer(Account.java:462) ~[Towny-0.101.0.0.jar:?]
       at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.object.economy.adapter.VaultEconomyAdapter.hasAccount(VaultEconomyAdapter.java:32) ~[Towny-0.101.0.0.jar:?]
       at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.command.TownyAdminCommand.lambda$parseAdminConvertEconomyCommand$18(TownyAdminCommand.java:2985) ~[Towny-0.101.0.0.jar:?]
       at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.scheduling.TaskScheduler.lambda$runAsync$9(TaskScheduler.java:114) ~[Towny-0.101.0.0.jar:?]
       at Towny-0.101.0.0.jar/com.palmergames.bukkit.towny.scheduling.impl.FoliaTaskScheduler.lambda$runAsync$6(FoliaTaskScheduler.java:126) ~[Towny-0.101.0.0.jar:?]
       at io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler$AsyncScheduledTask.run(FoliaAsyncScheduler.java:217) ~[paper-1.21.3.jar:?]
       at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
       at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
       at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

It could also be that the player data does not exist, since the world was wiped with all playerdata.

commented

I would still like to see your actual startup log and not just snippets. It was asked for in the initial form you skipped.

That being said, essentials eco has never worked well with Towny because of how they used to handle Vault, and there could be more modern issues. Our modern eco implementation did have some consideration for esseco added to it, using a special version of UUID so they know it is not a normal player.

Also, I don't really understand what you mean here:

It could also be that the player data does not exist, since the world was wiped with all playerdata.

As Towny is not going to use the server playerdata, it will be using Towny's own files to convert residents, towns, nations, the server account, over to new Accounts we store in your economy plugin. It could be that this playerdata is used by esseco, and it could cause them issues. I don't know.

Please show me the full startup log, and conversion process, while debug_mode is true.

commented
commented

I've rechecked and we don't intentionally make any Accounts with null UUIDs.

commented

Something has no UUID recorded, which shouldn't be possible.

commented

is there something i can do to find out which file or something that contains a null UUID?