- 版权类型
- 原创
- 插件中文名称
- 拔刀SA禁用
- 插件英文名称
- SpecialAttackBan
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- 语言支持
- 中文(简体)
- 前置组件
- LuaInMinecraftBukkitII: https://www.minebbs.com/resources/luainminecraftbukkit-ii-lua.11867/
- 适配版本(Java)
- 1.7
code_language.lua:
local CraftItemStack = luajava.bindClass("org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack")
local Material = luajava.bindClass("org.bukkit.Material")
local ItemStack = luajava.bindClass("org.bukkit.inventory.ItemStack")
local slash_blade_list = {
FLAMMPFEILSLASHBLADE_SLASHBLADE = true,
FLAMMPFEILSLASHBLADE_SLASHBLADEWOOD = true,
FLAMMPFEILSLASHBLADE_SLASHBLADEBAMBOOLIGHT = true,
FLAMMPFEILSLASHBLADE_SLASHBLADESILVERBAMBOOLIGHT = true,
FLAMMPFEILSLASHBLADE_SLASHBLADEWHITE = true,
FLAMMPFEILSLASHBLADE_SLASHBLADEWRAPPER = true,
FLAMMPFEILSLASHBLADE_SLASHBLADENAMED = true,
-- 附属mod部分刀名
NEGOREROUSE_CHRONOS_SY = true,
NEGOREROUSE_EUBLADE = true,
MRBLADE_MRBLADE_FINAL = true,
MRBLADE_TRBLADE_FIRST = true,
MRBLADE_HYPERBLADE_SECOND = true,
MRBLADE_KINETICENERGYBLADE_FINAL = true,
MRBLADE_BLOODREV_EXTRA = true,
MRBLADE_CRAFTREV_EXTRA = true
}
local black_list = {
[3009] = "infinityutils.slashblade.sa.3009", -- "磁暴幻影剑"
[12001] = "infinityutils.slashblade.sa.12001", -- "数据抹除"
[1003] = "infinityutils.slashblade.sa.12001", -- "云轮风暴"
}
luaBukkit.env:listenerBuilder()
:subscribe({
event = "PlayerInteractEvent",
priority = "LOWEST",
handler = function(event)
local player = event:getPlayer()
local action = event:getAction():toString()
if not player or not action then return end
local hand_item = player:getItemInHand()
if not hand_item then return end
if string.find(action, "RIGHT") and slash_blade_list[hand_item:getType():name()] then
local nms_item = CraftItemStack:asNMSCopy(hand_item)
if not nms_item then return end
local tag = nms_item:func_77978_p()
if not tag then return end
local sa = tag:func_74762_e("SpecialAttackType")
if not sa then return end
if black_list[sa] and (black_list[sa] == true and true or not player:hasPermission(black_list[sa])) then
player:sendMessage("§c此SA已被禁用!请更换SA再使用此武器!")
event:setCancelled(true)
player:getWorld():dropItem(player:getLocation(), player:getItemInHand())
player:setItemInHand(luajava.new(ItemStack, Material.AIR))
end
end
end
})
:build()
:register("SlashBladeSA")
如何定义禁用SA和权限节点?
首先你需要拥有任意一款能够查看物品NBT的插件或mod,这里以CraftTweaker为例,将想要禁用的SA拿在手中,使用命令/ct hand可以看到类似下面的信息.其中SpecialAttackType所对应的就是SA的编号了,你只要将其按脚本中的格式添加到脚本中如下位置(27行开始):
[编号] = "权限节点"
注意每一行需要用英文逗号结尾,修改后使用/lua reload即可
如果你不想使用权限节点,那么按以下方式编写即可全局禁用
[编号] = true
code_language.lua:
local black_list = {
[3009] = "infinityutils.slashblade.sa.3009", -- "磁暴幻影剑"
[12001] = "infinityutils.slashblade.sa.12001", -- "数据抹除"
[1003] = "infinityutils.slashblade.sa.12001", -- "云轮风暴"
}
如何使用?
1.安装LuaInMinecraftBukkit II插件2.将所需功能的对应代码放到plugins/LuaInMinecraftBukkitII/luaState/新建文件名.lua
3.在plugins/LuaInMinecraftBukkitII/config.json中加入初始化脚本名,具体参考LuaInMinecraftBukkit II的配置文件部分
4.执行"/lua reload"