diff --git a/packages/bolt/tests/snapshots/bolt__parse_230__0.txt b/packages/bolt/tests/snapshots/bolt__parse_230__0.txt index 2cad11531..cee1632f6 100644 --- a/packages/bolt/tests/snapshots/bolt__parse_230__0.txt +++ b/packages/bolt/tests/snapshots/bolt__parse_230__0.txt @@ -1,6 +1,6 @@ macro foo: pass -#>ERROR Expected colon, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 200 other tokens but got literal 'foo'. +#>ERROR Expected colon, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 207 other tokens but got literal 'foo'. # line 3, column 7 # 2 | pass # 3 | as @p foo diff --git a/packages/bolt/tests/snapshots/bolt__parse_305__0.txt b/packages/bolt/tests/snapshots/bolt__parse_305__0.txt index 2e6c0f19b..f44d30d23 100644 --- a/packages/bolt/tests/snapshots/bolt__parse_305__0.txt +++ b/packages/bolt/tests/snapshots/bolt__parse_305__0.txt @@ -1,4 +1,4 @@ -#>ERROR Expected literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as', literal 'at' or 217 other tokens but got literal 'foo'. +#>ERROR Expected literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as', literal 'at' or 224 other tokens but got literal 'foo'. # line 1, column 11 # 1 | as @a run foo = "bar" # : ^^^ diff --git a/packages/bolt/tests/snapshots/bolt__parse_352__0.txt b/packages/bolt/tests/snapshots/bolt__parse_352__0.txt index 52b5523ab..6a7c4aa1d 100644 --- a/packages/bolt/tests/snapshots/bolt__parse_352__0.txt +++ b/packages/bolt/tests/snapshots/bolt__parse_352__0.txt @@ -1,6 +1,6 @@ macro hello thing=subcommand: pass -#>ERROR Expected assignment, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 219 other tokens but got literal 'print(123)'. +#>ERROR Expected assignment, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 226 other tokens but got literal 'print(123)'. # line 3, column 7 # 2 | pass # 3 | hello print(123) diff --git a/packages/bolt/tests/snapshots/bolt__parse_358__0.txt b/packages/bolt/tests/snapshots/bolt__parse_358__0.txt index 088932a24..8924809d2 100644 --- a/packages/bolt/tests/snapshots/bolt__parse_358__0.txt +++ b/packages/bolt/tests/snapshots/bolt__parse_358__0.txt @@ -1,4 +1,4 @@ -#>ERROR Expected literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as', literal 'at' or 217 other tokens but got literal '"not'. +#>ERROR Expected literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as', literal 'at' or 224 other tokens but got literal '"not'. # line 1, column 13 # 1 | execute run "not docstring" # : ^^^^ diff --git a/packages/bolt/tests/snapshots/bolt__parse_48__0.txt b/packages/bolt/tests/snapshots/bolt__parse_48__0.txt index eb0a94b6f..8649e50e4 100644 --- a/packages/bolt/tests/snapshots/bolt__parse_48__0.txt +++ b/packages/bolt/tests/snapshots/bolt__parse_48__0.txt @@ -1,5 +1,5 @@ 1 * 2 -#>ERROR Expected bracket '[', curly '{', decorator, docstring, ellipsis, false or 230 other tokens but got literal '*'. +#>ERROR Expected bracket '[', curly '{', decorator, docstring, ellipsis, false or 237 other tokens but got literal '*'. # line 2, column 1 # 1 | 1 * 2 # 2 | * 3 diff --git a/packages/bolt/tests/snapshots/bolt__parse_99__0.txt b/packages/bolt/tests/snapshots/bolt__parse_99__0.txt index 21acbb57f..28161eb2e 100644 --- a/packages/bolt/tests/snapshots/bolt__parse_99__0.txt +++ b/packages/bolt/tests/snapshots/bolt__parse_99__0.txt @@ -1,4 +1,4 @@ -#>ERROR Expected colon, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 200 other tokens but got literal 'for'. +#>ERROR Expected colon, literal 'advancement', literal 'align', literal 'anchored', literal 'append', literal 'as' or 207 other tokens but got literal 'for'. # line 1, column 7 # 1 | at @s for i in "foo": # : ^^^ diff --git a/packages/bolt/tests/snapshots/spec__prototypes__0.json b/packages/bolt/tests/snapshots/spec__prototypes__0.json index deadd15cc..3ee728484 100644 --- a/packages/bolt/tests/snapshots/spec__prototypes__0.json +++ b/packages/bolt/tests/snapshots/spec__prototypes__0.json @@ -19,6 +19,7 @@ "append:cat_variant_tag:name:content", "append:chat_type_tag:name:content", "append:chicken_variant_tag:name:content", + "append:configured_feature_tag:name:content", "append:cow_variant_tag:name:content", "append:damage_type_tag:name:content", "append:dialog_tag:name:content", @@ -33,6 +34,7 @@ "append:item_tag:name:content", "append:painting_variant_tag:name:content", "append:point_of_interest_type_tag:name:content", + "append:potion_tag:name:content", "append:timeline_tag:name:content", "append:trade_set_tag:name:content", "append:villager_trade_tag:name:content", @@ -98,10 +100,12 @@ "bossbar:set:id:value:value", "bossbar:set:id:visible:visible", "break", + "cat_sound_variant:name:content", "cat_variant:name:content", "cat_variant_tag:name:content", "chat_type:name:content", "chat_type_tag:name:content", + "chicken_sound_variant:name:content", "chicken_variant:name:content", "chicken_variant_tag:name:content", "class:name:bases:body", @@ -214,7 +218,9 @@ "clone:from:sourceDimension:begin:end:to:targetDimension:destination:strict:replace:force", "clone:from:sourceDimension:begin:end:to:targetDimension:destination:strict:replace:move", "clone:from:sourceDimension:begin:end:to:targetDimension:destination:strict:replace:normal", + "configured_feature_tag:name:content", "continue", + "cow_sound_variant:name:content", "cow_variant:name:content", "cow_variant_tag:name:content", "damage:target:amount", @@ -591,6 +597,7 @@ "execute:append:cat_variant_tag:name:content", "execute:append:chat_type_tag:name:content", "execute:append:chicken_variant_tag:name:content", + "execute:append:configured_feature_tag:name:content", "execute:append:cow_variant_tag:name:content", "execute:append:damage_type_tag:name:content", "execute:append:dialog_tag:name:content", @@ -605,6 +612,7 @@ "execute:append:item_tag:name:content", "execute:append:painting_variant_tag:name:content", "execute:append:point_of_interest_type_tag:name:content", + "execute:append:potion_tag:name:content", "execute:append:timeline_tag:name:content", "execute:append:trade_set_tag:name:content", "execute:append:villager_trade_tag:name:content", @@ -668,10 +676,12 @@ "execute:bossbar:set:id:style:progress", "execute:bossbar:set:id:value:value", "execute:bossbar:set:id:visible:visible", + "execute:cat_sound_variant:name:content", "execute:cat_variant:name:content", "execute:cat_variant_tag:name:content", "execute:chat_type:name:content", "execute:chat_type_tag:name:content", + "execute:chicken_sound_variant:name:content", "execute:chicken_variant:name:content", "execute:chicken_variant_tag:name:content", "execute:clear:targets", @@ -782,6 +792,8 @@ "execute:clone:from:sourceDimension:begin:end:to:targetDimension:destination:strict:replace:move", "execute:clone:from:sourceDimension:begin:end:to:targetDimension:destination:strict:replace:normal", "execute:commands", + "execute:configured_feature_tag:name:content", + "execute:cow_sound_variant:name:content", "execute:cow_variant:name:content", "execute:cow_variant_tag:name:content", "execute:damage:target:amount", @@ -1584,12 +1596,16 @@ "execute:merge:banner_pattern_tag:name:content", "execute:merge:block_tag:name:content", "execute:merge:blockstate:name:content", + "execute:merge:cat_sound_variant:name:content", "execute:merge:cat_variant:name:content", "execute:merge:cat_variant_tag:name:content", "execute:merge:chat_type:name:content", "execute:merge:chat_type_tag:name:content", + "execute:merge:chicken_sound_variant:name:content", "execute:merge:chicken_variant:name:content", "execute:merge:chicken_variant_tag:name:content", + "execute:merge:configured_feature_tag:name:content", + "execute:merge:cow_sound_variant:name:content", "execute:merge:cow_variant:name:content", "execute:merge:cow_variant_tag:name:content", "execute:merge:damage_type:name:content", @@ -1621,13 +1637,16 @@ "execute:merge:painting_variant:name:content", "execute:merge:painting_variant_tag:name:content", "execute:merge:particle_file:name:content", + "execute:merge:pig_sound_variant:name:content", "execute:merge:pig_variant:name:content", "execute:merge:point_of_interest_type_tag:name:content", "execute:merge:post_effect:name:content", + "execute:merge:potion_tag:name:content", "execute:merge:predicate:name:content", "execute:merge:recipe:name:content", "execute:merge:shader:name:content", "execute:merge:shader_post:name:content", + "execute:merge:sulfur_cube_archetype:name:content", "execute:merge:test_environment:name:content", "execute:merge:test_instance:name:content", "execute:merge:texture_mcmeta:name:content", @@ -1695,6 +1714,7 @@ "execute:particle_file:name:content", "execute:perf:start", "execute:perf:stop", + "execute:pig_sound_variant:name:content", "execute:pig_variant:name:content", "execute:place:feature:feature", "execute:place:feature:feature:pos", @@ -1781,12 +1801,14 @@ "execute:positioned:over:heightmap:subcommand", "execute:positioned:pos:subcommand", "execute:post_effect:name:content", + "execute:potion_tag:name:content", "execute:predicate:name:content", "execute:prepend:banner_pattern_tag:name:content", "execute:prepend:block_tag:name:content", "execute:prepend:cat_variant_tag:name:content", "execute:prepend:chat_type_tag:name:content", "execute:prepend:chicken_variant_tag:name:content", + "execute:prepend:configured_feature_tag:name:content", "execute:prepend:cow_variant_tag:name:content", "execute:prepend:damage_type_tag:name:content", "execute:prepend:dialog_tag:name:content", @@ -1801,6 +1823,7 @@ "execute:prepend:item_tag:name:content", "execute:prepend:painting_variant_tag:name:content", "execute:prepend:point_of_interest_type_tag:name:content", + "execute:prepend:potion_tag:name:content", "execute:prepend:timeline_tag:name:content", "execute:prepend:trade_set_tag:name:content", "execute:prepend:villager_trade_tag:name:content", @@ -1977,6 +2000,7 @@ "execute:store:success:storage:target:path:long:scale:subcommand", "execute:store:success:storage:target:path:short:scale:subcommand", "execute:subcommand", + "execute:sulfur_cube_archetype:name:content", "execute:summon:entity:subcommand", "execute:swing:targets", "execute:swing:targets:mainhand", @@ -2720,12 +2744,16 @@ "merge:banner_pattern_tag:name:content", "merge:block_tag:name:content", "merge:blockstate:name:content", + "merge:cat_sound_variant:name:content", "merge:cat_variant:name:content", "merge:cat_variant_tag:name:content", "merge:chat_type:name:content", "merge:chat_type_tag:name:content", + "merge:chicken_sound_variant:name:content", "merge:chicken_variant:name:content", "merge:chicken_variant_tag:name:content", + "merge:configured_feature_tag:name:content", + "merge:cow_sound_variant:name:content", "merge:cow_variant:name:content", "merge:cow_variant_tag:name:content", "merge:damage_type:name:content", @@ -2757,13 +2785,16 @@ "merge:painting_variant:name:content", "merge:painting_variant_tag:name:content", "merge:particle_file:name:content", + "merge:pig_sound_variant:name:content", "merge:pig_variant:name:content", "merge:point_of_interest_type_tag:name:content", "merge:post_effect:name:content", + "merge:potion_tag:name:content", "merge:predicate:name:content", "merge:recipe:name:content", "merge:shader:name:content", "merge:shader_post:name:content", + "merge:sulfur_cube_archetype:name:content", "merge:test_environment:name:content", "merge:test_instance:name:content", "merge:texture_mcmeta:name:content", @@ -2835,6 +2866,7 @@ "pass", "perf:start", "perf:stop", + "pig_sound_variant:name:content", "pig_variant:name:content", "place:feature:feature", "place:feature:feature:pos", @@ -2921,12 +2953,14 @@ "positioned:over:heightmap:subcommand", "positioned:pos:subcommand", "post_effect:name:content", + "potion_tag:name:content", "predicate:name:content", "prepend:banner_pattern_tag:name:content", "prepend:block_tag:name:content", "prepend:cat_variant_tag:name:content", "prepend:chat_type_tag:name:content", "prepend:chicken_variant_tag:name:content", + "prepend:configured_feature_tag:name:content", "prepend:cow_variant_tag:name:content", "prepend:damage_type_tag:name:content", "prepend:dialog_tag:name:content", @@ -2941,6 +2975,7 @@ "prepend:item_tag:name:content", "prepend:painting_variant_tag:name:content", "prepend:point_of_interest_type_tag:name:content", + "prepend:potion_tag:name:content", "prepend:timeline_tag:name:content", "prepend:trade_set_tag:name:content", "prepend:villager_trade_tag:name:content", @@ -3129,6 +3164,7 @@ "store:success:storage:target:path:int:scale:subcommand", "store:success:storage:target:path:long:scale:subcommand", "store:success:storage:target:path:short:scale:subcommand", + "sulfur_cube_archetype:name:content", "summon:entity", "summon:entity:pos", "summon:entity:pos:nbt", diff --git a/src/beet/contrib/worldgen.py b/src/beet/contrib/worldgen.py index 237ace581..c2336b95b 100644 --- a/src/beet/contrib/worldgen.py +++ b/src/beet/contrib/worldgen.py @@ -26,6 +26,7 @@ "WorldgenPlacedFeatureTag", "WorldgenFlatLevelGeneratorPresetTag", "WorldgenWorldPresetTag", + "ConfiguredFeatureTag", ] @@ -67,6 +68,7 @@ def worldgen(pack: Union[Context, DataPack]): WorldgenPlacedFeatureTag, WorldgenFlatLevelGeneratorPresetTag, WorldgenWorldPresetTag, + ConfiguredFeatureTag, ] @@ -237,3 +239,9 @@ class WorldgenWorldPresetTag(TagFile): """Class representing a worldgen world preset tag.""" scope: ClassVar[NamespaceFileScope] = ("tags", "worldgen", "world_preset") + + +class ConfiguredFeatureTag(TagFile): + """Class representing a configured feature tag.""" + + scope: ClassVar[NamespaceFileScope] = ("tags", "worldgen", "configured_feature") diff --git a/src/beet/library/data_pack.py b/src/beet/library/data_pack.py index 930d5d846..1de9ab3a9 100644 --- a/src/beet/library/data_pack.py +++ b/src/beet/library/data_pack.py @@ -21,8 +21,11 @@ "TrimMaterial", "FrogVariant", "CatVariant", + "CatSoundVariant", "CowVariant", + "CowSoundVariant", "ChickenVariant", + "ChickenSoundVariant", "WolfSoundVariant", "TagFile", "BlockTag", @@ -48,9 +51,12 @@ "WolfSoundVariantTag", "Dialog", "PigVariant", + "PigSoundVariant", "DialogTag", "TestInstance", "TestEnvironment", + "SulfurCubeArchetype", + "PotionTag", ] @@ -179,6 +185,13 @@ class CatVariant(JsonFile): extension: ClassVar[str] = ".json" +class CatSoundVariant(JsonFile): + """Class representing a cat sound variant.""" + + scope: ClassVar[NamespaceFileScope] = ("cat_sound_variant",) + extension: ClassVar[str] = ".json" + + class CowVariant(JsonFile): """Class representing a cow variant.""" @@ -186,6 +199,13 @@ class CowVariant(JsonFile): extension: ClassVar[str] = ".json" +class CowSoundVariant(JsonFile): + """Class representing a cow sound variant.""" + + scope: ClassVar[NamespaceFileScope] = ("cow_sound_variant",) + extension: ClassVar[str] = ".json" + + class ChickenVariant(JsonFile): """Class representing a chicken variant.""" @@ -193,6 +213,13 @@ class ChickenVariant(JsonFile): extension: ClassVar[str] = ".json" +class ChickenSoundVariant(JsonFile): + """Class representing a chicken sound variant.""" + + scope: ClassVar[NamespaceFileScope] = ("chicken_sound_variant",) + extension: ClassVar[str] = ".json" + + class Dialog(JsonFile): """Class representing a dialog.""" @@ -214,6 +241,20 @@ class PigVariant(JsonFile): extension: ClassVar[str] = ".json" +class PigSoundVariant(JsonFile): + """Class representing a pig sound variant.""" + + scope: ClassVar[NamespaceFileScope] = ("pig_sound_variant",) + extension: ClassVar[str] = ".json" + + +class SulfurCubeArchetype(JsonFile): + """Class representing a sulfur cube archetype.""" + + scope: ClassVar[NamespaceFileScope] = ("sulfur_cube_archetype",) + extension: ClassVar[str] = ".json" + + @dataclass(eq=False, repr=False) class Function(TextFileBase[List[str]]): """Class representing a function.""" @@ -671,6 +712,15 @@ class WorldClockTag(TagFile): ) +class PotionTag(TagFile): + """Class representing a potion tag.""" + + scope: ClassVar[NamespaceFileScope] = ( + "tags", + "potion", + ) + + class DataPackNamespace(Namespace): """Class representing a data pack namespace.""" @@ -698,8 +748,11 @@ class DataPackNamespace(Namespace): trial_spawners: NamespacePin[TrialSpawner] = NamespacePin(TrialSpawner) frog_variants: NamespacePin[FrogVariant] = NamespacePin(FrogVariant) cat_variants: NamespacePin[CatVariant] = NamespacePin(CatVariant) + cat_sound_variants: NamespacePin[CatSoundVariant] = NamespacePin(CatSoundVariant) cow_variants: NamespacePin[CowVariant] = NamespacePin(CowVariant) + cow_sound_variants: NamespacePin[CowSoundVariant] = NamespacePin(CowSoundVariant) chicken_variants: NamespacePin[ChickenVariant] = NamespacePin(ChickenVariant) + chicken_sound_variants: NamespacePin[ChickenSoundVariant] = NamespacePin(ChickenSoundVariant) wolf_sound_variants: NamespacePin[WolfSoundVariant] = NamespacePin(WolfSoundVariant) timelines: NamespacePin[Timeline] = NamespacePin(Timeline) zombie_nautilus_variants: NamespacePin[ZombieNautilusVariant] = NamespacePin(ZombieNautilusVariant) @@ -726,6 +779,7 @@ class DataPackNamespace(Namespace): wolf_sound_variant_tags: NamespacePin[WolfSoundVariantTag] = NamespacePin(WolfSoundVariantTag) dialogs: NamespacePin[Dialog] = NamespacePin(Dialog) pig_variants: NamespacePin[PigVariant] = NamespacePin(PigVariant) + pig_sound_variants: NamespacePin[PigSoundVariant] = NamespacePin(PigSoundVariant) dialogs_tags: NamespacePin[DialogTag] = NamespacePin(DialogTag) test_instances: NamespacePin[TestInstance] = NamespacePin(TestInstance) test_environments: NamespacePin[TestEnvironment] = NamespacePin(TestEnvironment) @@ -734,6 +788,8 @@ class DataPackNamespace(Namespace): villager_trade_tags: NamespacePin[VillagerTradeTag] = NamespacePin(VillagerTradeTag) trade_set_tags: NamespacePin[TradeSetTag] = NamespacePin(TradeSetTag) world_clock_tags: NamespacePin[WorldClockTag] = NamespacePin(WorldClockTag) + potion_tags: NamespacePin[PotionTag] = NamespacePin(PotionTag) + sulfur_cube_archetypes: NamespacePin[SulfurCubeArchetype] = NamespacePin(SulfurCubeArchetype) # fmt: on @@ -771,8 +827,11 @@ class DataPack(Pack[DataPackNamespace]): trial_spawners: NamespaceProxyDescriptor[TrialSpawner] = NamespaceProxyDescriptor(TrialSpawner) frog_variants: NamespaceProxyDescriptor[FrogVariant] = NamespaceProxyDescriptor(FrogVariant) cat_variants: NamespaceProxyDescriptor[CatVariant] = NamespaceProxyDescriptor(CatVariant) + cat_sound_variants: NamespaceProxyDescriptor[CatSoundVariant] = NamespaceProxyDescriptor(CatSoundVariant) cow_variants: NamespaceProxyDescriptor[CowVariant] = NamespaceProxyDescriptor(CowVariant) + cow_sound_variants: NamespaceProxyDescriptor[CowSoundVariant] = NamespaceProxyDescriptor(CowSoundVariant) chicken_variants: NamespaceProxyDescriptor[ChickenVariant] = NamespaceProxyDescriptor(ChickenVariant) + chicken_sound_variants: NamespaceProxyDescriptor[ChickenSoundVariant] = NamespaceProxyDescriptor(ChickenSoundVariant) wolf_sound_variants: NamespaceProxyDescriptor[WolfSoundVariant] = NamespaceProxyDescriptor(WolfSoundVariant) timelines: NamespaceProxyDescriptor[Timeline] = NamespaceProxyDescriptor(Timeline) zombie_nautilus_variants: NamespaceProxyDescriptor[ZombieNautilusVariant] = NamespaceProxyDescriptor(ZombieNautilusVariant) @@ -799,6 +858,7 @@ class DataPack(Pack[DataPackNamespace]): wolf_sound_variant_tags: NamespaceProxyDescriptor[WolfSoundVariantTag] = NamespaceProxyDescriptor(WolfSoundVariantTag) dialogs: NamespaceProxyDescriptor[Dialog] = NamespaceProxyDescriptor(Dialog) pig_variants: NamespaceProxyDescriptor[PigVariant] = NamespaceProxyDescriptor(PigVariant) + pig_sound_variants: NamespaceProxyDescriptor[PigSoundVariant] = NamespaceProxyDescriptor(PigSoundVariant) dialogs_tags: NamespaceProxyDescriptor[DialogTag] = NamespaceProxyDescriptor(DialogTag) test_instances: NamespaceProxyDescriptor[TestInstance] = NamespaceProxyDescriptor(TestInstance) test_environments: NamespaceProxyDescriptor[TestEnvironment] = NamespaceProxyDescriptor(TestEnvironment) @@ -807,4 +867,8 @@ class DataPack(Pack[DataPackNamespace]): village_trade_tags: NamespaceProxyDescriptor[VillagerTradeTag] = NamespaceProxyDescriptor(VillagerTradeTag) trade_set_tags: NamespaceProxyDescriptor[TradeSetTag] = NamespaceProxyDescriptor(TradeSetTag) world_clock_tags: NamespaceProxyDescriptor[WorldClockTag] = NamespaceProxyDescriptor(WorldClockTag) + potion_tags: NamespaceProxyDescriptor[PotionTag] = NamespaceProxyDescriptor(PotionTag) + sulfur_cube_archetypes: NamespaceProxyDescriptor[SulfurCubeArchetype] = NamespaceProxyDescriptor(SulfurCubeArchetype) + + # fmt: on diff --git a/tests/test_vanilla_loading.py b/tests/test_vanilla_loading.py new file mode 100644 index 000000000..0956948e0 --- /dev/null +++ b/tests/test_vanilla_loading.py @@ -0,0 +1,59 @@ +from pathlib import Path + +from beet import DataPack, ResourcePack, Cache, LATEST_MINECRAFT_VERSION, JsonFile +from beet.contrib.unknown_files import UnknownAsset, UnknownData +from beet.contrib.worldgen import worldgen +from beet.contrib.vanilla import MANIFEST_URL +from zipfile import ZipFile + + +def test_vanilla_loading(tmp_path: Path): + cache = Cache(tmp_path) + manifest = JsonFile(source_path=cache.download(MANIFEST_URL)) + version = [ + x for x in manifest.data["versions"] if x["id"] == LATEST_MINECRAFT_VERSION + ][0] + version_manifest = JsonFile(source_path=cache.download(version["url"])) + client = cache.download(version_manifest.data["downloads"]["client"]["url"]) + + dp = DataPack() + rp = ResourcePack() + dp.extend_namespace.append(UnknownData) + rp.extend_namespace.append(UnknownAsset) + + worldgen(dp) + dp.load(ZipFile(client)) + rp.load(ZipFile(client)) + + dp_unknown = set() + for key in dp[UnknownData]: + splitted = key.split(":", 1)[1].split("/") + if splitted[0] == "worldgen": + dp_unknown.add("/".join(splitted[:2])) + elif splitted[0] == "tags": + if splitted[1] == "worldgen": + dp_unknown.add("/".join(splitted[:3])) + else: + dp_unknown.add("/".join(splitted[:2])) + else: + dp_unknown.add(splitted[0]) + + dp_unknown.remove("datapacks") + + rp_unknown = set() + for key in rp[UnknownAsset]: + splitted = key.split(":", 1)[1].split("/") + if splitted[0] == "worldgen": + rp_unknown.add("/".join(splitted[:2])) + elif splitted[0] == "tags": + if splitted[1] == "worldgen": + rp_unknown.add("/".join(splitted[:3])) + else: + rp_unknown.add("/".join(splitted[:2])) + else: + rp_unknown.add(splitted[0]) + rp_unknown.remove("gpu_warnlist.json") + rp_unknown.remove("regional_compliancies.json") + + assert len(dp_unknown) == 0, dp_unknown + assert len(rp_unknown) == 0, rp_unknown