• 「7周年限定勋章」正式上线!4/5/6周年的纪念勋章也限时返场了噢~【点我去看看】
资源图标

LSE 网页查背包——MyInventory v1.0.0

版权类型
原创
版权链接
https://github.com/lwenk/MyInventory
语言支持
中文(简体)
演示地址(已关闭): https://static.217.im/mc/dev/inventory/demo.html
就是个静态页面,有什么好试的,也没后台地址,天天login
此项目后续会整合进机器人插件里,仓库已归档

[MD]
![LOGO](https://capsule-render.217.im/api?type=venom&height=300&color=e1b7e1&text=MyInventory&fontColor=5e2a7e&desc=Minecraft%20基岩版服务器(BDS)%20网页背包插件&fontAlign=50&fontAlignY=50&descAlignY=70&descSize=18)
[/MD]


使用示例

1. 读取本地指定JSON文件
https://example.com/demo.html?target={文件名}
例如: https://static.217.im/mc/dev/inventory/demo.html?target=114514
2. 调用远程API
https://example.com/demo.html?remote={API}

不管是本地读取还是远程调用,读取(响应)的内容需要符合下面格式
前端并不会对物品能不能堆叠,有没有耐久度进行校验
请确定保存背包数据时已经校验过这些信息
不然可能会出现既有耐久度条又有物品数量

JSON:
{
    "playerInventory": [
        {
            "name": "草方块",
            "count": 64,
            "slot": 27,
            "icon": "./images/block/grass_block.png"
        },
        {
            "name": "钻石剑",
            "slot": 0,
            "icon": "./images/item/diamond_sword.png",
            "damage": 114,
            "maxDamage": 2333
        }
    ],
    "enderChest": [
        {
            "name": "钻石",
            "count": 1,
            "slot": 10,
            "icon": "./images/item/diamond.png"
        }
    ]
}

下面是LSE插件示例 仅供参考
JavaScript:
ll.registerPlugin(
    /* name */ "114514",
    /* introduction */ "114514",
    /* version */[11, 45, 14],
    /* otherInformation */ {}
);

type itemData = {
    name: string,
    icon: string,
    slot: number,
    count?: number,
    damage?: number,
    maxDamage?: number
}

type InventoryData = {
    playerInventory: itemData[],
    enderChest: itemData[]
}

const BASE_DATA_PATH = "./plugins/LK/Inventory/Data"
const STATIC_PATH = "./plugins/LK/Inventory/Web"

function getInventoryData(player: Player) {
    if (!player) return
    const inventory = player.getInventory()
    const enderChest = player.getEnderChest()
    const inventoryData: InventoryData = {
        playerInventory: [],
        enderChest: []
    }
    inventory.getAllItems().forEach((item, index) => {
        let { count, type, name, isBlock, isStackable, isDamageableItem, damage, maxDamage } = item
        if (item.isNull()) return
        const data: itemData = {
            name,
            icon: `./images/${isBlock ? "block" : "item"}/${type.split("minecraft:")[1]}.png`,
            slot: index,
            count: isStackable ? count : undefined,
            damage: isDamageableItem ? maxDamage - damage : undefined,
            maxDamage: isDamageableItem ? maxDamage : undefined
        }
        inventoryData.playerInventory.push(data)

    })
    enderChest.getAllItems().forEach((item, index) => {
        let { count, type, name, isBlock, isStackable, isDamageableItem, damage, maxDamage } = item
        if (item.isNull()) return
        const data: itemData = {
            name,
            icon: `./images/${isBlock ? "block" : "item"}/${type}.png`,
            slot: index,
            count: isStackable ? count : undefined,
            damage: isDamageableItem ? maxDamage - damage : undefined,
            maxDamage: isDamageableItem ? maxDamage : undefined
        }
        inventoryData.enderChest.push(data)
    })
    return inventory
}

mc.listen("onLeft", player => {
    const inventory = player.getInventory()
    const enderChest = player.getEnderChest()
    const inventoryData: InventoryData = {
        playerInventory: [],
        enderChest: []
    }
    inventory.getAllItems().forEach((item, index) => {
        let { count, type, name, isBlock, isStackable, isDamageableItem, damage, maxDamage } = item
        if (item.isNull()) return
        const data: itemData = {
            name,
            icon: `./images/${isBlock ? "block" : "item"}/${type}.png`,
            slot: index,
            count: isStackable ? count : undefined,
            damage: isDamageableItem ? maxDamage - damage : undefined,
            maxDamage: isDamageableItem ? maxDamage : undefined
        }
        inventoryData.playerInventory.push(data)

    })
    enderChest.getAllItems().forEach((item, index) => {
        let { count, type, name, isBlock, isStackable, isDamageableItem, damage, maxDamage } = item
        if (item.isNull()) return
        const data: itemData = {
            name,
            icon: `./images/${isBlock ? "block" : "item"}/${type}.png`,
            slot: index,
            count: isStackable ? count : undefined,
            damage: isDamageableItem ? maxDamage - damage : undefined,
            maxDamage: isDamageableItem ? maxDamage : undefined
        }
        inventoryData.enderChest.push(data)
    })
    //这里用的是玩家uuid作为文件名,你也可以用玩家名/xuid作为文件名
    File.writeTo(`${BASE_DATA_PATH}/${player.uuid}.json`, JSON.stringify(inventoryData))
})

const server = new HttpServer();
const LISTEN_ADDRESS = "127.0.0.1"
const LISTEN_PORT = 11451

mc.listen("onServerStarted", () => {
    //这个只是一个示例,当前版本lse的HttpServer不能正常运行
    //你可以直接从minebbs下载适用于nodejs引擎基于express的插件
    server.onGet("/inventory", (req, resp) => {
        const playerName = req.query["name"]
        if (typeof playerName === "undefined"){
            resp.status = 400;
            resp.reason = "Bad Request";
            return
        }
        const uuid = data.name2uuid(playerName)
        if (uuid === null) {
            resp.status = 400;
            resp.reason = "Bad Request";
            return
        }
        let player = mc.getOnlinePlayers().find(pl => pl.uuid === uuid)
        if (typeof player !== "undefined") {
            resp.body = JSON.stringify(getInventoryData(player))
            resp.status = 200;
            resp.reason = "OK";
            return
        }
        resp.body = File.readFrom(`${BASE_DATA_PATH}/${uuid}.json`)
        resp.status = 200;
        resp.reason = "OK";
    }).onGet("/static/(.+)", (req, resp) => {
        const fileName = req.matches[1]
        const path = `${STATIC_PATH}/${fileName}`
        if (File.exists(path)) {
            resp.body = File.readFrom(path)
            resp.status = 200;
            resp.reason = "OK";
            return
        }
        resp.status = 404;
        resp.reason = "Not Found";
    }).onGet("/404", (req, resp) => {
        resp.status = 404;
        resp.reason = "Not Found";
    }).onGet("/(.+)", (req, resp) => {
        resp.status = 404;
        resp.reason = "Not Found";
    }).onPreRouting((req, resp) => {
        logger.info(`onPreRouting [${req.method}] Path ${req.path}\n`, req.query, req.body)
    }).onPostRouting((req, resp) => {
    }).onError((req, resp) => {
    }).onException((req, resp, error) => {
        logger.error(error)
    }).listen(LISTEN_ADDRESS, LISTEN_PORT);
})

ll.onUnload(() => {
    server.stop()
})

static.217.im_mc_dev_inventory_demo.html.png
作者
乱客LWenK
下载
120
查看
873
首次发布
最后更新

评分

0.00 星 0 次评分

乱客LWenK 的其他资源

最新更新

  1. 更新资源文件,js脚本(明文)

    更新资源文件,js脚本不再混淆
  2. v11.45.14

    开箱即用,新增API服务器
  3. 开发版V1

    更新使用教程 新增资源文件
后退
顶部 底部