Skip to content

Instantly share code, notes, and snippets.

@ItsDoot
Created March 4, 2020 22:51
Show Gist options
  • Select an option

  • Save ItsDoot/bcbd2f0e9f1f1f04a008213a047433ab to your computer and use it in GitHub Desktop.

Select an option

Save ItsDoot/bcbd2f0e9f1f1f04a008213a047433ab to your computer and use it in GitHub Desktop.
A merchant service
package org.spongepowered.api.service.merchant;
import org.spongepowered.api.CatalogType;
import org.spongepowered.api.service.economy.account.Account;
import java.util.Collection;
import java.util.Optional;
import java.util.UUID;
public interface Merchant extends CatalogType {
Collection<OfferType<?>> getSupportedOfferTypes();
Collection<Offer<?>> getOffers();
Optional<Offer<?>> getOffer(UUID uniqueId);
<T> OfferTransactionResult<T> buy(Account buyer, Offer<T> offer);
<T> OfferTransactionResult<T> sell(Account seller, Offer<T> offer);
}
package org.spongepowered.api.service.merchant;
import org.spongepowered.api.Nameable;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.economy.Currency;
import org.spongepowered.api.util.Identifiable;
import org.spongepowered.api.util.ResettableBuilder;
import java.math.BigDecimal;
import java.util.Optional;
public interface Offer<T> extends Identifiable, Nameable {
@SuppressWarnings("unchecked")
static <T> Builder<T> builder() {
return Sponge.getRegistry().createBuilder(Builder.class);
}
Currency getCurrency();
BigDecimal getPrice();
OfferType<T> getType();
Optional<T> getValue();
interface Builder<T> extends ResettableBuilder<Offer<T>, Builder<T>> {
Builder<T> name(String name);
Builder<T> type(OfferType<T> offer);
Builder<T> value(T value);
Offer<T> build();
}
}
package org.spongepowered.api.service.merchant;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.economy.transaction.TransactionResult;
import org.spongepowered.api.util.ResettableBuilder;
public interface OfferTransactionResult<T> {
@SuppressWarnings("unchecked")
static <T> Builder<T> builder() {
return Sponge.getRegistry().createBuilder(Builder.class);
}
Offer<T> getOffer();
TransactionResult getResult();
interface Builder<T> extends ResettableBuilder<OfferTransactionResult<T>, Builder<T>> {
Builder<T> offer(Offer<T> offer);
Builder<T> result(TransactionResult result);
OfferTransactionResult<T> build();
}
}
package org.spongepowered.api.service.merchant;
import org.spongepowered.api.CatalogType;
public interface OfferType<T> extends CatalogType {
Class<T> getAllowedType();
}
package org.spongepowered.api.service.merchant;
import org.spongepowered.api.item.inventory.ItemStack;
import org.spongepowered.api.util.generator.dummy.DummyObjectProvider;
public class OfferTypes {
public static final OfferType<ItemStack> ITEM = DummyObjectProvider.createExtendedFor(OfferType.class, "ITEM");
public static final OfferType<String> COMMAND = DummyObjectProvider.createExtendedFor(OfferType.class, "COMMAND");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment