Skip to content

Commit 5a44efc

Browse files
authored
Merge pull request
Fix AxGraves hook build error
2 parents aed8c08 + 6b71ef4 commit 5a44efc

28 files changed

Lines changed: 6772 additions & 1030 deletions

CHANGELOG.md

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,105 @@
11
# Changelog
2+
3+
## [1.0.19] - 2025-12-10
4+
### New Features
5+
- **Auto-Pay Option** - Players can enable auto-pay to automatically keep items on death
6+
- Toggle with `/dki autopay` command or via GUI button
7+
- When enabled, automatically pays and keeps items without showing GUI
8+
- Falls back to GUI if player doesn't have enough money
9+
- Setting saved per-player in database
10+
11+
### Bug Fixes
12+
- **Fixed `/dki confirm` and `/dki autopay` error messages** - Now properly checks if GUI mode is enabled before allowing commands
13+
14+
### Technical Changes
15+
- Added `player_settings` table for storing auto-pay preferences
16+
- Added auto-pay toggle button in Death Confirmation GUI (slot 8)
17+
18+
## [1.0.18] - 2025-12-10
19+
### New Features
20+
- **Death Confirmation GUI** - New economy mode `gui` that shows a GUI when player dies
21+
- Players can choose to pay to keep items or drop them
22+
- Configurable timeout (default: 30 seconds)
23+
- Persistent storage survives server restarts
24+
- Handles disconnect/reconnect gracefully
25+
- Protected against inventory duplication exploits
26+
- Command `/dki confirm` to reopen the GUI
27+
- **Pending Death Database** - Separate SQLite database for pending deaths persistence
28+
29+
### Config Changes
30+
- New economy mode: `mode: "gui"` (alongside existing `charge-to-keep` and `charge-to-bypass`)
31+
- New GUI settings under `advanced.economy.gui`:
32+
- `timeout: 30` - Seconds before auto-drop
33+
- `expire-time: 300` - Seconds to store pending death if player disconnects
34+
35+
### Bug Fixes
36+
- **Fixed timestamp not restored from DB** - Pending deaths loaded from database now use original timestamp instead of current time
37+
- **Fixed ConcurrentModificationException** - Cleanup task now collects expired IDs before iterating
38+
- **Fixed duplicate event listeners on reload** - Old DeathConfirmGUI listeners are now unregistered before creating new instance
39+
40+
### Technical Changes
41+
- New classes: `PendingDeath`, `PendingDeathManager`, `DeathConfirmGUI`
42+
- Added `EconomyManager.getBalance()` method
43+
- Full Folia compatibility for GUI mode
44+
45+
## [1.0.17] - 2025-12-10
46+
### Bug Fixes
47+
- **Fixed ResultSet resource leak** - 6 database queries were not properly closing ResultSet objects, causing potential memory leaks
48+
- **Fixed async task race condition** - Stats async tasks now check shutdown flag inside the task to prevent SQLException after connection close
49+
- **Fixed economy retry spam** - Limited economy setup retries to 5 attempts (30s interval) instead of infinite retries
50+
- **Fixed PlaceholderAPI version** - Now uses dynamic version from plugin instead of hardcoded "1.0.15"
51+
52+
### Improvements
53+
- Economy retry counter resets on `/dki reload`
54+
- Added debug logging for economy retry attempts
55+
- Better shutdown safety for async database operations
56+
57+
## [1.0.16] - 2025-12-09
58+
### Bug Fixes
59+
- Fixed stats GUI title detection so inventory clicks/drags are always cancelled
60+
- Fixed per-world keep-inventory resolution to use actual day/night state (not trigger window)
61+
- Lands override now cleanly defers to Lands when `override-lands=false`, avoiding double handling
62+
- Serialized all SQLite access to prevent concurrent connection use and potential locks
63+
- Removed unnecessary deprecation suppression in stats command lookup
64+
65+
66+
## [1.0.15] - 2025-12-07
67+
### Bug Fixes
68+
- Fixed economy payments not being tracked in stats database
69+
- Fixed potential SQLite connection crashes on server lag
70+
- Fixed `/dki stats <player>` not working for offline players
71+
72+
### Improvements
73+
- Added async database writes for better Paper/Folia performance
74+
- Database operations no longer block main server thread
75+
- Graceful shutdown with async task completion
76+
77+
## [1.0.14] - 2025-12-07
78+
### New Features
79+
- Added Player Stats GUI (`/dki stats [player]`)
80+
- SQLite database for persistent death statistics
81+
- Track deaths saved, deaths lost, economy paid, death reasons
82+
- 45-slot inventory GUI with player head, progress bar, server stats
83+
- Added 8 new PlaceholderAPI placeholders for stats
84+
85+
### PlaceholderAPI Stats Placeholders
86+
- `%dynamickeepinv_stats_deaths_saved%` - Total deaths saved
87+
- `%dynamickeepinv_stats_deaths_lost%` - Total deaths lost
88+
- `%dynamickeepinv_stats_total_deaths%` - Total deaths
89+
- `%dynamickeepinv_stats_save_rate%` - Save rate percentage
90+
- `%dynamickeepinv_stats_economy_paid%` - Total economy paid
91+
- `%dynamickeepinv_stats_global_saved%` - Server-wide deaths saved
92+
- `%dynamickeepinv_stats_global_lost%` - Server-wide deaths lost
93+
- `%dynamickeepinv_stats_global_rate%` - Server-wide save rate
94+
95+
### Config Changes
96+
- Config version updated to 5
97+
- Added `stats.enabled` option
98+
99+
### Permissions
100+
- `dynamickeepinv.stats` - View own stats
101+
- `dynamickeepinv.stats.others` - View other players' stats
102+
2103
## [1.0.13] - 2025-12-04
3104
### New Features
4105
- Added PlaceholderAPI support with 14 placeholders

JarInspector.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import java.io.IOException;
2+
import java.util.Enumeration;
3+
import java.util.jar.JarEntry;
4+
import java.util.jar.JarFile;
5+
6+
public class JarInspector {
7+
public static void main(String[] args) throws IOException {
8+
if (args.length == 0) {
9+
System.out.println("Usage: java JarInspector <jar-path>");
10+
return;
11+
}
12+
13+
try (JarFile jarFile = new JarFile(args[0])) {
14+
Enumeration<JarEntry> entries = jarFile.entries();
15+
while (entries.hasMoreElements()) {
16+
JarEntry entry = entries.nextElement();
17+
if (entry.getName().endsWith(".class")) {
18+
System.out.println(entry.getName().replace("/", ".").replace(".class", ""));
19+
}
20+
}
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)