4.2 KiB
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();