java.lang.IllegalAccessError: class net.minecraft.world.gen.chunk.NoiseChunkGenerator tried to access protected method 'double net.minecraft.world.gen.StructureWeightSampler.getWeight(int, int, int)' (net.minecraft.world.gen.chunk.NoiseChunkGenerator and net.minecraft.world.gen.StructureWeightSampler are in unnamed module of loader 'app')
ํ์ฌ NoiseChunkGenerator
์ฉ ํจํค์ง๊ฐ ๋ ๋ซ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ฐ๋ฐ ํ๊ฒฝ์์ Minecraft๋ฅผ ์คํํ๋ฉด์ด ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค.
ํ , ์์๊ป๋ผ์ ํจํค์ง ๊ฐ์์ฑ ์ง์๊ฐ ์ค๋ซ๋์ ์๋์ ๋ฉ์ถ ๊ฒ ๊ฐ์ต๋๋ค.
์์ธ์ด ์๋ํ๋์ง ์์ฌ ์ค๋ฝ์ง๋ง ๋ช ๋ น ์ค ์ธํฐํ์ด์ค๊ฐ ์์๋์์ต๋๋ค. ํ์ธํด์ผํฉ๋๋ค.
๋งคํ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ฅผ ๊ฐ์ ํ๊ณ ์์ ํ๊ธฐ ์์ํ์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๊ณ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ณด์ฅ ํ ์ ์์ต๋๋ค
์ํ ๋งคํ์ด ๊นจ์ง์ง ์์ ๊ฒ์ผ๋ก ๋ฐํ์ก์ต๋๋ค. ๋ถ๋ฌ์ง ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/FabricMC/yarn/blame/21w06a/build.gradle#L396
์ค๊ฐ ์ฉ๊ธฐ๋ฅผ ์ฌ์ฉํด์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์ํ ๋งคํ์ 2 ๋ ์ ์ค๊ฐ ์ ๋ฐ์ดํธ ์ดํ๋ก ์๋ํ์ง ์์์ต๋๋ค!
ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ๋ณด์ญ์์ค.
ERROR: Must be in one package:
net/minecraft/client/gui/screen/ConnectScreen
net/minecraft/client/gui/screen/ConnectScreen$1
net/minecraft/client/gui/screen/CustomizeBuffetLevelScreen
net/minecraft/client/gui/screen/CustomizeBuffetLevelScreen$1
net/minecraft/client/gui/screen/CustomizeBuffetLevelScreen$BuffetBiomesListWidget
net/minecraft/client/gui/screen/CustomizeBuffetLevelScreen$BuffetBiomesListWidget$BuffetBiomeItem
net/minecraft/client/gui/screen/CustomizeFlatLevelScreen
net/minecraft/client/gui/screen/CustomizeFlatLevelScreen$1
net/minecraft/client/gui/screen/CustomizeFlatLevelScreen$SuperflatLayersListWidget
net/minecraft/client/gui/screen/CustomizeFlatLevelScreen$SuperflatLayersListWidget$SuperflatLayerItem
net/minecraft/client/gui/screen/DialogScreen
net/minecraft/client/gui/screen/DialogScreen$ChoiceButton
net/minecraft/client/gui/screen/PresetsScreen
net/minecraft/client/gui/screen/PresetsScreen$SuperflatPreset
net/minecraft/client/gui/screen/PresetsScreen$SuperflatPresetsListWidget
net/minecraft/client/gui/screen/PresetsScreen$SuperflatPresetsListWidget$SuperflatPresetEntry
net/minecraft/client/gui/screen/Screen
net/minecraft/client/gui/screen/option/LanguageOptionsScreen
net/minecraft/client/gui/screen/option/LanguageOptionsScreen$LanguageSelectionListWidget
net/minecraft/client/gui/screen/option/LanguageOptionsScreen$LanguageSelectionListWidget$LanguageEntry
net/minecraft/client/gui/screen/option/VideoOptionsScreen
ERROR: Must be in one package:
net/minecraft/world/gen/feature/DripstoneClusterFeature
net/minecraft/world/gen/feature/LargeDripstoneFeature
net/minecraft/world/gen/feature/LargeDripstoneFeature$1
net/minecraft/world/gen/feature/LargeDripstoneFeature$DripstoneGenerator
net/minecraft/world/gen/feature/LargeDripstoneFeature$WindModifier
net/minecraft/world/gen/feature/SmallDripstoneFeature
net/minecraft/world/gen/feature/util/DripstoneHelper
ERROR: Must be in one package:
net/minecraft/client/util/math/AffineTransformation
net/minecraft/client/util/math/Vector4f
net/minecraft/util/math/DirectionTransformation
net/minecraft/util/math/DirectionTransformation$1
net/minecraft/util/math/Matrix3f
net/minecraft/util/math/Matrix4f
net/minecraft/util/math/Vec3f
ERROR: Must be in one package:
net/minecraft/util/dynamic/RegistryElementCodec
net/minecraft/util/dynamic/RegistryOps
net/minecraft/util/dynamic/RegistryOps$1
net/minecraft/util/dynamic/RegistryOps$EntryLoader
net/minecraft/util/dynamic/RegistryOps$EntryLoader$1
net/minecraft/util/dynamic/RegistryOps$EntryLoader$Impl
net/minecraft/util/dynamic/RegistryOps$ValueHolder
net/minecraft/util/dynamic/RegistryReadingOps
net/minecraft/util/registry/RegistryLookupCodec
ERROR: Must be in one package:
net/minecraft/world/gen/AquiferSampler
net/minecraft/world/gen/StructureWeightSampler
net/minecraft/world/gen/chunk/ChunkGeneratorSettings
net/minecraft/world/gen/chunk/NoiseChunkGenerator
ERROR: Must be in one package:
net/minecraft/world/chunk/EntityChunkDataAccess
net/minecraft/world/storage/RegionBasedStorage
net/minecraft/world/storage/SerializingRegionBasedStorage
net/minecraft/world/storage/StorageIoWorker
net/minecraft/world/storage/StorageIoWorker$Priority
net/minecraft/world/storage/StorageIoWorker$Result
net/minecraft/world/storage/VersionedChunkStorage
ERROR: Must be in one package:
net/minecraft/entity/EyeOfEnderEntity
net/minecraft/entity/projectile/ExplosiveProjectileEntity
net/minecraft/entity/projectile/FireworkRocketEntity
net/minecraft/entity/projectile/FishingBobberEntity
net/minecraft/entity/projectile/FishingBobberEntity$1
net/minecraft/entity/projectile/FishingBobberEntity$PositionType
net/minecraft/entity/projectile/FishingBobberEntity$State
net/minecraft/entity/projectile/LlamaSpitEntity
net/minecraft/entity/projectile/PersistentProjectileEntity
net/minecraft/entity/projectile/PersistentProjectileEntity$PickupPermission
net/minecraft/entity/projectile/ProjectileEntity
net/minecraft/entity/projectile/ShulkerBulletEntity
net/minecraft/entity/projectile/thrown/ThrownEntity
ERROR: Must be in one package:
net/minecraft/client/Keyboard
net/minecraft/client/Keyboard$1
net/minecraft/client/MinecraftClient
net/minecraft/client/MinecraftClient$1
net/minecraft/client/MinecraftClient$IntegratedResourceManager
net/minecraft/client/MinecraftClient$WorldLoadAction
net/minecraft/client/Mouse
net/minecraft/client/option/FullscreenOption
net/minecraft/client/option/Option
net/minecraft/client/option/Option$1
ERROR: Must be in one package:
net/minecraft/entity/ai/brain/task/AdmireItemTask
net/minecraft/entity/ai/brain/task/HuntFinishTask
net/minecraft/entity/ai/brain/task/HuntHoglinTask
net/minecraft/entity/ai/brain/task/RemoveOffHandItemTask
net/minecraft/entity/mob/AbstractPiglinEntity
net/minecraft/entity/mob/PiglinBrain
net/minecraft/entity/mob/PiglinBruteBrain
net/minecraft/entity/mob/PiglinBruteEntity
net/minecraft/entity/mob/PiglinEntity
ERROR: Must be in one package:
net/minecraft/client/gui/screen/world/CreateWorldScreen
net/minecraft/client/gui/screen/world/CreateWorldScreen$1
net/minecraft/client/gui/screen/world/CreateWorldScreen$Mode
net/minecraft/client/gui/screen/world/CreateWorldScreen$WorldCreationException
net/minecraft/client/gui/screen/world/MoreOptionsDialog
net/minecraft/client/world/GeneratorType
net/minecraft/client/world/GeneratorType$1
net/minecraft/client/world/GeneratorType$2
net/minecraft/client/world/GeneratorType$3
net/minecraft/client/world/GeneratorType$4
net/minecraft/client/world/GeneratorType$5
net/minecraft/client/world/GeneratorType$6
net/minecraft/client/world/GeneratorType$7
net/minecraft/client/world/GeneratorType$8
net/minecraft/client/world/GeneratorType$ScreenProvider
ERROR: Must be in one package:
net/minecraft/client/model/ModelCuboidData
net/minecraft/client/model/ModelPartBuilder
net/minecraft/client/util/math/Dilation
ERROR: Must be in one package:
net/minecraft/screen/ScreenHandler
net/minecraft/screen/slot/Slot
ERROR: Must be in one package:
net/minecraft/screen/AbstractFurnaceScreenHandler
net/minecraft/screen/slot/FurnaceFuelSlot
์, ๊ฝค ๋ง์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ ๋์ ๋งคํ์ ์ํด ์ ๊ฒฝ ์ฐ์ง ์๋ ์ ์ฅ์ ์ทจํ ์ ์์ต๋๊น? ๋ ผ์ ํ ๊ฐ์น๊ฐ์๋
์ด๋ชจ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ์น ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์๋ง๋์ด ์์ ์ javadoc์ฒ๋ผ ์๋ํ๋๋ก ํจ์น ํ ๊ฒ์ด๋ค. (์ฐ๋ฆฌ์ javadoc์ doclint ์ค๋ฅ๊ฐ ์์ด๋ ์คํจํ์ง ์๋๋ค). ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์๋ง๋ ์๋ชป๋ ์ํ ์์ธ๊ฐ ๋์ ธ์ง ๊ฒ์ ์ก์์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ธ์ํ๊ฑฐ๋, ci์ ์์ง ์์ ๋๋ง ์คํจ ํ ์ ์์ต๋๋ค.
๊ด๋ จ ์ค ๋ํซ :
ERROR: Must be in one package:
net/minecraft/world/gen/AquiferSampler
net/minecraft/world/gen/StructureWeightSampler
net/minecraft/world/gen/chunk/ChunkGeneratorSettings
net/minecraft/world/gen/chunk/NoiseChunkGenerator
๋์ด์ผ ๋ณด๋ฉด, ์ผ๋ถ๋ ํจํค์ง๋ฅผ ๋น๊ณต๊ฐ๋ก ๋๊ฑฐ๋ ๋ณดํธํ๋ ๊ฒ๋ณด๋ค ๋ ธ์ถํ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค.
https://github.com/FabricMC/yarn/issues/128#issuecomment -254043872์์ :
ํํธ์ด์ง๋ง Mojang์ ๋ด๋ถ ๋งคํ๊ณผ์ ํธํ์ฑ์ ๊ฒฐ์ฝ ๋ชฉํ๊ฐ ์๋๋๋ค.
Screen
, ProjectileEntity
๋ฑ๊ณผ ๊ฐ์ ํด๋์ค (๋์ ํธ๋ํฝ์ ๊ณต์ฉ API ์ ์ฌ ํด๋์ค)์ ๋๋ฃ๋ฅผ ์ํด ์์ฝ ๋ ํจํค์ง ๋น๊ณต๊ฐ ํญ๋ชฉ์ด์๋ ๊ฒฝ์ฐ, ์ด๋ ์ชฝ์ด๋ ๋ชจ๋๊ฐ ์ก์ธ์ค๋ฅผ ์ด๋ ค๊ณ ํ ๊ฒ์
๋๋ค. -์์ฐ์ฒ๋ผ. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ๋ณผ ์์๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋์ผํ ํจํค์ง์ ๋ณด๊ดํ๋ ๊ฒ์ด ๋ ์ ์ตํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค.
IMO ์ฐ๋ฆฌ๋ ํจํค์ง-๋น๊ณต๊ฐ ์น๊ตฌ๋ฅผ ๊ฐ์ ํจํค์ง์ ํจ๊ป ๋ณด๊ดํด์ผํฉ๋๋ค. ์ผ๋ถ ์ง์ญ์์๋ ๋งคํ์ด ๋ ๋๋น ์ง ์ ์์ง๋ง ํ๋ ์ธก๋ฉด์์๋ ๋ ์ ํํฉ๋๋ค.
๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์ ์ด ๋๋๋ฌ์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ๋ฉ์์ง์์ ThrownEntity๋ ProjectileEntity์ ๋์ผํ ํจํค์ง์ ์์ด์ผํ์ง๋ง ๊ทธ ์ด์ ๋ ์ ์ ์์ต๋๋ค. ThrownEntity๋ jdk์ ๋๋ค ๋ฉํ ํฉํ ๋ฆฌ๊ฐ ์์ ํ ์ฒ๋ฆฌ ํ ์ โโ์๋๋ผ๋ ๋๋ค ๊ตฌ์ฑ (์ผ๋ฐ์ ์ผ๋ก javac afaik์ด ๋ธ๋ฆฌ์ง ๋ฉ์๋๋ฅผ ์์ฑ ํจ)์์ ProjectileEntity์ ๋ณดํธ ๋ ๋ฉ์๋ ํ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์๊ป๋ผ์ ํจํค์ง ๊ฐ์์ฑ ์์ธ์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ์ง ํ์ธํ๋๋ก ๋ฏธ๋ฆฌ ์๋ฆผ์ ๋์ญ์์ค.
์ถฉ๋ถํ ์๊ฐํ๋ฉด ProjectileEntity์ ์์ฑ์๋ ํจํค์ง ๋น๊ณต๊ฐ์
๋๋ค. ๊ทธ๋์ ...
๋ฐ๋ผ์ ๊ฐ์์ฑ ์ธ๋ฑ์ค์ ๊ฒฝ๊ณ ๋ javac๊ฐ ๋ธ๋ฆฌ์ง ๋ฉ์๋๋ฅผ ์์ฑํ์ง ์๋ ๊ฒฝ์ฐ์ ๊ฐ์ด ๋ชจ๋ ์ ํจํ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ํด์ผํฉ๋๋ค ...
Mojang์ด ํน์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋งคํ์ ์ด์ ์ด ์์ต๋๋ค. ์ ์ด๋ Loader๊ฐ ๋ ์ด์ ๊ฐ๋ฐ ๋ฐํ์ ํดํน์์ ๋ชจ๋ ๊ฒ์ ๊ณต๊ฐ ํ ํ์๊ฐ ์๋ค๋ ์ ์ Tiny Remapper๊ฐ ํ์ํ ๊ณณ์์ ์ง์ ์ํ ํ ์ ์์ต๋๋ค.
๋๋ Chocohead์ ๋์ํ๋ฉฐ Mojang์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์กด์คํ๊ธฐ ์ํด ์์ ์ ์ฎ๊ธฐ๋ ๊ฒ์ ์ ํธํ์ง ์์ต๋๋ค. ํด์ฒด์ธ์ ๋ค๋ฅธ ๊ณณ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํฉ๋๋ค.
Mojang์ด ํน์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋งคํ์ ์ด์ ์ด ์์ต๋๋ค. ์ ์ด๋ Loader๊ฐ ๋ ์ด์ ๊ฐ๋ฐ ๋ฐํ์ ํดํน์์ ๋ชจ๋ ๊ฒ์ ๊ณต๊ฐ ํ ํ์๊ฐ ์๋ค๋ ์ ์ Tiny Remapper๊ฐ ํ์ํ ๊ณณ์์ ์ง์ ์ํ ํ ์ ์์ต๋๋ค.
ํ , ๊ทธ๋์ ์ฐ๋ฆฌ๋ https://github.com/FabricMC/fabric-loom/blob/57c9a8f3209121f22e84b8b01b64f1093256f1d3/src/main/java/net/fabricmc/loom/configuration/providers/minecraft ์์ ๋์ ์ก์ธ์ค๋ฅผ ์์ ํ๊ณ ์ถ๋ค๊ณ ์ ์ธํด์ผํฉ๋๋ค. https://github.com/FabricMC/yarn/blob/629b96e84a8c7fcd44f87c63cbcf923000bfdf38/build.gradle#L826 -L830
์ง๊ธฐ ๋ฆฌ ํฉํฐ ์ ์์ ์ค๊ณผ ์ง๊ธฐ ์ฌ์ด์ ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ถํ ์ง๊ธฐ๋ฅผ ์ค์ ๋ก ํ์ฉํ ์ ์๋ค๋ ์ ์์ ์ข์ต๋๋ค.
์ง๊ธ ์ข ๋ฃํฉ๋๋ค.
๊ถ๊ธํ ์ฌ๋๋ค์ ์ํด ํด๊ฒฐ์ฑ ์ ํญ์ ํจ๋ธ๋ฆญ ๋ก๋๋ฅผ ํตํด ๋ช ๋ช ๋ (yarn) ๋งคํ ๋ jar / ๋ฐ์ดํธ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ชจ๋์ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์์ฑ๊ธฐ๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Mojang์ด ํน์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ ๋์ ๋งคํ์ ์ด์ ์ด ์์ต๋๋ค. ์ ์ด๋ Loader๊ฐ ๋ ์ด์ ๊ฐ๋ฐ ๋ฐํ์ ํดํน์์ ๋ชจ๋ ๊ฒ์ ๊ณต๊ฐ ํ ํ์๊ฐ ์๋ค๋ ์ ์ Tiny Remapper๊ฐ ํ์ํ ๊ณณ์์ ์ง์ ์ํ ํ ์ ์์ต๋๋ค.