Skip to content

Commit 031459d

Browse files
GH-143 Add 'max parcels per locker' option
* Add 'max parcels per locker' option * Update src/main/java/com/eternalcode/parcellockers/parcel/repository/ParcelRepositoryOrmLite.java Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> * adjust to copilot's suggestions * thenRun -> thenAccept * [ci skip] delete redundant comment * Adjust to Mike's suggestion, simplify code, bump MC version to 1.21.10 --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent c8159c9 commit 031459d

File tree

11 files changed

+83
-21
lines changed

11 files changed

+83
-21
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ repositories {
2020

2121
dependencies {
2222
// minecraft development api
23-
compileOnly("io.papermc.paper:paper-api:1.21.8-R0.1-SNAPSHOT")
23+
compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT")
2424
paperLibrary("dev.rollczi:litecommands-bukkit:3.10.6")
2525
paperLibrary("dev.rollczi:litecommands-adventure:3.10.6")
2626

@@ -109,7 +109,7 @@ tasks.withType<JavaCompile> {
109109

110110
tasks {
111111
runServer {
112-
minecraftVersion("1.21.8")
112+
minecraftVersion("1.21.10")
113113
downloadPlugins.modrinth("luckperms", "v5.5.0-bukkit")
114114
}
115115

src/main/java/com/eternalcode/parcellockers/ParcelLockers.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public void onEnable() {
121121
UserValidationService userValidationService = new UserValidator();
122122
UserManager userManager = new UserManagerImpl(userRepository, userValidationService);
123123
LockerValidationService lockerValidationService = new LockerValidator();
124-
LockerManager lockerManager = new LockerManager(lockerRepository, lockerValidationService);
124+
LockerManager lockerManager = new LockerManager(config, lockerRepository, lockerValidationService, parcelRepository);
125125
ParcelContentManager parcelContentManager = new ParcelContentManager(parcelContentRepository);
126126
ItemStorageManager itemStorageManager = new ItemStorageManager(itemStorageRepository);
127127
DeliveryManager deliveryManager = new DeliveryManager(deliveryRepository);
@@ -131,6 +131,7 @@ public void onEnable() {
131131
GuiManager guiManager = new GuiManager(
132132
config,
133133
scheduler,
134+
noticeService,
134135
parcelService,
135136
lockerManager,
136137
userManager,

src/main/java/com/eternalcode/parcellockers/configuration/implementation/MessageConfig.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ public static class ParcelMessages extends OkaeriConfig {
9696
.chat("&4✘ &cThe parcel destination locker is not set!")
9797
.sound(Sound.ENTITY_ENDERMAN_AMBIENT.key())
9898
.build();
99+
public Notice lockerFull = Notice.builder()
100+
.chat("&4✘ &cThe destination locker is full! Please select another locker.")
101+
.sound(Sound.ENTITY_VILLAGER_NO.key())
102+
.build();
99103
public Notice illegalItem = Notice.builder()
100104
.chat("&4✘ &cThe parcel contains illegal items that cannot be sent. ({ITEMS})")
101105
.build();

src/main/java/com/eternalcode/parcellockers/configuration/implementation/PluginConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ public static class Settings extends OkaeriConfig {
5858

5959
@Comment({"", "# Parcel sending duration for priority parcels"})
6060
public Duration priorityParcelSendDuration = Duration.ofSeconds(30);
61+
62+
@Comment({"", "# Maximum number of parcels that can be stored in a single locker"})
63+
public int maxParcelsPerLocker = 30;
6164
}
6265

6366
public static class GuiSettings extends OkaeriConfig {

src/main/java/com/eternalcode/parcellockers/gui/GuiManager.java

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.eternalcode.parcellockers.itemstorage.ItemStorageManager;
99
import com.eternalcode.parcellockers.locker.Locker;
1010
import com.eternalcode.parcellockers.locker.LockerManager;
11+
import com.eternalcode.parcellockers.notification.NoticeService;
1112
import com.eternalcode.parcellockers.parcel.Parcel;
1213
import com.eternalcode.parcellockers.parcel.ParcelService;
1314
import com.eternalcode.parcellockers.parcel.task.ParcelSendTask;
@@ -28,6 +29,7 @@ public class GuiManager {
2829

2930
private final PluginConfig config;
3031
private final Scheduler scheduler;
32+
private final NoticeService noticeService;
3133
private final ParcelService parcelService;
3234
private final LockerManager lockerManager;
3335
private final UserManager userManager;
@@ -36,7 +38,7 @@ public class GuiManager {
3638
private final DeliveryManager deliveryManager;
3739

3840
public GuiManager(
39-
PluginConfig config, Scheduler scheduler, ParcelService parcelService,
41+
PluginConfig config, Scheduler scheduler, NoticeService noticeService, ParcelService parcelService,
4042
LockerManager lockerManager,
4143
UserManager userManager,
4244
ItemStorageManager itemStorageManager,
@@ -45,6 +47,7 @@ public GuiManager(
4547
) {
4648
this.config = config;
4749
this.scheduler = scheduler;
50+
this.noticeService = noticeService;
4851
this.parcelService = parcelService;
4952
this.lockerManager = lockerManager;
5053
this.userManager = userManager;
@@ -54,20 +57,38 @@ public GuiManager(
5457
}
5558

5659
public void sendParcel(Player sender, Parcel parcel, List<ItemStack> items) {
57-
Duration delay = parcel.priority()
58-
? this.config.settings.priorityParcelSendDuration
59-
: this.config.settings.parcelSendDuration;
60-
this.parcelService.send(sender, parcel, items);
61-
this.deliveryManager.create(parcel.uuid(), Instant.now().plus(delay));
62-
this.parcelContentManager.create(parcel.uuid(), items);
63-
64-
ParcelSendTask task = new ParcelSendTask(
65-
parcel,
66-
this.parcelService,
67-
this.deliveryManager
68-
);
69-
70-
this.scheduler.runLaterAsync(task, delay);
60+
this.lockerManager.isLockerFull(parcel.destinationLocker()).thenAccept(isFull -> {
61+
if (isFull) {
62+
this.noticeService.create()
63+
.notice(messages -> messages.parcel.lockerFull)
64+
.player(sender.getUniqueId())
65+
.send();
66+
return;
67+
}
68+
69+
Duration delay = parcel.priority()
70+
? this.config.settings.priorityParcelSendDuration
71+
: this.config.settings.parcelSendDuration;
72+
73+
this.parcelService.send(sender, parcel, items)
74+
.thenAccept(v -> this.deliveryManager.create(parcel.uuid(), Instant.now().plus(delay)))
75+
.thenRun(() -> {
76+
ParcelSendTask task = new ParcelSendTask(
77+
parcel,
78+
this.parcelService,
79+
this.deliveryManager
80+
);
81+
this.itemStorageManager.delete(sender.getUniqueId());
82+
83+
this.scheduler.runLaterAsync(task, delay);
84+
});
85+
}).exceptionally(throwable -> {
86+
this.noticeService.create()
87+
.notice(messages -> messages.parcel.cannotSend)
88+
.player(sender.getUniqueId())
89+
.send();
90+
return null;
91+
});
7192
}
7293

7394
public void collectParcel(Player player, Parcel parcel) {

src/main/java/com/eternalcode/parcellockers/gui/implementation/locker/SendingGui.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,6 @@ public void show(Player player) {
244244
);
245245

246246
this.guiManager.sendParcel(player, parcel, result.items());
247-
this.guiManager.deleteItemStorage(player.getUniqueId());
248-
249247
this.gui.close(player);
250248
}).orTimeout(5, TimeUnit.SECONDS));
251249

src/main/java/com/eternalcode/parcellockers/locker/LockerManager.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.eternalcode.parcellockers.locker;
22

3+
import com.eternalcode.parcellockers.configuration.implementation.PluginConfig;
34
import com.eternalcode.parcellockers.locker.repository.LockerRepository;
45
import com.eternalcode.parcellockers.locker.validation.LockerValidationService;
56
import com.eternalcode.parcellockers.notification.NoticeService;
7+
import com.eternalcode.parcellockers.parcel.repository.ParcelRepository;
68
import com.eternalcode.parcellockers.shared.Page;
79
import com.eternalcode.parcellockers.shared.PageResult;
810
import com.eternalcode.parcellockers.shared.Position;
@@ -19,15 +21,24 @@
1921

2022
public class LockerManager {
2123

24+
private final PluginConfig config;
2225
private final LockerRepository lockerRepository;
2326
private final LockerValidationService validationService;
27+
private final ParcelRepository parcelRepository;
2428

2529
private final Cache<UUID, Locker> lockersByUUID;
2630
private final Cache<Position, Locker> lockersByPosition;
2731

28-
public LockerManager(LockerRepository lockerRepository, LockerValidationService validationService) {
32+
public LockerManager(
33+
PluginConfig config,
34+
LockerRepository lockerRepository,
35+
LockerValidationService validationService,
36+
ParcelRepository parcelRepository
37+
) {
38+
this.config = config;
2939
this.lockerRepository = lockerRepository;
3040
this.validationService = validationService;
41+
this.parcelRepository = parcelRepository;
3142

3243
this.lockersByUUID = Caffeine.newBuilder()
3344
.expireAfterAccess(Duration.ofHours(2))
@@ -148,6 +159,11 @@ public CompletableFuture<Void> deleteAll(CommandSender sender, NoticeService not
148159
});
149160
}
150161

162+
public CompletableFuture<Boolean> isLockerFull(UUID lockerUuid) {
163+
return this.parcelRepository.countByDestinationLocker(lockerUuid)
164+
.thenApply(count -> count > 0 && count >= this.config.settings.maxParcelsPerLocker);
165+
}
166+
151167
private void cacheAll() {
152168
this.lockerRepository.fetchAll()
153169
.thenAccept(optionalLockers -> optionalLockers.ifPresent(lockers -> lockers.forEach(locker -> {
@@ -156,3 +172,4 @@ private void cacheAll() {
156172
})));
157173
}
158174
}
175+

src/main/java/com/eternalcode/parcellockers/parcel/ParcelService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public interface ParcelService {
2929

3030
CompletableFuture<PageResult<Parcel>> getByReceiver(UUID receiver, Page page);
3131

32+
3233
CompletableFuture<Integer> delete(UUID uuid);
3334

3435
CompletableFuture<Integer> delete(Parcel parcel);

src/main/java/com/eternalcode/parcellockers/parcel/ParcelServiceImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ public CompletableFuture<PageResult<Parcel>> getByReceiver(UUID receiver, Page p
196196
});
197197
}
198198

199+
199200
private void cacheAll() {
200201
this.parcelRepository.fetchAll()
201202
.thenAccept(optional -> optional.ifPresent(parcels -> parcels.forEach(this::cache)));

src/main/java/com/eternalcode/parcellockers/parcel/repository/ParcelRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public interface ParcelRepository {
2929

3030
CompletableFuture<PageResult<Parcel>> fetchByReceiver(UUID receiver, Page page);
3131

32+
CompletableFuture<Integer> countByDestinationLocker(UUID destinationLocker);
33+
3234
CompletableFuture<Integer> delete(Parcel parcel);
3335

3436
CompletableFuture<Integer> delete(UUID uuid);

0 commit comments

Comments
 (0)