55import fr .maxlego08 .essentials .api .vault .Vault ;
66import fr .maxlego08 .essentials .api .vault .VaultItem ;
77import fr .maxlego08 .essentials .api .vault .VaultResult ;
8- import fr .maxlego08 .menu .api .utils .Placeholders ;
98import fr .maxlego08 .menu .api .button .Button ;
109import fr .maxlego08 .menu .api .engine .InventoryEngine ;
10+ import fr .maxlego08 .menu .api .utils .Placeholders ;
1111import org .bukkit .Material ;
1212import org .bukkit .entity .Player ;
1313import org .bukkit .event .inventory .ClickType ;
@@ -52,12 +52,12 @@ public void onRender(Player player, InventoryEngine inventory) {
5252 Vault vault = playerVaults .getTargetVault ();
5353 if (vault == null ) return ;
5454
55- int size = this . slots . size ( );
55+ int startSlot = getStartSlot ( player );
5656
57- var slots = manager . getMaxSlotsPlayer ( player );
58- int startSlot = slots - ( this . slots . size () * ( slots - 1 ));
59- if ( startSlot > 0 && startSlot < size ) {
60- for ( int index = 0 ; index < startSlot ; index ++) this . releaseSlot ( inventory , index );
57+ if ( startSlot > 0 && startSlot < this . slots . size ()) {
58+ for ( int index = 0 ; index < startSlot ; index ++) {
59+ this . releaseSlot ( inventory , index );
60+ }
6161 }
6262
6363 vault .getVaultItems ().forEach ((slot , vaultItem ) -> setVaultItem (slot , vault , vaultItem , inventory , player ));
@@ -120,14 +120,13 @@ public void onInventoryClick(InventoryClickEvent event, Player player, Inventory
120120 return ;
121121 }
122122
123+ if (!isValidSlot (slot , player )) {
124+ event .setCancelled (true );
125+ return ;
126+ }
123127
124128 if (event .getWhoClicked ().getInventory ().equals (event .getClickedInventory ()) && clickType .isShiftClick () && itemStack != null && itemStack .getType () != Material .AIR ) {
125129
126- if (slot >= 45 ) {
127- event .setCancelled (true );
128- return ;
129- }
130-
131130 VaultResult vaultResult = manager .addVaultItem (vault , player .getUniqueId (), event .getCurrentItem (), -1 , itemStack .getAmount (), this .slots .size ());
132131
133132 if (vaultResult == null ) {
@@ -141,16 +140,11 @@ public void onInventoryClick(InventoryClickEvent event, Player player, Inventory
141140 setVaultItem (vaultResult .slot (), vault , vault .getVaultItems ().get (vaultResult .slot ()), inventoryDefault , player );
142141
143142 } else {
144- plugin . getVaultManager () .openVault (player , vaultResult .vault ().getVaultId ());
143+ manager .openVault (player , vaultResult .vault ().getVaultId ());
145144 }
146145
147146 } else if (topInventory .equals (event .getClickedInventory ()) && !cursorItemStack .getType ().equals (Material .AIR )) {
148147
149- if (slot >= 45 ) {
150- event .setCancelled (true );
151- return ;
152- }
153-
154148 VaultItem vaultItem = vault .getVaultItems ().get (slot );
155149 if (vaultItem != null && !vaultItem .getItemStack ().isSimilar (cursorItemStack )) {
156150 return ;
@@ -197,4 +191,36 @@ public void onInventoryClick(InventoryClickEvent event, Player player, Inventory
197191 public void onDrag (InventoryDragEvent event , Player player , InventoryEngine inventoryDefault ) {
198192 event .setCancelled (true );
199193 }
194+
195+ /**
196+ * Checks if the given slot is valid for the player's target vault.
197+ *
198+ * @param slot the slot to check
199+ * @param player the player to check for
200+ * @return true if the slot is valid, false otherwise
201+ */
202+ private boolean isValidSlot (int slot , Player player ) {
203+
204+ int startSlot = getStartSlot (player );
205+
206+ if (startSlot > 0 && startSlot < this .slots .size ()) {
207+ return slot < startSlot ;
208+ }
209+ return true ;
210+ }
211+
212+ /**
213+ * Returns the start slot for the given player's target vault.
214+ *
215+ * @param player the player to get the start slot for
216+ * @return the start slot for the player's target vault, or 0 if the target vault is null
217+ */
218+ private int getStartSlot (Player player ) {
219+ var manager = this .plugin .getVaultManager ();
220+ PlayerVaults playerVaults = manager .getPlayerVaults (player );
221+ Vault vault = playerVaults .getTargetVault ();
222+ if (vault == null ) return 0 ;
223+ int size = this .slots .size ();
224+ return manager .getMaxSlotsPlayer (player ) - (size * (vault .getVaultId () - 1 ));
225+ }
200226}
0 commit comments