Skip to content

Commit e6f6505

Browse files
committed
Merge branch '1.21.8' into 1.21.10
2 parents b630e05 + 6ca8e95 commit e6f6505

22 files changed

Lines changed: 147 additions & 13 deletions

common/src/main/java/xaeroplus/feature/drawing/DrawingCache.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import xaeroplus.feature.render.text.Text;
2121
import xaeroplus.module.impl.TickTaskExecutor;
2222
import xaeroplus.util.ChunkUtils;
23+
import xaeroplus.util.Wait;
2324
import xaeroplus.util.timer.Timer;
2425
import xaeroplus.util.timer.Timers;
2526

@@ -574,18 +575,40 @@ public void onDisable() {
574575
parentExecutor.execute(() -> {
575576
cacheReady.set(false);
576577
try {
578+
long before = System.currentTimeMillis();
577579
List<CompletableFuture<?>> tasks = new ArrayList<>();
578580
tasks.addAll(flushAllChunks());
579581
tasks.addAll(flushAllLines());
580582
tasks.addAll(flushAllTexts());
581-
CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0])).get(30, TimeUnit.SECONDS);
583+
var future = CompletableFuture.allOf(tasks.toArray(CompletableFuture[]::new));
584+
while (!future.isDone() && mc.isRunning() && TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - before) < 30) {
585+
Wait.wait(1);
586+
}
582587
} catch (final Exception e) {
583588
XaeroPlus.LOGGER.error("Error saving all drawing data before disabling", e);
584589
}
585590
reset();
586591
});
587592
}
588593

594+
public void onShutdown() {
595+
if (!mc.isSameThread()) {
596+
onDisable();
597+
return;
598+
}
599+
cacheReady.set(false);
600+
for (var cache : getAllHighlightCaches()) {
601+
cache.writeStaleHighlightsToDatabase();
602+
}
603+
for (var cache : getAllLinesCaches()) {
604+
cache.writeStaleLinesToDatabase();
605+
}
606+
for (var cache : getAllTextsCaches()) {
607+
cache.writeStaleTextsToDatabase();
608+
}
609+
reset();
610+
}
611+
589612
public int getMinimapRegionWindowSize() {
590613
return Math.max(3, Globals.minimapScaleMultiplier);
591614
}

common/src/main/java/xaeroplus/feature/drawing/DrawingHighlightCacheDimensionHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ public void onEnable() {}
245245
@Override
246246
public void onDisable() {}
247247

248+
@Override
249+
public void onShutdown() {}
250+
248251
private final class WindowDataLoadFutureCallback implements FutureCallback<Long2LongMap> {
249252
@Override
250253
public void onSuccess(Long2LongMap dataBuf) {

common/src/main/java/xaeroplus/feature/highlights/ChunkHighlightCache.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public interface ChunkHighlightCache {
4545
void handleTick();
4646
void onEnable();
4747
void onDisable();
48+
void onShutdown();
4849
default <V> CompletableFuture<V> submitTickTask(final Supplier<V> task) {
4950
return TickTaskExecutor.INSTANCE.submit(task);
5051
}

common/src/main/java/xaeroplus/feature/highlights/ChunkHighlightCacheDimensionHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,9 @@ public void onEnable() {}
270270
@Override
271271
public void onDisable() {}
272272

273+
@Override
274+
public void onShutdown() {}
275+
273276
private final class WindowDataLoadFutureCallback implements FutureCallback<Long2LongMap> {
274277
@Override
275278
public void onSuccess(Long2LongMap dataBuf) {

common/src/main/java/xaeroplus/feature/highlights/ChunkHighlightLocalCache.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,7 @@ public void onEnable() {}
6565

6666
@Override
6767
public void onDisable() {}
68+
69+
@Override
70+
public void onShutdown() {}
6871
}

common/src/main/java/xaeroplus/feature/highlights/ChunkHighlightSavingCache.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import xaeroplus.XaeroPlus;
1717
import xaeroplus.event.XaeroWorldChangeEvent;
1818
import xaeroplus.util.ChunkUtils;
19+
import xaeroplus.util.Wait;
1920
import xaeroplus.util.timer.Timer;
2021
import xaeroplus.util.timer.Timers;
2122

@@ -389,14 +390,32 @@ public void onDisable() {
389390
parentExecutor.execute(() -> {
390391
cacheReady.set(false);
391392
try {
392-
CompletableFuture.allOf(flushAllChunks().toArray(new CompletableFuture[0])).get(30, TimeUnit.SECONDS);
393+
long before = System.currentTimeMillis();
394+
var future = CompletableFuture.allOf(flushAllChunks().toArray(CompletableFuture[]::new));
395+
while (!future.isDone() && mc.isRunning() && TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - before) < 30) {
396+
Wait.wait(1);
397+
}
393398
} catch (final Exception e) {
394399
XaeroPlus.LOGGER.error("Error saving all chunks before disabling", e);
395400
}
396401
reset();
397402
});
398403
}
399404

405+
@Override
406+
public void onShutdown() {
407+
if (!mc.isSameThread()) {
408+
onDisable();
409+
return;
410+
}
411+
cacheReady.set(false);
412+
for (var cache : getAllCaches()) {
413+
cache.flushStaleToRemoveChunks();
414+
cache.writeStaleHighlightsToDatabase();
415+
}
416+
reset();
417+
}
418+
400419
public int getMinimapRegionWindowSize() {
401420
return Math.max(3, Globals.minimapScaleMultiplier);
402421
}

common/src/main/java/xaeroplus/feature/highlights/SavableHighlightCacheInstance.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package xaeroplus.feature.highlights;
22

33
import net.lenni0451.lambdaevents.EventHandler;
4+
import net.minecraft.client.Minecraft;
45
import xaeroplus.XaeroPlus;
56
import xaeroplus.event.ClientStoppingEvent;
67
import xaeroplus.event.ClientTickEvent;
@@ -56,6 +57,7 @@ public synchronized void setDiskCache(final boolean disk, final boolean enabled)
5657

5758
@EventHandler
5859
public void onXaeroWorldChange(XaeroWorldChangeEvent event) {
60+
if (!Minecraft.getInstance().isRunning()) return;
5961
try {
6062
cache.handleWorldChange(event);
6163
} catch (final Exception e) {
@@ -75,7 +77,7 @@ public void onClientTickEvent(ClientTickEvent.Post event) {
7577
@EventHandler
7678
public void onClientStopping(ClientStoppingEvent event) {
7779
try {
78-
cache.onDisable();
80+
cache.onShutdown();
7981
if (cache instanceof ChunkHighlightSavingCache savingCache) {
8082
savingCache.closeAndAwaitTermination();
8183
}

common/src/main/java/xaeroplus/module/impl/Breadcrumbs.java

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.minecraft.resources.ResourceKey;
66
import net.minecraft.world.level.Level;
77
import xaeroplus.Globals;
8+
import xaeroplus.event.ChunkDataEvent;
89
import xaeroplus.event.ClientTickEvent;
910
import xaeroplus.feature.highlights.SavableHighlightCacheInstance;
1011
import xaeroplus.feature.render.DrawFeatureFactory;
@@ -24,19 +25,34 @@ public void setDiskCache(final boolean disk) {
2425

2526
@EventHandler
2627
public void onTick(ClientTickEvent.Post event) {
27-
var dim = ChunkUtils.getActualDimension();
28-
var playerChunkX = ChunkUtils.actualPlayerChunkX();
29-
var playerChunkZ = ChunkUtils.actualPlayerChunkZ();
28+
if (Settings.REGISTRY.breadcrumbsModeSetting.get() == Settings.BreadcrumbsMode.CHUNK_RADIUS) {
29+
var dim = ChunkUtils.getActualDimension();
30+
var playerChunkX = ChunkUtils.actualPlayerChunkX();
31+
var playerChunkZ = ChunkUtils.actualPlayerChunkZ();
3032

31-
for (int x = playerChunkX - chunkRadius; x <= playerChunkX + chunkRadius; x++) {
32-
for (int z = playerChunkZ - chunkRadius; z <= playerChunkZ + chunkRadius; z++) {
33-
if (!breadcrumbsCache.get().isHighlighted(x, z, dim)) {
34-
breadcrumbsCache.get().addHighlight(x, z, dim);
33+
for (int x = playerChunkX - chunkRadius; x <= playerChunkX + chunkRadius; x++) {
34+
for (int z = playerChunkZ - chunkRadius; z <= playerChunkZ + chunkRadius; z++) {
35+
if (!breadcrumbsCache.get().isHighlighted(x, z, dim)) {
36+
breadcrumbsCache.get().addHighlight(x, z, dim);
37+
}
3538
}
3639
}
3740
}
3841
}
3942

43+
@EventHandler
44+
public void onChunkLoad(ChunkDataEvent event) {
45+
if (Settings.REGISTRY.breadcrumbsModeSetting.get() == Settings.BreadcrumbsMode.SEEN_CHUNKS) {
46+
var dim = event.chunk().getLevel().dimension();
47+
var chunkPos = event.chunk().getPos();
48+
var x = chunkPos.x;
49+
var z = chunkPos.z;
50+
if (!breadcrumbsCache.get().isHighlighted(x, z, dim)) {
51+
breadcrumbsCache.get().addHighlight(x, z, dim);
52+
}
53+
}
54+
}
55+
4056
@Override
4157
public void onEnable() {
4258
Globals.drawManager.registry().register(

common/src/main/java/xaeroplus/module/impl/Drawing.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,14 @@ public void onTick(final ClientTickEvent.Post event) {
119119

120120
@EventHandler
121121
public void onWorldChange(final XaeroWorldChangeEvent event) {
122+
if (!mc.isRunning()) return;
122123
drawingCache.handleWorldChange(event);
123124
}
124125

125126
@EventHandler
126127
public void onClientStopping(ClientStoppingEvent event) {
127128
try {
128-
drawingCache.onDisable();
129+
drawingCache.onShutdown();
129130
drawingCache.closeAndAwaitTermination();
130131
} catch (Exception e) {
131132
XaeroPlus.LOGGER.error("Failed to close drawing cache", e);

common/src/main/java/xaeroplus/settings/Settings.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,14 +768,33 @@ public String getTranslationKey() {
768768
(b) -> ModuleManager.getModule(Breadcrumbs.class).setDiskCache(b),
769769
() -> ModuleManager.getModule(Breadcrumbs.class).isEnabled()),
770770
SettingLocation.CHUNK_HIGHLIGHTS);
771+
public enum BreadcrumbsMode implements TranslatableSettingEnum {
772+
CHUNK_RADIUS("xaeroplus.setting.breadcrumbs_mode.chunk_radius"),
773+
SEEN_CHUNKS("xaeroplus.setting.breadcrumbs_mode.seen_chunks");
774+
private final String translationKey;
775+
BreadcrumbsMode(final String translationKey) {
776+
this.translationKey = translationKey;
777+
}
778+
@Override
779+
public String getTranslationKey() {
780+
return translationKey;
781+
}
782+
}
783+
public final EnumSetting<BreadcrumbsMode> breadcrumbsModeSetting = register(
784+
EnumSetting.create(
785+
"Breadcrumbs Mode",
786+
"xaeroplus.setting.breadcrumbs_mode",
787+
BreadcrumbsMode.values(),
788+
BreadcrumbsMode.CHUNK_RADIUS
789+
), SettingLocation.CHUNK_HIGHLIGHTS);
771790
public final DoubleSetting breadcrumbsChunkRadiusSetting = register(
772791
DoubleSetting.create(
773792
"Breadcrumbs Chunk Radius",
774793
"xaeroplus.setting.breadcrumbs_chunk_radius",
775794
0, 16, 1,
776795
0,
777796
(d) -> ModuleManager.getModule(Breadcrumbs.class).setChunkRadius(d),
778-
() -> ModuleManager.getModule(Breadcrumbs.class).isEnabled()),
797+
() -> ModuleManager.getModule(Breadcrumbs.class).isEnabled() && breadcrumbsModeSetting.get() == BreadcrumbsMode.CHUNK_RADIUS),
779798
SettingLocation.CHUNK_HIGHLIGHTS);
780799
public final EnumSetting<ColorHelper.HighlightColor> breadcrumbsColorSetting = register(
781800
EnumSetting.create(

0 commit comments

Comments
 (0)