Yarn: 5๊ฐœ์˜ getEntities ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 06์›” 22์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: FabricMC/yarn

1.16-rc1+build.12 ํ˜„์žฌ ServerWorld getEntities ์— ๋Œ€ํ•ด 5๊ฐ€์ง€(!) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • EntityView#getEntities(<strong i="10">@Nullable</strong> Entity, Box) ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ์ƒ์ž์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • EntityView#getEntities(<strong i="14">@Nullable</strong> Entity, Box, Predicate) ๋Š” ์ˆ ์–ด์™€๋„ ์ผ์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ํ•ญ๋ชฉ์„ ์ œ์™ธ ํ•˜๊ณ  ์ƒ์ž์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ServerWorld#getEntities(<strong i="18">@Nullable</strong> EntityType, Predicate) ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ์œ ํ˜• ๋ฐ ์ˆ ์–ด์™€ ์ผ์น˜ํ•˜๋Š” ์ „ ์„ธ๊ณ„์˜ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • World#getEntities(<strong i="22">@Nullable</strong> EntityType, Box, Predicate) ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ์œ ํ˜• ๋ฐ ์ˆ ์–ด์™€ ์ผ์น˜ ํ•˜๋Š” ์ƒ์ž์˜ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • EntityView#getEntities(Class, Box, Predicate) ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ํด๋ž˜์Šค ๋ฐ ์ˆ ์–ด์™€ ์ผ์น˜ ํ•˜๋Š” ์ƒ์ž์˜ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์™œ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?

  • ๊ทธ ์ค‘ 2๊ฐœ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ์ œ์™ธ ํ•˜๊ณ  3๊ฐœ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค . IMO ์ด๊ฒƒ์€ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.
  • null ๋ฅผ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ ๊ฐœ์˜ ์ธ์ˆ˜ ํ˜•์‹์„ ํ˜ธ์ถœํ•  ๋•Œ ํ˜ธ์ถœ์ด ๋ชจํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ ์‚ฌ์ดํŠธ์—์„œ null ๋ฅผ ์บ์ŠคํŒ…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    image
    (^ IntelliJ์˜ ์กฐ์–ธ์„ ๋ฐ›์•„ Class ์บ์ŠคํŒ…ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„์— NPE๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. btw, ๊ทธ ๋ฐฉ๋ฒ•์€ null-safeํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.)

์ œ์•ˆ ๋œ ํ•ด๋ฒ•:

  • ๋ชจํ˜ธํ•œ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ง€์šฐ๋ ค๋ฉด:

    • ๋ฐ›์•„ ๋‘ ๋ฐฉ๋ฒ• ๋ฐ”๊พธ๊ธฐ Entity ํ•˜๋Š” ์ œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ์„œ getEntitiesExcept .

    • getEntities(Class, ...) ์„ getEntitiesOfClass ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  • ์–ด์ฉŒ๋ฉดํ•˜์ง€ ์•Š๋Š” ํ•˜๋‚˜์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝ Box , ๋‚œ ๋ชฐ๋ผ,๋กœ๋ฅผ getAllEntities .
  • ์ด๋Ÿฌํ•œ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ๋ฅผ WorldChunk ๋ฉ”์„œ๋“œ์— ์ „ํŒŒํ•˜์‹ญ์‹œ์˜ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์œ„์ž„๋ฉ๋‹ˆ๋‹ค.
discussion refactor

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๊ทธ๋ž˜๋„ ๊ทธ๊ฒƒ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ์ „๋‹ฌํ•œ ์กฐ๊ฑด์„ ์ œ์™ธํ•˜๊ณ  ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜ Entity ํ˜•์‹์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ˜ธ์ถœ์€ null ๋˜๋Š” this ํ•ฉ๋‹ˆ๋‹ค. getEntitiesExcept(this, ... ์ž˜ ์Šค์บ”๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ ์ด๋ฏธ Yarn์—์„œ except ์ž…๋‹ˆ๋‹ค.)

๋ชจ๋“  8 ๋Œ“๊ธ€

getEntitiesExcept๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ณต๋œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๊ทธ๊ฒƒ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ์ „๋‹ฌํ•œ ์กฐ๊ฑด์„ ์ œ์™ธํ•˜๊ณ  ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜ Entity ํ˜•์‹์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํ˜ธ์ถœ์€ null ๋˜๋Š” this ํ•ฉ๋‹ˆ๋‹ค. getEntitiesExcept(this, ... ์ž˜ ์Šค์บ”๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์€ ์ด๋ฏธ Yarn์—์„œ except ์ž…๋‹ˆ๋‹ค.)

๋‹ค๋ฅธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ์šฉ๋„์™€ ์šฉ๋„๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์ง‘๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๋“ค์€ ๋ชจ๋‘ ๊ฐ™์€ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„ธ๊ณ„์—์„œ ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ์ƒ์ž์— ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰์ž ์—”ํ„ฐํ‹ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ ์ˆ ์–ด๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ง€๋งŒ getEntities ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋ชจํ˜ธํ•œ ํ†ตํ™” ๋‚ด์šฉ์€ ๋งค์šฐ ์„ฑ๊ฐ€์‹œ๋‹ค.

๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด getEntitiesOf ์œ ํ˜•/ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ์ด๋ฆ„์„ ๋ฐ”๊ฟ”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—”ํ„ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•ญ๋ชฉ์˜ ์ด๋ฆ„์€ getSurroundingEntities ์ด๊ณ  ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ํ•ญ๋ชฉ์˜ ์ด๋ฆ„์€ getMatchingEntities ๋˜๋Š” getEntitiesByType

์ด๊ฒƒ์€ ์ •๋ง ์ €์ฃผ์ž…๋‹ˆ๋‹ค. getEntities(Type, Entity, Box, Predicate) ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋ณ€ํ˜•์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ Type์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์œ ํ˜•์œผ๋กœ, ์—”ํ„ฐํ‹ฐ๋Š” null ๋กœ ๊ธฐ๋ณธ ์„ค์ •๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒ์ž๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌดํ•œ๋Œ€๋กœ, ์ˆ ์–ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ญ์ƒ true๋กœ ์„ค์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด 5๊ฐ€์ง€ ๋ฐฉ๋ฒ•์˜ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•  ์ด์œ ๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰

๊ด€๋ จ ๋ฌธ์ œ

Draylar picture Draylar  ยท  6์ฝ”๋ฉ˜ํŠธ

Awakened-Redstone picture Awakened-Redstone  ยท  4์ฝ”๋ฉ˜ํŠธ

Runemoro picture Runemoro  ยท  3์ฝ”๋ฉ˜ํŠธ

Runemoro picture Runemoro  ยท  4์ฝ”๋ฉ˜ํŠธ

quat1024 picture quat1024  ยท  6์ฝ”๋ฉ˜ํŠธ