Support up to 16 icons for every feature

This commit is contained in:
octarine-noise
2014-07-05 13:08:10 +02:00
parent 1be2382fed
commit 44a20ceab3
6 changed files with 200 additions and 85 deletions

View File

@@ -11,22 +11,17 @@ import mods.betterfoliage.client.BetterFoliageClient;
import mods.betterfoliage.common.util.DeobfNames;
import mods.betterfoliage.common.util.ReflectionUtil;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.resources.IResource;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.event.TextureStitchEvent.Post;
import net.minecraftforge.client.event.TextureStitchEvent.Pre;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@@ -34,41 +29,22 @@ import cpw.mods.fml.relauncher.SideOnly;
* @author octarine-noise
*/
@SideOnly(Side.CLIENT)
public class LeafTextureGenerator implements IIconRegister, IResourceManager {
public class LeafTextureGenerator extends BlockTextureGenerator implements IIconRegister {
/** Resource domain name of autogenerated crossleaf textures */
public String domainName = "bf_leaves_autogen";
/** Resource location for fallback texture (if the generation process fails) */
public ResourceLocation missing_resource = new ResourceLocation("betterfoliage", "textures/blocks/missingleaf.png");
/** Texture atlas for block textures used in the current run */
public TextureMap blockTextures;
/** List of helpers which can identify leaf textures loaded by alternate means */
public List<ILeafTextureRecognizer> recognizers = Lists.newLinkedList();
/** Number of textures generated in the current run */
int counter = 0;
public Set<String> getResourceDomains() {
return ImmutableSet.<String>of(domainName);
public LeafTextureGenerator() {
super("bf_leaves_autogen", new ResourceLocation("betterfoliage", "textures/blocks/missingleaf.png"));
}
/** List of helpers which can identify leaf textures loaded by alternate means */
public List<ILeafTextureRecognizer> recognizers = Lists.newLinkedList();
public IResource getResource(ResourceLocation resourceLocation) throws IOException {
// remove "/blocks/textures/" from beginning
String origResPath = resourceLocation.getResourcePath().substring(16);
LeafTextureResource result = new LeafTextureResource(new ResourceLocation(origResPath));
if (result.data == null) {
return Minecraft.getMinecraft().getResourceManager().getResource(missing_resource);
} else {
LeafTextureResource result = new LeafTextureResource(unwrapResource(resourceLocation));
if (result.data != null) {
counter++;
return result;
}
}
public List<IResource> getAllResources(ResourceLocation resource) throws IOException {
return ImmutableList.<IResource>of();
return getMissingResource();
}
/** Leaf blocks register their textures here. An extra texture will be registered in the atlas
@@ -87,21 +63,10 @@ public class LeafTextureGenerator implements IIconRegister, IResourceManager {
* @param event
*/
@SuppressWarnings("unchecked")
@SubscribeEvent
public void handleTextureReload(TextureStitchEvent.Pre event) {
if (event.map.getTextureType() != 0) return;
blockTextures = event.map;
counter = 0;
@Override
public void onStitchStart(Pre event) {
BetterFoliage.log.info("Reloading leaf textures");
Map<String, IResourceManager> domainManagers = ReflectionUtil.getDomainResourceManagers();
if (domainManagers == null) {
BetterFoliage.log.warn("Failed to inject leaf texture generator");
return;
}
domainManagers.put(domainName, this);
// register simple block textures
Iterator<Block> iter = Block.blockRegistry.iterator();
while(iter.hasNext()) {
@@ -130,18 +95,10 @@ public class LeafTextureGenerator implements IIconRegister, IResourceManager {
}
}
}
@SubscribeEvent
public void endTextureReload(TextureStitchEvent.Post event) {
blockTextures = null;
if (event.map.getTextureType() == 0) {
BetterFoliage.log.info(String.format("Generated %d leaf textures", counter));
// don't leave a mess
Map<String, IResourceManager> domainManagers = ReflectionUtil.getDomainResourceManagers();
if (domainManagers == null) return;
domainManagers.remove(domainName);
}
@Override
public void onStitchEnd(Post event) {
BetterFoliage.log.info(String.format("Generated %d leaf textures", counter));
}
}