maruohon / litematica

A modern client-side schematic mod for Minecraft
GNU Lesser General Public License v3.0
723 stars 217 forks source link

Fill to Schematic feature #96

Open Andrews54757 opened 4 years ago

Andrews54757 commented 4 years ago

Hello,

I use this mod primarily for a friend's server. Since I do not have OP, I do not have access to any commands like /fill which I usually employ in automating repetitive tasks. So, I always end up building my projects in another world first, and copying it over with Schematica since it is faster to do so.

I would like to have a "fill to schematic" feature so that I would not have to build in another world first. Essentially emulating the /fill command, it should fill blocks in the schematic world only, so that I could "place" them faster and easier. If this is implemented, I would be able to build directly in my friend's server with "commands," saving me tons of time.

I have tried to make this feature in my own fork with some success, though with many compromises. For one, it uses the tool item's area select instead of a command as I desire (since I do not know how to emulate commands) -- This makes it impossible for me to fill redstone components (or any directional blocks) using this feature. Secondly, it is unable to fill blocks outside of the schematic bounds. I originally wanted it to either expand the schematic bounds, or to create a new one (or a temporary one). Thirdly, the implementation is a bit hastily done, and its performance/efficiency is pretty bad.

It would make me very happy if such feature was implemented in its entirety without any compromises, but I was unable to do so. So, what do you all think?

maruohon commented 4 years ago

This sounds like an expansion of the Rebuild mode to be more flexible. Something like this has already been on my TODO list as well. Basically allowing to use the area selections for the Rebuild mode.

I think another part of this would be allowing to save schematics from the schematic world instead of the client world, which would allow sort of copying and expanding an existing schematic to have a larger volume, as the major limitation of the Rebuild mode currently is that it can't expand the block state container/sub-region sizes.

So if and when this gets implemented, it will most likely be part of the Rebuild mode and it will work on the schematics, instead of the schematic world. The schematic world is really not suitable for this, as it's very volatile and the chunks are constantly wiped and rebuilt as and where needed as client world chunks load/unload, and if placements are modified/moved in any way.

Andrews54757 commented 4 years ago

Would it be possible to add blocks to the "schematic world" temporarily? Though it would be great if I could save/update schematics directly, it wouldn't be of much help in making building faster.

What I think would be very helpful, is having a "task" which acts like a schematic. Using the fill mode automatically creates such task, which puts blocks into the schematic world like an actual schematic. That way, I could use the easyPlaceMode (or printer) to place down the blocks quickly. This is until all the blocks are placed -- after which the task "expires" and the schematic is removed.

I think there are two possible ways this may become possible.

  1. Create an actual task which puts the blocks into the schematic world
  2. Create an actual schematic, but set a flag so that it disappears once all blocks are placed (could be a feature for real schematics too)
vacla commented 4 years ago

there is rebuild mode, where you place blocks in the schematic world

maruohon commented 4 years ago

I think I could add a "Ghost Build Mode" where all the actions would happen in the schematic world. That mode should then also prevent the Schematic Placement Manager from rebuilding any chunks, and I guess any chunk unloading in the schematic world should also be disabled in that mode. Or maybe I should even make that mode use a separate schematic world, which would actually save the chunks to region files as well... :thinking:

Andrews54757 commented 4 years ago

@vacla I think that there is a misunderstanding. I am trying to speed up my building process since it is easier and faster to place blocks using EasyPlaceMode (or printer in my case). Placing blocks manually in the schematic world would not help at all.

@maruohon With this in mind, I think it might be best to add this feature once the printer feature is completed. Though this feature could save time with easy place alone, I do not think many people will be willing/able to use such a complex temp-schematic functionality for the sake of saving relatively small amounts of time (compared to usage with printer).

maruohon commented 4 years ago

Okay now I'm confused, how is the printer or Easy Place mode related to this? I thought you just want to quickly build in the schematic world, to then in the end make a schematic of that build in the schematic world, and then start building it in the actual server world? The Easy Place mode and printer only make sense when you are building a schematic into the actual world. While working in the schematic world, creating a placement would already directly place that schematic in the schematic world.

Andrews54757 commented 4 years ago

@maruohon I think there was a misunderstanding.

I want to quickly build in the schematic world, but I also want to quickly build in the actual game. So technically, they are two related features that I expressed as one. Sorry about that, that was my fault.

As understood earlier, I want to be able to quickly build in the schematic world, and save it. This would allow me to "build" without actually building it in the real server world.

But, I am also thinking of an expansion to this feature, which would be very useful for quickly building in the actual server world. A temporary schematic, one which disappears after it is filled in, combined with an auto-printer, would basically allow me to have the functionality of the /fill command in a server without OP.

maruohon commented 4 years ago

There shouldn't be any need for some new temporary schematic, if the schematic world building is implemented, because the easy place mode and printer would work based on the schematic world already. And as to temporary schematics, there is already the in-memory-only schematic, which is basically meant as a temporary schematic for cloning areas for example.