이 게시판에 글을 작성하시려면 인증 개발자 권한이 필요합니다. 언제든지 지원해주세요(바로가기).

기타

Exhibitionism: 클래스,메서드,필드를 노출시키는 프로그램

HeartPattern 2020.01.31 조회 수 94 추천 수 2
마인크래프트 버전 모두 
API 종속성 기타 

Exhibitionism

Exhibitionism은 클래스 파일 변환 도구입니다. Exhibitionism은 모든 클래스, 필드, 메서드를 public, non-final로 만듭니다.

이 도구를 사용하여 nms, 또는 craftbukkit 클래스에 리플렉션 없이 접근할 수 있습니다.


컴파일

프로젝트를 컴파일하기 위해서, 깃허브 레포지토리를 로컬 머신에 클론합니다. gradlew 파일이 있는 디렉토리에서 터미널을 열고, 아래 명령어를 입력하여 프로젝트를 컴파일합니다.


./gradlew installDist (리눅스, MacOS)

gradlew.bat installDist  (윈도우)


실행 스크립트와 런타임 라이브러리들이 build/install/Exhibitionism 폴더 아래에 설치됩니다.


사용법

build/install/Exhibitionism/bin 폴더에서 터미널을 열고 Exhibitionism (리눅스, MacOS) 또는 Exhibitionism.bat (윈도우)를 다음 명령행 인수와 함께 실행합니다.


--input

입력 파일의 이름 (.jar 파일)


--output

출력 파일의 이름. 이미 해당 파일이 존재하면, 덮어씁니다.


--parallel (선택, 기본값=1)

클래스 변환에 사용할 스레드 갯수


--nopublic (플래그)

이 플래그가 설정되면, public 화 작업을 진행하지 않습니다.


--noopen (플래그)

이 플래그가 설정되면, non-final 화 작업을 진행하지 않습니다.


--path (선택)

Exhibitionism 작업을 진행할 경로를 설정합니다. 쉼표(',')를 이용하여 여러개의 경로를 지정할 수 있습니다. 이 인수가 지정되지 않을경우, 모든 클래스파일에 대해 적용합니다.


--noStaticFinal (플래그)

이 플래그가 설정되면 static final 필드에 대해서 non-final 화 작업을 진행하지 않습니다.


예시 사용법

./Exhibitionism --input Bukkit.jar --output Bukkit-open.jar --parallel 8 --path net.minecraft.server,org.bukkit.craftbukkit --noStaticFinal


API 지원

Exhibitionism은 HeartPattern maven repository에 호스팅되어있습니다. 아래 코드를 사용하여 의존성을 추가합니다.

1
2
3
4
5
6
7
8
9
10
repositories{
    maven{
        url 'https://maven.heartpattern.kr/repository/maven-public/'
    }
}
 
dependencies{
    compile 'kr.heartpattern:Exhibitionism:1.0.0-SNAPSHOT'
}
 
cs


API는 간단합니다. 오직 한개의 메서드와 한개의 클래스만 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
transform(
            ExhibitionismOptions(
                source = "bukkit.jar",
                destination = "bukkit-open.jar",
                parallel = 8,
                path = setOf("net.minecraft", "org.bukkit.craftbukkit"),
                logger = Logger.getGlobal(),
                public = true,
                open = true,
                noStaticFinal = true
            )
        )
cs

exhibitionism-maven-plugin

Exhibitionism의 maven plugin입니다. 

사용법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<repositories>
    <repository>
        <id>HeartPattern</id>
        <url>https://maven.heartpattern.kr/repository/maven-public/</url>
    </repository>
</repositories>
 
<build>
    <plugins>
        <plugin>
            <groupId>kr.heartpattern</groupId>
            <artifactId>exhibitionism-maven-plugin</artifactId>
            <version>1.0.0-SNAPSHOT</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>exhibit</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
cs

설정

output

출력 파일을 지정합니다. 설정하지 않으면, 기존 파일을 바꿉니다.


parallel(기본값=1)

클래스를 변환할때 사용할 스레드의 갯수를 지정합니다. 설정하지 않으면, 단일 스레드를 사용합니다.


open(기본값=true)

non-final 화 작업을 진행할지 설정합니다.


publify(기본값=true)

public 화 작업을 진행할지 설정합니다.


debug(기본값=false)

디버깅 메세지를 출력할지 설정합니다.


noStaticFinal(기본값=false)

static final 필드에 대해 non-final 작업을 건너뛸지 설정합니다.


paths

Exhibitionism 작업을 진행할 경로를 지정합니다. 예를 들어 net/minecraft로 설정하면, net.minecraft 패키지에 대해서만 Exhibitionism 작업이 진행됩니다. 지정하지 않으면, 모든 파일에 대해 진행됩니다.

예시 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<plugin>
    <groupId>kr.heartpattern</groupId>
    <artifactId>exhibitionism-maven-plugin</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>exhibit</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <output>open-all.jar</output>
        <open>true</open>
        <publify>true</publify>
        <parallel>8</parallel>
        <noStaticFinal>true</noStaticFinal>
        <debug>false</debug>
        <paths>
            <path>net/minecraft</path>
            <path>org/bukkit/craftbukkit</path>
        </paths>
    </configuration>
</plugin>
cs

링크

GitHub: https://github.com/HeartPattern/Exhibitionism

GitHub: https://github.com/HeartPattern/exhibitionism-maven-plugin


2개의 댓글

YeeV
2020.03.31

잘 사용 할게요!

DDang_
2020.01.31

좋은 글 감사합니다

고급 자료실

인증 개발자 분들이 창작하신 고급 자료들을 만나보실 수 있습니다!

마인크래프트 버전
API 종속성
조회 수 제목 글쓴이
1752 [1] [뉴플래닛] 유저와 함께 성장하는 서버, 그곳에는 저희가 있습니다! 14 루타카
696 [2] [HK] 마인크래프트 개발 디스코드 - 컨텐츠를 만들고 서버 어드민이 되어보자! 5 DC
353 [3] [베개서버] [신생] 인생약탈 서버가 상위버전에서 활보 중이라구요? 2 오리야
68 모델링 공방 : 커뮤니티 개편 기념 공모전 개최!! U 박동백
860 새로워진 한마포 창작자로 수익과 함께 활동해보세요! 10 U 프리루트
268 유저 커뮤니티 개설 신청을 다시 받기 시작했습니다! 6 U 프리루트
745 일부 SNS 로그인 지원 중단 및 안내 가이드 (카카오, 트위터) 14 프리루트
850 한디포 이용 가이드! 처음 온 분은 읽어둡시다! 20 초스터
658 한디포 이용 규칙 25 초스터
701 한마포 AD : 새로운 게시판 공지 광고 안내 7 프리루트
381 [유틸] [1.12.2] 간편 버킷 실행기 1 레도
339 [유틸] [1.15.2] 간편 버킷 실행기 2 레도
332 [플러그인] TrafficLogger 1.0 / 서버 트래픽을 최적화해봅시다 4 Skywolf46
124 [API or 라이브러리] MCVersions: 마인크래프트 버전 정보 라이브러리 5 HeartPattern
94 [기타] Exhibitionism: 클래스,메서드,필드를 노출시키는 프로그램 2 HeartPattern
192 [API or 라이브러리] CommandAnnotation / 명령어 등록을 더 쉽고 편리하게. 3 Skywolf46
238 [기타] MC-Remapper: 마인크래프트 난독화 제거 툴 5 HeartPattern
196 [API or 라이브러리] 쉽게 명령어를 추가하자 - EzFramework 3 KingCjy
1 [API or 라이브러리] MCVersions: 마인크래프트 버전 정보 라이브러리 HeartPattern
130 [유틸] IntegratedMessageUtil / 전버전 호환 메시지/플레이스홀더 관리 유틸 4 Skywolf46
258 [API or 라이브러리] ReflectedNBTWrapper / 전버전 호환 NBT 라이브러리 10 Skywolf46

개발자 최신글
https://www.koreaminecraft.net/files/thumbnails/647/773/001/262x150.crop.jpg
버그를... 발견한거 같..습니다?

WintChoco

2020-06-05

0

https://www.koreaminecraft.net/files/thumbnails/572/773/001/262x150.crop.jpg

스크린샷

마크하다 예뻐서 찍어봄 ㅇㅅㅇ 1

재협

2020-06-05

0