Skip to content

Commit

Permalink
自定义商店界面以及物品
Browse files Browse the repository at this point in the history
  • Loading branch information
Sobadfish committed Jan 15, 2024
1 parent 9539c97 commit 02f99b5
Show file tree
Hide file tree
Showing 7 changed files with 165 additions and 29 deletions.
5 changes: 2 additions & 3 deletions src/main/java/org/sobadfish/bedwar/entity/ShopVillage.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.sobadfish.bedwar.panel.DisPlayerPanel;
import org.sobadfish.bedwar.player.PlayerInfo;
import org.sobadfish.bedwar.room.config.GameRoomConfig;
import org.sobadfish.bedwar.shop.config.ShopInfoConfig;
import org.sobadfish.bedwar.shop.item.ShopItemInfo;

/**
Expand Down Expand Up @@ -83,12 +82,12 @@ public void onClick(PlayerInfo player){
break;
case UI:
DisPlayerPanel disPlayerPanel = new DisPlayerPanel();
disPlayerPanel.displayPlayer(player, DisPlayerPanel.disPlayShop(room, infoConfig, ShopInfoConfig.ShopItemClassify.values()[0]), BedWarMain.getLanguage().getLanguage("shop-name","商店"));
disPlayerPanel.displayPlayer(player, DisPlayerPanel.disPlayShop(room, infoConfig, room.shopItemClassifies.get(0)), BedWarMain.getLanguage().getLanguage("shop-name","商店"));
break;
default:
if (((Player) player.getPlayer()).getLoginChainData().getDeviceOS() == 7) {
DisPlayerPanel dis = new DisPlayerPanel();
dis.displayPlayer(player, DisPlayerPanel.disPlayShop(room, infoConfig, ShopInfoConfig.ShopItemClassify.values()[0]), BedWarMain.getLanguage().getLanguage("shop-name","商店"));
dis.displayPlayer(player, DisPlayerPanel.disPlayShop(room, infoConfig, room.shopItemClassifies.get(0)), BedWarMain.getLanguage().getLanguage("shop-name","商店"));
}else{
DisPlayWindowsFrom.disPlayMenu((Player) player.getPlayer(),room,infoConfig);
}
Expand Down
6 changes: 1 addition & 5 deletions src/main/java/org/sobadfish/bedwar/panel/DisPlayerPanel.java
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
package org.sobadfish.bedwar.panel;

import cn.nukkit.Player;
import cn.nukkit.entity.Entity;
import cn.nukkit.inventory.Inventory;
import cn.nukkit.inventory.InventoryHolder;
import org.sobadfish.bedwar.panel.items.*;
import org.sobadfish.bedwar.panel.lib.AbstractFakeInventory;
import org.sobadfish.bedwar.player.PlayerInfo;
import org.sobadfish.bedwar.player.team.TeamInfo;
import org.sobadfish.bedwar.room.GameRoom;
import org.sobadfish.bedwar.room.config.GameRoomConfig;
import org.sobadfish.bedwar.shop.config.ShopInfoConfig;
import org.sobadfish.bedwar.shop.config.TeamShopInfoConfig;
import org.sobadfish.bedwar.shop.item.ShopItemInfo;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
Expand Down Expand Up @@ -80,7 +76,7 @@ public static Map<Integer, BasePlayPanelItemInstance> disPlayShop(GameRoomConfig
return panel;
}
int choseIndex = -1;
for(ShopInfoConfig.ShopItemClassify shopItemClassify : ShopInfoConfig.ShopItemClassify.values()){
for(ShopInfoConfig.ShopItemClassify shopItemClassify : gameRoom.shopItemClassifies){
panel.put(index,new PanelItem(gameRoom,shopItemInfo,shopItemClassify));
if(shopItemClassify == chose){
choseIndex = index;
Expand Down
37 changes: 35 additions & 2 deletions src/main/java/org/sobadfish/bedwar/room/config/GameRoomConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.sobadfish.bedwar.player.team.config.TeamConfig;
import org.sobadfish.bedwar.player.team.config.TeamInfoConfig;
import org.sobadfish.bedwar.room.floattext.FloatTextInfoConfig;
import org.sobadfish.bedwar.shop.config.ShopInfoConfig;
import org.sobadfish.bedwar.shop.item.ShopItemInfo;
import org.sobadfish.bedwar.tools.Utils;
import org.sobadfish.bedwar.world.config.WorldInfoConfig;
Expand Down Expand Up @@ -224,6 +225,11 @@ public class GameRoomConfig implements Cloneable{

public String customNamedTag;

/**
* 商店类型
* */
public List<ShopInfoConfig.ShopItemClassify> shopItemClassifies;


private GameRoomConfig(String name,
WorldInfoConfig worldInfo,
Expand Down Expand Up @@ -505,6 +511,7 @@ public static GameRoomConfig createGameRoom(String name, int size, int maxSize){
BedWarMain.sendMessageToConsole("创建文件夹 shop 失败");
}

BedWarMain.getBedWarMain().saveResource("shop/shop_classify.yml","/rooms/"+name+"/shop/shop_classify.yml",false);
BedWarMain.getBedWarMain().saveResource("shop/defaultShop.yml","/rooms/"+name+"/shop/defaultShop.yml",false);
BedWarMain.getBedWarMain().saveResource("shop/teamShop.yml","/rooms/"+name+"/shop/teamShop.yml",false);
BedWarMain.getBedWarMain().saveResource("item.yml","/rooms/"+name+"/item.yml",false);
Expand Down Expand Up @@ -588,6 +595,11 @@ public static GameRoomConfig getGameRoomConfigByFile(String name, File file){
teamConfigs.get(map.get("name").toString()),map));
}
File shopDir = new File(file+"/shop");
if(!shopDir.exists()){
if(!shopDir.mkdirs()){
throw new RuntimeException("无法创建商店文件夹");
}
}
if(shopDir.isDirectory()){
if(!new File(file+"/shop/defaultShop.yml").exists()){
BedWarMain.getBedWarMain().saveResource("shop/defaultShop.yml","/rooms/"+name+"/shop/defaultShop.yml",false);
Expand All @@ -596,6 +608,9 @@ public static GameRoomConfig getGameRoomConfigByFile(String name, File file){
if(!new File(file+"/shop/teamShop.yml").exists()) {
BedWarMain.getBedWarMain().saveResource("shop/teamShop.yml", "/rooms/" + name + "/shop/teamShop.yml", false);
}
if(!new File(file+"/shop/shop_classify.yml").exists()) {
BedWarMain.getBedWarMain().saveResource("shop/shop_classify.yml", "/rooms/" + name + "/shop/shop_classify.yml", false);
}
}
if(!new File(file+"/event.yml").exists()){
BedWarMain.getBedWarMain().saveResource("event.yml","/rooms/"+name+"/event.yml",false);
Expand All @@ -604,13 +619,31 @@ public static GameRoomConfig getGameRoomConfigByFile(String name, File file){
BedWarMain.getBedWarMain().saveResource("roomEventList.yml","/rooms/"+name+"/roomEventList.yml",false);
}
//TODO 实现商店
//先加载配置项
Config classShop = new Config(shopDir+"/shop_classify.yml",Config.YAML);
List<ShopInfoConfig.ShopItemClassify> shopItemClassifies = new ArrayList<>();
for(Map.Entry<String,Object> entry: classShop.getAll().entrySet()){
Object obj = entry.getValue();
if(obj instanceof Map){
Map<?,?> omap = (Map<?,?>) obj;
shopItemClassifies.add(new ShopInfoConfig.ShopItemClassify(entry.getKey(),
Utils.formatItemByString(omap.get("item").toString()),
omap.get("name").toString()

));
}

}


LinkedHashMap<String, ShopItemInfo> shopMap = new LinkedHashMap<>();
shopMap.put("defaultShop",ShopItemInfo.build("defaultShop",new Config(shopDir+"/defaultShop.yml",Config.YAML)));
shopMap.put("teamShop",ShopItemInfo.build("teamShop",new Config(shopDir+"/teamShop.yml",Config.YAML)));
shopMap.put("defaultShop",ShopItemInfo.build(shopItemClassifies,"defaultShop",new Config(shopDir+"/defaultShop.yml",Config.YAML)));
shopMap.put("teamShop",ShopItemInfo.build(null,"teamShop",new Config(shopDir+"/teamShop.yml",Config.YAML)));
BedWarMain.sendMessageToConsole("defaultShop 加载完成");
GameRoomConfig roomConfig = new GameRoomConfig(name,worldInfoConfig,time,waitTime,maxWaitTime,minPlayerSize,maxPlayerSize,shopMap,teamInfoConfigs);
roomConfig.setTeamCfg(teamConfigs);
roomConfig.setMoneyItem(itemInfo);
roomConfig.shopItemClassifies = shopItemClassifies;
roomConfig.gameRoomMoney = room.getString("roomMoney","default");
roomConfig.setNbtItemInfo(nbtItemInfo);
roomConfig.hasWatch = room.getBoolean("hasWatch",true);
Expand Down
68 changes: 51 additions & 17 deletions src/main/java/org/sobadfish/bedwar/shop/config/ShopInfoConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,30 +48,64 @@ public ShopItemClassify getClassify() {
return classify;
}

public enum ShopItemClassify{
/**
* 武器,盔甲,弓,方块,食物,工具,小道具,药水
* */
WEAPON(Item.get(276),"武器"),
ARMOR(Item.get(311),"盔甲"),
BOW(Item.get(261),"弓"),
BLOCK(Item.get(24,2),"方块"),
FOOD(Item.get(320),"食物"),
TOOLS(Item.get(278),"工具"),
ITEMS(Item.get(46),"小道具"),
EFFECT(Item.get(373),"药水");
private final Item item;
private final String disPlayerName;

ShopItemClassify(Item item,String disPlayerName){
public static class ShopItemClassify{

public String type;

public String disPlayerName;

public Item item;



// /**
// * 武器,盔甲,弓,方块,食物,工具,小道具,药水
// * */
// WEAPON(Item.get(276),"武器"),
// ARMOR(Item.get(311),"盔甲"),
// BOW(Item.get(261),"弓"),
// BLOCK(Item.get(24,2),"方块"),
// FOOD(Item.get(320),"食物"),
// TOOLS(Item.get(278),"工具"),
// ITEMS(Item.get(46),"小道具"),
// EFFECT(Item.get(373),"药水");
// private final Item item;
// private final String disPlayerName;

public ShopItemClassify(String type){
this.type = type;

}
//
public ShopItemClassify(String type,Item item,String disPlayerName){
this.type = type;
this.item = item;
this.disPlayerName = disPlayerName;
}

//
public String getDisPlayerName() {
return disPlayerName;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ShopItemClassify)) {
return false;
}

ShopItemClassify that = (ShopItemClassify) o;

return type != null ? type.equals(that.type) : that.type == null;
}

@Override
public int hashCode() {
return type != null ? type.hashCode() : 0;
}

public Item getItem() {
Item item = this.item;
item.setCustomName(TextFormat.colorize('&',"&r"+disPlayerName));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.sobadfish.bedwar.shop.config.TeamShopInfoConfig;

import java.util.ArrayList;
import java.util.List;


/**
Expand Down Expand Up @@ -33,7 +34,7 @@ public ShopInfoConfig getShopInfoConfigByClassify(ShopInfoConfig.ShopItemClassif
return arrayList;
}

public static ShopItemInfo build(String shopName, Config config){
public static ShopItemInfo build(List<ShopInfoConfig.ShopItemClassify> shopItemClassifies,String shopName, Config config){
ArrayList<ShopInfoConfig> shopInfoConfigs = new ArrayList<>();
if("teamShop".equalsIgnoreCase(shopName)){
shopInfoConfigs.add(TeamShopInfoConfig.build("effects",config.getMapList("effects")));
Expand All @@ -44,7 +45,7 @@ public static ShopItemInfo build(String shopName, Config config){
for(String s: config.getKeys()){
ShopInfoConfig.ShopItemClassify classify;
try {
classify = ShopInfoConfig.ShopItemClassify.valueOf(s.toUpperCase());
classify = shopItemClassifies.get(shopItemClassifies.indexOf(new ShopInfoConfig.ShopItemClassify(s)));
}catch (IllegalArgumentException e){
continue;
}
Expand Down
49 changes: 49 additions & 0 deletions src/main/java/org/sobadfish/bedwar/tools/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import cn.nukkit.entity.Entity;
import cn.nukkit.entity.data.Skin;
import cn.nukkit.entity.item.EntityFirework;
import cn.nukkit.item.Item;
import cn.nukkit.item.ItemFirework;
import cn.nukkit.level.Level;
import cn.nukkit.level.Location;
Expand Down Expand Up @@ -600,6 +601,54 @@ public static String formatTime1(int s){

}

public static Item formatItemByString(String itemString){
String[] items = itemString.split(":");
Item item;
try{
int id = Integer.parseInt(items[0]);
int damage = 0;
int count = 1;
if(items.length > 1){
try {
damage = Integer.parseInt(items[1]);
}catch (Exception ignore){}
if(items.length > 2){
try {
count = Integer.parseInt(items[2]);
}catch (Exception ignore){}
if(count < 0){
count = 1;
}
}
}
item = Item.get(id,damage,count);
}catch (Exception e){
Item i = Item.fromString(items[0]);
if(i.getId() == 0){
return null;
}
if(i.getId() == 0){
return null;
}
int count = 1;
if(items.length > 1){
try {
count = Integer.parseInt(items[1]);
}catch (Exception ignore){}
if(count <= 0){
count = 1;
}
}
i.setCount(count);
item = i;
}
if(item.getId() == 0){
return null;
}
return item;
}


/**
* 史蒂夫的默认皮肤
* @return 默认皮肤
Expand Down
24 changes: 24 additions & 0 deletions src/main/resources/shop/shop_classify.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
weapon:
name: "武器"
item: "276:0"
armor:
name: "盔甲"
item: "311:0"
bow:
name: ""
item: "261:0"
block:
name: "方块"
item: "24:2"
food:
name: "食物"
item: "320:0"
tools:
name: "工具"
item: "278:0"
items:
name: "小道具"
item: "46:0"
effect:
name: "药水"
item: "373:0"

0 comments on commit 02f99b5

Please sign in to comment.