본문 바로가기
Game/Minecraft

마인크래프트 서버 접속기 만들기[4]

by ryush00 2013. 3. 30.

안녕하세요. 이번에는 서버 택스쳐팩을 무조건 받게 해보겠습니다.



2013/03/30 - [마인크래프트/개발] - 마인크래프트 서버 접속기 만들기[1]


2013/03/30 - [마인크래프트/개발] - 마인크래프트 서버 접속기 만들기[2]


2013/03/30 - [마인크래프트/개발] - 마인크래프트 서버 접속기 만들기[3]

이번에는 어디부터 건드려야할지 모르겠네요.


순정 minecraft.jar 안에 보면 lang폴더가 있습니다.

그곳에 ko_KR.lang를 열면 한글번역들이 보입니다.


찾다보면 multiplayer.texturePrompt.line1=이 서버는 사용자 지정 텍스쳐 팩 사용을 권장하고 있습니다 가 보이네요.


택스쳐팩담당하는부분을찾으려면 이곳을 수정하면 되겠죠.


 multiplayer.texturePrompt.line1를 찾아봅시다.


먼저 이클립스의 Seach -> Seach (또는 Ctrl+H)


그리고 multiplayer.texturePrompt.line2 를 넣고 Seach를 눌러봅니다.




뭔가 있네요. ㄱㅊ?


더븙클릭하면 NetClientHandler.java가 뜹니다. ㅎㄷㄷ


이곳을 보면


this.mc.displayGuiScreen(new GuiYesNo(new NetClientWebTextures(this, var3), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line1"), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line2"), 0));


이게 보입니다. 이게 중요한 놈들이죠..


이번에는 GuiYesNo의 정체를 밝히러 GuiYesNo.java로 갑시다. ㅎㄷㄷ


    public GuiYesNo(GuiScreen par1GuiScreen, String par2Str, String par3Str, int par4)

    {

        this.parentScreen = par1GuiScreen;

        this.message1 = par2Str;

        this.message2 = par3Str;

        this.worldNumber = par4;

        StringTranslate var5 = StringTranslate.getInstance();

        this.buttonText1 = var5.translateKey("gui.yes");

        this.buttonText2 = var5.translateKey("gui.no");

    }


이게 4개짜리놈이죠.


첫번째는 Yes해줄때 return될 창인듯..


쨌든 Yes(0)버튼누르면


this.parentScreen.confirmClicked(par1GuiButton.id == 0, this.worldNumber);


이곳으로 가는듯..


No이면 그냥 닫는듯 합니다.

parentScreen은 NetClientWebTextures 임.



2,3 번째줄은 글씨네요.

4번째는.. 흠.. 몰라요.


어쩄든 다시 NetClientWebTextures를 찾으러

NetClientWebTextures.java로 갑시다.


    public void confirmClicked(boolean par1, int par2)

    {

        this.mc = Minecraft.getMinecraft();


        if (this.mc.getServerData() != null)

        {

            this.mc.getServerData().setAcceptsTextures(par1);

            ServerList.func_78852_b(this.mc.getServerData());

        }


        if (par1)

        {

            this.mc.texturePackList.requestDownloadOfTexture(this.texturePackName);

        }


        this.mc.displayGuiScreen((GuiScreen)null);

    }


이게 있죠?


예를 실행시키면 됩니다.


다시 뒤로가서


Yes누르면 


new NetClientWebTextures(this, var3) 에 가는겁니다.

그러니


this.mc.displayGuiScreen(new GuiYesNo(new NetClientWebTextures(this, var3), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line1"), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line2"), 0));


예를


this.mc.displayGuiScreen(new NetClientWebTextures(this, var3));


이렇게 바꿔주면 될겁니다.


이제 테스트를 위해 테스트섭 열고




(전 서버운영중이라 25566으로 염, 그러니 저는 전에 설정한 서버주소들을 수정해야합니다.)




응? 왜안되지?



이렇게 또다시 삽질이 시작되고...


YesNo 다시넣으니 택팩이 뜨는걸봐서는..

소스를 잘못수정한듯 하다.





약 1시간의 노가다끝에


방법을 찾았습니다. ㅠㅠㅠㅠ


this.mc.displayGuiScreen(new NetClientWebTextures(this, var3));


이걸

                 this.parentScreen = new NetClientWebTextures(this, var3);

                this.parentScreen.confirmClicked(true, 0);


이걸로 바꾸자..

ㅠㅠ

아 그리고 맨 위에 



public class NetClientHandler extends NetHandler

{



바로 아래쯤에

    protected GuiScreen parentScreen;


이걸 추가해줍니다.


그러면 바로 다운로드가 되는것을 볼수 있습니다.




적용된 모습입니다.. 좀 옛날거라 이런듯..


그런데 문제가 생겼네요.





이거 바꿔주면 말짱 도루묵...


그래서 다음엔 이걸 수정해보겠습니다.




-----------------------------

추가. 이딴거 다 필없습니다.


                if (this.mc.texturePackList.getAcceptsTextures())

                {

                    this.mc.texturePackList.requestDownloadOfTexture(var3);

                }

                else if (this.mc.texturePackList.func_77300_f())

                {

                this.parentScreen = new NetClientWebTextures(this, var3);

                this.parentScreen.confirmClicked(true, 0);

                //this.mc.displayGuiScreen(new NetClientWebTextures(this, var3));

                //this.mc.displayGuiScreen(new GuiYesNo(new NetClientWebTextures(this, var3), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line1"), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line2"), 0));

                }


이 if문 자체가 


    public boolean func_77300_f()

    {

        if (!this.mc.gameSettings.serverTextures)

        {

            return false;

        }

        else

        {

            ServerData var1 = this.mc.getServerData();

            return var1 == null ? true : var1.func_78840_c();

        }

    }


    public boolean getAcceptsTextures()

    {

        if (!this.mc.gameSettings.serverTextures)

        {

            return false;

        }

        else

        {

            ServerData var1 = this.mc.getServerData();

            return var1 == null ? false : var1.getAcceptsTextures();

        }

    }


이거라서 그냥 똑같네요. 걍 


                if (this.mc.texturePackList.getAcceptsTextures())

                {

                    this.mc.texturePackList.requestDownloadOfTexture(var3);

                }

                else if (this.mc.texturePackList.func_77300_f())

                {

                this.mc.texturePackList.requestDownloadOfTexture(var3);

                //this.parentScreen = new NetClientWebTextures(this, var3);

                //this.parentScreen.confirmClicked(true, 0);

                //

                //this.mc.displayGuiScreen(new NetClientWebTextures(this, var3));

                //this.mc.displayGuiScreen(new GuiYesNo(new NetClientWebTextures(this, var3), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line1"), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line2"), 0));

                }



이걸로 쓰면 되네요. ;;

댓글