Search in sources :

Example 31 with Player

use of org.spongepowered.api.entity.living.player.Player in project Skree by Skelril.

the class ItemCraftBlockingListener method onItemCraft.

@Listener
@Exclude(value = ChangeInventoryEvent.Held.class)
public void onItemCraft(ChangeInventoryEvent event) {
    event.getTransactions().forEach((t) -> {
        if (blockedItems.contains(t.getFinal().getType().getId())) {
            Optional<Player> optPlayer = event.getCause().first(Player.class);
            if (optPlayer.isPresent()) {
                Player player = optPlayer.get();
                player.sendMessage(Text.of(TextColors.RED, "This item has been disabled."));
            }
            event.setCancelled(true);
        }
    });
}
Also used : Player(org.spongepowered.api.entity.living.player.Player) Listener(org.spongepowered.api.event.Listener) Exclude(org.spongepowered.api.event.filter.type.Exclude)

Example 32 with Player

use of org.spongepowered.api.entity.living.player.Player in project Skree by Skelril.

the class ItemInteractBlockingListener method onItemUse.

@Listener
public void onItemUse(InteractItemEvent event) {
    if (blockedItems.contains(event.getItemStack().getType().getId())) {
        Optional<Player> optPlayer = event.getCause().first(Player.class);
        if (optPlayer.isPresent()) {
            Player player = optPlayer.get();
            player.sendMessage(Text.of(TextColors.RED, "This item has been disabled."));
        }
        event.setCancelled(true);
    }
}
Also used : Player(org.spongepowered.api.entity.living.player.Player) Listener(org.spongepowered.api.event.Listener)

Example 33 with Player

use of org.spongepowered.api.entity.living.player.Player in project Skree by Skelril.

the class MarketBuyCommand method execute.

@Override
public CommandResult execute(CommandSource src, CommandContext args) throws CommandException {
    if (!(src instanceof Player)) {
        src.sendMessage(Text.of("You must be a player to use this command!"));
        return CommandResult.empty();
    }
    Optional<MarketService> optService = Sponge.getServiceManager().provide(MarketService.class);
    if (!optService.isPresent()) {
        src.sendMessage(Text.of(TextColors.DARK_RED, "The market service is not currently running."));
        return CommandResult.empty();
    }
    MarketService service = optService.get();
    Player player = (Player) src;
    if (!canBuyOrSell(player)) {
        player.sendMessage(Text.of(TextColors.RED, "You cannot buy or sell from this area."));
        return CommandResult.empty();
    }
    String itemName = args.<String>getOne("item").get();
    List<String> targetItems;
    if (itemName.endsWith("#armor")) {
        String armorType = itemName.replace("#armor", " ");
        targetItems = Lists.newArrayList(armorType + "helmet", armorType + "chestplate", armorType + "leggings", armorType + "boots");
    } else {
        targetItems = Lists.newArrayList(itemName);
    }
    BigDecimal price = BigDecimal.ZERO;
    for (String anItem : targetItems) {
        Optional<BigDecimal> optPrice = service.getPrice(anItem);
        if (!optPrice.isPresent()) {
            src.sendMessage(Text.of(TextColors.RED, "That item is not available for purchase."));
            return CommandResult.empty();
        }
        price = price.add(optPrice.get());
    }
    Optional<Integer> optAmt = args.getOne("amount");
    int amt = Math.max(1, optAmt.isPresent() ? optAmt.get() : 0);
    price = price.multiply(BigDecimal.valueOf(amt));
    BigDecimal funds = MarketImplUtil.getMoney(player);
    BigDecimal newBalance = funds.subtract(price);
    if (newBalance.compareTo(BigDecimal.ZERO) < 0) {
        BigDecimal neededAmt = newBalance.multiply(BigDecimal.valueOf(-1));
        src.sendMessage(Text.of(TextColors.RED, "You do not have enough money to purchase that item(s)."));
        src.sendMessage(Text.of(TextColors.RED, "You need an additional ", TextColors.WHITE, format(neededAmt), TextColors.RED, "."));
        return CommandResult.empty();
    }
    List<Clause<String, Integer>> newStocks = new ArrayList<>();
    for (String anItem : targetItems) {
        Optional<Integer> optStock = service.getStock(anItem);
        if (optStock.orElse(0) < amt) {
            src.sendMessage(Text.of(TextColors.RED, "There is not enough stock to satisfy your order."));
            return CommandResult.empty();
        }
        newStocks.add(new Clause<>(anItem, optStock.get() - amt));
    }
    // Accumulate items
    List<ItemStack> itemStacks = new ArrayList<>(targetItems.size());
    for (String anItem : targetItems) {
        Optional<ItemStack> stack = service.getItem(anItem);
        if (!stack.isPresent()) {
            // TODO Auto reporting
            src.sendMessage(Text.of(TextColors.RED, "An item stack could not be resolved, please report this!"));
            return CommandResult.empty();
        }
        int total = amt;
        while (total > 0) {
            int increment = Math.min(total, stack.get().getMaxStackQuantity());
            total -= increment;
            itemStacks.add(newItemStack(stack.get(), increment));
        }
    }
    // Alright, all items have been found
    if (!MarketImplUtil.setBalanceTo(player, newBalance, Cause.source(SkreePlugin.container()).build())) {
        // TODO Auto reporting
        src.sendMessage(Text.of(TextColors.RED, "Failed to adjust your balance, please report this!"));
        return CommandResult.empty();
    }
    Clause<Boolean, List<Clause<ItemStack, Integer>>> transactions = MarketImplUtil.giveItems(player, itemStacks, Cause.source(SkreePlugin.container()).build());
    if (!transactions.getKey()) {
        // TODO Auto reporting
        src.sendMessage(Text.of(TextColors.RED, "Failed to give all items, please report this!"));
        return CommandResult.empty();
    }
    // Items have been given process stocks
    for (Clause<String, Integer> stock : newStocks) {
        service.setStock(stock.getKey(), stock.getValue());
    }
    if (!service.logTransactionByStack(player.getUniqueId(), transactions.getValue())) {
        // TODO Auto reporting
        // Not critical, continue
        src.sendMessage(Text.of(TextColors.RED, "Failed to log transactions, please report this!"));
    }
    player.sendMessage(Text.of(TextColors.YELLOW, "Item(s) purchased for ", TextColors.WHITE, format(price), TextColors.YELLOW, "!"));
    return CommandResult.success();
}
Also used : Player(org.spongepowered.api.entity.living.player.Player) ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) ArrayList(java.util.ArrayList) List(java.util.List) Clause(com.skelril.nitro.Clause) ItemStack(org.spongepowered.api.item.inventory.ItemStack) ItemStackFactory.newItemStack(com.skelril.nitro.item.ItemStackFactory.newItemStack) MarketService(com.skelril.skree.service.MarketService)

Example 34 with Player

use of org.spongepowered.api.entity.living.player.Player in project Skree by Skelril.

the class MarketSellCommand method execute.

@Override
public CommandResult execute(CommandSource src, CommandContext args) throws CommandException {
    if (!(src instanceof Player)) {
        src.sendMessage(Text.of("You must be a player to use this command!"));
        return CommandResult.empty();
    }
    Optional<MarketService> optService = Sponge.getServiceManager().provide(MarketService.class);
    if (!optService.isPresent()) {
        src.sendMessage(Text.of(TextColors.DARK_RED, "The market service is not currently running."));
        return CommandResult.empty();
    }
    MarketService service = optService.get();
    Player player = (Player) src;
    if (!canBuyOrSell(player)) {
        player.sendMessage(Text.of(TextColors.DARK_RED, "You cannot buy or sell from this area."));
        return CommandResult.empty();
    }
    Optional<ItemStack> filter = Optional.empty();
    QueryMode mode = QueryMode.HELD;
    if (args.hasAny("a")) {
        mode = QueryMode.EVERYTHING;
    } else if (args.hasAny("h")) {
        mode = QueryMode.HOT_BAR;
    }
    if (mode != QueryMode.HELD && !args.hasAny("u")) {
        filter = player.getItemInHand(HandTypes.MAIN_HAND);
        if (!filter.isPresent()) {
            src.sendMessage(Text.of(TextColors.RED, "You're not holding an item to filter with!"));
            return CommandResult.empty();
        }
    }
    Clause<BigDecimal, List<Integer>> changes = MarketImplUtil.getChanges(player, service, mode, filter.orElse(null));
    if (changes.getValue().isEmpty()) {
        src.sendMessage(Text.of(TextColors.RED, "No sellable items found" + (filter.isPresent() ? " that matched the filter" : "") + "!"));
        return CommandResult.empty();
    }
    List<Clause<ItemStack, Integer>> transactions = MarketImplUtil.removeAtPos(player, changes.getValue());
    if (!service.logTransactionByStack(player.getUniqueId(), transactions)) {
        // TODO Auto reporting
        // Not critical, continue
        src.sendMessage(Text.of(TextColors.DARK_RED, "Failed to log transactions, please report this!"));
    }
    BigDecimal newBalance = changes.getKey().add(MarketImplUtil.getMoney(player));
    if (!MarketImplUtil.setBalanceTo(player, newBalance, Cause.source(SkreePlugin.container()).build())) {
        // TODO Auto reporting
        src.sendMessage(Text.of(TextColors.DARK_RED, "Failed to adjust your balance, please report this!"));
        return CommandResult.empty();
    }
    // Process new stocks
    for (Clause<ItemStack, Integer> transaction : transactions) {
        service.setStock(transaction.getKey(), service.getStock(transaction.getKey()).orElse(0) + -(transaction.getValue()));
    }
    player.sendMessage(Text.of(TextColors.YELLOW, "Item(s) sold for: ", TextColors.WHITE, MarketImplUtil.format(changes.getKey()), TextColors.YELLOW, "!"));
    return CommandResult.success();
}
Also used : Player(org.spongepowered.api.entity.living.player.Player) BigDecimal(java.math.BigDecimal) QueryMode(com.skelril.skree.content.market.MarketImplUtil.QueryMode) List(java.util.List) Clause(com.skelril.nitro.Clause) ItemStack(org.spongepowered.api.item.inventory.ItemStack) MarketService(com.skelril.skree.service.MarketService)

Example 35 with Player

use of org.spongepowered.api.entity.living.player.Player in project Skree by Skelril.

the class MarketAddAliasCommand method execute.

@Override
public CommandResult execute(CommandSource src, CommandContext args) throws CommandException {
    if (!(src instanceof Player)) {
        src.sendMessage(Text.of("You must be a player to use this command!"));
        return CommandResult.empty();
    }
    Optional<MarketService> optService = Sponge.getServiceManager().provide(MarketService.class);
    if (!optService.isPresent()) {
        src.sendMessage(Text.of(TextColors.DARK_RED, "The market service is not currently running."));
        return CommandResult.empty();
    }
    MarketService service = optService.get();
    Optional<ItemStack> held = ((Player) src).getItemInHand(HandTypes.MAIN_HAND);
    if (!held.isPresent()) {
        src.sendMessage(Text.of(TextColors.RED, "You are not holding an item."));
        return CommandResult.empty();
    }
    ItemStack item = held.get();
    String alias = args.<String>getOne("alias").get();
    if (service.addAlias(alias, item)) {
        src.sendMessage(Text.of(TextColors.YELLOW, alias + " added to the market."));
    } else {
        src.sendMessage(Text.of(TextColors.RED, "Your held item is not currently tracked, or the alias is already in use."));
        return CommandResult.empty();
    }
    return CommandResult.success();
}
Also used : Player(org.spongepowered.api.entity.living.player.Player) ItemStack(org.spongepowered.api.item.inventory.ItemStack) MarketService(com.skelril.skree.service.MarketService)

Aggregations

Player (org.spongepowered.api.entity.living.player.Player)125 Listener (org.spongepowered.api.event.Listener)40 ItemStack (org.spongepowered.api.item.inventory.ItemStack)28 Entity (org.spongepowered.api.entity.Entity)25 World (org.spongepowered.api.world.World)21 Text (org.spongepowered.api.text.Text)17 BigDecimal (java.math.BigDecimal)16 EntityPlayer (net.minecraft.entity.player.EntityPlayer)13 ItemStackFactory.newItemStack (com.skelril.nitro.item.ItemStackFactory.newItemStack)12 Vector3d (com.flowpowered.math.vector.Vector3d)10 PlayerCombatParser (com.skelril.nitro.combat.PlayerCombatParser)10 List (java.util.List)10 Optional (java.util.Optional)10 ItemStack (net.minecraft.item.ItemStack)10 Living (org.spongepowered.api.entity.living.Living)10 Task (org.spongepowered.api.scheduler.Task)10 Location (org.spongepowered.api.world.Location)10 MarketService (com.skelril.skree.service.MarketService)8 DamageEntityEvent (org.spongepowered.api.event.entity.DamageEntityEvent)8 TextColors (org.spongepowered.api.text.format.TextColors)8