Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public static boolean accepted(Inventory inventory, ItemStack stack) {
if (ArtifactDisplayIndex.isDisplayed(ArtifactIds.read(stack))) {
return true;
}
InventoryHolder holder = inventory.getHolder();
InventoryHolder holder = inventory.getHolder(false);
return holder instanceof Player || holder instanceof ItemFrame;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
Expand Down Expand Up @@ -177,10 +178,11 @@ public void onClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) {
return;
}
if (event.getInventory().getHolder() instanceof GearMenuHolder holder && !holder.current(player)) {
InventoryHolder menu = event.getInventory().getHolder(false);
if (menu instanceof GearMenuHolder holder && !holder.current(player)) {
event.setCancelled(true); return;
}
if (event.getInventory().getHolder() instanceof AssemblyHolder) {
if (menu instanceof AssemblyHolder) {
event.setCancelled(true);
if (event.getClickedInventory() != event.getInventory()) return;
ItemStack current = event.getCurrentItem();
Expand Down Expand Up @@ -211,7 +213,7 @@ public void onClick(InventoryClickEvent event) {
}
return;
}
if (event.getInventory().getHolder() instanceof TypeSelectionHolder) {
if (menu instanceof TypeSelectionHolder) {
event.setCancelled(true);
if (event.getClickedInventory() != event.getInventory()) return;
ItemStack clicked = event.getCurrentItem();
Expand All @@ -236,7 +238,7 @@ public void onClick(InventoryClickEvent event) {
}
return;
}
if (event.getInventory().getHolder() instanceof PartSelectionHolder holder) {
if (menu instanceof PartSelectionHolder holder) {
event.setCancelled(true);
if (event.getClickedInventory() != event.getInventory()) return;
ItemStack clicked = event.getCurrentItem();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ private void clearActivities(Player player, net.tfminecraft.tlibs.character.Char
clearActivities(player, outgoing, true);
}
private void clearActivities(Player player, net.tfminecraft.tlibs.character.CharacterSession outgoing, boolean clearGear) {
Object holder = player.getOpenInventory().getTopInventory().getHolder();
Object holder = player.getOpenInventory().getTopInventory().getHolder(false);
MeditationService.cancel(player);
SacrificeRiteService.cancelForPlayer(player.getUniqueId());
var captured = outgoing == null ? null : net.tfminecraft.magic.gear.ownership.GearCharacterBridge.token(outgoing);
Expand All @@ -88,7 +88,7 @@ private void clearActivities(Player player, net.tfminecraft.tlibs.character.Char
}
private void clearStaleGear(Player player) {
GearOrbService.finishStaleForPlayer(player.getUniqueId()); GearChargeService.clearStale(player);
if (player.getOpenInventory().getTopInventory().getHolder() instanceof net.tfminecraft.magic.gear.gui.GearMenuHolder gear && !gear.current(player)) player.closeInventory();
if (player.getOpenInventory().getTopInventory().getHolder(false) instanceof net.tfminecraft.magic.gear.gui.GearMenuHolder gear && !gear.current(player)) player.closeInventory();
if (OpenStationManager.get(player) == null) {
OpenStationManager.clear(player); SelectedPartsManager.clear(player); TypeSelectionManager.clear(player);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public void onInventoryClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) {
return;
}
if (!(event.getView().getTopInventory().getHolder() instanceof ArtifactCreateGuiHolder holder)) {
if (!(event.getView().getTopInventory().getHolder(false) instanceof ArtifactCreateGuiHolder holder)) {
return;
}
event.setCancelled(true);
Expand Down Expand Up @@ -152,7 +152,7 @@ private static void giveOrDrop(Player player, ItemStack stack) {

@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
if (!(event.getView().getTopInventory().getHolder() instanceof ArtifactCreateGuiHolder)) {
if (!(event.getView().getTopInventory().getHolder(false) instanceof ArtifactCreateGuiHolder)) {
return;
}
event.setCancelled(true);
Expand All @@ -163,7 +163,7 @@ public void onInventoryClose(InventoryCloseEvent event) {
if (!(event.getPlayer() instanceof Player player)) {
return;
}
if (!(event.getView().getTopInventory().getHolder() instanceof ArtifactCreateGuiHolder holder)) {
if (!(event.getView().getTopInventory().getHolder(false) instanceof ArtifactCreateGuiHolder holder)) {
return;
}
sessions.remove(player.getUniqueId(), holder.getSession());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void open(Player player) {
public void refreshOpenInventories() {
for (Player player : Bukkit.getOnlinePlayers()) {
Inventory top = player.getOpenInventory().getTopInventory();
if (!(top.getHolder() instanceof ResonanceGuiHolder holder)) {
if (!(top.getHolder(false) instanceof ResonanceGuiHolder holder)) {
continue;
}
ResonanceSession session = currentSession(player, holder);
Expand All @@ -72,7 +72,7 @@ public void onInventoryClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) {
return;
}
if (!(event.getView().getTopInventory().getHolder() instanceof ResonanceGuiHolder holder)) {
if (!(event.getView().getTopInventory().getHolder(false) instanceof ResonanceGuiHolder holder)) {
return;
}
event.setCancelled(true);
Expand Down Expand Up @@ -128,14 +128,14 @@ private static String castModeChatLabel(String modeId) {

@EventHandler
public void onInventoryDrag(InventoryDragEvent event) {
if (!(event.getView().getTopInventory().getHolder() instanceof ResonanceGuiHolder)) {
if (!(event.getView().getTopInventory().getHolder(false) instanceof ResonanceGuiHolder)) {
return;
}
event.setCancelled(true);
}

public void close(Player player) {
if (player.getOpenInventory().getTopInventory().getHolder() instanceof ResonanceGuiHolder) {
if (player.getOpenInventory().getTopInventory().getHolder(false) instanceof ResonanceGuiHolder) {
player.closeInventory();
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/test/java/net/tfminecraft/magic/AttunementTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class AttunementTest {

@BeforeEach
void setup() {
server = MockBukkit.mock();
server = MockBukkit.mock(new HolderLookupServerMock());
server.addSimpleWorld("display");
Magic.plugin = mock(Magic.class);
when(Magic.plugin.namespace()).thenReturn("magic");
Expand Down Expand Up @@ -207,7 +207,7 @@ void careAcceptsPlayerInventoryAndIndexedDisplaysButNotOrdinaryStorage() {
var chest = server.createInventory(null, 9);
assertFalse(ArtifactCarePlaces.accepted(null, item));
assertFalse(ArtifactCarePlaces.accepted(chest, item));
assertTrue(ArtifactCarePlaces.accepted(player.getInventory(), item));
assertTrue(ArtifactCarePlaces.accepted(HolderLookupServerMock.withHolderLookup(player.getInventory()), item));
ArtifactDisplayIndex.add(item);
assertTrue(ArtifactCarePlaces.accepted(chest, item));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ void identifiersRejectEmptyMetadataMalformedIdsAndZeroTiers() {
assertFalse(Artifact.create().isCharge());
assertFalse(Charge.fromItem(chargeItem()).isArtifact());
var inventory = mock(Inventory.class);
when(inventory.getHolder())
when(inventory.getHolder(false))
.thenReturn(mock(InventoryHolder.class, withSettings().extraInterfaces(ItemFrame.class)));
assertTrue(ArtifactCarePlaces.accepted(inventory, s));
ArtifactDisplayIndex.add(s);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ abstract class GearCoverageSupport {

@BeforeEach
void setupGear() throws Exception {
server = MockBukkit.mock();
server = MockBukkit.mock(new HolderLookupServerMock());
Magic.plugin = mock(Magic.class, RETURNS_DEEP_STUBS);
when(Magic.plugin.getName()).thenReturn("Magic");
when(Magic.plugin.namespace()).thenReturn("magic");
Expand Down
61 changes: 61 additions & 0 deletions src/test/java/net/tfminecraft/magic/HolderLookupServerMock.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package net.tfminecraft.magic;

import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mockingDetails;
import static org.mockito.Mockito.spy;

import net.kyori.adventure.text.Component;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.mockbukkit.mockbukkit.ServerMock;
import org.mockbukkit.mockbukkit.inventory.InventoryMock;

/** MockBukkit leaves Paper's non-copying getHolder(boolean) unimplemented; the plugin uses it on hot paths. */
public class HolderLookupServerMock extends ServerMock {

/** A spy of {@code inventory} whose getHolder(boolean) answers like getHolder(). */
@SuppressWarnings("unchecked")
public static <T extends Inventory> T withHolderLookup(T inventory) {
if (mockingDetails(inventory).isMock()) return inventory;
T spied = spy(inventory);
doAnswer(call -> ((Inventory) call.getMock()).getHolder()).when(spied).getHolder(anyBoolean());
return spied;
}

@Override
public InventoryMock createInventory(InventoryHolder owner, InventoryType type, String title, int size) {
return withHolderLookup(super.createInventory(owner, type, title, size));
}

@Override
public InventoryMock createInventory(InventoryHolder owner, InventoryType type) {
return withHolderLookup(super.createInventory(owner, type));
}

@Override
public InventoryMock createInventory(InventoryHolder owner, InventoryType type, Component title) {
return withHolderLookup(super.createInventory(owner, type, title));
}

@Override
public InventoryMock createInventory(InventoryHolder owner, InventoryType type, String title) {
return withHolderLookup(super.createInventory(owner, type, title));
}

@Override
public InventoryMock createInventory(InventoryHolder owner, int size) {
return withHolderLookup(super.createInventory(owner, size));
}

@Override
public InventoryMock createInventory(InventoryHolder owner, int size, Component title) {
return withHolderLookup(super.createInventory(owner, size, title));
}

@Override
public InventoryMock createInventory(InventoryHolder owner, int size, String title) {
return withHolderLookup(super.createInventory(owner, size, title));
}
}
2 changes: 1 addition & 1 deletion src/test/java/net/tfminecraft/magic/ListenerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

@BeforeEach
void setup() {
server = MockBukkit.mock();
server = MockBukkit.mock(new HolderLookupServerMock());
Magic.plugin = mock(Magic.class, RETURNS_DEEP_STUBS);
when(Magic.plugin.getServer()).thenReturn(server);
when(Magic.plugin.isEnabled()).thenReturn(true);
Expand Down Expand Up @@ -171,7 +171,7 @@
listener.onSessionStart(new CharacterSessionStartEvent(player, token));
verify(profile).activate(player, token);
listener.onSessionEnd(new CharacterSessionEndEvent(player, token, CharacterSessionEndEvent.Reason.SWITCH));
listener.onPlayerQuit(new PlayerQuitEvent(player, "quit"));

Check warning on line 174 in src/test/java/net/tfminecraft/magic/ListenerTest.java

View workflow job for this annotation

GitHub Actions / build

PlayerQuitEvent(org.bukkit.entity.Player,java.lang.String) in org.bukkit.event.player.PlayerQuitEvent has been deprecated and marked for removal
verify(Magic.plugin, times(3)).clearSpellModifiers(player);
verify(gui.getSessionManager(), times(3)).removeStandalone(player.getUniqueId());
}
Expand Down Expand Up @@ -290,7 +290,7 @@
player.getInventory().setItem(1, old);
try (var refresh = mockStatic(GearRefresher.class)) {
refresh.when(() -> GearRefresher.refreshIfOutdated(old, player)).thenReturn(rebuilt);
listener.onJoin(new PlayerJoinEvent(player, "join"));

Check warning on line 293 in src/test/java/net/tfminecraft/magic/ListenerTest.java

View workflow job for this annotation

GitHub Actions / build

PlayerJoinEvent(org.bukkit.entity.Player,java.lang.String) in org.bukkit.event.player.PlayerJoinEvent has been deprecated and marked for removal
server.getScheduler().performOneTick();
assertEquals(rebuilt, player.getInventory().getItem(1));
player.getInventory().setItem(1, old);
Expand Down
Loading