Skip to content

Commit f8b42b2

Browse files
authored
Merge pull request #112 from TheNextLvl-net/feat/error-tracking
Add error tracking via FastStats
2 parents 49bd054 + dc714f3 commit f8b42b2

7 files changed

Lines changed: 34 additions & 12 deletions

File tree

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ tasks.compileJava {
2121
}
2222

2323
group = "net.thenextlvl.perworlds"
24-
version = "1.3.1"
24+
version = "1.3.2"
2525

2626
repositories {
2727
mavenCentral()
@@ -35,7 +35,7 @@ dependencies {
3535

3636
compileOnly("net.thenextlvl:worlds:3.12.2") { isTransitive = false }
3737

38-
implementation("dev.faststats.metrics:bukkit:0.9.0")
38+
implementation("dev.faststats.metrics:bukkit:0.10.1")
3939
implementation("net.thenextlvl.version-checker:modrinth-paper:1.0.1")
4040
implementation("net.thenextlvl:i18n:1.1.0")
4141
implementation("net.thenextlvl:nbt:4.3.1")

src/main/java/net/thenextlvl/perworlds/PerWorldsPlugin.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.thenextlvl.perworlds;
22

33
import dev.faststats.bukkit.BukkitMetrics;
4+
import dev.faststats.core.ErrorTracker;
45
import dev.faststats.core.chart.Chart;
56
import io.papermc.paper.plugin.lifecycle.event.types.LifecycleEvents;
67
import net.kyori.adventure.key.Key;
@@ -36,12 +37,14 @@
3637
public final class PerWorldsPlugin extends JavaPlugin {
3738
public static final String ISSUES = "https://github.com/TheNextLvl-net/per-worlds/issues/new?template=bug_report.yml";
3839
public static final String DOCS_URL = "https://thenextlvl.net/docs/perworlds";
40+
public static final ErrorTracker ERROR_TRACKER = ErrorTracker.contextAware();
3941

4042
private final PluginVersionChecker versionChecker = new PluginVersionChecker(this);
4143
private final Metrics metrics = new Metrics(this, 25295);
4244
private final dev.faststats.core.Metrics fastStats = BukkitMetrics.factory()
4345
.token("aadc507be90ffc99bfab023066c651ae")
4446
.addChart(worldManagementPlugins())
47+
.errorTracker(ERROR_TRACKER)
4548
.create(this);
4649

4750
private final Key key = Key.key("perworlds", "translations");
@@ -57,7 +60,7 @@ public final class PerWorldsPlugin extends JavaPlugin {
5760

5861
private final GsonFile<PluginConfig> config = new GsonFile<>(
5962
getDataPath().resolve("config.json"), new PluginConfig()
60-
).saveIfAbsent();
63+
).saveIfAbsent(this);
6164

6265
public PerWorldsPlugin() throws IOException {
6366
}
@@ -145,6 +148,8 @@ private void loadGroups() {
145148
});
146149
} catch (IOException e) {
147150
getComponentLogger().error("Failed to load groups", e);
151+
getComponentLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
152+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
148153
}
149154
}
150155

src/main/java/net/thenextlvl/perworlds/group/PaperWorldGroup.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.thenextlvl.nbt.NBTOutputStream;
99
import net.thenextlvl.perworlds.GroupData;
1010
import net.thenextlvl.perworlds.GroupSettings;
11+
import net.thenextlvl.perworlds.PerWorldsPlugin;
1112
import net.thenextlvl.perworlds.WorldGroup;
1213
import net.thenextlvl.perworlds.data.PlayerData;
1314
import net.thenextlvl.perworlds.data.WorldBorderData;
@@ -73,6 +74,7 @@ private Optional<GroupConfig> readConfig() {
7374
} catch (Exception e) {
7475
provider.getLogger().error("Failed to load world group data from {}", configFile, e);
7576
provider.getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
77+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
7678
return Optional.empty();
7779
}
7880
}
@@ -205,7 +207,9 @@ else try (var files = Files.list(path)) {
205207
return Files.deleteIfExists(path);
206208
}
207209
} catch (IOException e) {
208-
getGroupProvider().getLogger().warn("Failed to delete {}", path, e);
210+
provider.getLogger().warn("Failed to delete {}", path, e);
211+
provider.getLogger().warn("Please look for similar issues or report this on GitHub: {}", ISSUES);
212+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
209213
return false;
210214
}
211215
}
@@ -229,6 +233,7 @@ public boolean persist() {
229233
}
230234
provider.getLogger().error("Failed to save world group config {}", configFile, t);
231235
provider.getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
236+
PerWorldsPlugin.ERROR_TRACKER.trackError(t);
232237
return false;
233238
}
234239
}
@@ -262,6 +267,7 @@ public Optional<PlayerData> readPlayerData(OfflinePlayer player) {
262267
} catch (Exception e) {
263268
provider.getLogger().error("Failed to load player data from {}", file, e);
264269
provider.getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
270+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
265271
return Optional.empty();
266272
}
267273
}
@@ -308,6 +314,7 @@ public boolean writePlayerDataUnsafe(OfflinePlayer player, PlayerData data) {
308314
}
309315
provider.getLogger().error("Failed to save player data {}", player.getUniqueId(), t);
310316
provider.getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
317+
PerWorldsPlugin.ERROR_TRACKER.trackError(t);
311318
return false;
312319
}
313320
}

src/main/java/net/thenextlvl/perworlds/listener/RespawnListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public void onPlayerRespawn(PlayerRespawnEvent event) {
6767

6868
@EventHandler(priority = EventPriority.MONITOR)
6969
public void onPlayerPostRespawn(PlayerPostRespawnEvent event) {
70-
var location = event.getRespawnedLocation(); // fixme: keep only for 1.21.8 compatibility
70+
var location = event.getRespawnLocation();
7171
var world = location.getWorld() != null ? location.getWorld() : event.getPlayer().getWorld();
7272
provider.getGroup(world).orElse(provider.getUnownedWorldGroup()).loadPlayerData(event.getPlayer(), false);
7373
}

src/main/java/net/thenextlvl/perworlds/model/PaperPlayerData.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import net.minecraft.world.entity.Pose;
1515
import net.minecraft.world.item.crafting.RecipeHolder;
1616
import net.thenextlvl.perworlds.GroupSettings;
17+
import net.thenextlvl.perworlds.PerWorldsPlugin;
1718
import net.thenextlvl.perworlds.WorldGroup;
1819
import net.thenextlvl.perworlds.data.AdvancementData;
1920
import net.thenextlvl.perworlds.data.AttributeData;
@@ -243,6 +244,7 @@ private boolean isEnabled(Identifier location) {
243244
} catch (Exception e) {
244245
group().getGroupProvider().getLogger().error("Failed to get last selected advancement tab from player {}", player.getName(), e);
245246
group().getGroupProvider().getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
247+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
246248
return null;
247249
}
248250
}
@@ -458,6 +460,7 @@ private void addHighlight(Player player, RecipeHolder<?> recipeHolder, ServerRec
458460
} catch (Exception e) {
459461
group().getGroupProvider().getLogger().error("Failed to add recipe highlight for player {}", player.getName(), e);
460462
group().getGroupProvider().getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
463+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
461464
}
462465
}
463466

@@ -510,6 +513,7 @@ private void applyAdvancements(Player player, GroupSettings settings) {
510513
} catch (Exception e) {
511514
group().getGroupProvider().getLogger().error("Failed to update advancements for player {}", player.getName(), e);
512515
group().getGroupProvider().getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
516+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
513517
}
514518
}
515519

@@ -535,6 +539,7 @@ private Map<AdvancementHolder, AdvancementProgress> getProgress(ServerPlayer pla
535539
} catch (Exception e) {
536540
group().getGroupProvider().getLogger().error("Failed to get advancement progress for player {}", player.getName(), e);
537541
group().getGroupProvider().getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
542+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
538543
return new LinkedHashMap<>();
539544
}
540545
}
@@ -551,6 +556,7 @@ private void updateProgress(AdvancementProgress progress, String criteria, Advan
551556
} catch (Exception e) {
552557
group().getGroupProvider().getLogger().error("Failed to update advancement progress {}", criteria, e);
553558
group().getGroupProvider().getLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
559+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
554560
}
555561
}
556562

src/main/java/net/thenextlvl/perworlds/model/config/GsonFile.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
55
import com.google.gson.stream.JsonReader;
6+
import net.thenextlvl.perworlds.PerWorldsPlugin;
67
import org.jspecify.annotations.NullMarked;
78

89
import java.io.BufferedWriter;
@@ -12,12 +13,12 @@
1213
import java.nio.charset.StandardCharsets;
1314
import java.nio.file.Files;
1415
import java.nio.file.Path;
15-
import java.nio.file.attribute.FileAttribute;
1616

1717
import static java.nio.file.StandardOpenOption.CREATE;
1818
import static java.nio.file.StandardOpenOption.READ;
1919
import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;
2020
import static java.nio.file.StandardOpenOption.WRITE;
21+
import static net.thenextlvl.perworlds.PerWorldsPlugin.ISSUES;
2122

2223
@NullMarked
2324
public final class GsonFile<R> {
@@ -45,8 +46,8 @@ public R getRoot() {
4546
return root = load();
4647
}
4748

48-
public GsonFile<R> saveIfAbsent(FileAttribute<?>... attributes) {
49-
return Files.isRegularFile(file) ? this : save(attributes);
49+
public GsonFile<R> saveIfAbsent(PerWorldsPlugin plugin) {
50+
return Files.isRegularFile(file) ? this : save(plugin);
5051
}
5152

5253
private R load() {
@@ -62,10 +63,10 @@ private R load() {
6263
}
6364
}
6465

65-
public GsonFile<R> save(FileAttribute<?>... attributes) {
66+
public GsonFile<R> save(PerWorldsPlugin plugin) {
6667
try {
6768
var root = getRoot();
68-
Files.createDirectories(file.getParent(), attributes);
69+
Files.createDirectories(file.getParent());
6970
try (var writer = new BufferedWriter(new OutputStreamWriter(
7071
Files.newOutputStream(file, WRITE, CREATE, TRUNCATE_EXISTING),
7172
StandardCharsets.UTF_8
@@ -74,7 +75,10 @@ public GsonFile<R> save(FileAttribute<?>... attributes) {
7475
return this;
7576
}
7677
} catch (IOException e) {
77-
throw new RuntimeException(e);
78+
plugin.getComponentLogger().error("Failed to save config", e);
79+
plugin.getComponentLogger().error("Please look for similar issues or report this on GitHub: {}", ISSUES);
80+
PerWorldsPlugin.ERROR_TRACKER.trackError(e);
81+
return this;
7882
}
7983
}
8084
}

src/main/java/net/thenextlvl/perworlds/model/config/PluginConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public boolean migrateToGroup(PerWorldsPlugin plugin, WorldGroup group) {
2222
if (current.equals(group) || current.hasPlayerData(player)) return;
2323
current.loadPlayerData(player, false);
2424
});
25-
plugin.configFile().save();
25+
plugin.configFile().save(plugin);
2626
return true;
2727
}
2828

0 commit comments

Comments
 (0)