Yarn: NoiseChunkGenerator应该位于net.minecraft.world.gen中

创建于 2021-02-13  ·  16评论  ·  资料来源: FabricMC/yarn

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会导致此崩溃。

bug discussion refactor toolchain

最有用的评论

我会提出相反的看法,因为无论哪种方式都可以修复行为,仅因为Mojang恰好使用了特定的包结构,就没有更好的映射优势。 尤其重要的是,您甚至不再需要Loader在开发人员运行时黑客中公开所有内容,Tiny Remapper可以在需要的地方直接进行操作。

所有16条评论

嗯,似乎来自谜团的包裹可见性指数已经停止工作了很长时间

我怀疑索引是否有效,但是命令行界面坏了。 需要检查。

我确实开始研究改进和修复映射验证器。 尝试摆脱这些问题将是很好的。 但是我们不能保证

原来检查映射从未中断。 就是这样打破了:
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

哦,那是很多东西。 我们可以采取不关心更好的映射的立场吗? 值得讨论

Imo我们将修复它。 但是我可能会将此任务打补丁以使其像javadoc一样工作(如果doclint错误,我们的javadoc不会失败)。 因此,我们可能可以捕获抛出的非法状态异常并仅显示错误消息,或者仅在不使用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内部映射的兼容性从来都不是目标。

如果像ScreenProjectileEntity等之类的类(高流量公共api类类)的确为他们的同伴保留了包私有的东西,我猜这两种方式都是因为mods会寻求开放访问权限般的性质。 但是在大多数其他情况下,我们会在这里看到,将它们保持在同一包装中会更有好处。

海事组织,我们应将包私人朋友放在同一包中。 在某些地方,这可能会导致较差的映射,但在行为上也更正确。

一些有趣的事情脱颖而出。 例如,在上面的消息中说ThrownEntity必须与ProjectileEntity位于同一程序包中,但是我不明白为什么。 尽管ThrownEntity在其lambda构造中使用了ProjectileEntity的一种受保护方法(javac afaik通常会为其生成桥接方法),即使jdk的lambda元工厂可以完全处理该方法。 只是提醒自己检查来自enigma的程序包可见性索引是否需要更新。

事实证明,只要有足够的脑筋,ProjectileEntity的构造函数都是私有包。 这就是为什么...
因此,可见性索引中的警告看起来都是有效的,例如javac不生成桥接方法时。 现在我们需要继续解决这些问题...

我会提出相反的看法,因为无论哪种方式都可以修复行为,仅因为Mojang恰好使用了特定的包结构,就没有更好的映射优势。 尤其重要的是,您甚至不再需要Loader在开发人员运行时黑客中公开所有内容,Tiny Remapper可以在需要的地方直接进行操作。

我同意Chocohead的观点,我不赞成只为了尊重Mojang的包结构而迁移类。 我们需要解决工具链中其他地方的问题

我会提出相反的看法,因为无论哪种方式都可以修复行为,仅因为Mojang恰好使用了特定的包结构,就没有更好的映射优势。 尤其重要的是,您甚至不再需要Loader在开发人员运行时黑客中公开所有内容,Tiny Remapper可以在需要的地方直接进行操作。

嗯,所以我们需要声明要改为解决访问问题,网址https://github.com/FabricMC/yarn/blob/629b96e84a8c7fcd44f87c63cbcf923000bfdf38/build.gradle#L826 -L830

织机重构建议很好,我们可以实际使用拆分织机来减少纱线和织机之间的重复代码

现在关闭这个。

对于想知道的人,解决方案始终是通过结构加载器运行命名的(纱线)映射的jar /字节码。 这包括从您的mods开发环境中调用数据生成器!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

asiekierka picture asiekierka  ·  3评论

ChloeDawn picture ChloeDawn  ·  5评论

Runemoro picture Runemoro  ·  3评论

Draylar picture Draylar  ·  6评论

Boundarybreaker picture Boundarybreaker  ·  3评论