diff --git a/patches/minecraft/net/minecraft/client/renderer/texture/AtlasTexture.java.patch b/patches/minecraft/net/minecraft/client/renderer/texture/AtlasTexture.java.patch index feba121b8..57b17c75a 100644 --- a/patches/minecraft/net/minecraft/client/renderer/texture/AtlasTexture.java.patch +++ b/patches/minecraft/net/minecraft/client/renderer/texture/AtlasTexture.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/client/renderer/texture/AtlasTexture.java +++ b/net/minecraft/client/renderer/texture/AtlasTexture.java -@@ -79,10 +79,12 @@ +@@ -79,6 +79,7 @@ } } @@ -8,11 +8,14 @@ } public AtlasTexture.SheetData func_215254_a(IResourceManager p_215254_1_, Iterable p_215254_2_, IProfiler p_215254_3_) { - Set set = Sets.newHashSet(); -+ net.minecraftforge.client.ForgeHooksClient.onTextureStitchedPre(this); - p_215254_3_.func_76320_a("preparing"); - p_215254_2_.forEach((p_215253_1_) -> { - if (p_215253_1_ == null) { +@@ -91,6 +92,7 @@ + set.add(p_215253_1_); + } + }); ++ net.minecraftforge.client.ForgeHooksClient.onTextureStitchedPre(this, set); + int i = this.field_215265_o; + Stitcher stitcher = new Stitcher(i, i, this.field_147636_j); + int j = Integer.MAX_VALUE; @@ -110,6 +112,7 @@ int i1 = Math.min(j, k); @@ -29,15 +32,14 @@ try { iresource = p_195422_1_.func_199002_a(resourcelocation); p_195422_2_.func_195664_a(iresource, this.field_147636_j + 1); -@@ -267,7 +271,94 @@ - this.field_94252_e.clear(); +@@ -268,6 +272,93 @@ this.field_94258_i.clear(); } -+ + + //=================================================================================================== + // Forge Start + //=================================================================================================== - ++ + private final java.util.Deque loadingSprites = new java.util.ArrayDeque<>(); + private final java.util.Set loadedSprites = new java.util.HashSet<>(); + diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index 10c73db6d..b87388a4a 100644 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -31,6 +31,7 @@ import java.nio.ByteBuffer; import java.nio.FloatBuffer; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.Map; import java.util.Optional; import java.util.Random; @@ -178,9 +179,9 @@ public class ForgeHooksClient return MinecraftForge.EVENT_BUS.post(new RenderSpecificHandEvent(hand, partialTicks, interpPitch, swingProgress, equipProgress, stack)); } - public static void onTextureStitchedPre(AtlasTexture map) + public static void onTextureStitchedPre(AtlasTexture map, Set resourceLocations) { - ModLoader.get().postEvent(new TextureStitchEvent.Pre(map)); + ModLoader.get().postEvent(new TextureStitchEvent.Pre(map, resourceLocations)); // ModelLoader.White.INSTANCE.register(map); // TODO Custom TAS ModelDynBucket.LoaderDynBucket.INSTANCE.register(map); } diff --git a/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java b/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java index 6051965f1..d36400e33 100644 --- a/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java +++ b/src/main/java/net/minecraftforge/client/event/TextureStitchEvent.java @@ -19,9 +19,12 @@ package net.minecraftforge.client.event; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.eventbus.api.Event; import net.minecraft.client.renderer.texture.AtlasTexture; +import java.util.Set; + public class TextureStitchEvent extends Event { @@ -38,17 +41,29 @@ public class TextureStitchEvent extends Event } /** - * Fired when the TextureMap is told to refresh it's stitched texture. - * Called after the Stitched list is cleared, but before any blocks or items - * add themselves to the list. + * Fired when the TextureMap is told to refresh it's stitched texture. + * Called before the {@link net.minecraft.client.renderer.texture.TextureAtlasSprite} are loaded. */ public static class Pre extends TextureStitchEvent { - public Pre(AtlasTexture map){ super(map); } + private final Set sprites; + + public Pre(AtlasTexture map, Set sprites) + { + super(map); + this.sprites = sprites; + } + + /** + * Add a sprite to be stitched into the Texture Atlas. + */ + public boolean addSprite(ResourceLocation sprite) { + return this.sprites.add(sprite); + } } /** - * This event is fired once the texture map has loaded all textures and + * This event is fired once the texture map has loaded all textures and * stitched them together. All Icons should have there locations defined * by the time this is fired. */