Can you please post a link for everything that you will have to download right on this page so it isnt as confusing?
Sorry, no. This program is for people who are comfortable using github. I reread your request and added links to the Python and Numpy download pages.
Beothorn: Thanks for the 'execute' command (which will be useful for calling sub-scripts), but did you know you can already give it a script file on standard input?
@codewarrior You mean like a shell script?
I did it but it took 19 hours to execute my script because the light was recalculated on each call to fill :smile.gif:
Thanks heaps! This is a great development resource. I spent one night about a month ago pasting all my maps together using MCEdit. Then I needed some way to join them together so it doesn't all look so butt ugly along the seams. With this tool I was sort of able to make my map looks a little better, but it's still a little ugly. I want to post here my concept for a utility I'm working on now. Python's new to me and I don't have a lot of spare time. Hopefully someone can see where I can cut some corners, or I can sew some seeds and someone will beat me too a finished product :wink.gif:. I think this function would be very well suited to the exiting MapDeleter / Pine Tree Generator app.
Minemeld - Procedural map joining utility (based on pymclevel)
User specifies chunks along the edge of two maps. Steps in the melding process for these chunks as so...
1. Randomly generate the bedrock layers, fairly easy to bluff this with something that looks about right
2. Fill the rest of the chunk with bedrock (bedrock will be our null block to ignore during the melding process, air is not a good thing to ignore)
3. Come up with an algorithm to extrapolate 2x2x2 area of blocks from possibly any number of surrounding blocks, include some noise (steps using this denoted with "*")
4. Fill in chunk sides 2 blocks thick based on the surrounding chunks*, ignoring 4x4 corners (occational random 1 block staggering). Only lay basic natural blocks (no ores)
Now I'm not sure how this will actually work with adjacent chunks that are part of the melding process yet. It's fair to make a rule that minemeld will only allow 2 adjacent melding chunks that must be well separated from one another. By the end of step 4 these sides should be filled and contain no bedrock.
5. Fill in corner blocks*, based on the sides we've just filled in and the surrounding chunks (L shaped 4x4 with innermost 2x2 left out).
6. Generate a column in the middle 4x4 blocks based on generated sides*
7. Fill in the 4 adjacent 4x4 columns
8. Fill in the 4 remaining 4x4 diagonal columns
9. Generate random ore deposits, lava & water springs, etc (make some guestimates of frequency and area they natually occur)
Here's the order I've described above to generate columns of a chunk, order of generation from darkest to lightest...
It's been slow going and the actual code I have doesn't match this process at all yet, it still generates fairly ugly chunks. The algorithm I mention in step 3 doesn't exist either yet. It's been a good excuse to learn Python though and reading up on concepts like 3D noise generation.
Well I'm not going to write the radius for loop stuff for you, but here's some of the 1st code that I wrote to remove chunks and create empty chunks.... http://pastebin.com/Jqu4yh51
There is a native remove chunk method that totally didn't work for me, I'm not sure why. I had a look at the code and copy-pasted os.remove(aChunk.filename) into my removeChunk and it worked, then I noticed though I had to reload the world to pick up the fact it was gone. Notice at the end of createNullChunk it also reloads the world a couple of times in there. You may or may not need to do that depending on what you do.
You can easily change createNullChunk into a function that generates a big bedrock chunk by looking at the two lines starting with aChunk.Blocks and making them just fill the chunk with bedrock (aka Adminium).
Well I'm not going to write the radius for loop stuff for you, but here's some of the 1st code that I wrote to remove chunks and create empty chunks.... http://pastebin.com/Jqu4yh51
There is a native remove chunk method that totally didn't work for me, I'm not sure why. I had a look at the code and copy-pasted os.remove(aChunk.filename) into my removeChunk and it worked, then I noticed though I had to reload the world to pick up the fact it was gone. Notice at the end of createNullChunk it also reloads the world a couple of times in there. You may or may not need to do that depending on what you do.
You can easily change createNullChunk into a function that generates a big bedrock chunk by looking at the two lines starting with aChunk.Blocks and making them just fill the chunk with bedrock (aka Adminium).
Sorry about that, deleteChunk wasn't updating the loaded chunks dict because I had just done a bit of reorganization. The latest github revision should have a working deleteChunk.
Sorry about that, deleteChunk wasn't updating the loaded chunks dict because I had just done a bit of reorganization. The latest github revision should have a working deleteChunk.
I'll update... and no way am I knocking what you've done there. You made the unimaginable, entirely possible for me. The only other feedback I have for you is the examples in the comment of mclevel.py about chunk "Data" was incredibly misleading...
# Set all BlockData from height 64 up to 0.
# Take note that the array is indexed x, z, y. The last index corresponds to height or altitude.
# Also take note that the Data, BlockLight, and SkyLight arrays have been unpacked from 4-bit arrays to numpy uint8 arrays,
# by the call to getChunk. This makes them much easier to work with.
aChunk.Data[:,:,64:] = 0;
I couldn't get such a command to work, but using Block instead of Data here worked fine. Took me a good hour or so of trial and error to figure out I wasn't insane and that I shouldn't be using Data for what I wanted to do (among the other challenges of learning a new programming language). To this day I'm still not sure what Data is for.
Really awesome utility. This has made complex editing of maps 100x easier for me than anything else I have found.
Would it be possible to add a comment command (either the word "comment" or one of the usual comment delimiter characters), so that we can add comments to command files without them aborting with an error? Also, it would be useful to be able to have blank lines in a command file (to separate sections in large files), which currently will also abort with an error.
Would it be possible to add a comment command (either the word "comment" or one of the usual comment delimiter characters), so that we can add comments to command files without them aborting with an error? Also, it would be useful to be able to have blank lines in a command file (to separate sections in large files), which currently will also abort with an error.
Would it be possible to add a comment command (either the word "comment" or one of the usual comment delimiter characters), so that we can add comments to command files without them aborting with an error? Also, it would be useful to be able to have blank lines in a command file (to separate sections in large files), which currently will also abort with an error.
I can see the command line you added for the hash (#) character, and it is accepted when I run interactively, but not when I execute a command file. It still gives me this error: "Command # not recognized."
Edit: I was able to get it running under the execute command by adding similar checks for # and null in the processCommand function. I haven't ever programmed in Python so I am not sure how clean my changes are -- I'll use mine as a temporary fix until the next official version is available.
Sorry, no. This program is for people who are comfortable using github.I reread your request and added links to the Python and Numpy download pages.Beothorn: Thanks for the 'execute' command (which will be useful for calling sub-scripts), but did you know you can already give it a script file on standard input?
"We will absolutely not keep in mind what external mapeditors will have to do to read data from the disk, that makes no sense whatsoever." - Grum
I did it but it took 19 hours to execute my script because the light was recalculated on each call to fill :smile.gif:
EDIT:
oh....I got it...
python /home/lucas/workspace/pymclevel/mce.py /home/lucas/.minecraft/saves/World2 < /home/lucas/Desktop/script.txt
thanks
Cellular automata mod
http://www.isageek.com.br/automataCraft/
Minemeld - Procedural map joining utility (based on pymclevel)
User specifies chunks along the edge of two maps. Steps in the melding process for these chunks as so...
1. Randomly generate the bedrock layers, fairly easy to bluff this with something that looks about right
2. Fill the rest of the chunk with bedrock (bedrock will be our null block to ignore during the melding process, air is not a good thing to ignore)
3. Come up with an algorithm to extrapolate 2x2x2 area of blocks from possibly any number of surrounding blocks, include some noise (steps using this denoted with "*")
4. Fill in chunk sides 2 blocks thick based on the surrounding chunks*, ignoring 4x4 corners (occational random 1 block staggering). Only lay basic natural blocks (no ores)
Now I'm not sure how this will actually work with adjacent chunks that are part of the melding process yet. It's fair to make a rule that minemeld will only allow 2 adjacent melding chunks that must be well separated from one another. By the end of step 4 these sides should be filled and contain no bedrock.
5. Fill in corner blocks*, based on the sides we've just filled in and the surrounding chunks (L shaped 4x4 with innermost 2x2 left out).
6. Generate a column in the middle 4x4 blocks based on generated sides*
7. Fill in the 4 adjacent 4x4 columns
8. Fill in the 4 remaining 4x4 diagonal columns
9. Generate random ore deposits, lava & water springs, etc (make some guestimates of frequency and area they natually occur)
Here's the order I've described above to generate columns of a chunk, order of generation from darkest to lightest...
It's been slow going and the actual code I have doesn't match this process at all yet, it still generates fairly ugly chunks. The algorithm I mention in step 3 doesn't exist either yet. It's been a good excuse to learn Python though and reading up on concepts like 3D noise generation.
There is a native remove chunk method that totally didn't work for me, I'm not sure why. I had a look at the code and copy-pasted os.remove(aChunk.filename) into my removeChunk and it worked, then I noticed though I had to reload the world to pick up the fact it was gone. Notice at the end of createNullChunk it also reloads the world a couple of times in there. You may or may not need to do that depending on what you do.
You can easily change createNullChunk into a function that generates a big bedrock chunk by looking at the two lines starting with aChunk.Blocks and making them just fill the chunk with bedrock (aka Adminium).
Sorry about that, deleteChunk wasn't updating the loaded chunks dict because I had just done a bit of reorganization. The latest github revision should have a working deleteChunk.
"We will absolutely not keep in mind what external mapeditors will have to do to read data from the disk, that makes no sense whatsoever." - Grum
I'll update... and no way am I knocking what you've done there. You made the unimaginable, entirely possible for me. The only other feedback I have for you is the examples in the comment of mclevel.py about chunk "Data" was incredibly misleading...
I couldn't get such a command to work, but using Block instead of Data here worked fine. Took me a good hour or so of trial and error to figure out I wasn't insane and that I shouldn't be using Data for what I wanted to do (among the other challenges of learning a new programming language). To this day I'm still not sure what Data is for.
Additional block-specific data. The direction a railway or torch points, for example.
"We will absolutely not keep in mind what external mapeditors will have to do to read data from the disk, that makes no sense whatsoever." - Grum
Would it be possible to add a comment command (either the word "comment" or one of the usual comment delimiter characters), so that we can add comments to command files without them aborting with an error? Also, it would be useful to be able to have blank lines in a command file (to separate sections in large files), which currently will also abort with an error.
- sunperp
Can't believe I didn't have that in already.
Fixed in this commit: https://github.com/codewarrior0/pymclev ... 33529a1658
"We will absolutely not keep in mind what external mapeditors will have to do to read data from the disk, that makes no sense whatsoever." - Grum
I can see the command line you added for the hash (#) character, and it is accepted when I run interactively, but not when I execute a command file. It still gives me this error: "Command # not recognized."
Edit: I was able to get it running under the execute command by adding similar checks for # and null in the processCommand function. I haven't ever programmed in Python so I am not sure how clean my changes are -- I'll use mine as a temporary fix until the next official version is available.
- sunperp