MinecraftMod을 디 컴파일하는 방법

자기소개



여러분, 안녕하세요! LiT!의 캠프 경력 약 2년의 마루입니다.
지금까지 갔던 코스 중에서 가장 빠진 마인크래프트에 관한 화제를...

디컴파일! !



여러분, 이런 경험이 없습니까?
「그 mod를 참고로 하고 싶지만 소스가 공개되어 있지 않다…
자, 여기서 문제입니다. 어떻게 하는 것이 정답입니까?

정답은...

「디컴파일한다」였습니다!

어떻게?


  • jd_gui 다운로드
  • mod 디컴파일
  • func_ · field_ 시스템의 오류 수정

  • ↓자세히 설명해 갑니다

    1.jd_gui 다운로드



    jd_gui 페이지로 이동하여 조금 아래의 JU_GUI 곳에있는 다운로드 탭에서 jd_gui-1.4.0.jar을 다운로드하십시오. (버전이 변경되었을 수 있습니다.)


    2.mod 디컴파일



    방금 다운로드한 jd_gui를 더블 클릭으로 시작합니다.
    그런 다음 디 컴파일하고 싶은 mod를 jd_gui로 드래그 앤 드롭합니다.
    그러면 순식간에 디컴파일되어 소스 코드가 표시됩니다.
    (이미지에는 자작의 Mod를 사용하고 있습니다.)


    그런 다음 왼쪽 상단의 File > Save all Sources를 클릭하여 원하는 곳에 저장합니다.


    거기에 zip 파일이나 뭐든지 할 수 있었다고 생각합니다.
    그것을 압축 해제하면 디 컴파일 후 java 파일이 나옵니다.


    이것으로 디컴파일 자체는 완성입니다만, 이대로는 사용할 수 없기 때문에 여러가지 갑시다.

    3. func_ · field_ 계열의 오류 수정



    일단 이것을 봐.

    seiti.java
    package maru.seititools;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class seiti extends net.minecraft.item.Item {
    
      private boolean isair;
    
      public seiti()
      {
        func_77637_a(net.minecraft.creativetab.CreativeTabs.field_78040_i);
        func_77655_b("seititools_seiti");
        func_111206_d("seititools:seiti");
      }
    
      public boolean func_77648_a(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int meta, float wx, float wy, float wz)
      {
        this.isair = true;
        for (int i = -5; i <= 5; i++) {
          for (int j = 1; j <= 10; j++) {
            for (int k = -5; k <= 5; k++) {
              net.minecraft.block.Block block = world.func_147439_a(x + i, y + j, z + k);
              if ((block != Blocks.field_150357_h) && (block != Blocks.field_150378_br)) {
                world.func_147480_a(x + i, y + j, z + k, true);
              }
              if (block != Blocks.field_150350_a) {
                this.isair = false;
              }
            }
          }
        }
        if (this.isair) {
          return true;
        }
        stack.field_77994_a -= 1;
        return true;
      }
    }
    

    func_77637_a와 같은 의미를 모르는 것이 있습니까?
    이것은, 프로그래밍에 사용하고 있는 함수와 마인크래프트가 사용하는 함수의 이름이 다르기 때문에, 컴파일 할 때 고쳐지고 있기 때문입니다 (아마…).
    그래서 수리해 봅시다.

    "minecraft Mod Corder Pack"에서 검색하면 MCP 다운로드 페이지를 찾을 수 있다고 생각합니다. 거기에서 해당 버전의 MCP를 다운로드하고 fields.csv 또는 methods.csv와 같은 파일을 찾으십시오. 그것이 func, field계와 원래의 변수명·함수명과의 대조표가 되고 있습니다.

    또한,

    난독화 후의 이름에 관해서는 MCP Mapping Viewer가 편리해요.

    라고 하는 코멘트를 받았습니다만, 이마이치 사용법을 잘 모르기 때문에 배송해 주셨습니다. 죄송합니다. (확실히 내 솜씨 부족)
    관심이 있는 분은 사용해 보세요.

    완성!



    func,field계를 고치면 디컴파일 완성입니다!
    (라이센스를 위반하지 않는 범위에서) 끓여서 구워져 스킬 업합시다!

    좋은 웹페이지 즐겨찾기