mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-11-01 00:10:40 +01:00
Fixed NPE when opening the Settings Panel with some flags being hidden
The NPE could only occur if a non-op player was trying to open the Settings Panel or change tab or change mode, leading to the call of a null PanelItem. I added some nullability annotations to make it 100% clear that Flag#toPanelItem(...) returns null if the player is not op and the flag is invisible.
This commit is contained in:
parent
7b78267027
commit
267c9c73d8
@ -359,6 +359,7 @@ public class Flag implements Comparable<Flag> {
|
||||
* @param invisible - true if this flag is not visible to players
|
||||
* @return - PanelItem for this flag or null if item is invisible to user
|
||||
*/
|
||||
@Nullable
|
||||
public PanelItem toPanelItem(BentoBox plugin, User user, @Nullable Island island, boolean invisible) {
|
||||
// Invisibility
|
||||
if (!user.isOp() && invisible) {
|
||||
|
@ -1,5 +1,7 @@
|
||||
package world.bentobox.bentobox.api.panels;
|
||||
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -25,7 +27,7 @@ public interface Tab {
|
||||
* Return the panel items for this tab
|
||||
* @return a list of items in slot order
|
||||
*/
|
||||
List<PanelItem> getPanelItems();
|
||||
List<@Nullable PanelItem> getPanelItems();
|
||||
|
||||
/**
|
||||
* @return the permission required to view this tab or empty if no permission required
|
||||
|
@ -3,6 +3,7 @@ package world.bentobox.bentobox.api.panels;
|
||||
import java.security.InvalidParameterException;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.bukkit.Material;
|
||||
@ -88,7 +89,7 @@ public class TabbedPanel extends Panel implements PanelListener {
|
||||
// Show the active tab
|
||||
if (tpb.getTabs().containsKey(activeTab)) {
|
||||
List<PanelItem> panelItems = tab.getPanelItems();
|
||||
panelItems.stream().skip(page * 43L).limit(page * 43L + 43L).forEach(i -> items.put(items.lastKey() + 1, i));
|
||||
panelItems.stream().filter(Objects::nonNull).skip(page * 43L).limit(page * 43L + 43L).forEach(i -> items.put(items.lastKey() + 1, i));
|
||||
// Add forward and backward icons
|
||||
if (page > 0) {
|
||||
// Previous page icon
|
||||
|
@ -11,6 +11,8 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNull;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
import world.bentobox.bentobox.api.flags.Flag.Type;
|
||||
@ -111,7 +113,8 @@ public class SettingsTab implements Tab, ClickHandler {
|
||||
* @return list of all the panel items for this flag type
|
||||
*/
|
||||
@Override
|
||||
public List<PanelItem> getPanelItems() {
|
||||
@NonNull
|
||||
public List<@Nullable PanelItem> getPanelItems() {
|
||||
List<Flag> flags = getFlags();
|
||||
int i = 0;
|
||||
// Jump past empty tabs
|
||||
|
Loading…
Reference in New Issue
Block a user