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 @@ -140,7 +140,7 @@ public void openPicker(Player player, SendSession session) {
if (!sessions.isCurrent(player, session) || session.getLetter() == null || session.isConfirmed()) {
return;
}
if (player.getOpenInventory().getTopInventory().getHolder() instanceof CharacterPickerGui) {
if (player.getOpenInventory().getTopInventory().getHolder(false) instanceof CharacterPickerGui) {
return;
}
if (!Bukkit.getPluginManager().isPluginEnabled("RPCharacters")) {
Expand Down Expand Up @@ -170,7 +170,7 @@ public void openPicker(Player player, SendSession session) {

private void refreshPickerHeads(Player player, CharacterPickerGui picker) {
if (!sessions.isCurrent(player, picker.session())
|| player.getOpenInventory().getTopInventory().getHolder() != picker) {
|| player.getOpenInventory().getTopInventory().getHolder(false) != picker) {
return;
}
SendSession session = picker.session();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;

import net.tfminecraft.birdmessenger.BirdMessenger;
Expand All @@ -34,15 +35,16 @@ public void onClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player player)) {
return;
}
if (event.getView().getTopInventory().getHolder() instanceof LetterGui gui) {
InventoryHolder holder = event.getView().getTopInventory().getHolder(false);
if (holder instanceof LetterGui gui) {
if (!plugin.sessions().isCurrent(player, gui.session())) {
event.setCancelled(true);
return;
}
handleLetterClick(event, player);
return;
}
if (event.getView().getTopInventory().getHolder() instanceof CharacterPickerGui picker) {
if (holder instanceof CharacterPickerGui picker) {
handlePickerClick(event, player, picker);
}
}
Expand All @@ -53,7 +55,8 @@ public void onDrag(InventoryDragEvent event) {
return;
}
Inventory top = event.getView().getTopInventory();
if (top.getHolder() instanceof LetterGui gui) {
InventoryHolder holder = top.getHolder(false);
if (holder instanceof LetterGui gui) {
if (!plugin.sessions().isCurrent(player, gui.session())) {
event.setCancelled(true);
return;
Expand All @@ -80,7 +83,7 @@ public void onDrag(InventoryDragEvent event) {
}
return;
}
if (top.getHolder() instanceof CharacterPickerGui) {
if (holder instanceof CharacterPickerGui) {
event.setCancelled(true);
}
}
Expand All @@ -90,7 +93,8 @@ public void onClose(InventoryCloseEvent event) {
if (!(event.getPlayer() instanceof Player player)) {
return;
}
if (event.getInventory().getHolder() instanceof LetterGui gui) {
InventoryHolder holder = event.getInventory().getHolder(false);
if (holder instanceof LetterGui gui) {
SendSession session = gui.session();
if (!plugin.sessions().isCurrent(player, session)) {
plugin.sessions().returnLetter(player, session, false);
Expand All @@ -106,7 +110,7 @@ public void onClose(InventoryCloseEvent event) {
Bukkit.getScheduler().runTask(plugin, () -> plugin.openPicker(player, session));
return;
}
if (event.getInventory().getHolder() instanceof CharacterPickerGui picker) {
if (holder instanceof CharacterPickerGui picker) {
plugin.sessions().returnLetter(player, picker.session(), true);
}
}
Expand Down Expand Up @@ -142,7 +146,7 @@ private void handleLetterClick(InventoryClickEvent event, Player player) {
}
Bukkit.getScheduler().runTaskLater(plugin, () -> {
// The player may already have closed this GUI and moved on to another one.
if (plugin.sessions().isCurrent(player, ((LetterGui) top.getHolder()).session())
if (plugin.sessions().isCurrent(player, ((LetterGui) top.getHolder(false)).session())
&& player.getOpenInventory().getTopInventory() == top) {
player.closeInventory();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.bukkit.entity.Player;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

Expand Down Expand Up @@ -121,8 +122,9 @@ private void finish(Player player, SendSession session, boolean cancelledMessage
}
}
Inventory top = player.getOpenInventory().getTopInventory();
if ((top.getHolder() instanceof LetterGui gui && gui.session() == session)
|| (top.getHolder() instanceof CharacterPickerGui picker && picker.session() == session)) {
InventoryHolder holder = top.getHolder(false);
if ((holder instanceof LetterGui gui && gui.session() == session)
|| (holder instanceof CharacterPickerGui picker && picker.session() == session)) {
player.closeInventory();
}
if (!returned.isEmpty() && canReturn(player, session, ending)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class PickerOpenTest {
when(player.getOpenInventory()).thenReturn(view);
when(view.getTopInventory()).thenReturn(top);
when(top.getHolder()).thenAnswer(call -> openHolder);
when(top.getHolder(false)).thenAnswer(call -> openHolder);
when(player.openInventory(any(Inventory.class))).thenAnswer(call -> {
opens++;
openHolder = ((Inventory) call.getArgument(0)).getHolder();
Expand All @@ -92,6 +93,10 @@ class PickerOpenTest {
refreshCallbacks.getFirst().run();
assertEquals(1, opens, "refresh re-renders the open picker instead of reopening it");
assertEquals(2, picker.targets().size());
// Both lookups of the open picker read the holder without copying a block.
Inventory top = player.getOpenInventory().getTopInventory();
verify(top, never()).getHolder();
verify(top, atLeastOnce()).getHolder(false);
}
}

Expand Down Expand Up @@ -381,6 +386,7 @@ private final class Mocks implements AutoCloseable {
Inventory inventory = mock(Inventory.class);
InventoryHolder holder = call.getArgument(0);
when(inventory.getHolder()).thenReturn(holder);
when(inventory.getHolder(false)).thenReturn(holder);
return inventory;
});
rpc.when(RPCharacters::listMailTargets).thenAnswer(call -> new ArrayList<>(directory));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ private static final class Harness implements AutoCloseable {
Map<Integer, ItemStack> slots = new HashMap<>();
contents.put(inventory, slots);
when(inventory.getHolder()).thenReturn(holder);
when(inventory.getHolder(false)).thenReturn(holder);
when(inventory.getSize()).thenReturn(size);
doAnswer(
set -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
.setItem(anyInt(), any());
top = mock(Inventory.class);
when(top.getHolder()).thenReturn(mock(LetterGui.class));
when(top.getHolder(false)).thenReturn(mock(LetterGui.class));
when(top.getSize()).thenReturn(9);
when(top.getMaxStackSize()).thenReturn(64);
when(top.getItem(anyInt())).thenAnswer(call -> topItems[call.getArgument(0)]);
Expand Down Expand Up @@ -152,6 +153,7 @@
LetterGui letterGui = mock(LetterGui.class);
when(letterGui.session()).thenReturn(initialSession);
when(top.getHolder()).thenReturn(letterGui);
when(top.getHolder(false)).thenReturn(letterGui);
letterItems = mockStatic(LetterItems.class);
letterItems
.when(() -> LetterItems.isLetter(eq(config), any()))
Expand Down Expand Up @@ -331,6 +333,7 @@
assertFalse(click.isCancelled());
assertFalse(drag.isCancelled());
when(top.getHolder()).thenReturn(null);
when(top.getHolder(false)).thenReturn(null);
listener.onClick(click(null, InventoryAction.PLACE_ALL, ClickType.LEFT));
listener.onDrag(drag(null, Map.of()));
listener.onClose(closeEvent());
Expand Down Expand Up @@ -466,7 +469,7 @@
topItems[LetterGui.LETTER_SLOT] = stack(true, 1);
playerItems[2] = stack(false, 3);
InventoryClickEvent move =
click(null, InventoryAction.HOTBAR_MOVE_AND_READD, ClickType.NUMBER_KEY);

Check warning on line 472 in src/test/java/net/tfminecraft/birdmessenger/listener/GuiListenerCoverageTest.java

View workflow job for this annotation

GitHub Actions / build

HOTBAR_MOVE_AND_READD in org.bukkit.event.inventory.InventoryAction has been deprecated and marked for removal
when(move.getHotbarButton()).thenReturn(2);
listener.onClick(move);
InventoryClickEvent pickup = click(null, InventoryAction.PICKUP_ALL, ClickType.LEFT);
Expand Down Expand Up @@ -860,6 +863,7 @@
when(nextHolder.session()).thenReturn(next);
Inventory nextInventory = mock(Inventory.class);
when(nextInventory.getHolder()).thenReturn(nextHolder);
when(nextInventory.getHolder(false)).thenReturn(nextHolder);
openTop.set(nextInventory);
listener.onClose(closeEvent());
ItemGive.giveOrDrop(player, letter);
Expand Down Expand Up @@ -901,6 +905,7 @@
when(nextHolder.session()).thenReturn(next);
Inventory nextInventory = mock(Inventory.class);
when(nextInventory.getHolder()).thenReturn(nextHolder);
when(nextInventory.getHolder(false)).thenReturn(nextHolder);
openTop.set(nextInventory);
listener.onClose(closeEvent());
throw failure;
Expand Down Expand Up @@ -980,6 +985,7 @@
when(picker.session()).thenReturn(session);
when(picker.getInventory()).thenReturn(top);
when(top.getHolder()).thenReturn(picker);
when(top.getHolder(false)).thenReturn(picker);
when(top.getSize()).thenReturn(54);
return picker;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ class SendSessionManagerTest {
LetterGui gui = mock(LetterGui.class);
when(gui.session()).thenReturn(session);
when(f.top.getHolder()).thenReturn(gui);
when(f.top.getHolder(false)).thenReturn(gui);
session.setLetterInventory(f.top);
when(f.top.getItem(LetterGui.LETTER_SLOT)).thenReturn(f.letter);
f.current.set(null);
Expand Down Expand Up @@ -130,6 +131,7 @@ class SendSessionManagerTest {
CharacterPickerGui picker = mock(CharacterPickerGui.class);
when(picker.session()).thenReturn(session);
when(f.top.getHolder()).thenReturn(picker);
when(f.top.getHolder(false)).thenReturn(picker);
session.setLetter(f.letter);
f.sessions.close();
verify(f.inventory).addItem(f.letter);
Expand Down
Loading