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
痛い、それはそこにかなりたくさんあります。 より良いマッピングを支持することを気にしないというスタンスを取ることができますか? 議論する価値がある
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の内部マッピングとの互換性は決して目標ではありませんでした。
Screen
、 ProjectileEntity
などのクラス(トラフィックの多いパブリックAPIのようなクラス)にピア用に予約されたパッケージプライベートのものがある場合、どちらの方法でも、MODはAPIのためにアクセスを開こうとします。 -自然のように。 しかし、ここで見られる他のほとんどの場合、それらを同じパッケージに保持する方が何らかの形でより有益だと思います。
IMOは、パッケージとプライベートの友達を同じパッケージにまとめる必要があります。 一部の場所ではマッピングが悪化する可能性がありますが、動作に関してはより正確です。
いくつかの興味深いことが際立っています。 たとえば、上記のメッセージでは、ThrownEntityはProjectileEntityと同じパッケージに含まれている必要があると書かれていますが、その理由はわかりません。 ただし、ThrownEntityは、jdkのラムダメタファクトリが完全に処理できる場合でも、ラムダ構築でProjectileEntityからの1つの保護されたメソッド(javac afaikは通常ブリッジメソッドを生成します)を使用します。 enigmaからのパッケージ可視性インデックスを更新する必要があるかどうかを確認するために自分自身にリマインダーを置くだけです。
その頭脳が十分であることが判明しました。ProjectileEntityのコンストラクターはパッケージプライベートです。 それが理由です...
したがって、javacがブリッジメソッドを生成しない場合など、可視性インデックスからの警告はすべて有効であるように見えます。 次に、これらの問題を修正する必要があります...
Mojangがたまたま特定のパッケージ構造を使用しているという理由だけで、どちらの方法でも動作を修正しても、マッピングが悪化してもメリットがないことを考えると、私は反対のことを主張します。 特に、ローダーが開発ランタイムハックですべてを公開する必要がなくなったことは言うまでもありません。TinyRemapperは、必要な場所で直接それを行うことができます。
私はChocoheadに同意します。モジャンのパッケージ構造を尊重するためだけに、クラスを移動することには賛成しません。 ツールチェーンの他の場所で問題を修正する必要があります
Mojangがたまたま特定のパッケージ構造を使用しているという理由だけで、どちらの方法でも動作を修正しても、マッピングが悪化してもメリットがないことを考えると、私は反対のことを主張します。 特に、ローダーが開発ランタイムハックですべてを公開する必要がなくなったことは言うまでもありません。TinyRemapperは、必要な場所で直接それを行うことができます。
うーん、 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
織機リファクタリングの提案は、実際に分割織機を利用して、糸と織機の間の重複コードを減らすことができるという点で優れています
今これを閉じます。
疑問に思っている人のために、解決策は常に、名前付き(糸)マップされたjar /バイトコードをファブリックローダーを介して実行することです。 これには、modの開発環境からのデータジェネレーターの呼び出しが含まれます。
最も参考になるコメント
Mojangがたまたま特定のパッケージ構造を使用しているという理由だけで、どちらの方法でも動作を修正しても、マッピングが悪化してもメリットがないことを考えると、私は反対のことを主張します。 特に、ローダーが開発ランタイムハックですべてを公開する必要がなくなったことは言うまでもありません。TinyRemapperは、必要な場所で直接それを行うことができます。