Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Folia #2165

Closed
wants to merge 4 commits into from
Closed

Support Folia #2165

wants to merge 4 commits into from

Conversation

SirYwell
Copy link
Member

Overview

WIP

Description

Adds support for Folia to FAWE.
This requires some workarounds and fixes.
We can probably also target the folia API directly, and avoid the MethodHandle stuff, but it doesn't really matter for now.
For development, I used a custom Folia build to allow loading FAWE. Not sure if we can add the required field to the plugin.yml right now, as we're using the plugin-yml gradle plugin.

Note: This requires more testing and manual code inspection before integrating, there might have been changes in Folia since the last time I worked on this.

Known issues:

  • //regen does not work

Submitter Checklist

  • Make sure you are opening from a topic branch (/feature/fix/docs/ branch (right side)) and not your main branch.
  • Ensure that the pull request title represents the desired changelog entry.
  • New public fields and methods are annotated with @since TODO.
  • I read and followed the contribution guidelines.

@github-actions github-actions bot added the Feature This PR adds a new feature label Mar 30, 2023
@NotMyFault
Copy link
Member

Not sure if we can add the required field to the plugin.yml right now, as we're using the plugin-yml gradle plugin.

Only for the CLI where I added it to display an annoying message if the server attempts to load the CLI. Shouldn't be a blocker at alll.

@SirYwell
Copy link
Member Author

I see, that makes things easier

@HarvelsX
Copy link

HarvelsX commented Jun 7, 2023

It needs to be replaced with a similar code supported in Folia.
Bukkit.getCurrentTick() gets the same value, but is replaced in Folia by its logic.

@TheMeinerLP
Copy link
Member

It needs to be replaced with a similar code supported in Folia.
Bukkit.getCurrentTick() gets the same value, but is replaced in Folia by its logic.

Pleas look at my PR that extends this one

@mani1232
Copy link

And update to 1.20 pls

@HarvelsX
Copy link

@mani1232, try merge branches yourself/

# Conflicts:
#	worldedit-core/src/main/java/com/fastasyncworldedit/core/Fawe.java
#	worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/QueueHandler.java
@mani1232
Copy link

mani1232 commented Jun 17, 2023

[21:04:13 ERROR]: Could not pass event PlayerInteractEvent to FastAsyncWorldEdit v2.6.4-SNAPSHOT
java.lang.NoSuchFieldError: currentTick
at com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R1.PaperweightFaweWorldNativeAccess.(PaperweightFaweWorldNativeAccess.java:62) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_20_R1.PaperweightFaweAdapter.createWorldNativeAccess(PaperweightFaweAdapter.java:307) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.sk89q.worldedit.bukkit.BukkitWorld.(BukkitWorld.java:139) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.fastasyncworldedit.bukkit.adapter.IBukkitAdapter.adapt(IBukkitAdapter.java:325) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.fastasyncworldedit.bukkit.adapter.IDelegateBukkitImplAdapter.adapt(IDelegateBukkitImplAdapter.java:261) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.sk89q.worldedit.bukkit.BukkitAdapter.adapt(BukkitAdapter.java:124) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.sk89q.worldedit.bukkit.BukkitPlayer.getWorld(BukkitPlayer.java:308) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.sk89q.worldedit.bukkit.WorldEditListener.onPlayerInteract(WorldEditListener.java:144) ~[FastAsyncWorldEdit-Bukkit-2.6.4-SNAPSHOT.jar:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor24.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:77) ~[kaiiju-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:77) ~[kaiiju-api-1.20.1-R0.1-SNAPSHOT.jar:git-Kaiiju-"319347e"]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[kaiiju-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:126) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:615) ~[kaiiju-api-1.20.1-R0.1-SNAPSHOT.jar:?]
at org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:564) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at net.minecraft.server.level.ServerPlayerGameMode.useItemOn(ServerPlayerGameMode.java:537) ~[?:?]
at net.minecraft.server.network.ServerGamePacketListenerImpl.handleUseItemOn(ServerGamePacketListenerImpl.java:2002) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.handle(ServerboundUseItemOnPacket.java:37) ~[?:?]
at net.minecraft.network.protocol.game.ServerboundUseItemOnPacket.a(ServerboundUseItemOnPacket.java:9) ~[?:?]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:52) ~[?:?]
at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:75) ~[?:?]
at io.papermc.paper.threadedregions.EntityScheduler.executeTick(EntityScheduler.java:173) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1524) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at io.papermc.paper.threadedregions.TickRegions$ConcreteRegionTickHandle.tickRegion(TickRegions.java:360) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at io.papermc.paper.threadedregions.TickRegionScheduler$RegionScheduleHandle.runTick(TickRegionScheduler.java:385) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool$TickThreadRunner.run(SchedulerThreadPool.java:525) ~[kaiiju-1.20.1.jar:git-Kaiiju-"319347e"]
at java.lang.Thread.run(Thread.java:833) ~[?:?]

@mani1232
Copy link

And error from 1.19.4
[19:02:47 WARN]: [FastAsyncWorldEdit] Location task for FastAsyncWorldEdit v2.6.0-SNAPSHOT in world CraftWorld{name=world} at 48, 112 generated an exception
java.lang.IllegalStateException: Tile entity must be owned by current region
at io.papermc.paper.util.TickThread.ensureTickThread(TickThread.java:58) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at io.papermc.paper.threadedregions.RegionizedWorldData.addBlockEntityTicker(RegionizedWorldData.java:644) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at net.minecraft.world.level.Level.addBlockEntityTicker(Level.java:998) ~[?:?]
at net.minecraft.world.level.chunk.LevelChunk.lambda$updateBlockEntityTicker$6(LevelChunk.java:1139) ~[?:?]
at java.util.HashMap.compute(HashMap.java:1324) ~[?:?]
at net.minecraft.world.level.chunk.LevelChunk.updateBlockEntityTicker(LevelChunk.java:1130) ~[?:?]
at net.minecraft.world.level.chunk.LevelChunk.addAndRegisterBlockEntity(LevelChunk.java:609) ~[?:?]
at net.minecraft.world.level.chunk.LevelChunk.getBlockEntity(LevelChunk.java:587) ~[?:?]
at net.minecraft.world.level.Level.getBlockEntity(Level.java:1157) ~[?:?]
at net.minecraft.world.level.Level.getBlockEntity(Level.java:1140) ~[?:?]
at com.sk89q.worldedit.folia.adapter.impl.fawe.v1_19_R3.PaperweightGetBlocks.lambda$call$6(PaperweightGetBlocks.java:775) ~[FastAsyncWorldEdit-Bukkit-2.6.0-SNAPSHOT.jar:?]
at io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler.lambda$wrap$0(FoliaRegionScheduler.java:35) ~[kaiiju-1.19.4.jar:?]
at io.papermc.paper.threadedregions.RegionizedTaskQueue$PrioritisedQueue$ChunkBasedPriorityTask.executeInternal(RegionizedTaskQueue.java:504) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at io.papermc.paper.threadedregions.RegionizedTaskQueue$PrioritisedQueue.executeTask(RegionizedTaskQueue.java:434) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at io.papermc.paper.threadedregions.RegionizedTaskQueue$RegionTaskQueueData.drainTasks(RegionizedTaskQueue.java:263) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1517) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at io.papermc.paper.threadedregions.TickRegions$ConcreteRegionTickHandle.tickRegion(TickRegions.java:360) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at io.papermc.paper.threadedregions.TickRegionScheduler$RegionScheduleHandle.runTick(TickRegionScheduler.java:385) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool$TickThreadRunner.run(SchedulerThreadPool.java:525) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"]
at java.lang.Thread.run(Thread.java:1589) ~[?:?]

@TheMeinerLP
Copy link
Member

And error from 1.19.4 [19:02:47 WARN]: [FastAsyncWorldEdit] Location task for FastAsyncWorldEdit v2.6.0-SNAPSHOT in world CraftWorld{name=world} at 48, 112 generated an exception java.lang.IllegalStateException: Tile entity must be owned by current region at io.papermc.paper.util.TickThread.ensureTickThread(TickThread.java:58) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at io.papermc.paper.threadedregions.RegionizedWorldData.addBlockEntityTicker(RegionizedWorldData.java:644) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at net.minecraft.world.level.Level.addBlockEntityTicker(Level.java:998) ~[?:?] at net.minecraft.world.level.chunk.LevelChunk.lambda$updateBlockEntityTicker$6(LevelChunk.java:1139) ~[?:?] at java.util.HashMap.compute(HashMap.java:1324) ~[?:?] at net.minecraft.world.level.chunk.LevelChunk.updateBlockEntityTicker(LevelChunk.java:1130) ~[?:?] at net.minecraft.world.level.chunk.LevelChunk.addAndRegisterBlockEntity(LevelChunk.java:609) ~[?:?] at net.minecraft.world.level.chunk.LevelChunk.getBlockEntity(LevelChunk.java:587) ~[?:?] at net.minecraft.world.level.Level.getBlockEntity(Level.java:1157) ~[?:?] at net.minecraft.world.level.Level.getBlockEntity(Level.java:1140) ~[?:?] at com.sk89q.worldedit.folia.adapter.impl.fawe.v1_19_R3.PaperweightGetBlocks.lambda$call$6(PaperweightGetBlocks.java:775) ~[FastAsyncWorldEdit-Bukkit-2.6.0-SNAPSHOT.jar:?] at io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler.lambda$wrap$0(FoliaRegionScheduler.java:35) ~[kaiiju-1.19.4.jar:?] at io.papermc.paper.threadedregions.RegionizedTaskQueue$PrioritisedQueue$ChunkBasedPriorityTask.executeInternal(RegionizedTaskQueue.java:504) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at io.papermc.paper.threadedregions.RegionizedTaskQueue$PrioritisedQueue.executeTask(RegionizedTaskQueue.java:434) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at io.papermc.paper.threadedregions.RegionizedTaskQueue$RegionTaskQueueData.drainTasks(RegionizedTaskQueue.java:263) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1517) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at io.papermc.paper.threadedregions.TickRegions$ConcreteRegionTickHandle.tickRegion(TickRegions.java:360) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at io.papermc.paper.threadedregions.TickRegionScheduler$RegionScheduleHandle.runTick(TickRegionScheduler.java:385) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool$TickThreadRunner.run(SchedulerThreadPool.java:525) ~[kaiiju-1.19.4.jar:git-Kaiiju-"93f3978"] at java.lang.Thread.run(Thread.java:1589) ~[?:?]

Already known issue. I will start soon some rework on it to reduce code duplication.
Also there is then a tracking issue for all of those issues

@TheMeinerLP
Copy link
Member

And update to 1.20 pls

Here it is: #2309
But caution: This have many issues

@github-actions
Copy link

Please take a moment and address the merge conflicts of your pull request. Thanks!

@SirYwell SirYwell closed this Apr 11, 2024
@SirYwell SirYwell deleted the feature/folia branch April 11, 2024 16:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants