Skip to content

Commit d40171c

Browse files
committed
Fix exception raised when attempting to vote
Seems like Bukkit / Spigot API changes have caused the vote menu to raise an exception and crash when attempting to vote in an election. Either that, or it's because we removed cached player state from the worlds we're using this plugin in, and we didn't notice it broke things. In any case, a new version of triumph-gui (3.1.6 -- weirdly we were using 3.2 previously, but such a version doesn't actually seem to exist) coupled with some changes to make sure we don't pass a null owner to the SkullBuilder.owne() api seems to have fixed the issues.
1 parent 021318d commit d40171c

File tree

6 files changed

+34
-5
lines changed

6 files changed

+34
-5
lines changed

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ subprojects {
5656
compileJava.options.encoding = "UTF-8"
5757
compileTestJava.options.encoding = "UTF-8"
5858

59-
version = "MCPD-1.2.5"
59+
version = "MCPD-1.2.6"
6060
group = "me.lorenzo0111"
6161

6262
repositories {

elections-spigot/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ dependencies {
5252
implementation('space.rocketplugins.pluginslib:bukkit:2.0.3.2')
5353
implementation("net.kyori:adventure-platform-bukkit:4.3.0")
5454
implementation('org.bstats:bstats-bukkit:3.0.2')
55-
implementation("dev.triumphteam:triumph-gui:3.2")
55+
implementation("dev.triumphteam:triumph-gui:3.1.6")
5656

5757
slim('com.github.cryptomorin:XSeries:9.6.1.1')
5858

elections-spigot/src/main/java/me/lorenzo0111/elections/ElectionsPlus.java

+21
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656

5757
import org.bukkit.Bukkit;
5858
import org.bukkit.Location;
59+
import org.bukkit.OfflinePlayer;
5960
import org.bukkit.World;
6061
import org.bukkit.block.Block;
6162
import org.bukkit.plugin.RegisteredServiceProvider;
@@ -731,4 +732,24 @@ public EClaim findClaimByGpId(Long gpid) {
731732

732733
return null;
733734
}
735+
736+
/*
737+
* NOTE(tadhunt): This is a hack to make sure that we have a non-null OfflinePlayer to
738+
* use for the ItemBuilder API, otherwise we end up crashing with weird exceptions.
739+
*/
740+
public OfflinePlayer getPartyOwner(Party party, OfflinePlayer defaultOwner) {
741+
UUID nilUuid = new UUID(0, 0);
742+
UUID partyOwnerUuid = party.getOwner();
743+
744+
if (partyOwnerUuid.equals(nilUuid)) {
745+
return defaultOwner;
746+
}
747+
748+
try {
749+
return Bukkit.getOfflinePlayer(party.getOwner());
750+
} catch(Exception e) {
751+
return defaultOwner;
752+
}
753+
}
754+
734755
}

elections-spigot/src/main/java/me/lorenzo0111/elections/menus/AddPartyMenu.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import net.kyori.adventure.text.Component;
3737
import org.bukkit.Bukkit;
3838
import org.bukkit.Material;
39+
import org.bukkit.OfflinePlayer;
3940
import org.bukkit.entity.Player;
4041
import org.bukkit.event.inventory.InventoryClickEvent;
4142

@@ -82,8 +83,9 @@ public void setup() {
8283
this.getFiller().fillBottom(ItemBuilder.from(Objects.requireNonNull(XMaterial.BLACK_STAINED_GLASS_PANE.parseItem())).asGuiItem());
8384

8485
for (Party party : parties.values()) {
86+
OfflinePlayer partyOwner = plugin.getPartyOwner(party, this.owner);
8587
SkullBuilder item = ItemBuilder.skull()
86-
.owner(Bukkit.getOfflinePlayer(party.getOwner()))
88+
.owner(partyOwner)
8789
.name(Component.text("§9" + party.getName()))
8890
.lore(Messages.component(false, "guis", "add"), Messages.component(false, "guis", "remove"));
8991

elections-spigot/src/main/java/me/lorenzo0111/elections/menus/PartiesMenu.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import net.kyori.adventure.text.Component;
3939
import org.bukkit.Bukkit;
4040
import org.bukkit.Material;
41+
import org.bukkit.OfflinePlayer;
4142
import org.bukkit.entity.Player;
4243

4344
import java.util.EnumSet;
@@ -76,11 +77,12 @@ public void setup() {
7677
this.getFiller().fillBottom(ItemBuilder.from(Objects.requireNonNull(XMaterial.BLACK_STAINED_GLASS_PANE.parseItem())).asGuiItem());
7778

7879
for (Party party : parties.map().values()) {
80+
OfflinePlayer partyOwner = plugin.getPartyOwner(party, this.owner);
7981
SkullBuilder item = ItemBuilder.skull()
8082
.name(Component.text("§9" + party.getName()))
8183
.lore(canEdit(owner, party) ? Messages.component(false, "guis", "edit-party") : Messages.component(false, "guis", "no-edit-party"));
8284

83-
item.owner(Bukkit.getOfflinePlayer(party.getOwner()));
85+
item.owner(partyOwner);
8486

8587
if (party.getIcon() != null)
8688
item.texture(party.getIcon());

elections-spigot/src/main/java/me/lorenzo0111/elections/menus/VoteMenu.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import net.kyori.adventure.text.Component;
3838
import org.bukkit.Bukkit;
3939
import org.bukkit.Material;
40+
import org.bukkit.OfflinePlayer;
4041
import org.bukkit.entity.Player;
4142

4243
import java.util.HashSet;
@@ -69,11 +70,14 @@ public void setup() {
6970
if (party == null) {
7071
continue;
7172
}
73+
74+
OfflinePlayer partyOwner = plugin.getPartyOwner(party, this.owner);
75+
7276
this.addItem(ItemBuilder.skull()
7377
.name(Component.text("§9" + party.getName()))
7478
.lore(Messages.component(false, "guis", "vote"))
7579
.texture(party.getIcon())
76-
.owner(Bukkit.getOfflinePlayer(party.getOwner()))
80+
.owner(partyOwner)
7781
.asGuiItem(e -> {
7882
this.close(e.getWhoClicked());
7983

0 commit comments

Comments
 (0)