Files
portfolio/.planning/phases/10-demo-plugins/10-02-PLAN.md
T
kayjaydee 4e7c84912a docs(10): plan Phase 10 — 5 demo plugins Hytale
- 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.
2026-04-22 22:49:59 +02:00

5.3 KiB
Raw Blame History

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

  1. 5 repos GitHub publics accessibles (github.com/kayjaydee/hytale-{gravity-flip,magnet-hand,time-rewind,blackhole-grenade,paintball})
  2. Chaque repo a : README.md EN, LICENSE MIT, plugin.yml, src code, gif ≤2Mo dans docs/
  3. Chaque plugin buildable via ./gradlew build sans erreur
  4. Au moins 1 release GitHub par plugin avec .jar attaché
  5. 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 GravityFlipRegion class — 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_tool registration
  • ItemHeldEvent listener → démarre/arrête tick task scheduler
  • Tick task : scan Item entities 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
  • PlayerState data class (loc, yaw, pitch, health, timestamp)
  • StateBufferConcurrentHashMap<UUID, Deque<PlayerState>> capacité 200
  • Tick scheduler (every tick) → push current state, pop if > 200
  • Custom item pocket_watchPlayerInteractEvent right-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
  • PaintedBlock data 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.
  • 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 commit sur le repo plugin
  • Update .planning/phases/10-demo-plugins/10-02-PROGRESS.md avec lien repo + gif
  • Demander user confirmation avant wave suivante