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

    • Minecraft 1.21.4 requires a new model definition file for each item, which you don't have. These can be created through Data Generation, specifically the ModelProvider, BlockModelGenerators and ItemModelGenerators classes.
    • Hi,  I'm using Forge 47.3.0 for Minecraft 1.20.1 I apologise if this is obvious I am very new to modding for Minecraft. I sucessfully made a mod that launched without errors or crashes (without it doing anything) but in order to add the features I need, I need to add "Custom Portal API [Forge]" as a dependency. However no matter the way I've tried to acheive this, it crashes. I am pretty sure it's not the way I'm putting it in the repositories, the dependencies or the way I'm refrencing it, as I've a hundred diffrent combinations and multiple Maven methods. And on all those diffrent variations I still get this crash: pastebin.com/UhumzZCZ Any tips would be invaluable as I've been loosing my mind over this!
    • Hi, i'm really having problems trying to set the texture to my custom item. I thought i'm doing everything correctly, but all i see is the missing texture block for my item. I am trying this for over a week now and getting really frustrated. The only time i could make the texture work, was when i used an older Forge version (52.0.1) for Minecraft (1.21.4). Was there a fundamental change for textures and models somewhere between versions that i'm missing? I started with Forge 54.1.0 and had this problem, so in my frustration i tried many things: Upgrading to Forge 54.1.1, created multiple new projects, workspaces, redownloaded everything and setting things up multiple times, as it was suggested in an older thread. Therea are no errors in the console logs, but maybe i'm blind, so i pasted the console logs to pastebin anyway: https://pastebin.com/zAM8RiUN The only time i see an error is when i change the models JSON file to an incorrect JSON which makes sense and that suggests to me it is actually reading the JSON file.   I set the github repository to public, i would be so thankful if anyone could take a look and tell me what i did wrong: https://github.com/xLorkin/teleport_pug_forge   As a note: i'm pretty new to modding, this is my first mod ever. But i'm used to programming. I had some up and downs, but through reading the documentation, using google and experimenting, i could solve all other problems. I only started modding for Minecraft because my son is such a big fan and wanted this mod.
    • Please read the FAQ (link in orange bar at top of page), and post logs as described there.
    • Hello fellow Minecrafters! I recently returned to Minecraft and realized I needed a wiki that displays basic information easily and had great user navigation. That’s why I decided to build: MinecraftSearch — a site by a Minecraft fan, for Minecraft fans. Key Features So Far Straight-to-the-Point Info: No extra fluff; just the essentials on items, mobs, recipes, loot and more. Clean & Intuitive Layout: Easy navigation so you spend less time scrolling and more time playing. Optimized Search: Search for anything—items, mobs, blocks—and get results instantly. What I’m Thinking of Adding More data/information: Catch chances for fishing rod, traveling villager trades, biomes info and a lot more. The website is still under development and need a lot more data added. Community Contributions: Potential for user-uploaded tips for items/mobs/blocks in the future. Feature Requests Welcome: Your ideas could shape how the wiki evolves! You can see my roadmap at the About page https://minecraftsearch.com/about I’d love for you to check out MinecraftSearch and see if it helps you find the info you need faster. Feedback is crucial—I want to develop this further based on what the community needs most, so please let me know what you think. Thanks, and happy crafting!
  • Topics

×
×
  • Create New...

Important Information

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