Trade-Offers
Ce sujet couvre les TradeOffers offerts par les Villagers/Merchants en jeu.
Marchand
Un Merchant est un conteneur pour les TradeOffers. Sa variante la plus commune est le Villager. L’interface Merchant peut être utilisée pour ouvrir des fenêtres d’échange.
Les TradeOffers peuvent être ajoutées et supprimées des Merchants en utilisant TradeOfferData.
Offre d’Échange
Une offre d’échange consiste en
un primaire/premier ItemStackSnapshot d’achat
un secondaire
ItemStackSnapshotd’achat optionnelun
ItemStackSnapshotde ventenombre d’utilisations déjà utilisées
nombre d’utilisations maximales disponibles
un booléen pour indiquer si les orbes d’expérience doivent apparaître lors de l’échange
Les TradeOffers peuvent être créées en utilisant un Builder ou un TradeOfferGenerator.
TradeOfferBuilders
Les TradeOfferBuilders sont principalement utilisés si vous voulez créer des TradeOffers dynamiquement.
Le bloc de code suivant construit une nouvelle TradeOffer qui permet aux Players d’échanger cinq blocs de DIRT contre trois blocs de GRASS. Cette offre d’échange possède quatre utilisations initiales, après ça le Merchant peut avoir besoin d’un peu de temps pour offrir cette TradeOffer encore une fois.
TradeOffer offer = TradeOffer.builder()
.firstBuyingItem(ItemStack.of(ItemTypes.DIRT, 5))
.sellingItem(ItemStack.of(ItemTypes.GRASS, 3))
.uses(0)
.maxUses(4)
.canGrantExperience(false)
.build();
TradeOfferListMutator
Un TradeOfferListMutator est une interface qui est invoquée lors de la montée de niveau d’un Villager. Il peut être utilisé pour remplacer des TradeOffers existantes (par exemple de niveau supérieur) et ajouter de nouvelles TradeOffers. Sa seule et simpliste variante fournie par l’API est le TradeOfferGenerator. Les différents TradeOfferListMutators pour chaque niveau et Career peuvent être configurés dans le VillagerRegistry.
Note
La liste des TradeOffer dans les Villagers peut être générée de manière paresseuse lorsque l’inventaire d’échange est ouvert pour la première fois.
TradeOfferGenerator
Les TradeOfferGenerators sont des modèles simples pour les nouvelles TradeOffers. Il s’agit d’une variante du TradeOfferListMutator qui va seulement ajouter de nouvelles entrées et ne pas modifier ou supprimer de TradeOffers existantes sur ce villageois.
TradeOfferGenerator tradeOfferGenerator = TradeOfferGenerator.builder()
.setPrimaryItemGenerator(random -> ItemStack.of(ItemTypes.DIRT, random.nextInt(3) + 5))
.setSellingGenerator(random -> ItemStack.of(ItemTypes.GRASS, 5))
.startingUses(VariableAmount.baseWithVariance(2, 1))
.maxUses(VariableAmount.fixed(5))
.experienceChance(0.5)
.build();
Ce TradeOfferGenerator va générer aléatoirement des TradeOffers qui vont
acheter 5-8
DIRTvendre 5
GRASSavoir 2-4 utilisations initiales
5 utilisations maximales
La chance que la TradeOffer générée donnera de l’expérience est de 50%.
Note
Vous pouvez utiliser les ItemStackGenerators pour appliquer dynamiquement des enchantements ou d’autres données personnalisées aux items d’achat et de vente.
VillagerRegistry
Le VillagerRegistry peut être obtenu depuis le GameRegistry. Il sevirrar à configuer le TradeOfferListMutator qui sera appliqué lors de la montée de niveau d’un Villager.
VillagerRegistry villagerRegistry = this.game.getRegistry().getVillagerRegistry();
List<TradeOfferListMutator> generators = new ArrayList<>(villagerRegistry.getMutatorsForCareer(Careers.FARMER, 1));
generators.addAll(additionalFarmerLevel1TradeOffers());
villagerRegistry.setMutators(Careers.FARMER, 1, generators);
Le mutateur de montée de niveau spécifiable le plus bas est le niveau 1. C’est l’équivalent d’un Villager qui vient d’apparaître.
Note
Les changements au VillagerRegistry seront perdus lors du redémarrage du serveur et n’auront pas d’impact sur les TradeOffers des Villagers qui sont montés de niveau dans le passé.