Added the basics for the new dirt types. Farmland is yet to be added, and appropriate behaviours for sheep also need to be made
|
@ -41,7 +41,9 @@ public class BOPCBlocks
|
|||
public static Block overgrownNetherrack;
|
||||
|
||||
public static Block bopGrass;
|
||||
|
||||
public static Block newBopGrass;
|
||||
public static Block newBopDirt;
|
||||
|
||||
public static Block logs1;
|
||||
public static Block logs2;
|
||||
|
|
|
@ -5,11 +5,14 @@ import net.minecraft.client.Minecraft;
|
|||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import biomesoplenty.api.content.BOPCBlocks;
|
||||
|
||||
public class RenderUtils
|
||||
{
|
||||
public static int foliageModel = -1;
|
||||
|
@ -21,38 +24,57 @@ public class RenderUtils
|
|||
|
||||
public static void renderStandardInvBlock(RenderBlocks renderblocks, Block block, int meta)
|
||||
{
|
||||
boolean flag = block == BOPCBlocks.newBopGrass;
|
||||
|
||||
GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F);
|
||||
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(0.0F, -1F, 0.0F);
|
||||
//TODO: renderFaceYNeg getIcon()
|
||||
renderblocks.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(0, meta));
|
||||
tessellator.draw();
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(0.0F, 1.0F, 0.0F);
|
||||
//TODO: renderFaceYPos getIcon()
|
||||
renderblocks.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(1, meta));
|
||||
tessellator.draw();
|
||||
|
||||
if (flag && renderblocks.useInventoryTint)
|
||||
{
|
||||
int colour = 16777215;
|
||||
|
||||
float f1 = (float)(colour >> 16 & 255) / 255.0F;
|
||||
float f2 = (float)(colour >> 8 & 255) / 255.0F;
|
||||
float f3 = (float)(colour & 255) / 255.0F;
|
||||
GL11.glColor4f(f1, f2, f3, 1.0F);
|
||||
}
|
||||
|
||||
if (!flag)
|
||||
{
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(0.0F, 1.0F, 0.0F);
|
||||
renderblocks.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(1, meta));
|
||||
tessellator.draw();
|
||||
}
|
||||
|
||||
GL11.glColor4f(1F, 1F, 1F, 1.0F);
|
||||
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(0.0F, 0.0F, -1F);
|
||||
//TODO: renderFaceZNeg getIcon()
|
||||
renderblocks.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(2, meta));
|
||||
tessellator.draw();
|
||||
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(0.0F, 0.0F, 1.0F);
|
||||
//TODO: renderFaceZPos getIcon()
|
||||
renderblocks.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(3, meta));
|
||||
tessellator.draw();
|
||||
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(-1F, 0.0F, 0.0F);
|
||||
//TODO: renderFaceXNeg getIcon()
|
||||
renderblocks.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(4, meta));
|
||||
tessellator.draw();
|
||||
|
||||
tessellator.startDrawingQuads();
|
||||
tessellator.setNormal(1.0F, 0.0F, 0.0F);
|
||||
//TODO: renderFaceXPos getIcon()
|
||||
renderblocks.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(5, meta));
|
||||
tessellator.draw();
|
||||
|
||||
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package biomesoplenty.client.render.blocks;
|
||||
|
||||
import biomesoplenty.client.render.RenderUtils;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import biomesoplenty.api.content.BOPCBlocks;
|
||||
import biomesoplenty.client.render.RenderUtils;
|
||||
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
||||
|
||||
public class RenderNewGrass implements ISimpleBlockRenderingHandler
|
||||
|
@ -12,12 +16,27 @@ public class RenderNewGrass implements ISimpleBlockRenderingHandler
|
|||
@Override
|
||||
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
float inset = 0.0001F;
|
||||
|
||||
renderer.setRenderBounds(inset, inset, inset, 1F - inset, 1F - inset, 1F - inset);
|
||||
RenderUtils.renderStandardInvBlock(renderer, Blocks.grass, 0);
|
||||
|
||||
renderer.setRenderBounds(0F, 0F, 0F, 1F, 1F, 1F);
|
||||
RenderUtils.renderStandardInvBlock(renderer, block, metadata);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
|
||||
{
|
||||
renderer.renderStandardBlock(Blocks.grass, x, y, z);
|
||||
if (renderer.hasOverrideBlockTexture())
|
||||
{
|
||||
renderer.renderBlockUsingTexture(Blocks.grass, x, y, z, renderer.overrideBlockTexture);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderer.renderStandardBlock(Blocks.grass, x, y, z);
|
||||
renderer.renderStandardBlock(block, x, y, z);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,97 @@
|
|||
package biomesoplenty.common.blocks;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import biomesoplenty.BiomesOPlenty;
|
||||
import biomesoplenty.common.utils.ISubLocalization;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockDirt;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
|
||||
public class BlockBOPNewDirt extends BlockDirt implements ISubLocalization
|
||||
{
|
||||
private static final String[] dirtTypes = new String[] { "loamy", "sandy", "silty" };
|
||||
private static final IIcon[] dirtIcons = new IIcon[dirtTypes.length * 2];
|
||||
|
||||
public BlockBOPNewDirt()
|
||||
{
|
||||
this.setHardness(0.5F);
|
||||
this.setHarvestLevel("shovel", 0);
|
||||
|
||||
this.setStepSound(soundTypeGravel);
|
||||
|
||||
this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta)
|
||||
{
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(String baseName, ItemStack itemStack)
|
||||
{
|
||||
int meta = itemStack.getItemDamage();
|
||||
|
||||
return baseName + "." + (isCoarseDirt(meta) ? "coarse_dirt_" : "dirt_") + getBaseType(meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubBlocks(Item block, CreativeTabs creativeTab, List blockList)
|
||||
{
|
||||
for (int i = 0; i < dirtTypes.length * 2; i++)
|
||||
{
|
||||
blockList.add(new ItemStack(block, 1, i));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconRegister)
|
||||
{
|
||||
for (int i = 0; i < dirtTypes.length; i++)
|
||||
{
|
||||
String dirtType = dirtTypes[i];
|
||||
|
||||
dirtIcons[i * 2 + 0] = iconRegister.registerIcon("biomesoplenty:dirt_" + dirtType);
|
||||
dirtIcons[i * 2 + 1] = iconRegister.registerIcon("biomesoplenty:coarse_dirt_" + dirtType);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta)
|
||||
{
|
||||
return dirtIcons[meta];
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
return this.getIcon(side, meta);
|
||||
}
|
||||
|
||||
private boolean isCoarseDirt(int meta)
|
||||
{
|
||||
return (meta & 1) != 0;
|
||||
}
|
||||
|
||||
private String getBaseType(int meta)
|
||||
{
|
||||
return dirtTypes[(meta - (meta & 1)) / 2];
|
||||
}
|
||||
}
|
|
@ -1,17 +1,31 @@
|
|||
package biomesoplenty.common.blocks;
|
||||
|
||||
import static net.minecraftforge.common.util.ForgeDirection.UP;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import biomesoplenty.BiomesOPlenty;
|
||||
import biomesoplenty.api.content.BOPCBlocks;
|
||||
import biomesoplenty.client.render.RenderUtils;
|
||||
import biomesoplenty.common.utils.ISubLocalization;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockBush;
|
||||
import net.minecraft.block.BlockGrass;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.EnumPlantType;
|
||||
import net.minecraftforge.common.IPlantable;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class BlockBOPNewGrass extends BlockGrass implements ISubLocalization
|
||||
{
|
||||
|
@ -20,9 +34,145 @@ public class BlockBOPNewGrass extends BlockGrass implements ISubLocalization
|
|||
|
||||
public BlockBOPNewGrass()
|
||||
{
|
||||
this.setHardness(0.6F);
|
||||
this.setHarvestLevel("shovel", 0);
|
||||
|
||||
this.setStepSound(soundTypeGrass);
|
||||
|
||||
this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int x, int y, int z, Random random)
|
||||
{
|
||||
if (!world.isRemote)
|
||||
{
|
||||
if (world.getBlockLightValue(x, y + 1, z) < 4 && world.getBlockLightOpacity(x, y + 1, z) > 2)
|
||||
{
|
||||
world.setBlock(x, y, z, BOPCBlocks.newBopDirt, world.getBlockMetadata(x, y, z) * 2, 2);
|
||||
}
|
||||
else if (world.getBlockLightValue(x, y + 1, z) >= 9)
|
||||
{
|
||||
for (int l = 0; l < 4; ++l)
|
||||
{
|
||||
int randX = x + random.nextInt(3) - 1;
|
||||
int randY = y + random.nextInt(5) - 3;
|
||||
int randZ = z + random.nextInt(3) - 1;
|
||||
|
||||
Block block = world.getBlock(randX, randY + 1, randZ);
|
||||
|
||||
if (world.getBlockLightValue(randX, randY + 1, randZ) >= 4 && world.getBlockLightOpacity(randX, randY + 1, randZ) <= 2)
|
||||
{
|
||||
if (world.getBlock(randX, randY, randZ) == Blocks.dirt && world.getBlockMetadata(randX, randY, randZ) == 0)
|
||||
{
|
||||
world.setBlock(randX, randY, randZ, Blocks.grass);
|
||||
}
|
||||
else if (world.getBlock(randX, randY, randZ) == BOPCBlocks.newBopDirt)
|
||||
{
|
||||
int dirtMeta = world.getBlockMetadata(randX, randY, randZ);
|
||||
|
||||
world.setBlock(randX, randY, randZ, BOPCBlocks.newBopGrass, (dirtMeta - (dirtMeta & 1)) / 2, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable)
|
||||
{
|
||||
Block plant = plantable.getPlant(world, x, y + 1, z);
|
||||
EnumPlantType plantType = plantable.getPlantType(world, x, y + 1, z);
|
||||
|
||||
switch (plantType)
|
||||
{
|
||||
case Cave: return isSideSolid(world, x, y, z, UP);
|
||||
case Plains: return true;
|
||||
case Beach:
|
||||
boolean hasWater = (world.getBlock(x - 1, y, z ).getMaterial() == Material.water ||
|
||||
world.getBlock(x + 1, y, z ).getMaterial() == Material.water ||
|
||||
world.getBlock(x, y, z - 1).getMaterial() == Material.water ||
|
||||
world.getBlock(x, y, z + 1).getMaterial() == Material.water);
|
||||
return hasWater;
|
||||
}
|
||||
|
||||
return super.canSustainPlant(world, x, y, z, direction, plantable);
|
||||
}
|
||||
|
||||
@Override
|
||||
// onApplyBonemeal - Dodgy Name
|
||||
public void func_149853_b(World world, Random random, int x, int y, int z)
|
||||
{
|
||||
int l = 0;
|
||||
|
||||
while (l < 128)
|
||||
{
|
||||
int i1 = x;
|
||||
int j1 = y + 1;
|
||||
int k1 = z;
|
||||
int l1 = 0;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (l1 < l / 16)
|
||||
{
|
||||
i1 += random.nextInt(3) - 1;
|
||||
j1 += (random.nextInt(3) - 1) * random.nextInt(3) / 2;
|
||||
k1 += random.nextInt(3) - 1;
|
||||
|
||||
if (world.getBlock(i1, j1 - 1, k1) == BOPCBlocks.newBopGrass && !world.getBlock(i1, j1, k1).isNormalCube())
|
||||
{
|
||||
++l1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (world.getBlock(i1, j1, k1).getMaterial() == Material.air)
|
||||
{
|
||||
if (random.nextInt(8) != 0)
|
||||
{
|
||||
if (Blocks.tallgrass.canBlockStay(world, i1, j1, k1))
|
||||
{
|
||||
world.setBlock(i1, j1, k1, Blocks.tallgrass, 1, 3);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
world.getBiomeGenForCoords(i1, k1).plantFlower(world, random, i1, j1, k1);
|
||||
}
|
||||
}
|
||||
|
||||
++l;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlantGrow(World world, int x, int y, int z, int sourceX, int sourceY, int sourceZ)
|
||||
{
|
||||
world.setBlock(x, y, z, BOPCBlocks.newBopDirt, world.getBlockMetadata(x, y, z) * 2, 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int metadata, Random random, int fortune)
|
||||
{
|
||||
return BOPCBlocks.newBopDirt.getItemDropped(metadata * 2, random, fortune);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int metadata)
|
||||
{
|
||||
return metadata * 2;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(String baseName, ItemStack itemStack)
|
||||
{
|
||||
return baseName + "." + grassTypes[itemStack.getItemDamage()];
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock()
|
||||
{
|
||||
|
@ -35,12 +185,16 @@ public class BlockBOPNewGrass extends BlockGrass implements ISubLocalization
|
|||
return RenderUtils.newGrassModel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(String baseName, ItemStack itemStack)
|
||||
{
|
||||
return baseName + "." + grassTypes[itemStack.getItemDamage()];
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubBlocks(Item block, CreativeTabs creativeTab, List blockList)
|
||||
{
|
||||
for (int i = 0; i < grassTypes.length; i++)
|
||||
{
|
||||
blockList.add(new ItemStack(block, 1, i));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconRegister)
|
||||
|
@ -58,7 +212,7 @@ public class BlockBOPNewGrass extends BlockGrass implements ISubLocalization
|
|||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta)
|
||||
{
|
||||
return side == 1 ? Blocks.grass.getIcon(side, meta) : grassIcons[meta];
|
||||
return side == 1 ? Blocks.grass.getIcon(side, meta) : side == 0 ? BOPCBlocks.newBopDirt.getIcon(side, meta * 2) : grassIcons[2 * meta];
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -67,15 +221,18 @@ public class BlockBOPNewGrass extends BlockGrass implements ISubLocalization
|
|||
{
|
||||
int meta = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if (side == 1)
|
||||
if (side == 0)
|
||||
{
|
||||
return BOPCBlocks.newBopDirt.getIcon(side, meta * 2);
|
||||
}
|
||||
else if (side == 1)
|
||||
{
|
||||
return Blocks.grass.getIcon(world, x, y, z, side);
|
||||
}
|
||||
else
|
||||
{
|
||||
Material material = world.getBlock(x, y + 1, z).getMaterial();
|
||||
return material != Material.snow && material != Material.craftedSnow ? grassIcons[meta] : grassIcons[meta + 1];
|
||||
return material != Material.snow && material != Material.craftedSnow ? grassIcons[2 * meta] : grassIcons[2 * meta + 1];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import biomesoplenty.common.blocks.BlockBOPLeaves.LeafCategory;
|
|||
import biomesoplenty.common.blocks.BlockBOPLog;
|
||||
import biomesoplenty.common.blocks.BlockBOPLog.LogCategory;
|
||||
import biomesoplenty.common.blocks.BlockBOPMushroom;
|
||||
import biomesoplenty.common.blocks.BlockBOPNewDirt;
|
||||
import biomesoplenty.common.blocks.BlockBOPNewGrass;
|
||||
import biomesoplenty.common.blocks.BlockBOPPersimmonLeaves;
|
||||
import biomesoplenty.common.blocks.BlockBOPPetals;
|
||||
|
@ -135,7 +136,9 @@ public class BOPBlocks
|
|||
overgrownNetherrack = registerBlock(new BlockOvergrownNetherrack().setBlockName("overgrownNetherrack"));
|
||||
|
||||
bopGrass = registerBlock(new BlockBOPGrass().setBlockName("bopGrass"), ItemBlockGrass.class);
|
||||
|
||||
newBopGrass = registerMetadataBlock(new BlockBOPNewGrass().setBlockName("newBopGrass"));
|
||||
newBopDirt = registerMetadataBlock(new BlockBOPNewDirt().setBlockName("newBopDirt"));
|
||||
|
||||
logs1 = registerBlock(new BlockBOPLog(LogCategory.CAT1).setBlockName("logs1"), ItemBlockLog.class);
|
||||
logs2 = registerBlock(new BlockBOPLog(LogCategory.CAT2).setBlockName("logs2"), ItemBlockLog.class);
|
||||
|
|
|
@ -137,12 +137,15 @@ tile.coral1.bluecoral.name=Blue Coral
|
|||
tile.coral1.glowcoral.name=Glowing Coral
|
||||
tile.coral2.algae.name=Algae
|
||||
|
||||
tile.soil.grass_silty.name=Silty Grass Block
|
||||
tile.soil.grass_sandy.name=Sandy Grass Block
|
||||
tile.soil.grass_loamy.name=Loamy Grass Block
|
||||
tile.soil.dirt_silty.name=Silty Dirt
|
||||
tile.soil.dirt_sandy.name=Sandy Dirt
|
||||
tile.soil.dirt_loamy.name=Loamy Dirt
|
||||
tile.newBopGrass.silty.name=Silty Grass Block
|
||||
tile.newBopGrass.sandy.name=Sandy Grass Block
|
||||
tile.newBopGrass.loamy.name=Loamy Grass Block
|
||||
tile.newBopDirt.dirt_silty.name=Silty Dirt
|
||||
tile.newBopDirt.dirt_sandy.name=Sandy Dirt
|
||||
tile.newBopDirt.dirt_loamy.name=Loamy Dirt
|
||||
tile.newBopDirt.coarse_dirt_silty.name=Coarse Silty Dirt
|
||||
tile.newBopDirt.coarse_dirt_sandy.name=Coarse Sandy Dirt
|
||||
tile.newBopDirt.coarse_dirt_loamy.name=Coarse Loamy Dirt
|
||||
|
||||
tile.bopGrass.spectralmoss.name=Spectral Moss
|
||||
tile.bopGrass.smolderinggrass.name=Smoldering Grass Block
|
||||
|
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 339 B |
Before Width: | Height: | Size: 338 B After Width: | Height: | Size: 338 B |
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 344 B After Width: | Height: | Size: 344 B |
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 343 B |
Before Width: | Height: | Size: 343 B After Width: | Height: | Size: 343 B |
After Width: | Height: | Size: 598 B |