If you got the luck to get some logic, you can directly read sources and "guess". 99% of the source got legit method names, and sources got more and more javadoc with time. The only points are then :
- know what does what.
- know where you have to search.
- know Java syntax.
80% of what you need to code already exist and don't need to be written.
About easy steps in, I would suggest to pass customs codes, try to guess what each line does, and then edit the custom to fit with your desire. Extensively, fix issues, try to guess how to improve it (reusing existing parts of code, or recode it to shorter the code / improve performance). Finally, write your own customs (voicehandler in your case).
L2J is nothing more than knowing how the source is organized. When you know where to search, even a perfect programming noob can understand and code.
Some reminders :
- all already exists, perhaps on a different format, but it exists. At least you shouldn't have issues to find, and at very worst Google is your friend.
- Instances can inheritate from "mother" instances. It's heavily used for all types of NPCs notably.