Moomoo.io - 1.8.0 Item Counter

Displays an Actionbar Item Counter, excluding food items. It remains hidden when no items are placed.

// ==UserScript==
// @name        Moomoo.io - 1.8.0 Item Counter
// @author      Seryo
// @description Displays an Actionbar Item Counter, excluding food items. It remains hidden when no items are placed.
// @version     Beta
// @match       *://*.moomoo.io/*
// @namespace   https://greasyfork.org/users/1190411
// @icon        https://cdn.glitch.com/82ae8945-dcc6-4276-98a9-665381b4cd2b/cursor12.png
// @require     https://greasyfork.org/scripts/423602-msgpack/code/msgpack.js?version=1005014
// @license     MIT
// @grant       none
// ==/UserScript==

function getEl(id) {
    return document.getElementById(id);
}

try {

    let msgPack = window.msgpack;
    let WS;

    WebSocket.prototype.oldSend = WebSocket.prototype.send;
    WebSocket.prototype.send = function (message) {
        if (!WS) {
            WS = this;
            WS.addEventListener("message", function (messages) {
                getMessage(messages);
            });
        }
        WS.oldSend(message);
    }

    let foodValue = localStorage.getItem("moofoll") ? 100 : 0;
    function getMessage(message) {
        let data = new Uint8Array(message.data);
        let decode = msgPack.decode(data);
        let packetList = {
            "D": "addPlayer",
            "N": "updatePlayerValue",
            "S": "updateItemCounts"
        };
        let packet = {
            name: packetList[decode[0]],
            arg: function (data) {
                return decode[1][data]
            }
        };
        let checkName = function (name) {
            return packet.name === name;
        }
        if (checkName("addPlayer")) {
            let isYou = packet.arg(1);
            if (isYou) {
                updateItemCountHTML();
            }
        }
        if (checkName("updatePlayerValue")) {
    let index = packet.arg(0);
    let value = packet.arg(1);

    if (index === "food") {
        foodValue = value;
        for (let i = 0; i < 3; i++) {
            let tmpI = 16 + i;
            let req = i === 0 ? 10 : i === 1 ? 15 : i === 2 ? 25 : 10;

            if (i !== 0) {
                getEl("itemCount" + tmpI).innerHTML = Math.floor(foodValue / req);
            } else {

                getEl("itemCount" + tmpI).innerHTML = "";
            }
        }
    }
}
        if (checkName("updateItemCounts")) {
            let index = packet.arg(0);
            let value = packet.arg(1);
            itemCounts[index] = value;
            updateItemCountHTML(index);
        }
    }

    let itemCounts = [];
    let isItemSetted = [];
    let itemIds = [0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 11, 5, 6, 7, 8, 9, 10, 12, 13];
    function updateItemCountHTML(index = undefined) {
    for (let i = 0; i < itemIds.length; ++i) {
        let id = itemIds[i];
        let tmpI = (16 + i);
        if (!isItemSetted[tmpI]) {
            isItemSetted[tmpI] = document.createElement("div");
            isItemSetted[tmpI].id = "itemCount" + tmpI;
            isItemSetted[tmpI].style.display = "block";
            isItemSetted[tmpI].style.position = "absolute";
            isItemSetted[tmpI].style.paddingLeft = "5px";
            isItemSetted[tmpI].style.fontSize = "22px";
            isItemSetted[tmpI].style.color = "#fff";
            isItemSetted[tmpI].style.textAlign = "center";


            if (i !== 1) {
                isItemSetted[tmpI].innerHTML = itemCounts[id] > 0 ? itemCounts[id] : '';
            }

            getEl("actionBarItem" + tmpI).appendChild(isItemSetted[tmpI]);
        } else {
            if (index == id) {
                if (i === 1) {
                    getEl("itemCount" + tmpI).style.display = "none";
                } else {
                    isItemSetted[tmpI].innerHTML = itemCounts[index] > 0 ? itemCounts[index] : '';
                }
            }
        }
    }
}

let itemCount17 = document.getElementById("itemCount17");
if (itemCount17) {
    itemCount17.style.display = "none";
}

updateItemCountHTML();
} catch (e) {
    throw new Error(e);
}