From d3ba5be0403ed7c58105c26f4dfdbd52999497d0 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 22 Jan 2023 01:47:35 +0100 Subject: [PATCH] Made stock checking work for everyone --- .../subcommands/CheckStockCommand.java | 25 +++++++++++++------ .../commands/subcommands/OpenCommand.java | 3 ++- .../listener/TransactionListener.java | 7 +----- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/alttd/playershops/commands/subcommands/CheckStockCommand.java b/src/main/java/com/alttd/playershops/commands/subcommands/CheckStockCommand.java index 177b12c..31f1036 100644 --- a/src/main/java/com/alttd/playershops/commands/subcommands/CheckStockCommand.java +++ b/src/main/java/com/alttd/playershops/commands/subcommands/CheckStockCommand.java @@ -19,6 +19,7 @@ import org.checkerframework.framework.qual.DefaultQualifier; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; @DefaultQualifier(NonNull.class) public class CheckStockCommand implements Subcommand { @@ -44,7 +45,7 @@ public class CheckStockCommand implements Subcommand { public boolean doStockCheck(final CommandSender sender, final String[] args) { if (!(sender instanceof Player player)) { - sender.sendMessage("Only players can use this command."); + sender.sendMessage(Util.parseMiniMessage("Only players can use this command.")); return false; } if (args.length != 2 && args.length != 3) { @@ -69,20 +70,30 @@ public class CheckStockCommand implements Subcommand { try { minimumStock = Integer.parseInt(args[2]); } catch (NumberFormatException e) { - player.sendMessage(Util.parseMiniMessage("minium stock has to be a valid number, use /checkstock [minimum stock]")); + player.sendMessage(Util.parseMiniMessage("minimum stock has to be a valid number, use /checkstock [minimum stock]")); return false; } } - List stockList = checkStock(player.getLocation().getBlockX(), player.getLocation().getBlockZ(), radius); + List stockList = checkStock(player.getLocation().getBlockX(), player.getLocation().getBlockZ(), radius, player); sendStockMessage(player, stockList); return true; } - private List checkStock(int x, int z, int radius) { + /** + * @param x Coordinate to center search on + * @param z Coordinate to center search on + * @param radius Range to check in + * @param caller Player who is checking for stock, can only see the stock from their shops unless they have base_perm.checkstock.bypass + * @return A list of Stock that the player is allowed to see + */ + private List checkStock(int x, int z, int radius, Player caller) { List shops = PlayerShops.getInstance().getShopHandler().getShopsInRadius(x, z, radius); + Stream playerShopStream = shops.stream(); if (minimumStock != -1) - shops = shops.stream().filter(shop -> shop.getRemainingStock() < minimumStock).collect(Collectors.toList()); - return shops.stream().map(shop -> { + playerShopStream = playerShopStream.filter(shop -> shop.getRemainingStock() < minimumStock); + if (!caller.hasPermission(PlayerShopCommand.BASE_PERM + ".checkstock.any")) + playerShopStream = playerShopStream.filter(shop -> shop.getOwnerUUID().equals(caller.getUniqueId())); + return playerShopStream.map(shop -> { Location signLocation = shop.getSignLocation(); return new Stock(shop.getRemainingStock(), signLocation.getBlockX(), @@ -110,7 +121,7 @@ public class CheckStockCommand implements Subcommand { } if (component == null) if (minimumStock == -1) - player.sendMessage(Util.parseMiniMessage("No shops found in specified radius.")); + player.sendMessage(Util.parseMiniMessage("No shops that you have permission to view found in specified radius.")); else player.sendMessage(Util.parseMiniMessage( "No shops with less than stock found.", diff --git a/src/main/java/com/alttd/playershops/commands/subcommands/OpenCommand.java b/src/main/java/com/alttd/playershops/commands/subcommands/OpenCommand.java index b3f3990..56be407 100644 --- a/src/main/java/com/alttd/playershops/commands/subcommands/OpenCommand.java +++ b/src/main/java/com/alttd/playershops/commands/subcommands/OpenCommand.java @@ -2,6 +2,7 @@ package com.alttd.playershops.commands.subcommands; import com.alttd.playershops.commands.Subcommand; import com.alttd.playershops.gui.HomeGui; +import com.alttd.playershops.utils.Util; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.checkerframework.checker.nullness.qual.NonNull; @@ -13,7 +14,7 @@ public class OpenCommand implements Subcommand { @Override public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { if (!(sender instanceof Player player)) { - sender.sendMessage("Only players can use this command."); + sender.sendMessage(Util.parseMiniMessage("Only players can use this command.")); return false; } HomeGui gui = new HomeGui(player.getUniqueId()); diff --git a/src/main/java/com/alttd/playershops/listener/TransactionListener.java b/src/main/java/com/alttd/playershops/listener/TransactionListener.java index b6a4480..82df724 100644 --- a/src/main/java/com/alttd/playershops/listener/TransactionListener.java +++ b/src/main/java/com/alttd/playershops/listener/TransactionListener.java @@ -11,14 +11,10 @@ import com.alttd.playershops.shop.TransactionError; import com.alttd.playershops.utils.Logger; import com.alttd.playershops.utils.ShopUtil; import com.alttd.playershops.utils.Util; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.Tag; import org.bukkit.block.Block; import org.bukkit.entity.Player; @@ -26,7 +22,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemStack; /** * Dedicated class to listen to transactions for shops. @@ -85,7 +80,7 @@ public class TransactionListener extends EventListener { } if (event.getAction() == Action.LEFT_CLICK_BLOCK) { - if (event.getPlayer().isSneaking() && player.hasPermission("playershop.shop.check-stock")) + if (event.getPlayer().isSneaking() && (player.hasPermission("playershop.shop.check-stock") || playerShop.getOwnerUUID().equals(player.getUniqueId()))) giveStockInfo(playerShop, player); else giveInfo(playerShop, player);