from utils import *

script_license()


def main():
    if not os.path.exists("plugins/Geyser-Spigot"):
        print("Geyser和Floodgate尚未安装")
        install_geyser()
        print("安装完成,启动服务器,在关闭后执行此脚本")
        exit_()
    print("已安装Geyser和Floodgate")
    auto_install = ask("简单模式(跳过询问)")
    setup_geyser(auto_install)
    setup_floodgate(auto_install)
    install_extend(auto_install)
    setup_plugin(auto_install)
    print("已完成")
    exit_()


def install_geyser():
    download("https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot",
             "plugins/Geyser-Spigot.jar")

    download("https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot",
             "plugins/floodgate.jar")


@handler("plugins/Geyser-Spigot/config.yml")
def setup_geyser(geyser, auto_install=False):
    prop = ServerPropLoader.load(open("server.properties", "r"))
    server_port = int(prop["port"])
    geyser["remote"]["port"] = server_port
    if auto_install or ask("允许Geyser玩家在地狱上层(y>128)放置方块"):
        geyser["above-bedrock-nether-building"] = True


@handler("plugins/floodgate/config.yml")
def setup_floodgate(floodgate, auto_install=False):
    floodgate["username-prefix"] = "BE_" if auto_install else input(
        "\033[33m基岩版玩家用户名前缀(默认为.,推荐BE_):\033[0m")


def install_extend(auto_install=False):
    if auto_install or ask("安装GeyserOptionalPack(推荐)"):
        download("https://download.geysermc.org/v2/projects/geyseroptionalpack/versions/latest/builds/latest"
                 "/downloads/geyseroptionalpack", "plugins/Geyser-Spigot/packs/geyseroptionalpack.mcpack")
    if auto_install or ask("安装Geyser行为修复(推荐)"):
        download("https://github.com/GeyserMC/Hurricane/releases/download/2.0-SNAPSHOT-1/Hurricane.jar",
                 "plugins/Hurricane.jar")
        download("https://github.com/tbyt/BedrockParity/releases/download/release/BedrockParity.jar",
                 "plugins/BedrockParity.jar")
    if auto_install or ask("安装皮肤修复(推荐)"):
        download("https://github.com/Camotoy/GeyserSkinManager/releases/download/1.7/GeyserSkinManager-Spigot.jar",
                 "plugins/GeyserSkinManager-Spigot.jar")
    if auto_install or ask("安装GeyserUtils(推荐)"):
        download("https://github.com/zimzaza4/GeyserUtils/releases/download/1.0.0-fix/geyserutils-spigot-1.0-SNAPSHOT"
                 ".jar", "plugins/geyserutils-spigot-1.0-SNAPSHOT.jar")
        download("https://github.com/zimzaza4/GeyserUtils/releases/download/1.0.0-fix/geyserutils-geyser-1.0-SNAPSHOT"
                 ".jar", "plugins/Geyser-Spigot/extensions/geyserutils-geyser-1.0-SNAPSHOT.jar")
    if auto_install or ask("安装更好的第三人称视角(推荐)(需要GeyserUtils)"):
        download("https://github.com/lilingfengdev/GeyserBetterBedrockThirdPerson/releases/download/latest"
                 "/BetterBedrockThirdPerson-1.0-SNAPSHOT.jar", "plugins/BetterBedrockThirdPerson-1.0-SNAPSHOT.jar")
    if not auto_install and ask("安装第三方披风/耳朵支持"):
        download(
            "https://download.geysermc.org/v2/projects/thirdpartycosmetics/versions/latest/builds/latest/downloads"
            "/thirdpartycosmetics",
            "plugins/Geyser-Spigot/extensions/ThirdPartyCosmetics.jar")
    if auto_install or ask("安装Geyser自动更新"):
        download("https://ci.kejonamc.dev/job/GeyserUpdater/job/main/18/artifact/target/GeyserUpdater-1.6.4.jar",
                 "plugins/GeyserUpdater-1.6.4.jar")
    if not auto_install and ask("安装Geyser扩展(1.20.6+)"):
        download("https://cdn.modrinth.com/data/OguISbmK/versions/QDtr4UOA/GeyserExtras_CN.jar",
                 "plugins/GeyserExtras.jar")


def setup_plugin(auto_install=False):
    if os.path.exists("plugins/Slimefun") and ask("安装Slimefun材质兼容(需要Slimefun Resource Pack)"):
        download("https://dl.8aka.org/plugins/Slimefun.mcpack", "plugins/Geyser-Spigot/packs/Slimefun.mcpack")
        download("https://dl.8aka.org/plugins/RYSurvival-SlimefunMapping.jar",
                 "plugins/Geyser-Spigot/extensions/RYSurvival-SlimefunMapping.jar")
    if os.path.exists("plugins/Residence") and (auto_install or ask("安装Residence基岩版菜单兼容")):
        download("https://github.com/RenYuan-MC/ResidenceForm/releases/download/dev/ResidenceForm.jar",
                 "plugins/ResidenceForm.jar")
    if (os.path.exists("plugins/QuickShop-Hikari") or os.path.exists("plugins/QuickShop")) and (
            auto_install or ask("安装QuickShop基岩版菜单兼容")):
        download("https://github.com/RenYuan-MC/QuickShopForm/releases/download/dev/QuickShopForm.jar",
                 "plugins/QuickShopForm.jar")
    if auto_install or ask("安装Geyser扩展菜单(BedrockPlayerSupport)"):
        download("https://github.com/DongShaoNB/BedrockPlayerSupport/releases/download/v2.0.0/BedrockPlayerSupport-2"
                 ".0.0-all.jar", "plugins/BedrockPlayerSupport.jar")
    if os.path.exists("plugins/Skript") and (auto_install or ask("安装Skript基岩版兼容")):
        download("https://github.com/kejonaMC/floodgate-skript/releases/download/v2.1/floodgate-skript-2.1.jar",
                 "plugins/floodgate-skript-2.1.jar")

    if ask("安装基岩版菜单制作插件"):
        download("https://dl.8aka.org/plugins/MagicMenu-1.0.3.jar",
                 "plugins/Geyser-Spigot/extensions/MagicMenu-1.0.3.jar")


if __name__ == "__main__":
    main()