注意:本插件已停止更新。 你可以在此查看其高级版本 "ComplexTurrets":
https://www.spigotmc.org/resources/complexturrets-defend-yourself-using-turrets-1-8-1-16.92756/
DefensiveTurrets 允许服务器玩家放置不同类型的炮塔来守卫家园或领地。目前共有 4 种炮塔(连发、激光、攻城、治疗),它们会持续攻击(或治疗)怪物、玩家和动物,将其拒之门外。炮塔的伤害、射程、冷却、速度、音效等大量属性均可自定义,并且每种炮塔都可以拥有任意数量的升级等级。
重要须知
- 此插件已停止更新,建议考虑高级版本 ComplexTurrets。
- 如果你想支持此项目的维护,欢迎通过捐赠来支持我的工作。
核心特性
- 4 种独特炮塔:连发 (Burst)、激光 (Laser)、攻城 (Siege)、治疗 (Healing)。
- 高度可配置:每种炮塔均可自定义最小/最大伤害、方块ID、名称、描述、冷却时间、射程、音效、特殊选项及外观(由2个方块和1个头颅组成)。
- 无限升级:每种炮塔都可以设置任意数量的升级等级。
- 全息显示:支持使用 HolographicDisplays 显示伤害和信息全息图。
- 目标过滤:可配置炮塔是否攻击怪物、动物或玩家。
- 盟友系统:支持 Factions、SavageFactions、SaberFactions、FactionsUUID、Towny、Clans、Lands、Better Teams 等领地插件的盟友保护。
- 玩家白名单:可为每个炮塔添加不应攻击的玩家。
- 弹药系统:炮塔可配置需要消耗弹药,也支持无限弹药选项。
- 放置限制:可设置玩家能放置的炮塔数量上限。
- 跨版本兼容:支持 Minecraft 1.8 及以上版本。
- 多语言支持:提供 messages.yml 文件,便于翻译。
安装与依赖
必需插件
- Vault (用于经济系统):https://dev.bukkit.org/projects/vault
可选插件
- HolographicDisplays (用于显示全息信息):https://www.spigotmc.org/resources/holoinfo-holographic-information-1-8-1-13.65689/
安装步骤
- 将 DefensiveTurrets 和 Vault 插件放入服务器的
plugins文件夹。 - 重启服务器。
- 根据需要调整配置文件。
基础使用指南
获取炮塔
使用命令给予玩家炮塔物品
/dt give <turret> <player><turret>:炮塔类型,可选Burst、Laser、Siege或Healing。- 此命令可由控制台执行。
放置与交互
- 将炮塔方块放置在地上。
- 右键点击炮塔方块,打开其管理界面。
- 在界面中,你可以:
- 查看当前炮塔属性和等级。
- 支付费用升级炮塔,提升其属性。
- 打开“炮塔选项”菜单,调整攻击目标(怪物/玩家/动物)或启用/禁用炮塔。
- 管理玩家白名单(添加或移除受保护的玩家)。
- 如果配置中启用了弹药系统,需要先禁用炮塔,然后才能向其中添加弹药。
- 拥有
defensiveturrets.admin或defensiveturrets.infiniteammo权限的玩家会看到一个额外选项,可以切换炮塔的“无限弹药”状态。
配置文件详解
配置文件位于 plugins/DefensiveTurrets/ 目录下。主要包含 config.yml、messages.yml 以及 turrets/ 文件夹下的各个炮塔配置文件。
Turrets 文件夹配置
每个炮塔文件(如 burst.yml)结构相似,核心是 Turret 部分,用于重命名炮塔、设置音效和定义升级。
关键配置项
- 定义炮塔头颅:
id: "PLAYER_HEAD" # 1.13+ 版本
# 或对于 1.8-1.12 版本使用:id: "SKULL_ITEM:3"
head: "id;texture" # 头颅的ID和材质你可以在 https://minecraft-heads.com/ 寻找喜欢的头颅。
- 设置音效:注意音效名称在不同 Minecraft 版本中可能不同,请查阅对应版本的 Spigot API 文档。
升级格式示例
每种炮塔的升级格式略有不同,均在配置文件中以注释说明。
- Burst.yml (连发炮塔):高速炮塔,无特殊能力。
升级格式:"价格;最小伤害-最大伤害;冷却时间(秒);射程(方块)"
示例:- "0;1-1.5;0.75;10"
- Laser.yml (激光炮塔):中速炮塔,每次命中会击退敌人。
升级格式:"价格;最小伤害-最大伤害;冷却时间(秒);射程(方块);击退力度"
示例:- "0;5-7;2;15;0.5"
- Siege.yml (攻城炮塔):低速炮塔,每次攻击对范围内多个敌人造成伤害。
升级格式:"价格;最小伤害-最大伤害;冷却时间(秒);射程(方块);爆炸半径"
示例:- "0;4-9;3;8;1.5"
- Healing.yml (治疗炮塔):低速炮塔,治疗多个盟友。
升级格式:"价格;最小治疗量-最大治疗量;冷却时间(秒);射程(方块);最大目标数"
示例:- "0;2-4;6;5;2"
Config.yml 主要选项
# 仅当炮塔所有者在线时启用炮塔
enable_turrets_only_when_owner_is_online: false
# 炮塔之间的最小间隔(方块数)
min_distance_between_turrets: 1
# 是否显示伤害/信息全息图
damage_holograms: true
information_holograms: true
# 是否为每种炮塔设置独立权限 (defensiveturrets.use.<turret_name>)
per_turret_permissions: false
# 是否启用领地插件盟友保护
ally_protection: true
# 炮塔是否需要弹药
turrets_require_ammunition: true
# 是否启用炮塔放置数量限制 (defensiveturrets.limit.X)
turret_limit_permissions:
enabled: true
default_limit: 1
# 炮塔是否防爆
protect_turrets_from_explosions: true
# 炮塔被破坏时是否掉落方块/返还给玩家
drop_turret_on_destroy: true
receive_turret_on_destroy: true
# 禁止放置炮塔的世界
blacklisted_worlds:
- minigames
- lobby
# 炮塔默认攻击目标
default_turret_options:
attack_monsters: true
attack_animals: false
attack_players: false重载配置
修改任何配置文件后,请使用 /dt reload 命令重载。如果遇到问题,建议重启服务器以确保更改生效。
命令与权限
命令列表
/dt give <turret> <player>– 给予指定玩家一个炮塔。/dt giveammo <turret> <player> <amount>– 给予玩家特定炮塔的弹药。/dt removeturrets <world/player/all> <value>– 移除已放置的炮塔。- 移除某个世界的炮塔:
/dt removeturrets world <世界名> - 移除某个玩家的炮塔:
/dt removeturrets player <玩家名> - 移除所有炮塔:
/dt removeturrets all /dt reload– 重载插件配置。/dt help– 显示帮助信息。- 命令别名:
/defensiveturrets
权限节点
defensiveturrets.admin– 管理员权限。defensiveturrets.admin.open– 允许打开他人的炮塔界面。defensiveturrets.use.<turret_name>– 使用特定炮塔的权限(需在配置中启用per_turret_permissions)。defensiveturrets.limit.X– 炮塔放置数量限制权限(例如defensiveturrets.limit.5允许放置最多5个炮塔)。defensiveturrets.infiniteammo– 允许玩家为炮塔启用无限弹药。defensiveturrets.options.attackmonsters– 允许调整“攻击怪物”选项。defensiveturrets.options.attackplayers– 允许调整“攻击玩家”选项。defensiveturrets.options.attackanimals– 允许调整“攻击动物”选项。
开发者 API
插件提供简易 API。使用时,请将 DefensiveTurrets 添加为你的插件的外部依赖,并在你的 plugin.yml 中添加 softdepend: [DefensiveTurrets]。
主要事件
TurretPlaceEvent:玩家放置炮塔时触发。
@EventHandler
public void placeTurret(TurretPlaceEvent event) {
Player player = event.getPlayer();
String turretName = event.getTurretName();
Location turretLocation = event.getLocation();
}TurretKillEvent:炮塔杀死实体时触发。
@EventHandler
public void turretKill(TurretKillEvent event) {
String owner = event.getOwnerName();
String turretName = event.getTurretName();
Entity killedEntity = event.getEntity();
}翻译与支持
可用翻译
- 中文 (Chinese) by @Neubulae
- 葡萄牙语 (Portuguese) by @ResleyNation
- 法语 (French) by @Kittle
- 斯洛伐克语 (Slovak) by @Pist0len_SK
- 德语 (German) by @Lord_Junes
- 西班牙语 (Spanish) by MeikersYT
支持与反馈
请勿在未咨询前留下差评。如果你遇到任何问题或 Bug,请通过插件讨论区联系我,我会尽快查看。祝你使用愉快!