🛍️Shops
Ce document détaille la configuration du système de shop dans le plugin Horizons.
📌 Note: Pour utiliser les boutiques, assurez-vous que le plugin Citizens soit installé sur le serveur. 🛠️
🛒 Configuration des Shops
Cette section concerne les paramètres de configuration dans config.yml
⚙️ Paramètres de Configuration
🕐 Fréquence de mise à jour
Cette option configure l'intervalle à laquelle les prix des articles dans les shops sont automatiquement mis à jour. La valeur par défaut est "15m" (15 minutes).
Le format accepte différentes unités de temps:
s
pour secondesm
pour minutesh
pour heures
💡 Exemple d'utilisation
shops:
# Intervalle de mise à jour des prix (format: 15m, 1h, etc.)
# Contrôle la fréquence à laquelle les prix de tous les shops sont mis à jour
price_update_interval: "15m"
À chaque intervalle, le système exécute la méthode pour tous les shops configurés, recalculant les prix selon les paramètres de prix dynamiques définis pour chaque article.
🔊 Sons de l'Interface
sounds:
# Son joué lors de l'ouverture d'un shop
open: "block.chest.open"
# Son joué lors de la fermeture d'un shop
close: "block.chest.close"
# Son joué lors d'une vente réussie
purchase_success: "entity.player.levelup"
# Son joué lors d'une vente échouée
purchase_fail: "entity.villager.no"
# Son joué lors du changement de page
page_change: "item.book.page_turn"
💬 Messages d'Interaction
messages:
# Message lors d'une vente réussie (supporte {points} pour le montant)
purchase_success: "§aVendu pour §e{points} §apoints!"
# Message lors d'une vente échouée
purchase_fail: "§cVous n'avez pas cet objet dans votre inventaire!"
💡 Exemple complet
shops:
price_update_interval: 15m # Intervalle de mise à jour des prix (s: secondes, m: minutes, h: heures)
# Configuration des sons
sounds:
open: BLOCK_CHEST_OPEN # Son d'ouverture du shop
close: BLOCK_CHEST_CLOSE # Son de fermeture du shop
page_change: UI_BUTTON_CLICK # Son lors du changement de page
purchase_success: ENTITY_PLAYER_LEVELUP # Son lors d'une vente réussie
purchase_fail: ENTITY_VILLAGER_NO # Son lors d'une vente échouée
volume: 1.0 # Volume des sons (entre 0.0 et 1.0)
pitch: 1.0 # Tonalité des sons (entre 0.5 et 2.0)
# Messages personnalisables
messages:
purchase_success: "&aVous avez gagné {points} points pour votre équipe!"
purchase_fail: "&cVous n'avez pas l'item requis!"
# Mode de stockage des prix
storage:
type: "JSON" # Type de stockage: "JSON" ou "MYSQL"
# Configuration MySQL (uniquement si type est "MYSQL")
mysql:
host: "localhost"
port: 3306
database: "horizons"
username: "user"
password: "password"
table_prefix: "hz_"
💾 Système de Sauvegarde des Prix des shops
Le plugin Horizons propose deux méthodes de stockage pour les prix des shops permettant une persistance des prix après rechargement du plugin.
📄 Stockage JSON
Les prix sont sauvegardés dans des fichiers JSON dans le dossier
plugins/Horizons/data/shop_prices/
Chaque shop a son propre fichier (ex:
example_shop::Forgeron.json
)Avantages: simple, pas de dépendance externe
Configuration par défaut, ne nécessite aucune configuration supplémentaire
🗃️ Stockage MySQL (optionnel)
Les prix sont sauvegardés dans une base de données MySQL
Idéal pour les serveurs multi-instances ou avec beaucoup de shops
Nécessite une configuration dans la section
shops.storage.mysql
Les tables sont créées automatiquement lors du premier démarrage
Permet une synchronisation des prix en temps réel entre plusieurs serveurs
⏱️ Les prix sont automatiquement sauvegardés:
À intervalles réguliers (configurable via
price_update_interval
)Lors de la désactivation du plugin
Lors du rechargement des configurations
Pour changer le mode de stockage, modifiez simplement shops.storage.type
dans la configuration principale.
🎮 Interactions avec les Shops
Les shop gèrent les interactions suivantes :
🖱️ Clic gauche sur un item : Vend une unité de cet item au prix actuel.
🖱️ Clic droit sur un item : Vend tous les items du même type dans l'inventaire du joueur.
🔄 Clic sur une flèche : Permet de naviguer entre les pages du shop.
⬅️ Flèche gauche (emplacement 45) : Page précédente.
➡️ Flèche droite (emplacement 53) : Page suivante.
💰 Format d'Affichage des Prix
Les prix sont affichés dans l'interface avec une tendance indiquant leur évolution :
📈 Augmentation :
↑
📉 Diminution :
↓
➡️ Stable :
→
🏪 Association avec les NPCs
Les shops sont automatiquement associés à des NPCs Citizens par leur ID. Lorsqu'un joueur fait un clic droit sur un NPC :
🎵 Le son configuré est joué.
🛍️ Le shop correspondant s'ouvre automatiquement.
📦 L'interface s'affiche avec les items disponibles.
📝 Structure des Shops
Les shops sont configurés dans des fichiers YAML situés dans le dossier plugins/Horizons/shops/
. Chaque fichier représente une ou plusieurs boutiques avec un ou plusieurs NPCs.
🏪 Configuration des NPCs
shop:
ID_DU_VENDEUR: #Peut être un nombre ou du texte
display_name: '&6&lNom du vendeur'
entity_type: VILLAGER
profession: ARMORER
villager_type: PLAINS
Position:
world: world
x: 0
y: 64
z: 0
gui_title: '&6Nom du GUI'
items:
DIAMOND_SWORD:
pricing:
type: STATIC
base_price: 500
NETHERITE_CHESTPLATE:
pricing:
type: STATIC
base_price: 2000
DIAMOND_PICKAXE:
pricing:
type: DYNAMIC
base_price: 300
min_price: 150
max_price: 600
adjustment:
type: SUPPLY_DEMAND
demand_multiplier: 0.15
supply_threshold: 50
cooldown_rate: 0.03
GOLDEN_APPLE:
quantity: 8
pricing:
type: DYNAMIC
base_price: 120
min_price: 80
max_price: 250
adjustment:
type: FIXED_PERCENTAGE
change_rate: 0.05
supply_threshold: 30
ENCHANTED_GOLDEN_APPLE:
pricing:
type: DYNAMIC
base_price: 1500
min_price: 1000
max_price: 3000
adjustment:
type: SUPPLY_DEMAND
demand_multiplier: 0.2
supply_threshold: 10
cooldown_rate: 0.02
⚙Configuration des NPCs
Options Disponibles
display_name
Nom affiché du NPC (supporte les codes couleur)
Oui
entity_type
Type d'entité (VILLAGER
, PLAYER
, etc.)
Oui
Position
Section contenant les coordonnées
Oui
gui_title
Titre de l'interface du shop
Oui
Types d'Entités Spécifiques
Villageois
shop:
Forgeron:
display_name: "&c&lForgeron"
entity_type: "VILLAGER"
profession: "WEAPONSMITH" # Type de métier
villager_type: "PLAINS" # Type de biome
Professions disponibles : ARMORER
, BUTCHER
, CARTOGRAPHER
, CLERIC
, FARMER
, FISHERMAN
, FLETCHER
, LEATHERWORKER
, LIBRARIAN
, MASON
, NITWIT
, NONE
, SHEPHERD
, TOOLSMITH
, WEAPONSMITH
Types de villageois : DESERT
, JUNGLE
, PLAINS
, SAVANNA
, SNOW
, SWAMP
, TAIGA
Joueur avec Skin
shop:
Trader:
display_name: "&6&lTrader Elite"
entity_type: "PLAYER"
skin_name: "Notch" # Nom du skin à utiliser
⚙ Configuration des Items
Chaque item du shop est configuré dans la section items
avec l'identifiant Minecraft de l'item comme clé.
Système de Prix
Prix Statique
items:
DIAMOND:
pricing:
type: "STATIC"
base_price: 100 # Prix fixe
Prix Dynamique (Offre et Demande)
items:
BREAD:
pricing:
type: "DYNAMIC"
base_price: 50 # Prix de base
min_price: 25 # Prix minimum
max_price: 100 # Prix maximum
adjustment:
type: "SUPPLY_DEMAND"
demand_multiplier: 0.15 # Multiplicateur de demande
supply_threshold: 50 # Seuil de fourniture
cooldown_rate: 0.05 # Taux de récupération
💡Exemple Complet
shop:
Forgeron:
display_name: "&c&lForgeron du Village"
entity_type: "VILLAGER"
profession: "WEAPONSMITH"
villager_type: "PLAINS"
Position:
world: "world"
x: 100
y: 64
z: 200
gui_title: "&4Boutique d'Armement"
items:
DIAMOND_SWORD:
pricing:
type: "DYNAMIC"
base_price: 1000
min_price: 750
max_price: 1500
adjustment:
type: "SUPPLY_DEMAND"
demand_multiplier: 0.2
supply_threshold: 20
cooldown_rate: 0.05
IRON_HELMET:
pricing:
type: "STATIC"
base_price: 350
BOW:
pricing:
type: "DYNAMIC"
base_price: 250
min_price: 150
max_price: 400
adjustment:
type: "FIXED_PERCENTAGE"
supply_threshold: 30
change_rate: 0.1
Fonctionnement des Prix Dynamiques
Mode SUPPLY_DEMAND
(Offre et Demande)
SUPPLY_DEMAND
(Offre et Demande)Les prix diminuent à mesure que les joueurs vendent des items (demande élevée)
Le calcul des prix est basé sur la formule :
priceChange = -demandMultiplier * (salesCount/supplyThreshold)^1.5
Plus le nombre de ventes (salesCount) s'approche ou dépasse le seuil (supplyThreshold), plus la baisse est importante
Le taux de baisse dépend du
demand_multiplier
et du nombre d'achats par rapport ausupply_threshold
Quand aucun achat n'est effectué, les prix remontent lentement selon le
cooldown_rate
Mode FIXED_PERCENTAGE
(Pourcentage Fixe)
FIXED_PERCENTAGE
(Pourcentage Fixe)Les prix augmentent régulièrement selon le
change_rate
si peu de ventes sont effectuésQuand les ventes dépassent le
supply_threshold
, les prix diminuent proportionnellement selon la formule :priceChange = -changeRate * (salesCount/supplyThreshold)^1.2
La diminution s'intensifie de manière exponentielle lorsque le nombre de ventes dépasse largement le seuil
🔢 Système de quantités
⚙Configuration des quantités
Chaque item dans un shop peut avoir une quantité configurée qui détermine combien d'items sont vendus par transaction :
items:
NETHERITE_INGOT:
quantity: 5
pricing:
type: "STATIC"
base_price: 1000
🤖Fonctionnement des quantités
🖱️ Clic gauche (Vente de quantité configurée)
Vend exactement la quantité configurée d'items
Le prix affiché est pour la quantité complète
Exemple : avec
quantity: 5
et un prix de vente à 1000, un clic gauche vend 5 items pour 1000 points
🖱️ Clic droit (Vente maximale)
Vend le maximum possible en multiples de la quantité configurée
Le prix est multiplié par le nombre de sets vendus
Exemple : avec 12 items,
quantity: 4
, et un prix de vente à 1000 → vend 3 sets (12 items) pour 3000 points
Mis à jour