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.