• 0

    posted a message on The Ultimate Double Dabble Module

    Posted in: Redstone Creations
  • 0

    posted a message on OptiFine HD (FPS Boost, Dynamic Lights, Shaders and much more)
    Quote from Laikang»

    Quick Question.

    When I use the zoom feature, it zooms in but is somewhat hard to control. It seems to move somewhat unrestricted from my cursor.

    What I mean is that without zooming, my screen simply follows and stops whenever my mouse moves and stops.

    However, it seems a bit more slippery/does not follow the mouse as well when it zooms.


    Is there a way to change this?


    It just activates cinematic camera. You can go into controls, under Miscellaneous, and bind it to something convenient. That way you can just immediately disable it while holding zoom. Don't need to toggle it afterwards. No way to disable it automatically happening while zooming though, but this is a decent workaround if you choose a convenient keybind.
    Posted in: Minecraft Mods
  • 0

    posted a message on XRay Mod (1.6.4 - 1.11) ( Vanilla/Forge/LiteLoader )

    This is intentional (if I'm understanding you correctly). XRay will only "discover" blocks when xray is enabled. This is for performance reasons. The goal is, when XRay is off it has zero performance impact to the game.

    So wait the list is meant to be blank? In that case I'd recommend adding a little message in there or something like "Blocks not discovered yet - activate any XRay profile to load" or something. Thanks for the quick responses!
    Posted in: Minecraft Mods
  • 0

    posted a message on XRay Mod (1.6.4 - 1.11) ( Vanilla/Forge/LiteLoader )

    I uploaded version 19 - should fix this. Let me know if it doesn't.

    Hmm, looks like it fixed that issue.

    Another thing I noticed though... Because of the new delayed block discovery, the editor menu shows an empty list on every x-ray profile until one is actually activated. Minor annoyance, but I just thought I'd draw attention to this while I notice it.
    Posted in: Minecraft Mods
  • 0

    posted a message on XRay Mod (1.6.4 - 1.11) ( Vanilla/Forge/LiteLoader )

    Crash 1.9.4 with version 18. It hates wooden slabs it seems.


    Stacktrace:


    java.lang.IllegalArgumentException: Cannot get property PropertyEnum{name=half, clazz=class net.minecraft.block.BlockSlab$EnumBlockHalf, values=[top, bottom]} as it does not exist in BlockStateContainer{block=minecraft:double_wooden_slab, properties=[variant]}
    	at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_177229_b(BlockStateContainer.java:197)
    	at net.minecraft.block.BlockSlab.doesSideBlockRendering(BlockSlab.java:59)
    	at net.minecraft.block.state.BlockStateContainer$StateImplementation.doesSideBlockRendering(BlockStateContainer.java:488)
    	at net.minecraft.block.Block.func_176225_a(Block.java:446)
    	at net.minecraft.block.BlockSlab.func_176225_a(BlockSlab.java:86)
    	at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_185894_c(BlockStateContainer.java:418)
    	at net.minecraft.client.renderer.BlockModelRenderer.func_187498_b(BlockModelRenderer.java:114)
    	at net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer.func_187498_b(ForgeBlockModelRenderer.java:88)
    	at net.minecraft.client.renderer.BlockModelRenderer.func_187493_a(BlockModelRenderer.java:86)
    	at net.minecraft.client.renderer.BlockModelRenderer.func_178267_a(BlockModelRenderer.java:65)
    	at net.minecraft.client.renderer.BlockRendererDispatcher.func_175018_a(BlockRendererDispatcher.java:81)
    	at net.minecraft.client.renderer.chunk.RenderChunk.func_178581_b(RenderChunk.java:265)
    	at net.minecraft.client.renderer.chunk.ChunkRenderWorker.func_178474_a(ChunkRenderWorker.java:118)
    	at net.minecraft.client.renderer.chunk.ChunkRenderWorker.run(ChunkRenderWorker.java:46)
    	at java.lang.Thread.run(Unknown Source)


    Entire crash report:

    ---- Minecraft Crash Report ----
    
    WARNING: coremods are present:
    Contact their authors BEFORE contacting forge
    
    // Surprise! Haha. Well, this is awkward.
    
    Time: 25/05/16 18:18
    Description: Tesselating block model
    
    java.lang.IllegalArgumentException: Cannot get property PropertyEnum{name=half, clazz=class net.minecraft.block.BlockSlab$EnumBlockHalf, values=[top, bottom]} as it does not exist in BlockStateContainer{block=minecraft:double_wooden_slab, properties=[variant]}
     at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_177229_b(BlockStateContainer.java:197)
     at net.minecraft.block.BlockSlab.doesSideBlockRendering(BlockSlab.java:59)
     at net.minecraft.block.state.BlockStateContainer$StateImplementation.doesSideBlockRendering(BlockStateContainer.java:488)
     at net.minecraft.block.Block.func_176225_a(Block.java:446)
     at net.minecraft.block.BlockSlab.func_176225_a(BlockSlab.java:86)
     at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_185894_c(BlockStateContainer.java:418)
     at net.minecraft.client.renderer.BlockModelRenderer.func_187498_b(BlockModelRenderer.java:114)
     at net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer.func_187498_b(ForgeBlockModelRenderer.java:88)
     at net.minecraft.client.renderer.BlockModelRenderer.func_187493_a(BlockModelRenderer.java:86)
     at net.minecraft.client.renderer.BlockModelRenderer.func_178267_a(BlockModelRenderer.java:65)
     at net.minecraft.client.renderer.BlockRendererDispatcher.func_175018_a(BlockRendererDispatcher.java:81)
     at net.minecraft.client.renderer.chunk.RenderChunk.func_178581_b(RenderChunk.java:265)
     at net.minecraft.client.renderer.chunk.ChunkRenderWorker.func_178474_a(ChunkRenderWorker.java:118)
     at net.minecraft.client.renderer.chunk.ChunkRenderWorker.run(ChunkRenderWorker.java:46)
     at java.lang.Thread.run(Unknown Source)
    
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- Head --
    Thread: Client thread
    Stacktrace:
     at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_177229_b(BlockStateContainer.java:197)
     at net.minecraft.block.BlockSlab.doesSideBlockRendering(BlockSlab.java:59)
     at net.minecraft.block.state.BlockStateContainer$StateImplementation.doesSideBlockRendering(BlockStateContainer.java:488)
     at net.minecraft.block.Block.func_176225_a(Block.java:446)
     at net.minecraft.block.BlockSlab.func_176225_a(BlockSlab.java:86)
     at net.minecraft.block.state.BlockStateContainer$StateImplementation.func_185894_c(BlockStateContainer.java:418)
     at net.minecraft.client.renderer.BlockModelRenderer.func_187498_b(BlockModelRenderer.java:114)
     at net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer.func_187498_b(ForgeBlockModelRenderer.java:88)
    
    -- Block model being tesselated --
    Details:
     Block: minecraft:wooden_slab[half=top,variant=dark_oak]
     Block location: World: (4234,80,4320), Chunk: (at 10,5,0 in 264,270; contains blocks 4224,0,4320 to 4239,255,4335), Region: (8,8; contains chunks 256,256 to 287,287, blocks 4096,0,4096 to 4607,255,4607)
     Using AO: true
    Stacktrace:
     at net.minecraft.client.renderer.BlockModelRenderer.func_187493_a(BlockModelRenderer.java:86)
     at net.minecraft.client.renderer.BlockModelRenderer.func_178267_a(BlockModelRenderer.java:65)
    
    -- Block being tesselated --
    Details:
     Block type: ID #126 (tile.woodSlab // net.minecraft.block.BlockHalfWoodSlab)
     Block data value: 13 / 0xD / 0b1101
     Block location: World: (4234,80,4320), Chunk: (at 10,5,0 in 264,270; contains blocks 4224,0,4320 to 4239,255,4335), Region: (8,8; contains chunks 256,256 to 287,287, blocks 4096,0,4096 to 4607,255,4607)
    Stacktrace:
     at net.minecraft.client.renderer.BlockRendererDispatcher.func_175018_a(BlockRendererDispatcher.java:81)
    
    -- Affected level --
    Details:
     Level name: MpServer
     All players: 1 total; [EntityPlayerSP['Techy4198'/580610, l='MpServer', x=4230.95, y=80.50, z=4324.24]]
     Chunk stats: MultiplayerChunkCache: 441, 441
     Level seed: 0
     Level generator: ID 00 - default, ver 1. Features enabled: false
     Level generator options: 
     Level spawn location: World: (4662,63,4422), Chunk: (at 6,3,6 in 291,276; contains blocks 4656,0,4416 to 4671,255,4431), Region: (9,8; contains chunks 288,256 to 319,287, blocks 4608,0,4096 to 5119,255,4607)
     Level time: 836895993 game time, 850294905 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: survival (ID 0). Hardcore: false. Cheats: false
     Forced entities: 94 total; [EntityItemFrame['entity.ItemFrame.name'/580616, l='MpServer', x=4228.50, y=83.50, z=4305.03], EntityChicken['Chicken'/580360, l='MpServer', x=4213.44, y=64.00, z=4370.90], EntityItemFrame['entity.ItemFrame.name'/580617, l='MpServer', x=4224.03, y=83.50, z=4308.50], EntityItemFrame['entity.ItemFrame.name'/580618, l='MpServer', x=4231.97, y=83.50, z=4306.50], EntityChicken['Chicken'/580362, l='MpServer', x=4213.94, y=64.00, z=4370.98], EntityItemFrame['entity.ItemFrame.name'/580619, l='MpServer', x=4231.50, y=83.50, z=4305.03], EntityItemFrame['entity.ItemFrame.name'/580620, l='MpServer', x=4231.97, y=83.50, z=4312.50], EntityChicken['Chicken'/580364, l='MpServer', x=4214.41, y=64.00, z=4369.17], EntityItemFrame['entity.ItemFrame.name'/580621, l='MpServer', x=4224.03, y=83.50, z=4305.50], EntityChicken['Chicken'/580365, l='MpServer', x=4214.11, y=64.00, z=4370.19], EntityItemFrame['entity.ItemFrame.name'/580622, l='MpServer', x=4226.50, y=82.50, z=4315.03], EntityChicken['Chicken'/580366, l='MpServer', x=4208.84, y=64.00, z=4369.49], EntityCreeper['Creeper'/580623, l='MpServer', x=4241.50, y=72.00, z=4289.50], EntityChicken['Chicken'/580367, l='MpServer', x=4213.93, y=64.00, z=4371.63], EntitySpider['Spider'/580354, l='MpServer', x=4271.50, y=73.00, z=4364.50], EntityItemFrame['entity.ItemFrame.name'/580611, l='MpServer', x=4230.50, y=83.50, z=4312.97], EntitySkeleton['Skeleton'/580355, l='MpServer', x=4268.80, y=73.00, z=4355.62], EntityItemFrame['entity.ItemFrame.name'/580612, l='MpServer', x=4224.03, y=83.50, z=4311.50], EntityItemFrame['entity.ItemFrame.name'/580613, l='MpServer', x=4231.97, y=83.50, z=4309.50], EntityItemFrame['entity.ItemFrame.name'/580614, l='MpServer', x=4227.50, y=83.50, z=4312.97], EntityItemFrame['entity.ItemFrame.name'/580615, l='MpServer', x=4225.50, y=83.50, z=4305.03], EntityCow['Cow'/580379, l='MpServer', x=4195.45, y=64.00, z=4371.28], EntitySkeleton['Skeleton'/580624, l='MpServer', x=4265.50, y=19.00, z=4294.50], EntityChicken['Chicken'/580368, l='MpServer', x=4214.49, y=64.00, z=4371.04], EntityPig['Pig'/580625, l='MpServer', x=4273.27, y=68.00, z=4306.50], EntityChicken['Chicken'/580370, l='MpServer', x=4208.94, y=64.00, z=4370.03], EntityChicken['Chicken'/580372, l='MpServer', x=4213.89, y=64.00, z=4369.50], EntityChicken['Chicken'/580373, l='MpServer', x=4211.06, y=64.00, z=4370.10], EntityChicken['Chicken'/580374, l='MpServer', x=4209.30, y=64.00, z=4371.62], EntityChicken['Chicken'/580393, l='MpServer', x=4206.23, y=64.00, z=4370.05], EntityChicken['Chicken'/580394, l='MpServer', x=4207.91, y=64.00, z=4370.09], EntityChicken['Chicken'/580395, l='MpServer', x=4207.18, y=64.00, z=4369.96], EntityChicken['Chicken'/580398, l='MpServer', x=4206.67, y=64.00, z=4370.42], EntityChicken['Chicken'/580399, l='MpServer', x=4207.69, y=64.00, z=4369.02], EntityCow['Cow'/580385, l='MpServer', x=4203.18, y=64.00, z=4369.55], EntityChicken['Chicken'/580387, l='MpServer', x=4206.20, y=64.00, z=4369.56], EntityChicken['Chicken'/580388, l='MpServer', x=4207.77, y=64.00, z=4371.10], EntityChicken['Chicken'/580390, l='MpServer', x=4207.30, y=64.00, z=4370.51], EntitySkeleton['Skeleton'/580408, l='MpServer', x=4277.52, y=76.00, z=4363.27], EntitySpider['Spider'/580409, l='MpServer', x=4276.50, y=73.00, z=4356.50], EntityPlayerSP['Techy4198'/580610, l='MpServer', x=4230.95, y=80.50, z=4324.24], EntityChicken['Chicken'/580400, l='MpServer', x=4207.08, y=64.00, z=4369.47], EntityWitch['Witch'/580401, l='MpServer', x=4191.50, y=12.00, z=4363.50], EntityCreeper['Creeper'/580402, l='MpServer', x=4186.50, y=15.00, z=4363.50], EntityZombie['Zombie'/580403, l='MpServer', x=4190.50, y=46.00, z=4301.50], EntityEnderman['Enderman'/580404, l='MpServer', x=4196.50, y=25.00, z=4278.50], EntitySkeleton['Skeleton'/580407, l='MpServer', x=4198.50, y=38.00, z=4277.50], EntityZombie['Zombie'/580683, l='MpServer', x=4188.50, y=63.00, z=4346.50], EntityCreeper['Creeper'/580417, l='MpServer', x=4190.50, y=36.00, z=4283.50], EntitySquid['Squid'/580675, l='MpServer', x=4277.83, y=56.67, z=4266.98], EntityItemFrame['entity.ItemFrame.name'/580312, l='MpServer', x=4218.97, y=48.50, z=4304.50], EntityItemFrame['entity.ItemFrame.name'/580313, l='MpServer', x=4218.97, y=48.50, z=4310.50], EntityCreeper['Creeper'/580697, l='MpServer', x=4218.50, y=68.00, z=4287.50], EntityItemFrame['entity.ItemFrame.name'/580314, l='MpServer', x=4218.97, y=48.50, z=4306.50], EntityItemFrame['entity.ItemFrame.name'/580315, l='MpServer', x=4218.97, y=48.50, z=4311.50], EntityItemFrame['entity.ItemFrame.name'/580316, l='MpServer', x=4215.03, y=48.50, z=4304.50], EntityItemFrame['entity.ItemFrame.name'/580317, l='MpServer', x=4218.97, y=48.50, z=4307.50], EntityItemFrame['entity.ItemFrame.name'/580318, l='MpServer', x=4215.03, y=48.50, z=4308.50], EntityItemFrame['entity.ItemFrame.name'/580319, l='MpServer', x=4215.03, y=48.50, z=4306.50], EntityCreeper['Creeper'/580310, l='MpServer', x=4215.48, y=104.00, z=4315.07], EntitySquid['Squid'/580566, l='MpServer', x=4211.15, y=61.07, z=4292.60], EntityItemFrame['entity.ItemFrame.name'/580311, l='MpServer', x=4221.97, y=84.50, z=4320.50], EntityItemFrame['entity.ItemFrame.name'/580328, l='MpServer', x=4223.03, y=82.50, z=4317.50], EntitySkeleton['Skeleton'/580584, l='MpServer', x=4184.50, y=63.00, z=4365.50], EntityItemFrame['entity.ItemFrame.name'/580329, l='MpServer', x=4223.03, y=90.50, z=4316.50], EntityCreeper['Creeper'/580330, l='MpServer', x=4216.50, y=53.00, z=4301.50], EntityHorse['Skeleton Horse'/580332, l='MpServer', x=4209.39, y=64.00, z=4359.08], EntityHorse['Horse'/580333, l='MpServer', x=4211.83, y=64.00, z=4360.30], EntityHorse['Skeleton Horse'/580334, l='MpServer', x=4211.61, y=64.00, z=4358.41], EntitySheep['Sheep'/580335, l='MpServer', x=4208.27, y=64.00, z=4358.58], EntityItemFrame['entity.ItemFrame.name'/580320, l='MpServer', x=4218.97, y=48.50, z=4308.50], EntityItemFrame['entity.ItemFrame.name'/580321, l='MpServer', x=4218.97, y=48.50, z=4309.50], EntityItemFrame['entity.ItemFrame.name'/580322, l='MpServer', x=4215.03, y=48.50, z=4309.50], EntityItemFrame['entity.ItemFrame.name'/580323, l='MpServer', x=4215.03, y=48.50, z=4307.50], EntityItemFrame['entity.ItemFrame.name'/580324, l='MpServer', x=4215.03, y=48.50, z=4305.50], EntityItemFrame['entity.ItemFrame.name'/580325, l='MpServer', x=4218.97, y=48.50, z=4305.50], EntityItemFrame['entity.ItemFrame.name'/580326, l='MpServer', x=4215.03, y=48.50, z=4311.50], EntityItemFrame['entity.ItemFrame.name'/580327, l='MpServer', x=4215.03, y=48.50, z=4310.50], EntityPig['Pig'/580344, l='MpServer', x=4203.24, y=64.00, z=4355.51], EntityZombie['Zombie'/580601, l='MpServer', x=4185.50, y=63.00, z=4324.50], EntityPig['Pig'/580345, l='MpServer', x=4197.19, y=64.00, z=4360.47], EntityPig['Pig'/580346, l='MpServer', x=4195.45, y=64.00, z=4358.83], EntityHorse['Skeleton Horse'/580347, l='MpServer', x=4206.93, y=64.00, z=4359.33], EntitySheep['Sheep'/580348, l='MpServer', x=4206.45, y=64.00, z=4360.55], EntitySheep['Sheep'/580349, l='MpServer', x=4207.39, y=64.00, z=4358.27], EntitySheep['Sheep'/580350, l='MpServer', x=4207.60, y=64.00, z=4360.55], EntitySheep['Sheep'/580351, l='MpServer', x=4206.78, y=64.00, z=4355.62], EntityHorse['Horse'/580336, l='MpServer', x=4211.48, y=64.00, z=4355.70], EntitySheep['Sheep'/580337, l='MpServer', x=4210.61, y=64.00, z=4360.26], EntityHorse['Skeleton Horse'/580339, l='MpServer', x=4208.55, y=64.00, z=4357.40], EntityCreeper['Creeper'/580340, l='MpServer', x=4269.50, y=70.00, z=4308.50], EntityZombie['Zombie'/580341, l='MpServer', x=4248.54, y=20.00, z=4359.25], EntityMinecartEmpty['entity.MinecartRideable.name'/580342, l='MpServer', x=4202.50, y=60.06, z=4359.49], EntityPig['Pig'/580343, l='MpServer', x=4202.00, y=64.00, z=4358.44]]
     Retry entities: 0 total; []
     Server brand: Spigot
     Server type: Non-integrated multiplayer server
    Stacktrace:
     at net.minecraft.client.multiplayer.WorldClient.func_72914_a(WorldClient.java:478)
     at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:2649)
     at net.minecraft.client.renderer.chunk.ChunkRenderWorker.run(ChunkRenderWorker.java:56)
     at java.lang.Thread.run(Unknown Source)
    
    -- System Details --
    Details:
     Minecraft Version: 1.9.4
     Operating System: Windows 10 (amd64) version 10.0
     Java Version: 1.8.0_92, Oracle Corporation
     Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
     Memory: 130613568 bytes (124 MB) / 884473856 bytes (843 MB) up to 1431830528 bytes (1365 MB)
     JVM Flags: 3 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmn512M -Xmx1536M
     IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
     FML: Minecraft 1.9.4 MCP 9.28 Powered by Forge 12.17.0.1921 Optifine OptiFine_1.9.4_HD_U_B4 3 mods loaded, 3 mods active
     States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
     UCHIJA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar) 
     UCHIJA FML{8.0.99.99} [Forge Mod Loader] (forge-1.9.4-12.17.0.1921-1.9.4.jar) 
     UCHIJA Forge{12.17.0.1921} [Minecraft Forge] (forge-1.9.4-12.17.0.1921-1.9.4.jar) 
     Loaded coremods (and transformers): 
     GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
     Launched Version: 1.9.4
     LWJGL: 2.9.4
     OpenGL: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
     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: Raspberry Ripple, DangerZone.zip (incompatible)
     Current Language: English (US)
     Profiler Position: N/A (disabled)
     CPU: [email protected]
     OptiFine Version: OptiFine_1.9.4_HD_U_B4
     Render Distance Chunks: 12
     Mipmaps: 0
     Anisotropic Filtering: 16
     Antialiasing: 0
     Multitexture: true
     Shaders: null
     OpenGlVersion: 4.5.0 NVIDIA 368.22
     OpenGlRenderer: GeForce GTX 970/PCIe/SSE2
     OpenGlVendor: NVIDIA Corporation
     CpuCount: 4

    Not sure what other blocks this affects, but I have a feeling it will basically break everything.

    Posted in: Minecraft Mods
  • 0

    posted a message on Transparency sorting, performance problem

    When I talk about optimizations, I'm referring to things like pre-GPU backface culling, frustum culling, adjacent face culling (which would do nothing in my current 'worst-case' test environment) etc. When I mention functionality I mean, basically, not sorting polygons in the worst way possible - the focus of this thread.


    The code is as optimized as I can make it in terms of general optimizations. The only other things I can probably do, would need to be something deeper which I do after all the framework is in place, otherwise it becomes a major task involving basically redoing everything from scratch for every little tweak.


    Also, I feel that you're taking my frame-rate concerns a little out of context. I'm fine with the things like lack of frustum culling dropping the framerate from maybe 700 to 400 for a small testing environment, which I have mentioned I will do later on, but I must immediately deal with issues where one sorting operation per frame drops my 400 fps figure down to 5-10.


    In terms of buffers, I realise that I must have been thinking of the type of buffer used processing-side. I will implement the buffer growing for only when they reach maximum capacity (how much should I grow them to? 150%? Less/more?)


    Full rundown of my block implementation: (Feel free to skim over some parts, jump about for reference).


    World -

    ChunkHandler.

    BlockStateRegistry.

    BlockDataRegistry.


    ChunkHandler -

    ArrayList of loaded Chunks.

    LongHashMap of loaded Chunk IDs (Long compiled from chunk coordinates) to Chunk objects - used to establish if a chunk is loaded at a given location, or to retrieve it. Could be compacted and optimised.


    LongHashMap -

    Effectively a HashMap using Longs instead of ints.

    Shamelessly copied from Minecraft for now, ABSOLUTELY MUST CHANGE.


    Chunk -

    Block[16][16][16] all blocks in coordinate-indexed form.

    Ints x,y,z (position of chunk, using 3D coordinates, see 'cubic chunks' Minecraft suggestion).

    World that contains it.

    Int distance from camera (chunks are also sorted by distance so that sets of transparent blocks can be rendered per-chunk rather than sorting the entire world at once).

    ArrayList of all blocks that are renderable (any SOLID or CUTOUT rendering, prevents iterating through all 4096 block coordinates each time the mesh is rebuilt - actually probably leftover stuff I need to remove).

    ChunkRenderer.

    ArrayList of translucent blocks, sorted away from solid blocks.

    ArrayList of BakedVertex for SOLID.

    ArrayList of BakedVertex for CUTOUT.

    ArrayList of BakedVertex for TRANSLUCENT - not actually sure what it's there for right now, looking at it.


    ChunkRenderer -

    Fairly complex and all over the place, will probably get its own detailed description later on.


    BlockDataRegistry -

    Simple ArrayList mapping of BlockData to a String for the block state (probably will end up being module:type[value1=true, value2=UP, etc...]).


    BlockStateRegistry -

    Simple ArrayList mapping of a String for the block state to BlockStateDefinition.


    Block -

    Its own BlockData object.

    Pointer (Is that the right term? It's set to an existing object rather than defining new) to a BlockStateDefinition. Updated every time the BlockData is updated.


    BlockData -

    Fairly small wrapper around an int masked into three bytes (one byte unused, I will rectify this if it causes a major waste).

    8 bits (of the int's value, unsigned, not an individual byte) for module (future expansion packs etc).

    8 bits for block type.

    8 bits for additional data.


    BlockStateDefinition -

    BlockModelVisual.

    Currently unused BlockModelPhysical.

    String for the block state (remember this is per definition, not stored per block object).

    EnumWorldBlockLayer.


    BlockModelVisual -

    ArrayList of BlockElementVisual (to be compiled OR used in entity rendering).

    boolean[6] of which faces can cull (solid & full).

    ArrayList of BakedVertex (compiled from elements, used for chunk mesh).

    Function to compile and bake the elements into vertices.


    BlockModelPhysical -

    ArrayList of BlockElementPhysical.


    BlockElementVisual -

    boolean[6] of visible faces.

    byte[6] of face culling masks (ie. if the north face of this element gets culled by an adjacent block to the west - I don't really know if this is useful, I may just use 'cullable' booleans).

    Vector3f most negative vertex coords.

    Vector3f most positive vertex coords.

    Vector3f rotation (in degrees - I could probably use short[3] at the cost of a tiny amount of visual precision).

    Vector3f coords to rotate around.


    BlockElementPhysical -

    Vector3f most negative coords.

    Vector3f most positive coords.


    BakedVertex -

    Floats x,y,z (wasn't sure if Vector3f has a major overhead compared to raw floats).

    boolean ignore lighting (for glowing parts of blocks in situations where they aren't illuminated anyway, eg in some block/entity hybrid form - like FallingSand in Minecraft).

    float baked shading value (precalculated since blocks rendered in the mesh will not have animated rotating parts).


    EnumWorldBlockLayer -

    Simple Enum.

    NO_MODEL (to be rendered in another way, eg as an entity for moving parts).

    SOLID (rendered opaque in mesh, no alpha testing or blending).

    CUTOUT (rendered in mesh with alpha testing).

    TRANSLUCENT (sorted and rendered outside of mesh).

    Renderer uses this to quickly establish how a block needs to be rendered.


    The shading was not in fact a dilemma. After a little bit of scratching my head over fairly basic trigonometry of xyz rotations, and then the obligatory half an hour of searching for the one place I forgot to ensure float divisions, all was fine. Also I could have easily used the GL_LIGHT... functions like Minecraft seems to for entities, however I wanted to ensure reliable, reproducible and predictable results across both dynamically shaded objects and baked shading. Also, from what I've seen, shaders pretty much demand the use of normals for anything useful to come out. I would like to avoid using normals for as long as possible (yes I know they're meant to be used in absolutely every situation for 3D OpenGL but they increase the buffer upload size to at least 1.25x - if I do it wrong then up to 2x - I can't really afford that when I'm already mostly wrestling with memory management in the background)


    ~


    I would like to take the time to apologize for seeming like I'm trying to argue against some of your advice. I do appreciate the help, however some things might not be suited to my project in its current state.

    Posted in: Computer Science and Technology
  • 0

    posted a message on Transparency sorting, performance problem

    I realise that Minecraft's renderer is generally bad in terms of performance, which is why I'm using it as a starting point for proper voxel rendering functionality rather than starting on tighter optimisation.


    I am currently in the middle of restructuring the mesh renderer, block model meshing, etc. so I cannot post any understandable code right now. I will post what you've requested once it at least works.

    Yes I did mean object instead of instance. I'm not sure where my mind was wandering when I wrote that.


    I am not currently performing any form of culling. Again, I am first focusing on 'correct' functionality before optimisation.


    To clarify, the solid mesh of the chunk is only rebuilt when a block's state is changed. The handling of transparency is still in the works but has a fairly similar first stage. Buffers are uploaded by glBufferSubData in the case that the size didn't change. If it did change then glBufferData is used. I will, when I begin optimisation, change this to use buffers with excess space, which are grown only when the usage goes above whatever the recommended percentage is (75% ?).


    Thanks for that info regarding quads, I will try to implement something reasonable.


    PS: Some of the code restructuring is related to directional shading of rotated cuboids, so it's not entirely critical to this.

    EDIT: Shading mostly done, can focus on chunk rendering again soon

    Posted in: Computer Science and Technology
  • 0

    posted a message on Transparency sorting, performance problem

    I am aware of gamedev.net, however I decided to ask here simply because I wish to figure out how Minecraft itself manages this so efficiently.


    As I mentioned, I will of course give some code if I know what to give (I've already written quite a lot just in terms of the sky renderer, fog etc. so I can't post everything).


    I am already attempting to use buffer objects, albeit through the ARB extension exposed by this version of LWJGL. However, I fear I may have accidentally used vertex array objects instead, but the actual rendering performance seems flawless so far so I doubt there are any issues there. I am also failing to see how vertex shaders and fragment shaders can be useful to a game like this, however I have already seen that it may be a solution for implementing correct smooth lighting eventually.


    I am updating block distance relative to the camera before every render, only for transparent blocks (although in my current test environment everything block is transparent, to simulate the kind of situation that Minecraft would encounter with several chunks containing scattered stained glass - which by the way performs very nicely on this same system). The block data does effectively remain static in the case of solid blocks, and for transparent blocks, I do nothing but sorting.


    I am sort of using compiled meshes. One for the solid layer and one for transparent. These are stored per chunk instance as public variables so that the renderer can access them without going through a getter method (I have applied this logic throughout most of the code overall). This is the first part where I can sort of see the flaws in my solution. Rather than storing block instances in an ArrayList and sorting that and then recompiling to meshes every frame, I should compile to an ArrayList of polygons*, then sort that and compile to a vertex array each frame, correct?

    (* Should I store as triangles or as quads? Also what about the actual data sent to the GPU? What is preferred/recommended? Quad-to-triangle processing time, or 1.5x buffer size?)

    Posted in: Computer Science and Technology
  • 0

    posted a message on Transparency sorting, performance problem

    For a few weeks I've been trying to create a game (which I will eventually develop into a game engine / platform, comparable to Garry's Mod), based around the concept of voxel games such as Minecraft. For the purpose of this thread, let's just assume it's another Minecraft clone. The project is based in Java, since I am much more comfortable and familiar with Java than I am with C++ or a higher level platform like Unity.


    This is my first experience with both LWJGL and OpenGL, and as such I have already had to learn a lot to develop anything functional, although I have come from a background of Bukkit plugins, random Java applets, etc. I currently have fairly decent chunk management and untextured block model rendering, which can render approximately 21k static cuboids at a respectable ~600FPS on my machine.


    The only trouble comes when I attempt to render transparent blocks. I very quickly discovered the need to render transparent objects in order from far to near, relative to the camera. This does indeed work as expected, however sorting needs to be repeated constantly because of player/camera movement. However, this sorting causes major performance trouble, even if I set up a way to only execute it every few seconds.


    Right now, my implementation is to keep track of an ArrayList of blocks for each chunk, which is only rebuilt from the chunk's data when a block changes. Every time I choose to sort the blocks (every frame, every few seconds etc...), I first iterate through the ArrayList and update each block's distance value based on the camera's location. Then I sort by a standard Comparator. This appears to give very poor performance on this number of blocks, noticeable as major frame rate drops.


    I would like to figure out how to execute this sorting as efficiently as Minecraft handles it. I assume that running the task in a seperate thread will hugely improve visual performance, however it will still result in a fairly slow update rate once I'm rendering a full world.


    Could someone please point me in the right direction? Thanks.


    PS: I have not included any code samples in this initial post, simply to keep it short and fairly simple. Please do not hesitate to ask for some if needed.

    Also I have already decided against using order-independent translucency methods such as screen-door transparency. Finally I would like to mention that I do not wish to start using 'modern' OpenGL (shaders, etc) as a solution to problems like this.

    Posted in: Computer Science and Technology
  • 0

    posted a message on Raspberry Ripple 1.3 - UPDATED FOR 1.8

    Update 1.3 released at last! WOW it took a long time to do - I was not working on it much, just didn't have much time or motivation to get stuff done.

    Posted in: Resource Packs
  • 0

    posted a message on Strange crash

    Thanks for the info, but I have already ensured that the latest libraries are installed. However, there does appear to be something more to this. The error occurs even when the game is started in no-sound mode (by disabling all audio devices - it confirms in the console "Switching to no sound" / "Silent mode" / whatever it was). Also, this ONLY triggers when resources are reloaded due to the connected textures option being turned on/off. It does not occur when reloading resource packs normally or via F3+S.

    Posted in: Java Edition Support
  • 0

    posted a message on Strange crash

    So I've tried reinstalling the game's Java runtime, then my main Java installation, nothing new. I created a completely fresh Jar file with the same MC & OF versions, CRC checked it against the one I already had, same hash so no issues there. Next thing is audio drivers.


    EDIT: Can confirm that there are still issues if I force the game to start in silent mode (disabled all audio output). Not audio drivers then.

    Posted in: Java Edition Support
  • 0

    posted a message on Strange crash

    So I've just reinstalled basically everything for the second time in the last few days (mega virus - irrelevant). I have reinstalled the Minecraft launcher the standard way, with the .minecraft folder already containing the old world files, versions, resource packs, etc.


    I've run into a bit of an issue with the game. It's kind of crashing, but in an odd way. It occasionally triggers when turning CTM on/off in Optifine. This event triggers two things (aside from actually changing the option): the button click sound, and the resource manager reloading.


    Therein lies the problem - the crash appears to be a result of playing the click sound when the resources are reloading. Note: this occurs on 1.8.0, 1.8.3 and 1.8.7 versions of Optifine as far as I can tell, and did not begin until I reinstalled stuff.


    The last piece of information in the console:

    [18:06:07] [Client thread/INFO]: Reloading ResourceManager: Default, [information removed]
    [18:06:07] [Thread-12/ERROR]: Error in class 'CodecJOrbis'
    [18:06:07] [Thread-12/ERROR]: Unable to acquire inputstream in method 'initialize'.
    [18:06:07] [Thread-12/WARN]: ERROR MESSAGE:
    [18:06:07] [Thread-12/INFO]: minecraft:sounds/random/click.ogg
    [18:06:07] [Thread-12/WARN]: STACK TRACE:
    [18:06:07] [Thread-12/INFO]: bno.a(SourceFile:58)
    [18:06:07] [Thread-12/INFO]: bpy$2$1.getInputStream(SourceFile:405)
    [18:06:07] [Thread-12/INFO]: paulscode.sound.codecs.CodecJOrbis.initialize(CodecJOrbis.java:281)
    [18:06:07] [Thread-12/INFO]: paulscode.sound.libraries.LibraryLWJGLOpenAL.loadSound(LibraryLWJGLOpenAL.java:392)
    [18:06:07] [Thread-12/INFO]: paulscode.sound.libraries.LibraryLWJGLOpenAL.newSource(LibraryLWJGLOpenAL.java:640)
    [18:06:07] [Thread-12/INFO]: paulscode.sound.SoundSystem.CommandNewSource(SoundSystem.java:1800)
    [18:06:07] [Thread-12/INFO]: paulscode.sound.SoundSystem.CommandQueue(SoundSystem.java:2415)
    [18:06:07] [Thread-12/INFO]: paulscode.sound.CommandThread.run(CommandThread.java:121)
    [OptiFine] *** Reloading textures ***
    [OptiFine] Resource packs: [information removed]

    This particular crash (I call it a crash - the game hangs and console output ceases but the game window remains open, no actual crash report) is from 1.8.3 - I believe the OptiFine version is HD_U_B1.


    It appears that some people have had similar issues in the past, and resolved the problem by deleting the assets folder. I have tried this, and it flat out did nothing. Not even a different sound that triggers the error. Ok, next solution? Delete libraries so the game practically reinstalls everything. After tidying up some 404 errors with LiteLoader download on a separate installation, I was right back to the same situation - no change.

    So, here I am. Something's clearly broken beyond hope and needs to be deactivated, completely wiped and installed fresh - that's where I need your help. What is likely to be that broken 'something'? Part of Java? Audio drivers? Minecraft.jar?

    I could try each and every relevant part of the system myself but I want to at least narrow down my options before potentially wasting days on this.

    Posted in: Java Edition Support
  • 0

    posted a message on Raspberry Ripple 1.3 - UPDATED FOR 1.8
    Quote from EpicMiningBeta»

    :D yayy pls change the download links it still goes to soundcloud

    if u need pm me i will send u my email and mediafire them! :D
    Good day :)

    I'm gonna put ur banner in my sig

    It deserves it!


    Sorry about the soundcloud page! The website I hosted the files on has shut down and now redirects to its creator's soundcloud. I will try get 1.3 out for Minecraft 1.8.x asap, but I am currently staying away for a week. I'm rather glad you necro'd this post actually :)

    Posted in: Resource Packs
  • 0

    posted a message on Raspberry Ripple 1.3 - UPDATED FOR 1.8

    The full release of the 1.3 update is upon us! I'm just making final changes to a few things and then I will update the post.

    Posted in: Resource Packs
  • To post a comment, please .