11package me .wurgo .antiresourcereload .mixin ;
22
3+ import com .google .common .collect .Lists ;
34import me .wurgo .antiresourcereload .AntiResourceReload ;
45import net .minecraft .loot .LootManager ;
56import net .minecraft .loot .condition .LootConditionManager ;
67import net .minecraft .recipe .RecipeManager ;
7- import net .minecraft .resource .ReloadableResourceManager ;
8+ import net .minecraft .resource .* ;
89import net .minecraft .server .MinecraftServer ;
910import net .minecraft .server .ServerAdvancementLoader ;
1011import net .minecraft .server .function .CommandFunctionManager ;
1112import net .minecraft .tag .RegistryTagManager ;
1213import net .minecraft .world .level .LevelProperties ;
14+ import org .apache .logging .log4j .core .Logger ;
1315import org .spongepowered .asm .mixin .Final ;
1416import org .spongepowered .asm .mixin .Mixin ;
1517import org .spongepowered .asm .mixin .Mutable ;
1618import org .spongepowered .asm .mixin .Shadow ;
1719import org .spongepowered .asm .mixin .injection .At ;
1820import org .spongepowered .asm .mixin .injection .Redirect ;
1921
22+ import java .util .List ;
23+
2024@ Mixin (MinecraftServer .class )
2125public abstract class MinecraftServerMixin {
2226 @ Shadow protected abstract void reloadDataPacks (LevelProperties levelProperties );
@@ -28,6 +32,9 @@ public abstract class MinecraftServerMixin {
2832 @ Mutable @ Shadow @ Final private CommandFunctionManager commandFunctionManager ;
2933 @ Mutable @ Shadow @ Final private ServerAdvancementLoader advancementLoader ;
3034
35+ @ Shadow @ Final private static Logger LOGGER ;
36+ @ Shadow @ Final private ResourcePackManager <ResourcePackProfile > dataPackManager ;
37+
3138 @ Redirect (
3239 method = "loadWorldDataPacks" ,
3340 at = @ At (
@@ -64,6 +71,18 @@ private void antiresourcereload_cachedReload(MinecraftServer instance, LevelProp
6471 if (AntiResourceReload .hasSeenRecipes ) {
6572 ((RecipeManagerAccess ) this .recipeManager ).invokeApply (AntiResourceReload .recipes , null , null );
6673 }
74+
75+ // should only be the vanilla pack
76+ // logic taken from MinecraftServer#reloadDataPacks
77+ List <ResourcePackProfile > list = Lists .newArrayList (this .dataPackManager .getEnabledProfiles ());
78+
79+ for (ResourcePackProfile resourcePackProfile : this .dataPackManager .getProfiles ()) {
80+ if (!levelProperties .getDisabledDataPacks ().contains (resourcePackProfile .getName ()) && !list .contains (resourcePackProfile )) {
81+ LOGGER .info ("Found new data pack {}, loading it automatically" , resourcePackProfile .getName ());
82+ resourcePackProfile .getInitialPosition ().insert (list , resourcePackProfile , profile -> profile , false );
83+ }
84+ }
85+ this .dataPackManager .setEnabledProfiles (list );
6786 }
6887 }
6988}
0 commit comments