Hot Summer Deals are Here!
Celebrate with up to 99% off on 17,700 resources
01
Days
22
Hours
12
Mins
15
Secs

BuildingTools Plugin For the serious builder.

Status
This thread has been locked.

Flamedek

Feedback score
0
Posts
25
Reactions
6
Resources
0
<<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>

BuildingTools is a plugin with a couple of advanced features and tools to bring your builds and maps to the next level. Some features are aimed at maps and terrains while others are for detail and general use.

<<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
Features
Biome Brush » Paint biomes exactly how you want them. With multiple shapes such as the special 'random' shape which has less intensity near the edges for a unique transition, or your (poly) WorldEdit Selection.

Populate Brush »
Create your vegetation layers with ease. Use the provided presets or create your own. You can also save your brushes for later use.
Does not only generate blocks in a random noise pattern but can also do flower, tree or grass patches within the area. This way you can cover huge areas in a single operation with great and natural results.

Masks » For the populate and biome operations you can use block-, height-, biome- and power masks.

Block Updates » A per-world toggle command to disable block updates. With block updates disabled no physics checks will be done. This allows for many 'impossible' block states; like non flowing water, floating carpets and much more.

Buildworld » A quick and simple command to ease your building experience. Disables natural mob spawning, locks the time to day and keeps the weather clear.
<<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
Price

For this first week the price will be 50% off! Normal price would be $5 but now only $2.50.
Purchase comes with lifetime updates and fixes.​
<<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
Commands

All commands use a flag based system for the parameters. This means you can enter them in any order, and not specified flags will use default values. This lists the basic commands. Commands can have more keywords for other effects. With any command you can use the '?' flag to get more information.​

/biome [biome] <s+size> <a+shape> - Equip a biome wand or update the one you are holding. Add 'set' or use /setbiome to set the biome around you.
/pop <preset/input> <s+size> <a+shape> - Equip a populator wand or update your current one.
/mask block/biome/height/power <input> - Set your mask. Give no input to clear your mask.
/nu <s> <w+worldname> - Disable blockupdates in your current world or the specified world. Use the s flag to toggle it server-wide (full command /noupdates)
/buildworld <on/off> - Toggle, or set to specified state, build mode in your current world.​

<<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>><<>>
Distribution

Main distribution will be handled through spigotmc.org. Link to the project page here:
http://www.spigotmc.org/...

This will allow you to always re-download and download any future versions.
If you do not have or want to create an account there you can ask for a direct download link

Comment below or send me a PM if you have any questions at all.

 
Last edited:
PebbleHost
High performance, consistent uptime and fast support. Minecraft hosting that just works.

Skionz

ogminecraft.com
Premium
Feedback score
1
Posts
1,544
Reactions
1,527
Resources
0
I would post / explain the equations and methods you use so people know that this is as efficient as it can be.
 

Flamedek

Feedback score
0
Posts
25
Reactions
6
Resources
0
Any way to prove this is yours or to show off what it can do?
Proof it is mine? I handcoded it from scratch (twice, actually). Not sure how to prove that, would screenshots of the source do?
http://gyazo.com/fd36cd7064a3f916bb91765145a45e07

I would post / explain the equations and methods you use so people know that this is as efficient as it can be.
I understand. I am still planning to do a showoff video. I am not really that outgoing and am not looking forward to recording a video.. but I understand it's necessary. Explaining some of the methods in no problem, here it goes:

Biomes: When the code receives a request, either by command or brush, it will prepare a loop through the columns of the area. If you have a mask each column will be checked against that, otherwise it will be added to a task. Once a task reaches a limit (16 chunks by default) it will be added to a processing Queue. From there a task will be started, an asynchronous loop will check if the task is done, if it is it will plan the next task a few ticks ahaid. This way your server should stay responsive even with larger or multiple tasks.

Populator: It will loop through the area and look for solid ground blocks with an empty block above it. It will check those blocks against your mask, if you have one, otherwise it will default to only plant on grass and dirt blocks. Then it will find a material from the settings use, using factors with each material to get the proper randomization. 'Actions' like planting trees and doing (flower or like longgrass)patches are done by finding a random x/z location in the area and using that. Again with all the factors of also the regular materials considered.
(Also note that populate operations hook into worldedit -if installed, to record it to your undo list. simply //undo works! )

The rest is more straight-forward. The block updates ONLY cancel certain events, and thus is in all situations safe to use. It will never do anything you didn't want (like remove entities or something crazy like that).

Also note that there are NO static methods in this plugin (well maybe 2.. in MathUtil) plus everything uses lazy initiation. That means classes are only created when they are used and if possible objects are set to null (like when a list is empty). This is all to ensure the minimum possible memory overhead. At the start only commands are registered and everything goes from there.
 

MrLolEthan

Feedback score
0
Posts
68
Reactions
33
Resources
0
Proof it is mine? I handcoded it from scratch (twice, actually). Not sure how to prove that, would screenshots of the source do?
http://gyazo.com/fd36cd7064a3f916bb91765145a45e07


I understand. I am still planning to do a showoff video. I am not really that outgoing and am not looking forward to recording a video.. but I understand it's necessary. Explaining some of the methods in no problem, here it goes:

Biomes: When the code receives a request, either by command or brush, it will prepare a loop through the columns of the area. If you have a mask each column will be checked against that, otherwise it will be added to a task. Once a task reaches a limit (16 chunks by default) it will be added to a processing Queue. From there a task will be started, an asynchronous loop will check if the task is done, if it is it will plan the next task a few ticks ahaid. This way your server should stay responsive even with larger or multiple tasks.

Populator: It will loop through the area and look for solid ground blocks with an empty block above it. It will check those blocks against your mask, if you have one, otherwise it will default to only plant on grass and dirt blocks. Then it will find a material from the settings use, using factors with each material to get the proper randomization. 'Actions' like planting trees and doing (flower or like longgrass)patches are done by finding a random x/z location in the area and using that. Again with all the factors of also the regular materials considered.
(Also note that populate operations hook into worldedit -if installed, to record it to your undo list. simply //undo works! )

The rest is more straight-forward. The block updates ONLY cancel certain events, and thus is in all situations safe to use. It will never do anything you didn't want (like remove entities or something crazy like that).

Also note that there are NO static methods in this plugin (well maybe 2.. in MathUtil) plus everything uses lazy initiation. That means classes are only created when they are used and if possible objects are set to null (like when a list is empty). This is all to ensure the minimum possible memory overhead. At the start only commands are registered and everything goes from there.
What you are describing doesn't seem thread-safe.
 

Flamedek

Feedback score
0
Posts
25
Reactions
6
Resources
0
What you are describing doesn't seem thread-safe.

It should be. The only async call is checking a boolean 'isFinished' value then wait for a while. There are no API calls or other fancy stuff. What about it raised your concerns?
 

MrLolEthan

Feedback score
0
Posts
68
Reactions
33
Resources
0
It should be. The only async call is checking a boolean 'isFinished' value then wait for a while. There are no API calls or other fancy stuff. What about it raised your concerns?
Performing block updates asynchronously. Is the boolean "isFinished" cached thread-locally?
 

Flamedek

Feedback score
0
Posts
25
Reactions
6
Resources
0
Performing block updates asynchronously. Is the boolean "isFinished" cached thread-locally?
So as said blocks are not updated asynchronously. To be honest I'm not quite sure what thread-locally cashing means. It is just stored as a private object variable. Called with a regular getter-method. Isn't that thread-safe? or should I make a change to it?
It preforms fine by the way. But I'm assuming with threads you might not always notice problems right away.

~ First post updated with link to SpigotMC-page
 
Last edited:
Status
This thread has been locked.
Top