* start v6
* Update classes to v6 method signatures
* change rootVersion to signify p2v6 compat
* Use 16 as toolchain version but target 11 for build output
* add minimessage as api
* Require v6 and don't attempt to "setup" hook from FAWE
* Address comments
* *address /all/ comments
* FAWE classes should only act as a delegate
* Uppercase logger
* Settings for v6-hook have moved to P2-v6, remove unneeded if statements
* Rename classes to Delegate
* add whenDone task to setCuboids
* Remove bad spaces
* Fix plot swap
* Initial work on 1.17 support
* Remove data versions from the Bukkit adapters (#1507)
* Remove data versions from the Bukkit adapters
* Don't allow saving schematics without an adapter in place on Bukkit.
* Removed confusing line
(cherry picked from commit 2056218b4a8644836b1d127105dfa289e9cdbc1c)
* More progress
* Fix chunk sending
* Repackage from com.boydti to com.fastasyncworldedit.<module> (#1119)
* Preliminary work on repackaging
* Rename build artifacts matching our pattern
* Finish up repackaging
* Fix a few field accesses and old imports
* Dirty fix for chunks container ChunkSections outside of 0-15
* Correctly read from NibbleArrays for lighting
* Fix getSections and BlockMaterial for 1.17
* Fix writing blocks to the world.
- The issue isn't the presence of a "-1" chunk, it's the constructor for ChunkSection requiring the layer (0 to 15) rather than the y chord
* Fix more field accesses
* More work towards 1.17
* Update Upstream
a57f66f Fix watchdog, add negative y support. (1782)
* Add azalea tree to `/tool tree`
* Don't define toolchain twice
* Repackage GriefDefender
* Relocate under new namespace
* Bye bye ecma left overs
* Add 1.17 to issue templates and instructions
* Move to adventure-nbt (#918)
* Initial work for adventure-nbt
* Some more FAWE specific stuff
* Fix erroneous deprecation check
* Workflow change
* Continued merging all adventure NBT related changes
* Continued merging all adventure NBT related changes
* Made a constructor public again
This needs to be public for BlockTransformExtent.java
* Finished converting all NBT data to adventure.
* Make this compile
* Fix conflicts
Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>
* Update adapters to 1.17
* Change build prefix to 1.17
* Move more nms classes to adapters
* Move left over nms classes
* Move Spigot 1.17 class
* Remove unneeded adapter loader code
The loader will find the appropriate class now itself
* Update adapters
* Update adapters
* Lazy fix tests
* Update adapters
* Update Upstream
43da91a Remove method reflection for getMinHeight in BukkitWorld. (1796)
* Relocate adventure-nbt under proper namespace
* Add LazyCompoundTag as a non-version-specific class to be used by adapters
* Better integration between old NBT and Adventure NBT - begin fixing the issues seen recently
* Correctly NBT conversion method
* LazyCompoundTags should actually be overriding and correctly returning a CompoundBinaryTag.
* Update worldedit-adapters
Fixes#1141
* Remove unnecessary massive lag machine
* Refactor apply to applyBlock in subclasses
* applyBlock should be overriden by all subclasses.
Default apply to applyBlock
* Closes#1130Closes#1132
* Squashed commit of the following:
commit a9bfa1a07c77083c844a0c3ba62f4bd94bed107c
Author: NotMyFault <mc.cache@web.de>
Date: Sun Jun 27 21:53:21 2021 +0200
[ci skip] Update gradle wrapper validation
commit aa7471f95317d28a16f62e4b200de8d0fea2fa95
Author: Matthew Miller <mnmiller1@me.com>
Date: Sat Oct 10 15:49:13 2020 +1000
Add ^x,y,z relative offset support to the offset parser (#1545)
* Add ^x,y,z relative offset support to the offset parser
* Wrap in a try-catch
(cherry picked from commit 28bdf7ff9254bbc85bb4f5f792b303943a3930a8)
* Add `fawe.error.schematic.not.found` translation key
* Update Upstream
728a152 Skip notify if chunk section doesn't exist (1794)
* Fixed#1157
* Add a null check to prevent NPE in nbt code
* Update adapters
* Update Upstream
fbb047a Optimize legacy schematic loading (1808)
* Hurr durr I don't want to update Java
* Update Upstream
0790e6e Fix CLI Mess (1811)
* Fixes#1160
* Expose minimessage transitively thru PlotSquared
Touches #32
* [ci skip] Remove unneeded maven repository
* Steal tab completion from PlotSquared for P2 related commands
* Don't error on startup when building locally
Co-Authored-By: goldfishapp <8278196+goldfishapp@users.noreply.github.com>
* [ci skip] Update gh actions to Java 16
* Update textures to grab 1.17 jar
Co-authored-by: NotMyFault <mc.cache@web.de>
Co-authored-by: SirYwell <hannesgreule@outlook.de>
Co-authored-by: Matthew Miller <mnmiller1@me.com>
Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>
Co-authored-by: goldfishapp <8278196+goldfishapp@users.noreply.github.com>
**Add a null-check to CharBlocks FULL section layer-retrieval.**
- It is possible to trim CharBlocks whilst it is attempting to read data due to the batching of chunks to help reduce memory
- This is done when the number of chunks sitting loaded in memory with having been "submitted" to the queue for writing to disk becomes high
- Seconday operations such as heightmap processing and lighting will quickly load chunks, meaning many chunks are submitted early
- This leads to much higher chances of the chunk being submitted and subsequently trimmed given heightmap and light processing is done layer-by-layer over many chunks, rather than chunk-by-chunk - thus leading to NPEs.
- By adding synchronisation to and around only the specific sections when loading/updating, and not blocking the whole chunk, many access can still be thread-safe without causing deadlocks
- This allows removal of lots of the needless and very-slowing synchronisation on get**Block** methods
**Remove much of the synchronisation from ChunkHolder**
- We shouldn't be synchronising with call() and safety should be added elsewhere. (plus it's making edits very very slow when queue target size is hit)
- Also remove much of synchronisation because we've added the null-check and section-specific synchronisation to CharBlocks
**Some QOL/thread-safe data access changes**
- Replaces the Array#clone seen in the get blocks classes with System#arraycopy as deep cloning is not required, and is also slower than arraycopy
- Add System#arraycopy when accessing chunk section data via history to ensure it is not altered whilst being written
- Renaming EMPTY to empty means it is not implied to be a static variable
Fixes https://github.com/IntellectualSites/FastAsyncWorldEdit/issues/1028
Fixes https://github.com/IntellectualSites/FastAsyncWorldEdit/issues/1025
Fixes https://github.com/IntellectualSites/FastAsyncWorldEdit/issues/1089
Fixes https://github.com/IntellectualSites/FastAsyncWorldEdit/issues/1091
Fixes https://github.com/IntellectualSites/FastAsyncWorldEdit/issues/1097
* Use Unsafe to replace Lock
* Start cleaning up everything that has to do with CleanableThreadLocal
* Make cancellation work
Co-authored-by: NotMyFault <mc.cache@web.de>
* Relight using starlight engine on Tuinity
* Make use of invokeExact
* Cache MethodHandle
* Address some requested changes
* Remove random *
Co-authored-by: NotMyFault <mc.cache@web.de>
* Simplify and clean up sendChunk
Hopefully, that doesn't cause any issues
* Add naive HeightmapProcessor
* Make HeightmapProcessor more efficient
* Remove heightmap code from NMSRelighter
* Recognize fluid for waterlogged blocks
* Remove config option for heightmaps as they should always be updated
* Batch relighting for Starlight
* Dirty workaround for CharBlocks blocks NPE
* Revert "Dirty workaround for CharBlocks blocks NPE"
This reverts commit 737606a7
It only caused the heightmap to be wrong again and didn't help much with the original issue
* Adapt better chunk sending on older versions
* Adapt requested changes for HeightMapType
* Relight all changed chunks, batched
Also, address some requested changes
* Avoid deadlocks
* Clean up tuinity relighter and add some comments
* Minor changes to HeightmapProcessor
Co-authored-by: BuildTools <unconfigured@null.spigotmc.org>
Co-authored-by: NotMyFault <mc.cache@web.de>
Co-authored-by: Aurora <21148213+aurorasmiles@users.noreply.github.com>
Since there's no new NMS revision (we're still on R3...?!) but there were changes, it would be more difficult to maintain both 1.16.4 and 1.16.5. Therefore, let's just stop supporting 1.16.4 as 1.16.5 is a minor update regardless.
Fixes#859
- Add a "loadPrivately" method to be used when GetChunks are called to avoid synchronocity issues with super classes being used on different threads
- Synchronise the call method so we're not attempting to call whilst also loading/updating
- We don't want to flush if we're setting from the main thread, as that's going to be another plugin doing it
- It's better to have a concurrent error thrown than use a concurrent set, so concurrency issues can actually be fixed rather than handled unsafely
- Only send chunk packets up to once a tick (it really doesn't use any memory to cache IntPairs).
* Get rid of FastSchematicReader/Writer and document changed JNBT classes
This commit includes changes from upstream to the schematic classes
(`com.sk89q.worldedit.extent.clipboard.io`). It also documents the JNBT
classes, specifying what has been changed in FAWE. This was done in preparation
for the upcoming move to adventure-nbt.
The PlotSquared schematic handler classes will now use SpongeSchematicReader/Writer rather than FastSchematicReader/Writer.
This is yet untested and the entire branch is a W.I.P.
* Fix JNBT mutability misuse in FAWE
FAWE previously had mutable compound and list tags. The previous commit changed that, and this commit will fix misuse of the tag API.
I've tried to identify the places where mutability was assumed, but I might have missed something. This needs quite extensive testing.
This is yet another change which increases upstream compatibility in FAWE.
* Fix FAWE_Spigot_<..>#getEntity
* Fix JNBT usage in the AsyncBlockState code
* Readd FastSchematicReader/Writer and add a new schematic format (`FAST`)
* Update dead repository
* Implement missing AsyncChunk#getTileEntities
* handle entities properly and add "brokenentity" format
* Fix fast schematic reader
lazily reading means it's read in order of appearance in the inputstream so we need to read schematic version first (skip past everything) and then reset the stream
* Fix p2 FAWE
* Go back to fast schematics in P2/CompressedSchematicTag (#819)
* Fix compile
Co-authored-by: N0tMyFaultOG <mc.cache@web.de>
Co-authored-by: Alexander Söderberg <Sauilitired@users.noreply.github.com>
Co-authored-by: dordsor21 <dordsor21@gmail.com>
Co-authored-by: Aurora <aurora@relanet.eu>
* Perform part of the move of //fast to //perf (#1377)
This re-adds a deprecated `//fast` and moves the current logic to
`//perf`. Later `//perf` will have its syntax reworked, when Piston
finally supports sub-commands properly!
* Names via Translation (#1268)
* Deprecate BiomeRegistry, etc.
* Update some libraries, e.g. text
* Move to new translation renderer
* Revert "Deprecate BiomeRegistry, etc."
This reverts commit 59a5d6c92aec52739a8dc68ac3d23898af7593dd.
This was not a good idea for potential mod shenanigans.
* Move BiomeData#getName to BiomeRegistry, use i18n
* Use getRichName instead of getName
* Implement getRichName for NullBiomeRegistry
* Add getRichName for blocks
* Relocate net.kyori.minecraft
* Update adapters for getRichBlockName
* Add getRichName for items
* Update adapters for getRichItemName
* Update adapters JAR for merge
(cherry picked from commit cfd26253b6fb59ff6c65a0157a6780be7db4ea5a)
* Follow-up fixes for 92f8776796
* Don't send deprecation warning and improve info message
* Fix click command for perf box
(cherry picked from commit 7ee60060c31df2f8b41212b430a0875312189339)
* update R3 adapter§
Co-authored-by: Octavia Togami <octavia.togami@gmail.com>
Co-authored-by: NotMyFault <mc.cache@web.de>
Co-authored-by: Aurora <21148213+aurorasmiles@users.noreply.github.com>
Co-authored-by: Aurora <aurora@relanet.eu>
* Full support for 3D biomes
Since we're only supporting 1.15+ there's no need to try anything other than compatibility
* this is not part of the PR
* Clipboards should still always be y 0 for biomes
(this "bug" has existed for ages)
* start reimplementing regen command
* start reimplementing regen command
* Formatting and logic tweaks.
Regen will now throw exceptions but they are not caught yet.
ConversionSessions will now be closed when no longer being used instead of left open.
* fix //regen crashing server
* added //regen support for 1.16.1 and 1.15.2
* cleanup
* Update the issue template
* improve performance of regen by a factor of 40, approx 1.2 millon blocks/second
* Update the issue template
* Update the issue template & add a config (#640)
* Update the issue template
* Add a config.yml to the issue template
* improve performance of regen by a factor of 40, approx 1.2 millon blocks/second
* Fix entity rotation (#642)
* fix entity rotation
fixes#577
Co-authored-by: wea_ondara <wea_ondara@alpenblock.net>
* Fix toggle permission (#644)
* Fixes#529
* fix superperms perm toggling
Co-authored-by: @weaondara <wea_ondara@alpenblock.net>
* Fix#647
* Squash errors and debug to aid fixing #652 properly
* cleanup imports
* cleanup imports 2
* cleanup imports 3
* cleanup imports 4
* add patch by @SirYwell
* aysnc world gen with features and stuff and some minor issues
* optimizations, full chunkstatus, block populators
* optimizations, cleanup
* optimizations
* fix feature regeneration, fix temp folder deletion
* cleanup
* make chunk gen multithreaded
* fix precomputation of chunk lists for RegionLimitedWorldAccess again
* added regenerator abstraction, fix aioobe while running through chunk stati
* remove override for getChunkAt in freshnmsworld
* don't use concurrent chunk gen if custom chunk generators do not support it
* distinct between generator types
* improve regen speed for overworlds
* mix
* Add message that regen might take a while
* use a shared map for FastAreaLazy, cleanup imports
* use custom concurrency levels for chunk stati and process accordingly
* implement new regen in 1.15.2 and 1.16.1 as well
Conflicts:
worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/FAWE_Spigot_v1_15_R2.java
worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/FAWE_Spigot_v1_16_R1.java
* woops
* further abstraction, finalized regen impl
* Formatting
* Fix some typos, remove debug
* replace wildcard imports
* cleanup debug
* braces
* serr -> logger
* move regen impls to seperate classes
* fix world init for 1.16.1
* fix world init for 1.15.2
* fix world init for 1.15.2 #2
* use original world name for regeneration
* Update Regen_v1_15_R2.java
* Update worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/FAWE_Spigot_v1_15_R2.java
Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>
* Update worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/FAWE_Spigot_v1_15_R2.java
Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>
* Update worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/FAWE_Spigot_v1_16_R1.java
Co-authored-by: Matt <4009945+MattBDev@users.noreply.github.com>
* improve documentation, use parallel task count for fawe settings
* fix compile
Co-authored-by: wea_ondara <wea_ondara@alpenblock.net>
Co-authored-by: MattBDev <4009945+MattBDev@users.noreply.github.com>
Co-authored-by: dordsor21 <dordsor21@gmail.com>
* Several fixes to actual, probable and possible synchronocity issues
- Ensure that all edits are queued onto the same AsyncNotifyQueue by actually delegating to the parent player in PlayerProxy
- Ensure that the order editsessions are being remembered on the LocalSession is being respected by using a fair ReentrentLock
- Ensure a chunk cannot be called when an update is being called
* Don't add locks to GetBlocks
Javadoc and Formatting fixes.
Also, extremely minor code changes which have been tested.
This commit is only part one of two commits that aim to fix problems with formatting in our project. In part two I will modify the Google Java Style Guide (since it closely matches our code style) for our project so there is guidance on how to format and document.
* Updated PlotSquared URL
* Removed plugin acronyms
* Fixed a typo
* Fixed grammar
* Use modern block id's
* Update YouTube video URL
* begin allowing "post processing" of chunks
- restores legacy capability to continue saving edits in the background after sending the chunks
- speeds up the edit clientside
- nail in the coffin of the terrible and staticly coded coreedit
- We should totally make IronGolem work so Core* is no longer used by anyone
* begin allowing background history saving
* Handle post processors in queues properly
* Use futures for postprocessing so we're not waiting for them needlessly
* better use of closed boolean
* Reword
Shrinks the jar size since we no longer must bundle the Kotlin library. The downside is that some classes grew in size compared to their Kotlin versions.
Many contributors didn't care for Kotlin either.
* Replace BlockStates reading with new 1.16 logic
* Account for running on older platforms
Splits out the new reading to AnvilChunk16, uses data version to detect
the appropriate version.
* Move data versions to Constants
Also fixes some logic hiccups that become obvious with the new names.
* Fix LegacyMapper DFU handling
* Fix factor indexing
(cherry picked from commit 8c171f0929e8530aab1731d122649adc58c5161f)
Allows cancellation information to be fed back into the ascend/descend
algorithms.
(cherry picked from commit 71e104bcb187a5313e88dda5df79059c8ffbc1fe)
- bring fixes to 1.16
- Fix for all lighting where it only set sky lighting if not present, even if it was trying to set block lighting (unlikely to have caused issues as block lighting seems always to be present, but wrong nonetheless)
First noticed incident of operations ruining ChunkSections. Do not build and use this unless you're testing.
Rushed some of the changes, gotta sleep. Would be nice to get a review of this one from @mattbdev and @dordsor21
- Very basic implementation of the SideEffects system. Will definitely need fine tuning for it to be functional, but is not considered a priority in my opinion.
- Minor changes to the World interface and World implementations related to the SideEffects system. Shouldn't be the cause of any new bugs but be on the lookout.
- Included debug in BukkitImplLoader.java to assist contributors in understanding what needs to be implemented for the adapter to load properly.
Still very WIP but we're a few steps closer. So far, this is coming along better than I anticipated. Hopefully we can keep the momentum.
This commit will allow the branch to build properly but the plugin will not function properly due to the lack of a proper adapter implementation. Proceeding will require the implementation of the SideEffects system from upstream (865c3a24d2 (diff-8fd33296e427c87d0296ad7f3ccc050a)).
* Use a long to refer to the volume of a region, and rename the method to getVolume
* Fixed issues noted in review
* Forgot to floor
* Fixed review notes
* Can use a long here rather than BigDecimal
* Improve javadocs
* style
(cherry picked from commit 328030fd6281e58a4ea1d0cdd0a2e274da90afbe)
* Start work on lighting engine (does not build)
* Implement getLighting
* Setting, flushing light etc works. Getting light should be working..?
* Better queue/chunk handling
* Use correct location for lighting update
* Correct set location, remove debug
* cleanup a little
* Fix fixlight
* Apply to all versions for the numpties
* Remove lighting extent if not using
* Actually bitmask blocks when setting in chunks
* Initialise Maps and Dequeues with inital size
* format
* Documentation maybe
- Should ensure the server doesn't tick the chunksection while we're editing it
- Basically using the old issue with FAWE breaking block ticking by setting this to zero :)
- Revert back to default FAWE behaviour where placed blocks do not tick by default (until a restart, or another edit is done in the same chunksection without changing the block)
* Increase performance slightly when trimming.
If the chunk section is all one blocks (common in plotworlds) it'll be a nice little boost.
* Cache whether blocks are ticking or not. Greatly reduces the time required to create a palette
* collapse 5 lines to 2.
* Also apply to 14 and 15 for the numpties
* Cleanup
Actually ignore the exception - remove my debug print.
Remove double semi-colon
* Apparently 1.14/15 matter too still.
The main functionality of WorldguardFlag.java was ported to Worldguard.java. This *shouldn't* break functionality of either the Worldguard or WorldguardFlag features, but users should be cautious and provide prompt feedback if any unintended changes are found.
* Fix FAWE killing chunk ticks. Also allow ticking for set blocks.
* Reduce for-loop to being one loop in createPalette
* set the value in the set array and break so we don't continue onwards in the set's ordinal switch statement
- Re-read chunksections the first time they're "loaded" for an operation
- Reset the chunksection if there are block changes when setting blocks via reflection
- These are maybe gonna affect performance a bit? Idk. Seems to be alright for me
- These are maybe gonna make more issues? Yeah maybe, but I couldn't find any
This commit should properly synchronize the initialization of the adapter's ibdToStateOrdinal (the char array FAWE uses to convert NMS IBlockData objects to an internal ordinal for chunk operations) so references to this array do not push incorrect characters down the line.
Potentially fixes#373Fixes#363Fixes#332
I run a fork of paper which replaces the visibleChunks and updatingChunks
field for gc performance reasons - visibleChunks is updated via
cloning updatingChunks, and at high chunk counts this causes gc issues
due to the humongous allocation. Unfortunately the only solution is to
not clone the map - which is why the field is removed.
Instead of BukkitAdapter#getPlayerChunk using the visibleChunks field,
it now uses a MethodHandle for PlayerChunkMap#getVisibleChunk. This method is
present on spigot & paper (only protected on spigot - which is why reflection is required),
and I preserve the same thread-safety it provides in my fork - so this solution
will not break compatibility with craftbukkit, spigot, and paper.
Removed LoggingChangeSet since it wasn't functional and the majority of it was commented out.
Migrated a lot of RunnableVal implementations to Suppliers for improved readability and a very small speed improvement.
Changed Lock to subclass ReentrantLock since that is the only subclass DelegateLock should be using. The lock should also never be null so I added an annotation in the constructor.
I also removed some code and replaced it with PaperLib code to just clean up things a little bit.
Adapter updated to 1.15.2, mostly a clone of 1.15 / 1.15.1's adapter. I encountered no issues from this, but the field names for our reflections may need to be double-checked for accuracy in this Minecraft version.
This reverts commit 376f241b7dfbe3cf221adaae340661d0c9a5c81f.
Spigot bad. Also LP bad. This really shouldn't be necessary but it's
probably safer due to all the weird shit spigot and LP do.
(cherry picked from commit 68d48148d3df6e01815d05c462ba22498734fdc4)
- Removed duplicated dependencies
- Credited important contributors
- Updated website with an actual website
- Update DummyFawe internal version to 1.15.2