Yarn: NoiseChunkGenerator должен находиться в net.minecraft.world.gen

Созданный на 13 февр. 2021  ·  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 Комментарий

Хм, похоже индекс видимости пакетов от enigma давно перестал работать

Сомневаюсь, что индекс работает, но интерфейс командной строки сломался. Нужно проверить.

Я начал искать улучшения и исправления валидатора сопоставлений. Было бы неплохо попытаться избавиться от этих проблем. Но мы не можем этого гарантировать

Оказывается, сопоставления чеков никогда не нарушались. Вот что сломалось:
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-классы с высоким трафиком) действительно имеют частный пакет, зарезервированный для своих сверстников, я думаю, что в любом случае моды будут стремиться открыть доступ, потому что их api -подобная природа. Но в большинстве других случаев, которые мы видим здесь, я бы сказал, что хранение их в одном пакете как-то более выгодно.

ИМО, мы должны держать друзей по пакету вместе в одних и тех же пакетах. В некоторых местах это может привести к худшим сопоставлениям, но они также более правильны с точки зрения поведения.

Обращает на себя внимание несколько интересных моментов. Например, в этом сообщении выше говорится, что ThrownEntity должен быть в том же пакете, что и ProjectileEntity, но я не понимаю, почему; Однако ThrownEntity использует один защищенный метод от ProjectileEntity в своей лямбда-конструкции (для которой javac afaik обычно генерирует мост-метод), даже если метафабрика лямбда-выражения jdk может полностью справиться с этим. Просто напомню себе, что нужно проверить, нужно ли обновлять индекс видимости пакета из Enigma.

Конструктор 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 /MinecraftMappedProvider.java#L129 -L136 и https://github.com/FabricMC/yarn/blob/629b96e84a8c7fcd44f87c63cbcf923000bfdf38/build.gradle#L826 -L830

Предложение по рефакторингу ткацкого станка хороша тем, что мы можем использовать разделенный ткацкий станок, чтобы уменьшить дублирование кода между пряжей и ткацким станком.

Закрываю это сейчас.

Для людей, задающихся вопросом, решение всегда состоит в том, чтобы запускать сопоставленный именованный (пряжа) jar / байт-код через загрузчик ткани. Это включает в себя вызов генераторов данных из среды разработки ваших модов!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

quat1024 picture quat1024  ·  6Комментарии

Sollace picture Sollace  ·  5Комментарии

haykam821 picture haykam821  ·  4Комментарии

Boundarybreaker picture Boundarybreaker  ·  3Комментарии

ChloeDawn picture ChloeDawn  ·  6Комментарии