Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.vepower.vepowermod.client.renderer;
- import org.lwjgl.opengl.GL11;
- import com.vepower.vepowermod.machine.VPBlockTubeItem;
- import net.minecraft.block.Block;
- import net.minecraft.block.material.MapColor;
- import net.minecraft.client.renderer.RenderBlocks;
- import net.minecraft.client.renderer.Tessellator;
- import net.minecraft.util.IIcon;
- import net.minecraft.world.IBlockAccess;
- import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
- import cpw.mods.fml.client.registry.RenderingRegistry;
- public class VPItemTubeRender implements ISimpleBlockRenderingHandler
- {
- public static int renderID;
- public static int renderPass;
- public VPItemTubeRender()
- {
- renderID = RenderingRegistry.getNextAvailableRenderId();
- }
- @Override
- public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer)
- {
- //System.out.println("test");
- // renderBlockAsItem(Block par1Block, int par2, float par3)
- //renderer.func_147800_a(block, metadata, 0.f);
- Tessellator tessellator = Tessellator.instance;
- IIcon texture = VPBlockTubeItem.texture;
- IIcon textureColour = VPBlockTubeItem.textureColour;
- //render bounds
- renderer.func_147782_a(.25f, .25f, .25f, .75f, .75f, .75f);
- int colour = MapColor.func_151644_a(0).colorValue;
- float r = colour&3;
- float g = colour&12;
- float b = colour&48;
- GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
- tessellator.startDrawingQuads();
- tessellator.setNormal(0.0F, -1.0F, 0.0F);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- renderer.func_147768_a(block, 0.0D, 0.0D, 0.0D, texture);
- tessellator.setColorOpaque_F(r, g, b);
- renderer.func_147768_a(block, 0.0D, 0.0D, 0.0D, textureColour);
- tessellator.draw();
- tessellator.startDrawingQuads();
- tessellator.setNormal(0.0F, 1.0F, 0.0F);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- renderer.func_147806_b(block, 0.0D, 0.0D, 0.0D, texture);
- tessellator.setColorOpaque_F(r, g, b);
- renderer.func_147806_b(block, 0.0D, 0.0D, 0.0D, textureColour);
- tessellator.draw();
- tessellator.startDrawingQuads();
- tessellator.setNormal(0.0F, 0.0F, -1.0F);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- renderer.func_147761_c(block, 0.0D, 0.0D, 0.0D, texture);
- tessellator.setColorOpaque_F(r, g, b);
- renderer.func_147761_c(block, 0.0D, 0.0D, 0.0D, textureColour);
- tessellator.draw();
- tessellator.startDrawingQuads();
- tessellator.setNormal(0.0F, 0.0F, 1.0F);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- renderer.func_147734_d(block, 0.0D, 0.0D, 0.0D, texture);
- tessellator.setColorOpaque_F(r, g, b);
- renderer.func_147734_d(block, 0.0D, 0.0D, 0.0D, textureColour);
- tessellator.draw();
- tessellator.startDrawingQuads();
- tessellator.setNormal(-1.0F, 0.0F, 0.0F);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- renderer.func_147798_e(block, 0.0D, 0.0D, 0.0D, texture);
- tessellator.setColorOpaque_F(r, g, b);
- renderer.func_147798_e(block, 0.0D, 0.0D, 0.0D, textureColour);
- tessellator.draw();
- tessellator.startDrawingQuads();
- tessellator.setNormal(1.0F, 0.0F, 0.0F);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- renderer.func_147764_f(block, 0.0D, 0.0D, 0.0D, texture);
- tessellator.setColorOpaque_F(r, g, b);
- renderer.func_147764_f(block, 0.0D, 0.0D, 0.0D, textureColour);
- tessellator.draw();
- GL11.glTranslatef(0.5F, 0.5F, 0.5F);
- renderer.func_147782_a(0,0,0,1,1,1);
- }
- @Override
- public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
- {
- Tessellator tessellator = Tessellator.instance;
- //int lightValue = block.getMixedBrightnessForBlock(world, x, y, z);
- int lightValue = block.func_149677_c(world, x, y, z);
- tessellator.setBrightness(lightValue);
- tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- //tessellator.
- //System.out.println(renderPass);
- boolean flag = false;
- flag = renderTube(world, x, y, z, block, modelId, renderer);
- switch(renderPass)
- {
- case 0:
- //draw colour
- break;
- default:
- //draw block
- //flag = renderer.func_147784_q(block, x, y, z);
- //flag = renderTube(world, x, y, z, block, modelId, renderer);
- break;
- }
- //int direction = world.getBlockMetadata(x, y, z) & 7;
- //boolean flag = renderer.renderStandardBlock(block, x, y, z);
- //boolean flag = renderer.func_147784_q(block, x, y, z);
- return flag;
- }
- @Override
- public boolean shouldRender3DInInventory(int modelId)
- {
- return true;
- }
- @Override
- public int getRenderId()
- {
- return renderID;
- }
- IBlockAccess currWorld;
- RenderBlocks currRenderer;
- Tessellator currTessellator;
- Block currBlock;
- IIcon texture;
- IIcon textureColour;
- int lightValue;
- double dX;
- double dY;
- double dZ;
- float r;
- float g;
- float b;
- double texUL;
- double texUH;
- double texVL;
- double texVH;
- double texColUL;
- double texColUH;
- double texColVL;
- double texColVH;
- double uScale;
- double vScale;
- double faceWidth;
- double faceHeight;
- double faceXoff;
- double faceYoff;
- double faceZoff;
- double faceUL;
- double faceUH;
- double faceVL;
- double faceVH;
- boolean renderTube(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
- {
- currTessellator = Tessellator.instance;
- currRenderer = renderer;
- currBlock = block;
- texture = VPBlockTubeItem.texture;
- textureColour = VPBlockTubeItem.textureColour;
- lightValue = block.func_149677_c(world, x, y, z);
- dX = (double)x;
- dY = (double)y;
- dZ = (double)z;
- int colour = MapColor.func_151644_a(world.getBlockMetadata(x, y, z)).colorValue;
- r = colour&3;
- g = colour&12;
- b = colour&48;
- texUL = texture.getMinU();
- texUH = texture.getMaxU();
- texVL = texture.getMinV();
- texVH = texture.getMaxV();
- texColUL = textureColour.getMinU();
- texColUH = textureColour.getMaxU();
- texColVL = textureColour.getMinV();
- texColVH = textureColour.getMaxV();
- uScale = texUH - texUL;
- vScale = texVH - texVL;
- byte connections = 48;
- //render main
- //faceWidth = .5; faceHeight = .5;
- //faceXoff = .25; faceYoff = .25; faceZoff = .25;
- //faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- //renderFace0();
- //renderFace1();
- //renderFace2();
- //renderFace3();
- //renderFace4();
- //renderFace5();
- //render connections
- //0
- if( (connections&1) == 1 )
- {
- faceWidth = .5; faceHeight = .25;
- faceXoff = .25; faceYoff = 0; faceZoff = .25;
- faceUL = .375; faceUH = .625; faceVL = .25; faceVH = .75;
- renderFace2();
- renderFace3();
- renderFace4();
- renderFace5();
- }
- else
- {
- faceWidth = .5; faceHeight = .5;
- faceXoff = .25; faceYoff = .25; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- renderFace0();
- }
- //1
- if( (connections&2) == 2 )
- {
- faceWidth = .5; faceHeight = .25;
- faceXoff = .25; faceYoff = .75; faceZoff = .25;
- faceUL = .375; faceUH = .625; faceVL = .25; faceVH = .75;
- renderFace2();
- renderFace3();
- renderFace4();
- renderFace5();
- }
- else
- {
- faceWidth = .5; faceHeight = .5;
- faceXoff = .25; faceYoff = .25; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- renderFace1();
- }
- //2
- if( (connections&4) == 4 )
- {
- faceWidth = .5; faceHeight = .25;
- faceXoff = .25; faceYoff = 0; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .375; faceVH = .625;
- renderFace0();
- renderFace1();
- faceWidth = .25; faceHeight = .5;
- faceXoff = 0; faceYoff = .25;
- renderFace4();
- renderFace5();
- }
- else
- {
- faceWidth = .5; faceHeight = .5;
- faceXoff = .25; faceYoff = .25; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- renderFace2();
- }
- //3
- if( (connections&8) == 8 )
- {
- faceWidth = .5; faceHeight = .25;
- faceXoff = .25; faceYoff = .75; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .375; faceVH = .625;
- renderFace0();
- renderFace1();
- faceWidth = .25; faceHeight = .5;
- faceXoff = .75; faceYoff = .25;
- renderFace4();
- renderFace5();
- }
- else
- {
- faceWidth = .5; faceHeight = .5;
- faceXoff = .25; faceYoff = .25; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- renderFace3();
- }
- //4
- if( (connections&16) == 16 )
- {
- faceWidth = .25; faceHeight = .5;
- faceXoff = 0; faceYoff = .25;
- faceUL = .375; faceUH = .625; faceVL = .25; faceVH = .75;
- renderFace0();
- renderFace1();
- faceUL = .25; faceUH = .75; faceVL = .375; faceVH = .625;
- renderFace2();
- renderFace3();
- }
- else
- {
- faceWidth = .5; faceHeight = .5;
- faceXoff = .25; faceYoff = .25; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- renderFace4();
- }
- //5
- if( (connections&32) == 32 )
- {
- faceWidth = .25; faceHeight = .5;
- faceXoff = .75; faceYoff = .25;
- faceUL = .375; faceUH = .625; faceVL = .25; faceVH = .75;
- renderFace0();
- renderFace1();
- faceUL = .25; faceUH = .75; faceVL = .375; faceVH = .625;
- renderFace2();
- renderFace3();
- }
- else
- {
- faceWidth = .5; faceHeight = .5;
- faceXoff = .25; faceYoff = .25; faceZoff = .25;
- faceUL = .25; faceUH = .75; faceVL = .25; faceVH = .75;
- renderFace5();
- }
- return true;
- }
- double xl,xh,yl,yh,zl,zh,ul,uh,vl,vh;
- //bottom -Y
- void renderFace0()
- {
- xl = dX + faceXoff;
- yl = dY + faceZoff;
- zl = dZ + faceYoff;
- xh = xl + faceWidth;
- yh = yl;
- zh = zl + faceHeight;
- ul = texUL + (faceUL * uScale);
- uh = texUL + (faceUH * uScale);
- vl = texVL + (faceVL * vScale);
- vh = texVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, uh, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zh, uh, vh);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vh);
- ul = texColUL + (faceUL * uScale);
- uh = texColUL + (faceUH * uScale);
- vl = texColVL + (faceVL * vScale);
- vh = texColVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, uh, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zh, uh, vh);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vh);
- }
- //top +Y
- void renderFace1()
- {
- xl = dX + faceXoff;
- yl = dY + 1 - faceZoff;
- zl = dZ + faceYoff;
- xh = xl + faceWidth;
- zh = zl + faceHeight;
- ul = texUL + (faceUL * uScale);
- uh = texUL + (faceUH * uScale);
- vl = texVL + (faceVL * vScale);
- vh = texVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zh, uh, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, uh, vh);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vh);
- ul = texColUL + (faceUL * uScale);
- uh = texColUL + (faceUH * uScale);
- vl = texColVL + (faceVL * vScale);
- vh = texColVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zh, uh, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, uh, vh);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vh);
- }
- //north -Z
- void renderFace2()
- {
- xl = dX + faceXoff;
- yl = dY + faceYoff;
- zl = dZ + faceZoff;
- xh = xl + faceWidth;
- yh = yl + faceHeight;
- ul = texUL + (faceUL * uScale);
- uh = texUL + (faceUH * uScale);
- vl = texVL + (faceVL * vScale);
- vh = texVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yh, zl, uh, vh);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, ul, vh);
- ul = texColUL + (faceUL * uScale);
- uh = texColUL + (faceUH * uScale);
- vl = texColVL + (faceVL * vScale);
- vh = texColVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yh, zl, uh, vh);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, ul, vh);
- }
- //south +Z
- void renderFace3()
- {
- xl = dX + faceXoff;
- yl = dY + faceYoff;
- zl = dZ + 1 - faceZoff;
- xh = xl + faceWidth;
- yh = yl + faceHeight;
- ul = texUL + (faceUL * uScale);
- uh = texUL + (faceUH * uScale);
- vl = texVL + (faceVL * vScale);
- vh = texVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yh, zl, uh, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vh);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vh);
- ul = texColUL + (faceUL * uScale);
- uh = texColUL + (faceUH * uScale);
- vl = texColVL + (faceVL * vScale);
- vh = texColVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xh, yh, zl, uh, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vh);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vh);
- }
- //west -X
- void renderFace4()
- {
- xl = dX + faceZoff;
- yl = dY + faceYoff;
- zl = dZ + faceXoff;
- yh = yl + faceHeight;
- zh = zl + faceWidth;
- ul = texUL + (faceUL * uScale);
- uh = texUL + (faceUH * uScale);
- vl = texVL + (faceVL * vScale);
- vh = texVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zh, uh, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vh);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vh);
- ul = texColUL + (faceUL * uScale);
- uh = texColUL + (faceUH * uScale);
- vl = texColVL + (faceVL * vScale);
- vh = texColVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zh, uh, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vh);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vh);
- }
- //east +X
- void renderFace5()
- {
- xl = dX + 1 - faceZoff;
- yl = dY + faceYoff;
- zl = dZ + faceXoff;
- yh = yl + faceHeight;
- zh = zl + faceWidth;
- ul = texUL + (faceUL * uScale);
- uh = texUL + (faceUH * uScale);
- vl = texVL + (faceVL * vScale);
- vh = texVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vl);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zh, uh, vh);
- currTessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vh);
- ul = texColUL + (faceUL * uScale);
- uh = texColUL + (faceUH * uScale);
- vl = texColVL + (faceVL * vScale);
- vh = texColVL + (faceVH * vScale);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zl, ul, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zl, uh, vl);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yh, zh, uh, vh);
- currTessellator.setColorOpaque_F(r, g, b);
- currTessellator.setBrightness(lightValue);
- currTessellator.addVertexWithUV(xl, yl, zh, ul, vh);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement