everything is up to what advenced game you want to do.
Its always easier to use ready solutions like TerraMonkey. But if you plan create big big game, you would always need do a lot of things yourself. Or extend existing solutions.
for example myself i have own Editor, because none of existing will support own ECS/grass/etc solutions.
If you start your journey with JME, most important is you to learn SceneGraph idea, how filter works, ECS(entity-component-system, there is Zay-ES to use), PBR material (because its modern material usage, metallic,etc), Blender 2.8 gltf export (also because its modern solution) - where in Blender 2.8 you can very easly create PBR material.
You also need to know(if you want create PBR or other good materials) what is:
- albedo map - color map
- height map - used in some shaders - like name say its black to white based on height
- normalmap - its rgb map with calculated light directions (to simulate texture based shapes/holes/etc)
- parallaxmap - more advanced than normalmap, it move pixels to make better effect.
- glowmap - like name say, where light glow
- metallicmap - where material is metallic (where it reflect environment)
- roughenss map (where metallic color is “blurred”)
and many more of other maps used in shaders.
For blender 2.8 here is one (outdated but show how it is easy) to create PBE material there:
you just paint it. cant be easier
ECS is really important. For example you say about Bushes, but will player be able to collect for example “food” from this bushes? Here best solution come ECS, and this bush then should be as ECS entity, instead of just “grass part”.
Ofc easiest way to learn is to look at some good ready solutions. So you could search some better written open-source games in JME to see.
Everyone were learning once, so also feel free to ask question here on forum and also on Discord (i hope you are there)
edit:
Also i think a lot of new members use Ant build using SDK, while everyone suggest using Gradle with ANY IDE. While for example you need to know jme-bullet package is wrapper while jme-jbullet(written in Java) or jme-native-bullet(Written in C) you need to choose one (native seems better because supported) or about jme-lwjgl and jme-lwjgl3, also use only one of this packages/libs.
In short, you choose what packages/libs you want to use in your game.
Some of this libs might be written in C so then they generate “lib” for platform where game start(if need). it is for example for lwjgl, where you start your game it create for user new lib depending on platform he use. So in fact JME is 50% C and 50% Java.