Search in sources :

Example 1 with DynamicTextureProper

use of micdoodle8.mods.galacticraft.core.client.DynamicTextureProper in project Galacticraft by micdoodle8.

the class MapUtil method getOverworldImageFromRaw.

@SideOnly(Side.CLIENT)
public static void getOverworldImageFromRaw(int cx, int cz, byte[] raw) throws IOException {
    File folder = MapUtil.getClientMapsFolder();
    if (raw.length == OVERWORLD_LARGEMAP_WIDTH * OVERWORLD_LARGEMAP_HEIGHT * 2) {
        if (folder != null) {
            File file0 = new File(folder, "overworldRaw.bin");
            if (!file0.exists() || (file0.canRead() && file0.canWrite())) {
                FileUtils.writeByteArrayToFile(file0, raw);
            } else {
                System.err.println("Cannot write to file %minecraft%/assets/galacticraftMaps/overworldRaw.bin");
            }
        } else {
            System.err.println("No folder for file %minecraft%/assets/galacticraftMaps/overworldRaw.bin");
        }
        // raw is a WIDTH_WORLD x HEIGHT_WORLD array of 2 byte entries: biome type followed by height
        // Here we will make a texture from that, but twice as large: 4 pixels for each data point, it just looks better that way when the texture is used
        BufferedImage worldImageLarge = new BufferedImage(OVERWORLD_LARGEMAP_WIDTH * 2, OVERWORLD_LARGEMAP_HEIGHT * 2, BufferedImage.TYPE_INT_RGB);
        ArrayList<Integer> cols = new ArrayList<Integer>();
        int lastcol = -1;
        int idx = 0;
        for (int x = 0; x < OVERWORLD_LARGEMAP_WIDTH; x++) {
            for (int z = 0; z < OVERWORLD_LARGEMAP_HEIGHT; z++) {
                int arrayIndex = (x * OVERWORLD_LARGEMAP_HEIGHT + z) * 2;
                int biome = ((int) raw[arrayIndex]) & 255;
                int height = ((int) raw[arrayIndex + 1]) & 255;
                if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) {
                    // Includes ponds, lakes and rivers in other biomes
                    biome = 0;
                }
                if (height < DEEP_OCEAN && biome == 0) {
                    biome = 24;
                }
                worldImageLarge.setRGB(x * 2, z * 2, convertBiomeColour(biome, height));
                worldImageLarge.setRGB(x * 2, z * 2 + 1, convertBiomeColour(biome, height));
                worldImageLarge.setRGB(x * 2 + 1, z * 2, convertBiomeColour(biome, height));
                worldImageLarge.setRGB(x * 2 + 1, z * 2 + 1, convertBiomeColour(biome, height));
            }
        }
        // Write it to a .jpg file on client for beta preview
        if (GalacticraftCore.enableJPEG && folder != null) {
            ImageOutputStream outputStream = new FileImageOutputStream(new File(folder, "large.jpg"));
            GalacticraftCore.jpgWriter.setOutput(outputStream);
            GalacticraftCore.jpgWriter.write(null, new IIOImage(worldImageLarge, null, null), GalacticraftCore.writeParam);
            outputStream.close();
        }
    } else // This is the dimensions of the Overworld texture map
    if (raw.length == OVERWORLD_TEXTURE_WIDTH * OVERWORLD_TEXTURE_HEIGHT * 2) {
        // raw is a WIDTH_STD x HEIGHT_STD array of 2 byte entries: biome type followed by height
        BufferedImage worldImage = new BufferedImage(OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT, BufferedImage.TYPE_INT_RGB);
        ArrayList<Integer> cols = new ArrayList<Integer>();
        int lastcol = -1;
        int idx = 0;
        for (int x = 0; x < OVERWORLD_TEXTURE_WIDTH; x++) {
            for (int z = 0; z < OVERWORLD_TEXTURE_HEIGHT; z++) {
                int arrayIndex = (x * OVERWORLD_TEXTURE_HEIGHT + z) * 2;
                int biome = ((int) raw[arrayIndex]) & 255;
                int height = ((int) raw[arrayIndex + 1]) & 255;
                if (height < OCEAN_HEIGHT && biome != 2 && biome != 10) {
                    // Includes ponds, lakes and rivers in other biomes
                    biome = 0;
                }
                if (height < DEEP_OCEAN && biome == 0) {
                    biome = 24;
                }
                worldImage.setRGB(x, z, convertBiomeColour(biome, height));
            }
        }
        IResourceManager rm = Minecraft.getMinecraft().getResourceManager();
        BufferedImage paletteImage = null;
        try {
            InputStream in = rm.getResource(new ResourceLocation(Constants.ASSET_PREFIX, "textures/gui/celestialbodies/earth.png")).getInputStream();
            paletteImage = ImageIO.read(in);
            in.close();
            paletteImage.getHeight();
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
        BufferedImage result = convertTo12pxTexture(worldImage, paletteImage);
        if (result != null) {
            if (ClientProxyCore.overworldTextureWide == null) {
                ClientProxyCore.overworldTextureWide = new DynamicTextureProper(OVERWORLD_TEXTURE_WIDTH, OVERWORLD_TEXTURE_HEIGHT);
            }
            if (ClientProxyCore.overworldTextureClient == null) {
                ClientProxyCore.overworldTextureClient = new DynamicTextureProper(OVERWORLD_TEXTURE_HEIGHT, OVERWORLD_TEXTURE_HEIGHT);
            }
            ClientProxyCore.overworldTextureWide.update(result);
            ClientProxyCore.overworldTextureClient.update(result);
            ClientProxyCore.overworldTexturesValid = true;
        }
    } else if (folder != null) {
        File file0 = makeFileName(folder, cx, cz);
        if (!file0.exists() || (file0.canRead() && file0.canWrite())) {
            FileUtils.writeByteArrayToFile(file0, raw);
        }
    } else {
        System.err.println("No folder %minecraft%/assets/galacticraftMaps for local map file.");
    }
}
Also used : FileImageOutputStream(javax.imageio.stream.FileImageOutputStream) ImageInputStream(javax.imageio.stream.ImageInputStream) InputStream(java.io.InputStream) DynamicTextureProper(micdoodle8.mods.galacticraft.core.client.DynamicTextureProper) BufferedImage(java.awt.image.BufferedImage) DataFormatException(java.util.zip.DataFormatException) IOException(java.io.IOException) ResourceLocation(net.minecraft.util.ResourceLocation) IResourceManager(net.minecraft.client.resources.IResourceManager) File(java.io.File) ImageOutputStream(javax.imageio.stream.ImageOutputStream) FileImageOutputStream(javax.imageio.stream.FileImageOutputStream) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Aggregations

BufferedImage (java.awt.image.BufferedImage)1 File (java.io.File)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 DataFormatException (java.util.zip.DataFormatException)1 FileImageOutputStream (javax.imageio.stream.FileImageOutputStream)1 ImageInputStream (javax.imageio.stream.ImageInputStream)1 ImageOutputStream (javax.imageio.stream.ImageOutputStream)1 DynamicTextureProper (micdoodle8.mods.galacticraft.core.client.DynamicTextureProper)1 IResourceManager (net.minecraft.client.resources.IResourceManager)1 ResourceLocation (net.minecraft.util.ResourceLocation)1 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)1