Yarn: NoiseChunkGenerator debe estar en net.minecraft.world.gen

Creado en 13 feb. 2021  ·  16Comentarios  ·  Fuente: 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')

Si bien creo que el paquete de NoiseChunkGenerator es mejor actualmente, ejecutar Minecraft en un entorno de desarrollo provoca este bloqueo.

bug discussion refactor toolchain

Comentario más útil

Yo diría lo contrario, dado que arreglamos el comportamiento de cualquier manera, no hay ventajas para mapeos peores solo porque Mojang usa una estructura de paquete en particular. No menos importante que ya no necesitas que Loader haga público todo en el tiempo de ejecución del desarrollador, Tiny Remapper puede hacerlo directamente en los lugares donde se necesita.

Todos 16 comentarios

Hmm, parece que el índice de visibilidad del paquete de enigma ha dejado de funcionar durante mucho tiempo.

Dudo que el índice funcione, pero la interfaz de línea de comandos se rompió. Necesito comprobar.

Empecé a buscar mejorar y corregir el validador de asignaciones. Sería bueno intentar deshacerse de estos problemas. Pero no podemos garantizarlo.

Resulta que las asignaciones de cheques nunca se rompieron. Fue esto lo que se rompió:
https://github.com/FabricMC/yarn/blame/21w06a/build.gradle#L396
Debería estar usando un tarro intermediario

¡Y estas asignaciones de verificación nunca funcionaron desde la actualización intermedia hace 2 años!



Mira los resultados actuales:

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

Ay, eso es bastante. ¿Podríamos simplemente adoptar la postura de no preocuparnos a favor de mejores mapeos? Vale la pena discutir

Imo lo arreglaremos. Pero probablemente parchearé esta tarea para que funcione como javadoc (nuestro javadoc no falla si el doclint falla). Entonces, probablemente podamos detectar esa excepción de estado ilegal lanzada y simplemente imprimir el mensaje de error, o solo fallar cuando no estamos en ci

Fragmento 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

Mirando hacia atrás, probablemente sea mejor exponer algunas cosas que dejar el paquete privado o protegido.

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

Son una pista, claro, pero la compatibilidad con las asignaciones internas de Mojang nunca fue un objetivo.

Si clases como Screen , ProjectileEntity etc. (clases públicas de alto tráfico tipo api) tienen paquetes de cosas privadas reservadas para sus compañeros, supongo que de cualquier manera los mods buscarán abrir el acceso porque su api -como la naturaleza. Pero en la mayoría de los otros casos que vemos aquí, diría que mantenerlos en el mismo paquete es de alguna manera más beneficioso.

En mi opinión, deberíamos mantener juntos a los amigos privados del paquete en los mismos paquetes. Puede resultar en asignaciones peores en algunos lugares, pero también son más correctas en cuanto al comportamiento.

Destacan algunas cosas interesantes. Por ejemplo, en ese mensaje anterior dice que ThrownEntity debe estar en el mismo paquete que ProjectileEntity, pero no veo por qué; ThrownEntity, sin embargo, usa un método protegido de ProjectileEntity en su construcción lambda (para la que javac afaik generalmente genera un método puente) incluso si la fábrica de metadatos lambda de jdk puede manejar eso totalmente. Solo puse un recordatorio para que verifique si el índice de visibilidad del paquete de enigma necesita una actualización.

Resulta que eso es suficiente, el constructor de ProjectileEntity es un paquete privado. Es por eso...
Entonces, las advertencias del índice de visibilidad parecen ser todas válidas, como cuando javac no genera métodos de puente. Ahora tenemos que seguir adelante para solucionar esos problemas ...

Yo diría lo contrario, dado que arreglamos el comportamiento de cualquier manera, no hay ventajas para mapeos peores solo porque Mojang usa una estructura de paquete en particular. No menos importante que ya no necesitas que Loader haga público todo en el tiempo de ejecución del desarrollador, Tiny Remapper puede hacerlo directamente en los lugares donde se necesita.

Estoy de acuerdo con Chocohead, no estoy a favor de cambiar las clases solo para respetar la estructura del paquete de Mojang. Necesitamos solucionar los problemas en otras partes de la cadena de herramientas.

Yo diría lo contrario, dado que arreglamos el comportamiento de cualquier manera, no hay ventajas para mapeos peores solo porque Mojang usa una estructura de paquete en particular. No menos importante que ya no necesitas que Loader haga público todo en el tiempo de ejecución del desarrollador, Tiny Remapper puede hacerlo directamente en los lugares donde se necesita.

Hmm, entonces necesitamos declarar que queremos arreglar el acceso en su lugar en https://github.com/FabricMC/fabric-loom/blob/57c9a8f3209121f22e84b8b01b64f1093256f1d3/src/main/java/net/fabricmc/loom/configuration/providers /MinecraftMappedProvider.java#L129 -L136 y https://github.com/FabricMC/yarn/blob/629b96e84a8c7fcd44f87c63cbcf923000bfdf38/build.gradle#L826 -L830

La propuesta de refactorización del telar es buena, ya que podemos utilizar el telar dividido para reducir el código duplicado entre el hilo y el telar.

Cerrando esto ahora.

Para las personas que se preguntan, la solución es siempre ejecutar el código de byte / jar mapeado con nombre (hilo) a través del cargador de tela. ¡Esto incluye llamar a los generadores de datos desde el entorno de desarrollo de tus mods!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

Runemoro picture Runemoro  ·  3Comentarios

haykam821 picture haykam821  ·  4Comentarios

Awakened-Redstone picture Awakened-Redstone  ·  4Comentarios

Boundarybreaker picture Boundarybreaker  ·  3Comentarios

liach picture liach  ·  4Comentarios