23

Yes, it generates more chunks (or at least more of the village tree) than you think it does. This is what I call "area of interest" in my voxel code. There are two kinds of area of interest: Logical (which is what we're discussing here) Rendering (which is typically be smaller in radius than the logical area) Remember that the only way your renderer can ...


16

What you need to do is separate terrain from live blocks. For example you could store the live blocks in a dictionary that uses a point as key. And then unload the terrain. This way your live blocks stay in memory in a way you see fit, and you can still look them up based on position, but the terrain is stored on disk for later retrieval. This will increase ...


9

Technical stuff During Minecraft's chunk generation a chunk passes several stages before it is done and can be rendered. These stages, in order, are as follows: EMPTY: Just as indicated, the chunk barely exists and is empty. STRUCTURE_STARTS: Here world generation decides whether a chunk might be the origin of a structure, and if so, it also generates the ...


8

You can't just open the jar in Eclipse. Even if you have some kind of decompiler-plugin, you will only see obfuscated code. You will need the Minecraft Coder Pack to decompile and deobfuscate the jar (as well as MCP can anyway) so you can work with the code. Additionally, if you want do develop Minecraft-Forge mods you should check out this page. Forge ...


6

The bulk of Minecraft's chunk rendering goes through a vertex array. The world is split into 16x16x16-block render-chunks (which currently happen to be the same as storage-chunks, but it wasn't always that way). Each render-chunk is converted to a vertex array, and rendered. It uses OpenGL display lists (one per render-chunk) as an older alternative to VBOs....


6

What A* needs to work is the following: Given the current node, get the list of possible nodes it can move to, with their costs. The ability to evaluate the heuristic function. Please notice I've said nothing of a grid. A* will work with any graph, with nodes and links. If you could have the graph pre-made, you would just execute on the graph. But you don'...


5

First, we need to identify the square consists 4 symmetric sides, each of them of length 2*r. 1 1 1 1 2 4 x x x 2 4 x C x 2 4 x x x 2 4 3 3 3 3 As you can see, the sides are symmetric relative to center, that means we can can take one cell from each side in each iteration, one coordinate always fixed while the other controlled by offset. To make it easier ...


4

Backward compatibility is hard work. It really limits the architecture choices you can make. When you only have your application which doesn't need to interface with anything, and you decide that it's time to make everything different than you used to do it before, it's not a problem at all. But when you need to maintain compatibility with external ...


4

Tekkit (a popular minecraft mod) does this by allowing players to build anchors that keep a few blocks around them in memory regardless of player proximity. It might be a good choice if there is clear distinction between dynamic blocks that require the presence of the player (an automatic door) and others that don't (a generator of some sort). http://...


4

Learning to better help yourself is a wonderful thing, it helps you the most! With most things programming, doing a simple Google search first is typically the best route. Then there's the option of reading the documentation for the thing you're working on. Often they have helpful tutorials or manuals to help you. Once you find a good source for ...


4

That's usually just due to non-existent mipmapping. Turn it on.


4

🏅 Objectives After reading this answer through and through, you should be able to effectively answer the following questions: What is an add-on? What is a resource pack? What is a behavior pack? What is the difference between the two? What does JSON stand for? What is JSON used for? What tools are required to create an add-on? What official resources ...


3

Class Based as a quick lookup learns. Every block is defined in a loose file and extends Block. package tutorial.generic; import net.minecraft.block.Block; import net.minecraft.block.material.Material; public class GenericBlock extends Block { public GenericBlock (Material material) { super(material); } }


3

These are java package namespaces, based on the conventions for that language. See this question: https://stackoverflow.com/questions/2661698/java-com-package-namespace . Namespaces are used to group together and scope different code components within a project.


3

According to MCP 9.03 RC1 for Minecraft 1.7.2: This version of MCP works for Minecraft 1.7.2 only. A version for newer 1.7.x version will be released eventually. Even if you do modify the ~\conf\version.cfg file to look for 1.7.9 versions it fails (version 1.7.9 contains Twitch integration that 1.7.2 does not). I dare say there are many other ...


3

The String you pass to setTextureName() has a special format which isn't very well documented. If you just pass it a filename such as roly_block, it internally gets changed like so. No mod is specified, so it assumes it's a default Minecraft file, and as you're calling it from a Block class, it knows you're talking about a Block texture and all textures are ...


3

Here is how it's accomplished for the IngameInfo mod (my code): https://github.com/bspkrs/IngameInfo/blob/master/src/net/minecraft/src/mod_IngameInfo.java#L968 MovingObjectPosition objectMouseOver = mc.objectMouseOver; if (objectMouseOver != null) { if (objectMouseOver.typeOfHit == EnumMovingObjectType.ENTITY) { return objectMouseOver....


3

It's a conspiracy! Nah, not really. Although much of their success rides on user-created content, Mojang has done nothing to actually enable modders to do their thing. Because mods are basically just Java classes injected into the game code, it's very easy for an update to break everything. Assuming that you're asking this question in the interest of ...


3

There are a wide variety of ways to interact with Minecraft programatically, including an official Javascript "add-on" API to the "bedrock" version of Minecraft, APIs for Minecraft servers, unofficial hacks on the client side to the Java version of Minecraft, and other specialized offerings. They are briefly introduced at Minecraft ...


3

(In this answer I assume that your world is made of separate cubes. If some cubes joined together into grids, then the algorithm can be improved a lot.) You can check if a side is completely inside of a cube, and only add it to your vertex buffer if it's not. The algorithm is easy: // B······• // :'. '. // : A······C // : : : // • : :...


3

Basically what you said above answers your question... Split the world into "chunks," and only load these when the player is within a certain distance. Minecraft has that useful "Render Distance" setting. Yes, use VBOs. They can be optimized. Make sure to use shaders, rather than inline quads and alike. Make sure to cull faces than aren't visible. Assuming ...


3

There is the modcoderpack. It contains the minecraft client and server code: http://www.modcoderpack.com/website/releases


3

I would recommend you take a look at the flyweight pattern. It allows you to use objects such as tiles or blocks in very large numbers when a simple repeated representation would use an unacceptable amount of memory. The principle is well represented by this picture : You basically have one object Tree that is instanciated and which defines all shared ...


3

It's either called Marching cubes/squares (depends on how many axes you're working with), autotile or -fence. The marching algorithms work on filled areas. You define whether the corners of the squares or cubes are inside or outside of an object and it automatically generates the mesh for you. Marching squates needs 16, marching cubes needs 256 different ...


3

You can't. You can't make a "size" 1.8 slime. The closest you can get is a size 2 slime because Slime.setSize(int) only takes an integer because the Size NBT tag within a slime only takes an integer too. See this.


2

Vanilla Minecraft implemented seamless relative teleports recently (link), you might be able to get away with just having the server execute a command: Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "tp player 0 0 0");


2

I develop software that converts motion input to responsive and precise mouse input, as well as maintain a website that tries to help developers implement equally good solutions themselves. I generally advise against movement thresholds, although it depends how much responsiveness and precision players want, I'm glad that's working for you in your situation. ...


2

I would mention a few specific games (such as Stonehearth, which is where most of the Qubicle character images come from) but there are a ton of games, art (e.g. on DeviantArt), demos, movies, etc that use different styles. Hence, I suggest an image search. Search for voxel characters, blocky characters, and "qubicle" characters. (Yes, put "qubicle" in ...


Only top voted, non community-wiki answers of a minimum length are eligible