@@ -34,7 +34,7 @@ public final class PlayerKitService {
3434
3535 private final LoadingCache <String , PlayerKit > kitCache = Caffeine .newBuilder ()
3636 .maximumSize (1000 )
37- .expireAfterWrite (5 , TimeUnit .MINUTES )
37+ .expireAfterAccess (5 , TimeUnit .MINUTES )
3838 .build (this ::getPlayerKit );
3939
4040 private final PlayerKitsPlugin plugin ;
@@ -46,7 +46,6 @@ public PlayerKitService(@NotNull PlayerKitsPlugin plugin) {
4646
4747 this .plugin = plugin ;
4848 buildInventories ();
49- loadKits ();
5049 this .kitItemDescription = new ArrayList <>();
5150 for (String description : plugin .getConfig ().getStringList ("gui.item-description" )) {
5251 this .kitItemDescription .add (MiniMessage .miniMessage ().deserialize (description ));
@@ -66,7 +65,6 @@ public boolean deleteKit(@NotNull PlayerKit playerKit) {
6665 session .remove (playerKit .getProperties ());
6766 session .remove (playerKit );
6867 transaction .commit ();
69- removeKitFromInventory (playerKit );
7068 this .kitCache .invalidate (playerKit .getName ());
7169 return true ;
7270 } catch (HibernateException e ) {
@@ -110,9 +108,11 @@ public void createKit(@NotNull PlayerKit playerKit) {
110108 }
111109 }
112110
113- @ Nullable
114- public PlayerKit getFirstJoinKit () {
115- return getPlayerKit (this .plugin .getConfig ().getString ("first-join-kit" , "firstjoin" ));
111+ public List <PlayerKit > getFirstJoinKits () {
112+ return this .plugin .getDatabaseService ().getSessionFactory ().map (SessionFactory ::openSession ).map (session -> {
113+ var query = session .createQuery ("SELECT pt FROM PlayerKit pt JOIN FETCH pt.properties p WHERE pt.firstJoin = true" , PlayerKit .class );
114+ return query .list ();
115+ }).orElse (Collections .emptyList ());
116116 }
117117
118118 @ NotNull
@@ -241,27 +241,27 @@ public Inventory getKitPreviewInventory() {
241241 return kitPreviewInventory ;
242242 }
243243
244- private void removeKitFromInventory (@ NotNull PlayerKit playerKit ) {
245- this .kitInventory .remove (playerKit .getProperties ().getDisplayItem ());
246- }
247244
248245 private void addKitToInventory (@ NotNull PlayerKit playerKit ) {
249246
250247 if (!playerKit .isVisible ()) return ;
251- var slot = this .kitInventory .firstEmpty ();
252- if (slot == -1L ) return ;
253248
254- this .kitInventory .setItem (slot ,
255- InventoryUtil .createItem (
256- playerKit .getProperties ().getDisplayItem (),
257- MiniMessage .miniMessage ().deserialize (playerKit .getDisplayName ()), this .kitItemDescription ));
249+ var kitMaterial = playerKit .getProperties ().getDisplayItem ();
250+ if (this .kitInventory .contains (kitMaterial )) return ;
251+
252+ this .kitInventory .addItem (InventoryUtil .createItem (
253+ playerKit .getProperties ().getDisplayItem (),
254+ MiniMessage .miniMessage ().deserialize (playerKit .getDisplayName ()), this .kitItemDescription ));
255+ }
256+
257+ public void giveFirstJoinKits (Player player ) {
258+ getFirstJoinKits ().forEach (playerKit -> handleGrantKit (player , player , playerKit ));
258259 }
259260
260- private void loadKits ( ) {
261+ public void openKitsInventory ( Player player ) {
261262 var kits = getKits ();
262- for (PlayerKit kit : kits ) {
263- addKitToInventory (kit );
264- }
263+ kits .forEach (this ::addKitToInventory );
264+ player .openInventory (this .getKitInventory ());
265265 }
266266
267267 public void kitGrantSuccess (@ NotNull CommandSender commandSender ,
0 commit comments