counter-of-shinuwa/README.md
Shinuwa 07eb6dc053
Some checks failed
Build / build (push) Has been cancelled
Initial commit
2026-09-18 14:54:32 +02:00

105 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Counter of Shinuwa
Mod de boutique à construire dans **Minecraft 1.21.1**, avec **NeoForge 21.1.235**, **Java 21** et **Easy NPC Core 7.12.1**. Installation obligatoire côté client et serveur. Version du projet : **0.1.0**.
Le propriétaire accueille des clients, fabrique leur commande pendant la session et reçoit des émeraudes. À chaque ouverture : **STANDARD** (progression et pénalités) ou **CHILL** (réputation figée, récompenses ×0,60).
## Installation
1. Installer Java 21 et un profil Minecraft 1.21.1 avec NeoForge **21.1.235**.
2. Construire : `./gradlew build` (Windows : `gradlew.bat build`). Le premier lancement télécharge les dépendances.
3. Récupérer Easy NPC : `bash scripts/download-easy-npc.sh`. Le script télécharge [l’artefact 7.12.1 épinglé](https://modrinth.com/mod/easy-npc/version/e5wGcNT7) et contrôle son SHA-512.
4. Copier `build/libs/counter_of_shinuwa-0.1.0.jar` et `build/dependencies/easy_npc-neoforge-1.21.1-7.12.1.jar` dans `mods/`, sur le client et le serveur.
Utiliser **Core** ; le module de configuration Easy NPC n’est pas nécessaire. La licence du projet reste « All Rights Reserved ».
**Particularité de cette publication Easy NPC :** son manifeste ne fournit pas de version et NeoForge affiche `0.0NONE`. Le descripteur accepte cette valeur en plus de la branche 7.12 ; Gradle et le script sélectionnent précisément 7.12.1. Une autre archive portant `0.0NONE` n’est pas une version prise en charge.
## Construire sa première boutique
Les objets figurent dans l’onglet créatif **Counter of Shinuwa** et possèdent des recettes : comptoir, stockage de matières, marqueur de zone, entrée/sortie, outil de liaison.
1. Placer le comptoir, un stockage et deux marqueurs aux coins opposés d’une zone de **32 × 32 × 16 blocs maximum**, coordonnées des blocs incluses. Prévoir la hauteur nécessaire aux joueurs et clients.
2. Placer l’entrée et la sortie au niveau des tapis, sur un sol praticable. Un même bloc peut servir aux deux parcours.
3. Relier l’entrée au côté du comptoir par des **tapis bleus**, puis le comptoir à la sortie par des **tapis rouges**. Chaque couleur forme une seule chaîne, sans embranchement ni boucle. Laisser deux blocs libres au-dessus et assez d’espace pour croiser les clients.
4. Avec l’outil, clic droit sur le comptoir pour le sélectionner, puis sur les deux marqueurs, le stockage et l’entrée. **Accroupi + clic droit** choisit le second marqueur ou la sortie ; sur un stockage, cette action le dissocie. Fermer la session avant de modifier les liaisons.
5. Placer les stations dans la zone. Au comptoir, cliquer **Vérifier la boutique**, puis corriger les erreurs du diagnostic. Les avertissements signalent les machines ignorées. Les contours restent visibles brièvement après fermeture de l’écran.
6. Déposer des matières, par exemple bûches, fer brut et charbon. Cliquer **Ouvrir**, choisir le mode, lire le résumé puis **Confirmer l’ouverture**. Le serveur vérifie à nouveau la boutique.
Exemple vu du dessus, sur un sol plat (`C` comptoir, `E/S` accès, `b/r` tapis) :
```text
E b b b b b C
r
S r r r r r r
```
Placer stations et stockage à côté des parcours, dans la zone. Le propriétaire doit être dans la zone pour que ses fabrications soient admissibles.
## Produire et vendre
- Le premier client arrive peu après l’ouverture. La commande et sa patience commencent **au comptoir**. Une seule commande active, jusqu’à trois produits tenant dans cinq emplacements.
- Fabriquer produits et intermédiaires **pendant la session**, avec le propriétaire et dans la boutique. Les matières explicitement autorisées font exception : par défaut, lingots, diamants et ingrédients de l’amélioration netherite peuvent notamment être apportés.
- Vider les anciennes entrées et sorties des fours, puis charger manuellement les ingrédients. Un apport automatique invalide le lot. Mélanger anciennes et nouvelles sorties ne rend pas les anciennes admissibles.
- Placer les produits dans les cinq cases et cliquer **Livrer**. Une livraison invalide ne consomme rien ; les surplus restent en place. Les objets renommés, endommagés ou portant des composants particuliers ne remplacent pas les produits ordinaires du catalogue.
- Les émeraudes vont dans l’inventaire. Si celui-ci est plein, le crédit persiste et se retire avec **Récupérer les émeraudes**.
- **Arrêter les arrivées** termine les clients présents. **Fermer immédiatement** applique en STANDARD une pénalité unique de −10 s’il reste des clients à servir.
Les autres joueurs peuvent déposer des matières. Retraits, gestion et livraison sont réservés au propriétaire ; les entonnoirs ne peuvent pas retirer le stock sécurisé. Plusieurs boutiques par joueur, une seule session active, réputation commune.
### Stations
| Famille | Stations |
|---|---|
| Fabrication | Inventaire 2×2 et table de fabrication |
| Forge | Four et haut fourneau |
| Cuisine | Fumoir |
| Taille de pierre | Tailleur de pierre |
| Amélioration | Table de forge, transformations netherite |
Limite par défaut : **trois familles**, dont la fabrication 2×2 intrinsèque. Plusieurs stations de la même famille comptent une seule fois. Les recettes spéciales, résultats variables, décorations de forge, feux de camp et machines sans adaptateur sont exclus. Les recettes moddées déterministes utilisant un mécanisme pris en charge peuvent entrer au catalogue.
### Modes
| Règle | STANDARD | CHILL |
|---|---|---|
| Réputation | Succès +2, refus −2, expiration −5 | Inchangée |
| Récompenses | Prix normal | Total ×0,60, arrondi inférieur |
| Stock | Quantités sous 450 ; types figés à l’ouverture dès 450 | Quantités réelles |
| Rythme | Évolue avec la réputation | Plus lent, patience supérieure |
Rangs : Inconnu (0), Petit commerçant (100), Marchand (250), Commerçant réputé (450), Marchand renommé (700), Fournisseur royal (900). Maximum : 1000.
Déconnexion, redémarrage, déchargement des chunks nécessaires, rechargement des données ou modification invalidant la boutique ferment sans pénalité. Les sessions ne sont jamais restaurées ; les anciennes productions restent inutilisables pour les suivantes.
## Configuration et récupération
Fichier : `<monde>/serverconfig/counter_of_shinuwa-server.toml`. Il contrôle dimensions, familles, matières (`IDs` ou `#tags`), produits interdits, prix, réputation, rythme, patience et types Easy NPC. Son rechargement ferme les sessions sans pénalité.
Exemple : `product_prices = ["minecraft:diamond_sword=24", "minecraft:iron_sword=6"]`. Ces prix unitaires précèdent complexité et multiplicateur. Le prix d’une commande est fixé à sa création.
Boutiques, réputations et crédits : `<monde>/data/counter_of_shinuwa.dat`. Les inventaires restent dans leurs blocs.
- `/countershop list` affiche identifiants, positions et crédits des boutiques du joueur.
- `/countershop forget <UUID>` libère une ancienne zone après retrait du comptoir. Boutique fermée, chunk chargé, place disponible pour récupérer le crédit restant. La réputation est conservée.
## Développement et vérification
```sh
./gradlew build # JAR et tests unitaires
bash scripts/verify.sh # JAR, unitaires, GameTests et contrôle du bilan réel
./gradlew runClient # client de développement
./gradlew runServer # serveur dédié de développement, EULA à accepter
```
Test graphique Linux, après les GameTests :
```sh
python3 scripts/prepare-client-smoke.py
xvfb-run -a ./gradlew runClientSmoke
test -f run/clientSmoke/counter-smoke.ok
```
Le test graphique crée une boutique dans un monde isolé, connecte un vrai client, attend une commande Easy NPC et capture `run/clientSmoke/counter-smoke.png`. Ne pas lancer simultanément deux GameTestServer dans le même dossier. La sauvegarde peut prolonger leur arrêt après le bilan des tests.
Voir [l’architecture](docs/ARCHITECTURE.md) et [le bilan de validation](docs/IMPLEMENTATION.md). Farmer’s Delight, assistants, automatisation admissible et recettes spéciales restent hors V1.