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.
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
# Plan 10-01 — Brainstorm & Select Plugin Concepts
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Sélectionner 2-5 concepts de plugins Hytale pour Phase 10, documenter les specs rapides de chaque.
|
||||||
|
|
||||||
|
## Outcome (shipped 2026-04-22)
|
||||||
|
|
||||||
|
**Décision user : ship les 5 concepts proposés** (pas de coupe, ambition full batch).
|
||||||
|
|
||||||
|
Specs complètes dans `10-CONTEXT.md` :
|
||||||
|
1. **GravityFlip Region** — ~1j — gravité inversée dans zone définie
|
||||||
|
2. **MagneticField Hand** — ~1.5j — item magnet qui attire drops
|
||||||
|
3. **TimeRewind Watch** — ~2.5j — rewind 10s de gameplay
|
||||||
|
4. **BlackHole Grenade** — ~2j — trou noir + explosion
|
||||||
|
5. **Paintball Arena** — ~3j — mini-jeu PvP avec scoring team
|
||||||
|
|
||||||
|
Total effort estimé : ~10j répartis sur plusieurs semaines.
|
||||||
|
|
||||||
|
## Backlog (future milestones)
|
||||||
|
|
||||||
|
30 concepts supplémentaires documentés dans `IDEAS-BACKLOG.md` (root du repo) pour alimenter v1.3+.
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
- [x] 5 concepts verrouillés avec repo names, core mechanics, wow factor assessment
|
||||||
|
- [x] Backlog 30 idées pour pipeline long terme
|
||||||
|
- [x] Technical decisions captées (Java, Gradle Kotlin DSL, JDK 17, MIT license)
|
||||||
|
|
||||||
|
## Next
|
||||||
|
|
||||||
|
Lancer Plan 10-02 (code & publish les 5 plugins par waves).
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
# 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)
|
||||||
|
- [ ] `StateBuffer` — `ConcurrentHashMap<UUID, Deque<PlayerState>>` capacité 200
|
||||||
|
- [ ] Tick scheduler (every tick) → push current state, pop if > 200
|
||||||
|
- [ ] Custom item `pocket_watch` — `PlayerInteractEvent` 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
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
# Plan 10-03 — HytaleDemoGrid Component + /hytale Integration
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Afficher sur `/hytale` une section "Live Demos" présentant les 5 plugins de Phase 10 (ou ceux déjà shippés), avec screenshot/gif + description + lien GitHub + tag techno.
|
||||||
|
|
||||||
|
## Depends on
|
||||||
|
|
||||||
|
- Plan 10-02 Wave 1 minimum (au moins 1 plugin publié) pour avoir du contenu réel
|
||||||
|
- Peut être développé en parallèle avec placeholder data au début
|
||||||
|
|
||||||
|
## Success Criteria
|
||||||
|
|
||||||
|
1. Composant `HytaleDemoGrid.vue` créé dans `app/components/`, auto-importé
|
||||||
|
2. Section "Live Demos" visible sur `/hytale` (FR + EN), SSR rendu
|
||||||
|
3. Chaque card affiche : image/gif, titre, description 1 phrase, tag techno, lien GitHub (externe `rel="noopener"`), wow factor indicator optionnel
|
||||||
|
4. Data source centralisée : `app/data/hytaleDemos.ts` typé avec `HytaleDemo` interface
|
||||||
|
5. i18n `hytale.demos.*` ajouté dans `fr.json` + `en.json` (title, subtitle, empty state)
|
||||||
|
6. Responsive : grille 1 col mobile, 2 cols tablet, 3 cols desktop
|
||||||
|
7. Typecheck vert : `pnpm typecheck` exit 0
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
|
||||||
|
### Wave 1 — Data Layer
|
||||||
|
- [ ] Créer `shared/types/hytaleDemo.ts` :
|
||||||
|
```ts
|
||||||
|
export interface HytaleDemo {
|
||||||
|
id: string
|
||||||
|
titleKey: string // i18n key
|
||||||
|
descKey: string // i18n key
|
||||||
|
image: string // /public/demos/<id>.gif ou .webp
|
||||||
|
github: string // URL repo
|
||||||
|
tech: 'Java' | 'Kotlin'
|
||||||
|
wowFactor?: 1 | 2 | 3 | 4 | 5
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- [ ] Créer `app/data/hytaleDemos.ts` avec les 5 entries (ou les shippés au moment du code)
|
||||||
|
- [ ] Placer placeholders dans `public/demos/` : `.webp` 400×225 avec texte "Demo coming soon" si gif pas prêt
|
||||||
|
|
||||||
|
### Wave 2 — Component
|
||||||
|
- [ ] Créer `app/components/HytaleDemoGrid.vue` :
|
||||||
|
- Props : `demos: HytaleDemo[]` (default = import depuis data)
|
||||||
|
- Template : `<UCard>` Nuxt UI v3 par démo
|
||||||
|
- Image `<NuxtImg>` avec `loading="lazy"`, fallback si manquante
|
||||||
|
- Description via `<I18nT :keypath>` pour interpolations
|
||||||
|
- Badge `<UBadge>` pour `tech` (couleur selon Java/Kotlin)
|
||||||
|
- Lien `<NuxtLink external target="_blank" rel="noopener noreferrer">` vers GitHub
|
||||||
|
- [ ] Variant `featured` avec card plus grande pour 1 démo vedette (optionnel)
|
||||||
|
- [ ] Empty state : si `demos` vide → message "Demos coming soon" traduit
|
||||||
|
|
||||||
|
### Wave 3 — Integration
|
||||||
|
- [ ] Ajouter section sur `app/pages/hytale.vue` après pricing/témoignages :
|
||||||
|
```vue
|
||||||
|
<section class="py-16">
|
||||||
|
<h2>{{ t('hytale.demos.title') }}</h2>
|
||||||
|
<p>{{ t('hytale.demos.subtitle') }}</p>
|
||||||
|
<HytaleDemoGrid />
|
||||||
|
</section>
|
||||||
|
```
|
||||||
|
- [ ] Ajouter ancre `#demos` pour deep-linking
|
||||||
|
- [ ] Vérifier responsive sur mobile/tablet/desktop (Chrome DevTools)
|
||||||
|
|
||||||
|
### Wave 4 — i18n
|
||||||
|
- [ ] Ajouter dans `i18n/locales/fr.json` :
|
||||||
|
```json
|
||||||
|
"hytale": {
|
||||||
|
"demos": {
|
||||||
|
"title": "Live Demos",
|
||||||
|
"subtitle": "Plugins open-source que j'ai développés pour Hytale. Code et documentation complète sur GitHub.",
|
||||||
|
"viewCode": "Voir le code",
|
||||||
|
"emptyState": "Démos à venir"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
- [ ] Équivalent EN dans `en.json`
|
||||||
|
- [ ] Clés i18n par démo : `hytale.demos.gravityFlip.title`, `.description` etc. (5 démos × 2 clés × 2 langues = 20 clés)
|
||||||
|
|
||||||
|
### Wave 5 — Polish
|
||||||
|
- [ ] SEO : ajouter démos au JSON-LD de `/hytale` (liste `CreativeWork` ou `SoftwareSourceCode`) pour Google
|
||||||
|
- [ ] Animation hover card : scale 1.02 + shadow (Tailwind transition)
|
||||||
|
- [ ] Preload première image (`<link rel="preload">` pour la démo featured)
|
||||||
|
- [ ] Test dark/light : vérifier contraste images et text overlay
|
||||||
|
|
||||||
|
## Technical Decisions
|
||||||
|
|
||||||
|
- **Data source** : TypeScript fichier statique (pas JSON) pour avoir typing + auto-import
|
||||||
|
- **Images** : WebP prioritaire, fallback .gif si animation critique (GravityFlip, BlackHole = gif ; Paintball screenshot screenshot)
|
||||||
|
- **Pas de CMS/frontmatter** : les démos sont stables et peu nombreuses, data-as-code suffit
|
||||||
|
- **Couleurs tech badge** : Java = orange, Kotlin = purple (conventions ecosystem)
|
||||||
|
- **Fallback gracieux** : si image manque, show text card "Demo image coming soon"
|
||||||
|
|
||||||
|
## Deferred / Out of Scope
|
||||||
|
|
||||||
|
- Satori og:image dynamique par démo (hors Phase 10)
|
||||||
|
- Player vidéo embedded YouTube (MP4 trop lourd, gif suffit pour MVP)
|
||||||
|
- Stats téléchargement GitHub en live (overkill, scrap manuel)
|
||||||
|
- Internationalisation des repos GitHub README (EN only, aligné target server owners)
|
||||||
|
|
||||||
|
## Commit Atomic Points
|
||||||
|
|
||||||
|
- Wave 1 : `feat(hytale): add HytaleDemo type + data source`
|
||||||
|
- Wave 2 : `feat(components): add HytaleDemoGrid component`
|
||||||
|
- Wave 3 : `feat(hytale): integrate demos section on /hytale`
|
||||||
|
- Wave 4 : `feat(i18n): add hytale.demos.* keys FR+EN`
|
||||||
|
- Wave 5 : `polish(hytale): demos section hover + JSON-LD + dark mode check`
|
||||||
|
|
||||||
|
## Success Validation
|
||||||
|
|
||||||
|
- [ ] Curl `https://killiandalcin.fr/hytale` → HTML contient markup `HytaleDemoGrid`
|
||||||
|
- [ ] Curl `https://killiandalcin.fr/en/hytale` → HTML contient traductions EN
|
||||||
|
- [ ] Check lighthouse sur `/hytale` : score perf pas dégradé (images optimisées)
|
||||||
|
- [ ] DMs Discord : copier l'URL `https://killiandalcin.fr/hytale#demos` et confirmer que le rendu est pro
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
# Phase 10 — Demo Plugins Hytale — Context
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Produire 5 mini-plugins Hytale open-source publiés sur GitHub avec README EN pro, pour donner des preuves concrètes à montrer en DM Discord / Fiverr. Chaque plugin = 1 repo, 1 gif/screenshot, 1 paragraphe de description.
|
||||||
|
|
||||||
|
## Business Rationale
|
||||||
|
|
||||||
|
- **Blocker prospection #1** : zéro démo crédible à montrer actuellement
|
||||||
|
- **Objectif** : pivot de "0 démo" → "5 démos variées" en 7-14 jours de travail réparti
|
||||||
|
- **Target audience** : Hytale server owners (Discord), Fiverr buyers, recruiters gaming
|
||||||
|
|
||||||
|
## Les 5 Concepts Retenus
|
||||||
|
|
||||||
|
### 1. GravityFlip Region
|
||||||
|
**Pitch** : Block spécial qui définit une zone → entités dedans ont gravité inversée.
|
||||||
|
**Wow factor** : ⭐⭐⭐⭐⭐ (viral-friendly, gif 5s)
|
||||||
|
**Complexité** : ⭐ (~150 lignes)
|
||||||
|
**API showcase** : physics override, region system
|
||||||
|
**Core mechanics** :
|
||||||
|
- `PlayerMoveEvent` listener → check if in registered region
|
||||||
|
- Flip `velocity.y` (ou apply upward force chaque tick)
|
||||||
|
- Blocks `gravityflip_block` placés en 4 corners définissent la zone
|
||||||
|
**Repo name** : `hytale-gravity-flip`
|
||||||
|
|
||||||
|
### 2. MagneticField Hand
|
||||||
|
**Pitch** : Item `magnet_tool` → drops dans 8 blocs gravitent vers le joueur, trail de particules. Shift = répulsion.
|
||||||
|
**Wow factor** : ⭐⭐⭐⭐ (satisfying visual, utile)
|
||||||
|
**Complexité** : ⭐⭐ (~200 lignes)
|
||||||
|
**API showcase** : particles, entity velocity, item events
|
||||||
|
**Core mechanics** :
|
||||||
|
- `ItemHeldEvent` → start tick task si magnet_tool
|
||||||
|
- Chaque tick : scan entities.items nearby, apply Vector.subtract(player.loc, item.loc).normalize().multiply(0.3)
|
||||||
|
- `spawnParticle(DUST, item.loc, color=#a0a0ff)`
|
||||||
|
- Detect `player.isSneaking()` → invert direction
|
||||||
|
**Repo name** : `hytale-magnet-hand`
|
||||||
|
|
||||||
|
### 3. TimeRewind Watch
|
||||||
|
**Pitch** : `pocket_watch` clic droit → rewind 10 dernières secondes (position, rotation, dégâts annulés).
|
||||||
|
**Wow factor** : ⭐⭐⭐⭐⭐ (Prince of Persia, gameplay unique)
|
||||||
|
**Complexité** : ⭐⭐⭐ (~300 lignes)
|
||||||
|
**API showcase** : state serialization, scheduler, entity manipulation, damage events
|
||||||
|
**Core mechanics** :
|
||||||
|
- `Deque<PlayerState>` par joueur (capacité 200 ticks = 10s@20tps)
|
||||||
|
- Chaque tick : `states.offer({loc, yaw, pitch, health, timestamp})`; pop old
|
||||||
|
- On `rightClick(pocket_watch)` : lock input, replay states reverse chaque tick (or teleport instant)
|
||||||
|
- Restore health si tracked damage during rewind window
|
||||||
|
**Repo name** : `hytale-time-rewind`
|
||||||
|
|
||||||
|
### 4. BlackHole Grenade
|
||||||
|
**Pitch** : Item lancé → trou noir 3s. Aspire mobs + items + joueurs dans 12 blocs. Implosion finale avec explosion particules.
|
||||||
|
**Wow factor** : ⭐⭐⭐⭐⭐ (spectaculaire, clip-ready)
|
||||||
|
**Complexité** : ⭐⭐ (~250 lignes)
|
||||||
|
**API showcase** : projectiles, entity pull, particle math (vortex)
|
||||||
|
**Core mechanics** :
|
||||||
|
- `ProjectileHitEvent` sur custom item → spawn armorstand invisible au point d'impact
|
||||||
|
- 60 ticks scheduler : chaque tick, scan entities in radius 12, apply Vector toward center * strength
|
||||||
|
- Spawn particles en spiral (helix math) autour du center point
|
||||||
|
- Final tick : `world.createExplosion(loc, 2.0f, false)` + burst particles
|
||||||
|
**Repo name** : `hytale-blackhole-grenade`
|
||||||
|
|
||||||
|
### 5. Paintball Arena
|
||||||
|
**Pitch** : Arme `paintball_gun` tire snowballs colorés. Impact = block change de tint. Arena auto-scorée par équipe.
|
||||||
|
**Wow factor** : ⭐⭐⭐⭐ (mini-jeu complet)
|
||||||
|
**Complexité** : ⭐⭐⭐⭐ (~400 lignes)
|
||||||
|
**API showcase** : projectiles, block manipulation, scoreboard, teams, persistence
|
||||||
|
**Core mechanics** :
|
||||||
|
- `PlayerInteractEvent` (right-click paintball_gun) → `launchProjectile(Snowball)` avec metadata color
|
||||||
|
- `ProjectileHitEvent` sur target block : wrap block in `PaintedBlock` (stocke couleur originale + tint appliqué)
|
||||||
|
- `HashMap<Team, Set<Block>>` pour compter % territoire peint
|
||||||
|
- Scoreboard sidebar live : team A: 42%, team B: 38%
|
||||||
|
- Arena reset command : restore original blocks from persistence
|
||||||
|
**Repo name** : `hytale-paintball`
|
||||||
|
|
||||||
|
## Shared Infrastructure (par repo)
|
||||||
|
|
||||||
|
Chaque repo aura :
|
||||||
|
- `build.gradle.kts` (Kotlin DSL) ou `build.gradle` (Java) — à décider
|
||||||
|
- `src/main/kotlin/fr/killiandalcin/<plugin>/` — source
|
||||||
|
- `plugin.yml` — manifest Hytale
|
||||||
|
- `README.md` — EN pro :
|
||||||
|
- Hero gif/screenshot
|
||||||
|
- Tagline 1 phrase
|
||||||
|
- Features bullet points
|
||||||
|
- Installation (drop jar in /plugins, reload)
|
||||||
|
- Commands/permissions
|
||||||
|
- Credits + lien portfolio killiandalcin.fr
|
||||||
|
- `LICENSE` (MIT)
|
||||||
|
- `.github/workflows/release.yml` — auto-build jar on tag push
|
||||||
|
- `docs/demo.gif` ou screenshot (1-5 Mo max)
|
||||||
|
|
||||||
|
## Open Questions
|
||||||
|
|
||||||
|
1. **Kotlin ou Java ?** — Stack blog article seed utilise Java (com.hypixel.hytale.plugin). Kotlin modernise mais Minecraft/Hytale dev majoritaire Java.
|
||||||
|
2. **GitHub org ou perso ?** — `kayjaydee/hytale-*` (perso visible) ou créer org `killiandalcin-hytale` ?
|
||||||
|
3. **Gif creation tool ?** — ffmpeg + recorder in-game, ou OBS + gifski ? Target ~2 Mo max par gif.
|
||||||
|
4. **Order de ship** — Tous en parallèle, ou 1 par semaine pour générer du contenu Twitter/X/Discord étalé ?
|
||||||
|
|
||||||
|
## Success Criteria (Phase 10)
|
||||||
|
|
||||||
|
- 5 repos GitHub publics avec README EN complet
|
||||||
|
- 5 .jar téléchargeables (release ou build artifact)
|
||||||
|
- 5 gifs/screenshots dans `/public/demos/` du portfolio
|
||||||
|
- Composant `HytaleDemoGrid.vue` intégré sur `/hytale` affichant les 5 démos
|
||||||
|
- i18n FR+EN des cards démos
|
||||||
@@ -0,0 +1,191 @@
|
|||||||
|
# Hytale Plugin Ideas — Backlog (30 concepts)
|
||||||
|
|
||||||
|
Idées de plugins pour pipeline long terme. Les 5 sélectionnés pour Phase 10 sont dans `10-CONTEXT.md` (GravityFlip, MagneticHand, TimeRewind, BlackHoleGrenade, Paintball).
|
||||||
|
|
||||||
|
Tous ces concepts sont pensés pour être **simples à coder** (1-5 jours chacun), **visuellement fort** (gif-friendly pour DM Discord), et **pousser l'API Hytale** sur au moins un point.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mouvement & Traversée
|
||||||
|
|
||||||
|
### 1. PortalGun
|
||||||
|
Deux portails (bleu / orange) posés sur n'importe quelle surface. La traversée conserve la vélocité (Portal-like).
|
||||||
|
Showcase : vectors, projection inverse, téléportation fluide avec gestion de rotation.
|
||||||
|
Code estimé : ~300 lignes. Wow factor viral ⭐⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 2. PhaseWalk
|
||||||
|
Shift + move → passer à travers les murs jusqu'à 2 blocs d'épaisseur, avec effet de distorsion visuelle.
|
||||||
|
Showcase : détection blocs devant joueur, override collision, particles transparency.
|
||||||
|
Utile PvP / exploration. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 3. GrapplingHook
|
||||||
|
Hook lancé, s'accroche au premier block/entité touché. Tire le joueur vers le point d'ancrage.
|
||||||
|
Showcase : projectiles custom, vectors, animation de rope (particles line).
|
||||||
|
Gameplay gadget classique mais satisfaisant. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 4. DoubleJump Boots
|
||||||
|
Bottes custom qui permettent un second saut en l'air, avec particles au boost.
|
||||||
|
Showcase : item attributes, `PlayerMoveEvent`, air-time detection.
|
||||||
|
Code minimal, résultat satisfaisant. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 5. FlightCape
|
||||||
|
Cape qui donne un glide planant : vitesse descente réduite, contrôle directionnel avec look.
|
||||||
|
Showcase : vector math, gravity override, animation aile.
|
||||||
|
Parfait pour exploration verticale. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 6. SpiderSilk Shooter
|
||||||
|
Pistolet à toile : ralentit les mobs touchés, ou s'accroche aux blocs pour un swing type Spider-Man.
|
||||||
|
Showcase : projectiles, status effects, physics pendulum.
|
||||||
|
Combat + mobilité. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 7. WormholeTravel
|
||||||
|
Deux blocs custom liés : marcher sur l'un téléporte instantanément à l'autre (effet vortex).
|
||||||
|
Showcase : block metadata, région tracking, particles vortex.
|
||||||
|
Infrastructure réseau/shortcut. ⭐⭐⭐.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Combat & Sorts
|
||||||
|
|
||||||
|
### 8. FireballStaff
|
||||||
|
Bâton magique qui lance des fireballs avec knockback et traînée de feu qui persiste 3s au sol.
|
||||||
|
Showcase : projectiles custom, block fire set, explosion sans damage terrain.
|
||||||
|
Classique mais toujours efficace. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 9. EarthquakeSlam
|
||||||
|
Saut en hauteur → impact au sol = onde de choc qui repousse et stun les mobs dans un rayon.
|
||||||
|
Showcase : fall distance detection, entity list scan, knockback vector, particles ground ripple.
|
||||||
|
Effet visuel fort en 150 lignes. ⭐⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 10. FrostBreath
|
||||||
|
Item "souffle glacé" — gèle les blocs eau en glace devant le joueur, et met les mobs en stase 3s.
|
||||||
|
Showcase : ray-casting, block replace temporaire, entity freeze status.
|
||||||
|
Visuellement propre, pousse l'API status. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 11. LightningRod
|
||||||
|
Block qui attire la foudre pendant les orages et convertit l'énergie en "puissance" stockée (utilisable par blocks voisins).
|
||||||
|
Showcase : weather event hook, block neighbors, energy transfer simulation.
|
||||||
|
Tech progression tease. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 12. BerserkMode
|
||||||
|
Transformation temporaire : +100% damage mais -50% defense, cooldown 24h in-game, particles rouges.
|
||||||
|
Showcase : attribute modifiers, potion effects custom, cooldown persistence.
|
||||||
|
Gameplay risque/récompense. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 13. MirrorShield
|
||||||
|
Bouclier qui reflète projectiles (arrows, fireballs) vers leur tireur au lieu d'encaisser.
|
||||||
|
Showcase : entity shooter tracking, projectile redirect, raycast.
|
||||||
|
Technique, gameplay counter. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 14. ShadowClone Decoy
|
||||||
|
Juste avant la mort, spawn automatique d'un clone immobile qui tank le prochain hit et disparaît.
|
||||||
|
Showcase : damage event interception, entity spawn + metadata, timing window.
|
||||||
|
Anti-grief / PvE assist. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 15. IllusionMirror
|
||||||
|
Invoque un clone passif qui mime tes mouvements, utile pour tromper les joueurs ennemis en PvP.
|
||||||
|
Showcase : action record/replay, NPC clone, input buffering.
|
||||||
|
Avancé techniquement. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Monde & Environnement
|
||||||
|
|
||||||
|
### 16. TimeBomb Block
|
||||||
|
Block custom avec timer visible (3-2-1 texte flottant), explosion après X secondes posé.
|
||||||
|
Showcase : hologram text, scheduler, block explosion custom radius.
|
||||||
|
Demo propre pour raid gameplay. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 17. WeatherStaff
|
||||||
|
Bâton qui change la météo dans un rayon de 30 blocs autour du joueur (pluie, neige, soleil).
|
||||||
|
Showcase : weather packet per-region, particle emitter, item right-click cycle.
|
||||||
|
Builder/admin friendly. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 18. BiomeChanger
|
||||||
|
Item qui modifie le biome local (sable → neige, forêt → marais) dans un carré 16x16.
|
||||||
|
Showcase : biome set API, chunk re-render, persistence.
|
||||||
|
Sandbox creative. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 19. DayNightSpeed Crystal
|
||||||
|
Cristal tenu → accélère le cycle jour/nuit personnel (ne change pas serveur, effet client).
|
||||||
|
Showcase : world time manipulation scope, per-player packets.
|
||||||
|
Technique propre. ⭐⭐.
|
||||||
|
|
||||||
|
### 20. WildMineshaft Generator
|
||||||
|
Commande admin : génère un donjon-mine procédural sous le joueur, avec couloirs, salles, loot chests.
|
||||||
|
Showcase : proceduraux generation, structure templates, random walkers.
|
||||||
|
Impressionne en 1 commande. ⭐⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 21. GravityWell Tower
|
||||||
|
Tour placée qui crée une zone de gravité augmentée (x3) dans 10 blocs de rayon autour.
|
||||||
|
Showcase : per-region physics override (complement de GravityFlip), entity pull tower.
|
||||||
|
Combo avec GravityFlip pour showcase cohérent. ⭐⭐⭐.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Social & Multiplayer
|
||||||
|
|
||||||
|
### 22. WhisperChat
|
||||||
|
Nouveau channel chat : messages locaux audibles uniquement dans un rayon de 20 blocs (RP).
|
||||||
|
Showcase : chat event interception, proximity calc, channel system.
|
||||||
|
Serveurs RP love this. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 23. EmoteSystem
|
||||||
|
10 emotes custom (wave, dance, bow, sit) avec animations via armor stands / NPCs.
|
||||||
|
Showcase : animation frames, pose data, command radial menu.
|
||||||
|
Social, gif-friendly. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 24. DuelArena Block
|
||||||
|
Block "challenge" : clic droit sur un joueur → pop-up invitation → téléport duel dans arène dédiée.
|
||||||
|
Showcase : inventory save/restore, region teleport, winner detection, reward system.
|
||||||
|
Mini-système PvP complet en 400 lignes. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 25. BountyBoard (Wanted System)
|
||||||
|
Tableau affiché : poser une prime sur un joueur en gold. Tuer la cible = payout auto au tueur.
|
||||||
|
Showcase : economy integration, death event + killer tracking, UI board.
|
||||||
|
Social gameplay driver. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 26. TradingCaravan NPC
|
||||||
|
Marchand PNJ itinérant qui spawn aléatoirement sur des points de la map et vend des items rares.
|
||||||
|
Showcase : NPC pathing, scheduled spawn, inventory trade menu.
|
||||||
|
Event gameplay. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Économie & Progression
|
||||||
|
|
||||||
|
### 27. XPStorage Crystal
|
||||||
|
Cristal qui stocke le XP excédentaire d'un joueur (au-delà d'un seuil). Récupérable plus tard.
|
||||||
|
Showcase : XP event, inventory persistence, GUI interaction.
|
||||||
|
Utility propre, loved by server owners. ⭐⭐⭐.
|
||||||
|
|
||||||
|
### 28. RuneInscriber
|
||||||
|
Table d'enchantement custom : grave des runes sur items pour effets custom (lifesteal, speed, fortune).
|
||||||
|
Showcase : item metadata NBT, enchantment event, GUI multi-input.
|
||||||
|
Vraie feature RPG. ⭐⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 29. TreasureHunt Map
|
||||||
|
Map parchemin généré avec coords brouillées → guide le joueur vers un chest loot random enterré.
|
||||||
|
Showcase : random world coords, map rendering, chest loot table.
|
||||||
|
Exploration gameplay driver. ⭐⭐⭐⭐.
|
||||||
|
|
||||||
|
### 30. BankVault
|
||||||
|
Coffre privé partagé entre tous les mondes/dimensions pour un même joueur (cross-server friendly).
|
||||||
|
Showcase : persistent inventory, UUID keying, database integration ou YAML.
|
||||||
|
Essential utility. ⭐⭐⭐.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- Les concepts 1-5 (GravityFlip, MagneticHand, TimeRewind, BlackHoleGrenade, Paintball) sont dans `10-CONTEXT.md` pour Phase 10.
|
||||||
|
- Ce backlog peut alimenter de futurs milestones (v1.3+) au rythme de 2-3 plugins par trimestre.
|
||||||
|
- Chaque plugin publié = 1 article blog associé potentiel (tutoriel dev + démo) → cocon sémantique étendu.
|
||||||
|
- Priorité à classer par : effet visuel (gif-ready) → showcase API inédite → complexité croissante.
|
||||||
|
|
||||||
|
## Pipeline Suggéré (post Phase 10)
|
||||||
|
|
||||||
|
Si les 5 premiers convertissent bien en clients, next batch :
|
||||||
|
- **Batch 2 (v1.3)** : PortalGun (#1), GrapplingHook (#3), EarthquakeSlam (#9) — combat/mobilité spectacle
|
||||||
|
- **Batch 3 (v1.4)** : RuneInscriber (#28), DuelArena (#24), BountyBoard (#25) — gameplay serveur complet
|
||||||
|
- **Batch 4 (v1.5)** : WildMineshaft (#20), TreasureHunt (#29), TradingCaravan (#26) — exploration
|
||||||
Reference in New Issue
Block a user