diff --git a/src/main/java/ru/bclib/BCLib.java b/src/main/java/ru/bclib/BCLib.java index 75b13d06..a1185fbc 100644 --- a/src/main/java/ru/bclib/BCLib.java +++ b/src/main/java/ru/bclib/BCLib.java @@ -7,7 +7,6 @@ import net.minecraft.resources.ResourceLocation; import ru.bclib.api.TagAPI; import ru.bclib.api.WorldDataAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; -import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.handler.HelloClient; import ru.bclib.api.dataexchange.handler.HelloServer; import ru.bclib.api.dataexchange.handler.RequestFiles; @@ -19,7 +18,6 @@ import ru.bclib.registry.BaseRegistry; import ru.bclib.util.Logger; import ru.bclib.world.surface.BCLSurfaceBuilders; -import java.util.ArrayList; import java.util.List; public class BCLib implements ModInitializer { diff --git a/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java b/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java index 0bc6d442..512c134a 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataExchangeAPI.java @@ -3,24 +3,11 @@ package ru.bclib.api.dataexchange; import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.networking.v1.ClientLoginConnectionEvents; -import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; -import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.network.FriendlyByteBuf; -import ru.bclib.BCLib; import ru.bclib.api.dataexchange.handler.DataExchange; import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; -import java.util.function.Function; -import java.util.function.Predicate; public class DataExchangeAPI extends DataExchange { private final static List MODS = Lists.newArrayList(); diff --git a/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java b/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java index 61860185..99017fe4 100644 --- a/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java +++ b/src/main/java/ru/bclib/api/dataexchange/DataHandlerDescriptor.java @@ -1,10 +1,6 @@ package ru.bclib.api.dataexchange; import net.minecraft.resources.ResourceLocation; -import ru.bclib.api.dataexchange.handler.HelloClient; -import ru.bclib.api.dataexchange.handler.HelloServer; -import ru.bclib.api.dataexchange.handler.RequestFiles; -import ru.bclib.api.dataexchange.handler.SendFiles; import java.util.function.Supplier; diff --git a/src/main/java/ru/bclib/api/dataexchange/FileHash.java b/src/main/java/ru/bclib/api/dataexchange/FileHash.java index 848a9104..e6b0f4c0 100644 --- a/src/main/java/ru/bclib/api/dataexchange/FileHash.java +++ b/src/main/java/ru/bclib/api/dataexchange/FileHash.java @@ -13,7 +13,6 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; import java.util.Objects; -import java.util.function.Predicate; /** * Calculates a hash based on the contents of a File. diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java b/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java index 0cce42eb..ed644bac 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/DataExchange.java @@ -2,7 +2,6 @@ package ru.bclib.api.dataexchange.handler; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.networking.v1.ClientLoginConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import org.jetbrains.annotations.NotNull; @@ -12,7 +11,6 @@ import ru.bclib.api.dataexchange.DataExchangeAPI; import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandlerDescriptor; import ru.bclib.api.dataexchange.FileHash; -import ru.bclib.util.Pair; import ru.bclib.util.Triple; import java.io.File; diff --git a/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java b/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java index 7d4a8c60..1082dcab 100644 --- a/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java +++ b/src/main/java/ru/bclib/api/dataexchange/handler/SendFiles.java @@ -16,7 +16,6 @@ import ru.bclib.gui.screens.ConfirmRestartScreen; import ru.bclib.util.Pair; import ru.bclib.util.Triple; -import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/src/main/java/ru/bclib/api/datafixer/Patch.java b/src/main/java/ru/bclib/api/datafixer/Patch.java index 7f9bf077..ae6b568b 100644 --- a/src/main/java/ru/bclib/api/datafixer/Patch.java +++ b/src/main/java/ru/bclib/api/datafixer/Patch.java @@ -3,7 +3,6 @@ package ru.bclib.api.datafixer; import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.NotNull; -import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/ru/bclib/client/BCLibClient.java b/src/main/java/ru/bclib/client/BCLibClient.java index 55f7c945..bb61f255 100644 --- a/src/main/java/ru/bclib/client/BCLibClient.java +++ b/src/main/java/ru/bclib/client/BCLibClient.java @@ -1,17 +1,42 @@ package ru.bclib.client; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry; +import net.fabricmc.fabric.api.client.model.ModelProviderContext; +import net.fabricmc.fabric.api.client.model.ModelProviderException; +import net.fabricmc.fabric.api.client.model.ModelResourceProvider; +import net.fabricmc.fabric.api.client.model.ModelVariantProvider; +import net.minecraft.client.resources.model.ModelResourceLocation; +import net.minecraft.client.resources.model.UnbakedModel; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; import ru.bclib.api.ModIntegrationAPI; import ru.bclib.api.PostInitAPI; import ru.bclib.api.dataexchange.DataExchangeAPI; +import ru.bclib.client.models.CustomModelBakery; import ru.bclib.registry.BaseBlockEntityRenders; -public class BCLibClient implements ClientModInitializer { +public class BCLibClient implements ClientModInitializer, ModelResourceProvider, ModelVariantProvider { + public static CustomModelBakery modelBakery; + @Override public void onInitializeClient() { ModIntegrationAPI.registerAll(); BaseBlockEntityRenders.register(); DataExchangeAPI.prepareClientside(); PostInitAPI.postInit(true); + modelBakery = new CustomModelBakery(); + ModelLoadingRegistry.INSTANCE.registerResourceProvider(rm -> this); + ModelLoadingRegistry.INSTANCE.registerVariantProvider(rm -> this); + } + + @Override + public @Nullable UnbakedModel loadModelResource(ResourceLocation resourceId, ModelProviderContext context) throws ModelProviderException { + return modelBakery.getBlockModel(resourceId); + } + + @Override + public @Nullable UnbakedModel loadModelVariant(ModelResourceLocation modelId, ModelProviderContext context) throws ModelProviderException { + return modelId.getVariant().equals("inventory") ? modelBakery.getItemModel( modelId) : modelBakery.getBlockModel(modelId); } } diff --git a/src/main/java/ru/bclib/client/render/CustomModelBakery.java b/src/main/java/ru/bclib/client/models/CustomModelBakery.java similarity index 68% rename from src/main/java/ru/bclib/client/render/CustomModelBakery.java rename to src/main/java/ru/bclib/client/models/CustomModelBakery.java index fb116d71..97d36d18 100644 --- a/src/main/java/ru/bclib/client/render/CustomModelBakery.java +++ b/src/main/java/ru/bclib/client/models/CustomModelBakery.java @@ -1,4 +1,4 @@ -package ru.bclib.client.render; +package ru.bclib.client.models; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; @@ -13,10 +13,10 @@ import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import ru.bclib.api.ModIntegrationAPI; +import ru.bclib.client.render.EmissiveTextureInfo; import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.ItemModelProvider; @@ -26,31 +26,26 @@ import java.util.Map; import java.util.Set; public class CustomModelBakery { - private static final Map UNBAKED_CACHE = Maps.newConcurrentMap(); - private static final Set LOADING_STACK = Sets.newConcurrentHashSet(); - private static boolean modelsLoaded; + private final Map models = Maps.newConcurrentMap(); - @Deprecated // Not working with Fabric model API - public static boolean modelsLoaded() { - return modelsLoaded; + public UnbakedModel getBlockModel(ResourceLocation location) { + return models.get(location); } - @Deprecated // Not working with Fabric model API - public static void setModelsLoaded(boolean modelsLoaded) { - CustomModelBakery.modelsLoaded = modelsLoaded; + public UnbakedModel getItemModel(ResourceLocation location) { + ResourceLocation storageID = new ResourceLocation(location.getNamespace(), "models/item/" + location.getPath() + ".json"); + return models.get(location); } - @Deprecated // Not working with Fabric model API - public static void loadCustomModels(ResourceManager resourceManager, Map unbakedCache, Set loadingStack) { + public void loadCustomModels(ResourceManager resourceManager) { Registry.BLOCK.stream().parallel().filter(block -> block instanceof BlockModelProvider).forEach(block -> { ResourceLocation blockID = Registry.BLOCK.getKey(block); ResourceLocation storageID = new ResourceLocation(blockID.getNamespace(), "blockstates/" + blockID.getPath() + ".json"); - if (!resourceManager.hasResource(storageID)) { addBlockModel(blockID, block); } - - if (Registry.ITEM.get(blockID) != Items.AIR) { + storageID = new ResourceLocation(blockID.getNamespace(), "models/item/" + blockID.getPath() + ".json"); + if (!resourceManager.hasResource(storageID)) { addItemModel(blockID, (ItemModelProvider) block); } }); @@ -62,54 +57,38 @@ public class CustomModelBakery { addItemModel(registryID, (ItemModelProvider) item); } }); - - unbakedCache.putAll(UNBAKED_CACHE); - loadingStack.addAll(LOADING_STACK); - UNBAKED_CACHE.clear(); - LOADING_STACK.clear(); - - modelsLoaded = true; } - @Deprecated // Not working with Fabric model API - private static void addBlockModel(ResourceLocation blockID, Block block) { + private void addBlockModel(ResourceLocation blockID, Block block) { BlockModelProvider provider = (BlockModelProvider) block; ImmutableList states = block.getStateDefinition().getPossibleStates(); BlockState defaultState = block.defaultBlockState(); ResourceLocation defaultStateID = BlockModelShaper.stateToModelLocation(blockID, defaultState); - UnbakedModel defaultModel = provider.getModelVariant(defaultStateID, defaultState, UNBAKED_CACHE); + UnbakedModel defaultModel = provider.getModelVariant(defaultStateID, defaultState, models); if (defaultModel instanceof MultiPart) { states.forEach(blockState -> { ResourceLocation stateID = BlockModelShaper.stateToModelLocation(blockID, blockState); - cacheAndQueueDependencies(stateID, defaultModel); + models.put(stateID, defaultModel); }); } else { states.forEach(blockState -> { ResourceLocation stateID = BlockModelShaper.stateToModelLocation(blockID, blockState); - UnbakedModel model = stateID.equals(defaultStateID) ? defaultModel : provider.getModelVariant(stateID, blockState, UNBAKED_CACHE); - cacheAndQueueDependencies(stateID, model); + UnbakedModel model = stateID.equals(defaultStateID) ? defaultModel : provider.getModelVariant(stateID, blockState, models); + models.put(stateID, model); }); } } - @Deprecated // Not working with Fabric model API - private static void addItemModel(ResourceLocation itemID, ItemModelProvider provider) { + private void addItemModel(ResourceLocation itemID, ItemModelProvider provider) { ModelResourceLocation modelLocation = new ModelResourceLocation(itemID.getNamespace(), itemID.getPath(), "inventory"); - if (UNBAKED_CACHE.containsKey(modelLocation)) { + if (models.containsKey(modelLocation)) { return; } BlockModel model = provider.getItemModel(modelLocation); - cacheAndQueueDependencies(modelLocation, model); - UNBAKED_CACHE.put(modelLocation, model); - } - - @Deprecated // Not working with Fabric model API - private static void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel) { - UNBAKED_CACHE.put(resourceLocation, unbakedModel); - LOADING_STACK.addAll(unbakedModel.getDependencies()); + models.put(modelLocation, model); } public static void loadEmissiveModels(Map unbakedCache) { diff --git a/src/main/java/ru/bclib/config/Config.java b/src/main/java/ru/bclib/config/Config.java index dab496de..0973c5c8 100644 --- a/src/main/java/ru/bclib/config/Config.java +++ b/src/main/java/ru/bclib/config/Config.java @@ -10,8 +10,6 @@ import ru.bclib.config.ConfigKeeper.IntegerEntry; import ru.bclib.config.ConfigKeeper.RangeEntry; import ru.bclib.config.ConfigKeeper.StringEntry; -import java.io.File; - public abstract class Config { protected final ConfigKeeper keeper; protected final boolean autoSync; diff --git a/src/main/java/ru/bclib/config/PathConfig.java b/src/main/java/ru/bclib/config/PathConfig.java index b10388bf..2802bd67 100644 --- a/src/main/java/ru/bclib/config/PathConfig.java +++ b/src/main/java/ru/bclib/config/PathConfig.java @@ -5,8 +5,6 @@ import ru.bclib.config.ConfigKeeper.Entry; import ru.bclib.config.ConfigKeeper.FloatRange; import ru.bclib.config.ConfigKeeper.IntegerRange; -import java.io.File; - public class PathConfig extends Config { public PathConfig(String modID, String group, boolean autoSync) { diff --git a/src/main/java/ru/bclib/gui/screens/ConfirmFixScreen.java b/src/main/java/ru/bclib/gui/screens/ConfirmFixScreen.java index 8e6d44f7..c95e794e 100644 --- a/src/main/java/ru/bclib/gui/screens/ConfirmFixScreen.java +++ b/src/main/java/ru/bclib/gui/screens/ConfirmFixScreen.java @@ -1,11 +1,8 @@ package ru.bclib.gui.screens; -import com.mojang.blaze3d.vertex.PoseStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.gui.components.MultiLineLabel; -import net.minecraft.client.gui.screens.BackupConfirmScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @@ -13,7 +10,6 @@ import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; import ru.bclib.BCLib; -import ru.bclib.gui.GridLayout; import ru.bclib.gui.GridScreen; @Environment(EnvType.CLIENT) diff --git a/src/main/java/ru/bclib/mixin/client/ClientboundLoginPacketMixin.java b/src/main/java/ru/bclib/mixin/client/ClientboundLoginPacketMixin.java index b25550cb..2bf2f0ed 100644 --- a/src/main/java/ru/bclib/mixin/client/ClientboundLoginPacketMixin.java +++ b/src/main/java/ru/bclib/mixin/client/ClientboundLoginPacketMixin.java @@ -1,13 +1,11 @@ package ru.bclib.mixin.client; -import net.minecraft.client.Minecraft; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundLoginPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.bclib.api.dataexchange.DataExchangeAPI; @Mixin(ClientboundLoginPacket.class) public abstract class ClientboundLoginPacketMixin { diff --git a/src/main/java/ru/bclib/mixin/client/GameMixin.java b/src/main/java/ru/bclib/mixin/client/GameMixin.java index 940090b7..941557c1 100644 --- a/src/main/java/ru/bclib/mixin/client/GameMixin.java +++ b/src/main/java/ru/bclib/mixin/client/GameMixin.java @@ -6,7 +6,6 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.bclib.api.dataexchange.DataExchangeAPI; -import ru.bclib.api.dataexchange.handler.HelloServer; @Mixin(Game.class) public class GameMixin { diff --git a/src/main/java/ru/bclib/mixin/client/MinecraftMixin.java b/src/main/java/ru/bclib/mixin/client/MinecraftMixin.java index 3401de2a..2022707f 100644 --- a/src/main/java/ru/bclib/mixin/client/MinecraftMixin.java +++ b/src/main/java/ru/bclib/mixin/client/MinecraftMixin.java @@ -3,9 +3,7 @@ package ru.bclib.mixin.client; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.item.ItemColors; -import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.main.GameConfig; -import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.Registry; import net.minecraft.core.RegistryAccess.RegistryHolder; import net.minecraft.world.level.LevelSettings; diff --git a/src/main/java/ru/bclib/mixin/client/ModelBakeryMixin.java b/src/main/java/ru/bclib/mixin/client/ModelBakeryMixin.java index 8591e7f9..0c78fd30 100644 --- a/src/main/java/ru/bclib/mixin/client/ModelBakeryMixin.java +++ b/src/main/java/ru/bclib/mixin/client/ModelBakeryMixin.java @@ -1,129 +1,28 @@ package ru.bclib.mixin.client; -import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; -import net.minecraft.client.renderer.block.BlockModelShaper; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.client.renderer.block.model.multipart.MultiPart; import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.UnbakedModel; -import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.bclib.BCLib; import ru.bclib.api.ModIntegrationAPI; -import ru.bclib.client.render.CustomModelBakery; -import ru.bclib.interfaces.BlockModelProvider; -import ru.bclib.interfaces.ItemModelProvider; +import ru.bclib.client.models.CustomModelBakery; -import java.util.List; import java.util.Map; -import java.util.Optional; -import java.util.Set; @Mixin(ModelBakery.class) public abstract class ModelBakeryMixin { - @Final - @Shadow - private ResourceManager resourceManager; @Final @Shadow private Map unbakedCache; - @Shadow - protected abstract void cacheAndQueueDependencies(ResourceLocation resourceLocation, UnbakedModel unbakedModel); - - @Inject(method = "loadModel", at = @At("HEAD"), cancellable = true) - private void bclib_loadCustomModels(ResourceLocation resourceLocation, CallbackInfo info) { - if (resourceLocation instanceof ModelResourceLocation) { - String modId = resourceLocation.getNamespace(); - String path = resourceLocation.getPath(); - ResourceLocation clearLoc = new ResourceLocation(modId, path); - ModelResourceLocation modelId = (ModelResourceLocation) resourceLocation; - if ("inventory".equals(modelId.getVariant())) { - ResourceLocation itemLoc = new ResourceLocation(modId, "item/" + path); - ResourceLocation itemModelLoc = new ResourceLocation(modId, "models/" + itemLoc.getPath() + ".json"); - if (!resourceManager.hasResource(itemModelLoc)) { - Item item = Registry.ITEM.get(clearLoc); - ItemModelProvider modelProvider = null; - if (item instanceof ItemModelProvider) { - modelProvider = (ItemModelProvider) item; - } - else if (item instanceof BlockItem) { - Block block = Registry.BLOCK.get(clearLoc); - if (block instanceof ItemModelProvider) { - modelProvider = (ItemModelProvider) block; - } - } - if (modelProvider != null) { - BlockModel model = modelProvider.getItemModel(clearLoc); - if (model != null) { - model.name = itemLoc.toString(); - cacheAndQueueDependencies(modelId, model); - unbakedCache.put(itemLoc, model); - } - else { - BCLib.LOGGER.warning("Error loading model: {}", itemLoc); - } - info.cancel(); - } - } - } - else { - ResourceLocation stateLoc = new ResourceLocation(modId, "blockstates/" + path + ".json"); - if (!resourceManager.hasResource(stateLoc)) { - Block block = Registry.BLOCK.get(clearLoc); - if (block instanceof BlockModelProvider) { - List possibleStates = block.getStateDefinition().getPossibleStates(); - Optional possibleState = possibleStates - .stream() - .filter(state -> modelId.equals(BlockModelShaper.stateToModelLocation(clearLoc, state))) - .findFirst(); - if (possibleState.isPresent()) { - UnbakedModel modelVariant = ((BlockModelProvider) block).getModelVariant( - modelId, - possibleState.get(), - unbakedCache - ); - if (modelVariant != null) { - if (modelVariant instanceof MultiPart) { - possibleStates.forEach(state -> { - ResourceLocation stateId = BlockModelShaper.stateToModelLocation( - clearLoc, - state - ); - cacheAndQueueDependencies(stateId, modelVariant); - }); - } - else { - cacheAndQueueDependencies(modelId, modelVariant); - } - } - else { - BCLib.LOGGER.warning("Error loading variant: {}", modelId); - } - info.cancel(); - } - } - } - } - } - } - @Inject(method = "*", at = @At("TAIL")) private void bclib_findEmissiveModels(ResourceManager resourceManager, BlockColors blockColors, ProfilerFiller profiler, int mipmap, CallbackInfo info) { //CustomModelBakery.setModelsLoaded(false); diff --git a/src/main/java/ru/bclib/mixin/client/ModelManagerMixin.java b/src/main/java/ru/bclib/mixin/client/ModelManagerMixin.java new file mode 100644 index 00000000..c7b28d17 --- /dev/null +++ b/src/main/java/ru/bclib/mixin/client/ModelManagerMixin.java @@ -0,0 +1,19 @@ +package ru.bclib.mixin.client; + +import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.server.packs.resources.ResourceManager; +import net.minecraft.util.profiling.ProfilerFiller; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.bclib.client.BCLibClient; + +@Mixin(ModelManager.class) +public class ModelManagerMixin { + @Inject(method = "prepare", at = @At("HEAD")) + private void bclib_loadCustomModels(ResourceManager resourceManager, ProfilerFiller profilerFiller, CallbackInfoReturnable info) { + BCLibClient.modelBakery.loadCustomModels(resourceManager); + } +} diff --git a/src/main/resources/bclib.mixins.client.json b/src/main/resources/bclib.mixins.client.json index 0dd5cef2..83b869c2 100644 --- a/src/main/resources/bclib.mixins.client.json +++ b/src/main/resources/bclib.mixins.client.json @@ -7,10 +7,11 @@ "SimpleReloadableResourceManagerMixin", "EnchantingTableBlockMixin", "BackgroundRendererMixin", - "GameMixin", + "ModelManagerMixin", "TextureAtlasMixin", "ModelBakeryMixin", - "MinecraftMixin" + "MinecraftMixin", + "GameMixin" ], "injectors": { "defaultRequire": 1