Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Custom Leaf and Wood registry


ScottKillen
 Share

Recommended Posts

When writing a standard WorldGenerator for tree generation, or large structural or landscape features, we do a lot of checks for wood and leaf blocks. If we want to integrate with other mods, or have our trees grow in forest of custom trees,or have other's  trees grow in our forests, and if we want to support the decay of custom leaves on an equal basis with vanilla leaves, we need a registry for leaves and wood.

 

I have coded this in Extrabiomes and have the code ready to turn over to the forge team, but I'm unsure about who to talk to, or how to join the team as a coder. All that is required is two static sets and one interface. This works VERY well in practice with the mods that I have been able to support with Extrabiomes. Other developers play things more close to the vest and cannot be supported by our mod.

 

The results are difficult, for instance, our mod provides entire biomes of custom tree forests. Industrialcraft rubber will spawn in these biomes, but growth is often stifled because our leaves look like unknown block to that mod and so the tree grow fails. RedPower's volcanoes do not remove our leaves when the form, because the WorldGen can't identify our leaves as such and so the results look devastating.

 

I have done/am willing to do the work involved in making this small feature with a big impact available to all forge mods as a part of Forge. I would be grateful if someone could help me understand the process of adding this myself or donating the code to the project.

Link to comment
Share on other sites

Humm, someone actually bothered to make extra trees and think of how to make them interact with each other properly, nice.

Your best bet for getting something into forge, is to clean it up, and submit a Pull Request on Github.

 

Ideally submitting a small example mod to showcase what you're trying to do.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Patreon: http://www.patreon.com/lexmanos
Paypal: http://paypal.me/LexManos

BitCoin: 1Q8rWvUNMM2T1ZfDaFeeYQyVXtYoeT6tTn

Link to comment
Share on other sites

Thanks, LexManos and OvermindDL.

 

Github won't be a problem...I'll probably be needing help after I make my changes, because I am not familiar with the process.

 

I am curious abut what would be a good way to showcase this...I will prepare a mod, but in all honesty, the showcase mod would be about 20 times larger than the change itself...I suppose I could submit my test mod, but I fear that the subtleties of this might make it get lost.

 

I can very easily provide before and after screenshots as well as a save, with part of the terrain generated before the change and part after, to provide contrast in addition to the test mod.

 

What is the forge policy regarding vanilla changes? This feature would require one line changes to the wood block and several of the WorldGens as well as repairing a bug in the WorldGens for jungle trees where the wood block id is hardcoded...

 

If these are allowed, what tool do I use to make the patches to check in?

 

Thank you guys for being so receptive to this!

Link to comment
Share on other sites

Thanks, LexManos and OvermindDL.

 

Github won't be a problem...I'll probably be needing help after I make my changes, because I am not familiar with the process.

 

I am curious abut what would be a good way to showcase this...I will prepare a mod, but in all honesty, the showcase mod would be about 20 times larger than the change itself...I suppose I could submit my test mod, but I fear that the subtleties of this might make it get lost.

Just a basic tree mod would probably work, have new ones grow and use your api properly.

 

I can very easily provide before and after screenshots as well as a save, with part of the terrain generated before the change and part after, to provide contrast in addition to the test mod.

 

What is the forge policy regarding vanilla changes? This feature would require one line changes to the wood block and several of the WorldGens as well as repairing a bug in the WorldGens for jungle trees where the wood block id is hardcoded...

I cannot speak for Lex but vanilla hooks seem to be well accepted if they have a useful purpose, are minimized in code (keep about all the code you can 'elsewhere', like in ForgeHooks.java, with just a single line or two in the vanilla class), and cannot already be done via some other method, like reflection (which your API here fills something that reflection cannot fix).

 

 

If these are allowed, what tool do I use to make the patches to check in?

Forge actually already has a script to do that.

 

You want to get Forge from github, not the source distribution.  The github version has a development set up for working on forge itself.  When set up, make your change, and there is a script that will auto generate patches and so forth.  Just run it, then push back to github as a pull request.  Lex has done an amazing job at keeping it very simple, and as such he can still explain it better.

 

Thank you guys for being so receptive to this!

This would be a very useful little hook, and one that *requires* vanilla changes, which is useful to have in Forge instead of 'other' mods editing base files.

 

It would also be useful if the API could be used to disallow blocks that trees overwrite.  Some mods have rather costly blocks that are often run in tree farm (think RedPower or BuildCraft), and being non-solid a growing tree can grow into and destroy the block, it would be nice to be able to mark a custom mod block as preventing tree growth as well.

Link to comment
Share on other sites

I think I must be doing something wrong...I never have a problem decompiling with the forge releases...but I do the following and I get tons of patch errors...

 

[*]Clone forge from github

[*]Extract mcp into my project directory

[*]Put server jar in jars and copy bin and resource directories there too

[*]install.cmd (Apparently, the install scripts crash when run from forge/install...they like to be up one in forge)

 

Logs are here: http://www.mediafire.com/?wwge0tlo9pmvpo0 Any help would be appreciated (I know I am missing something...I feel like a newb)

Link to comment
Share on other sites

It would also be useful if the API could be used to disallow blocks that trees overwrite.  Some mods have rather costly blocks that are often run in tree farm (think RedPower or BuildCraft), and being non-solid a growing tree can grow into and destroy the block, it would be nice to be able to mark a custom mod block as preventing tree growth as well.

 

I just saw this...I might as well add this while I'm in the code. It would be a nice feature.

Link to comment
Share on other sites

Lex,

 

I tried setup first last night, and I got some errors, so I then treid the process described above...

 

The process I followed tonight is this:

[*]Clone my branch of forge.

[*]Decompress mcp into the MinecraftForge directory (that contains the 'forge' directory.)

[*]Copy minecraft_server.jar and my clean vanilla bin and resource directories to the 'jars' directory.

[*]Run setup.bat

 

All looks fine, except that server recompilation chokes on a syntax error in BlockRedstoneRepeater.java and the application of patches looks good and then many multiple failures.

 

The set up script reports that all is well...but the server will not compile. It has MANY errors.

 

If this is the way it is supposed to be, I will continue, but it feels awkward with the server not compiling.

 

I appreciate your patience and understand that I sound like a complete noob...I just need to get my bearings in the build environment...

 

Once I get it, I'll be able to do get around pretty good.

 

So, is it ok that the server is not compiling?

Link to comment
Share on other sites

Make sure you've copied the conf folder from forge/conf to mcp/conf

The setup script does not automatically do that, {as it would be stupid}

No patches should fail, so thats probably your issue.

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Patreon: http://www.patreon.com/lexmanos
Paypal: http://paypal.me/LexManos

BitCoin: 1Q8rWvUNMM2T1ZfDaFeeYQyVXtYoeT6tTn

Link to comment
Share on other sites

Pull request submitted.

 

Showcase mod source attached and at at http://www.mediafire.com/?8qjzvqa36281onq

 

I look forward to the feedback!

 

 

Mod illustrates custom trees (sandstone leaf texture) playing nicely with and behaving like vanilla trees. Also every chunk has a glass tower that leaves grow around, and not through, to illustrate that non-opaque blocks can be registered impervious to leaf growth.

TestMod.zip

Link to comment
Share on other sites

Humm, woke up to your pull request, Will need to look into it and see whats whats, but, you also forgot the server side :P

But, only a bit of a issue there, I would move those tree-lists to just plain Block methods. And make them all world/location {and therefor TileEntity/Metadata} sensitive.

 

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Patreon: http://www.patreon.com/lexmanos
Paypal: http://paypal.me/LexManos

BitCoin: 1Q8rWvUNMM2T1ZfDaFeeYQyVXtYoeT6tTn

Link to comment
Share on other sites

Thanks, Lex...

 

Didn't forget the server side...hesitated because I have never done any server side programming and because of the minor (;D) issue that I cannot get the server's forge patches to apply cleanly...I know this is something I am doing...but I am not doing anything except browsing the code and running a build script...so I'm not sure what behavior to stop on my end...

 

Also, I know I'm going to have to gain experience on server side programming given the way future versions of Minecraft are headed.

 

You know the code better than me, so I will defer to however you feel this should be done. I will recommit with these functions relegated to the block.

 

Any help you, or anyone else can provide with regard to the server implementation would be appreciated.

 

Regarding the server build errors, I clone forge, extract mcp, copy in the binaries to jars, copy forge/conf to mcp/conf and run setup.bat...everything goes great until it tries to apply the patches to server then it goes nuts...unless I am missing a step, I don't know how to fix it. Like you said earlier, it is something on my end, but I don't know what.

Link to comment
Share on other sites

Hmmm...probably not in this case. I just tracked it to a PEBKAC error...  :-[ You'd be right to ban me for wasting your time.

 

Accounted for the idiot at my keyboard...and now it builds fine.

 

I'll revise my code and include the server this time.

Link to comment
Share on other sites

https://github.com/MinecraftForge/MinecraftForge/commit/3b523d57a9ceef4684442b45a787a4441df612ed

You now are rivaling RP for hooks, 26 base edits for just you.

Go! Make many good tutorials on how to use this.

Make mods take advantage of this.

Make RedPower take advantage of this!

Make it worth my while! :P

I do Forge for free, however the servers to run it arn't free, so anything is appreciated.
Patreon: http://www.patreon.com/lexmanos
Paypal: http://paypal.me/LexManos

BitCoin: 1Q8rWvUNMM2T1ZfDaFeeYQyVXtYoeT6tTn

Link to comment
Share on other sites

Thanks! I always struggle with that...when to start supporting a newer version of forge...

 

We keep older versions of the mod available, and only add new features to the newest version.

 

Right now, some of the features we need are not available until SMP, so as soon as the new Recommended build of forge is out, we will release a new version of our mod. Lots of people are clamoring for SMP.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
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.

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • ok, it works, but how can i say the server that i pressed the button?
    • You named your own class "SimpleChannel", which means the "SimpleChannel" on the field declaration refers to your class, not the Forge class.
    • Hmm, I might just do some sort of jimmy rig to get around this. Do something like make a block model in blockbench that is slightly large than a normal block (something like 0.01 on each side to prevent z-fighting), draw the textures and just have the blocks act as a multipart. (I really hope this can end up transparent and not just blackout the texture underneath) Might be messy, but I really just want to get this done to move onto something else (been working on this one feature for maybe a month because IRL stuff). Thanks for the suggestions anyways mate (I can probably use them for some other crazy idea later).
    • I'm now facing an issue when serializing and deserializing, I better know how NBT works but when using Gson I can only serialize to a file which looks like this:  {"mainInventory":[{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}}],"armorSlots":[{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}},{"tagMap":{"id":{"data":"minecraft:air"},"Count":{"data":1}}}]} But when it comes to deserialization, Gson doesn't work... I won't upload the full log but important bits I cannot understand: [11:32:13.645] [Server thread/ERROR] [EventBus/EVENTBUS]: Exception caught during firing event: Unable to invoke no-args constructor for interface net.minecraft.nbt.INBT. Register an InstanceCreator with Gson for this type may fix this problem. Index: 1 Listeners: 0: NORMAL 1: ASM: class com.example.examplemod.Event.PlayerEvents onPlayerChangeDimension(Lnet/minecraftforge/event/entity/player/PlayerEvent$PlayerChangedDimensionEvent;)V java.lang.RuntimeException: Unable to invoke no-args constructor for interface net.minecraft.nbt.INBT. Register an InstanceCreator with Gson for this type may fix this problem. Caused by: java.lang.UnsupportedOperationException: Interface can't be instantiated! Interface name: net.minecraft.nbt.INBT Thank you in advance, and sorry for the long waiting time.
    • In this Class:  package net.the_goldbeards.lootdebugs.Server; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.network.NetworkRegistry; import net.the_goldbeards.lootdebugs.LootDebugsMain; public class SimpleChannel { private static final String PROTICOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation("corruption","main") ,() -> PROTICOL_VERSION , PROTICOL_VERSION::equals , PROTICOL_VERSION::equals); }  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.