문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 마인크래프트/모드/개발 (문단 편집) === @SideOnly === {{{#!syntax java @SideOnly(value = Side.CLIENT) public void registerBlockIcons(IIconRegister p_149651_1_) { this.blockIcon = p_149651_1_.registerIcon(this.getTextureName()); // 마인크래프트 내 Block 클래스에서 실제 블록의 텍스쳐를 등록하는 메소드이며, 이 메소드는 클라이언트 사이드에서만 수행되어야 한다. } }}} 간혹 가다 위와 같이 @SideOnly 어노테이션이 붙은 필드나 메소드를 볼 수 있는데, 이것은 '''해당 필드나 메소드가 실행되는 시점이 주어진 사이드가 아니라면 컴파일하지 말라'''는 의미이다. 이제 위 예제를 해석해보자면, registerBlockIcons() 메소드가 클라이언트 쪽에서 실행된 것이 아니라면 메소드 실행이 중단될 것이다. 이처럼 @SideOnly 어노테이션을 쓰면 각각의 메소드나 필드를 사이드 별로 분리시킬 수 있다. 하지만 이 어노테이션은 __사용이 권장되지 않고__, 잘 쓰이지도 않는다. 그 이유는 만약 이 어노테이션을 잘못 사용해서 외부에서 어노테이션이 붙은 이 코드로 접근하면, 해당 코드가 의도하지 않은 사이드에서 실행되버려 오류의 원인이 되고, 코드가 난잡하게 꼬일 수 있기 때문이다. 따라서 위 어노테이션을 직접 사용하기보단 다음과 같은 방법으로 대체하자: * world.isRemote() : 해당 월드의 사이드를 알아낸다 * FMLCommonHandler.getSide() : 이 메소드가 실행되는 시점의 사이드를 알아낸다. 위 메소드를 통해 현 시점의 (물리적) 사이드를 가려내어 코드가 실행될 것인지 말 것인지를 직접 구분지을 수 있다. 또는 아래 문서에 나와있는 프록시 기능을 사용할 수도 있다. 이 @SideOnly 어노테이션은 마인크래프트에서 이미 구현된 조상 클래스에서 해당 어노테이션이 붙어있는 메소드를 오버라이드[* 오버라이드는 프로그래밍 용어로, 부모 클래스에 이미 존재하는 메소드를 다시 정의해서 덮어씌우는 것을 말한다.]하고 싶을 때만 사용하는 것을 권장한다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기