Skip to content

Commit

Permalink
made texture generation slightly saner
Browse files Browse the repository at this point in the history
  • Loading branch information
octarine-noise committed Jul 30, 2014
1 parent bd4a488 commit ffa8dd7
Show file tree
Hide file tree
Showing 11 changed files with 318 additions and 367 deletions.
51 changes: 15 additions & 36 deletions src/main/java/mods/betterfoliage/client/BetterFoliageClient.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package mods.betterfoliage.client;

import java.io.File;
import java.io.IOException;
import java.util.Map;

import mods.betterfoliage.BetterFoliage;
Expand All @@ -13,13 +12,12 @@
import mods.betterfoliage.client.render.impl.RenderBlockBetterLeaves;
import mods.betterfoliage.client.render.impl.RenderBlockBetterLilypad;
import mods.betterfoliage.client.render.impl.RenderBlockBetterReed;
import mods.betterfoliage.client.resource.BlockTextureGenerator;
import mods.betterfoliage.client.resource.HalfTextureResource;
import mods.betterfoliage.client.resource.LeafTextureGenerator;
import mods.betterfoliage.client.resource.ShortGrassTextureResource;
import mods.betterfoliage.client.resource.LeafGenerator;
import mods.betterfoliage.client.resource.LeafTextureEnumerator;
import mods.betterfoliage.client.resource.ReedGenerator;
import mods.betterfoliage.client.resource.ShortGrassGenerator;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.resources.IResource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.MinecraftForge;
Expand All @@ -32,11 +30,13 @@
public class BetterFoliageClient {

public static Map<Integer, IRenderBlockDecorator> decorators = Maps.newHashMap();
public static LeafTextureGenerator leafGenerator;
public static LeafGenerator leafGenerator;

public static BlockMatcher leaves = new BlockMatcher();
public static BlockMatcher crops = new BlockMatcher();

public static ResourceLocation missingTexture = new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png");

public static void preInit() {
FMLCommonHandler.instance().bus().register(new KeyHandler());

Expand All @@ -55,36 +55,15 @@ public static void preInit() {
crops.load(new File(BetterFoliage.configDir, "classesCrops.cfg"), new ResourceLocation("betterfoliage:classesCropsDefault.cfg"));
MinecraftForge.EVENT_BUS.register(crops);

BetterFoliage.log.info("Registering leaf texture generator");
leafGenerator = new LeafTextureGenerator();
MinecraftForge.EVENT_BUS.register(leafGenerator);

MinecraftForge.EVENT_BUS.register(new BlockTextureGenerator("bf_reed_bottom", new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png")) {
@Override
public IResource getResource(ResourceLocation var1) throws IOException {
return new HalfTextureResource(unwrapResource(var1), true, getMissingResource());
}
});
MinecraftForge.EVENT_BUS.register(new BlockTextureGenerator("bf_reed_top", new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png")) {
@Override
public IResource getResource(ResourceLocation var1) throws IOException {
return new HalfTextureResource(unwrapResource(var1), false, getMissingResource());
}
});
MinecraftForge.EVENT_BUS.register(new BlockTextureGenerator("bf_shortgrass", new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png")) {
@Override
public IResource getResource(ResourceLocation var1) throws IOException {
return new ShortGrassTextureResource(unwrapResource(var1), false, getMissingResource());
}
});
MinecraftForge.EVENT_BUS.register(new BlockTextureGenerator("bf_shortgrass_snow", new ResourceLocation("betterfoliage", "textures/blocks/missing_leaf.png")) {
@Override
public IResource getResource(ResourceLocation var1) throws IOException {
return new ShortGrassTextureResource(unwrapResource(var1), true, getMissingResource());
}
});
MinecraftForge.EVENT_BUS.register(new LeafTextureEnumerator("bf_leaves"));

MinecraftForge.EVENT_BUS.register(new BetterFoliageClient());
BetterFoliage.log.info("Registering texture generators");
leafGenerator = new LeafGenerator("bf_leaves", missingTexture);
MinecraftForge.EVENT_BUS.register(leafGenerator);
MinecraftForge.EVENT_BUS.register(new ReedGenerator("bf_reed_bottom", missingTexture, true));
MinecraftForge.EVENT_BUS.register(new ReedGenerator("bf_reed_top", missingTexture, false));
MinecraftForge.EVENT_BUS.register(new ShortGrassGenerator("bf_shortgrass", missingTexture, false));
MinecraftForge.EVENT_BUS.register(new ShortGrassGenerator("bf_shortgrass_snow", missingTexture, true));

ShadersModIntegration.init();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.util.ResourceLocation;

public class ShadersModIntegration {

Expand Down Expand Up @@ -52,4 +53,8 @@ public static int getBlockIdOverride(int original, Block block) {
if (BetterFoliageClient.crops.matchesID(original & 0xFFFF)) return tallGrassEntityData;
return original;
}

public static boolean isSpecialTexture(ResourceLocation resource) {
return resource.getResourcePath().toLowerCase().endsWith("_n.png") || resource.getResourcePath().toLowerCase().endsWith("_s.png");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,32 +33,22 @@ public abstract class BlockTextureGenerator implements IResourceManager {
/** Texture atlas for block textures used in the current run */
public TextureMap blockTextures;

/** Number of textures generated in the current run */
int counter = 0;

public BlockTextureGenerator(String domainName, ResourceLocation missingResource) {
this.domainName = domainName;
this.missingResource = missingResource;
}

public void onStitchStart(TextureStitchEvent.Pre event) {}

public void onStitchEnd(TextureStitchEvent.Post event) {}

@SubscribeEvent
public void handleTextureReload(TextureStitchEvent.Pre event) {
if (event.map.getTextureType() != 0) return;

blockTextures = event.map;
counter = 0;

Map<String, IResourceManager> domainManagers = Utils.getDomainResourceManagers();
if (domainManagers == null) {
BetterFoliage.log.warn("Failed to inject texture generator");
return;
}
domainManagers.put(domainName, this);

onStitchStart(event);
}

@SubscribeEvent
Expand All @@ -69,8 +59,6 @@ public void endTextureReload(TextureStitchEvent.Post event) {
// don't leave a mess
Map<String, IResourceManager> domainManagers = Utils.getDomainResourceManagers();
if (domainManagers != null) domainManagers.remove(domainName);

onStitchEnd(event);
}

public Set<String> getResourceDomains() {
Expand All @@ -88,4 +76,13 @@ public IResource getMissingResource() throws IOException {
public ResourceLocation unwrapResource(ResourceLocation wrapped) {
return new ResourceLocation(wrapped.getResourcePath().substring(16));
}

protected static int blendRGB(int rgbOrig, int rgbBlend, int weightOrig, int weightBlend) {
int r = ((rgbOrig & 0xFF) * weightOrig + (rgbBlend & 0xFF) * weightBlend) / (weightOrig + weightBlend);
int g = (((rgbOrig >> 8) & 0xFF) * weightOrig + ((rgbBlend >> 8) & 0xFF) * weightBlend) / (weightOrig + weightBlend);
int b = (((rgbOrig >> 16) & 0xFF) * weightOrig + ((rgbBlend >> 16) & 0xFF) * weightBlend) / (weightOrig + weightBlend);
int a = (rgbOrig >> 24) & 0xFF;
int result = (int) (a << 24 | b << 16 | g << 8 | r);
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package mods.betterfoliage.client.resource;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;

import net.minecraft.client.resources.IResource;
import net.minecraft.client.resources.data.IMetadataSection;

public class BufferedImageResource implements IResource {

/** Raw PNG data*/
protected byte[] data = null;

public BufferedImageResource(BufferedImage image) {
// create PNG image
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "PNG", baos);
data = baos.toByteArray();
} catch (IOException e) {
}
}

@Override
public InputStream getInputStream() {
return data == null ? null : new ByteArrayInputStream(data);
}

@Override
public boolean hasMetadata() {
return false;
}

@Override
public IMetadataSection getMetadata(String var1) {
return null;
}

}

This file was deleted.

Loading

0 comments on commit ffa8dd7

Please sign in to comment.