Yarn: NoiseChunkGenerator deve estar em net.minecraft.world.gen

Criado em 13 fev. 2021  ·  16Comentários  ·  Fonte: 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')

Embora eu ache que o pacote para NoiseChunkGenerator atualmente seja melhor, executar o Minecraft em um ambiente de desenvolvimento causa esse travamento.

bug discussion refactor toolchain

Comentários muito úteis

Eu argumentaria o oposto, já que corrigimos o comportamento de qualquer maneira, não há vantagem em mapeamentos piores só porque Mojang usa uma estrutura de pacote específica. Além disso, você nem precisa mais do Loader tornar tudo público no hack do tempo de execução do desenvolvedor, o Tiny Remapper pode fazer isso diretamente nos locais onde for necessário.

Todos 16 comentários

Hmm, parece que o índice de visibilidade do pacote do enigma parou de funcionar por muito tempo

Duvido que o índice funcione, mas a interface da linha de comando quebrou. Precisa verificar.

Comecei a procurar melhorar e consertar o validador de mapeamentos. Seria bom tentar se livrar desses problemas. Mas não podemos garantir isso

Acontece que os mapeamentos de verificação nunca foram quebrados. Foi isso que quebrou:
https://github.com/FabricMC/yarn/blame/21w06a/build.gradle#L396
Deve estar usando jar intermediário

E esses mapeamentos de verificação nunca funcionaram desde a atualização intermediária há 2 anos!



Veja os resultados atuais:

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

Ai, isso é bastante lá. Poderíamos apenas assumir a postura de não nos importar em favor de melhores mapeamentos? Vale a pena discutir

Imo, vamos apenas consertar isso. Mas provavelmente irei corrigir essa tarefa para funcionar como javadoc (nosso javadoc não falha se o doclint apresentar erros). Então, provavelmente podemos pegar aquela exceção de estado ilegal lançada e apenas imprimir a mensagem de erro, ou apenas falhar quando não estivermos em ci

Snippet relacionado:

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

Olhando para trás, algumas coisas provavelmente deveriam ser expostas do que deixar o pacote privado ou protegido.

De https://github.com/FabricMC/yarn/issues/128#issuecomment -254043872:

Eles são uma dica, com certeza, mas a compatibilidade com os mapeamentos internos de Mojang nunca foi um objetivo.

Se classes como Screen , ProjectileEntity etc (classes semelhantes a APIs públicas de alto tráfego) têm pacotes privados reservados para seus pares, acho que de qualquer forma os mods buscarão abrir o acesso porque sua API -como a natureza. Mas na maioria dos outros casos que vemos aqui, eu diria que mantê-los no mesmo pacote é de alguma forma mais benéfico.

IMO, devemos manter os amigos privados do pacote juntos nos mesmos pacotes. Isso pode resultar em mapeamentos piores em alguns lugares, mas eles também são mais corretos em termos de comportamento.

Algumas coisas interessantes se destacam. Por exemplo, na mensagem acima diz que ThrownEntity deve estar no mesmo pacote que ProjectileEntity, mas não vejo por quê; ThrownEntity, entretanto, usa um método protegido de ProjectileEntity em sua construção lambda (para a qual javac afaik geralmente gera um método de ponte), mesmo se a meta-fábrica lambda do jdk puder lidar totalmente com isso. Apenas colocando um lembrete para mim mesmo para verificar se o índice de visibilidade do pacote do enigma precisa de uma atualização.

Acontece que o cérebro é suficiente, o construtor de ProjectileEntity é um pacote privado. É por isso...
Portanto, os avisos do índice de visibilidade parecem ser todos válidos, como quando o javac não gera métodos de ponte. Agora precisamos seguir em frente para corrigir esses problemas ...

Eu argumentaria o oposto, já que corrigimos o comportamento de qualquer maneira, não há vantagem em mapeamentos piores só porque Mojang usa uma estrutura de pacote específica. Além disso, você nem precisa mais do Loader tornar tudo público no hack do tempo de execução do desenvolvedor, o Tiny Remapper pode fazer isso diretamente nos locais onde for necessário.

Eu concordo com Chocohead, não sou a favor de mudar as classes apenas para respeitar a estrutura de pacotes do Mojang. Precisamos corrigir os problemas em outras partes do conjunto de ferramentas

Eu argumentaria o oposto, já que corrigimos o comportamento de qualquer maneira, não há vantagem em mapeamentos piores só porque Mojang usa uma estrutura de pacote específica. Além disso, você nem precisa mais do Loader tornar tudo público no hack do tempo de execução do desenvolvedor, o Tiny Remapper pode fazer isso diretamente nos locais onde for necessário.

Hmm, então precisamos declarar que queremos corrigir o acesso em https://github.com/FabricMC/fabric-loom/blob/57c9a8f3209121f22e84b8b01b64f1093256f1d3/src/main/java/net/fabricmc/loom/configuration/providers/minecraft /MinecraftMappedProvider.java#L129 -L136 e https://github.com/FabricMC/yarn/blob/629b96e84a8c7fcd44f87c63cbcf923000bfdf38/build.gradle#L826 -L830

A proposta de refatoração do tear é boa, pois podemos realmente utilizar o tear dividido para reduzir o código duplicado entre o fio e o tear

Fechando isso agora.

Para as pessoas que estão se perguntando, a solução é sempre executar o jar / bytecode mapeado nomeado (yarn) por meio do carregador de malha. Isso inclui a chamada de geradores de dados do env env de seus mods!

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

quat1024 picture quat1024  ·  6Comentários

Bixilon picture Bixilon  ·  5Comentários

asiekierka picture asiekierka  ·  3Comentários

Sollace picture Sollace  ·  5Comentários

ChloeDawn picture ChloeDawn  ·  6Comentários