Files
Documentation/content/gameplay-systems/shop.fr.md
2026-01-20 20:33:59 +01:00

4.2 KiB

title, type, weight
title type weight
Boutique docs 5

Le systeme de boutique fournit le commerce via des boutiques NPC et des systemes de troc.

Package: com.hypixel.hytale.builtin.adventure.shop

Architecture

ShopPlugin
├── Types de Boutique
│   ├── ShopAsset - Definitions boutique statiques
│   └── BarterShopAsset - Boutiques de troc dynamiques
├── Elements
│   ├── ShopElement - Entree item boutique
│   └── Integration ChoiceElement
├── Interactions
│   └── GiveItemInteraction
├── Pages
│   ├── ShopPage - Page UI boutique
│   ├── ShopPageSupplier
│   └── BarterPage - Page UI troc
└── Etat
    └── BarterShopState - Etat troc persistant

Types de Boutique

ShopAsset

Boutiques statiques avec contenu fixe:

public class ShopAsset implements JsonAssetWithMap<String, DefaultAssetMap<String, ShopAsset>> {
    protected String id;
    protected ChoiceElement[] elements;  // Items boutique

    public String getId();
    public ChoiceElement[] getElements();
}

Emplacement Asset: Shops/

BarterShopAsset

Boutiques dynamiques avec echanges rotatifs:

public class BarterShopAsset implements JsonAssetWithMap<String, DefaultAssetMap<String, BarterShopAsset>> {
    // Trading base sur le troc avec mecanique de rafraichissement
}

Emplacement Asset: BarterShops/

Configuration de Boutique

Exemple Boutique Statique

# Shops/general_store.json
{
  "Id": "general_store",
  "Content": [
    {
      "Type": "ShopElement",
      "Item": "bread",
      "Price": 5,
      "Currency": "gold_coin"
    },
    {
      "Type": "ShopElement",
      "Item": "torch",
      "Price": 2,
      "Currency": "gold_coin"
    }
  ]
}

Composants Boutique Troc

public class BarterShopState {
    // Etat persistant pour boutiques de troc
    public static void initialize(Path dataDirectory);
    public static void shutdown();
}

public class TradeSlot { /* Slot d'echange de base */ }
public class FixedTradeSlot extends TradeSlot { /* Echange fixe */ }
public class PoolTradeSlot extends TradeSlot { /* Aleatoire depuis pool */ }
public class WeightedTrade { /* Echange aleatoire pondere */ }

public class BarterItemStack { /* Items pour troc */ }
public class BarterTrade { /* Definition complete d'echange */ }
public class RefreshInterval { /* Timing de rafraichissement */ }

Elements de Boutique

ShopElement

Enregistre comme type d'element de choix:

getCodecRegistry(ChoiceElement.CODEC).register("ShopElement", ShopElement.class, ShopElement.CODEC);

Interactions

GiveItemInteraction

Interaction de choix qui donne des items au joueur:

getCodecRegistry(ChoiceInteraction.CODEC).register("GiveItem", GiveItemInteraction.class, GiveItemInteraction.CODEC);

Integration UI

Page Boutique

Page UI personnalisee pour boutiques:

getCodecRegistry(OpenCustomUIInteraction.PAGE_CODEC).register(
    "Shop",
    ShopPageSupplier.class,
    ShopPageSupplier.CODEC
);

Ouvrir une Boutique

# Definition d'interaction
{
  "Type": "OpenCustomUI",
  "Page": {
    "Type": "Shop",
    "ShopId": "general_store"
  }
}

Utilisation de l'API

Obtenir les Assets Boutique

// Obtenir le store d'assets boutique
AssetStore<String, ShopAsset, DefaultAssetMap<String, ShopAsset>> store =
    ShopAsset.getAssetStore();

// Obtenir boutique specifique
ShopAsset shop = ShopAsset.getAssetMap().getAsset("general_store");

// Obtenir boutique troc
BarterShopAsset barterShop = BarterShopAsset.getAssetMap().getAsset("traveling_merchant");

Instance Plugin Boutique

ShopPlugin shop = ShopPlugin.get();

Persistance Etat Troc

L'etat des boutiques de troc est sauvegarde/charge automatiquement:

// Appele dans start()
BarterShopState.initialize(this.getDataDirectory());

// Appele dans shutdown()
BarterShopState.shutdown();

Dependances d'Assets

Les boutiques chargent apres les items:

HytaleAssetStore.builder(ShopAsset.class, new DefaultAssetMap())
    .setPath("Shops")
    .loadsAfter(Item.class)  // Assurer que items sont charges d'abord
    .build();