Jump to content

Recommended Posts

Posted

EDIT: Due to coding for both 1.6.4 and 1.7.2, I simply switched back to a metadata-based block for the majority of my multi-texture blocks, and created a new but basically identical block that uses a tile entity for map-makers and creative users. This maintains high performance during world generation while still giving the option of a flexible tile entity for anyone who needs it, with the added benefit that it is extremely easy to code.

 

Of course, this just foists the burden upon map-makers not to use too many tile entity blocks in their designs...

 

Thanks TGG and diesieben07 for your suggestions. One of these days I'll have to delve into Trove so I can fix the problem for real xD

-------------------------------------------------------------------------------------------------------

 

Hey all,

 

I finally got around to making my dungeon blocks able to take on nearly any texture using a simple, non-updating TileEntity; however, as I'm sure most of you can guess, generating significant numbers of these blocks causes very noticeable lag when loading chunks, old or new.

 

Previously, my block used metadata to determine which texture to return, and one bit for whether it could be broken or not, giving me up to eight textures as well as having excellent run-time performance. Is there any alternative to a TileEntity for a block that can have a bunch of different textures?

 

I can think of two, but both are less than ideal:

 

1. Use getIcon(IBlockAccess, x, y, z, side) to use a neighboring texture, but this prevents me from choosing which texture I want and could get funky when each block is trying to get the texture from its neighbor, that in turn is trying to get its texture from the next neighbor and so on.

 

2. Have multiple metadata based blocks, each providing 8 textures, and a CreativeTab filled with my own versions of basically every regular vanilla block. Not very elegant.

 

Barring any better suggestions, I may have to resort to a single meta-based block for my dungeons, and a tile entity-based block for the CreativeTab / people who want to mess around with it.

 

Has anyone figured out a more performance-friendly way to accomplish this?

Posted

Hi

 

Depending on the number of textures you need, I'd suggest the best idea is just taking up more blockIDs.  With (say) 8 metadata and 32 block IDs, you could have 256 different textures which is probably enough?  You could perhaps get around the creative tab problem by just having a single chameleon block on the tab, which changes its own blockID when it gets placed.

 

-TGG

Posted

Hi

 

Depending on the number of textures you need, I'd suggest the best idea is just taking up more blockIDs.  With (say) 8 metadata and 32 block IDs, you could have 256 different textures which is probably enough?  You could perhaps get around the creative tab problem by just having a single chameleon block on the tab, which changes its own blockID when it gets placed.

 

-TGG

Thanks for the reply.

 

The idea behind the block is that the player can right-click on pretty much any standard block and have the block assume that texture, but once placed the texture need never change. What I did for my metadata-based block is to have an array of texture names and use the metadata as the index, making it easy to return the correct icon from the Block methods. While I could theoretically do the same for 256+ blocks, that would be quite cumbersome.

 

For now, I plan on following through with my final idea of using metadata blocks for my structure generation, since I only need 8 textures for those blocks, and leave the tile-entity based block for map-makers with a warning not to use it excessively. The main problem is simply the sheer number of blocks I am generating - if you consider that even a hollowed out 5x5x5 cube requires nearly 100 blocks (98, to be exact), and I am generating roughly 4-6 of those rooms per chunk on my default settings, that's roughly 32,000 added tile entities in just an 8x8 chunk area (500 per chunk x 64 chunks). Best to avoid that :P

 

Anyway, thanks again. I will be switching back to metadata for the most part, though I am still open to other suggestions.

 

Cheers,

coolAlias

Posted

You can make your own data structure.

Assuming you are using 1.7 you have access to Trove, which allows primitive types to be used in maps without boxing.

Furthermore you can encode an entire x, y, z location into a single long. How? X and Z coordinates range from -300000 to +300000 which means they need at most 26 bits in binary. Y coordinate ranges from 0 to 255, which means it needs 8 bits. Combine that and you get 26 + 26 + 8 = 60 bits. A long has 64 bits so that works perfectly. Assuming you need an int to store the fake block you'd use a

TLongIntHashMap

, which maps long values to ints.

Now you still need a way of associating that Map with a World, but I'll leave that up to you.

That is probably as efficient as you can get :D

You are just too damn smart :P

 

I'm actually coding the same thing for both 1.6.4 and 1.7.2 (for some masochistic reason I've been keeping both versions of my mod updated...), but otherwise this sounds like an extremely viable and efficient solution. Thanks for this!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I need to know what mod is doing this crash, i mean the mod xenon is doing the crash but i want to know who mod is incompatible with xenon, but please i need to know a solution if i need to replace xenon, i cant use optifine anymore and all the other mods i tried(sodium, lithium, vulkan, etc) doesn't work, it crash the game.
    • I have been trying to solve a consistent crashing issue on my brother's computer where it will crash during the "Scanning Mod Candidates" phase of the loading process that starts when you click the play button on the Minecraft launcher. The issue seems to stem from a missing library that it mentions in the log file I provide below. I might I'm missing the bigger issue here for a smaller one but hopefully someone can find what I'm missing. Here's all of the stuff that I've been able to figure out so far: 1. It has nothing to do with mods, the crash happened with a real modpack, and even when I made a custom modpack and launched it without putting ANY mods into it (That is where the log file comes from by the way). 2. I have tried to find this class like a file in the Minecraft folders, but I've had no luck finding it (I don't think it works like that, but since I really don't understand how it works, I just figured I'd try). 3. I haven't seen anyone else have this issue before. 4. I know that my modpack (with mods) does work since I've run it on my computer, and it works fantastic. For some reason my brother's computer can't seem to run anything through curseforge. 5. This is for Minecraft version 1.20.1, Minecraft launcher version 3.4.50-2.1.3, forge 47.3.0, and curseforge app version 1.256.0.21056 6. My brother is using a Dell laptop from 6 years ago running Windows 10 (If you think more info on this would help, please ask as I do have it. I'm just choosing not to put it here for now). 7. I have reinstalled the curseforge app and installed Minecraft version 1.20.1. I have not reinstalled Minecraft or forge 47.3.0 but I didn't know if that would help. 8. I had an error code of 1 Please let me know if there is anything else that I am missing that you would like me to add to this post/add in a comment! Lastly, many thanks in advance to whoever can help! ------------- LOG FILE (latest.log) ------------- (from /Users/<NAME OF USER>/cursforge/minecraft/Instances/<THE NAME OF MY EMPTY MODPACK>/logs/latest.log) (This was made after running an empty modpack with same versions for all apps) ("[REDACTED]" is not the actual text from the log, it is me replacing text I figured wouldn't be necessary for fixing and would hurt my privacy) https://pastebin.com/hxXvGGEK ------------- DEBUG.LOG (I realized that I should have put this here first after I had done all of the work on putting latest.log in) -------------------- (again, "[REDACTED]" is not the actual text from the log, it is me replacing text I figured wouldn't be necessary for fixing and would hurt my privacy) https://pastebin.com/Fmh8GHYs
    • Pastebin... https://pastebin.com/Y3iZ85L5   Brand new profile, does not point to a mod as far as I can tell, my fatal message just has something about mixins. Don't know much about reading logs like this, but am genuinely stuck, please help. Java updated, pc restarted.
    • I was playing minecraft, forge 47.3.0 and 1.20.1, but when i tried to play minecraft now only crashes, i need help please. here is the crash report: https://securelogger.net/files/e6640a4f-9ed0-4acc-8d06-2e500c77aaaf.txt
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.