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.");
}
}
Aggregations