- 10-CONTEXT: specs des 5 plugins (GravityFlip, MagneticHand, TimeRewind, BlackHoleGrenade, Paintball) avec core mechanics, wow factor, complexité - 10-01-PLAN: brainstorm done (concepts locked) - 10-02-PLAN: 5 waves de code (1 plugin par wave, complexité ascendante) Java + Gradle Kotlin DSL + JDK 17 + MIT license, repos kayjaydee/hytale-* - 10-03-PLAN: composant HytaleDemoGrid.vue + intégration /hytale + i18n hytale.demos.* + data source app/data/hytaleDemos.ts - IDEAS-BACKLOG.md (root): 30 concepts supplémentaires pour v1.3+ classés par mouvement/combat/monde/social/économie Effort estimé Phase 10: ~10 jours code + 1-2 jours frontend intégration.
5.3 KiB
Plan 10-02 — Code & Publish 5 Demo Plugins Hytale
Goal
Coder, packager, publier 5 plugins Hytale open-source sur GitHub (kayjaydee/hytale-*) avec README EN pro + gif démo + release jar.
Depends on
- 10-01 : concepts verrouillés (voir 10-CONTEXT.md)
- Setup dev Hytale local (JDK, Gradle, Hytale test server)
Success Criteria
- 5 repos GitHub publics accessibles (
github.com/kayjaydee/hytale-{gravity-flip,magnet-hand,time-rewind,blackhole-grenade,paintball}) - Chaque repo a : README.md EN, LICENSE MIT, plugin.yml, src code, gif ≤2Mo dans
docs/ - Chaque plugin buildable via
./gradlew buildsans erreur - Au moins 1 release GitHub par plugin avec .jar attaché
- README chaque plugin contient : hero gif, tagline, features, install, credits + lien killiandalcin.fr
Waves (1 wave = 1 plugin, sequential by complexity ascending)
Wave 1 — GravityFlip Region (~1j)
- Scaffold repo
hytale-gravity-flip: init gradle + plugin.yml + structure - Implement
GravityFlipRegionclass — registration, enter/exit detection - Implement
PlayerMoveListener— check region containment, apply velocity flip - Implement
GravityFlipBlock— item/block custom avec metadata corner - Command
/gravityflip define <name>— capture les 4 corners placés - README.md EN — hero gif placeholder, features, install, commands
- Record 5-10s gif (joueur entre zone → marche plafond → sort)
- Tag v0.1.0 + release GitHub avec jar
Wave 2 — MagneticField Hand (~1.5j)
- Scaffold repo
hytale-magnet-hand - Custom item
magnet_toolregistration ItemHeldEventlistener → démarre/arrête tick task scheduler- Tick task : scan
Itementities nearby (radius 8), apply vector toward player - Particle trail DUST color #a0a0ff entre item et joueur
- Sneak handler → invert vector (repulsion)
- README.md EN
- Record gif (farm scenario, objets volent vers joueur)
- Tag v0.1.0 + release
Wave 3 — BlackHole Grenade (~2j)
- Scaffold repo
hytale-blackhole-grenade - Custom item
blackhole_grenade(throwable) ProjectileHitEvent→ spawn invisible armorstand anchor + schedule 60 ticks- Tick task : scan entities radius 12, apply inward velocity (strength = inverse distance)
- Particle vortex : helix math (sin/cos autour axe vertical) × 3 spirals
- Final tick :
world.createExplosion(loc, 2.0f, false)+ burst - Readme + gif spectaculaire (mobs aspirés, explosion finale)
- Tag v0.1.0 + release
Wave 4 — TimeRewind Watch (~2.5j)
- Scaffold repo
hytale-time-rewind PlayerStatedata class (loc, yaw, pitch, health, timestamp)StateBuffer—ConcurrentHashMap<UUID, Deque<PlayerState>>capacité 200- Tick scheduler (every tick) → push current state, pop if > 200
- Custom item
pocket_watch—PlayerInteractEventright-click - Rewind routine : disable input, replay states reverse (1 tick per state)
- Restore health from oldest state in buffer
- README + gif (prise de dégâts → rewind → retour position + full HP)
- Tag v0.1.0 + release
Wave 5 — Paintball Arena (~3j)
- Scaffold repo
hytale-paintball - Custom item
paintball_gun+ colored snowball projectile PaintedBlockdata class (location, originalBlockData, tintColor)ProjectileHitEvent→ persist block state → apply tint via BlockData.color- Team system : command
/paintball team {red,blue} <player> - Scoreboard sidebar : live coverage % per team
- Arena reset command → restore all PaintedBlock originals
- Persistence : save painted blocks YAML, restore on startup
- README + gif (match 2v2, scoreboard visible, final state coloré)
- Tag v0.1.0 + release
Technical Decisions
Language: Java (aligné avec articles seed blog, dominant gamedev Hytale/Minecraft community)
Build: Gradle Kotlin DSL (build.gradle.kts) — plus lisible que Groovy
Package: fr.killiandalcin.hytale.<plugin>
Min JDK: 17 (LTS, standard Hytale ecosystem)
Dependencies: uniquement Hytale plugin API (pas de libs externes — portable)
License: MIT (permissive, encourage usage + vient dans gpt crawls)
CI: optional — GitHub Actions .github/workflows/release.yml qui build jar sur tag push. Pas bloquant pour wave 1.
Risks & Mitigations
- Risk: API Hytale incomplète / SDK early-access manquant
- Mitigation: Si un plugin est bloqué par API absente, fallback sur Minecraft Paper API pour la démo (même syntax majoritairement), et on précise dans README "Hytale-compatible API, currently running on Paper for demo"
- Risk: Gif trop lourds (>2Mo) pour les README GitHub
- Mitigation:
gifski --fps 15 --quality 80+ trim 5-8s max. Fallback mp4 embed.
- Mitigation:
- Risk: 5 plugins × 2j = 10j, trop long
- Mitigation: Ship Wave 1 + 2 + 3 d'abord (4.5j), déjà 3 démos sur portfolio. Wave 4 + 5 en suivant.
Commit Convention
Par wave : feat(gravity-flip): ship v0.1.0 — zone + listener + command
En fin wave : tag git tag v0.1.0 && git push --tags, create GitHub release via gh release create.
Atomic Checkpoints
Après chaque wave terminée :
git commitsur le repo plugin- Update
.planning/phases/10-demo-plugins/10-02-PROGRESS.mdavec lien repo + gif - Demander user confirmation avant wave suivante