• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

C语言 安装MC客户端

.xyc

【Lv:4】

开发者
注册
2021/12/14
消息
520
金粒
1,305金粒
新玩家来到服务器时会经过安装客户端,但是有些玩家不会解压服务器客户端
于是,就有了客户端下载工具

运行方便简单,双击打开就可以安装整个服务器客户端


使用视频


把mc.tsptd.net替换成你的服务器


C++:
#include <iostream>
#include "windows.h"
#include <sys/stat.h>
using namespace std;

bool isFileExists_stat(string& name) {
  struct stat buffer;   
  return (stat(name.c_str(), &buffer) == 0);
}

int main()
{
    //标题


    SetConsoleTitle("Client下载器1.5|loading...");






    cout << "Minecraft TsPod Server Client Downloader\n \033[?25l ";
    cout << "服务器:TsPod New Page" << endl;
    cout << "cmcl提供启动支持" << endl;
    cout << "\033[31mNew\033[32mX\033[35mY\033[36mC\033[0m" << endl;
    /*
    cout << " .----------------.  .----------------.  .----------------." << endl;
    cout << "| .--------------. || .--------------. || .--------------. |" << endl;
    cout << "| |  ____  ____  | || |  ____  ____  | || |     ______   | |" << endl;
    cout << "| | |_  _||_  _| | || | |_  _||_  _| | || |   .' ___  |  | |" << endl;
    cout << "| |   \ \  / /   | || |   \ \  / /   | || |  / .'   \_|  | |" << endl;
    cout << "| |    > `' <    | || |    \ \/ /    | || |  | |         | |" << endl;
    cout << "| |  _/ /'`\ \_  | || |    _|  |_    | || |  \ `.___.'\  | |" << endl;
    cout << "| | |____||____| | || |   |______|   | || |   `._____.'  | |" << endl;
    cout << "| |              | || |              | || |              | |" << endl;
    cout << "| '--------------' || '--------------' || '--------------' |" << endl;
    cout << " '----------------'  '----------------'  '----------------' " << endl;
    */


    Sleep(500);
 
    cout << "检查是否有安装客户端" << endl;
    
    
    
    string filename4 = "ver.txt";
    bool ret4 = isFileExists_stat(filename4);
    if (ret4)
    {
        cout << "\033[32m版本文件存在,启动客户端\033[0m" << endl;
        SetConsoleTitle("TsPod|Xuwenblock Minecraft Server");
        system("cmcl.exe");
        cout << "\n\n\n\n\n\n\n\n\n\n\033[32m如果你看到这条消息,你的Minecraft已经停止运行了\033[0m" << endl;
        system("pause");
        return 0;
    }
    else
    {
        cout << "\033[31m版本文件不存在,将重新下载客户端\033[0m" << endl;
        goto redownload7z;

    }
    

    cout << "\033[35m下载7z\033[0m\n";


    SetConsoleTitle("我的世界TsPod服务器客户端下载器|开始下载!");


redownload7z:


    system("curl -O http://mc.tsptd.net:9090/mc/7z.exe");




    string filename1 = "7z.exe";
    bool ret = isFileExists_stat(filename1);
    if (ret)
    {
        cout << "\033[32m文件下载成功\033[0m" << endl;
    }
    else
    {
        cout << "\033[31m文件不存在\033[0m" << endl;
        goto redownload7z;
        
    }

    system("curl -O http://mc.tsptd.net:9090/mc/7z.dll");


    string filename0 = "7z.dll";
    bool ret8 = isFileExists_stat(filename0);
    if (ret)
    {
        cout << "\033[32m7z.dll下载成功\033[0m" << endl;
    }
    else
    {
        cout << "\033[31m文件不存在\033[0m" << endl;
        goto redownload7z;

    }

    SetConsoleTitle("我的世界TsPod服务器客户端下载器|下载客户端中...");

downloadclient: cout << "#downloadclient" << endl;

    cout << "\033[34m下载客户端文件\033[0m\n";
    system("curl -O http://mc.tsptd.net:9090/mc/Client.zip");




    string filename2 = "Client.7z";
    bool ret2 = isFileExists_stat(filename2);
    if (ret)
    {
        cout << "\033[32m文件下载成功\033[0m" << endl;
    }
    else
    {
        cout << "\033[31m文件不存在\033[0m" << endl;
        goto downloadclient;

    }


    SetConsoleTitle("我的世界TsPod服务器客户端下载器|下载JDK!");

downloadjdk: cout << "#downloadjdk" << endl;


    //下载JDK16
    cout << "\033[34m下载JDK16\033[0m\n";
    system("curl -O http://mc.tsptd.net:9090/mc/openjdk-16+36_windows-x64_bin.zip");

    cout << "\033[33m开始解压客户端&JDK\033[0m" << endl;



    string filename3 = "openjdk-16+36_windows-x64_bin.zip";
    bool ret3 = isFileExists_stat(filename3);
    if (ret)
    {
        cout << "\033[32mJDK下载成功\033[0m" << endl;
    }
    else
    {
        cout << "\033[31mJDK文件不存在\033[0m" << endl;
        goto downloadjdk;

    }
    //********************************************************************************************
    Sleep(3);
    SetConsoleTitle("我的世界TsPod服务器客户端下载器|解压...");
    //7z解压
    system("7z x openjdk-16+36_windows-x64_bin.zip");
    system("7z x Client.zip");
    //下载版本号
    system("curl -O http://mc.tsptd.net:9090/mc/ver.txt");


    cout << "开始删除缓存文件" << endl;
    system("del openjdk-16+36_windows-x64_bin.zip");
    system("del Client.zip");
    system("del 7z.exe");



    //弹出提示框:已安装完成
    MessageBox(NULL, TEXT("TsPod Client已成功安装\n请再次运行本程序启动Minecraft"), TEXT("提示"), MB_OK);

theend: cout << "#theend" << endl;

    return 0;
}


int upload
{



};


构建环境visual studio 2022
平台工具集 v143
c++语言标准 14

本人只是新手,目前正在学习C++
 

附件

提出一些优化建议:
1. 不要使用using namespace std;会污染全局变量.用std::前缀规避(估计你是oi选手...)
2. 推荐不要使用system执行命令,效率略低并且不保证对于所有系统均有安装curl(尽管大部分Windows 10+都有自带curl),可以用URLDownloadToFile
#include <urlmon.h> //记得链接urlmon.lib //函数原型:LRESULT URLDownloadToFileA(_In_opt_ LPUNKNOWN, _In_ LPCSTR, _In_opt_ LPCSTR,DWORD, _In_opt_ LPBINDSTATUSCALLBACK); BOOL DownloadFiles(const CHAR* url, const CHAR* downloadPath) //用const CHAR* 是因为LPWSTR可以强制转换 { if (URLDownloadToFile(NULL, (LPWSTR)url, (LPWSTR)downloadPath, 0, 0) == S_OK && FileExistsStatus(downloadPath)) { return true; }//如果下载成功且文件存在返回真 else { return false;//反之亦然 } } BOOL FileExistsStatus(const CHAR* path) { DWORD dwAttribute = GetFileAttributes((LPWSTR)path); if (dwAttribute == 0XFFFFFFFF) { return false; } else { return true; } }
还有巨多字符串常量,修改的话很累,推荐写在一起
顺便说一句,我们的启动器也叫CMCL,但是鸽了很久。
 

在线管理成员

在线会员

  • s648555685
  • 648645654465456
  • 离川
  • abcd43295
  • Tighnari
  • YYT
  • 温暖舒适的熊
  • 卡卡豆
  • 小小花生
  • sssjiu
  • shuiwucan
  • 太白
  • 清茶菌
  • NovaCraftStudio
  • Dieskeleton
  • 苏热
  • 赤_焰
  • 鲨狐
  • pingguo
  • 超级小柴
...和 67 更多。
后退
顶部 底部