개인 자료란 (JE)

  서버 커뮤니티

Profile yusin12 대표칭호 없음

yusin_YT 1e0511f92377434a9f27b5724c29fbe3

Profile

강좌 자바 에디션(JE) 커맨드 응용

19 random

2023.04.22 조회 수 944 추천 수 0
게임버전 1.13.x, 1.14.x, 1.15.x, 1.16.x, 1.17.x, 1.18.x, 1.19.x 

오늘은 마인크래프트 커맨드로 랜덤을 만들어 볼 꺼에요!


1. 스코어보드 점수 올리는 방법

1. 스코어보드 생성

2. 스코어보드를 1점씩 올림

3. n점이 되면 스코어보드 초기화

4. 1번 반복

장점 : 시간이 효율적임/만들기 쉬움

단점 : 리듬감이 있으면 원하는 걸 뽑기 쉬워짐


/scoreboard objectives add random dummy

이름이 'random'이고 명령어로만 올릴 수 있는 스코어보드를 생성.

dummy명령어로만 점수를 조작할 수 있음.


/scoreboard players add @e[tag=tester] random 1

태그가 'tester'인 모든 엔티티에게 random스코어보드에게 1점을 더한다.

@e[tag=tester]
태그가 'tester'인 모든 엔티티


/scoreboard players set @e[tag=tester,scores={random=2..}] random 0

태그가 'tester'이고 random이라는 스코어보드 점수가 2이상인 모든 엔티티의 random스코어보드 점수를 0으로 설정한다.

@e[tag=tester]태그가 'tester'인 모든 엔티티
@e[scores={random=2..}]random이라는 스코어보드 점수가 2이상인 모든 엔티티

여기서 reset말고 set을 쓴 이유는 reset은 엔티티의 스코어보드를 없애기 때문에...

reset을 하면 1  1  1  1  1 이렇게 출력

근데 set을 쓰면 점수가 0이 되어버리는거기 때문에...

set을 쓰면 1 0 1 0 1 0 1 0 이렇게 출력


/tellraw @a [{"score":{"objective":"random","name":"@e[tag=tester]"}}]

이 명령어로 확인을 하면 0과 1이 랜덤으로 나오는걸 볼 수 있어요!!


2. 엔티티 UUID 활용

모든 엔티티는 UUID라는 고유번호가 있어요! 이 번호는 항상 다른 값이 나오고 중복 값이 될 수 없기 때문에....

그야 말로.. 랜덤... 예를 들어... UUID가 111111이라고 합시당! 이 뇨석을! 5로 나눠봐요! 몫이 22222이고 나머지가 1이죠!

스코어보드 연산자 중에 이 나머지를 저장하는 값이 있기 때문에 이 1을 가져오는거에요! UUID는 엔티티마다 다 다르니까 랜덤 값을 얻을 수 있죠!


1. 아머스탠드를 소환해서 UUID를 가져올 엔티티를 만들어요!

2. 1번에서 소환한 아머스탠드 UUID값을 r이라는 변수에 저장해요!

3. 1번에서 소환한 아머스탠드를 죽여요!

4. r이라는 변수에 값과 Max라는 변수의 값으로 나눠서 나온 나머지를 저장해요!

5. 출력!!


/scoreboard objectives add random dummy

이름이 'random'이고 명령어로만 올릴 수 있는 스코어보드를 생성.

dummy명령어로만 점수를 조작할 수 있음.


/summon minecraft:armor_stand ~ ~ ~ {Tags:["tester"]}

태그 'tester'를 가진 아머스탠드를 소환해요!

Tags:["tester"]태그 'tester'를 가진


/execute as @e[tag=tester] at @s store result score r random run data get entity @s UUID[0]

태그 'tester'를 가진 엔티티가 있다면.. 그 엔티티 기준으로.. 자가자신의 UUID[0]값을 r이라는 변수에 저장해요!

as
만약 <선택인자>가 있다면..
at
그 <선택인자> 기준으로..
store저장한다
UUID[0]<선택인자>에 UUID를 가져와요!


kill @e[tag=tester]

태그 'tester'를 가진 모든 엔티티를 죽여요!

@e[tag=tester]태그 'tester'를 가진 모든 엔티티를..

여기서 'tester' 태그를 가진 엔티티를 죽이는 이유는 UUID는 한 번 나오면 고정이기 때문에 죽이고 새로운 엔티티를 소환하여 새로운 UUID값을 가져와야 해요!



/scoreboard players operation r random %= Max random

random이라는 스코어보드의 Max라는 변수 값에서.. random이라는 스코어보드의 r이라는 변수 값을 나눈 나머지를 r의 저장한다.

A scoreboard name %= B scorebard name
scorebard name의 B값에서 scoreboard name의 A값을 나누고 생긴 나머지를 A의 저장


/title @a actionbar [{"score":{"objective":"random","name":"r"}}]

random이라는 스코어보드의 r이라는 이름을 가진 변수의 스코어보드 값을 액셕바의 출력


이제!

/scoreboard players add Max random N

N 대신 숫자를 넣으면 N-1이 최댓값이 되요!


예를 들어

/scoreboard players add Max random 5 라고 한다면

4가 최댓값이 되요! 네? 왜냐구..요..?

5나누기5의 나머지는...0이니깐요!

0 1 2 3 4 이렇게 나머지 값이 나와요!


3.난수 공식

후후.... 그냥 저희가... 랜덤을 뽑는 공식을 만드는겁니다...후후후

이름하여... 선형합동법...네? 이게 뭐냐구요??

Xj = Xj-1,...Xj-k

ㄴ..네?? 그만 하라구요..?

아니에요 할 수 있어ㅇ

녜... 짜지겠습니땅..


ㄱ..그래도 도전 한 번 정도는...ㅎㅎ



/scoreboard objectives add random dummy

으로 스코어보드 하나 만든 다음에!

scoreboard players set X random n

n이 높을 수록 숫자가 급격하게 봐껴요!


scoreboard players set A random n

n이 높을 수록 급격하게 봐껴요!


scoreboard players set B random n

n이 높을 수록 급격하게 봐껴요!


scoreboard players set Mod random n

n이 높을 수록 다양한 값이 나와요!


scoreboard players set Max random n

n-1이 최댓값이 되요!


추천 값

X = 13

A = 109

B = 2021

Mod = 32751 ~ 32791

Max = 100



다음 커맨드

마크에 갈증을 커맨드로 구현해보자!


질문은 댓글도 괜찮고!!

디스코드로 괜찮아요!!

상민#3372

2개의 댓글

김형원
2023.04.22

오 난수 공식은 저도 몰랐던거군요

yusin12
2023.04.22
@김형원

추천 값만 하고 어떡해 계산하는지 안올린...ㅠㅠ

뉴스 및 창작물
/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3

/files/thumbnails/839/895/003/262x150.crop.jpg?20241006021227

SRV레코드는 보안도메인이 아닙니다. [서버오픈시 필독]

물귀신

2024-10-05

4