我的世界服务器开发日记MiniMapDrawing插件

MiniMapDrawing

跨区地图画插件(Paper 1.19 + Bungee 可配合)。本插件将普通地图转换为带作者信息的“地图画”,并支持作者在任意服务器复制自己的地图画(通过数据库保存物品数据)。

要求

  • Java 17
  • Paper 1.19.x 服务器
  • MySQL 数据库
  • 运行时需要 Vault 插件(以及支持的经济插件,如 EssentialsX、iConomy 等)—— 这些仅用于货币扣费,不是编译时依赖

项目结构(重要文件)

  • pom.xml - Maven 构建
  • src/main/java/... - 源代码
  • src/main/resources/config.yml - 默认配置(数据库与花费)
  • src/main/resources/menu/ - GUI 配置文件(可在 plugins/MiniMapDrawing/menu 中修改)

快速构建
运行以下命令打包 JAR:

1
mvn clean package

构建成功后 JAR 位于 target/MiniMapDrawing-1.0.0.jar

安装/部署

  1. 将构建出的 MiniMapDrawing-*.jar 放入各个 Paper 服务器的 plugins/ 目录(需要运行插件功能的服务器)。
  2. 确保 Vault 与一个经济插件已安装并启用。
  3. 启动服务器,插件会在 plugins/MiniMapDrawing/ 下生成配置与 menu 文件夹。
  4. 编辑 plugins/MiniMapDrawing/config.yml 来配置数据库连接与花费:
1
2
3
4
5
6
7
8
9
10
11
database:
host: 127.0.0.1
port: 3306
database: minimapdrawing
username: root
password: root
useSSL: false

economy:
conversion-cost: 500
copy-cost: 50
  1. 如果需要自定义 GUI 文本或位置,可直接编辑 plugins/MiniMapDrawing/menu/conversion.ymlplugins/MiniMapDrawing/menu/copy.yml

数据库初始化
插件会在第一次连接时尝试自动创建表 minimap_maps

1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS minimap_maps (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
owner VARCHAR(64),
created_at DATETIME,
item LONGBLOB
);

确保提供的数据库用户有创建表与写入权限。

编码问题(重要)
如果在构建时出现“不可映射字符”或类似的编码错误,请确保项目使用 UTF-8 编码:

  • 已在 pom.xml 中把 project.build.sourceEncoding 设置为 UTF-8 并为资源与编译插件指定了编码。
  • 在 IntelliJ 中:File → Settings → Editor → File Encodings,将 Project EncodingDefault encoding for properties files 都设置为 UTF-8(并把工作区文件也转换为 UTF-8)。
  • 如果你在 Windows 下使用 Maven,确保 JAVA_TOOL_OPTIONS 或命令行没有强制覆盖文件编码;推荐将源码文件保存为 UTF-8 后重新运行 mvn -U clean package

解决 Maven 依赖问题(常见)
如果在 IntelliJ / Maven 构建时遇到类似错误:

1
Failed to execute goal on project: Could not resolve dependencies: mysql:mysql-connector-java:jar:8.1.0 ...
  1. 已在 pom.xml 中使用了稳定可用的 MySQL 驱动版本 8.0.33。若本地仍缓存旧失败记录,可用下列命令强制刷新依赖:
1
mvn -U clean package
  1. Vault API 通常不会托管在中央仓库。若 Maven 提示无法找到 net.milkbowl.vault:VaultAPI:1.7,请手动把 Vault.jar 安装到本地仓库(如果你在本地有 Vault 的 jar):
1
mvn install:install-file -Dfile=path/to/Vault.jar -DgroupId=net.milkbowl.vault -DartifactId=VaultAPI -Dversion=1.7 -Dpackaging=jar -DgeneratePom=true

path/to/Vault.jar 替换为你机器上 Vault 插件的实际路径。安装完成后再次运行 mvn package 即可。

  1. 另一种做法是在 IDE 的 Maven 配置中勾选“Work offline”前先将依赖下载完成,或把 Vault 的 jar 放入本地仓库目录(不推荐手动拷贝,优先使用 mvn install:install-file)。

使用说明(简要)

  • 手持普通地图(minecraft:map / filled_map),按两次 Shift(双击 Shift)会打开“地图画转换”界面。按住 Shift 点击“确认转换”将消耗 conversion-cost 并把主手地图替换为带作者信息的地图画。
  • 拿着已转换的地图画双击 Shift 会打开复制界面(只能复制自己的地图画)。在复制界面通过左右两侧按钮调整数量(最多 64),按住 Shift 点击确认来支付并获得复制品。

注意事项与扩展

  • 菜单文件在 plugins/MiniMapDrawing/menu 下可直接编辑,修改后重启或重载插件生效。
  • 物品序列化使用 Bukkit 序列化(BukkitObjectOutputStream),确保服务器之间 Bukkit 版本兼容以避免反序列化问题。
  • 本插件仅保存物品数据到数据库,跨区复制依赖于每台服务器都能访问相同数据库与 Vault 经济环境。