Jump to content
  • Home
  • Files
  • Docs
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • RENDERING DISTANCE PROBLEM in Custom modeled block
Currently Supported: 1.16.X (Latest) and 1.15.X (LTS)
Sign in to follow this  
Followers 0
Alesimula

RENDERING DISTANCE PROBLEM in Custom modeled block

By Alesimula, October 9, 2013 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 9, 2013

hi, i created a custom modeled block with a tileentityspecialrenderer, tileentity, IItemRenderer and a Block file.

now when i go too far from this block, it stop being rendered, and, of course, it renders again when i back.

 

I want this block to have a normal rendering distance like other blocks

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

mnn    76

mnn

mnn    76

  • Diamond Finder
  • mnn
  • Members
  • 76
  • 298 posts
Posted October 9, 2013

Try override and increse this in your TE:

    @SideOnly(Side.CLIENT)
    public double getMaxRenderDistanceSquared()
    {
        return 4096.0D;
    }

  • Quote

mnn.getNativeLang() != English

If I helped you please click on the "thank you" button.

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 9, 2013

Try override and increse this in your TE:

    @SideOnly(Side.CLIENT)
    public double getMaxRenderDistanceSquared()
    {
        return 4096.0D;
    }

 

Thank you, but is there a way to change 4096.0D to the dynamic "Max Rendering Distance" Setting value?

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

mnn    76

mnn

mnn    76

  • Diamond Finder
  • mnn
  • Members
  • 76
  • 298 posts
Posted October 9, 2013

I would guess the render distance can be obtained from that (but I didn't test it, you have to try it on your own):

FMLClientHandler.instance().getClient().gameSettings.renderDistance

  • Quote

mnn.getNativeLang() != English

If I helped you please click on the "thank you" button.

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 10, 2013

I would guess the render distance can be obtained from that (but I didn't test it, you have to try it on your own):

FMLClientHandler.instance().getClient().gameSettings.renderDistance

 

i did it and now the object doesn't render, i can see only the box

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 10, 2013

I would guess the render distance can be obtained from that (but I didn't test it, you have to try it on your own):

FMLClientHandler.instance().getClient().gameSettings.renderDistance

 

Ok i got something

 

the int renderdistance may be 1, 2, 3... and each number indicates the render distances (normal, small, tiny....)

 

so

 

public double getMaxRenderDistanceSquared()

    {

if (FMLClientHandler.instance().getClient().gameSettings.renderDistance == 1)

{return WHATEVER;}

else if....

    }

 

so now to make it right i have to replace WHATEVER with the correct render distance value for each option.... the problem is, what are those values?

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Akjosch    4

Akjosch

Akjosch    4

  • Tree Puncher
  • Akjosch
  • Members
  • 4
  • 17 posts
Posted October 10, 2013

Chunks get rendered up to (64 << (3 - renderDistance)) or 400 blocks, whatever is bigger, far. The far clipping plane (which "cuts off" the rendering) is at (256 >> renderDistance) meters (blocks) in the direction your camera is pointing at.

  • Quote

ItemBlock is not a Block

ItemStack is not an Item

Damage value is not metadata

 

Stop confusing them.

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 10, 2013

Chunks get rendered up to (64 << (3 - renderDistance)) or 400 blocks, whatever is bigger, far. The far clipping plane (which "cuts off" the rendering) is at (256 >> renderDistance) meters (blocks) in the direction your camera is pointing at.

 

Do you know if is there a way to render a block like mine like any other blocks in a chunk (like Piston block does)?

I mean, rendering it as a block and not like an entity

 

anyway i found this code perfect:

 

public double getMaxRenderDistanceSquared()
    {
	if (FMLClientHandler.instance().getClient().gameSettings.renderDistance == 0)
	{return 30000;}
	else if (FMLClientHandler.instance().getClient().gameSettings.renderDistance == 1)
	{return 15900;}
	else if (FMLClientHandler.instance().getClient().gameSettings.renderDistance == 2)
	{return 4000;}
	else return 3000;
    }

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

TheGreyGhost    818

TheGreyGhost

TheGreyGhost    818

  • Reality Controller
  • TheGreyGhost
  • Members
  • 818
  • 3280 posts
Posted October 10, 2013

Hi

 

You only need to use a TileEntity if you're trying to store more information that you can fit into the Block metadata (16 values).  There's no need to use TileEntity if you're just wanting to make a block which looks different. 

Even if you need to use TileEntity for storing extra data, you can usually still render using the Block rendering code only (for example see BlockFurnace.)

The only trick is if your custom block has an animation (eg opening the lid like a chest) - then Block Rendering won't help because the Block rendering code only gets called when the block or its metadata are updated.

 

These pages go into a fair bit more detail which might help:

http://greyminecraftcoder.blogspot.com.au/2013/07/block-rendering.html

http://greyminecraftcoder.blogspot.com.au/2013/09/sample-code-for-rendering-items.html  (has example of ISimpleBlockRenderingHandler).

http://greyminecraftcoder.blogspot.com.au/p/list-of-topics.html

 

-TGG

  • Quote

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 11, 2013

Hi

 

You only need to use a TileEntity if you're trying to store more information that you can fit into the Block metadata (16 values).  There's no need to use TileEntity if you're just wanting to make a block which looks different. 

Even if you need to use TileEntity for storing extra data, you can usually still render using the Block rendering code only (for example see BlockFurnace.)

The only trick is if your custom block has an animation (eg opening the lid like a chest) - then Block Rendering won't help because the Block rendering code only gets called when the block or its metadata are updated.

 

These pages go into a fair bit more detail which might help:

http://greyminecraftcoder.blogspot.com.au/2013/07/block-rendering.html

http://greyminecraftcoder.blogspot.com.au/2013/09/sample-code-for-rendering-items.html  (has example of ISimpleBlockRenderingHandler).

http://greyminecraftcoder.blogspot.com.au/p/list-of-topics.html

 

-TGG

 

how could I render my block (wich has a custom model) without the tileentity?

how should i change this code (i of course have to keep tileeentityspecialrenderer)

 

GlaciaColumn = new BlockGlaciaColumn(224 ,net.minecraft.src.TileEntityGlaciaColumn.class).setResistance(0.5F).setStepSound(Block.soundGrassFootstep).setUnlocalizedName("Column").setHardness(0.5f);
RenderGlaciaColumn ENTColumn = new RenderGlaciaColumn();
ModLoader.registerTileEntity(net.minecraft.src.TileEntityGlaciaColumn.class, "TileEntityGlaciaColumn",ENTColumn);
MinecraftForgeClient.registerItemRenderer(GlaciaColumn.blockID, new RenderItemGlaciaColumn());

 

PS: if i use my custom model and GL11 in a render that implements ISimpleBlockRenderingHandler, how could i bind a texture to it?

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Mazetar    271

Mazetar

Mazetar    271

  • World Shaper
  • Mazetar
  • Forge Modder
  • 271
  • 1343 posts
Posted October 11, 2013

You bind texture with gl11 just like you would for any gui or other bind texture call.

A gui texture 1.6 google search should give you the code line as I cant recall it atm.

  • Quote

If you guys dont get it.. then well ya.. try harder...

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 11, 2013

You bind texture with gl11 just like you would for any gui or other bind texture call.

A gui texture 1.6 google search should give you the code line as I cant recall it atm.

 

i'm a little confused now  ???

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Mazetar    271

Mazetar

Mazetar    271

  • World Shaper
  • Mazetar
  • Forge Modder
  • 271
  • 1343 posts
Posted October 11, 2013

From memory I think it's like this:

GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture(texture));

 

With texture being a ResourceLocation

 

  • Quote

If you guys dont get it.. then well ya.. try harder...

Share this post


Link to post
Share on other sites

Akjosch    4

Akjosch

Akjosch    4

  • Tree Puncher
  • Akjosch
  • Members
  • 4
  • 17 posts
Posted October 11, 2013

He means you can simply use GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID) with textureID being an integer with the (OpenGL-internal) texture number, usually from GL11.glGenTextures(), which you previously assigned some image data to via GL11.glTexImage2D(), GL11.GL11.glTexSubImage2D() or similar methods.

 

If you have the textures referenced as Minecraft's ResourceLocation though (and you should), it can do all of it for you "automagically" by simply calling Minecraft.getMinecraft().renderEngine.bindTexture(textureResourceLocation).

 

  • Quote

ItemBlock is not a Block

ItemStack is not an Item

Damage value is not metadata

 

Stop confusing them.

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 11, 2013

He means you can simply use GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID) with textureID being an integer with the (OpenGL-internal) texture number, usually from GL11.glGenTextures(), which you previously assigned some image data to via GL11.glTexImage2D(), GL11.GL11.glTexSubImage2D() or similar methods.

 

If you have the textures referenced as Minecraft's ResourceLocation though (and you should), it can do all of it for you "automagically" by simply calling Minecraft.getMinecraft().renderEngine.bindTexture(textureResourceLocation).

 

ok i really need an example....

let's suppose my texture is "assets/minecraft/textures/entity/MYTEXTURE.png"

how should the whole code wich assigns the texture to the model (created with techne) look like?

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Akjosch    4

Akjosch

Akjosch    4

  • Tree Puncher
  • Akjosch
  • Members
  • 4
  • 17 posts
Posted October 11, 2013

He means you can simply use GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID) with textureID being an integer with the (OpenGL-internal) texture number, usually from GL11.glGenTextures(), which you previously assigned some image data to via GL11.glTexImage2D(), GL11.GL11.glTexSubImage2D() or similar methods.

 

If you have the textures referenced as Minecraft's ResourceLocation though (and you should), it can do all of it for you "automagically" by simply calling Minecraft.getMinecraft().renderEngine.bindTexture(textureResourceLocation).

 

ok i really need an example....

let's suppose my texture is "assets/minecraft/textures/entity/MYTEXTURE.png"

 

DON'T.

 

Mod resources go into "assets/(modID, lower case)" and no-where else.

 

In other words, this should be "assets/modid/textures/entity/MYTEXTURE.png"

 

how should the whole code wich assigns the texture to the model (created with techne) look like?

 

In your entity renderer (extends one of the sub-classes of net.minecraft.classes.renderer.entity.Render):

 

  private static final ResourceLocation texture = new ResourceLocation("modid", "textures/entity/MYTEXTURE.png");

  @Override
  protected ResourceLocation getEntityTexture(Entity entity)
  {
    return texture;
  }

 

That's it. It gets automatically called for entities which use that (for example by RenderLiving.renderModel() if you extend RenderLiving). If you want to implement your own doRender(Entity entity, double posX, double posY, double posZ, float yaw, float partialTickTime) method, that's how you bind it and then call the model to render:

 

  bindEntityTexture(entity);
  renderLivingAt(entity, posX, posY, posZ); // or use GL11.glTranslatef() yourself
  /* Remember to rotate the entity properly if needed, via GL11.glRotatef()
     or the helper function rotateCorpse() if you're rendering a living */
  /* Calculate the other animation-related values for the next call */
  mainModel.render(entity, limbSwingTime, limbSwingMaxDist, entity.ticksExisted + partialTickTime, headRotY, headRotX, scale);

 

  • Quote

ItemBlock is not a Block

ItemStack is not an Item

Damage value is not metadata

 

Stop confusing them.

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 11, 2013

He means you can simply use GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID) with textureID being an integer with the (OpenGL-internal) texture number, usually from GL11.glGenTextures(), which you previously assigned some image data to via GL11.glTexImage2D(), GL11.GL11.glTexSubImage2D() or similar methods.

 

If you have the textures referenced as Minecraft's ResourceLocation though (and you should), it can do all of it for you "automagically" by simply calling Minecraft.getMinecraft().renderEngine.bindTexture(textureResourceLocation).

 

ok i really need an example....

let's suppose my texture is "assets/minecraft/textures/entity/MYTEXTURE.png"

 

DON'T.

 

Mod resources go into "assets/(modID, lower case)" and no-where else.

 

In other words, this should be "assets/modid/textures/entity/MYTEXTURE.png"

 

how should the whole code wich assigns the texture to the model (created with techne) look like?

 

In your entity renderer (extends one of the sub-classes of net.minecraft.classes.renderer.entity.Render):

 

  private static final ResourceLocation texture = new ResourceLocation("modid", "textures/entity/MYTEXTURE.png");

  @Override
  protected ResourceLocation getEntityTexture(Entity entity)
  {
    return texture;
  }

 

That's it. It gets automatically called for entities which use that (for example by RenderLiving.renderModel() if you extend RenderLiving). If you want to implement your own doRender(Entity entity, double posX, double posY, double posZ, float yaw, float partialTickTime) method, that's how you bind it and then call the model to render:

 

  bindEntityTexture(entity);
  renderLivingAt(entity, posX, posY, posZ); // or use GL11.glTranslatef() yourself
  /* Remember to rotate the entity properly if needed, via GL11.glRotatef()
     or the helper function rotateCorpse() if you're rendering a living */
  /* Calculate the other animation-related values for the next call */
  mainModel.render(entity, limbSwingTime, limbSwingMaxDist, entity.ticksExisted + partialTickTime, headRotY, headRotX, scale);

 

I'm trying to render a custom modeled block, not an'entity

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Mazetar    271

Mazetar

Mazetar    271

  • World Shaper
  • Mazetar
  • Forge Modder
  • 271
  • 1343 posts
Posted October 11, 2013

What is meant for you above is that the correct way which I couldn't recall while at work was this:

ResourceLocation texture = new ResourceLocation("modid", "textures/block/MYTEXTURE.png");

Minecraft.getMinecraft().renderEngine.bindTexture(texture ).

  • Quote

If you guys dont get it.. then well ya.. try harder...

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 11, 2013

What is meant for you above is that the correct way which I couldn't recall while at work was this:

ResourceLocation texture = new ResourceLocation("modid", "textures/block/MYTEXTURE.png");

Minecraft.getMinecraft().renderEngine.bindTexture(texture ).

 

anyway i can't do this with modelWHATEVER and GL11, strangely, the block doesn't render.

i'll do it with tessellator, but i dunno how to take only a part of texture to assign to a specific face

 

es: in texturewhatever.png i want to assign the texture that goes from pixel(12,3) to pixel(23,5)

and how to assign different texture parts to any tessellactor face

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

TheGreyGhost    818

TheGreyGhost

TheGreyGhost    818

  • Reality Controller
  • TheGreyGhost
  • Members
  • 818
  • 3280 posts
Posted October 11, 2013

Hi

 

This might help

http://greyminecraftcoder.blogspot.com.au/2013/08/the-tessellator.html

 

-TGG

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2401

Draco18s

Draco18s    2401

  • Reality Controller
  • Draco18s
  • Members
  • 2401
  • 15920 posts
Posted October 11, 2013

This might help

http://greyminecraftcoder.blogspot.com.au/2013/08/the-tessellator.html

 

A little forewarning.  The tessellator is very difficult to work with.

When I was working on rail bridges (can't find any pictures) I spent probably 4 hours individually drawing planes with the tessellator to get it to look right.  I kept getting them backwards, or in the wrong place, even twisted on a few occasions.

  • Quote

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 11, 2013

This might help

http://greyminecraftcoder.blogspot.com.au/2013/08/the-tessellator.html

 

A little forewarning.  The tessellator is very difficult to work with.

When I was working on rail bridges (can't find any pictures) I spent probably 4 hours individually drawing planes with the tessellator to get it to look right.  I kept getting them backwards, or in the wrong place, even twisted on a few occasions.

 

I tried it out, it doesn't seem too difficult, just a bit time expensive

 

No... very time expensive, my block have 4 shapes based on its metadata  ;D

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Alesimula    3

Alesimula

Alesimula    3

  • Creeper Killer
  • Alesimula
  • Members
  • 3
  • 117 posts
Posted October 13, 2013

This might help

http://greyminecraftcoder.blogspot.com.au/2013/08/the-tessellator.html

 

A little forewarning.  The tessellator is very difficult to work with.

When I was working on rail bridges (can't find any pictures) I spent probably 4 hours individually drawing planes with the tessellator to get it to look right.  I kept getting them backwards, or in the wrong place, even twisted on a few occasions.

 

So you have experience with tessellator... could you help me i have another problem, the block, when destroyng, doesn't show the destroying animation and it only glows

more details and codes in the other topic:

http://www.minecraftforge.net/forum/index.php/topic,13032.0.html

  • Quote

Actually i don't know what to write in this signature soooo.... anyway

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

    • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 0
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Teedledee
      1.16.4 Failed to synchronize registry data with server LAN

      By Teedledee · Posted 54 minutes ago

      Not sure if this helps, but I copied all of the mods from my folder into a zipped folder which was then sent to my friend for them to unzip and drop all of the mods into their mod folder, the same goes for the configs.
    • ChampionAsh5357
      [1.16.4] Multiple worlds

      By ChampionAsh5357 · Posted 1 hour ago

      Well, yes. Now there's a bunch of new caveats. If you really want to attempt this, a similar mod named Hyperbox by Commoble accomplished this. That's probably the best I can do as the process of actually handling is quite complicated and problematic at times.
    • __SmolMight__
      Mods work in singleplayer but not in multiplayer

      By __SmolMight__ · Posted 1 hour ago

      I am new to the world of modding Minecraft so when I say I am completely lost on what to do, I mean I am utterly lost. To set up my modded Minecraft server for 1.12.2 I followed a youtube tutorial by the Breakdown and It works amazingly! But when I went to install the mods on the server to the mod folder and installed them all nothing happened. I loaded up my game and server and when I got on in creative mode none of the mods were present. They all work in singleplayer just fine with no crashing so I know it's not mod conflicts. I am just so confused on where to go at this point. I've tried following several threads and other videos on how to troubleshoot the problem but all the computer jargon just goes over my head and I am left more turned around than ever. All I ask is your patience and I prematurely apologize if my sheer stupidity is aggravating. Thanks in advance.
    • uglyswed@gmail.com
      not all my mods are showing up in a 1.12.2 server

      By uglyswed@gmail.com · Posted 1 hour ago

      when i play singleplayer all 19 of my mods are showing up but when i enter a server i made with my friend not all my mods are showing up. on my server list theres a green check mark and when i hover over it, it says "compatible FML modded server 4 mods present" how do I make all 19 mods show up in the server? We both have all 19 installed and both of us have singleplayer worlds with all 19 working fine.    
    • Teedledee
      1.16.4 Failed to synchronize registry data with server LAN

      By Teedledee · Posted 1 hour ago

      Trying to play on a modded LAN server with my friend, when I try to join their LAN world I get the "Failed to synchronize registry data with server, closing connection" message, and they get the same message when trying to join my LAN world. We have the same forge version 35.1.12, all the same mods with the same versions of those mods as well as the same configs.   My forced crash report: https://pastebin.com/XMG5Z5Bi Friends forced crash report: https://pastebin.com/eXk8qQQT
  • Topics

    • Teedledee
      1
      1.16.4 Failed to synchronize registry data with server LAN

      By Teedledee
      Started 1 hour ago

    • Forix
      8
      [1.16.4] Multiple worlds

      By Forix
      Started Saturday at 09:00 PM

    • __SmolMight__
      0
      Mods work in singleplayer but not in multiplayer

      By __SmolMight__
      Started 1 hour ago

    • uglyswed@gmail.com
      0
      not all my mods are showing up in a 1.12.2 server

      By uglyswed@gmail.com
      Started 1 hour ago

    • cadbane86140
      0
      MInecraft: Parkour Paradise 3 Part 2!

      By cadbane86140
      Started 1 hour ago

  • Who's Online (See full list)

    • KrysEmlyn
    • demin
    • PumpkinVanix
    • ThePicklePlayz
    • S-Spirit
    • ChampionAsh5357
    • ByzantineMan
    • uglyswed@gmail.com
    • __SmolMight__
    • Woodside
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • RENDERING DISTANCE PROBLEM in Custom modeled block
  • Theme

Copyright © 2019 ForgeDevelopment LLC · Ads by Longitude Ads LLC Powered by Invision Community