Skip to content

Commit d631960

Browse files
authored
Merge pull request #136 from ez-plugins/fix/gui-config-reload
release: bump to 3.4.2 and fix GUI reload refresh
2 parents 5c3185b + ae8647e commit d631960

11 files changed

Lines changed: 174 additions & 28 deletions

File tree

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ Release tags use the `v` prefix (e.g. `v3.0.2`).
2020

2121
---
2222

23+
## [3.4.2] - 2026-07-07
24+
25+
### Fixed
26+
27+
- `/rtp reload` now immediately applies GUI configuration updates from `gui.yml` by rebuilding GUI rendering from the current in-memory configuration instead of startup-cached values.
28+
- Reload now closes both standard RTP GUI sessions and faction-claim GUI sessions so open inventories cannot retain stale pre-reload settings.
29+
30+
### Added
31+
32+
- Focused regression test coverage for GUI reload behavior:
33+
- `RandomTeleportGuiManagerReloadConfigTest` verifies that opening the GUI after configuration replacement uses the updated title and row count immediately.
34+
35+
---
36+
2337
## [3.4.1] - 2026-07-06
2438

2539
### Added

ezrtp-api/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>com.skyblockexp</groupId>
77
<artifactId>ezrtp-parent</artifactId>
8-
<version>3.4.1</version>
8+
<version>3.4.2</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

1212
<groupId>com.skyblockexp</groupId>
1313
<artifactId>ezrtp-api</artifactId>
14-
<version>3.4.1</version>
14+
<version>3.4.2</version>
1515
<packaging>jar</packaging>
1616
<name>EzRTP API</name>
1717
<description>Lightweight public API for EzRTP intended for third-party plugins.</description>

ezrtp-bukkit/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>com.skyblockexp</groupId>
77
<artifactId>ezrtp-parent</artifactId>
8-
<version>3.4.1</version>
8+
<version>3.4.2</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

1212
<groupId>com.skyblockexp</groupId>
1313
<artifactId>ezrtp-bukkit</artifactId>
14-
<version>3.4.1</version>
14+
<version>3.4.2</version>
1515
<packaging>jar</packaging>
1616
<name>EzRTP (Bukkit)</name>
1717
<description>EzRTP Bukkit-compatible plugin module.</description>
@@ -111,7 +111,7 @@
111111
<dependency>
112112
<groupId>com.skyblockexp</groupId>
113113
<artifactId>ezrtp-common</artifactId>
114-
<version>3.4.1</version>
114+
<version>3.4.2</version>
115115
</dependency>
116116
</dependencies>
117117

ezrtp-common/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>com.skyblockexp</groupId>
77
<artifactId>ezrtp-parent</artifactId>
8-
<version>3.4.1</version>
8+
<version>3.4.2</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

1212
<groupId>com.skyblockexp</groupId>
1313
<artifactId>ezrtp-common</artifactId>
14-
<version>3.4.1</version>
14+
<version>3.4.2</version>
1515
<packaging>jar</packaging>
1616
<name>EzRTP Common</name>
1717
<description>Shared utilities for EzRTP (platform-independent)</description>

ezrtp-common/src/main/java/com/skyblockexp/ezrtp/bootstrap/EzRtpPluginBootstrap.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.skyblockexp.ezrtp.performance.PerformanceMonitor;
1919
import com.skyblockexp.ezrtp.unsafe.UnsafeLocationMonitor;
2020
import com.skyblockexp.ezrtp.unsafe.UnsafeLocationStatistics;
21+
import com.skyblockexp.ezrtp.gui.FactionClaimSelectionGuiManager;
2122
import com.skyblockexp.ezrtp.gui.RandomTeleportGuiManager;
2223
import com.skyblockexp.ezrtp.integration.EzCountdownDisplayBridge;
2324
import com.skyblockexp.ezrtp.integration.EzCountdownDisplayBridgeImpl;
@@ -333,6 +334,10 @@ public void reloadPluginConfiguration() {
333334
if (guiManager != null) {
334335
guiManager.closeAll();
335336
}
337+
FactionClaimSelectionGuiManager factionClaimGuiManager = listenerRegistrar.getFactionClaimGuiManager();
338+
if (factionClaimGuiManager != null) {
339+
factionClaimGuiManager.closeAll();
340+
}
336341
configurationService.validateEconomyConfiguration(configuration, economyService);
337342

338343
// Reload performance monitoring settings and (re-)create the monitor

ezrtp-common/src/main/java/com/skyblockexp/ezrtp/gui/RandomTeleportGuiManager.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public final class RandomTeleportGuiManager implements Listener {
5252
private final RtpUsageStorage usageStorage;
5353
private final Supplier<MessageProvider> messageSupplier;
5454

55-
private final GuiBuilder guiBuilder;
5655
private final GuiSessionManager sessionManager;
5756

5857
// Use TextRenderer for runtime-compatible parsing
@@ -72,15 +71,6 @@ public RandomTeleportGuiManager(JavaPlugin plugin,
7271

7372
// Initialize helper classes
7473
this.sessionManager = new GuiSessionManager();
75-
java.util.logging.Logger fallbackLogger = java.util.logging.Logger.getLogger(RandomTeleportGuiManager.class.getSimpleName());
76-
java.util.logging.Logger effectiveLogger = plugin != null ? plugin.getLogger() : fallbackLogger;
77-
this.guiBuilder = new GuiBuilder(
78-
configurationSupplier.get(),
79-
usageStorage,
80-
teleportServiceSupplier.get() != null ? teleportServiceSupplier.get().getBiomeCache() : null,
81-
networkServiceSupplier.get(),
82-
effectiveLogger
83-
);
8474
}
8575

8676
/**
@@ -112,7 +102,8 @@ public boolean openSelection(Player player) {
112102
}
113103
}
114104

115-
// Build the GUI
105+
// Build the GUI from current suppliers so /ezrtp reload immediately reflects gui.yml changes.
106+
GuiBuilder guiBuilder = createGuiBuilder(configuration);
116107
GuiBuilder.GuiBuildResult result = guiBuilder.buildGui(player);
117108

118109
// Check if we have any options to display
@@ -164,6 +155,19 @@ private void refreshInventoryForSpigot(Player player) {
164155
}
165156
}
166157

158+
private GuiBuilder createGuiBuilder(EzRtpConfiguration configuration) {
159+
java.util.logging.Logger fallbackLogger = java.util.logging.Logger.getLogger(RandomTeleportGuiManager.class.getSimpleName());
160+
java.util.logging.Logger effectiveLogger = plugin != null ? plugin.getLogger() : fallbackLogger;
161+
RandomTeleportService teleportService = teleportServiceSupplier.get();
162+
return new GuiBuilder(
163+
configuration,
164+
usageStorage,
165+
teleportService != null ? teleportService.getBiomeCache() : null,
166+
networkServiceSupplier.get(),
167+
effectiveLogger
168+
);
169+
}
170+
167171
public void closeAll() {
168172
Map<UUID, GuiSessionManager.GuiSession> sessions = sessionManager.getAllSessions();
169173
if (sessions.isEmpty() || plugin == null) {
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
package com.skyblockexp.ezrtp.gui;
2+
3+
import com.skyblockexp.ezrtp.config.EzRtpConfiguration;
4+
import com.skyblockexp.ezrtp.message.MessageProvider;
5+
import com.skyblockexp.ezrtp.network.NetworkService;
6+
import com.skyblockexp.ezrtp.platform.PlatformGuiBridge;
7+
import com.skyblockexp.ezrtp.platform.PlatformGuiBridgeRegistry;
8+
import com.skyblockexp.ezrtp.storage.RtpUsageStorage;
9+
import net.kyori.adventure.text.Component;
10+
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
11+
import org.bukkit.configuration.file.YamlConfiguration;
12+
import org.bukkit.entity.Player;
13+
import org.bukkit.inventory.Inventory;
14+
import org.bukkit.inventory.InventoryHolder;
15+
import org.bukkit.inventory.ItemStack;
16+
import org.bukkit.inventory.meta.ItemMeta;
17+
import org.junit.jupiter.api.AfterEach;
18+
import org.junit.jupiter.api.Test;
19+
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
import java.util.concurrent.atomic.AtomicReference;
23+
import java.util.logging.Logger;
24+
25+
import static org.junit.jupiter.api.Assertions.assertEquals;
26+
import static org.junit.jupiter.api.Assertions.assertTrue;
27+
import static org.mockito.Mockito.mock;
28+
import static org.mockito.Mockito.when;
29+
30+
class RandomTeleportGuiManagerReloadConfigTest {
31+
32+
@AfterEach
33+
void resetGuiBridgeRegistry() {
34+
PlatformGuiBridgeRegistry.unregister();
35+
}
36+
37+
@Test
38+
void openSelectionUsesLatestGuiSettingsAfterConfigurationReplacement() {
39+
RecordingGuiBridge bridge = new RecordingGuiBridge();
40+
PlatformGuiBridgeRegistry.register(bridge);
41+
42+
AtomicReference<EzRtpConfiguration> configurationRef =
43+
new AtomicReference<>(createConfiguration("First GUI", 1));
44+
45+
RtpUsageStorage usageStorage = mock(RtpUsageStorage.class);
46+
MessageProvider messageProvider = mock(MessageProvider.class);
47+
NetworkService networkService = mock(NetworkService.class);
48+
Player player = mock(Player.class);
49+
Inventory inventory = mock(Inventory.class);
50+
when(player.openInventory(inventory)).thenReturn(null);
51+
52+
RandomTeleportGuiManager manager = new RandomTeleportGuiManager(
53+
null,
54+
() -> null,
55+
configurationRef::get,
56+
() -> networkService,
57+
() -> messageProvider,
58+
usageStorage);
59+
60+
boolean firstOpened = manager.openSelection(player);
61+
62+
configurationRef.set(createConfiguration("Second GUI", 2));
63+
64+
boolean secondOpened = manager.openSelection(player);
65+
66+
assertTrue(firstOpened);
67+
assertTrue(secondOpened);
68+
assertEquals(List.of(9, 18), bridge.recordedSizes());
69+
assertEquals(List.of("First GUI", "Second GUI"), bridge.recordedTitles());
70+
}
71+
72+
private static EzRtpConfiguration createConfiguration(String title, int rows) {
73+
YamlConfiguration base = new YamlConfiguration();
74+
base.set("world", "world");
75+
76+
YamlConfiguration gui = new YamlConfiguration();
77+
gui.set("enabled", true);
78+
gui.set("title", title);
79+
gui.set("rows", rows);
80+
gui.set("worlds.overworld.slot", 0);
81+
gui.set("worlds.overworld.settings.world", "world");
82+
83+
return EzRtpConfiguration.fromConfigurations(
84+
base,
85+
null,
86+
gui,
87+
null,
88+
null,
89+
Logger.getLogger(RandomTeleportGuiManagerReloadConfigTest.class.getSimpleName()));
90+
}
91+
92+
private static final class RecordingGuiBridge implements PlatformGuiBridge {
93+
private final List<String> recordedTitles = new ArrayList<>();
94+
private final List<Integer> recordedSizes = new ArrayList<>();
95+
96+
@Override
97+
public Inventory createInventory(InventoryHolder holder, int size, Component title) {
98+
recordedSizes.add(size);
99+
recordedTitles.add(PlainTextComponentSerializer.plainText().serialize(title));
100+
return mock(Inventory.class);
101+
}
102+
103+
@Override
104+
public void setDisplayName(ItemMeta meta, Component displayName) {
105+
}
106+
107+
@Override
108+
public void setLore(ItemMeta meta, List<Component> lore) {
109+
}
110+
111+
@Override
112+
public void applyItemMeta(ItemStack icon, ItemMeta meta) {
113+
}
114+
115+
private List<String> recordedTitles() {
116+
return recordedTitles;
117+
}
118+
119+
private List<Integer> recordedSizes() {
120+
return recordedSizes;
121+
}
122+
}
123+
}

ezrtp-paper/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>com.skyblockexp</groupId>
77
<artifactId>ezrtp-parent</artifactId>
8-
<version>3.4.1</version>
8+
<version>3.4.2</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

1212
<groupId>com.skyblockexp</groupId>
1313
<artifactId>ezrtp-paper</artifactId>
14-
<version>3.4.1</version>
14+
<version>3.4.2</version>
1515
<packaging>jar</packaging>
1616
<name>EzRTP (Paper)</name>
1717
<description>Paper-optimized module for EzRTP</description>
@@ -32,7 +32,7 @@
3232
<dependency>
3333
<groupId>com.skyblockexp</groupId>
3434
<artifactId>ezrtp-common</artifactId>
35-
<version>3.4.1</version>
35+
<version>3.4.2</version>
3636
<scope>provided</scope>
3737
</dependency>
3838
<dependency>

ezrtp-purpur/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.skyblockexp</groupId>
77
<artifactId>ezrtp-parent</artifactId>
8-
<version>3.4.1</version>
8+
<version>3.4.2</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

@@ -18,12 +18,12 @@
1818
<dependency>
1919
<groupId>com.skyblockexp</groupId>
2020
<artifactId>ezrtp-paper</artifactId>
21-
<version>3.4.1</version>
21+
<version>3.4.2</version>
2222
</dependency>
2323
<dependency>
2424
<groupId>com.skyblockexp</groupId>
2525
<artifactId>ezrtp-common</artifactId>
26-
<version>3.4.1</version>
26+
<version>3.4.2</version>
2727
<scope>provided</scope>
2828
</dependency>
2929
<dependency>

ezrtp-spigot/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
<parent>
66
<groupId>com.skyblockexp</groupId>
77
<artifactId>ezrtp-parent</artifactId>
8-
<version>3.4.1</version>
8+
<version>3.4.2</version>
99
<relativePath>../pom.xml</relativePath>
1010
</parent>
1111

1212
<groupId>com.skyblockexp</groupId>
1313
<artifactId>ezrtp-spigot</artifactId>
14-
<version>3.4.1</version>
14+
<version>3.4.2</version>
1515
<packaging>jar</packaging>
1616
<name>EzRTP (Spigot)</name>
1717
<description>Spigot-optimized module for EzRTP</description>
@@ -26,7 +26,7 @@
2626
<dependency>
2727
<groupId>com.skyblockexp</groupId>
2828
<artifactId>ezrtp-common</artifactId>
29-
<version>3.4.1</version>
29+
<version>3.4.2</version>
3030
</dependency>
3131
</dependencies>
3232

0 commit comments

Comments
 (0)