Crash on Optifine with H. S. E. Transition Track
BluestoneMC opened this issue ยท 12 comments
The game keeps crashing when breaking the block next to H. S. E. Transition Track.
Unable to load the world again because it keeps crashing when loading the chunk.
Error: java.lang.NullPointerException: Tesselating block model
It crashes with NullPointerException here: https://github.com/CovertJaguar/Railcraft/blob/mc-1.10.2/src/main/java/mods/railcraft/client/render/models/resource/OutfittedTrackModel.java#L204
No idea what can crash with NPE on this line, the state is already checked to be non-null. Maybe the source is not up to date.
With ConnectedTextures the method getQuads()
may be called with a state which is not IExtendedBlockState
, but this is also checked.
@BluestoneMC Try without codechickenlib.
Removing codechickenlib and all depending mods didn't solve the issue.
Removing just optifine did, but I can't try if just turning off connected textures is enough because my game keeps crashing when I try to.
@BluestoneMC Give the full crash report please.
[net.minecraft.init.Bootstrap:func_179870_a:560]: ---- Minecraft Crash Report ----
WARNING: coremods are present:
NEICorePlugin (NotEnoughItems-1.10.2-2.1.3.219-universal.jar)
LoadingPlugin (Quark-r1.1-70.jar)
NWRTweak (redstonepaste-mc1.9.4-1.7.4.jar)
CCLCorePlugin (CodeChickenLib-1.10.2-2.5.8.255-universal.jar)
FMLPlugin (InventoryTweaks-1.61-58.jar)
DynamicSurroundingsCore (DynamicSurroundings-1.10.2-3.3.3.1.jar)
IC2core (industrialcraft-2-2.6.188-ex110.jar)
CorePlugin (MrTJPCore-1.10.2-2.0.0.17-universal.jar)
Contact their authors BEFORE contacting forge
// I bet Cylons wouldn't have this problem.
Time: 30.04.17 09:33
Description: Tesselating block model
java.lang.NullPointerException: Tesselating block model
at mods.railcraft.client.render.models.resource.OutfittedTrackModel$CompositeModel.func_188616_a(OutfittedTrackModel.java:204)
at ConnectedTextures.getNeighbourIcon(ConnectedTextures.java:1364)
at ConnectedTextures.isNeighbour(ConnectedTextures.java:1323)
at ConnectedTextures.isNeighbour(ConnectedTextures.java:1303)
at ConnectedTextures.getConnectedTextureTop(ConnectedTextures.java:1695)
at ConnectedTextures.getConnectedTexture(ConnectedTextures.java:545)
at ConnectedTextures.getConnectedTextureSingle(ConnectedTextures.java:370)
at ConnectedTextures.getConnectedTextureMultiPass(ConnectedTextures.java:299)
at ConnectedTextures.getConnectedTexture(ConnectedTextures.java:113)
at BlockModelCustomizer.getRenderQuads(BlockModelCustomizer.java:89)
at BlockModelCustomizer.getRenderQuads(BlockModelCustomizer.java:60)
at net.minecraft.client.renderer.BlockModelRenderer.func_187498_b(BlockModelRenderer.java:105)
at net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer.func_187498_b(ForgeBlockModelRenderer.java:107)
at net.minecraft.client.renderer.BlockModelRenderer.func_187493_a(BlockModelRenderer.java:72)
at net.minecraft.client.renderer.BlockModelRenderer.func_178267_a(BlockModelRenderer.java:52)
at net.minecraft.client.renderer.BlockRendererDispatcher.func_175018_a(BlockRendererDispatcher.java:81)
at codechicken.lib.render.block.CCExtendedBlockRendererDispatcher.func_175018_a(CCExtendedBlockRendererDispatcher.java:54)
at codechicken.lib.render.block.CCBlockRendererDispatcher.func_175018_a(CCBlockRendererDispatcher.java:61)
at net.minecraft.client.renderer.chunk.RenderChunk.func_178581_b(RenderChunk.java:290)
at net.minecraft.client.renderer.chunk.ChunkRenderWorker.func_178474_a(ChunkRenderWorker.java:119)
at net.minecraft.client.renderer.chunk.ChunkRenderDispatcher.func_178505_b(ChunkRenderDispatcher.java:173)
at net.minecraft.client.renderer.RenderGlobal.func_174970_a(RenderGlobal.java:1450)
at net.minecraft.client.renderer.EntityRenderer.func_175068_a(EntityRenderer.java:1676)
at net.minecraft.client.renderer.EntityRenderer.func_78471_a(EntityRenderer.java:1566)
at net.minecraft.client.renderer.EntityRenderer.func_181560_a(EntityRenderer.java:1345)
at net.minecraft.client.Minecraft.func_71411_J(Minecraft.java:1076)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:371)
at net.minecraft.client.main.Main.main(SourceFile:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Thread: Client thread
Stacktrace:
at mods.railcraft.client.render.models.resource.OutfittedTrackModel$CompositeModel.func_188616_a(OutfittedTrackModel.java:204)
at ConnectedTextures.getNeighbourIcon(ConnectedTextures.java:1364)
at ConnectedTextures.isNeighbour(ConnectedTextures.java:1323)
at ConnectedTextures.isNeighbour(ConnectedTextures.java:1303)
at ConnectedTextures.getConnectedTextureTop(ConnectedTextures.java:1695)
at ConnectedTextures.getConnectedTexture(ConnectedTextures.java:545)
at ConnectedTextures.getConnectedTextureSingle(ConnectedTextures.java:370)
at ConnectedTextures.getConnectedTextureMultiPass(ConnectedTextures.java:299)
at ConnectedTextures.getConnectedTexture(ConnectedTextures.java:113)
at BlockModelCustomizer.getRenderQuads(BlockModelCustomizer.java:89)
at BlockModelCustomizer.getRenderQuads(BlockModelCustomizer.java:60)
at net.minecraft.client.renderer.BlockModelRenderer.func_187498_b(BlockModelRenderer.java:105)
at net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer.func_187498_b(ForgeBlockModelRenderer.java:107)
-- Block model being tesselated --
Details:
Block: minecraft:sandstone[type=sandstone]
Block location: World: (104,3,-257), Chunk: (at 8,0,15 in 6,-17; contains blocks 96,0,-272 to 111,255,-257), Region: (0,-1; contains chunks 0,-32 to 31,-1, blocks 0,0,-512 to 511,255,-1)
Using AO: true
Stacktrace:
at net.minecraft.client.renderer.BlockModelRenderer.func_187493_a(BlockModelRenderer.java:72)
at net.minecraft.client.renderer.BlockModelRenderer.func_178267_a(BlockModelRenderer.java:52)
-- Block being tesselated --
Details:
Block type: ID #24 (tile.sandStone // net.minecraft.block.BlockSandStone)
Block data value: 0 / 0x0 / 0b0000
Block location: World: (104,3,-257), Chunk: (at 8,0,15 in 6,-17; contains blocks 96,0,-272 to 111,255,-257), Region: (0,-1; contains chunks 0,-32 to 31,-1, blocks 0,0,-512 to 511,255,-1)
Stacktrace:
at net.minecraft.client.renderer.BlockRendererDispatcher.func_175018_a(BlockRendererDispatcher.java:81)
-- Block being tesselated --
Details:
Block type: ID #24 (tile.sandStone // net.minecraft.block.BlockSandStone)
Block data value: 0 / 0x0 / 0b0000
Block location: World: (104,3,-257), Chunk: (at 8,0,15 in 6,-17; contains blocks 96,0,-272 to 111,255,-257), Region: (0,-1; contains chunks 0,-32 to 31,-1, blocks 0,0,-512 to 511,255,-1)
Stacktrace:
at codechicken.lib.render.block.CCExtendedBlockRendererDispatcher.func_175018_a(CCExtendedBlockRendererDispatcher.java:54)
at codechicken.lib.render.block.CCBlockRendererDispatcher.func_175018_a(CCBlockRendererDispatcher.java:61)
at net.minecraft.client.renderer.chunk.RenderChunk.func_178581_b(RenderChunk.java:290)
at net.minecraft.client.renderer.chunk.ChunkRenderWorker.func_178474_a(ChunkRenderWorker.java:119)
at net.minecraft.client.renderer.chunk.ChunkRenderDispatcher.func_178505_b(ChunkRenderDispatcher.java:173)
at net.minecraft.client.renderer.RenderGlobal.func_174970_a(RenderGlobal.java:1450)
at net.minecraft.client.renderer.EntityRenderer.func_175068_a(EntityRenderer.java:1676)
at net.minecraft.client.renderer.EntityRenderer.func_78471_a(EntityRenderer.java:1566)
-- Affected level --
Details:
Level name: MpServer
All players: 1 total; [EntityPlayerSP['BluestoneMC'/6, l='MpServer', x=104,13, y=4,00, z=-256,80]]
Chunk stats: MultiplayerChunkCache: 580, 580
Level seed: 0
Level generator: ID 01 - flat, ver 0. Features enabled: false
Level generator options:
Level spawn location: World: (112,4,-251), Chunk: (at 0,0,5 in 7,-16; contains blocks 112,0,-256 to 127,255,-241), Region: (0,-1; contains chunks 0,-32 to 31,-1, blocks 0,0,-512 to 511,255,-1)
Level time: 1029 game time, 1029 day time
Level dimension: 0
Level storage version: 0x00000 - Unknown?
Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false
Forced entities: 46 total; [EntityChicken['Chicken'/78401, l='MpServer', x=136,50, y=4,00, z=-213,50], EntitySlime['Slime'/192322, l='MpServer', x=66,62, y=4,00, z=-206,16], EntityChicken['Chicken'/78400, l='MpServer', x=148,13, y=4,00, z=-213,59], EntityCow['Cow'/78403, l='MpServer', x=151,17, y=4,00, z=-206,65], EntitySlime['Slime'/92803, l='MpServer', x=60,81, y=5,10, z=-289,24], EntityCow['Cow'/78402, l='MpServer', x=141,05, y=4,00, z=-212,92], EntitySheep['Sheep'/78405, l='MpServer', x=90,50, y=4,00, z=-333,50], EntityPlayerSP['BluestoneMC'/6, l='MpServer', x=104,13, y=4,00, z=-256,80], EntitySlime['Slime'/178372, l='MpServer', x=82,97, y=4,72, z=-281,11], EntityPig['Pig'/78406, l='MpServer', x=89,60, y=4,00, z=-330,31], EntitySlime['Slime'/154954, l='MpServer', x=91,15, y=5,08, z=-296,71], EntitySlime['Slime'/84616, l='MpServer', x=59,49, y=4,53, z=-293,79], EntitySlime['Slime'/198472, l='MpServer', x=176,35, y=4,00, z=-198,25], EntitySlime['Slime'/124368, l='MpServer', x=89,83, y=4,00, z=-271,51], EntityCow['Cow'/78419, l='MpServer', x=184,50, y=4,00, z=-226,50], EntityHorse['Horse'/78423, l='MpServer', x=48,16, y=4,00, z=-309,25], EntitySlime['Slime'/18455, l='MpServer', x=66,54, y=4,00, z=-288,29], EntityHorse['Horse'/78422, l='MpServer', x=49,78, y=4,00, z=-310,76], EntityPig['Pig'/78425, l='MpServer', x=63,50, y=4,00, z=-320,50], EntitySlime['Slime'/164378, l='MpServer', x=163,76, y=4,14, z=-223,06], EntitySlime['Slime'/181274, l='MpServer', x=119,35, y=4,00, z=-282,85], EntitySlime['Slime'/174043, l='MpServer', x=156,90, y=4,00, z=-223,52], EntitySlime['Slime'/64027, l='MpServer', x=65,84, y=4,00, z=-179,60], EntityPig['Pig'/78428, l='MpServer', x=62,58, y=4,00, z=-310,76], EntitySlime['Slime'/145119, l='MpServer', x=60,56, y=4,12, z=-275,11], EntitySlime['Slime'/152732, l='MpServer', x=100,75, y=5,00, z=-293,54], EntitySlime['Slime'/39647, l='MpServer', x=148,16, y=4,75, z=-225,50], EntitySlime['Slime'/22755, l='MpServer', x=64,05, y=4,00, z=-193,29], EntitySlime['Slime'/32355, l='MpServer', x=124,76, y=4,00, z=-310,37], EntityCow['Cow'/78441, l='MpServer', x=104,50, y=4,00, z=-199,50], EntitySlime['Slime'/175018, l='MpServer', x=105,25, y=4,50, z=-303,24], EntityCow['Cow'/78440, l='MpServer', x=108,16, y=4,00, z=-190,84], EntityCow['Cow'/78443, l='MpServer', x=117,15, y=4,00, z=-206,33], EntitySlime['Slime'/179624, l='MpServer', x=81,38, y=4,52, z=-296,89], EntityCow['Cow'/78442, l='MpServer', x=108,50, y=4,00, z=-202,50], EntitySlime['Slime'/114223, l='MpServer', x=146,13, y=4,95, z=-211,52], EntitySlime['Slime'/61102, l='MpServer', x=165,59, y=5,02, z=-243,49], EntitySlime['Slime'/22192, l='MpServer', x=59,03, y=4,52, z=-277,51], EntitySlime['Slime'/158070, l='MpServer', x=164,10, y=4,00, z=-196,85], EntitySlime['Slime'/180724, l='MpServer', x=160,37, y=4,00, z=-226,09], EntitySlime['Slime'/116152, l='MpServer', x=103,61, y=4,00, z=-311,27], EntitySlime['Slime'/61308, l='MpServer', x=115,42, y=4,14, z=-257,29], EntitySlime['Slime'/105919, l='MpServer', x=163,77, y=4,00, z=-192,05], EntitySlime['Slime'/151804, l='MpServer', x=118,99, y=4,00, z=-201,35], EntitySlime['Slime'/8575, l='MpServer', x=123,84, y=4,00, z=-275,75], EntitySlime['Slime'/119550, l='MpServer', x=60,34, y=4,00, z=-188,22]]
Retry entities: 0 total; []
Server brand: fml,forge
Server type: Integrated singleplayer server
Stacktrace:
at net.minecraft.client.multiplayer.WorldClient.func_72914_a(WorldClient.java:524)
at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:2660)
at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:392)
at net.minecraft.client.main.Main.main(SourceFile:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
-- System Details --
Details:
Minecraft Version: 1.10.2
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_25, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 151904032 bytes (144 MB) / 1060372480 bytes (1011 MB) up to 1060372480 bytes (1011 MB)
JVM Flags: 6 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmx1G -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:-UseAdaptiveSizePolicy -Xmn128M
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP 9.32 Powered by Forge 12.18.3.2281 Optifine OptiFine_1.10.2_HD_U_D7 36 mods loaded, 36 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar)
UCHIJAAAA FML{8.0.99.99} [Forge Mod Loader] (forge-1.10.2-12.18.3.2281.jar)
UCHIJAAAA Forge{12.18.3.2281} [Minecraft Forge] (forge-1.10.2-12.18.3.2281.jar)
UCHIJAAAA NotEnoughItems{2.1.3.219} [Not Enough Items] (NotEnoughItems-1.10.2-2.1.3.219-universal.jar)
UCHIJAAAA ccl-entityhook{1.0} [ccl-entityhook] (CodeChickenLib-1.10.2-2.5.8.255-universal.jar)
UCHIJAAAA mercurius_updater{1.0} [mercurius_updater] (MercuriusUpdater-1.10.2.jar)
UCHIJAAAA IC2{2.6.188-ex110} [IndustrialCraft 2] (industrialcraft-2-2.6.188-ex110.jar)
UCHIJAAAA advanced_machines{60.0.2} [Advanced Machines] (Advanced Machines-60.0.2.jar)
UCHIJAAAA JEI{3.14.7.419} [Just Enough Items] (jei_1.10.2-3.14.7.419.jar)
UCHIJAAAA appleskin{1.0.5} [AppleSkin] (AppleSkin-mc1.10.2-1.0.5.jar)
UCHIJAAAA Quark{r1.1-70} [Quark] (Quark-r1.1-70.jar)
UCHIJAAAA AutoRegLib{1.0-2} [AutoRegLib] (AutoRegLib-1.0-2.jar)
UCHIJAAAA CodeChickenLib{2.5.8.255} [CodeChicken Lib] (CodeChickenLib-1.10.2-2.5.8.255-universal.jar)
UCHIJAAAA CodeChickenCore{2.4.1.102} [CodeChicken Core] (CodeChickenCore-1.10.2-2.4.1.102-universal.jar)
UCHIJAAAA compactsolars{1.10.2-5.0.8.331} [Compact Solar Arrays] (CompactSolars-1.10.2-5.0.8.331-universal.jar)
UCHIJAAAA dsurround{3.3.3.1} [Dynamic Surroundings] (DynamicSurroundings-1.10.2-3.3.3.1.jar)
UCHIJAAAA forgemultipartcbe{2.0.0.31} [Forge Multipart CBE] (ForgeMultipart-1.10.2-2.0.0.31-universal.jar)
UCHIJAAAA microblockcbe{2.0.0.31} [Forge Microblocks] (ForgeMultipart-1.10.2-2.0.0.31-universal.jar)
UCHIJAAAA minecraftmultipartcbe{2.0.0.31} [Minecraft Multipart Plugin] (ForgeMultipart-1.10.2-2.0.0.31-universal.jar)
UCHIJAAAA inventorytweaks{1.61-58-a1fd884} [Inventory Tweaks] (InventoryTweaks-1.61-58.jar)
UCHIJAAAA ironchest{1.10.2-7.0.12.801} [Iron Chest] (ironchest-1.10.2-7.0.12.801.jar)
UCHIJAAAA MrTJPCoreMod{2.0.0.17} [MrTJPCore] (MrTJPCore-1.10.2-2.0.0.17-universal.jar)
UCHIJAAAA projectred-core{4.8.1.30} [ProjectRed Core] (ProjectRed-1.10.2-4.8.1.30-Base.jar)
UCHIJAAAA projectred-integration{4.8.1.30} [ProjectRed integration] (ProjectRed-1.10.2-4.8.1.30-integration.jar)
UCHIJAAAA projectred-transmission{4.8.1.30} [ProjectRed Transmission] (ProjectRed-1.10.2-4.8.1.30-integration.jar)
UCHIJAAAA projectred-illumination{4.8.1.30} [ProjectRed Illumination] (ProjectRed-1.10.2-4.8.1.30-lighting.jar)
UCHIJAAAA projectred-expansion{4.8.1.30} [ProjectRed Expansion] (ProjectRed-1.10.2-4.8.1.30-mechanical.jar)
UCHIJAAAA projectred-transportation{4.8.1.30} [ProjectRed Transportation] (ProjectRed-1.10.2-4.8.1.30-mechanical.jar)
UCHIJAAAA projectred-exploration{4.8.1.30} [ProjectRed Exploration] (ProjectRed-1.10.2-4.8.1.30-world.jar)
UCHIJAAAA railcraft{10.1.1} [Railcraft] (Railcraft_1.10.2-10.1.1.jar)
UCHIJAAAA redstonepaste{1.7.4} [Redstone Paste] (redstonepaste-mc1.9.4-1.7.4.jar)
UCHIJAAAA RTG{4.1.2.4} [Realistic Terrain Generation] (RTG-1.10.2-4.1.2.4.jar)
UCHIJAAAA treechopper{1.1.2} [Tree Chopper] (TreeChopper-1.10.2-1.1.2.jar)
UCHIJAAAA Waila{1.7.0} [Waila] (Waila-1.7.0-B3_1.9.4.jar)
UCHIJAAAA wanionlib{1.10.2-1.3} [WanionLib] (WanionLib-1.10.2-1.3.jar)
UCHIJAAAA unidict{1.10.2-2.8} [UniDict] (UniDict-1.10.2-2.8.jar)
Loaded coremods (and transformers):
NEICorePlugin (NotEnoughItems-1.10.2-2.1.3.219-universal.jar)
codechicken.nei.asm.NEITransformer
LoadingPlugin (Quark-r1.1-70.jar)
vazkii.quark.base.asm.ClassTransformer
NWRTweak (redstonepaste-mc1.9.4-1.7.4.jar)
net.fybertech.nwr.NWRTransformer
CCLCorePlugin (CodeChickenLib-1.10.2-2.5.8.255-universal.jar)
codechicken.lib.asm.ClassHeirachyManager
codechicken.lib.asm.CCL_ASMTransformer
FMLPlugin (InventoryTweaks-1.61-58.jar)
invtweaks.forge.asm.ContainerTransformer
DynamicSurroundingsCore (DynamicSurroundings-1.10.2-3.3.3.1.jar)
org.blockartistry.mod.DynSurround.asm.Transformer
IC2core (industrialcraft-2-2.6.188-ex110.jar)
CorePlugin (MrTJPCore-1.10.2-2.0.0.17-universal.jar)
GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 10.18.15.4279' Renderer: 'Intel(R) HD Graphics 4600'
NotEnoughItems Invalid Fingerprint Reports:
CodeChickenLib Invalid Fingerprint Reports:
CodeChickenCore Invalid Fingerprint Reports:
Launched Version: 1.10.2
LWJGL: 2.9.4
OpenGL: Intel(R) HD Graphics 4600 GL version 4.3.0 - Build 10.18.15.4279, Intel
GL Caps: Using GL 1.3 multitexturing.
Using GL 1.3 texture combiners.
Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
Shaders are available because OpenGL 2.1 is supported.
VBOs are available because OpenGL 1.5 is supported.
Using VBOs: Yes
Is Modded: Definitely; Client brand changed to 'fml,forge'
Type: Client (map_client.txt)
Resource Packs:
Current Language: English (US)
Profiler Position: N/A (disabled)
CPU: 8x Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
OptiFine Version: OptiFine_1.10.2_HD_U_D7
Render Distance Chunks: 12
Mipmaps: 4
Anisotropic Filtering: 1
Antialiasing: 0
Multitexture: false
Shaders: null
OpenGlVersion: 4.3.0 - Build 10.18.15.4279
OpenGlRenderer: Intel(R) HD Graphics 4600
OpenGlVendor: Intel
CpuCount: 8
@sp614x I need your help.
Normal Electric Rails don't use the custom model generator, so they wouldn't be subject to the problem.
Isn't this the same issue in #1072?
Yes, the weird thing is it only happens with some rails. It never crashed with normal electric rails.
Also some project: red blocks do the same thing.