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
ItemStackSnapshot
d’achat optionnelun
ItemStackSnapshot
de 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 (ex : de niveau supérieur) et ajouter de nouvelles TradeOffers
. Sa seule et plus simple 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
DIRT
vendre 5
GRASS
avoir 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 servira à configurer 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é.