feat: add reinforced tank and base stuff for wood apparati
|
@ -3,20 +3,24 @@ package net.anvilcraft.thaummach;
|
|||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusFragile;
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusMetal;
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusWood;
|
||||
import net.anvilcraft.thaummach.blocks.BlockSeal;
|
||||
import net.anvilcraft.thaummach.items.ItemBlockApparatusFragile;
|
||||
import net.anvilcraft.thaummach.items.ItemBlockApparatusMetal;
|
||||
import net.anvilcraft.thaummach.items.ItemBlockApparatusWood;
|
||||
import net.anvilcraft.thaummach.items.ItemSeal;
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public class TMBlocks {
|
||||
public static Block apparatusFragile;
|
||||
public static Block apparatusMetal;
|
||||
public static Block apparatusWood;
|
||||
public static Block seal;
|
||||
|
||||
public static void init() {
|
||||
apparatusFragile = new BlockApparatusFragile();
|
||||
apparatusMetal = new BlockApparatusMetal();
|
||||
apparatusWood = new BlockApparatusWood();
|
||||
seal = new BlockSeal();
|
||||
|
||||
GameRegistry.registerBlock(
|
||||
|
@ -25,6 +29,9 @@ public class TMBlocks {
|
|||
GameRegistry.registerBlock(
|
||||
apparatusMetal, ItemBlockApparatusMetal.class, "apparatus_metal"
|
||||
);
|
||||
GameRegistry.registerBlock(
|
||||
apparatusWood, ItemBlockApparatusWood.class, "apparatus_wood"
|
||||
);
|
||||
GameRegistry.registerBlock(seal, ItemSeal.class, "seal");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -396,6 +396,7 @@ public class BlockApparatusFragile extends BlockApparatus {
|
|||
return BlockApparatusRenderer.RI;
|
||||
}
|
||||
|
||||
// TODO: WTF
|
||||
//public int getBlockTextureFromSide(int i) {
|
||||
// return 15;
|
||||
//}
|
||||
|
|
|
@ -13,6 +13,7 @@ import net.anvilcraft.thaummach.render.apparatus.apparati.metal.BoreApparatusRen
|
|||
import net.anvilcraft.thaummach.render.apparatus.apparati.metal.CrucibleApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.render.apparatus.apparati.metal.CrystallizerApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.render.apparatus.apparati.metal.SoulBrazierApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.render.apparatus.apparati.metal.TankApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.render.apparatus.apparati.metal.VoidChestApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.render.apparatus.apparati.metal.VoidInterfaceApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.tiles.TileArcaneFurnace;
|
||||
|
@ -70,6 +71,8 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
public IIcon iconSoulCrucibleFace3;
|
||||
public IIcon iconSoulCrucibleTop;
|
||||
public IIcon iconSoulCrucibleTopInv;
|
||||
public IIcon iconTankBottom;
|
||||
public IIcon iconTankSide;
|
||||
public IIcon iconVoidChestBottom;
|
||||
public IIcon iconVoidChestSide;
|
||||
public IIcon iconVoidChestSideTransparent;
|
||||
|
@ -114,6 +117,8 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
this.iconSoulCrucibleFace3 = reg.registerIcon("thaummach:soul_crucible_face_3");
|
||||
this.iconSoulCrucibleTop = reg.registerIcon("thaummach:soul_crucible_top");
|
||||
this.iconSoulCrucibleTopInv = reg.registerIcon("thaummach:soul_crucible_top_inv");
|
||||
this.iconTankBottom = reg.registerIcon("thaummach:reinforced_tank_bottom");
|
||||
this.iconTankSide = reg.registerIcon("thaummach:reinforced_tank_side");
|
||||
this.iconVoidChestBottom = reg.registerIcon("thaummach:void_chest_bottom");
|
||||
this.iconVoidChestSide = reg.registerIcon("thaummach:void_chest_side");
|
||||
this.iconVoidChestSideTransparent
|
||||
|
@ -172,6 +177,9 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
case SOUL_BRAZIER:
|
||||
return SoulBrazierApparatusRenderer.INSTANCE;
|
||||
|
||||
case TANK:
|
||||
return TankApparatusRenderer.INSTANCE;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -342,12 +350,9 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
return side == 1 ? this.iconVoidInterfaceBottom
|
||||
: this.iconVoidInterfaceSide;
|
||||
}
|
||||
} else if (meta == MetaVals.TANK) {
|
||||
return side <= 1 ? this.iconTankBottom : this.iconTankSide;
|
||||
}
|
||||
// else if (meta == 10) {
|
||||
// return side <= 1 ? 78 : 79;
|
||||
//} else {
|
||||
// return super.getBlockTexture(iblockaccess, i, j, k, side);
|
||||
//}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -796,18 +801,17 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
isProvidingStrongPower(IBlockAccess iblockaccess, int i, int j, int k, int l) {
|
||||
MetaVals meta = MetaVals.get(iblockaccess.getBlockMetadata(i, j, k));
|
||||
if (meta == MetaVals.EYES_CRUCIBLE || meta == MetaVals.THAUMIUM_CRUCIBLE) {
|
||||
// TODO: crucibles
|
||||
//TileCrucible data = (TileCrucible) iblockaccess.getTileEntity(i, j, k);
|
||||
//if (l == 1) {
|
||||
// TileEntity below = iblockaccess.getTileEntity(i, j - 1, k);
|
||||
// if (below != null && below instanceof TileArcaneFurnace) {
|
||||
// return 0;
|
||||
// }
|
||||
//}
|
||||
TileCrucible data = (TileCrucible) iblockaccess.getTileEntity(i, j, k);
|
||||
if (l == 1) {
|
||||
TileEntity below = iblockaccess.getTileEntity(i, j - 1, k);
|
||||
if (below != null && below instanceof TileArcaneFurnace) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
//if (data.isPowering) {
|
||||
// return 15;
|
||||
//}
|
||||
if (data.isPowering) {
|
||||
return 15;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -840,14 +844,11 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
}
|
||||
|
||||
if (meta.isCrucible()) {
|
||||
// TODO: crucibles
|
||||
//TileCrucible data = (TileCrucible) world.getTileEntity(i, j, k);
|
||||
//data.bellows = bellows;
|
||||
TileCrucible data = (TileCrucible) world.getTileEntity(i, j, k);
|
||||
data.bellows = bellows;
|
||||
} else if (meta == MetaVals.ARCANE_FURNACE) {
|
||||
// TODO: arcane furnace
|
||||
//TileArcaneFurnace data
|
||||
// = (TileArcaneFurnace) world.getTileEntity(i, j, k);
|
||||
//data.bellows = bellows;
|
||||
TileArcaneFurnace data = (TileArcaneFurnace) world.getTileEntity(i, j, k);
|
||||
data.bellows = bellows;
|
||||
} else {
|
||||
if (meta == MetaVals.VOID_INTERFACE
|
||||
&& (world.getBlock(i, j - 1, k) != this
|
||||
|
@ -867,12 +868,11 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
} else {
|
||||
TileEntity tsb;
|
||||
if (md == MetaVals.ARCANE_FURNACE) {
|
||||
// TODO: arcane furnace
|
||||
//tsb = iba.getTileEntity(i, j, k);
|
||||
//return tsb != null && tsb instanceof TileArcaneFurnace
|
||||
// && ((TileArcaneFurnace) tsb).isWorking()
|
||||
// ? 13
|
||||
// : 0;
|
||||
tsb = iba.getTileEntity(i, j, k);
|
||||
return tsb != null && tsb instanceof TileArcaneFurnace
|
||||
&& ((TileArcaneFurnace) tsb).isWorking()
|
||||
? 13
|
||||
: 0;
|
||||
} else if (md == MetaVals.SOUL_BRAZIER) {
|
||||
tsb = iba.getTileEntity(i, j, k);
|
||||
return tsb != null && tsb instanceof TileSoulBrazier
|
||||
|
@ -883,65 +883,8 @@ public class BlockApparatusMetal extends BlockApparatus {
|
|||
return super.getLightValue(iba, i, j, k);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//@Override
|
||||
//public boolean renderAppMetalBlock(
|
||||
// World w, RenderBlocks rb, int i, int j, int k, Block block, boolean inv, int md
|
||||
//) {
|
||||
// if (md == -9) {
|
||||
// md = w.getBlockMetadata(i, j, k);
|
||||
// }
|
||||
|
||||
// switch (md) {
|
||||
// case 0:
|
||||
// case 1:
|
||||
// case 2:
|
||||
// case 3:
|
||||
// ThaumCraftRenderer.renderBlockCrucible(w, rb, i, j, k, block, md, inv);
|
||||
// return true;
|
||||
// case 4:
|
||||
// ThaumCraftRenderer.renderBlockArcaneFurnace(
|
||||
// w, rb, i, j, k, block, md, inv
|
||||
// );
|
||||
// return true;
|
||||
// case 5:
|
||||
// ThaumCraftRenderer.renderBlockGenerator(w, rb, i, j, k, block, md, inv);
|
||||
// return true;
|
||||
// case 6:
|
||||
// ThaumCraftRenderer.renderBlockCrystalizer(w, rb, i, j, k, block, md,
|
||||
// inv); return true;
|
||||
// case 7:
|
||||
// ThaumCraftRenderer.renderBlockBore(w, rb, i, j, k, block, md, inv);
|
||||
// return true;
|
||||
// case 8:
|
||||
// block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
// if (block.getRenderBlockPass() == 0 && !inv) {
|
||||
// rb.renderStandardBlock(block, i, j, k);
|
||||
// } else if (inv) {
|
||||
// ThaumCraftRenderer.DrawFaces(
|
||||
// rb, block, 97, 104, 103, 103, 103, 103, false
|
||||
// );
|
||||
// }
|
||||
|
||||
// return true;
|
||||
// case 9:
|
||||
// ThaumCraftRenderer.renderBlockVoidInterface(
|
||||
// w, rb, i, j, k, block, md, inv
|
||||
// );
|
||||
// return true;
|
||||
// case 10:
|
||||
// ThaumCraftRenderer.renderBlockTank(w, rb, i, j, k, block, md, inv);
|
||||
// return true;
|
||||
// case 11:
|
||||
// ThaumCraftRenderer.renderBlockSoulBrazier(w, rb, i, j, k, block, md,
|
||||
// inv); return true;
|
||||
// default:
|
||||
// return false;
|
||||
// }
|
||||
//}
|
||||
|
||||
public static enum MetaVals {
|
||||
NORMAL_CRUCIBLE, // 0
|
||||
EYES_CRUCIBLE, // 1
|
||||
|
|
|
@ -0,0 +1,326 @@
|
|||
package net.anvilcraft.thaummach.blocks;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.anvilcraft.thaummach.particles.FXWisp;
|
||||
import net.anvilcraft.thaummach.render.BlockApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.entity.EntityLiving;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockApparatusWood extends BlockApparatus {
|
||||
public BlockApparatusWood() {
|
||||
super(Material.wood);
|
||||
this.setHardness(2.0F);
|
||||
this.setResistance(10.0F);
|
||||
this.setStepSound(Block.soundTypeWood);
|
||||
this.setBlockName("tcbappwood");
|
||||
}
|
||||
|
||||
@Override
|
||||
public IApparatusRenderer getApparatusRenderer(int meta) {
|
||||
switch (MetaVals.get(meta)) {
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getSubBlocks(Item p_149666_1_, CreativeTabs p_149666_2_, List itemList) {
|
||||
itemList.add(new ItemStack(this, 1, 0));
|
||||
itemList.add(new ItemStack(this, 1, 1));
|
||||
itemList.add(new ItemStack(this, 1, 2));
|
||||
itemList.add(new ItemStack(this, 1, 3));
|
||||
itemList.add(new ItemStack(this, 1, 4));
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World world, int meta) {
|
||||
MetaVals md = MetaVals.get(meta);
|
||||
|
||||
switch (md) {
|
||||
//case CONDENSER:
|
||||
// return new TileCondenser();
|
||||
//
|
||||
//case DUPLICATOR:
|
||||
// return new TileDuplicator();
|
||||
//
|
||||
//case REPAIRER:
|
||||
// return new TileRepairer();
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void
|
||||
setBlockBoundsBasedOnState(IBlockAccess iblockaccess, int i, int j, int k) {
|
||||
int md = iblockaccess.getBlockMetadata(i, j, k);
|
||||
if (md == 0) {
|
||||
float w3 = 0.1875F;
|
||||
this.setBlockBounds(w3, 0.0F, w3, 1.0F - w3, 1.0F, 1.0F - w3);
|
||||
} else {
|
||||
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getSelectedBoundingBoxFromPool(World w, int i, int j, int k) {
|
||||
int md = w.getBlockMetadata(i, j, k);
|
||||
if (md == 0) {
|
||||
float w3 = 0.1875F;
|
||||
AxisAlignedBB.getBoundingBox(
|
||||
(double) w3,
|
||||
0.0,
|
||||
(double) w3,
|
||||
(double) (1.0F - w3),
|
||||
1.0,
|
||||
(double) (1.0F - w3)
|
||||
);
|
||||
} else if (md == 10) {
|
||||
AxisAlignedBB.getBoundingBox(0.0, 0.0, 0.0, 1.0, 1.0, 1.0);
|
||||
}
|
||||
|
||||
return super.getSelectedBoundingBoxFromPool(w, i, j, k);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(
|
||||
World world, int i, int j, int k, EntityLivingBase entityliving, ItemStack stack
|
||||
) {
|
||||
MetaVals md = MetaVals.get(world.getBlockMetadata(i, j, k));
|
||||
int l = MathHelper.floor_double(
|
||||
(double) (entityliving.rotationYaw * 4.0F / 360.0F) + 0.5
|
||||
)
|
||||
& 3;
|
||||
if (md == MetaVals.DUPLICATOR) {
|
||||
// TODO: duplicator
|
||||
//TileDuplicator td = (TileDuplicator) world.getBlockTileEntity(i, j, k);
|
||||
//td.orientation = l;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateTick(World world, int i, int j, int k, Random random) {
|
||||
if (!world.isRemote) {
|
||||
MetaVals l = MetaVals.get(world.getBlockMetadata(i, j, k));
|
||||
if (l == MetaVals.DAWN_TOTEM || l == MetaVals.DUSK_TOTEM) {
|
||||
// TODO: totems
|
||||
//int auraX = i >> 4;
|
||||
//int auraZ = k >> 4;
|
||||
//SIAuraChunk ac = (SIAuraChunk) mod_ThaumCraft.AuraHM.get(
|
||||
// Arrays.asList(auraX, auraZ, ThaumCraftCore.getDimension(world))
|
||||
//);
|
||||
//if (ac != null) {
|
||||
// if (l == 3) {
|
||||
// ac.goodVibes = (short) (ac.goodVibes + 1 + random.nextInt(2));
|
||||
// ThaumCraftCore.decreaseTaintedPlantsInArea(world, i, j, k, 2);
|
||||
// } else {
|
||||
// ac.badVibes = (short) (ac.badVibes + 1 + random.nextInt(3));
|
||||
// ThaumCraftCore.increaseTaintedPlants(world, i, j, k);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int i, int j, int k, Block block, int meta_) {
|
||||
// TODO: not sure if param 6 is meta
|
||||
MetaVals meta = MetaVals.get(meta_);
|
||||
if (meta == MetaVals.CONDENSER) {
|
||||
// TODO: condenser
|
||||
//TileCondenser tileentityCondenser
|
||||
// = (TileCondenser) world.getBlockTileEntity(i, j, k);
|
||||
//if (tileentityCondenser != null && tileentityCondenser.degredation > 0.0F) {
|
||||
// int at = (int
|
||||
// ) (25.0F * (4550.0F - tileentityCondenser.degredation) / 4550.0F);
|
||||
// int auraX = i >> 4;
|
||||
// int auraZ = k >> 4;
|
||||
// SIAuraChunk ac = (SIAuraChunk) mod_ThaumCraft.AuraHM.get(
|
||||
// Arrays.asList(auraX, auraZ, ThaumCraftCore.getDimension(world))
|
||||
// );
|
||||
// if (ac != null) {
|
||||
// ac.taint = (short) (ac.taint + at);
|
||||
// world.playSoundEffect(
|
||||
// (double) i,
|
||||
// (double) j,
|
||||
// (double) k,
|
||||
// "random.fizz",
|
||||
// 0.2F,
|
||||
// 2.0F + world.rand.nextFloat() * 0.4F
|
||||
// );
|
||||
|
||||
// for (int a = 0; a < at; ++a) {
|
||||
// world.spawnParticle(
|
||||
// "largesmoke",
|
||||
// (double) ((float) i + world.rand.nextFloat()),
|
||||
// (double) ((float) j + world.rand.nextFloat()),
|
||||
// (double) ((float) k + world.rand.nextFloat()),
|
||||
// 0.0,
|
||||
// 0.0,
|
||||
// 0.0
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
super.breakBlock(world, i, j, k, block, meta_);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int i, int j, int k, Block l) {
|
||||
super.onNeighborBlockChange(world, i, j, k, l);
|
||||
MetaVals meta = MetaVals.get(world.getBlockMetadata(i, j, k));
|
||||
if (meta == MetaVals.CONDENSER) {
|
||||
if (!world.isAirBlock(i, j + 1, k)) {
|
||||
this.dropBlockAsItem(world, i, j, k, meta.ordinal(), 0);
|
||||
world.setBlockToAir(i, j, k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType() {
|
||||
return BlockApparatusRenderer.RI;
|
||||
}
|
||||
|
||||
// TODO: WTF
|
||||
//@Override
|
||||
//public int getBlockTextureFromSide(int i) {
|
||||
// return 15;
|
||||
//}
|
||||
|
||||
// TODO: textures
|
||||
//@Override
|
||||
//public int getBlockTextureFromSideAndMetadata(int i, int j) {
|
||||
// switch (j) {
|
||||
// case 3:
|
||||
// return 127;
|
||||
// case 4:
|
||||
// return 143;
|
||||
// default:
|
||||
// return super.getBlockTextureFromSideAndMetadata(i, j);
|
||||
// }
|
||||
//}
|
||||
|
||||
//@Override
|
||||
//public int getBlockTexture(IBlockAccess iblockaccess, int i, int j, int k, int l) {
|
||||
// int md = iblockaccess.getBlockMetadata(i, j, k);
|
||||
// if (md == 0) {
|
||||
// return l <= 1 ? 113 : 112;
|
||||
// } else if (md == 1) {
|
||||
// if (l <= 1) {
|
||||
// return 70;
|
||||
// } else {
|
||||
// TileEntity te = iblockaccess.getBlockTileEntity(i, j, k);
|
||||
// if (te != null && te instanceof TileDuplicator) {
|
||||
// if (((TileDuplicator) te).orientation == 0 && l == 2) {
|
||||
// return 71;
|
||||
// }
|
||||
|
||||
// if (((TileDuplicator) te).orientation == 1 && l == 5) {
|
||||
// return 71;
|
||||
// }
|
||||
|
||||
// if (((TileDuplicator) te).orientation == 2 && l == 3) {
|
||||
// return 71;
|
||||
// }
|
||||
|
||||
// if (((TileDuplicator) te).orientation == 3 && l == 4) {
|
||||
// return 71;
|
||||
// }
|
||||
// }
|
||||
|
||||
// return 72;
|
||||
// }
|
||||
// } else if (md == 2) {
|
||||
// return l <= 1 ? 86 : 87;
|
||||
// } else if (md == 3) {
|
||||
// return l <= 1 ? 127 : 121 + Math.abs((i + j + k) % 6);
|
||||
// } else if (md == 4) {
|
||||
// return l <= 1 ? 143 : 137 + Math.abs((i + j + k) % 6);
|
||||
// } else {
|
||||
// return 15;
|
||||
// }
|
||||
//}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int i) {
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLightValue(IBlockAccess iba, int i, int j, int k) {
|
||||
MetaVals md = MetaVals.get(iba.getBlockMetadata(i, j, k));
|
||||
return md == MetaVals.DUPLICATOR ? 5 : super.getLightValue(iba, i, j, k);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@Override
|
||||
public void randomDisplayTick(World w, int i, int j, int k, Random random) {
|
||||
MetaVals md = MetaVals.get(w.getBlockMetadata(i, j, k));
|
||||
if (random.nextInt(10) == 0) {
|
||||
switch (md) {
|
||||
case DAWN_TOTEM:
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new FXWisp(
|
||||
w,
|
||||
i + random.nextFloat(),
|
||||
j + random.nextFloat(),
|
||||
k + random.nextFloat(),
|
||||
0.5f,
|
||||
0
|
||||
));
|
||||
break;
|
||||
|
||||
case DUSK_TOTEM:
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new FXWisp(
|
||||
w,
|
||||
i + random.nextFloat(),
|
||||
j + random.nextFloat(),
|
||||
k + random.nextFloat(),
|
||||
0.5f,
|
||||
5
|
||||
));
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static enum MetaVals {
|
||||
CONDENSER, // 0
|
||||
DUPLICATOR, // 1
|
||||
REPAIRER, // 2
|
||||
DAWN_TOTEM, // 3
|
||||
DUSK_TOTEM; // 4
|
||||
|
||||
public static MetaVals get(int meta) {
|
||||
if (meta >= 0 && meta < MetaVals.values().length) {
|
||||
return MetaVals.values()[meta];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package net.anvilcraft.thaummach.items;
|
||||
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusWood.MetaVals;
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
public class ItemBlockApparatusWood extends ItemBlockApparatus {
|
||||
public ItemBlockApparatusWood(Block block) {
|
||||
super(block);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTypeString() {
|
||||
return "wood";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNameExtension(int meta_) {
|
||||
MetaVals meta = MetaVals.get(meta_);
|
||||
if (meta == null)
|
||||
return null;
|
||||
return meta.toString().toLowerCase();
|
||||
}
|
||||
}
|
|
@ -183,7 +183,7 @@ public class FXWisp extends EntityFX {
|
|||
GL11.glDepthMask(true);
|
||||
GL11.glPopMatrix();
|
||||
Minecraft.getMinecraft().renderEngine.bindTexture(
|
||||
new ResourceLocation("textures/particles/particles.png")
|
||||
new ResourceLocation("textures/particle/particles.png")
|
||||
);
|
||||
tessellator.startDrawingQuads();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
package net.anvilcraft.thaummach.render.apparatus;
|
||||
|
||||
import dev.tilera.auracore.api.HelperLocation;
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatus;
|
||||
import net.anvilcraft.thaummach.tiles.TileConduitTank;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public abstract class AbstractTankApparatusRenderer<Apparatus extends BlockApparatus> implements IApparatusRenderer {
|
||||
public abstract IIcon getBottomIcon(Apparatus block);
|
||||
public abstract IIcon getSideIcon(Apparatus block);
|
||||
|
||||
@Override
|
||||
public void renderApparatus(
|
||||
IBlockAccess w,
|
||||
RenderBlocks rb,
|
||||
int i,
|
||||
int j,
|
||||
int k,
|
||||
Block block_,
|
||||
int md,
|
||||
boolean inv
|
||||
) {
|
||||
BlockApparatus block = (BlockApparatus) block_;
|
||||
float w1;
|
||||
float w2;
|
||||
if (block.getRenderBlockPass() == 0 || inv) {
|
||||
w1 = 0.0625F;
|
||||
w2 = 0.125F;
|
||||
IIcon t1 = this.getBottomIcon((Apparatus)block);
|
||||
IIcon t2 = this.getSideIcon((Apparatus)block);
|
||||
|
||||
rb.setRenderBounds(w1, 0.0F, w1, 1.0F - w1, 1.0F, 1.0F - w1);
|
||||
if (inv) {
|
||||
ApparatusRenderingHelper.drawFaces(
|
||||
rb, block, t1, t1, t2, t2, t2, t2, false
|
||||
);
|
||||
} else {
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
if (!inv) {
|
||||
rb.overrideBlockTexture = this.getBottomIcon((Apparatus)block);
|
||||
TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k);
|
||||
HelperLocation loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.WEST;
|
||||
TileEntity te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
0.0F, 0.5F - w2, 0.5F - w2, w1, 0.5F + w2, 0.5F + w2
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.EAST;
|
||||
te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
1.0F - w1, 0.5F - w2, 0.5F - w2, 1.0F, 0.5F + w2, 0.5F + w2
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.NORTH;
|
||||
te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
0.5F - w2, 0.5F - w2, 0.0F, 0.5F + w2, 0.5F + w2, w1
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.SOUTH;
|
||||
te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
0.5F - w2, 0.5F - w2, 1.0F - w1, 0.5F + w2, 0.5F + w2, 1.0F
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rb.overrideBlockTexture = null;
|
||||
|
||||
if (block.getRenderBlockPass() == 0 && !inv) {
|
||||
w1 = 0.003F;
|
||||
w2 = 0.0625F;
|
||||
TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k);
|
||||
if (tc != null && tc.pureVis + tc.taintedVis > 0.1F) {
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
float hfill = (1.0F - w1 * 2.0F)
|
||||
* ((tc.pureVis + tc.taintedVis) / tc.getMaxVis());
|
||||
float b = Math.min(1.0F, tc.pureVis / (tc.taintedVis + tc.pureVis));
|
||||
rb.setRenderBounds(
|
||||
w1 + w2, w1, w1 + w2, 1.0F - w1 - w2, w1 + hfill, 1.0F - w1 - w2
|
||||
);
|
||||
tessellator.setBrightness(20 + (int) (b * 210.0F));
|
||||
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
|
||||
rb.renderFaceZPos(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceZNeg(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceXNeg(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceXPos(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceYPos(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceYNeg(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
}
|
||||
}
|
|
@ -1,142 +1,21 @@
|
|||
package net.anvilcraft.thaummach.render.apparatus.apparati.fragile;
|
||||
|
||||
import dev.tilera.auracore.api.HelperLocation;
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusFragile;
|
||||
import net.anvilcraft.thaummach.render.apparatus.ApparatusRenderingHelper;
|
||||
import net.anvilcraft.thaummach.render.apparatus.IApparatusRenderer;
|
||||
import net.anvilcraft.thaummach.tiles.TileConduitTank;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.renderer.RenderBlocks;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.anvilcraft.thaummach.render.apparatus.AbstractTankApparatusRenderer;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class ConduitTankApparatusRenderer implements IApparatusRenderer {
|
||||
public class ConduitTankApparatusRenderer
|
||||
extends AbstractTankApparatusRenderer<BlockApparatusFragile> {
|
||||
public static final ConduitTankApparatusRenderer INSTANCE
|
||||
= new ConduitTankApparatusRenderer();
|
||||
|
||||
@Override
|
||||
public void renderApparatus(
|
||||
IBlockAccess w,
|
||||
RenderBlocks rb,
|
||||
int i,
|
||||
int j,
|
||||
int k,
|
||||
Block block_,
|
||||
int md,
|
||||
boolean inv
|
||||
) {
|
||||
BlockApparatusFragile block = (BlockApparatusFragile) block_;
|
||||
float w1;
|
||||
float w2;
|
||||
if (block.getRenderBlockPass() == 0 || inv) {
|
||||
w1 = 0.0625F;
|
||||
w2 = 0.125F;
|
||||
IIcon t1 = block.iconTankBottom;
|
||||
IIcon t2 = block.iconTankSide;
|
||||
// TODO: WTF
|
||||
//if (md != 3) {
|
||||
// t1 = 78;
|
||||
// t2 = 79;
|
||||
//}
|
||||
public IIcon getBottomIcon(BlockApparatusFragile block) {
|
||||
return block.iconTankBottom;
|
||||
}
|
||||
|
||||
rb.setRenderBounds(w1, 0.0F, w1, 1.0F - w1, 1.0F, 1.0F - w1);
|
||||
if (inv) {
|
||||
ApparatusRenderingHelper.drawFaces(
|
||||
rb, block, t1, t1, t2, t2, t2, t2, false
|
||||
);
|
||||
} else {
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
if (!inv) {
|
||||
rb.overrideBlockTexture = block.iconTankBottom;
|
||||
TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k);
|
||||
HelperLocation loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.WEST;
|
||||
TileEntity te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
0.0F, 0.5F - w2, 0.5F - w2, w1, 0.5F + w2, 0.5F + w2
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.EAST;
|
||||
te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
1.0F - w1, 0.5F - w2, 0.5F - w2, 1.0F, 0.5F + w2, 0.5F + w2
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.NORTH;
|
||||
te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
0.5F - w2, 0.5F - w2, 0.0F, 0.5F + w2, 0.5F + w2, w1
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
|
||||
loc = new HelperLocation(tc);
|
||||
loc.facing = ForgeDirection.SOUTH;
|
||||
te = loc.getConnectableTile(w);
|
||||
if (te != null && tc.getConnectable(loc.facing)
|
||||
&& !(te instanceof TileConduitTank)) {
|
||||
rb.setRenderBounds(
|
||||
0.5F - w2, 0.5F - w2, 1.0F - w1, 0.5F + w2, 0.5F + w2, 1.0F
|
||||
);
|
||||
rb.renderStandardBlock(block, i, j, k);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rb.overrideBlockTexture = null;
|
||||
|
||||
if (block.getRenderBlockPass() == 0 && !inv) {
|
||||
w1 = 0.003F;
|
||||
w2 = 0.0625F;
|
||||
TileConduitTank tc = (TileConduitTank) w.getTileEntity(i, j, k);
|
||||
if (tc != null && tc.pureVis + tc.taintedVis > 0.1F) {
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
float hfill = (1.0F - w1 * 2.0F)
|
||||
* ((tc.pureVis + tc.taintedVis) / tc.getMaxVis());
|
||||
float b = Math.min(1.0F, tc.pureVis / (tc.taintedVis + tc.pureVis));
|
||||
rb.setRenderBounds(
|
||||
w1 + w2, w1, w1 + w2, 1.0F - w1 - w2, w1 + hfill, 1.0F - w1 - w2
|
||||
);
|
||||
tessellator.setBrightness(20 + (int) (b * 210.0F));
|
||||
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
|
||||
rb.renderFaceZPos(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceZNeg(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceXNeg(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceXPos(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceYPos(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
rb.renderFaceYNeg(
|
||||
block, (double) i, (double) j, (double) k, block.iconTcubeanim
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
rb.setRenderBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
|
||||
@Override
|
||||
public IIcon getSideIcon(BlockApparatusFragile block) {
|
||||
return block.iconTankSide;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
package net.anvilcraft.thaummach.render.apparatus.apparati.metal;
|
||||
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusMetal;
|
||||
import net.anvilcraft.thaummach.render.apparatus.AbstractTankApparatusRenderer;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class TankApparatusRenderer
|
||||
extends AbstractTankApparatusRenderer<BlockApparatusMetal> {
|
||||
public static TankApparatusRenderer INSTANCE = new TankApparatusRenderer();
|
||||
|
||||
@Override
|
||||
public IIcon getBottomIcon(BlockApparatusMetal block) {
|
||||
return block.iconTankBottom;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IIcon getSideIcon(BlockApparatusMetal block) {
|
||||
return block.iconTankSide;
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@ package net.anvilcraft.thaummach.tiles;
|
|||
import dev.tilera.auracore.api.HelperLocation;
|
||||
import dev.tilera.auracore.api.machine.IConnection;
|
||||
import net.anvilcraft.thaummach.AuraUtils;
|
||||
import net.anvilcraft.thaummach.blocks.BlockApparatusFragile;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
|
@ -41,12 +42,14 @@ public class TileConduitTank extends TileEntity implements IConnection {
|
|||
this.wait = 10;
|
||||
this.calculateSuction();
|
||||
int breakchance = 999;
|
||||
if (this.getBlockMetadata() != 3) {
|
||||
if (this.getBlockMetadata()
|
||||
!= BlockApparatusFragile.MetaVals.CONDUIT_TANK.ordinal()) {
|
||||
breakchance = 3333;
|
||||
}
|
||||
|
||||
if (this.taintedVis > this.getMaxVis() * 0.9F) {
|
||||
if (this.getBlockMetadata() == 3
|
||||
if (this.getBlockMetadata()
|
||||
== BlockApparatusFragile.MetaVals.CONDUIT_TANK.ordinal()
|
||||
&& super.worldObj.rand.nextInt(breakchance) == 123) {
|
||||
AuraUtils.taintExplosion(
|
||||
super.worldObj, super.xCoord, super.yCoord, super.zCoord
|
||||
|
@ -269,7 +272,10 @@ public class TileConduitTank extends TileEntity implements IConnection {
|
|||
}
|
||||
|
||||
public float getMaxVis() {
|
||||
return this.getBlockMetadata() != 3 ? 1000.0F : 500.0F;
|
||||
return this.getBlockMetadata()
|
||||
!= BlockApparatusFragile.MetaVals.CONDUIT_TANK.ordinal()
|
||||
? 1000.0F
|
||||
: 500.0F;
|
||||
}
|
||||
|
||||
public float[] subtractVis(float amount) {
|
||||
|
|
|
@ -10,6 +10,9 @@ import net.minecraft.init.Blocks;
|
|||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.world.EnumSkyBlock;
|
||||
|
||||
|
@ -37,6 +40,9 @@ public class TileSoulBrazier extends TileEntity implements ISidedInventory {
|
|||
|
||||
@Override
|
||||
public void updateEntity() {
|
||||
if (this.worldObj.isRemote)
|
||||
return;
|
||||
|
||||
if (this.lightingDelay <= 0 && this.isWorking() != this.previousLight) {
|
||||
super.worldObj.markBlockForUpdate(super.xCoord, super.yCoord, super.zCoord);
|
||||
super.worldObj.updateLightByType(
|
||||
|
@ -283,4 +289,30 @@ public class TileSoulBrazier extends TileEntity implements ISidedInventory {
|
|||
public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet getDescriptionPacket() {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
|
||||
nbt.setInteger("delay", this.delay);
|
||||
nbt.setInteger("burnTime", this.burnTime);
|
||||
nbt.setBoolean("previousLight", this.previousLight);
|
||||
nbt.setInteger("lightingDelay", this.lightingDelay);
|
||||
|
||||
return new S35PacketUpdateTileEntity(
|
||||
this.xCoord, this.yCoord, this.zCoord, this.getBlockMetadata(), nbt
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
|
||||
NBTTagCompound nbt = pkt.func_148857_g();
|
||||
this.delay = nbt.getInteger("delay");
|
||||
this.burnTime = nbt.getInteger("burnTime");
|
||||
this.previousLight = nbt.getBoolean("previousLight");
|
||||
this.lightingDelay = nbt.getInteger("lightingDelay");
|
||||
|
||||
// schedule light update
|
||||
this.worldObj.func_147451_t(this.xCoord, this.yCoord, this.zCoord);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,12 @@ tile.thaummach:apparatus_metal_void_interface.name=Void Interface
|
|||
tile.thaummach:apparatus_metal_tank.name=Thaumium Reinforced Tank
|
||||
tile.thaummach:apparatus_metal_soul_brazier.name=Soul Brazier
|
||||
|
||||
tile.thaummach:apparatus_wood_condenser.name=Vis Condenser
|
||||
tile.thaummach:apparatus_wood_duplicator.name=Thaumic Duplicator
|
||||
tile.thaummach:apparatus_wood_repairer.name=Thaumic Restorer
|
||||
tile.thaummach:apparatus_wood_dawn_totem.name=Dawn Totem
|
||||
tile.thaummach:apparatus_wood_dusk_totem.name=Dusk Totem
|
||||
|
||||
# ---- ITEMS ----
|
||||
|
||||
item.thaummach:focus_0.name=Arcane Focus
|
||||
|
|
After Width: | Height: | Size: 469 B |
After Width: | Height: | Size: 421 B |
After Width: | Height: | Size: 276 B |
After Width: | Height: | Size: 401 B |
After Width: | Height: | Size: 833 B |
After Width: | Height: | Size: 798 B |
After Width: | Height: | Size: 795 B |
After Width: | Height: | Size: 815 B |
After Width: | Height: | Size: 852 B |
After Width: | Height: | Size: 769 B |
After Width: | Height: | Size: 820 B |
After Width: | Height: | Size: 609 B |
After Width: | Height: | Size: 539 B |
After Width: | Height: | Size: 506 B |
After Width: | Height: | Size: 675 B |
After Width: | Height: | Size: 717 B |
After Width: | Height: | Size: 776 B |
After Width: | Height: | Size: 766 B |
After Width: | Height: | Size: 742 B |
After Width: | Height: | Size: 759 B |
After Width: | Height: | Size: 799 B |
After Width: | Height: | Size: 726 B |
After Width: | Height: | Size: 532 B |
After Width: | Height: | Size: 530 B |
After Width: | Height: | Size: 622 B |
After Width: | Height: | Size: 737 B |
After Width: | Height: | Size: 684 B |
After Width: | Height: | Size: 626 B |