Skip to content

Commit

Permalink
feat: 增加 search 命令, 打开界面增加过滤
Browse files Browse the repository at this point in the history
  • Loading branch information
blank038 committed Oct 20, 2022
1 parent 7f70b1b commit 118147f
Show file tree
Hide file tree
Showing 13 changed files with 90 additions and 38 deletions.
6 changes: 3 additions & 3 deletions src/main/java/com/blank038/servermarket/ServerMarket.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import com.blank038.servermarket.bridge.BaseBridge;
import com.blank038.servermarket.command.MainCommand;
import com.blank038.servermarket.i18n.I18n;
import com.blank038.servermarket.data.MarketData;
import com.blank038.servermarket.data.PlayerData;
import com.blank038.servermarket.data.ResultData;
import com.blank038.servermarket.data.storage.MarketData;
import com.blank038.servermarket.data.cache.PlayerData;
import com.blank038.servermarket.data.storage.ResultData;
import com.blank038.servermarket.enums.PayType;
import com.blank038.servermarket.listener.PlayerListener;
import com.blank038.servermarket.nms.NBTBase;
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/com/blank038/servermarket/api/ServerMarketAPI.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.blank038.servermarket.api;

import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.data.MarketData;
import com.blank038.servermarket.data.PlayerData;
import com.blank038.servermarket.data.gui.SaleItem;
import com.blank038.servermarket.data.storage.MarketData;
import com.blank038.servermarket.data.cache.PlayerData;
import com.blank038.servermarket.data.sale.SaleItem;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

Expand Down Expand Up @@ -38,14 +38,14 @@ public void addItem(UUID uuid, ItemStack itemStack) {
* @param player 目标玩家
* @param key 目标市场编号
*/
public void openMarket(Player player, String key, int page) {
public void openMarket(Player player, String key, int page, String filter) {
MarketData marketData = MarketData.MARKET_DATA.containsKey(key) ? MarketData.MARKET_DATA.get(key)
: MarketData.MARKET_DATA.get(INSTANCE.getConfig().getString("default-market"));
if (marketData == null) {
return;
}
if (player.hasPermission(marketData.getPermission())) {
marketData.openGui(player, page);
marketData.openGui(player, page, filter);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.blank038.servermarket.api.event;

import com.blank038.servermarket.data.MarketData;
import com.blank038.servermarket.data.storage.MarketData;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

Expand Down
27 changes: 24 additions & 3 deletions src/main/java/com/blank038/servermarket/command/MainCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.i18n.I18n;
import com.blank038.servermarket.data.MarketData;
import com.blank038.servermarket.data.gui.StoreContainer;
import com.blank038.servermarket.data.storage.MarketData;
import com.blank038.servermarket.data.storage.StoreContainer;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
Expand Down Expand Up @@ -41,6 +41,9 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
case "open":
this.openServerMarket(sender, args.length == 1 ? null : args[1]);
break;
case "search":
this.searchItemsAndOpenMarket(sender, args);
break;
case "show":
show(sender);
break;
Expand Down Expand Up @@ -70,7 +73,25 @@ private void openServerMarket(CommandSender sender, String key) {
if (!(sender instanceof Player)) {
return;
}
INSTANCE.getApi().openMarket((Player) sender, key, 1);
INSTANCE.getApi().openMarket((Player) sender, key, 1, null);
}

/**
* 搜索全球市场并打开市场
*/
private void searchItemsAndOpenMarket(CommandSender sender, String[] args) {
if (!(sender instanceof Player)) {
return;
}
if (args.length == 1) {
sender.sendMessage(I18n.getString("wrong-market", true));
return;
}
if (args.length == 2) {
sender.sendMessage(I18n.getString("wrong-key", true));
return;
}
INSTANCE.getApi().openMarket((Player) sender, args[1], 1, args[2]);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.blank038.servermarket.data;
package com.blank038.servermarket.data.cache;

import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.data.gui.SaleItem;
import com.blank038.servermarket.data.sale.SaleItem;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.ItemStack;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.blank038.servermarket.data.gui;
package com.blank038.servermarket.data.sale;

import com.blank038.servermarket.enums.PayType;
import org.bukkit.configuration.ConfigurationSection;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.blank038.servermarket.data;
package com.blank038.servermarket.data.storage;

import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.api.event.MarketLoadEvent;
import com.blank038.servermarket.bridge.BaseBridge;
import com.blank038.servermarket.i18n.I18n;
import com.blank038.servermarket.data.gui.SaleItem;
import com.blank038.servermarket.data.gui.StoreContainer;
import com.blank038.servermarket.data.sale.SaleItem;
import com.blank038.servermarket.enums.MarketStatus;
import com.blank038.servermarket.enums.PayType;
import com.blank038.servermarket.util.CommonUtil;
import com.blank038.servermarket.util.ItemUtil;
import com.google.common.collect.Lists;
import com.mc9y.blank038api.util.inventory.GuiModel;
import org.bukkit.Bukkit;
Expand Down Expand Up @@ -271,7 +271,7 @@ public ItemStack getShowItem(SaleItem saleItem, FileConfiguration data) {
* @param player 目标玩家
* @param currentPage 页码
*/
public void openGui(Player player, int currentPage) {
public void openGui(Player player, int currentPage, String filter) {
if (this.MARKET_STATUS == MarketStatus.ERROR) {
player.sendMessage(I18n.getString("market-error", true));
return;
Expand Down Expand Up @@ -328,8 +328,8 @@ public void openGui(Player player, int currentPage) {
}
// 开始设置物品
SaleItem saleItem = SALE_MAP.getOrDefault(keys[i], null);
if (saleItem == null) {
i -= 1;
if (saleItem == null || (filter != null && !ItemUtil.isSimilar(saleItem.getSafeItem(), filter))) {
--index;
continue;
}
items.put(slots[index], this.getShowItem(saleItem, data));
Expand All @@ -346,22 +346,22 @@ public void openGui(Player player, int currentPage) {
Player clicker = (Player) e.getWhoClicked();
if (key != null) {
// 购买商品
this.buySaleItem(clicker, key, e.isShiftClick(), lastPage);
this.buySaleItem(clicker, key, e.isShiftClick(), lastPage, filter);
} else if (action != null) {
// 判断交互方式
switch (action) {
case "up":
if (lastPage == 1) {
clicker.sendMessage(I18n.getString("no-previous-page", true));
} else {
this.openGui(player, lastPage - 1);
this.openGui(player, lastPage - 1, filter);
}
break;
case "down":
if (lastPage >= finalMaxPage) {
clicker.sendMessage(I18n.getString("no-next-page", true));
} else {
this.openGui(player, lastPage + 1);
this.openGui(player, lastPage + 1, filter);
}
break;
case "store":
Expand All @@ -388,7 +388,7 @@ public void openGui(Player player, int currentPage) {
guiModel.openInventory(player);
}

public void buySaleItem(Player buyer, String uuid, boolean shift, int page) {
public void buySaleItem(Player buyer, String uuid, boolean shift, int page, String filter) {
// 判断商品是否存在
if (!SALE_MAP.containsKey(uuid)) {
buyer.sendMessage(I18n.getString("error-sale", true));
Expand All @@ -399,7 +399,7 @@ public void buySaleItem(Player buyer, String uuid, boolean shift, int page) {
if (shift) {
buyer.getInventory().addItem(SALE_MAP.remove(uuid).getSafeItem().clone());
buyer.sendMessage(I18n.getString("unsale", true));
this.openGui(buyer, 1);
this.openGui(buyer, 1, filter);
} else {
buyer.sendMessage(I18n.getString("shift-unsale", true));
}
Expand Down Expand Up @@ -433,7 +433,7 @@ public void buySaleItem(Player buyer, String uuid, boolean shift, int page) {
ServerMarket.getInstance().getApi().addItem(buyer.getUniqueId(), saleItem);
// 给购买者发送消息
buyer.sendMessage(I18n.getString("buy-item", true));
this.openGui(buyer, page);
this.openGui(buyer, page, filter);
} else {
buyer.sendMessage(I18n.getString("shift-buy", true));
}
Expand All @@ -457,7 +457,7 @@ public boolean performSellCommand(Player player, String message) {
return true;
}
if (split.length == 1) {
this.openGui(player, 1);
this.openGui(player, 1, null);
return true;
}
if (split.length == 2) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.blank038.servermarket.data;
package com.blank038.servermarket.data.storage;

import com.blank038.servermarket.enums.PayType;
import org.bukkit.configuration.ConfigurationSection;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.blank038.servermarket.data.gui;
package com.blank038.servermarket.data.storage;

import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.data.cache.PlayerData;
import com.blank038.servermarket.i18n.I18n;
import com.blank038.servermarket.data.PlayerData;
import com.blank038.servermarket.util.CommonUtil;
import com.mc9y.blank038api.util.inventory.GuiModel;
import org.bukkit.ChatColor;
Expand Down Expand Up @@ -94,7 +94,7 @@ public void open(int currentPage) {
String storeId = ServerMarket.getInstance().getNBTBase().get(itemStack, "StoreID"),
action = ServerMarket.getInstance().getNBTBase().get(itemStack, "action");
if ("market".equalsIgnoreCase(action)) {
ServerMarket.getInstance().getApi().openMarket(clicker, this.OLD_MARKET, this.MARKET_PAGE);
ServerMarket.getInstance().getApi().openMarket(clicker, this.OLD_MARKET, this.MARKET_PAGE, null);
} else if (storeId != null) {
this.getItem(clicker, storeId);
}
Expand All @@ -118,7 +118,7 @@ public void getItem(Player player, String uuid) {
player.sendMessage(I18n.getString("get-store-item", true).replace("%item%", displayMmae)
.replace("%amount%", String.valueOf(itemStack.getAmount())));
// 刷新玩家界面
ServerMarket.getInstance().getApi().openMarket(player, this.OLD_MARKET, this.MARKET_PAGE);
ServerMarket.getInstance().getApi().openMarket(player, this.OLD_MARKET, this.MARKET_PAGE, null);
} else {
player.sendMessage(I18n.getString("error-store", true));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.bridge.BaseBridge;
import com.blank038.servermarket.i18n.I18n;
import com.blank038.servermarket.data.MarketData;
import com.blank038.servermarket.data.PlayerData;
import com.blank038.servermarket.data.ResultData;
import com.blank038.servermarket.data.storage.MarketData;
import com.blank038.servermarket.data.cache.PlayerData;
import com.blank038.servermarket.data.storage.ResultData;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/blank038/servermarket/util/ItemUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.blank038.servermarket.util;

import org.bukkit.inventory.ItemStack;

/**
* @author Blank038
*/
public class ItemUtil {

public static boolean isSimilar(ItemStack itemStack, String filter) {
if (itemStack == null) {
return false;
}
String latestFilter = filter.toLowerCase();
if (itemStack.getType().name().toLowerCase().contains(latestFilter)) {
return true;
}
if (itemStack.hasItemMeta()) {
return (itemStack.getItemMeta().hasDisplayName() && itemStack.getItemMeta().getDisplayName().toLowerCase().contains(latestFilter))
|| (itemStack.getItemMeta().hasLore() && itemStack.getItemMeta().getLore().stream().anyMatch((s) -> s.toLowerCase().contains(latestFilter)));
}
return false;
}
}
8 changes: 6 additions & 2 deletions src/main/resources/lang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ unknown-command: "未知命令, 请输入 /%c help 查看命令帮助."
help:
default:
- "&bServerMarket:"
- "&f/%c open [市场编号] 打开全球市场"
- "&f/%c open <市场编号> 打开全球市场"
- "&f/%c search <市场编号> <关键字> 搜索市场物品"
- "&f/%c show 查看市场情况"
- "&f/%c box 查看市场暂存盒"
admin:
- "&bServerMarket:"
- "&f/%c open [市场编号] 打开全球市场"
- "&f/%c open <市场编号> 打开全球市场"
- "&f/%c search <市场编号> <关键字> 搜索市场物品"
- "&f/%c box 查看市场暂存盒"
- "&f/%c show 查看市场情况"
- "&f/%c reload 重载插件配置文件"
Expand All @@ -17,6 +19,8 @@ no-previous-page: "已经是第一页了."
no-next-page: "已经是最后一页了."
error-store: "该物品不在暂存库中, 可能已经领取过了."
get-store-item: "成功从暂存库中获得 &e%item% &fx &e%amount%"
wrong-market: "请输入一个市场名."
wrong-key: "请输入一个关键字."
price-null: "请输入价格."
wrong-number: "请输入一个数字."
min-price: "价格必须大于%min%."
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/types.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
default:
all: "全部"
other: "其他"

0 comments on commit 118147f

Please sign in to comment.