VERY IMPORTANT - Bug with portfolio access
Description
When a contract player's portfolio contains a contract owned by a player who didn't connect since the last server starting, the portfolio menu is blocked at the first view and try to go at another view do nothing et display an error in console.
How to reproduce
- Take the contract of a player
- Restart the server
- Try to access at one of the non default views
Informations
Plugin version : 1.2.6
Annex
The error :
[17:49:40 WARN]: [Contracts] Task #5075 for Contracts v1.6.2 generated an exception
java.lang.NullPointerException: Cannot invoke "Object.toString()" because "<parameter2>" is null
at fr.phoenix.contracts.gui.objects.item.Placeholders.register(Placeholders.java:20) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.contract.Contract.lambda$getContractPlaceholder$37(Contract.java:800) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.player.PlayerData.loadAndRun(PlayerData.java:248) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.contract.Contract.getContractPlaceholder(Contract.java:799) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.ContractPortfolioViewer$ContractItem.getPlaceholders(ContractPortfolioViewer.java:142) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.ContractPortfolioViewer$ContractItem.getPlaceholders(ContractPortfolioViewer.java:86) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.ContractPortfolioViewer$ResolvedContractItem.getPlaceholders(ContractPortfolioViewer.java:197) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.ContractPortfolioViewer$ResolvedContractItem.getPlaceholders(ContractPortfolioViewer.java:189) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.objects.item.InventoryItem.getDisplayedItem(InventoryItem.java:148) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.objects.item.InventoryItem.getDisplayedItem(InventoryItem.java:137) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.ContractPortfolioViewer$ContractItem.getDisplayedItem(ContractPortfolioViewer.java:130) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.ContractPortfolioViewer$ContractItem.getDisplayedItem(ContractPortfolioViewer.java:86) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.objects.item.InventoryItem.display(InventoryItem.java:117) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.objects.GeneratedInventory.getInventory(GeneratedInventory.java:86) ~[Contracts-1.6.2.jar:?]
at fr.phoenix.contracts.gui.objects.GeneratedInventory.lambda$open$0(GeneratedInventory.java:105) ~[Contracts-1.6.2.jar:?]
at org.bukkit.craftbukkit.v1_20_R2.scheduler.CraftTask.run(CraftTask.java:101) ~[paper-1.20.2.jar:git-Paper-307]
at org.bukkit.craftbukkit.v1_20_R2.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:480) ~[paper-1.20.2.jar:git-Paper-307]
at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1470) ~[paper-1.20.2.jar:git-Paper-307]
at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:446) ~[paper-1.20.2.jar:git-Paper-307]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1379) ~[paper-1.20.2.jar:git-Paper-307]
at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1156) ~[paper-1.20.2.jar:git-Paper-307]
at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315) ~[paper-1.20.2.jar:git-Paper-307]
at java.lang.Thread.run(Thread.java:840) ~[?:?]