Skip to content

Commit

Permalink
fix: 修复物品 nms 读取异常, 仓库返回市场时传参过滤器
Browse files Browse the repository at this point in the history
  • Loading branch information
blank038 committed Oct 21, 2022
1 parent 022d809 commit b94e276
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 34 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/blank038/servermarket/ServerMarket.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public class ServerMarket extends AyPlugin {
@Override
public void onEnable() {
serverMarket = this;
serverMarketAPI = new ServerMarketAPI(this);
serverMarketAPI = new ServerMarketAPI();
// 开始载入
this.log(" ");
this.log(" &3ServerMarket &bv" + this.getDescription().getVersion());
Expand Down
22 changes: 14 additions & 8 deletions src/main/java/com/blank038/servermarket/api/ServerMarketAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,15 @@
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

import java.util.Map;
import java.util.UUID;

/**
* @author Blank038
* @date 2021/03/05
*/
public class ServerMarketAPI {
private final ServerMarket INSTANCE;

public ServerMarketAPI(ServerMarket serverMarket) {
this.INSTANCE = serverMarket;
}
private final ServerMarket instance = ServerMarket.getInstance();

public void addItem(UUID uuid, SaleItem saleItem) {
PlayerData data = PlayerData.PLAYER_DATA.getOrDefault(uuid, new PlayerData(uuid));
Expand All @@ -29,11 +26,20 @@ public void addItem(UUID uuid, SaleItem saleItem) {
}

public void addItem(UUID uuid, ItemStack itemStack) {
PlayerData data = PlayerData.PLAYER_DATA.getOrDefault(uuid, new PlayerData(uuid));
PlayerData data = PlayerData.PLAYER_DATA.getOrDefault(uuid, new PlayerData(uuid));
data.addItem(itemStack);
data.save();
}

public MarketData fuzzySearchMarketData(String key) {
for (Map.Entry<String, MarketData> entry : MarketData.MARKET_DATA.entrySet()) {
if (entry.getKey().equals(key) || entry.getValue().getDisplayName().contains(key)) {
return entry.getValue();
}
}
return null;
}

/**
* 打开市场, 如果市场编号为 null 则打开默认市场
*
Expand All @@ -42,12 +48,12 @@ public void addItem(UUID uuid, ItemStack itemStack) {
*/
public void openMarket(Player player, String key, int page, FilterBuilder filter) {
MarketData marketData = MarketData.MARKET_DATA.containsKey(key) ? MarketData.MARKET_DATA.get(key)
: MarketData.MARKET_DATA.get(INSTANCE.getConfig().getString("default-market"));
: MarketData.MARKET_DATA.get(instance.getConfig().getString("default-market"));
if (marketData == null) {
return;
}
if (player.hasPermission(marketData.getPermission())) {
new MarketGui(key, page, filter).openGui(player);
new MarketGui(marketData.getMarketKey(), page, filter).openGui(player);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
break;
case "box":
if (sender instanceof Player) {
new StoreContainer((Player) sender, 1, null).open(1);
new StoreContainer((Player) sender, 1, null, null).open(1);
}
break;
case "reload":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import com.blank038.servermarket.data.sale.SaleItem;
import com.blank038.servermarket.enums.MarketStatus;
import com.blank038.servermarket.enums.PayType;
import com.google.common.collect.Lists;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
Expand All @@ -18,12 +17,10 @@
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.aystudio.core.bukkit.util.inventory.GuiModel;
import com.blank038.servermarket.ServerMarket;
import com.blank038.servermarket.data.cache.PlayerData;
import com.blank038.servermarket.filter.FilterBuilder;
import com.blank038.servermarket.i18n.I18n;
import com.blank038.servermarket.util.CommonUtil;
import org.bukkit.ChatColor;
Expand All @@ -23,14 +24,16 @@
* @author Blank038
*/
public class StoreContainer {
private final Player PLAYER_TAR;
private final int MARKET_PAGE;
private final String OLD_MARKET;
private final Player target;
private final int marketPage;
private final String oldMarket;
private final FilterBuilder filterBuilder;

public StoreContainer(Player player, int marketPage, String oldMarket) {
this.PLAYER_TAR = player;
this.MARKET_PAGE = marketPage;
this.OLD_MARKET = oldMarket;
public StoreContainer(Player player, int marketPage, String oldMarket, FilterBuilder filterBuilder) {
this.target = player;
this.marketPage = marketPage;
this.oldMarket = oldMarket;
this.filterBuilder = filterBuilder;
}

public void open(int currentPage) {
Expand Down Expand Up @@ -70,7 +73,7 @@ public void open(int currentPage) {
}
}
// 开始获取玩家仓库
PlayerData playerData = ServerMarket.getApi().getPlayerData(PLAYER_TAR.getUniqueId());
PlayerData playerData = ServerMarket.getApi().getPlayerData(target.getUniqueId());
Integer[] slots = CommonUtil.formatSlots(data.getString("store-item-slots"));
HashMap<String, ItemStack> storeItems = playerData.getItems();
String[] keys = storeItems.keySet().toArray(new String[0]);
Expand All @@ -94,13 +97,13 @@ public void open(int currentPage) {
String storeId = ServerMarket.getNMSControl().getValue(itemStack, "StoreID"),
action = ServerMarket.getNMSControl().getValue(itemStack, "action");
if ("market".equalsIgnoreCase(action)) {
ServerMarket.getApi().openMarket(clicker, this.OLD_MARKET, this.MARKET_PAGE, null);
} else if (storeId != null) {
ServerMarket.getApi().openMarket(clicker, this.oldMarket, this.marketPage, this.filterBuilder);
} else if (storeId != null && !storeId.isEmpty()) {
this.getItem(clicker, storeId);
}
}
});
guiModel.openInventory(PLAYER_TAR);
guiModel.openInventory(target);
}

public void getItem(Player player, String uuid) {
Expand All @@ -118,7 +121,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.getApi().openMarket(player, this.OLD_MARKET, this.MARKET_PAGE, null);
ServerMarket.getApi().openMarket(player, this.oldMarket, this.marketPage, null);
} else {
player.sendMessage(I18n.getString("error-store", true));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public FilterBuilder setTypeFilter(TypeFilterImpl typeFilter) {
}

public boolean check(SaleItem saleItem) {
if (this.typeFilter.check(saleItem)) {
if (this.typeFilter != null && this.typeFilter.check(saleItem)) {
return true;
}
return this.saleFilters.stream().anyMatch((saleFilter) -> saleFilter.check(saleItem));
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/blank038/servermarket/gui/MarketGui.java
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,10 @@ public void openGui(Player player) {
action = ServerMarket.getNMSControl().getValue(itemStack, "MarketAction");
// 强转玩家
Player clicker = (Player) e.getWhoClicked();
if (key != null) {
if (key != null && !key.isEmpty()) {
// 购买商品
marketData.buySaleItem(clicker, key, e.isShiftClick(), lastPage, filter);
} else if (action != null) {
} else if (action != null && !action.isEmpty()) {
// 判断交互方式
switch (action) {
case "up":
Expand All @@ -143,7 +143,7 @@ public void openGui(Player player) {
}
break;
case "store":
new StoreContainer(clicker, lastPage, this.sourceMarketKey).open(1);
new StoreContainer(clicker, lastPage, this.sourceMarketKey, this.filter).open(1);
break;
default:
if (action.contains(":")) {
Expand Down
10 changes: 5 additions & 5 deletions src/main/resources/market/example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ black-list:
- "STONE"
lore:
- "&f禁止上架"
# 分类
types:
- "all"
- "其他"
- "道具"
######################
#
# 全球市场界面配置文件
Expand All @@ -69,11 +74,6 @@ sale-info:
- "&a售卖者: &f%seller%"
- "&a价格: &f%price%金币"
- "&a上架时间: &f%time%"
# 分类
types:
- "all"
- "其他"
- "道具"
# 界面物品设定
items:
up:
Expand Down

0 comments on commit b94e276

Please sign in to comment.