From 8f65678b993004b6acda4315eee253e6f45122ee Mon Sep 17 00:00:00 2001 From: RainWarrior Date: Tue, 23 Jun 2015 16:52:42 +0300 Subject: [PATCH] Vanilla models can now use custom textures. Fixes #1962 --- .../resources/model/ModelBakery.java.patch | 2 +- .../client/model/ModelLoader.java | 30 +++++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch index ee7d7cdeeb..6ed9b0582b 100644 --- a/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch +++ b/patches/minecraft/net/minecraft/client/resources/model/ModelBakery.java.patch @@ -54,7 +54,7 @@ + return makeBakedQuad(p_177589_1_, p_177589_2_, p_177589_3_, p_177589_4_, (net.minecraftforge.client.model.ITransformation)p_177589_5_, p_177589_6_); } -+ private BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, net.minecraftforge.client.model.ITransformation p_177589_5_, boolean p_177589_6_) ++ protected BakedQuad makeBakedQuad(BlockPart p_177589_1_, BlockPartFace p_177589_2_, TextureAtlasSprite p_177589_3_, EnumFacing p_177589_4_, net.minecraftforge.client.model.ITransformation p_177589_5_, boolean p_177589_6_) + { + return this.field_177607_l.makeBakedQuad(p_177589_1_.field_178241_a, p_177589_1_.field_178239_b, p_177589_2_, p_177589_3_, p_177589_4_, p_177589_5_, p_177589_1_.field_178237_d, p_177589_6_, p_177589_1_.field_178238_e); + } diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoader.java b/src/main/java/net/minecraftforge/client/model/ModelLoader.java index db598fd44e..a84862a848 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoader.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoader.java @@ -41,6 +41,7 @@ import net.minecraft.client.resources.model.BuiltInModel; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.client.resources.model.ModelRotation; +import net.minecraft.client.resources.model.SimpleBakedModel; import net.minecraft.client.resources.model.WeightedBakedModel; import net.minecraft.item.Item; import net.minecraft.util.EnumFacing; @@ -111,11 +112,10 @@ public class ModelLoader extends ModelBakery { for(ResourceLocation t : textures) { - sprites.put(t, map.registerSprite(t)); + map.registerSprite(t); } } }); - sprites.put(new ResourceLocation("missingno"), textureMap.getMissingSprite()); Function textureGetter = new Function() { public TextureAtlasSprite apply(ResourceLocation location) @@ -324,7 +324,31 @@ public class ModelLoader extends ModelBakery ItemCameraTransforms transforms = new ItemCameraTransforms(model.getThirdPersonTransform(), model.getFirstPersonTransform(), model.getHeadTransform(), model.getInGuiTransform()); if(hasItemModel(model)) return new ItemLayerModel(model).bake(new IPerspectiveState.Impl(state, transforms), format, bakedTextureGetter); if(isCustomRenderer(model)) return new IFlexibleBakedModel.Wrapper(new BuiltInModel(transforms), format); - return new IFlexibleBakedModel.Wrapper(bakeModel(model, state.apply(this), state instanceof UVLock), format); + return bakeNormal(model, state.apply(this), format, bakedTextureGetter, state instanceof UVLock); + } + + private IFlexibleBakedModel bakeNormal(ModelBlock model, TRSRTransformation state, VertexFormat format, Function bakedTextureGetter, boolean uvLocked) + { + TextureAtlasSprite particle = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName("particle"))); + SimpleBakedModel.Builder builder = (new SimpleBakedModel.Builder(model)).setTexture(particle); + for(BlockPart part : (Iterable)model.getElements()) + { + for(Map.Entry e : (Iterable>)part.mapFaces.entrySet()) + { + TextureAtlasSprite textureatlassprite1 = bakedTextureGetter.apply(new ResourceLocation(model.resolveTextureName(e.getValue().texture))); + + if (e.getValue().cullFace == null || !TRSRTransformation.isInteger(state.getMatrix())) + { + builder.addGeneralQuad(makeBakedQuad(part, e.getValue(), textureatlassprite1, e.getKey(), state, uvLocked)); + } + else + { + builder.addFaceQuad(state.rotate(e.getValue().cullFace), makeBakedQuad(part, e.getValue(), textureatlassprite1, e.getKey(), state, uvLocked)); + } + } + } + + return new IFlexibleBakedModel.Wrapper(builder.makeBakedModel(), format); } public IModelState getDefaultState()