22
33import fr .maxlego08 .zauctionhouse .api .AuctionPlugin ;
44import fr .maxlego08 .zauctionhouse .api .cache .PlayerCacheKey ;
5- import fr .maxlego08 .zauctionhouse .api .cluster .LockToken ;
65import fr .maxlego08 .zauctionhouse .api .event .events .remove .AuctionPreRemoveExpiredItemEvent ;
76import fr .maxlego08 .zauctionhouse .api .event .events .remove .AuctionPreRemoveListedItemEvent ;
87import fr .maxlego08 .zauctionhouse .api .event .events .remove .AuctionPreRemovePurchasedItemEvent ;
1211import fr .maxlego08 .zauctionhouse .api .services .AuctionRemoveService ;
1312import org .bukkit .entity .Player ;
1413
14+ import java .util .concurrent .CompletableFuture ;
15+ import java .util .function .Supplier ;
16+
1517public class RemoveService extends AuctionService implements AuctionRemoveService {
1618
1719 private final AuctionPlugin plugin ;
@@ -21,10 +23,10 @@ public RemoveService(AuctionPlugin plugin) {
2123 }
2224
2325 @ Override
24- public void removeListedItem (Player player , Item item ) {
26+ public CompletableFuture < Void > removeListedItem (Player player , Item item ) {
2527
2628 var event = new AuctionPreRemoveListedItemEvent (item , player );
27- if (!event .callEvent ()) return ;
29+ if (!event .callEvent ()) return CompletableFuture . completedFuture ( null ) ;
2830
2931 var auctionManager = this .plugin .getAuctionManager ();
3032 var inventoryManager = this .plugin .getInventoriesLoader ().getInventoryManager ();
@@ -35,27 +37,27 @@ public void removeListedItem(Player player, Item item) {
3537 logger .info ("Item expired" );
3638 auctionManager .getCache (player ).remove (PlayerCacheKey .ITEMS_LISTED );
3739 auctionManager .openMainAuction (player );
38- return ;
40+ return CompletableFuture . completedFuture ( null ) ;
3941 }
4042
4143 if (item .getStatus () != ItemStatus .AVAILABLE ) {
4244 logger .info ("Item not available" );
4345 auctionManager .openMainAuction (player );
44- return ;
46+ return CompletableFuture . completedFuture ( null ) ;
4547 }
4648
4749 item .setStatus (ItemStatus .IS_BEING_REMOVED );
4850
4951 // 2. Vérifier si l'item est lock
50- executeRemoval (player , item , () -> inventoryManager .updateInventory (player ), () -> auctionManager .removeListedItem (player , item ), StorageType .LISTED );
52+ return executeRemoval (player , item , () -> inventoryManager .updateInventory (player ), () -> auctionManager .removeListedItem (player , item ), StorageType .LISTED );
5153 }
5254
5355 @ Override
54- public void removeOwnedItem (Player player , Item item ) {
56+ public CompletableFuture < Void > removeOwnedItem (Player player , Item item ) {
5557
5658
5759 var event = new AuctionPreRemoveListedItemEvent (item , player );
58- if (!event .callEvent ()) return ;
60+ if (!event .callEvent ()) return CompletableFuture . completedFuture ( null ) ;
5961
6062 var auctionManager = this .plugin .getAuctionManager ();
6163 var inventoryManager = this .plugin .getInventoriesLoader ().getInventoryManager ();
@@ -66,27 +68,27 @@ public void removeOwnedItem(Player player, Item item) {
6668 logger .info ("Item expired" );
6769 auctionManager .getCache (player ).remove (PlayerCacheKey .ITEMS_LISTED );
6870 auctionManager .openMainAuction (player );
69- return ;
71+ return CompletableFuture . completedFuture ( null ) ;
7072 }
7173
7274 if (item .getStatus () != ItemStatus .AVAILABLE ) {
7375 logger .info ("Item not available" );
7476 auctionManager .openMainAuction (player );
75- return ;
77+ return CompletableFuture . completedFuture ( null ) ;
7678 }
7779
7880 item .setStatus (ItemStatus .IS_BEING_REMOVED );
7981
8082 // 2. Vérifier si l'item est lock
81- executeRemoval (player , item , () -> inventoryManager .updateInventory (player ), () -> auctionManager .removeOwnedItem (player , item ), StorageType .LISTED );
83+ return executeRemoval (player , item , () -> inventoryManager .updateInventory (player ), () -> auctionManager .removeOwnedItem (player , item ), StorageType .LISTED );
8284
8385 }
8486
8587 @ Override
86- public void removeExpiredItem (Player player , Item item ) {
88+ public CompletableFuture < Void > removeExpiredItem (Player player , Item item ) {
8789
8890 var event = new AuctionPreRemoveExpiredItemEvent (item , player );
89- if (!event .callEvent ()) return ;
91+ if (!event .callEvent ()) return CompletableFuture . completedFuture ( null ) ;
9092
9193 var auctionManager = this .plugin .getAuctionManager ();
9294 var inventoryManager = this .plugin .getInventoriesLoader ().getInventoryManager ();
@@ -97,26 +99,26 @@ public void removeExpiredItem(Player player, Item item) {
9799 logger .info ("Item expired" );
98100 auctionManager .getCache (player ).remove (PlayerCacheKey .ITEMS_EXPIRED );
99101 inventoryManager .updateInventory (player );
100- return ;
102+ return CompletableFuture . completedFuture ( null ) ;
101103 }
102104
103105 if (item .getStatus () != ItemStatus .REMOVED ) {
104106 logger .info ("Item not available" );
105107 inventoryManager .updateInventory (player );
106- return ;
108+ return CompletableFuture . completedFuture ( null ) ;
107109 }
108110
109111 item .setStatus (ItemStatus .DELETED );
110112
111113 // 2. Vérifier si l'item est lock
112- executeRemoval (player , item , () -> inventoryManager .updateInventory (player ), () -> this .plugin .getAuctionManager ().removeExpiredItem (player , item ), StorageType .EXPIRED );
114+ return executeRemoval (player , item , () -> inventoryManager .updateInventory (player ), () -> this .plugin .getAuctionManager ().removeExpiredItem (player , item ), StorageType .EXPIRED );
113115 }
114116
115117 @ Override
116- public void removePurchasedItem (Player player , Item item ) {
118+ public CompletableFuture < Void > removePurchasedItem (Player player , Item item ) {
117119
118120 var event = new AuctionPreRemovePurchasedItemEvent (item , player );
119- if (!event .callEvent ()) return ;
121+ if (!event .callEvent ()) return CompletableFuture . completedFuture ( null ) ;
120122
121123 var auctionManager = this .plugin .getAuctionManager ();
122124 var inventoryManager = this .plugin .getInventoriesLoader ().getInventoryManager ();
@@ -127,28 +129,28 @@ public void removePurchasedItem(Player player, Item item) {
127129 logger .info ("Item expired" );
128130 auctionManager .getCache (player ).remove (PlayerCacheKey .ITEMS_EXPIRED );
129131 inventoryManager .updateInventory (player );
130- return ;
132+ return CompletableFuture . completedFuture ( null ) ;
131133 }
132134
133135 if (item .getStatus () != ItemStatus .PURCHASED ) {
134136 logger .info ("Item not available" );
135137 inventoryManager .updateInventory (player );
136- return ;
138+ return CompletableFuture . completedFuture ( null ) ;
137139 }
138140
139141 item .setStatus (ItemStatus .DELETED );
140142
141143 var manager = this .plugin .getAuctionManager ();
142- executeRemoval (player , item , () -> manager .updateInventory (player ), () -> manager .removePurchasedItem (player , item ), StorageType .PURCHASED );
144+ return executeRemoval (player , item , () -> manager .updateInventory (player ), () -> manager .removePurchasedItem (player , item ), StorageType .PURCHASED );
143145
144146 }
145147
146- private void executeRemoval (Player player , Item item , Runnable onUnavailable , Runnable onLocalRemoval , StorageType storageType ) {
148+ private CompletableFuture < Void > executeRemoval (Player player , Item item , Runnable onUnavailable , Supplier < CompletableFuture < Void >> onLocalRemoval , StorageType storageType ) {
147149
148150 var clusterBridge = this .plugin .getAuctionClusterBridge ();
149151 var logger = this .plugin .getLogger ();
150152
151- clusterBridge .checkAvailability (item ).thenCompose (available -> {
153+ return clusterBridge .checkAvailability (item ).thenCompose (available -> {
152154
153155 if (!available ) {
154156 logger .info ("Item is not available" );
@@ -158,22 +160,12 @@ private void executeRemoval(Player player, Item item, Runnable onUnavailable, Ru
158160
159161 return clusterBridge .lockItem (item , player .getUniqueId ());
160162
161- }).thenCompose (token -> {
162-
163- // 3. On va supprimer l'item coté REDIS
164-
165- logger .info ("Token: " + token );
166- return clusterBridge .removeItem (item , storageType );
167-
168- }).thenCompose (v -> {
169-
170- // 4. On supprime l'item en local
171- onLocalRemoval .run ();
172-
173- return clusterBridge .unlockItem (item , LockToken .of (item ));
174- }).exceptionally (e -> {
175- e .printStackTrace ();
176- return null ;
177- });
163+ }).thenCompose (token -> onLocalRemoval .get ()
164+ .thenCompose (v -> clusterBridge .removeItem (item , storageType )
165+ .thenCompose (vv -> clusterBridge .unlockItem (item , token ))))
166+ .exceptionally (e -> {
167+ e .printStackTrace ();
168+ return null ;
169+ });
178170 }
179171}
0 commit comments