mirror of
https://github.com/CarmJos/UltraDepository.git
synced 2026-06-04 16:48:21 +08:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 539d0d08dc | |||
| 92b9c45911 | |||
| bfbf55c9fc |
@@ -1,8 +1,12 @@
|
|||||||
# UltraDepository 示例仓库配置
|
# UltraDepository 预设仓库配置
|
||||||
|
|
||||||
|
## 详细示例
|
||||||
|
|
||||||
|
您可以 [点击这里](full-example.yml) 查看一份详细的示例。
|
||||||
|
|
||||||
## 使用须知
|
## 使用须知
|
||||||
|
|
||||||
示例配置基于 MineCraft 1.16 实现,更低版本可能无法使用。
|
预设配置基于 MineCraft 1.16 实现,更低版本可能无法使用。
|
||||||
|
|
||||||
## 如何使用?
|
## 如何使用?
|
||||||
|
|
||||||
@@ -11,8 +15,7 @@
|
|||||||
3. 下载你想要的示例仓库配置文件,并放入 `插件配置目录/depositories` 下。
|
3. 下载你想要的示例仓库配置文件,并放入 `插件配置目录/depositories` 下。
|
||||||
4. 重启服务器,即可令对应的配置文件生效!
|
4. 重启服务器,即可令对应的配置文件生效!
|
||||||
|
|
||||||
|
## 预设配置截图
|
||||||
## 示例图片
|
|
||||||
|
|
||||||
### 渔夫仓库 ([fishman.yml](files/fishman.yml))
|
### 渔夫仓库 ([fishman.yml](files/fishman.yml))
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
name: "&b&l示例仓库" # 仓库名,用于消息显示
|
||||||
|
|
||||||
|
capacity: # 容量配置
|
||||||
|
default: 500 # 若为0则默认不可以使用该仓库
|
||||||
|
permissions: # 特殊权限对应的仓库容量,格式为 "权限:容量
|
||||||
|
- "UltraDepository.vip:1000"
|
||||||
|
- "UltraDepository.mvp:1500"
|
||||||
|
|
||||||
|
gui: # GUI额外配置
|
||||||
|
title: "&b&l示例仓库 &7| 界面" #示例仓库的GUI标题
|
||||||
|
lines: 4 # GUI的行数,支持 1-6行。
|
||||||
|
items:
|
||||||
|
"TEST":
|
||||||
|
material: CHEST # 物品图标的类型
|
||||||
|
data: 0 # 物品图标的数据值
|
||||||
|
slot: 31 # 在GUI中显示的格子
|
||||||
|
name: "&9&l测试图标"
|
||||||
|
lore:
|
||||||
|
# 支持使用变量
|
||||||
|
- "你好 %player_name% !"
|
||||||
|
actions: # 物品点击操作
|
||||||
|
- "[CHAT] Hello!" #以玩家身份发送Hello,支持PlaceholderAPI变量
|
||||||
|
- "[CHAT] /help" #若内容以"/"开头,则会以玩家身份执行指令,支持PlaceholderAPI变量
|
||||||
|
- "[CONSOLE] say HELLO WORLD" #以后台身份执行指令,不需要加"/",支持PlaceholderAPI变量
|
||||||
|
- "[MESSAGE] &(#FFBBBBB)Test %player_name%" # 向玩家发送消息,支持PlaceholderAPI变量和RGB颜色
|
||||||
|
- "[SOUND] ENTITY_EXPERIENCE_ORB_PICKUP:0.5" # 向玩家发送声音,可以规定音量大小和音调,格式为 <声音>:[音量]:[音调]
|
||||||
|
- "[CLOSE]" # 为玩家关闭界面
|
||||||
|
|
||||||
|
- "[LEFT:CLOSE]" #限制只有 鼠标左键 才触发CLOSE
|
||||||
|
- "[SHIFT_LEFT:CLOSE]" #限制只有 按住Shift+鼠标左键 才触发CLOSE
|
||||||
|
- "[RIGHT:CLOSE]" #限制只有 鼠标右键 才触发CLOSE
|
||||||
|
- "[SHIFT_RIGHT:CLOSE]" #限制只有 按住Shift+鼠标右键 才触发CLOSE
|
||||||
|
- "[MIDDLE:CLOSE]" #限制只有 鼠标中键 才触发CLOSE
|
||||||
|
- "[DROP:CLOSE]" #限制只有 丢弃建 才触发CLOSE
|
||||||
|
- "[CONTROL_DROP:CLOSE]" #限制只有 按住Ctrl+丢弃键 才触发CLOSE
|
||||||
|
- "[DOUBLE_CLICK:CLOSE]" #限制只有 鼠标双击物品 才触发CLOSE
|
||||||
|
- "[NUMBER_KEY:CLOSE]" #限制只有 数字键切换 才触发CLOSE
|
||||||
|
|
||||||
|
items:
|
||||||
|
"INK_SAC": #物品ID,若需要限制数据ID则可以加“:”,如 "INK_SANK:4"
|
||||||
|
slot: 11 # 物品在GUI中显示的槽位
|
||||||
|
price: 0.1 # 物品单价
|
||||||
|
limit: 500 # 物品每日售出限制
|
||||||
|
name: "&8&l墨囊" # 物品显示的名字
|
||||||
|
lore: # 物品的lore
|
||||||
|
- " "
|
||||||
|
- "&f抓住墨鱼!"
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"farmer": {},
|
||||||
|
"hunter": {
|
||||||
|
"CHICKEN:0": {
|
||||||
|
"amount": 3
|
||||||
|
},
|
||||||
|
"FEATHER:0": {
|
||||||
|
"amount": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"miner": {
|
||||||
|
"COAL:0": {
|
||||||
|
"amount": 9,
|
||||||
|
"sold": 10
|
||||||
|
},
|
||||||
|
"LAPIS_LAZULI:0": {
|
||||||
|
"amount": 9
|
||||||
|
},
|
||||||
|
"REDSTONE:0": {
|
||||||
|
"sold": 129
|
||||||
|
},
|
||||||
|
"COBBLESTONE:0": {
|
||||||
|
"amount": 12
|
||||||
|
},
|
||||||
|
"CLAY_BALL:0": {
|
||||||
|
"amount": 112
|
||||||
|
},
|
||||||
|
"DIAMOND:0": {
|
||||||
|
"amount": 975,
|
||||||
|
"sold": 1500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fishman": {
|
||||||
|
"COD:0": {
|
||||||
|
"amount": 3
|
||||||
|
},
|
||||||
|
"PUFFERFISH:0": {
|
||||||
|
"amount": 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -187,79 +187,23 @@
|
|||||||
|
|
||||||
## 配置文件
|
## 配置文件
|
||||||
|
|
||||||
### [插件配置文件](src/main/resources/config.yml) (config.yml)
|
### 插件配置文件 ([config.yml](src/main/resources/config.yml))
|
||||||
|
|
||||||
详见源文件。
|
详见源文件。
|
||||||
|
|
||||||
### [消息配置文件](src/main/resources/messages.yml) (messages.yml)
|
### 消息配置文件 ([messages.yml](src/main/resources/messages.yml))
|
||||||
|
|
||||||
详见源文件。
|
详见源文件。
|
||||||
|
|
||||||
### 仓库配置文件 (depositories/<ID>.yml)
|
### 仓库配置文件 ([depositories/<仓库ID>.yml](.examples/depositories/full-example.yml))
|
||||||
|
|
||||||
所有仓库配置均为单独的配置文件,存放于 `插件配置目录/depositories` 下,便于管理。
|
所有仓库配置均为单独的配置文件,存放于 `插件配置目录/depositories` 下,便于管理。
|
||||||
|
|
||||||
文件名即仓库的ID,理论上可以随便取,但**强烈推荐**使用纯英文,部分符号可能会影响正常读取,请避免使用。
|
文件名即仓库的ID,**强烈推荐使用纯英文**,部分符号可能会影响正常读取,请避免使用。
|
||||||
|
|
||||||
这里准备了几个常用的仓库类型,可以 [在这里](.examples/depositories) 找到您需要的直接使用或加以修改后使用。
|
随本项目预设了几个常用的仓库类型,可以 [在这里](.examples/depositories) 找到您需要的直接使用或加以修改后使用。
|
||||||
|
|
||||||
您也可以查看下方的示例,看到所有相关的配置,以制作您自己的仓库。
|
您也可以 [点击这里](.examples/depositories/full-example.yml) 查看一份*详细的仓库配置示例*,以制作您自己的仓库。
|
||||||
<details>
|
|
||||||
<summary>展开查看示例仓库配置</summary>
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
|
|
||||||
name: "&b&l示例仓库" # 仓库名,用于消息显示
|
|
||||||
|
|
||||||
capacity: # 容量配置
|
|
||||||
default: 500 # 若为0则默认不可以使用该仓库
|
|
||||||
permissions: # 特殊权限对应的仓库容量,格式为 "权限:容量
|
|
||||||
- "UltraDepository.vip:1000"
|
|
||||||
- "UltraDepository.mvp:1500"
|
|
||||||
|
|
||||||
gui: # GUI额外配置
|
|
||||||
title: "&b&l示例仓库 &7| 界面" #示例仓库的GUI标题
|
|
||||||
lines: 4 # GUI的行数,支持 1-6行。
|
|
||||||
items:
|
|
||||||
"TEST":
|
|
||||||
material: CHEST # 物品图标的类型
|
|
||||||
data: 0 # 物品图标的数据值
|
|
||||||
slot: 31 # 在GUI中显示的格子
|
|
||||||
name: "&9&l测试图标"
|
|
||||||
lore:
|
|
||||||
# 支持使用变量
|
|
||||||
- "你好 %player_name% !"
|
|
||||||
actions: # 物品点击操作
|
|
||||||
- "[CHAT] Hello!" #以玩家身份发送Hello,支持PlaceholderAPI变量
|
|
||||||
- "[CHAT] /help" #若内容以"/"开头,则会以玩家身份执行指令,支持PlaceholderAPI变量
|
|
||||||
- "[CONSOLE] say HELLO WORLD" #以后台身份执行指令,不需要加"/",支持PlaceholderAPI变量
|
|
||||||
- "[MESSAGE] &(#FFBBBBB)Test %player_name%" # 向玩家发送消息,支持PlaceholderAPI变量和RGB颜色
|
|
||||||
- "[SOUND] ENTITY_EXPERIENCE_ORB_PICKUP:0.5" # 向玩家发送声音,可以规定音量大小和音调,格式为 <声音>:[音量]:[音调]
|
|
||||||
- "[CLOSE]" # 为玩家关闭界面
|
|
||||||
|
|
||||||
- "[LEFT:CLOSE]" #限制只有 鼠标左键 才触发CLOSE
|
|
||||||
- "[SHIFT_LEFT:CLOSE]" #限制只有 按住Shift+鼠标左键 才触发CLOSE
|
|
||||||
- "[RIGHT:CLOSE]" #限制只有 鼠标右键 才触发CLOSE
|
|
||||||
- "[SHIFT_RIGHT:CLOSE]" #限制只有 按住Shift+鼠标右键 才触发CLOSE
|
|
||||||
- "[MIDDLE:CLOSE]" #限制只有 鼠标中键 才触发CLOSE
|
|
||||||
- "[DROP:CLOSE]" #限制只有 丢弃建 才触发CLOSE
|
|
||||||
- "[CONTROL_DROP:CLOSE]" #限制只有 按住Ctrl+丢弃键 才触发CLOSE
|
|
||||||
- "[DOUBLE_CLICK:CLOSE]" #限制只有 鼠标双击物品 才触发CLOSE
|
|
||||||
- "[NUMBER_KEY:CLOSE]" #限制只有 数字键切换 才触发CLOSE
|
|
||||||
|
|
||||||
items:
|
|
||||||
"INK_SAC": #物品ID,若需要限制数据ID则可以加“:”,如 "INK_SANK:4"
|
|
||||||
slot: 11 # 物品在GUI中显示的槽位
|
|
||||||
price: 0.1 # 物品单价
|
|
||||||
limit: 500 # 物品每日售出限制
|
|
||||||
name: "&8&l墨囊" # 物品显示的名字
|
|
||||||
lore: # 物品的lore
|
|
||||||
- " "
|
|
||||||
- "&f抓住墨鱼!"
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
||||||
## 支持与捐赠
|
## 支持与捐赠
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<groupId>cc.carm.plugin</groupId>
|
<groupId>cc.carm.plugin</groupId>
|
||||||
<artifactId>ultradepository</artifactId>
|
<artifactId>ultradepository</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
<version>1.1.1</version>
|
<version>1.1.2</version>
|
||||||
|
|
||||||
<name>UltraDepository</name>
|
<name>UltraDepository</name>
|
||||||
<description>超级仓库插件,支持设定不同物品的存储仓库。</description>
|
<description>超级仓库插件,支持设定不同物品的存储仓库。</description>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@@ -148,4 +150,21 @@ public class UserData {
|
|||||||
this.storage.saveUserData(this);
|
this.storage.saveUserData(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Map<String, Map<String, Integer>>> serializeToMap() {
|
||||||
|
Map<String, Map<String, Map<String, Integer>>> values = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
getDepositories().forEach((depositoryID, depositoryData) -> {
|
||||||
|
Map<String, Map<String, Integer>> depositoryDataMap = new LinkedHashMap<>();
|
||||||
|
depositoryData.getContents().forEach((itemType, itemData) -> {
|
||||||
|
Map<String, Integer> itemDataMap = new HashMap<>();
|
||||||
|
if (itemData.getAmount() > 0) itemDataMap.put("amount", itemData.getAmount());
|
||||||
|
if (itemData.getSold() > 0) itemDataMap.put("sold", itemData.getSold());
|
||||||
|
if (!itemDataMap.isEmpty()) depositoryDataMap.put(itemType, itemDataMap);
|
||||||
|
});
|
||||||
|
if (!depositoryDataMap.isEmpty()) values.put(depositoryID, depositoryDataMap);
|
||||||
|
});
|
||||||
|
|
||||||
|
return values;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class FileStorage implements DataStorage {
|
public class FileStorage implements DataStorage {
|
||||||
@@ -104,21 +102,8 @@ public class FileStorage implements DataStorage {
|
|||||||
YamlConfiguration userDataConfig = new YamlConfiguration();
|
YamlConfiguration userDataConfig = new YamlConfiguration();
|
||||||
userDataConfig.set("date", data.getDateInt());
|
userDataConfig.set("date", data.getDateInt());
|
||||||
|
|
||||||
Map<String, Map<String, Map<String, Integer>>> values = new LinkedHashMap<>();
|
|
||||||
|
|
||||||
data.getDepositories().forEach((depositoryID, depositoryData) -> {
|
|
||||||
Map<String, Map<String, Integer>> depositoryDataMap = new LinkedHashMap<>();
|
|
||||||
depositoryData.getContents().forEach((itemType, itemData) -> {
|
|
||||||
Map<String, Integer> itemDataMap = new HashMap<>();
|
|
||||||
if (itemData.getAmount() > 0) itemDataMap.put("amount", itemData.getAmount());
|
|
||||||
if (itemData.getSold() > 0) itemDataMap.put("sold", itemData.getSold());
|
|
||||||
if (!itemDataMap.isEmpty()) depositoryDataMap.put(itemType, itemDataMap);
|
|
||||||
});
|
|
||||||
if (!depositoryDataMap.isEmpty()) values.put(depositoryID, depositoryDataMap);
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
userDataConfig.createSection("depositories", values);
|
userDataConfig.createSection("depositories", data.serializeToMap());
|
||||||
userDataConfig.save(new File(getDataContainer(), data.getUserUUID() + ".yml"));
|
userDataConfig.save(new File(getDataContainer(), data.getUserUUID() + ".yml"));
|
||||||
} catch (IOException ioException) {
|
} catch (IOException ioException) {
|
||||||
Main.error("在保存玩家 #" + data.getUserUUID() + " 的数据时出现异常。");
|
Main.error("在保存玩家 #" + data.getUserUUID() + " 的数据时出现异常。");
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import com.google.gson.JsonElement;
|
|||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.sql.Date;
|
import java.sql.Date;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
@@ -133,12 +132,16 @@ public class MySQLStorage implements DataStorage {
|
|||||||
for (Map.Entry<String, JsonElement> entry : dataElement.getAsJsonObject().entrySet()) {
|
for (Map.Entry<String, JsonElement> entry : dataElement.getAsJsonObject().entrySet()) {
|
||||||
Depository depository = Main.getDepositoryManager().getDepository(entry.getKey());
|
Depository depository = Main.getDepositoryManager().getDepository(entry.getKey());
|
||||||
if (depository == null) continue;
|
if (depository == null) continue;
|
||||||
|
|
||||||
DepositoryData contentsData = parseContentsData(depository, data, entry.getValue());
|
DepositoryData contentsData = parseContentsData(depository, data, entry.getValue());
|
||||||
if (contentsData != null) data.setDepository(contentsData);
|
if (contentsData != null) data.setDepository(contentsData);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Main.debug("通过 MySQLStorage 加载 " + uuid + " 的用户数据完成,"
|
Main.debug("通过 MySQLStorage 加载 " + uuid + " 的用户数据完成,"
|
||||||
+ "耗时 " + (System.currentTimeMillis() - start) + "ms。");
|
+ "耗时 " + (System.currentTimeMillis() - start) + "ms。");
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
Main.debug("当前库内不存在玩家 " + uuid + " 的数据,视作新档。");
|
Main.debug("当前库内不存在玩家 " + uuid + " 的数据,视作新档。");
|
||||||
@@ -153,15 +156,13 @@ public class MySQLStorage implements DataStorage {
|
|||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
Main.debug("正通过 MySQLStorage 保存 " + data.getUserUUID() + " 的用户数据...");
|
Main.debug("正通过 MySQLStorage 保存 " + data.getUserUUID() + " 的用户数据...");
|
||||||
|
|
||||||
JsonObject dataObject = new JsonObject();
|
|
||||||
|
|
||||||
data.getDepositories().forEach((id, contents) -> dataObject.add(id, serializeContentsData(contents)));
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
getSQLManager().createReplace(SQLTables.USER_DATA.getName())
|
getSQLManager().createReplace(SQLTables.USER_DATA.getName())
|
||||||
.setColumnNames("uuid", "data", "day")
|
.setColumnNames("uuid", "data", "day")
|
||||||
.setParams(data.getUserUUID(), GSON.toJson(dataObject), data.getDate())
|
.setParams(data.getUserUUID(), GSON.toJson(data.serializeToMap()), data.getDate())
|
||||||
.execute();
|
.execute();
|
||||||
|
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
Main.error("在保存玩家 #" + data.getUserUUID() + " 的数据时出现异常。");
|
Main.error("在保存玩家 #" + data.getUserUUID() + " 的数据时出现异常。");
|
||||||
Main.error("Error occurred when saving #" + data.getUserUUID() + " data.");
|
Main.error("Error occurred when saving #" + data.getUserUUID() + " data.");
|
||||||
@@ -191,10 +192,13 @@ public class MySQLStorage implements DataStorage {
|
|||||||
private DepositoryData parseContentsData(Depository source, UserData owner, JsonObject contentsObject) {
|
private DepositoryData parseContentsData(Depository source, UserData owner, JsonObject contentsObject) {
|
||||||
DepositoryData data = DepositoryData.emptyContents(source, owner);
|
DepositoryData data = DepositoryData.emptyContents(source, owner);
|
||||||
for (Map.Entry<String, JsonElement> entry : contentsObject.entrySet()) {
|
for (Map.Entry<String, JsonElement> entry : contentsObject.entrySet()) {
|
||||||
|
|
||||||
DepositoryItem item = source.getItems().get(entry.getKey());
|
DepositoryItem item = source.getItems().get(entry.getKey());
|
||||||
if (item == null) continue;
|
if (item == null) continue;
|
||||||
|
|
||||||
DepositoryItemData itemData = parseItemData(item, data, entry.getValue());
|
DepositoryItemData itemData = parseItemData(item, data, entry.getValue());
|
||||||
if (itemData != null) data.getContents().put(item.getTypeID(), itemData);
|
if (itemData != null) data.getContents().put(item.getTypeID(), itemData);
|
||||||
|
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@@ -207,26 +211,8 @@ public class MySQLStorage implements DataStorage {
|
|||||||
int amount = itemObject.has("amount") ? itemObject.get("amount").getAsInt() : 0;
|
int amount = itemObject.has("amount") ? itemObject.get("amount").getAsInt() : 0;
|
||||||
int sold = itemObject.has("sold") ? itemObject.get("sold").getAsInt() : 0;
|
int sold = itemObject.has("sold") ? itemObject.get("sold").getAsInt() : 0;
|
||||||
if (amount == 0 && sold == 0) return null;
|
if (amount == 0 && sold == 0) return null;
|
||||||
else return new DepositoryItemData(source, owner, amount, sold);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
return new DepositoryItemData(source, owner, amount, sold);
|
||||||
private JsonObject serializeContentsData(@Nullable DepositoryData contentsData) {
|
|
||||||
if (contentsData == null) return null;
|
|
||||||
JsonObject contentsObject = new JsonObject();
|
|
||||||
contentsData.getContents().entrySet().stream()
|
|
||||||
// 只存取有数值的部分,减少数据量
|
|
||||||
.filter(entry -> entry.getValue().getSold() > 0 || entry.getValue().getAmount() > 0)
|
|
||||||
.forEach(entry -> contentsObject.add(entry.getKey(), serializeItemData(entry.getValue())));
|
|
||||||
return contentsObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private JsonObject serializeItemData(@NotNull DepositoryItemData itemData) {
|
|
||||||
JsonObject itemObject = new JsonObject();
|
|
||||||
if (itemData.getAmount() > 0) itemObject.addProperty("amount", itemData.getAmount());
|
|
||||||
if (itemData.getSold() > 0) itemObject.addProperty("sold", itemData.getSold());
|
|
||||||
return itemObject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
import com.google.gson.Gson;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class GsonMapTest {
|
||||||
|
|
||||||
|
private static final Gson GSON = new Gson();
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
|
||||||
|
Map<String, Map<String, Map<String, Integer>>> values = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
for (int u = 0; u < 3; u++) {
|
||||||
|
Map<String, Map<String, Integer>> depositoryDataMap = new LinkedHashMap<>();
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
Map<String, Integer> itemDataMap = new HashMap<>();
|
||||||
|
int amount = Math.max(0, new Random().nextInt(15));
|
||||||
|
int sold = Math.max(0, new Random().nextInt(15));
|
||||||
|
if (amount > 0) itemDataMap.put("amount", amount);
|
||||||
|
if (sold > 0) itemDataMap.put("sold", sold);
|
||||||
|
if (!itemDataMap.isEmpty()) {
|
||||||
|
depositoryDataMap.put(UUID.randomUUID().toString().substring(0, 4), itemDataMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!depositoryDataMap.isEmpty()) {
|
||||||
|
values.put(UUID.randomUUID().toString().substring(0, 8), depositoryDataMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(values.size());
|
||||||
|
|
||||||
|
|
||||||
|
String jsonValues = GSON.toJson(values);
|
||||||
|
System.out.println(jsonValues);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user