문제점

Minecraft Bedrock의 경우(파악한 내용으로), 일반 Vanila 블록들의 루팅 값을 수정하긴 어려울 것 같다.

 

사용처

- 곡괭이로 광질하는 광석 블록의 루팅에 대해 추가적인 보상을 하기 위함

 

파악한 내용

- Vanila 블럭을 위한 loot 값 변경을 위한 디렉토리 구조가 존재하지 않음

- 바닐라 블럭의 loot 관련 컴포넌트를 typescript로 직접 접근하여, World Init 이벤트에서 이를 수정하고자 했으나, 방법을 찾지 못함

 

가능한 선에서 구상한 내용

- Player가 블럭을 부쉈을 때 발생하는 playerBreakBlock 이벤트의 Before 시점과 After 시점을 활용하여 /loot 커멘드를 실행시켜 유사한 내용을 만드는 것

 

한계

- 기존 Vanila 루팅 값을 지우지는 못함

- playerBreakBlock의 Before 이벤트에서 플레이어의 아이템 스택, 부수는 블럭 뿐만 아니라 cancel에 대해서도 접근할 수 있었는데, 이 때 cancel 값을 true로 하면 부서지지 않는다.

- 블록을 부수어서 playerBreakBlock의 After 이벤트까지 가는 것보다, Before 이벤트에서 cancel을 true값으로 만들어 부수지 않고, 블럭을 air로 대체하고 원하는 loot 파일을 호출하는 것으로 이를 해결하고자 하였지만, Block을 바꾸는 것에 있어서 권한을 묻지 않으면(추측) 이를 거부한다.


당면한 문제 01

- runcommand 함수 역시 op관련 권한을 "privilege"를 묻는다. => /loot command를 사용할 수 없음

> 근원적인 문제, 왜 모든 플레이어에게 Op를 제공하면 안되는가?

  > 신뢰할 수 있는 플레이어들에게만 Op권한을 제공하여야 관리나 보안적인 측면에서 적합하기 때문

∴ 다른 우회 경로 탐색 필요

 

- ItemStack을 만들어서 뿌리는 것 역시 Privilege 요구

 

1) 단순 해결: 이벤트 처리와 동시에 op권한 제공, 이벤트 종료와 동시에 op 권한 박탈 방식

 > 문제: 다인원이 게임 상 수십개나 Break 이벤트를 발생 시키는 중에 이 과정에서 op 권한이 주어졌다가 박탈되는 과정에서 프로그램이 에러가 나서 강제 종료, 급작스럽게 종료되는 과정에서 문제가 발생할 가능성이 높아짐.

 

2) 눈속임 해결: 모든 블록의 루팅 내용을 수정할 수는 없지만, 일부라도 루팅율(하나 캤을 때, 획득하는 아이템량)을 개선 시킬 수 있음.

  > 단계: 목표 블럭 종류(돌, 철광석, 금광석, 다이아 광석)를 Custom 블럭으로 복제 > 해당 블럭 json 파일의 loot 컴포넌트 내용을 원하는 루팅 파일 경로로 설정 > feature 디렉토리에서 Custom 블록의 스폰을 담당하는 파일을 만들어 대칭되는 Vanila 블럭의 일부를 대체함

  > 문제: custom 블럭을 광물 취급하는 방식으로 진행되는데, feature에서 덩어리지는 광물 개수를 설정하는 것이 있다. 돌의 경우는 덩어리지는 광물로 설정할 수 없기 때문에 포기

 

3) Privilege 문제 해결

> Privilege는 op와는 다른 문제이고, 이는 다음과 같은 코드로 해결할 수 있었다.

system.run(() => {
// 특정함수
});

> 애초에 원하는 대로 시스템을 구성할 수 있게 됌. 가짜로 부수는 것으로 보이는 것도 가능하게 됌.

> 추가 예상 문제 - 많은 사람이 블럭을 캤을 때, 어떻게 작동할지 모름.


Privilege 요구 Script 함수(경험 상)

- runCommand

- dimension.spawnItem

 

Privilege 이해 상황

- 인게임 내에서 Op 권한으로 추측 중

- server Behaviour 팩에서 인위적으로 만드는 함수인데, 이걸 privilege를 요구하는게 맞나 싶다가도... 서버에 올려서 필수 팩으로 돌리는 걸로는 우회가 안되려나 => 어짜피 연습용 팩으로 공유할 수 있게 할 건데 일반 맵으로 열지 못하면 의미가 없음

 

Privilege 1차 이해 상황 업데이트

- Op 아님

- 주로 Before Event들에만 주로 사용되는 시스템인데, 문제가 발생할 수 있는 Native 함수를 Before Event Handler 함수들과 동일한 Tick에서 실행되지 않기를 원해서 도입한거라고 한다.(제대로 이해한게 맞다면)

* 참고 사이트: Script Core Features | Bedrock Wiki

 

Script Core Features | Bedrock Wiki

 

wiki.bedrock.dev

 

+ Recent posts