Skip to content

Commit e98be2c

Browse files
vLuckyyyRollczi
andauthored
GH-924 Fix synchronization bug. (#924)
* Fix synchronization bug. * Fix `{0}` * Simplify code (wip?) --------- Co-authored-by: Rollczi <[email protected]>
1 parent d68e5a2 commit e98be2c

File tree

2 files changed

+50
-19
lines changed

2 files changed

+50
-19
lines changed

eternalcore-core/src/main/java/com/eternalcode/core/feature/warp/WarpInventory.java

+17-19
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,34 @@
11
package com.eternalcode.core.feature.warp;
22

33
import com.eternalcode.commons.adventure.AdventureUtil;
4+
import com.eternalcode.commons.scheduler.Scheduler;
45
import com.eternalcode.core.configuration.ConfigurationManager;
56
import com.eternalcode.core.configuration.contextual.ConfigItem;
67
import com.eternalcode.core.configuration.implementation.PluginConfiguration;
78
import com.eternalcode.core.feature.language.Language;
89
import com.eternalcode.core.feature.language.LanguageService;
10+
import com.eternalcode.core.feature.warp.messages.WarpMessages;
11+
import com.eternalcode.core.feature.warp.messages.WarpMessages.WarpInventorySection;
912
import com.eternalcode.core.injector.annotations.Inject;
1013
import com.eternalcode.core.injector.annotations.component.Service;
1114
import com.eternalcode.core.translation.AbstractTranslation;
1215
import com.eternalcode.core.translation.Translation;
13-
import com.eternalcode.core.feature.warp.messages.WarpMessages;
14-
import com.eternalcode.core.feature.warp.messages.WarpMessages.WarpInventorySection;
1516
import com.eternalcode.core.translation.TranslationManager;
17+
import static com.eternalcode.core.util.FutureHandler.whenSuccess;
1618
import dev.triumphteam.gui.builder.item.BaseItemBuilder;
1719
import dev.triumphteam.gui.builder.item.ItemBuilder;
1820
import dev.triumphteam.gui.guis.Gui;
1921
import dev.triumphteam.gui.guis.GuiItem;
22+
import java.util.Collections;
23+
import java.util.Comparator;
24+
import java.util.List;
25+
import java.util.Optional;
2026
import net.kyori.adventure.text.Component;
2127
import net.kyori.adventure.text.minimessage.MiniMessage;
2228
import org.bukkit.Material;
2329
import org.bukkit.Server;
2430
import org.bukkit.entity.Player;
2531

26-
import java.util.Collections;
27-
import java.util.Comparator;
28-
import java.util.List;
29-
import java.util.Optional;
30-
3132
@Service
3233
public class WarpInventory {
3334

@@ -50,6 +51,7 @@ public class WarpInventory {
5051
private final WarpTeleportService warpTeleportService;
5152
private final ConfigurationManager configurationManager;
5253
private final PluginConfiguration config;
54+
private final Scheduler scheduler;
5355

5456
@Inject
5557
WarpInventory(
@@ -60,7 +62,8 @@ public class WarpInventory {
6062
MiniMessage miniMessage,
6163
WarpTeleportService warpTeleportService,
6264
ConfigurationManager configurationManager,
63-
PluginConfiguration config
65+
PluginConfiguration config,
66+
Scheduler scheduler
6467
) {
6568
this.translationManager = translationManager;
6669
this.languageService = languageService;
@@ -70,17 +73,13 @@ public class WarpInventory {
7073
this.warpTeleportService = warpTeleportService;
7174
this.configurationManager = configurationManager;
7275
this.config = config;
76+
this.scheduler = scheduler;
7377
}
7478

7579
public void openInventory(Player player) {
76-
this.languageService.getLanguage(player.getUniqueId()).whenComplete((language, throwable) -> {
77-
if (language == null) {
78-
language = Language.DEFAULT;
79-
}
80-
81-
this.createInventory(player, language)
82-
.open(player);
83-
});
80+
this.languageService.getLanguage(player.getUniqueId())
81+
.thenApply(language -> this.createInventory(player, language))
82+
.whenComplete(whenSuccess(gui -> this.scheduler.run(() -> gui.open(player))));
8483
}
8584

8685
private Gui createInventory(Player player, Language language) {
@@ -229,7 +228,8 @@ public void addWarp(Warp warp) {
229228
WarpMessages.WarpInventorySection warpSection = translation.warp().warpInventory();
230229
int slot = getSlot(warpSection);
231230

232-
warpSection.addItem(warp.getName(),
231+
warpSection.addItem(
232+
warp.getName(),
233233
WarpInventoryItem.builder()
234234
.withWarpName(warp.getName())
235235
.withWarpItem(ConfigItem.builder()
@@ -243,7 +243,6 @@ public void addWarp(Warp warp) {
243243
.build());
244244

245245
this.configurationManager.save(translation);
246-
247246
}
248247
}
249248

@@ -293,5 +292,4 @@ private void shiftWarpItems(WarpInventoryItem removed, WarpMessages.WarpInventor
293292
currentShift = nextShift;
294293
}
295294
}
296-
297295
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.eternalcode.core.util;
2+
3+
import java.util.function.BiConsumer;
4+
import java.util.function.Consumer;
5+
import java.util.logging.Level;
6+
import java.util.logging.Logger;
7+
import org.jetbrains.annotations.Nullable;
8+
9+
public final class FutureHandler<T> implements BiConsumer<T, @Nullable Throwable> {
10+
11+
private static final Logger LOGGER = Logger.getLogger(FutureHandler.class.getName());
12+
13+
private final Consumer<T> success;
14+
15+
private FutureHandler(Consumer<T> success) {
16+
this.success = success;
17+
}
18+
19+
@Override
20+
public void accept(T value, @Nullable Throwable cause) {
21+
if (cause != null) {
22+
LOGGER.log(Level.SEVERE, "Caught an exception in future execution: " + cause.getMessage(), cause);
23+
return;
24+
}
25+
26+
success.accept(value);
27+
}
28+
29+
public static <T> FutureHandler<T> whenSuccess(Consumer<T> success) {
30+
return new FutureHandler<>(success);
31+
}
32+
33+
}

0 commit comments

Comments
 (0)