Replies: 3 comments 1 reply
-
|
This is definitely too much to discuss each point in depth, but I'll try to cover a few things that came to my mind when reading it.
That sounds very similar to
Sounds interesting, but I'm not convinced that it provides intuitive usability. Might be interesting to have a working example and figure out things that can be changed based on that.
This shounds like something that should be added to WE.
Besides other usability issues, teleporting to random positions sounds like a bad idea. While such a command might be useful, it needs careful considerations to cover actual use cases.
While this could work for globbing, there currently is no way to serialize a command, and whether it is possible to serialize any command is unclear. Also,
Definitely something that should be done in WE.
I wanted to work on this for years but just hadn't enough time. I think such feature should be its own plugin, as it's a rather specific use case and, more importantly, it needs to be maintained (which is the reason it's not implemented currently).
The only real use case I see for this is to switch blocks so no temporary block is needed. I'm not sure if that's needed on a regular basis.
Something like that can be done outside of FAWE. As with other features, it increases maintainance cost while presumably being useful for only a very minor audience.
Stretch and compress should already be possible with
There are a lot of things to consider for such a feature, e.g. validation, global vs per user shortcuts, etc...
This sounds just like a different way to do
I'm not sure if there is actual need for that. It might be more interesting to have selection/clipboard cropping.
I think such functionality should be provided via a third party plugin
Fuzzy searching schematics sounds interesting and useful. Maybe it can be integrated into
I'm not sure if there is need for that.
Big no. Mixing up masks with something that makes the command do something completely different is confusing and also not really supported by both brigadier and the WE command system. I know that clearing might be unintuitiv at the moment, but this should be solved in a different way.
This needs hardcoding, heavily increasing maintainance cost.
This was discussed before. We rather want all that functionality in a standalone plugin, using e.g. Arkitektonika.
The idea itself is good. It should be rather discussed to be included in WE. Some terms are rather technical, and I don't think it needs to be a stack. But those are details that can be discussed before and during implementation, with careful evaluation.
Definitely a good idea, but it requires a careful implementation to avoid abuse.
I'm not sure if I understand the use case.
FAWE already supports [].
Patterns don't have percentages but weights. For masks, it doesn't make sense to add up to 100%.
Block tags can already be used as
This sounds like another
Already exists: https://worldedit.enginehub.org/en/latest/usage/general/masks/#random-noise-mask
Sounds like a good idea, the actual syntax can be discussed.
I've never encountered bad results myself, but it's unclear what exact feature you're referring to. We can probably switch to one of the many other RNGs in the JDK. In won't go into detail for the other stuff for now, but I got a few general points: Basically everything that extends expressions should really be discussed in WorldEdit. FAWE does not touch it at all at the moment and that's good. We're always happy about improvements, but basically everything that is more than just basic refactoring should be discussed before. I hope this helps to orientate. |
Beta Was this translation helpful? Give feedback.
-
|
Many thanks for your comments. Several things:
I agree that trying to implement new things in FAWE will accumulate tremendous technical debt in FAWE, but what's the alternative if WorldEdit is not very accepting of outside changes? I'm off to continue my RNG improvement in WE, and I expect that it will be rejected or ignored despite the benchmarks and unit tests proving its validity and that I'll have to be a FAWE-only feature. Your comment helped a lot with orienting |
Beta Was this translation helpful? Give feedback.
-
|
What is the current status of the fabric-related items here? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
I feel I am finally ready to present my master plan for overhauling FAWE, and I would like your input and your suggestions on what I should be working on, how I should change my approach, or what else I should consider:
Features/Improvements (the fun part!):
NOTICE: I have barely started work on all these, so I will have to prioritize which to start working on as I won't be able to implement many of them.
New commands:
//pinand//unpin//autorotatepaste [-abenosr] [-m <sourceMask>]//arp+X+Y+Z,-X+Y+Z,+X-Y+Z,-X-Y+Z,+X+Y-Z,-X+Y-Z,+X-Y-Z, and-X-Y-Z//copy//autorotatepaste//rotate-roption makes the paste relative to your position (instead of pasting from pos1 to pos1) as if you were pasting normally.//help-masksfor listing a quick cheatsheet of examples of FAWE mask commands//help-patternsfor listing a quick cheatsheet of examples of FAWE pattern commands//tpsel [-s <n>] [<x> <y> <z>](also, internally,//tpsel -s .<hashCode>)//seltp-s <n>option ties it in.)//tpseland//tpsel -s .<hashCode>):tpcommand centered at the middle of your selection.//tpsel ~ ~ ~30would TP you to 30 blocks above the centerpoint of your selection-s <n>option makes//tpseluse thenth selection on the stack instead of the current selection not on the stack.//echocommand//echo replace mud_brick_* airwill print the text@> replace mud_brick_slab,mud_brick_stairs,mud_brick_wall airto the console//echo replace "#tag[mineable/pickaxe] !gold_block !iron_block !diamond_block" stonewill print@> replace "(#tag[mineable/pickaxe]) (!gold_block) (!iron_block) (!diamond_block)" stone//language <name code>//draw [-w <width>] [-h <height>] [-f] [-c|-abenos] [-x <+x+y+z|-x+y+z|+x-y+z|-x-y+z|+x+y-z|-x+y-z|+x-y-z|-x-y-z|>] [-r <degrees>] <load|www|paste|save|scrape> <value> <block-pallete><block-palettein the Minecraft world, or, if blocks is left unspecified, then all blocks.-cflag saves to Clipboard and disables pasting directly in the world.-wresizes the image to the specified width-ffits the width/height of the image to the current selection. Which dimensions of the selection size correspond to the image's width/height depend upon the orientation of the image<+x+y+z|-x+y+z|+x-y+z|-x-y+z|+x+y-z|-x+y-z|+x-y-z|-x-y-z>sets the orientation of the image.<degrees>rotates the image about its orientation to the specified number of degrees.-abenoshave the same behavior as they do on the//pastecommand//draw save [-abenos] <subreddit> <block-pallete>//draw scrape [-l <upvotes=128>] [-m <upvotes=2048>] <subreddit> <block-pallete>-lsets the lower limit for upvotes. Use-l 0or-l -1to disable.-msets the maximum limit for the upvotes. Use-m -1to disable.//draw scrape dankmemespulls a random image off https://www.reddit.com/r/dankmemes and draws it in the world//multireplace <mask> <pattern> [<mask> <pattern>...]//multirepl//mulitreplace dirt stone stone dirtwill swap all dirt blocks with stone blocks and vice-versa//actor <name> <command...>command<command...>as a fake player with the specified name/tpcommand for moving the player around to different positions/entities and rotating.//jumptoto move between worlds<name>is created if they don't already exist.//actor john pos1 0,0,0, then//actor john //pos2 100,100,100, then//actor john replace gold_blocks stone//actor daily:daily/restore tp 0 0 0then//actor daily:daily/restore schematic load arena-timethen//actor daily:daily/restore tp 0 0 0then//actor daily:daily/restore //paste -ewill reset the spawn area from schematic//actor//clipboard <size|stretch|compress|crop|list|select>commandsizesubcommand OR when run without arguments, it prints stats about the clipboard. (size and offset)stretchsubcommand://clipboard stretch [-d <away|towards>] <newWidth|%> <newHeight|%> <newLength|%>-d awaycompressis alias ofstretchcropsubcommand://clipboard crop [-w <width|%>] [-h <height|%>] [-l <length|%>] [-x <offset>] [-y <offset>] [-z <offset>]//genclipboardcommands~//clipboard list [-dn] [-p <page=0>]subcommand provides a multipage menu of all clipboards on the multiclipboard object//clipboard select [-n 0]subcommand selects which entry in the multi-clipboard to set as primary.//smooththatdoesnotsuck2d [-b 1] [-e <empty=#air>] [-p <pattern>] <strength=2.0> <mask>command//stdns2d//smoothis the most sucky useless feature in WE/FAWE-b 0to independently smoothen an area without reguard for adjacent areas.#air.b-degree polynomial at each position where a border block and an interior block are adjacent to represent the exact slope of the border blocks there (wherebis the number of border blocks)b+1polynomial that smoothly transitions from one side over to the other side.strengthto tween the slope map of the inner terrain towards the smooth slope//smooththatdoesnotsuck3d [-b 1] [-e <empty>] [-p <pattern>] <strength=2.0> <mask>command//stdns3d//smoothis the most sucky useless feature in WE/FAWE//shortcut <list|move|new|delete>//sc#are masks/patterns and all other shortcuts are available as//sc <shortcut> <args...>${n}, which shouldn't conflict with any know syntax in either.${n}supports Bash parameter expansion syntax: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.htmlshortcuts.ymlfile that//schematics listis hard-coded to not list and schematic load ignores.//shortcut list [-dn] [-p <page=0>] <filter>//schematic list//shortcut move <oldName> <newName>//shortcut new <name> <shortcut>//shortcut new repair //replace air ${1}creates a shortcut for replacing air blocks that can be used like so://sc repair stoneto replace all air blocks in selection with stone//sc new #valuables gold_block,diamond_block,netherite_blockcreates a pattern/mask that can be used like so//replace #valuables waxed_copper_block//shortcut delete <name>//shortcut <shortcutName> <args...>//shortcut history [-dn] [-p <page=0>] <text>//schematic list//shortcut search [-dn] [-p <page=0>] <text>//schematic list//shortcut export//shortcut import <url>//bmask <biomes>//bmask desert,oceanrestricts edits to only those blocks in deserts/ocean biomes.//copynear [-xbce] [-m <mask>] <mask> <distance=64><mask>block up to<distance>away and forms a convex selection polygon around these blocks-xto exclude the selected blocks from being included in the copy-m <mask>to filter which blocks are copiedAdditional expression-guided generation commands
Continuation of the new commands section because it was getting too long.
//generatebuffer2d [-chor] <expr>and//generatebuffer3dcommands//genbuf2dfor//generatebuffer2dand//genbuf3dfor//generatebuffer3dperlinnoise.buffer2d(x, z)andbuffer3d(x, y, z)functions//generate2d [-chor] <pattern> <expr>//gen2d<pattern>, where<expr>is evaluated at each X and Z to get the height//generateblock [-chor] <expr>//generatebiome2d [-chor] <pattern> <expr>//generatebiomeblock [-chor] <expr>//genbiomeblock//generatebiomeblock2d [-chor] <expr>//genbiomeblock2d//generateclipboard [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <pattern> <expr>//genclip//generateclipboard2d [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <pattern> <expr>//genclip2d//generateclipboardblock [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <expr>//genclipblock//generateclipboardblock2d [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <expr>//genclipblock2d//generateclipboardbiome [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <pattern> <expr>//genclipbiome//generateclipboardbiome2d [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <pattern> <expr>//genclipbiome2d//generateclipboardbiomeblock [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <expr>//genclipbiomeblock//generateclipboardbiomeblock2d [-chor] [-w <width>] [-t <height>] [-l <length>] [-x <offset>] [-y <offset>] [-z <offset>] <expr>//genclipbiomeblock2d~)Expanded command arguments
These are new arguments/flags to be added to existing commands.
//schematic search [-dfn] [-p <page=0>] <text>//schematic list//rotate <rotateY> <clockwise/counterclockwise>because it's kind of confusing//sel clearand//gmask clearto clear your selection/gmask.//seland//gmaskclearing their respective things will be preserved and will never be deprecated.//brush catenary -b <pattern><pattern>to achieve fine-grained sub-block-precision.-bargument forces whole Blocks and disables the usage of stair/slab variants.-m <mask>option for//filland//fillr-d <maxdist>option for//filland//fillrAdd aliases/shortcuts for commands
These commands don't add any new functionality but provide shortcuts or aliases to existing functionality.
//upload//downloadyour clipboard in order to upload a schematic which is crazy and unintuitive.//repeatcommand as an alias for//stack.//unextendcommand//contractbut in opposite direction as//contact. (That is,//unextendis in same direction as and exact reversal of//extend.)//extendmakes perfect sense to me and I use it all the time.//contractmesses with my head for some or whatever inexplicable reason. (Might be related to the fact that I mix up my right/left.)//tracemaskas alias for/tracemask//seldrawas alias for//drawselunbindas alias fornonein//brushand//tool. Also,//unbindcommand//unbindor//brush unbindor//tool unbindwill unbind the brush/tool from the held itemNew
mselandsselfamily of commandsI made this its own section because it was getting a bit too long.
//msel <push|pop|delete|combine|clear>//msel pushpushes your current selection onto the stack and reports the new number of items on the selection stack.//msel push <n>inserts your current selection BEFORE thenth selection. (Such that you current selection becomes the newnth selection in the stack.) Negative numbers are wrapped around to be from the end going backwards.//msel poppops the top selection off your selection stack and replaces your current selection with it.//msel pop <n>popsnselections off the top of the stack and fuses them together into one multi-selection.//msel pop allruns//msel pop <n>with the size of the stack//msel list [-dn] [-p <page=0>]//schematic list)//msel delete .<hashCode>on it)tpto it (which executes//msel tp .<hashCode>on it)//msel delete <n>or//msel delete .<hashCode>deletes thenth item..<hashCode>form is for internal use with//msel listto make sure we properly track objects across intermediary changes to the stack, we prependnwith a dot to select the selection object by itsObject.hashCode.//msel combineis an alias for//msel pop all//msel clearnukes the stack but not not clear the selection//msel undoand//msel redo//mseloperations whereby every selection change or use of//mselcommand adds an entry to this history.//msel undopops the last item off this history stack, restoring the selection and msel stack to before.//msel redorecovers from the last//msel undovia its own redo stack provided that no changes have happened in interim.//ssel <clear|delete|formats|list|load|move|save|search>//schematicbut for selections and (optionally) the msel stack state//schematicand//mselfor maintainability.//ssel savehas an addition flag,-m, which also saves the msel stack state to the selection file..selfile extension..selfile extensions will need to be filtered out of//schematic listNew mask/pattern features
//replace mud_brick_* airis equivalent to//replace mud_brick_slab,mud_brick_stairs,mud_brick_wall air^blockstate matcher//replace oak_* ^[mangrove_*][#existing]//replace "(stone_bricks <air),(dirt <stone_bricks,dirt)" deepslate_tiles#aboveas alias for>,#belowas alias for<,#north,#south,#east,#west#visible#skylight[<a>][<b=a>],#blocklight[<a>][<b=a>], and#light[<a>[<b=a>]#haslightas alias for#skylight[1][15],#blocklight[1][15]#nolightas alias for#skylight[0] #blocklight[0]#light[<a>[<b=a>]tests for effective light, which is the greater/maximum of skylight and blocklight.<b>defaults to the value ofaif left unspecified.#liquid#sky#transparent#conductiveobservers//set oak_sign{Text1:'{"text":"FastAsyncWorldEdit"}'}//replace "(#solid >dirt) (#tag[mineable/pickaxe] <air)" light_gray_stained_glass//replace "#tag[mineable/pickaxe] !gold_block !iron_block !diamond_block" stone#tag[<name>]mask//count #tag[goats_spawnable_on]counts the number of stone, snow, snow_block, packed_ice, and gravel//count #tag[is_river]counts the number of blocks whose biome is river or frozen_river#emitslight[<min>][<max=min>]mask#opacity[<min>][<max=min>]mask#solidto be actually useful and mean actually solid blocks#solidis an alias for!#air->block state transformation maps in patterns//replace smooth_stone_slab smooth_stone_slab[type=top->type=bottom,type=bottom->type=top]flips all smooth stone slabs upside-down%probabilities in masks//replace 50%stone spongereplaces 50% of all stone blocks with sponge blocks%block state probabilities in patterns with parenthesis grouping to escape comma//replace 4%water #above[!#transparent] 50%gravel,50%sea_pickles[pickles=(25%1,25%2,25%3,25%4)]generates a nice lovely seabedNew Togglables
//perf history//perf fluidsallow-tick-fluidsconfig option to default to true//perf fluidsand config option doesn't let you do so.//scoreboardtoggle command//drawpastetoggle command:Block Updates
//suppresstoggle command//postplacement [-f] [-m <mask>]command//connectionsand//pp//neighborchanged [-f] [-m <mask>]command//ncNew
config.ymlOptionscommands/slash FAWE commands because they clutter the command space and can conflict with other plugins with their short generic names.expression-batch-size: <n>nexpressions and give the group as a wholentimes the normal expression time limit.default-perfdefault-drawsel: <true|false>//drawseldefaults to on or offdefault-drawpaste: <true|false>//drawseldefaults to on or offlanguage: autolanguage-autoupdate: <true|false>truechat-stacktracesfalsebecause the stack trace takes up the whole screen and makes the chat a landmine to navigate which is frustrating when people browsing the chat don't actually care about the stack trace.Multi-lingual Translation:
Show me the help page.is fed into an autotranslator and the word in that translation corresponding to the selected word "help" in the source is used as the translation for that piece.helpmessages (shown by//help <command>) translatable. Resolves Make exceptions translatable #1308//reemplaceas an alias for//replace, though it will still be called the "replace" command when they run//ayuda reemplaceImprovements
//setbiomeand//genbiome-l(literal) flag for the old behavior of only setting the stored biomes in those 4x4x4 cubes.//setbiome's and//genbiome's help//helpto clarify that biomes are stored on a 4x4x4 block basis and intermixed when the chunk is loaded in.//perfbut FAWE just spits out an error.)WEBrushon the tool.WEBrushNBT tag (e.x. after rejoining the server), the server simply executes the command stored in the string as the user./give @s minecraft:golden_shovel{WEBrush:["//brush clipboard","/tracemask air"]}//will be allowed to be executed (tool commands using a single/slash will be transformed into a double//prior to the command being stored in theWEBrushNBT tag.)/or\is detected in a directory name, that slash will become part of the path for where to save/and\depending upon host operating system./when listing schematics so as to not leak the operating system of the server.schematic-save-subdirsin order to enable this feature, which defaults tofalse/help fastasyncworldeditto give a short 101 basic summary of how to copy/paste with FAWE so beginners can get started easier. (/help worldeditwill also be make an alias to this for printing out this 101 getting started help information.)//setbiomeand//genbiomerespect the//gmaskjust like WorldEdit doesFixes
//fawe reloadnot reloading config debugmode, command debug, and colors from lang folder (maybe more things it fails?)//historynot working when//tool inspectdoes//perfto actually do stuff (make it so that blocks that need update ticking are enqueued on the main thread for update ticking.)//perf neighborswork such that we scan for blocks known to need//fillronly filling one block when starting in the middle of a non-air block instead of spreading to all same-blocks//removelighting,//setblocklight,//setskylight, and//setlight//replace oak_fence ^nether_brick_wallstrips the block state data because there's slight differences//helpcommand//perfcommand//help sel <type>with extra useful information and such.Misc. Features
IMPORTANT CONCEPTS:
New expression features:
//generate gold_block offY=0; while (queryRel(0,offY,0,AIR,0) && (offY < 16)) ++offY; (0 < offY) && queryRel(0,offY,0,GOLD_BLOCK,0)&,|,xor, and>>>bitwise operators in expressions^remains power operatorxor(a,b)returns the bitwise xor of those two numbers>>>is unsigned right-shift (cast to long, then shift, then cast back to int)<<and>>bitwise shift operators|and&biome(x, y, z, type),biomeRel(dx, dy, dz, type), andbiomeAbs(xp, yp, zp, type)methods//genbiome savanna offY=0; while (biomeRel(0,offY,0,PLAINS,0) && (offY < 16)) ++offY; (0 < offY) && biomeRel(0,offY,0,SAVANNA,0)cx,cy, andczrx,ry, andrzcx,cy,czqueryCentermethod for querying a block relative to the center of the selection boxlogNfunctionlogN(x, base)computes the base-th logarithm ofxvia the formulalog(x)/log(base)hypotfunctionhypot(x)computessqrt(x*x)which is the absolute valuehypot(x,y)computessqrt(x*x + y*y)hypot(x,y,z)computessqrt(x*x + y*y + z*z)worldSeed()functiongetAt,getAtRel,getAtAbs, andgetAtCentergetAt(x,y,z)cbGetAt,cbGetAtRel,cbGetAtAbs, andcbGetAtCenterblock,blockRel,blockAbs, andblockCenterblock(x,y,z)cbBlock,cbBlockRel,cbBlockAbs, andcbBlockCenterstate,stateRel,stateAbs, andstateCenterstate(x,y,z)getAt(x,y,z)is exactly equivalent tostate(x,y,z) | block(x,y,z)cbState,cbStateRel,cbStateAbs, andcbStateCentercbQuery,cbQueryRel,cbQueryAbs, andcbQueryCenterquerybut operators on the clipboard datareturnstatement//generate stone return 1buffer2d(x, z)andbuffer3d(x, y, z)commands.//genbuffer2dand//genbuffer3dcommandheight(x, z)commandheightRel(x, z),heightAbs(x, z), andheightCenter(x, z)Truly miscellaneous features:
entity_name<relX,relY,relZ>sort of as part of entity name//webreplcommand that brings you straight to this web repl session. (though, you can just as easily get to the web repl via//upload).Unexciting but Important Things
QOL:
Misc./Fixes:
longs (while maintaining backwards compatibility) and open pull request for them to integrate the changeslongs (while maintaining backwards compatibility.)//fallless god-aweful slow//fallitSpigot:
runtask to make every new player who joins the server a creative-mode operator and add various plugins that tie into FAWE so that FAWE can be better tested in a real environment.Bukkit:
NMSRelighter.javato be less of a clunky piece of crap.runBukkitGradle task to build CraftBukkit from source and start up a CraftBukkit server.Fabric provider:
runFabricServergradle task for dev testingrunFabricClientfrom WorldEditCLI provider:
runCLIgradle task to get to a CLI dev repl with loaded test Minecraft map for quickly testing and diagnosing issues as I develop the CLI provider.Nukkit provider
bedrockClientgradle task that spins up a Bedrock client on Linux machines via https://github.com/ChristopherHX/linux-packaging-scriptsrunNukkitgradle task that spins up a Nukkit serverrunPowerNukkitcommand to spin up a PowerNukkit server (see https://github.com/PowerNukkit/PowerNukkit)I would look forwards to seeing the reintegration of the Forge/Sponge implementation, but I'm not going to be the one to do it.
I also looked into Minestorm (https://github.com/Minestom/Minestom), but the issue with Minestorm is that it's not complete enough yet and I would be starting at ground 0. At least Nukkit has Pokkit plugin that I can use as a base reference for starting to implement my transition over to the new provider, but Minestorm doesn't even have this.
Google Forum
I would really appreciate it if you could fill out this Google Form on which features you would like to see me start work on: https://forms.gle/xRziwZafgpU1a3L5A
See the results of the Google Form at: https://docs.google.com/forms/d/1qi2wmUJ4omNrEj_6bpMlfaR0ylxge-HKlTh-gWeEXPo/viewanalytics
Beta Was this translation helpful? Give feedback.
All reactions