papermc-skill 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +12 -12
  3. package/assets/banner-animated.svg +360 -0
  4. package/assets/banner.svg +360 -0
  5. package/bin/cli.js +107 -2
  6. package/docs/01-modern-paper-architecture.md +48 -51
  7. package/docs/02-adventure-and-minimessage.md +48 -52
  8. package/docs/03-persistent-data-container.md +39 -39
  9. package/docs/04-commands-and-brigadier.md +32 -35
  10. package/docs/05-concurrency-and-folia.md +44 -44
  11. package/docs/06-events-and-listeners.md +30 -31
  12. package/docs/07-best-practices-and-perf.md +39 -40
  13. package/docs/08-gui-and-menus.md +34 -37
  14. package/docs/09-custom-items-and-combat.md +25 -33
  15. package/docs/10-database-and-storage.md +27 -27
  16. package/docs/11-security-and-exploit-prevention.md +233 -0
  17. package/package.json +2 -1
  18. package/skills/paper-plugin-dev/SKILL.md +391 -114
  19. package/templates/paper-modern-template/.gradle/9.7.1/checksums/checksums.lock +0 -0
  20. package/templates/paper-modern-template/.gradle/9.7.1/checksums/md5-checksums.bin +0 -0
  21. package/templates/paper-modern-template/.gradle/9.7.1/checksums/sha1-checksums.bin +0 -0
  22. package/templates/paper-modern-template/.gradle/9.7.1/executionHistory/executionHistory.bin +0 -0
  23. package/templates/paper-modern-template/.gradle/9.7.1/executionHistory/executionHistory.lock +0 -0
  24. package/templates/paper-modern-template/.gradle/9.7.1/fileHashes/fileHashes.bin +0 -0
  25. package/templates/paper-modern-template/.gradle/9.7.1/fileHashes/fileHashes.lock +0 -0
  26. package/templates/paper-modern-template/.gradle/9.7.1/fileHashes/resourceHashesCache.bin +0 -0
  27. package/templates/paper-modern-template/.gradle/9.7.1/kotlin-dsl-plugin-entries/kotlin-dsl-plugin-entries.lock +0 -0
  28. package/templates/paper-modern-template/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  29. package/templates/paper-modern-template/.gradle/buildOutputCleanup/cache.properties +1 -1
  30. package/templates/paper-modern-template/build/classes/java/main/com/example/paperplugin/ExamplePaperPlugin.class +0 -0
  31. package/templates/paper-modern-template/build/classes/java/main/com/example/paperplugin/PaperPluginBootstrap.class +0 -0
  32. package/templates/paper-modern-template/build/classes/java/main/com/example/paperplugin/command/HelloCommand.class +0 -0
  33. package/templates/paper-modern-template/build/classes/java/main/com/example/paperplugin/listener/PlayerEventListener.class +0 -0
  34. package/templates/paper-modern-template/build/classes/java/main/com/example/paperplugin/util/SchedulerAdapter.class +0 -0
  35. package/templates/paper-modern-template/build/tmp/compileJava/previous-compilation-data.bin +0 -0
  36. package/templates/paper-modern-template/build.gradle.kts +7 -7
  37. package/templates/paper-modern-template/src/main/java/com/example/paperplugin/ExamplePaperPlugin.java +6 -6
  38. package/templates/paper-modern-template/src/main/java/com/example/paperplugin/PaperPluginBootstrap.java +2 -2
  39. package/templates/paper-modern-template/src/main/java/com/example/paperplugin/command/HelloCommand.java +2 -4
  40. package/templates/paper-modern-template/src/main/java/com/example/paperplugin/data/PluginDataKeys.java +2 -2
  41. package/templates/paper-modern-template/src/main/java/com/example/paperplugin/listener/PlayerEventListener.java +6 -7
  42. package/templates/paper-modern-template/src/main/java/com/example/paperplugin/util/SchedulerAdapter.java +6 -6
  43. package/templates/paper-modern-template/src/main/resources/config.yml +5 -5
package/CHANGELOG.md CHANGED
@@ -5,6 +5,25 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.1.0] - 2026-10-01
9
+
10
+ ### Added
11
+ - **Plugin Security & Anti-Exploit Scanner CLI (`npx papermc-skill audit [path]`)**:
12
+ - Scans Java sources for known Bukkit/Paper vulnerabilities including legacy ChatColor usage, section sign formatting bugs, static collection memory leaks (`Set<Player>`), synchronous chunk freezes (`world.getChunkAt`), insecure SQL string concatenation, and unbounded float/double parsing.
13
+ - **Masterclass Guide 11: Security & Exploit Prevention (`docs/11-security-and-exploit-prevention.md`)**:
14
+ - Deep-dive architectural guide covering item dupe glitch elimination, inventory race conditions, PDC cryptographic tamper-proofing, numeric/economy validation (anti-NaN/overflow), asynchronous chunk loading teleportation, HikariCP connection leak prevention, and memory leak elimination.
15
+ - **Massively Enriched AI Agent Skill (`skills/paper-plugin-dev/SKILL.md`)**:
16
+ - Added dedicated Security & Exploit-Proofing protocol.
17
+ - Added production recipes for Secure Brigadier Commands with numeric bounds, Safe GUI Menu Controllers with 200ms click debounce and drag cancellation, Anti-Tamper PDC Item Utilities, Universal Folia/Paper Schedulers, and Async HikariCP Database Managers.
18
+ - Added 20-point Pre-Release Security Audit Checklist.
19
+
20
+ ### Changed
21
+ - **SchedulerAdapter Precision Hardening**:
22
+ - Fixed tick conversion in `SchedulerAdapter.java` to use exact millisecond calculation `timeUnit.toMillis(delay) / 50L`.
23
+ - **Documentation & Distribution**:
24
+ - Added `assets/` to package distribution files for local and offline tooling.
25
+ - Updated README documentation with Guide 11 and audit quickstart command.
26
+
8
27
  ## [1.0.1] - 2026-09-15
9
28
 
10
29
  ### Added
package/README.md CHANGED
@@ -1,14 +1,8 @@
1
1
  <div align="center">
2
2
 
3
- ```
4
- ██████╗ █████╗ ██████╗ ███████╗██████╗ ███╗ ███╗ ██████╗
5
- ██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔══██╗████╗ ████║██╔════╝
6
- ██████╔╝███████║██████╔╝█████╗ ██████╔╝██╔████╔██║██║
7
- ██╔═══╝ ██╔══██║██╔═══╝ ██╔══╝ ██╔══██╗██║╚██╔╝██║██║
8
- ██║ ██║ ██║██║ ███████╗██║ ██║██║ ╚═╝ ██║╚██████╗
9
- ╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝
10
- 🎮 THE ULTIMATE PAPER & FOLIA ARSENAL 🎮
11
- ```
3
+ <a href="https://github.com/ardianryan/papermc-skill">
4
+ <img src="https://raw.githubusercontent.com/ardianryan/papermc-skill/main/assets/banner-animated.svg" alt="PaperMC Skill - The Ultimate Paper &amp; Folia Arsenal" width="100%" />
5
+ </a>
12
6
 
13
7
  # ⚔️ PAPERMC PLUGIN SKILL & KNOWLEDGE BASE ⚔️
14
8
 
@@ -21,7 +15,7 @@
21
15
  [![GitHub Release](https://img.shields.io/github/v/release/ardianryan/papermc-skill?style=for-the-badge&color=2ea44f&logo=github&logoColor=white)](https://github.com/ardianryan/papermc-skill/releases/latest)
22
16
  [![License: MIT](https://img.shields.io/badge/License-MIT-44CC11?style=for-the-badge)](LICENSE)
23
17
 
24
- [⚡ Quickstart](#-instant-quickstart-5-seconds) • [💎 Key Features](#-why-modern-paper-matters) • [📚 10 Masterclass Guides](#-10-masterclass-technical-guides) • [🔍 Battle-Tested References](#-cloned-reference-plugins) • [🤖 AI Agent Skill](#-ai-agent-integration)
18
+ [⚡ Quickstart](#-instant-quickstart-5-seconds) • [💎 Key Features](#-why-modern-paper-matters) • [📚 11 Masterclass Guides](#-11-masterclass-technical-guides) • [🔍 Battle-Tested References](#-cloned-reference-plugins) • [🤖 AI Agent Skill](#-ai-agent-integration)
25
19
 
26
20
  ---
27
21
 
@@ -51,6 +45,11 @@ To check for the newest Minecraft & PaperMC releases from the official API:
51
45
  npx papermc-skill check-update
52
46
  ```
53
47
 
48
+ To audit any plugin codebase for exploits, memory leaks, and anti-patterns:
49
+ ```bash
50
+ npx papermc-skill audit
51
+ ```
52
+
54
53
  ---
55
54
 
56
55
  ## 💎 Why Modern Paper Matters
@@ -67,7 +66,7 @@ The Minecraft server ecosystem has evolved dramatically. Legacy habits lead to s
67
66
 
68
67
  ---
69
68
 
70
- ## 📚 10 Masterclass Technical Guides
69
+ ## 📚 11 Masterclass Technical Guides
71
70
 
72
71
  Written by developers for developers, covering everything from basic setup to high-throughput concurrency:
73
72
 
@@ -83,6 +82,7 @@ Written by developers for developers, covering everything from basic setup to hi
83
82
  | **08** | [Modern GUI & Inventory Menus](https://github.com/ardianryan/papermc-skill/blob/main/docs/08-gui-and-menus.md) | Custom `InventoryHolder` menus, PDC interactive buttons, and bulletproof duplication-exploit prevention. |
84
83
  | **09** | [Custom Items, Abilities & Combat](https://github.com/ardianryan/papermc-skill/blob/main/docs/09-custom-items-and-combat.md) | Raycasting spells (`rayTraceEntities`), particle beam effects, vanilla visual cooldowns, and SFX. |
85
84
  | **10** | [Asynchronous Database Storage](https://github.com/ardianryan/papermc-skill/blob/main/docs/10-database-and-storage.md) | SQLite & MySQL HikariCP connection pooling, thread-safe asynchronous DAO pattern with `CompletableFuture`. |
85
+ | **11** | [Security & Exploit Prevention](https://github.com/ardianryan/papermc-skill/blob/main/docs/11-security-and-exploit-prevention.md) | Eliminating dupe glitches, inventory race conditions, PDC tamper verification, numeric/economy validation, and packet DoS defense. |
86
86
 
87
87
  ---
88
88
 
@@ -135,7 +135,7 @@ When pair-programming with AI coding agents:
135
135
  | :--- | :--- | :--- |
136
136
  | **NPM Global** | `npx papermc-skill` | [![NPM Version](https://img.shields.io/npm/v/papermc-skill?color=CB3837)](https://www.npmjs.com/package/papermc-skill) |
137
137
  | **GitHub Packages** | `@ardianryan/papermc-skill` | [GitHub Packages Hub](https://github.com/users/ardianryan/packages?repo_name=papermc-skill) |
138
- | **Release Asset** | `papermc-skill-v1.0.1.zip` | [Latest GitHub Release](https://github.com/ardianryan/papermc-skill/releases/latest) |
138
+ | **Release Asset** | `papermc-skill-v1.1.0.zip` | [Latest GitHub Release](https://github.com/ardianryan/papermc-skill/releases/latest) |
139
139
 
140
140
  ---
141
141
 
@@ -0,0 +1,360 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 320" width="100%" height="100%">
2
+ <defs>
3
+ <!-- Background Gradient -->
4
+ <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" stop-color="#0a0d17" />
6
+ <stop offset="45%" stop-color="#101524" />
7
+ <stop offset="75%" stop-color="#141a2e" />
8
+ <stop offset="100%" stop-color="#090c15" />
9
+ </linearGradient>
10
+
11
+ <!-- Title Cyan Gradients -->
12
+ <linearGradient id="titleCyan" x1="0%" y1="0%" x2="0%" y2="100%">
13
+ <stop offset="0%" stop-color="#affaff" />
14
+ <stop offset="30%" stop-color="#38d9ff" />
15
+ <stop offset="70%" stop-color="#00a3ff" />
16
+ <stop offset="100%" stop-color="#0055b3" />
17
+ </linearGradient>
18
+
19
+ <linearGradient id="titleCyanGlow" x1="0%" y1="0%" x2="0%" y2="100%">
20
+ <stop offset="0%" stop-color="#e0ffff" />
21
+ <stop offset="100%" stop-color="#00bfff" />
22
+ </linearGradient>
23
+
24
+ <!-- Portal & Beacon Radial Glow -->
25
+ <radialGradient id="portalCenterGlow" cx="50%" cy="40%" r="60%">
26
+ <stop offset="0%" stop-color="#9d4edd" stop-opacity="0.25" />
27
+ <stop offset="40%" stop-color="#38d9ff" stop-opacity="0.15" />
28
+ <stop offset="75%" stop-color="#101524" stop-opacity="0.05" />
29
+ <stop offset="100%" stop-color="#101524" stop-opacity="0" />
30
+ </radialGradient>
31
+
32
+ <linearGradient id="beaconBeam" x1="0%" y1="0%" x2="100%" y2="0%">
33
+ <stop offset="0%" stop-color="#38d9ff" stop-opacity="0" />
34
+ <stop offset="50%" stop-color="#38d9ff" stop-opacity="0.18" />
35
+ <stop offset="100%" stop-color="#9d4edd" stop-opacity="0" />
36
+ </linearGradient>
37
+
38
+ <!-- Drop Shadow / Glow Filters -->
39
+ <filter id="textGlow" x="-20%" y="-20%" width="140%" height="140%">
40
+ <feGaussianBlur stdDeviation="5" result="blur" />
41
+ <feComposite in="SourceGraphic" in2="blur" operator="over" />
42
+ </filter>
43
+
44
+ <filter id="softAura" x="-40%" y="-40%" width="180%" height="180%">
45
+ <feGaussianBlur stdDeviation="10" result="blur" />
46
+ <feComposite in="SourceGraphic" in2="blur" operator="over" />
47
+ </filter>
48
+
49
+ <filter id="pixelShadow">
50
+ <feDropShadow dx="3" dy="4" stdDeviation="0" flood-color="#020408" flood-opacity="0.95" />
51
+ </filter>
52
+
53
+ <!-- Minecraft Grid Texture Pattern -->
54
+ <pattern id="mcGrid" width="24" height="24" patternUnits="userSpaceOnUse">
55
+ <rect width="24" height="24" fill="none" />
56
+ <path d="M 24 0 L 0 0 0 24" fill="none" stroke="#ffffff" stroke-width="0.75" stroke-opacity="0.03" />
57
+ <rect x="11" y="11" width="2" height="2" fill="#ffffff" fill-opacity="0.035" />
58
+ </pattern>
59
+ </defs>
60
+
61
+ <style>
62
+ <![CDATA[
63
+ /* CSS Animations */
64
+ @keyframes float-sword {
65
+ 0%, 100% { transform: translateY(0px) rotate(-16deg); }
66
+ 50% { transform: translateY(-14px) rotate(-12deg); }
67
+ }
68
+ @keyframes float-apple {
69
+ 0%, 100% { transform: translateY(0px) rotate(10deg); }
70
+ 50% { transform: translateY(-12px) rotate(14deg); }
71
+ }
72
+ @keyframes xp-drift {
73
+ 0% { transform: translateY(0px); opacity: 0; }
74
+ 25% { opacity: 0.9; }
75
+ 80% { opacity: 0.8; }
76
+ 100% { transform: translateY(-80px); opacity: 0; }
77
+ }
78
+ @keyframes star-flicker {
79
+ 0%, 100% { opacity: 0.2; transform: scale(0.7); }
80
+ 50% { opacity: 1; transform: scale(1.3); }
81
+ }
82
+ @keyframes radar-pulse {
83
+ 0% { r: 4; opacity: 1; stroke-width: 2; }
84
+ 100% { r: 13; opacity: 0; stroke-width: 0.5; }
85
+ }
86
+
87
+ .sword-group {
88
+ transform-box: fill-box;
89
+ transform-origin: center;
90
+ animation: float-sword 4.5s ease-in-out infinite;
91
+ }
92
+ .apple-group {
93
+ transform-box: fill-box;
94
+ transform-origin: center;
95
+ animation: float-apple 5s ease-in-out infinite;
96
+ }
97
+ .xp-drift-1 { animation: xp-drift 3.6s ease-in-out infinite; }
98
+ .xp-drift-2 { animation: xp-drift 4.4s ease-in-out infinite 1.2s; }
99
+ .xp-drift-3 { animation: xp-drift 5.0s ease-in-out infinite 2.2s; }
100
+ .xp-drift-4 { animation: xp-drift 3.8s ease-in-out infinite 0.7s; }
101
+
102
+ .star-1 { transform-origin: center; animation: star-flicker 2.2s ease-in-out infinite; }
103
+ .star-2 { transform-origin: center; animation: star-flicker 3.0s ease-in-out infinite 0.8s; }
104
+ .star-3 { transform-origin: center; animation: star-flicker 2.6s ease-in-out infinite 1.5s; }
105
+
106
+ .radar-pulse-anim { animation: radar-pulse 1.8s cubic-bezier(0, 0.2, 0.8, 1) infinite; }
107
+
108
+ .mc-header-font {
109
+ font-family: 'Courier New', Courier, monospace;
110
+ font-weight: 900;
111
+ letter-spacing: 2px;
112
+ }
113
+ ]]>
114
+ </style>
115
+
116
+ <!-- Frame Background & Border -->
117
+ <rect x="2" y="2" width="996" height="316" rx="14" fill="url(#bgGrad)" stroke="#222b40" stroke-width="3" />
118
+ <rect x="6" y="6" width="988" height="308" rx="10" fill="none" stroke="#141a29" stroke-width="2" />
119
+
120
+ <!-- Subtle Minecraft Grid -->
121
+ <rect x="8" y="8" width="984" height="304" rx="8" fill="url(#mcGrid)" />
122
+
123
+ <!-- Center Ambient Beacon Aura -->
124
+ <ellipse cx="500" cy="140" rx="380" ry="130" fill="url(#portalCenterGlow)" />
125
+ <rect x="410" y="8" width="180" height="304" fill="url(#beaconBeam)" opacity="0.6">
126
+ <animate attributeName="opacity" values="0.3;0.7;0.3" dur="4s" repeatCount="indefinite" />
127
+ </rect>
128
+
129
+ <!-- Minecraft Bedrock / Obsidian Corner Accents -->
130
+ <!-- Top Left -->
131
+ <path d="M 8 36 L 36 8 L 60 8 L 8 60 Z" fill="#2d344d" opacity="0.6" />
132
+ <rect x="14" y="14" width="7" height="7" fill="#00f0ff" opacity="0.85" />
133
+ <rect x="23" y="14" width="5" height="5" fill="#55ff55" opacity="0.75" />
134
+ <!-- Top Right -->
135
+ <path d="M 992 36 L 964 8 L 940 8 L 992 60 Z" fill="#2d344d" opacity="0.6" />
136
+ <rect x="979" y="14" width="7" height="7" fill="#00f0ff" opacity="0.85" />
137
+ <rect x="972" y="14" width="5" height="5" fill="#ffaa00" opacity="0.75" />
138
+ <!-- Bottom Left -->
139
+ <path d="M 8 284 L 36 312 L 60 312 L 8 260 Z" fill="#2d344d" opacity="0.6" />
140
+ <!-- Bottom Right -->
141
+ <path d="M 992 284 L 964 312 L 940 312 L 992 260 Z" fill="#2d344d" opacity="0.6" />
142
+
143
+ <!-- Twinkling Critical Hit Stars / Sparkles -->
144
+ <g transform="translate(180, 52)" class="star-1">
145
+ <path d="M 0 -8 L 2.5 -2.5 L 8 0 L 2.5 2.5 L 0 8 L -2.5 2.5 L -8 0 L -2.5 -2.5 Z" fill="#55ffff" />
146
+ <animateTransform attributeName="transform" type="scale" values="0.7;1.3;0.7" dur="2.2s" repeatCount="indefinite" />
147
+ </g>
148
+ <g transform="translate(830, 58)" class="star-2">
149
+ <path d="M 0 -7 L 2 -2 L 7 0 L 2 2 L 0 7 L -2 2 L -7 0 L -2 -2 Z" fill="#ffff55" />
150
+ <animateTransform attributeName="transform" type="scale" values="0.8;1.4;0.8" dur="3.0s" repeatCount="indefinite" begin="0.8s" />
151
+ </g>
152
+ <g transform="translate(310, 36)" class="star-3">
153
+ <path d="M 0 -5 L 1.5 -1.5 L 5 0 L 1.5 1.5 L 0 5 L -1.5 1.5 L -5 0 L -1.5 -1.5 Z" fill="#ff55ff" />
154
+ <animateTransform attributeName="transform" type="scale" values="0.6;1.2;0.6" dur="2.6s" repeatCount="indefinite" begin="1.5s" />
155
+ </g>
156
+ <g transform="translate(690, 44)" class="star-1">
157
+ <path d="M 0 -5 L 1.5 -1.5 L 5 0 L 1.5 1.5 L 0 5 L -1.5 1.5 L -5 0 L -1.5 -1.5 Z" fill="#55ff55" />
158
+ </g>
159
+
160
+ <!-- Drifting Minecraft XP Orbs & Redstone Dust with SMIL Fallback -->
161
+ <g transform="translate(250, 240)" class="xp-drift-1">
162
+ <rect x="-4" y="-4" width="8" height="8" rx="2" fill="#55ff55" stroke="#00aa00" stroke-width="1.5" />
163
+ <rect x="-1" y="-1" width="3" height="3" fill="#ffffff" />
164
+ <animateTransform attributeName="transform" type="translate" values="250,240; 250,165" dur="3.6s" repeatCount="indefinite" />
165
+ <animate attributeName="opacity" values="0;0.9;0.8;0" dur="3.6s" repeatCount="indefinite" />
166
+ </g>
167
+ <g transform="translate(740, 230)" class="xp-drift-2">
168
+ <rect x="-3" y="-3" width="6" height="6" rx="1.5" fill="#55ffff" stroke="#00aaaa" stroke-width="1.5" />
169
+ <rect x="-1" y="-1" width="2" height="2" fill="#ffffff" />
170
+ <animateTransform attributeName="transform" type="translate" values="740,230; 740,150" dur="4.4s" repeatCount="indefinite" begin="1.2s" />
171
+ <animate attributeName="opacity" values="0;0.9;0.7;0" dur="4.4s" repeatCount="indefinite" begin="1.2s" />
172
+ </g>
173
+ <g transform="translate(200, 210)" class="xp-drift-3">
174
+ <rect x="-3" y="-3" width="6" height="6" fill="#ff4d4d" stroke="#990000" stroke-width="1" />
175
+ <animateTransform attributeName="transform" type="translate" values="200,210; 200,135" dur="5.0s" repeatCount="indefinite" begin="2.2s" />
176
+ <animate attributeName="opacity" values="0;0.85;0.6;0" dur="5.0s" repeatCount="indefinite" begin="2.2s" />
177
+ </g>
178
+ <g transform="translate(790, 250)" class="xp-drift-4">
179
+ <rect x="-4" y="-4" width="8" height="8" rx="2" fill="#ffea55" stroke="#d48800" stroke-width="1.5" />
180
+ <animateTransform attributeName="transform" type="translate" values="790,250; 790,175" dur="3.8s" repeatCount="indefinite" begin="0.7s" />
181
+ <animate attributeName="opacity" values="0;0.9;0.7;0" dur="3.8s" repeatCount="indefinite" begin="0.7s" />
182
+ </g>
183
+
184
+ <!-- ================= LEFT: PIXEL ART DIAMOND SWORD (ANIMATED) ================= -->
185
+ <g transform="translate(95, 140)">
186
+ <g class="sword-group">
187
+ <animateTransform attributeName="transform" type="translate" values="0,0; 0,-14; 0,0" dur="4.5s" repeatCount="indefinite" />
188
+
189
+ <!-- Aura Glow -->
190
+ <circle cx="0" cy="0" r="48" fill="#00f0ff" opacity="0.08" filter="url(#softAura)" />
191
+ <circle cx="0" cy="0" r="44" fill="none" stroke="#00f0ff" stroke-width="1.5" stroke-dasharray="6,6" opacity="0.35" />
192
+
193
+ <!-- Pixel Art Sword Body (Centered and Scaled) -->
194
+ <g transform="scale(3.4) translate(-10, -10)" filter="url(#pixelShadow)">
195
+ <!-- Blade Outer Edge / Highlights -->
196
+ <rect x="18" y="2" width="2" height="2" fill="#ffffff" />
197
+ <rect x="17" y="3" width="2" height="2" fill="#7bf5ff" />
198
+ <rect x="16" y="4" width="2" height="2" fill="#2de2e6" />
199
+ <rect x="15" y="5" width="2" height="2" fill="#ffffff" />
200
+ <rect x="14" y="6" width="2" height="2" fill="#7bf5ff" />
201
+ <rect x="13" y="7" width="2" height="2" fill="#2de2e6" />
202
+ <rect x="12" y="8" width="2" height="2" fill="#ffffff" />
203
+ <rect x="11" y="9" width="2" height="2" fill="#7bf5ff" />
204
+ <rect x="10" y="10" width="2" height="2" fill="#2de2e6" />
205
+ <rect x="9" y="11" width="2" height="2" fill="#ffffff" />
206
+ <rect x="8" y="12" width="2" height="2" fill="#7bf5ff" />
207
+ <rect x="7" y="13" width="2" height="2" fill="#2de2e6" />
208
+
209
+ <!-- Inner Blade Shading (Diamond Core) -->
210
+ <rect x="18" y="3" width="2" height="2" fill="#2de2e6" />
211
+ <rect x="17" y="4" width="2" height="2" fill="#0099bb" />
212
+ <rect x="15" y="6" width="2" height="2" fill="#0099bb" />
213
+ <rect x="14" y="7" width="2" height="2" fill="#006688" />
214
+ <rect x="12" y="9" width="2" height="2" fill="#0099bb" />
215
+ <rect x="11" y="10" width="2" height="2" fill="#006688" />
216
+ <rect x="9" y="12" width="2" height="2" fill="#0099bb" />
217
+ <rect x="8" y="13" width="2" height="2" fill="#006688" />
218
+
219
+ <!-- Sword Guard / Crossguard (Obsidian & Gold) -->
220
+ <rect x="6" y="13" width="2" height="2" fill="#3c3f41" />
221
+ <rect x="7" y="14" width="2" height="2" fill="#ffaa00" />
222
+ <rect x="8" y="14" width="2" height="2" fill="#3c3f41" />
223
+ <rect x="9" y="15" width="2" height="2" fill="#ffaa00" />
224
+ <rect x="5" y="14" width="2" height="2" fill="#27292a" />
225
+ <rect x="6" y="15" width="2" height="2" fill="#3c3f41" />
226
+ <rect x="9" y="13" width="2" height="2" fill="#27292a" />
227
+ <rect x="10" y="14" width="2" height="2" fill="#3c3f41" />
228
+
229
+ <!-- Sword Handle (Wood Oak) -->
230
+ <rect x="5" y="16" width="2" height="2" fill="#8b5a2b" />
231
+ <rect x="4" y="17" width="2" height="2" fill="#6d421e" />
232
+
233
+ <!-- Pommel (Obsidian) -->
234
+ <rect x="3" y="18" width="2" height="2" fill="#27292a" />
235
+ <rect x="2" y="19" width="2" height="2" fill="#3c3f41" />
236
+ </g>
237
+ </g>
238
+ </g>
239
+
240
+ <!-- ================= RIGHT: PIXEL ART ENCHANTED APPLE / ORB (ANIMATED) ================= -->
241
+ <g transform="translate(895, 140)">
242
+ <g class="apple-group">
243
+ <animateTransform attributeName="transform" type="translate" values="0,0; 0,-12; 0,0" dur="5s" repeatCount="indefinite" />
244
+
245
+ <!-- Enchantment Halo -->
246
+ <ellipse cx="0" cy="0" rx="46" ry="20" fill="none" stroke="#c77dff" stroke-width="2" stroke-dasharray="8,4" opacity="0.65" />
247
+ <circle cx="0" cy="0" r="38" fill="#c77dff" opacity="0.1" filter="url(#softAura)" />
248
+
249
+ <!-- Apple Pixel Art -->
250
+ <g transform="scale(3.2) translate(-11, -10)" filter="url(#pixelShadow)">
251
+ <!-- Stem & Leaf -->
252
+ <rect x="11" y="3" width="2" height="3" fill="#8b5a2b" />
253
+ <rect x="13" y="2" width="2" height="2" fill="#55ff55" />
254
+
255
+ <!-- Apple Body -->
256
+ <rect x="8" y="6" width="8" height="10" rx="1" fill="#ffaa00" />
257
+ <rect x="6" y="8" width="12" height="7" rx="1" fill="#ffaa00" />
258
+ <!-- Shiny Highlights -->
259
+ <rect x="7" y="7" width="4" height="4" fill="#ffff55" />
260
+ <rect x="7" y="7" width="2" height="2" fill="#ffffff" />
261
+
262
+ <!-- Shading & Outline -->
263
+ <rect x="7" y="14" width="10" height="2" fill="#cc7700" />
264
+ <rect x="8" y="15" width="8" height="1" fill="#884400" />
265
+ <rect x="5" y="9" width="1" height="5" fill="#884400" />
266
+ <rect x="18" y="9" width="1" height="5" fill="#884400" />
267
+ </g>
268
+ </g>
269
+ </g>
270
+
271
+ <!-- ================= CENTER: BRAND & TYPOGRAPHY ================= -->
272
+ <!-- Top Category Pill -->
273
+ <g transform="translate(500, 48)">
274
+ <rect x="-165" y="-14" width="330" height="28" rx="14" fill="#131929" stroke="#2b3754" stroke-width="1.5" />
275
+ <text x="0" y="5" text-anchor="middle" fill="#00d2ff" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif" font-size="12" font-weight="800" letter-spacing="2.5">
276
+ MINECRAFT JAVA ARCHITECTURE
277
+ </text>
278
+ </g>
279
+
280
+ <!-- Main 3D Title: PAPERMC SKILL -->
281
+ <!-- Bevel Shadow 1 -->
282
+ <text x="502" y="127" text-anchor="middle" class="mc-header-font" font-size="56" fill="#040b17" opacity="0.95">
283
+ PAPERMC SKILL
284
+ </text>
285
+ <!-- Bevel Shadow 2 -->
286
+ <text x="500" y="125" text-anchor="middle" class="mc-header-font" font-size="56" fill="#0a3150">
287
+ PAPERMC SKILL
288
+ </text>
289
+ <!-- Main Glowing Gradient Text -->
290
+ <text x="500" y="122" text-anchor="middle" class="mc-header-font" font-size="56" fill="url(#titleCyan)" filter="url(#textGlow)">
291
+ PAPERMC SKILL
292
+ </text>
293
+ <text x="500" y="122" text-anchor="middle" class="mc-header-font" font-size="56" fill="url(#titleCyan)">
294
+ PAPERMC SKILL
295
+ </text>
296
+
297
+ <!-- High-Energy Tagline -->
298
+ <text x="500" y="165" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Minecraft', sans-serif" font-size="16" font-weight="700" fill="#e2e8f0" letter-spacing="1.2">
299
+ ⚔️ NEXT-GEN MINECRAFT PLUGIN ARSENAL • FOLIA READY • JAVA 21+ ⚔️
300
+ </text>
301
+
302
+ <!-- Feature Pills -->
303
+ <g transform="translate(500, 206)">
304
+ <!-- Pill 1: Paper 1.21.11 -->
305
+ <g transform="translate(-235, 0)">
306
+ <rect x="-65" y="-12" width="130" height="24" rx="6" fill="#0c1d2e" stroke="#00aaff" stroke-width="1" />
307
+ <text x="0" y="4" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="11" font-weight="700" fill="#7bf5ff">
308
+ ⚡ PAPER 1.21+
309
+ </text>
310
+ </g>
311
+
312
+ <!-- Pill 2: Folia Multithreaded -->
313
+ <g transform="translate(-80, 0)">
314
+ <rect x="-70" y="-12" width="140" height="24" rx="6" fill="#1b1233" stroke="#9d4edd" stroke-width="1" />
315
+ <text x="0" y="4" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="11" font-weight="700" fill="#d8b4fe">
316
+ 🌌 FOLIA NATIVE
317
+ </text>
318
+ </g>
319
+
320
+ <!-- Pill 3: Fill v3 Auto-Updater -->
321
+ <g transform="translate(80, 0)">
322
+ <rect x="-70" y="-12" width="140" height="24" rx="6" fill="#1c1f10" stroke="#55ff55" stroke-width="1" />
323
+ <text x="0" y="4" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="11" font-weight="700" fill="#86efac">
324
+ 🔄 FILL V3 TRACKER
325
+ </text>
326
+ </g>
327
+
328
+ <!-- Pill 4: Zero Tech-Debt -->
329
+ <g transform="translate(235, 0)">
330
+ <rect x="-65" y="-12" width="130" height="24" rx="6" fill="#241708" stroke="#ffaa00" stroke-width="1" />
331
+ <text x="0" y="4" text-anchor="middle" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif" font-size="11" font-weight="700" fill="#fde047">
332
+ 🛡️ ZERO TECH-DEBT
333
+ </text>
334
+ </g>
335
+ </g>
336
+
337
+ <!-- Bottom Terminal Status Bar -->
338
+ <g transform="translate(500, 274)">
339
+ <rect x="-310" y="-17" width="620" height="34" rx="8" fill="#080a10" stroke="#1c2336" stroke-width="1.5" />
340
+
341
+ <!-- Radar Live Ping Circle (CSS + SMIL) -->
342
+ <g transform="translate(-280, 0)">
343
+ <circle class="radar-pulse-anim" cx="0" cy="0" r="4" fill="none" stroke="#22c55e">
344
+ <animate attributeName="r" values="4;13" dur="1.8s" repeatCount="indefinite" />
345
+ <animate attributeName="opacity" values="1;0" dur="1.8s" repeatCount="indefinite" />
346
+ </circle>
347
+ <circle cx="0" cy="0" r="4" fill="#22c55e" />
348
+ </g>
349
+
350
+ <text x="-260" y="4" font-family="'Courier New', Courier, monospace" font-size="13" font-weight="700" fill="#22c55e">
351
+ SYS_READY:
352
+ </text>
353
+ <text x="-165" y="4" font-family="'Courier New', Courier, monospace" font-size="12" font-weight="600" fill="#94a3b8">
354
+ LATEST ENGINE <tspan fill="#38d9ff">v1.1.0</tspan> | BUILD <tspan fill="#f59e0b">GRADLE 9.7.1</tspan> | JAVA <tspan fill="#e2e8f0">21 LTS</tspan>
355
+ </text>
356
+ <text x="275" y="4" text-anchor="end" font-family="'Courier New', Courier, monospace" font-size="12" font-weight="700" fill="#00d2ff">
357
+ [LIVE]
358
+ </text>
359
+ </g>
360
+ </svg>