Skip to content

Commit eb9aa63

Browse files
committed
fix 1.21 InventoryView changes
1 parent 585e36f commit eb9aa63

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

bukkit-utils/src/main/java/net/anweisen/utilities/bukkit/utils/menu/MenuPositionListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.anweisen.utilities.bukkit.utils.menu;
22

3+
import net.anweisen.utilities.bukkit.utils.misc.CompatibilityUtils;
34
import org.bukkit.entity.HumanEntity;
45
import org.bukkit.entity.Player;
56
import org.bukkit.event.EventHandler;
@@ -26,7 +27,7 @@ public void onClick(@Nonnull InventoryClickEvent event) {
2627
Inventory inventory = event.getClickedInventory();
2728
if (inventory == null) return;
2829

29-
if (inventory == event.getView().getTopInventory()) {
30+
if (inventory == CompatibilityUtils.getTopInventory(event)) {
3031

3132
if (inventory.getHolder() != MenuPosition.HOLDER) return; // No menu inventory
3233

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package net.anweisen.utilities.bukkit.utils.misc;
2+
3+
import java.lang.reflect.InvocationTargetException;
4+
import java.lang.reflect.Method;
5+
import javax.annotation.Nonnull;
6+
import net.anweisen.utilities.common.logging.ILogger;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.inventory.InventoryClickEvent;
9+
import org.bukkit.inventory.Inventory;
10+
import org.bukkit.inventory.InventoryView;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
/*
15+
* In API version 1.20.6 and earlier, InventoryView is an abstract class
16+
* In API version 1.21, InventoryView is an interface
17+
*/
18+
public class CompatibilityUtils {
19+
20+
protected static final ILogger logger = ILogger.forThisClass();
21+
private static final Logger log = LoggerFactory.getLogger(CompatibilityUtils.class);
22+
23+
private CompatibilityUtils() {
24+
}
25+
26+
public static Inventory getTopInventory(@Nonnull Player player) {
27+
InventoryView view = player.getOpenInventory();
28+
29+
try {
30+
Method getTopInventory = InventoryView.class.getMethod("getTopInventory");
31+
return (Inventory) getTopInventory.invoke(view);
32+
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) {
33+
logger.error("Failed to get top inventory", ex);
34+
return null;
35+
}
36+
}
37+
38+
public static Inventory getTopInventory(@Nonnull InventoryClickEvent event) {
39+
InventoryView view = event.getView();
40+
41+
try {
42+
Method getTopInventory = InventoryView.class.getMethod("getTopInventory");
43+
return (Inventory) getTopInventory.invoke(view);
44+
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ex) {
45+
logger.error("Failed to get top inventory", ex);
46+
return null;
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)