资源图标

原创 开源 工具 Lua系列插件 - 指定拔刀SA禁用 支持权限节点 [1.7.10]

版权类型
原创
插件中文名称
拔刀SA禁用
插件英文名称
SpecialAttackBan
原帖地址
#
支持的核心(服务端)
  1. Spigot
语言支持
中文(简体)
前置组件
LuaInMinecraftBukkitII: https://www.minebbs.com/resources/luainminecraftbukkit-ii-lua.11867/
适配版本(Java)
  1. 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可以看到类似下面的信息.
1752149930862.webp

其中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",           -- "云轮风暴"
}
禁用后的SA在武器使用时,会强制丢到地上

如何使用?​

1.安装LuaInMinecraftBukkit II插件
2.将所需功能的对应代码放到plugins/LuaInMinecraftBukkitII/luaState/新建文件名.lua
3.在plugins/LuaInMinecraftBukkitII/config.json中加入初始化脚本名,具体参考LuaInMinecraftBukkit II的配置文件部分
4.执行"/lua reload"
后退
顶部 底部