Ofertas de Intercambio
Este tema cubre el TradeOffer dentro del juego ofrecido por Villagers/Merchants.
Mercante
Un Merchant
es un contenedor para TradeOffers
. Su variable más común es el Villager
. La interfaz del Merchant
puede ser utilizada para abrir ventanas de intercambio.
Los TradeOffers
pueden ser añadidos a y removidos de los Merchants
usando TradeOfferData.
Oferta de Intercambio
Una oferta de intercambio consiste en
an primary/first buying ItemStackSnapshot
una segunda compra opcional
ItemStackSnapshot
una venta
ItemStackSnapshot
already used uses
usos maximos disponibles
una bandera indica si las particulas de experiencia se generan al intercambiar
El TradeOffers
puede ser creado usando a un Builder
o un TradeOfferGenerator.
ConstructordeOfertasdeIntercambio
Los TradeOfferBuilders``son usados principalmente si desea crear dinamicamente ``TradeOffers
sobre la marcha.
El siguiente bloque de códigos construye una nueva TradeOffer
que permite a Players
intercambiar cinco bloques DIRT
por tres bloques GRASS
. Esta oferta de intercambio tiene cuatro usos iniciales, luego de esto el Merchant
puede necesitar algo de tiempo para ofrecer de nuevo esta TradeOffer
.
TradeOffer offer = TradeOffer.builder()
.firstBuyingItem(ItemStack.of(ItemTypes.DIRT, 5))
.sellingItem(ItemStack.of(ItemTypes.GRASS, 3))
.uses(0)
.maxUses(4)
.canGrantExperience(false)
.build();
MuteadorDeListaDeOfertasDeIntercambio
Una TradeOfferListMutator es una interfaz que se invoca durante las mejoras Villager
. Se puede usar para reemplazar el TradeOffers
existente (anteriormente de nivel superior) y agregar el nuevo TradeOffers
. Su variante simplista y única proporcionada por la API es TradeOfferGenerator
. Los diferentes TradeOfferListMutators
para cada nivel y Career
se pueden configurar en VillagerRegistry.
Nota
La lista de TradeOffer
en Villagers
podría generarse lentamente cuando se abre el inventario por primera vez.
TradeOfferGenerator
Los TradeOfferGenerators
son plantillas simples para el nuevo TradeOffers
. Son una variante del TradeOfferListMutator
que solo agregará nuevas entradas y no altera ni eliminará ningún TradeOffers
existente en ese aldeano.
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();
Este TradeOfferGenerator
generará aleatoriamente TradeOffers
que
comprar 5-8
DIRT
vender 5
GRASS
tiene 2-4 usos iniciales restantes
máximo 5 usos
La posibilidad de que el TradeOffer
generado otorgará experiencia es 50%.
Nota
Puedes usar ItemStackGenerators
para aplicar encantamientos dinamicamente u otros datos personalizados a los artículos de compra y venta.
VillagerRegistry
El VillagerRegistry
puede ser obtenido del GameRegistry. Será usado para configurar el TradeOfferListMutator
que será aplicado en una mejora de 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);
El mutador de nivel más bajo que se puede especificar es el nivel 1. Este es equivalente a un Villager
recién nacido.
Nota
Los cambios en el “VillagersRegistry” serán eliminados cuando se resetee el servidor y no tendrán ningún impacto en el “TradeOffers” de “Villagers” que hayan subido de nivel en el pasado.