From 504f90840bb3194b4921f25bcc2ff21089cc6400 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Sat, 11 Jan 2025 06:42:06 -0800 Subject: [PATCH] Split paper feature patches into file patches --- ... => 0003-Fix-tests-by-removing-them.patch} | 0 .../features/0003-Threaded-Regions.patch | 1622 -------- ...-getHandle-and-overrides-perform-thr.patch | 3306 ----------------- ...filer.patch => 0004-Region-profiler.patch} | 0 ...d.patch => 0005-Add-watchdog-thread.patch} | 0 ...edOperationException-for-broken-APIs.patch | 74 - ...to-be-explicitly-marked-as-Folia-sup.patch | 82 - .../0009-Disable-spark-profiler.patch | 29 - .../common/util/TickThread.java.patch | 184 + .../io/papermc/paper/SparksFly.java.patch | 57 + .../paper/adventure/ChatProcessor.java.patch | 20 + .../ClickCallbackProviderImpl.java.patch | 57 + .../paper/command/PaperCommands.java.patch | 10 + .../subcommands/EntityCommand.java.patch | 11 + .../subcommands/HeapDumpCommand.java.patch | 12 + .../subcommands/ReloadCommand.java.patch | 12 + .../GlobalConfiguration.java.patch | 20 + .../WorldConfiguration.java.patch | 17 + .../entity/PaperSchoolableFish.java.patch | 19 + .../activation/ActivationType.java.patch | 11 + .../PaperPermissionManager.java.patch} | 31 +- .../PaperPluginInstanceManager.java.patch | 16 + .../configuration/PaperPluginMeta.java.patch | 24 + .../PaperPluginProviderFactory.java.patch | 14 + .../SpigotPluginProviderFactory.java.patch | 14 + .../EntityScheduler.java.patch | 17 + .../io/papermc/paper/util/MCUtil.java.patch | 41 + .../bukkit/craftbukkit/CraftServer.java.patch | 102 + .../bukkit/craftbukkit/CraftWorld.java.patch | 415 +++ .../craftbukkit/block/CraftBlock.java.patch | 201 + .../block/CraftBlockEntityState.java.patch | 22 + .../block/CraftBlockState.java.patch | 25 + .../block/CraftBlockStates.java.patch | 22 + .../ConsoleCommandCompleter.java.patch | 20 + .../entity/AbstractProjectile.java.patch | 31 + .../entity/CraftAbstractArrow.java.patch | 10 + .../entity/CraftAbstractHorse.java.patch | 19 + .../entity/CraftAbstractSkeleton.java.patch | 20 + .../entity/CraftAbstractVillager.java.patch | 19 + .../entity/CraftAbstractWindCharge.java.patch | 10 + .../entity/CraftAgeable.java.patch | 19 + .../craftbukkit/entity/CraftAllay.java.patch | 19 + .../entity/CraftAmbient.java.patch | 19 + .../entity/CraftAnimals.java.patch | 19 + .../entity/CraftAreaEffectCloud.java.patch | 19 + .../entity/CraftArmadillo.java.patch | 10 + .../entity/CraftArmorStand.java.patch | 19 + .../craftbukkit/entity/CraftArrow.java.patch | 24 + .../entity/CraftAxolotl.java.patch | 19 + .../craftbukkit/entity/CraftBat.java.patch | 19 + .../craftbukkit/entity/CraftBee.java.patch | 19 + .../craftbukkit/entity/CraftBlaze.java.patch | 19 + .../CraftBlockAttachedEntity.java.patch | 19 + .../entity/CraftBlockDisplay.java.patch | 19 + .../craftbukkit/entity/CraftBoat.java.patch | 19 + .../craftbukkit/entity/CraftBogged.java.patch | 10 + .../craftbukkit/entity/CraftBreeze.java.patch | 10 + .../entity/CraftBreezeWindCharge.java.patch | 10 + .../craftbukkit/entity/CraftCamel.java.patch | 19 + .../craftbukkit/entity/CraftCat.java.patch | 19 + .../entity/CraftCaveSpider.java.patch | 19 + .../entity/CraftChestBoat.java.patch | 19 + .../entity/CraftChestedHorse.java.patch | 19 + .../entity/CraftChicken.java.patch | 19 + .../craftbukkit/entity/CraftCod.java.patch | 19 + .../entity/CraftComplexPart.java.patch | 19 + .../craftbukkit/entity/CraftCow.java.patch | 19 + .../entity/CraftCreaking.java.patch | 19 + .../entity/CraftCreature.java.patch | 19 + .../entity/CraftCreeper.java.patch | 24 + .../entity/CraftDisplay.java.patch | 19 + .../entity/CraftDolphin.java.patch | 19 + .../entity/CraftDrowned.java.patch | 19 + .../craftbukkit/entity/CraftEgg.java.patch | 19 + .../entity/CraftEnderCrystal.java.patch | 19 + .../entity/CraftEnderDragon.java.patch | 19 + .../entity/CraftEnderDragonPart.java.patch | 19 + .../entity/CraftEnderPearl.java.patch | 19 + .../entity/CraftEnderSignal.java.patch | 19 + .../entity/CraftEnderman.java.patch | 19 + .../entity/CraftEndermite.java.patch | 19 + .../craftbukkit/entity/CraftEntity.java.patch | 134 + .../craftbukkit/entity/CraftEvoker.java.patch | 19 + .../entity/CraftEvokerFangs.java.patch | 19 + .../entity/CraftExperienceOrb.java.patch | 19 + .../entity/CraftFallingBlock.java.patch | 19 + .../entity/CraftFireball.java.patch | 19 + .../entity/CraftFirework.java.patch | 19 + .../craftbukkit/entity/CraftFish.java.patch | 19 + .../entity/CraftFishHook.java.patch | 19 + .../craftbukkit/entity/CraftFlying.java.patch | 19 + .../craftbukkit/entity/CraftFox.java.patch | 19 + .../craftbukkit/entity/CraftFrog.java.patch | 19 + .../craftbukkit/entity/CraftGhast.java.patch | 19 + .../craftbukkit/entity/CraftGiant.java.patch | 19 + .../entity/CraftGlowItemFrame.java.patch | 19 + .../entity/CraftGlowSquid.java.patch | 19 + .../craftbukkit/entity/CraftGoat.java.patch | 19 + .../craftbukkit/entity/CraftGolem.java.patch | 19 + .../entity/CraftGuardian.java.patch | 19 + .../entity/CraftHanging.java.patch | 19 + .../craftbukkit/entity/CraftHoglin.java.patch | 19 + .../craftbukkit/entity/CraftHorse.java.patch | 19 + .../entity/CraftHumanEntity.java.patch | 19 + .../entity/CraftIllager.java.patch | 19 + .../entity/CraftIllusioner.java.patch | 19 + .../entity/CraftInteraction.java.patch | 19 + .../entity/CraftIronGolem.java.patch | 19 + .../craftbukkit/entity/CraftItem.java.patch | 19 + .../entity/CraftItemDisplay.java.patch | 19 + .../entity/CraftItemFrame.java.patch | 19 + .../entity/CraftLargeFireball.java.patch | 19 + .../craftbukkit/entity/CraftLeash.java.patch | 24 + .../entity/CraftLightningStrike.java.patch | 19 + .../entity/CraftLivingEntity.java.patch | 24 + .../craftbukkit/entity/CraftLlama.java.patch | 19 + .../entity/CraftLlamaSpit.java.patch | 19 + .../entity/CraftMagmaCube.java.patch | 19 + .../craftbukkit/entity/CraftMarker.java.patch | 19 + .../entity/CraftMinecart.java.patch | 19 + .../entity/CraftMinecartCommand.java.patch | 19 + .../entity/CraftMinecartContainer.java.patch | 19 + .../entity/CraftMinecartFurnace.java.patch | 19 + .../entity/CraftMinecartHopper.java.patch | 20 + .../entity/CraftMinecartMobSpawner.java.patch | 19 + .../entity/CraftMinecartTNT.java.patch | 19 + .../craftbukkit/entity/CraftMob.java.patch | 28 + .../entity/CraftMonster.java.patch | 19 + .../entity/CraftMushroomCow.java.patch | 24 + .../craftbukkit/entity/CraftOcelot.java.patch | 19 + .../entity/CraftOminousItemSpawner.java.patch | 10 + .../entity/CraftPainting.java.patch | 19 + .../craftbukkit/entity/CraftPanda.java.patch | 19 + .../craftbukkit/entity/CraftParrot.java.patch | 19 + .../entity/CraftPhantom.java.patch | 19 + .../craftbukkit/entity/CraftPig.java.patch | 19 + .../entity/CraftPigZombie.java.patch | 19 + .../craftbukkit/entity/CraftPiglin.java.patch | 19 + .../entity/CraftPiglinAbstract.java.patch | 19 + .../entity/CraftPiglinBrute.java.patch | 19 + .../entity/CraftPillager.java.patch | 19 + .../craftbukkit/entity/CraftPlayer.java.patch | 77 + .../entity/CraftPolarBear.java.patch | 20 + .../entity/CraftProjectile.java.patch | 19 + .../entity/CraftPufferFish.java.patch | 19 + .../craftbukkit/entity/CraftRabbit.java.patch | 19 + .../craftbukkit/entity/CraftRaider.java.patch | 19 + .../entity/CraftRavager.java.patch | 19 + .../craftbukkit/entity/CraftSalmon.java.patch | 19 + .../craftbukkit/entity/CraftSheep.java.patch | 19 + .../entity/CraftShulker.java.patch | 19 + .../entity/CraftShulkerBullet.java.patch | 19 + .../entity/CraftSilverfish.java.patch | 19 + .../entity/CraftSizedFireball.java.patch | 19 + .../entity/CraftSkeleton.java.patch | 19 + .../entity/CraftSkeletonHorse.java.patch | 19 + .../craftbukkit/entity/CraftSlime.java.patch | 19 + .../entity/CraftSmallFireball.java.patch | 19 + .../entity/CraftSniffer.java.patch | 19 + .../entity/CraftSnowball.java.patch | 19 + .../entity/CraftSnowman.java.patch | 19 + .../entity/CraftSpectralArrow.java.patch | 19 + .../entity/CraftSpellcaster.java.patch | 19 + .../craftbukkit/entity/CraftSpider.java.patch | 19 + .../craftbukkit/entity/CraftSquid.java.patch | 19 + .../entity/CraftStrider.java.patch | 19 + .../entity/CraftTNTPrimed.java.patch | 19 + .../entity/CraftTadpole.java.patch | 19 + .../entity/CraftTameableAnimal.java.patch | 19 + .../entity/CraftTextDisplay.java.patch | 19 + .../CraftThrowableProjectile.java.patch | 19 + .../entity/CraftThrownExpBottle.java.patch | 19 + .../entity/CraftThrownPotion.java.patch | 20 + .../entity/CraftTraderLlama.java.patch | 19 + .../entity/CraftTrident.java.patch | 19 + .../entity/CraftTropicalFish.java.patch | 19 + .../craftbukkit/entity/CraftTurtle.java.patch | 19 + .../craftbukkit/entity/CraftVex.java.patch | 19 + .../entity/CraftVillager.java.patch | 19 + .../entity/CraftVillagerZombie.java.patch | 19 + .../entity/CraftVindicator.java.patch | 19 + .../entity/CraftWanderingTrader.java.patch | 19 + .../craftbukkit/entity/CraftWarden.java.patch | 19 + .../entity/CraftWaterMob.java.patch | 19 + .../entity/CraftWindCharge.java.patch | 10 + .../craftbukkit/entity/CraftWitch.java.patch | 19 + .../craftbukkit/entity/CraftWither.java.patch | 19 + .../entity/CraftWitherSkull.java.patch | 19 + .../craftbukkit/entity/CraftWolf.java.patch | 19 + .../craftbukkit/entity/CraftZoglin.java.patch | 19 + .../craftbukkit/entity/CraftZombie.java.patch | 19 + .../event/CraftEventFactory.java.patch | 29 + .../scheduler/CraftScheduler.java.patch | 10 + .../scoreboard/CraftScoreboard.java.patch | 26 + .../CraftScoreboardManager.java.patch | 18 + .../util/CraftMagicNumbers.java.patch | 15 + .../util/DelegatedGeneratorAccess.java.patch | 16 + .../org/spigotmc/SpigotCommand.java.patch | 18 + .../java/org/spigotmc/SpigotConfig.java.patch | 20 + .../org/spigotmc/SpigotWorldConfig.java.patch | 11 + .../paper/plugin/TestPluginMeta.java.patch | 16 + 201 files changed, 4685 insertions(+), 5135 deletions(-) rename folia-server/paper-patches/features/{0006-Fix-tests-by-removing-them.patch => 0003-Fix-tests-by-removing-them.patch} (100%) delete mode 100644 folia-server/paper-patches/features/0003-Threaded-Regions.patch delete mode 100644 folia-server/paper-patches/features/0004-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch rename folia-server/paper-patches/features/{0010-Region-profiler.patch => 0004-Region-profiler.patch} (100%) rename folia-server/paper-patches/features/{0011-Add-watchdog-thread.patch => 0005-Add-watchdog-thread.patch} (100%) delete mode 100644 folia-server/paper-patches/features/0005-Throw-UnsupportedOperationException-for-broken-APIs.patch delete mode 100644 folia-server/paper-patches/features/0007-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch delete mode 100644 folia-server/paper-patches/features/0009-Disable-spark-profiler.patch create mode 100644 folia-server/paper-patches/files/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/SparksFly.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/ChatProcessor.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/PaperCommands.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/activation/ActivationType.java.patch rename folia-server/paper-patches/{features/0008-Synchronize-PaperPermissionManager.patch => files/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java.patch} (83%) create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/io/papermc/paper/util/MCUtil.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotCommand.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotConfig.java.patch create mode 100644 folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotWorldConfig.java.patch create mode 100644 folia-server/paper-patches/files/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java.patch diff --git a/folia-server/paper-patches/features/0006-Fix-tests-by-removing-them.patch b/folia-server/paper-patches/features/0003-Fix-tests-by-removing-them.patch similarity index 100% rename from folia-server/paper-patches/features/0006-Fix-tests-by-removing-them.patch rename to folia-server/paper-patches/features/0003-Fix-tests-by-removing-them.patch diff --git a/folia-server/paper-patches/features/0003-Threaded-Regions.patch b/folia-server/paper-patches/features/0003-Threaded-Regions.patch deleted file mode 100644 index 8eb14ab..0000000 --- a/folia-server/paper-patches/features/0003-Threaded-Regions.patch +++ /dev/null @@ -1,1622 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Sun, 2 Oct 2022 21:28:53 -0700 -Subject: [PATCH] Threaded Regions - -See https://docs.papermc.io/folia/reference/overview and -https://docs.papermc.io/folia/reference/region-logic - -diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java -index 157e5edb507d6d2a922833c70a1c27abc93c9c34..5aa2891d52fb246329bf3483059b069b86fd621a 100644 ---- a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java -+++ b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java -@@ -1,5 +1,11 @@ - package ca.spottedleaf.moonrise.common.util; - -+import io.papermc.paper.threadedregions.RegionShutdownThread; -+import io.papermc.paper.threadedregions.RegionizedServer; -+import io.papermc.paper.threadedregions.RegionizedWorldData; -+import io.papermc.paper.threadedregions.ThreadedRegionizer; -+import io.papermc.paper.threadedregions.TickRegionScheduler; -+import io.papermc.paper.threadedregions.TickRegions; - import net.minecraft.core.BlockPos; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.level.ChunkPos; -@@ -119,50 +125,157 @@ public class TickThread extends Thread { - } - - public static boolean isShutdownThread() { -- return false; -+ return Thread.currentThread().getClass() == RegionShutdownThread.class; - } - - public static boolean isTickThreadFor(final Level world, final BlockPos pos) { -- return isTickThread(); -+ return isTickThreadFor(world, pos.getX() >> 4, pos.getZ() >> 4); - } - - public static boolean isTickThreadFor(final Level world, final BlockPos pos, final int blockRadius) { -- return isTickThread(); -+ return isTickThreadFor( -+ world, -+ (pos.getX() - blockRadius) >> 4, (pos.getZ() - blockRadius) >> 4, -+ (pos.getX() + blockRadius) >> 4, (pos.getZ() + blockRadius) >> 4 -+ ); - } - - public static boolean isTickThreadFor(final Level world, final ChunkPos pos) { -- return isTickThread(); -+ return isTickThreadFor(world, pos.x, pos.z); - } - - public static boolean isTickThreadFor(final Level world, final Vec3 pos) { -- return isTickThread(); -+ return isTickThreadFor(world, net.minecraft.util.Mth.floor(pos.x) >> 4, net.minecraft.util.Mth.floor(pos.z) >> 4); - } - - public static boolean isTickThreadFor(final Level world, final int chunkX, final int chunkZ) { -- return isTickThread(); -+ final ThreadedRegionizer.ThreadedRegion region = -+ TickRegionScheduler.getCurrentRegion(); -+ if (region == null) { -+ return isShutdownThread(); -+ } -+ return ((net.minecraft.server.level.ServerLevel)world).regioniser.getRegionAtUnsynchronised(chunkX, chunkZ) == region; - } - - public static boolean isTickThreadFor(final Level world, final AABB aabb) { -- return isTickThread(); -+ return isTickThreadFor( -+ world, -+ CoordinateUtils.getChunkCoordinate(aabb.minX), CoordinateUtils.getChunkCoordinate(aabb.minZ), -+ CoordinateUtils.getChunkCoordinate(aabb.maxX), CoordinateUtils.getChunkCoordinate(aabb.maxZ) -+ ); - } - - public static boolean isTickThreadFor(final Level world, final double blockX, final double blockZ) { -- return isTickThread(); -+ return isTickThreadFor(world, CoordinateUtils.getChunkCoordinate(blockX), CoordinateUtils.getChunkCoordinate(blockZ)); - } - - public static boolean isTickThreadFor(final Level world, final Vec3 position, final Vec3 deltaMovement, final int buffer) { -- return isTickThread(); -+ final int fromChunkX = CoordinateUtils.getChunkX(position); -+ final int fromChunkZ = CoordinateUtils.getChunkZ(position); -+ -+ final int toChunkX = CoordinateUtils.getChunkCoordinate(position.x + deltaMovement.x); -+ final int toChunkZ = CoordinateUtils.getChunkCoordinate(position.z + deltaMovement.z); -+ -+ // expect from < to, but that may not be the case -+ return isTickThreadFor( -+ world, -+ Math.min(fromChunkX, toChunkX) - buffer, -+ Math.min(fromChunkZ, toChunkZ) - buffer, -+ Math.max(fromChunkX, toChunkX) + buffer, -+ Math.max(fromChunkZ, toChunkZ) + buffer -+ ); - } - - public static boolean isTickThreadFor(final Level world, final int fromChunkX, final int fromChunkZ, final int toChunkX, final int toChunkZ) { -- return isTickThread(); -+ final ThreadedRegionizer.ThreadedRegion region = -+ TickRegionScheduler.getCurrentRegion(); -+ if (region == null) { -+ return isShutdownThread(); -+ } -+ -+ final int shift = ((net.minecraft.server.level.ServerLevel)world).regioniser.sectionChunkShift; -+ -+ final int minSectionX = fromChunkX >> shift; -+ final int maxSectionX = toChunkX >> shift; -+ final int minSectionZ = fromChunkZ >> shift; -+ final int maxSectionZ = toChunkZ >> shift; -+ -+ for (int secZ = minSectionZ; secZ <= maxSectionZ; ++secZ) { -+ for (int secX = minSectionX; secX <= maxSectionX; ++secX) { -+ final int lowerLeftCX = secX << shift; -+ final int lowerLeftCZ = secZ << shift; -+ if (((net.minecraft.server.level.ServerLevel)world).regioniser.getRegionAtUnsynchronised(lowerLeftCX, lowerLeftCZ) != region) { -+ return false; -+ } -+ } -+ } -+ -+ return true; - } - - public static boolean isTickThreadFor(final Level world, final int chunkX, final int chunkZ, final int radius) { -- return isTickThread(); -+ return isTickThreadFor(world, chunkX - radius, chunkZ - radius, chunkX + radius, chunkZ + radius); - } - - public static boolean isTickThreadFor(final Entity entity) { -- return isTickThread(); -+ if (entity == null) { -+ return true; -+ } -+ final ThreadedRegionizer.ThreadedRegion region = -+ TickRegionScheduler.getCurrentRegion(); -+ if (region == null) { -+ if (RegionizedServer.isGlobalTickThread()) { -+ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { -+ final net.minecraft.server.network.ServerGamePacketListenerImpl possibleBad = serverPlayer.connection; -+ if (possibleBad == null) { -+ return true; -+ } -+ -+ final net.minecraft.network.PacketListener packetListener = possibleBad.connection.getPacketListener(); -+ if (packetListener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { -+ return gamePacketListener.waitingForSwitchToConfig; -+ } -+ if (packetListener instanceof net.minecraft.server.network.ServerConfigurationPacketListenerImpl configurationPacketListener) { -+ return !configurationPacketListener.switchToMain; -+ } -+ return true; -+ } else { -+ return false; -+ } -+ } -+ if (isShutdownThread()) { -+ return true; -+ } -+ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { -+ // off-main access to server player is never ok, server player is owned by one of global context or region context always -+ return false; -+ } -+ // only own entities that have not yet been added to the world -+ -+ // if the entity is removed, then it was in the world previously - which means that a region containing its location -+ // owns it -+ // if the entity has a callback, then it is contained in a world -+ return entity.hasNullCallback() && !entity.isRemoved(); -+ } -+ -+ final Level world = entity.level(); -+ if (world != region.regioniser.world) { -+ // world mismatch -+ return false; -+ } -+ -+ final RegionizedWorldData worldData = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData(); -+ -+ // pass through the check if the entity is removed and we own its chunk -+ if (worldData.hasEntity(entity)) { -+ return true; -+ } -+ -+ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { -+ net.minecraft.server.network.ServerGamePacketListenerImpl conn = serverPlayer.connection; -+ return conn != null && worldData.connections.contains(conn.connection); -+ } else { -+ return ((entity.hasNullCallback() || entity.isRemoved())) && isTickThreadFor((net.minecraft.server.level.ServerLevel)world, entity.chunkPosition()); -+ } - } - } -diff --git a/src/main/java/io/papermc/paper/SparksFly.java b/src/main/java/io/papermc/paper/SparksFly.java -index 62e2d5704c348955bc8284dc2d54c933b7bcdd06..2ad5b9b0b7e18780ee73310451d9fa73f44c4bdb 100644 ---- a/src/main/java/io/papermc/paper/SparksFly.java -+++ b/src/main/java/io/papermc/paper/SparksFly.java -@@ -33,13 +33,13 @@ public final class SparksFly { - - private final Logger logger; - private final PaperSparkModule spark; -- private final ConcurrentLinkedQueue mainThreadTaskQueue; -+ // Folia - region threading - - private boolean enabled; - private boolean disabledInConfigurationWarningLogged; - - public SparksFly(final Server server) { -- this.mainThreadTaskQueue = new ConcurrentLinkedQueue<>(); -+ // Folia - region threading - this.logger = Logger.getLogger(ID); - this.logger.log(Level.INFO, "This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling"); - this.spark = PaperSparkModule.create(Compatibility.VERSION_1_0, server, this.logger, new PaperScheduler() { -@@ -50,7 +50,7 @@ public final class SparksFly { - - @Override - public void executeSync(final Runnable runnable) { -- SparksFly.this.mainThreadTaskQueue.offer(this.catching(runnable, "synchronous")); -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(this.catching(runnable, "synchronous")); // Folia - region threading - } - - private Runnable catching(final Runnable runnable, final String type) { -@@ -88,10 +88,7 @@ public final class SparksFly { - } - - public void executeMainThreadTasks() { -- Runnable task; -- while ((task = this.mainThreadTaskQueue.poll()) != null) { -- task.run(); -- } -+ throw new UnsupportedOperationException(); // Folia - region threading - } - - public void enableEarlyIfRequested() { -diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -index 14e412ebf75b0e06ab53a1c8f9dd1be6ad1e2680..3f733319482fedcf7461f4b7466e84afeae1fc2b 100644 ---- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -@@ -83,7 +83,7 @@ public final class ChatProcessor { - final CraftPlayer player = this.player.getBukkitEntity(); - final AsyncPlayerChatEvent ae = new AsyncPlayerChatEvent(this.async, player, this.craftbukkit$originalMessage, new LazyPlayerSet(this.server)); - this.post(ae); -- if (listenersOnSyncEvent) { -+ if (false && listenersOnSyncEvent) { // Folia - region threading - final PlayerChatEvent se = new PlayerChatEvent(player, ae.getMessage(), ae.getFormat(), ae.getRecipients()); - se.setCancelled(ae.isCancelled()); // propagate cancelled state - this.queueIfAsyncOrRunImmediately(new Waitable() { -@@ -150,7 +150,7 @@ public final class ChatProcessor { - ae.setCancelled(cancelled); // propagate cancelled state - this.post(ae); - final boolean listenersOnSyncEvent = canYouHearMe(ChatEvent.getHandlerList()); -- if (listenersOnSyncEvent) { -+ if (false && listenersOnSyncEvent) { // Folia - region threading - this.queueIfAsyncOrRunImmediately(new Waitable() { - @Override - protected Void evaluate() { -diff --git a/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java b/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java -index 23432eea862c6df716d7726a32da3a0612a3fb77..f59e8bb72c5233f26a8a0d506ac64bb37fef97a5 100644 ---- a/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java -+++ b/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java -@@ -23,35 +23,42 @@ public class ClickCallbackProviderImpl implements ClickCallback.Provider { - - public static final class CallbackManager { - -- private final Map callbacks = new HashMap<>(); -- private final Queue queue = new ConcurrentLinkedQueue<>(); -+ private final java.util.concurrent.ConcurrentHashMap callbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Folia - region threading -+ // Folia - region threading - - private CallbackManager() { - } - - public UUID addCallback(final @NotNull ClickCallback callback, final ClickCallback.@NotNull Options options) { - final UUID id = UUID.randomUUID(); -- this.queue.add(new StoredCallback(callback, options, id)); -+ final StoredCallback scb = new StoredCallback(callback, options, id); // Folia - region threading -+ this.callbacks.put(scb.id(), scb); // Folia - region threading - return id; - } - - public void handleQueue(final int currentTick) { - // Evict expired entries - if (currentTick % 100 == 0) { -- this.callbacks.values().removeIf(callback -> !callback.valid()); -+ this.callbacks.values().removeIf(StoredCallback::expired); // Folia - region threading - don't read uses field - } - -- // Add entries from queue -- StoredCallback callback; -- while ((callback = this.queue.poll()) != null) { -- this.callbacks.put(callback.id(), callback); -- } -+ // Folia - region threading - } - - public void runCallback(final @NotNull Audience audience, final UUID id) { -- final StoredCallback callback = this.callbacks.get(id); -- if (callback != null && callback.valid()) { //TODO Message if expired/invalid? -- callback.takeUse(); -+ // Folia start - region threading -+ final StoredCallback[] use = new StoredCallback[1]; -+ this.callbacks.computeIfPresent(id, (final UUID keyInMap, final StoredCallback value) -> { -+ if (!value.valid()) { -+ return null; -+ } -+ use[0] = value; -+ value.takeUse(); -+ return value.valid() ? value : null; -+ }); -+ final StoredCallback callback = use[0]; -+ if (callback != null) { //TODO Message if expired/invalid? -+ // Folia end - region threading - callback.callback.accept(audience); - } - } -diff --git a/src/main/java/io/papermc/paper/command/PaperCommands.java b/src/main/java/io/papermc/paper/command/PaperCommands.java -index 7b58b2d6297800c2dcdbf7539e5ab8e7703f39f1..a587d83b78af4efc484f939529acf70834f60d7e 100644 ---- a/src/main/java/io/papermc/paper/command/PaperCommands.java -+++ b/src/main/java/io/papermc/paper/command/PaperCommands.java -@@ -19,6 +19,7 @@ public final class PaperCommands { - COMMANDS.put("paper", new PaperCommand("paper")); - COMMANDS.put("callback", new CallbackCommand("callback")); - COMMANDS.put("mspt", new MSPTCommand("mspt")); -+ COMMANDS.put("tps", new io.papermc.paper.threadedregions.commands.CommandServerHealth()); // Folia - region threading - } - - public static void registerCommands(final MinecraftServer server) { -diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java -index bbd29bcca94a81ad2603afa9ddcb160e925b405e..6284384299000480e9d5c0b62e8d88b2c922e776 100644 ---- a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java -+++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java -@@ -129,7 +129,7 @@ public final class EntityCommand implements PaperSubcommand { - final int z = (e.getKey().z << 4) + 8; - final Component message = text(" " + e.getValue() + ": " + e.getKey().x + ", " + e.getKey().z + (chunkProviderServer.isPositionTicking(e.getKey().toLong()) ? " (Ticking)" : " (Non-Ticking)")) - .hoverEvent(HoverEvent.showText(text("Click to teleport to chunk", GREEN))) -- .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (world.getWorld().getHighestBlockYAt(x, z, HeightMap.MOTION_BLOCKING) + 1) + " " + z)); -+ .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (128) + " " + z)); // Folia - region threading - avoid sync load here - sender.sendMessage(message); - }); - } else { -diff --git a/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java b/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java -index cd2e4d792e972b8bf1e07b8961594a670ae949cf..3ab8dbf2768a4ef8fb53af6f5431f7f6afe6d168 100644 ---- a/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java -+++ b/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java -@@ -18,7 +18,9 @@ import static net.kyori.adventure.text.format.NamedTextColor.YELLOW; - public final class HeapDumpCommand implements PaperSubcommand { - @Override - public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading - this.dumpHeap(sender); -+ }); // Folia - region threading - return true; - } - -diff --git a/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java b/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java -index bd68139ae635f2ad7ec8e7a21e0056a139c4c62e..48a43341b17247355a531164019d5cc9c5555f26 100644 ---- a/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java -+++ b/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java -@@ -16,7 +16,9 @@ import static net.kyori.adventure.text.format.NamedTextColor.RED; - public final class ReloadCommand implements PaperSubcommand { - @Override - public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading - this.doReload(sender); -+ }); // Folia - region threading - return true; - } - -diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -index 0b8e0ff5ce628cd1023de45ab0bff112f74dc695..c6805510805c91e301da2363b7011f93174bc7f0 100644 ---- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -@@ -396,4 +396,17 @@ public class GlobalConfiguration extends ConfigurationPart { - } - } - } -+ // Folia start - threaded regions -+ public ThreadedRegions threadedRegions; -+ public class ThreadedRegions extends ConfigurationPart { -+ -+ public int threads = -1; -+ public int gridExponent = 4; -+ -+ @PostProcess -+ public void postProcess() { -+ io.papermc.paper.threadedregions.TickRegions.init(this); -+ } -+ } -+ // Folia end - threaded regions - } -diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index d7c9acaffdcff5e35e026ae90a3e521bab13b074..321c4cad4f84c57f56e5bec3bcdbbef8823f70fe 100644 ---- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -+++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -493,6 +493,14 @@ public class WorldConfiguration extends ConfigurationPart { - public Chunks chunks; - - public class Chunks extends ConfigurationPart { -+ -+ // Folia start - region threading - force prevent moving into unloaded chunks -+ @PostProcess -+ public void postProcess() { -+ this.preventMovingIntoUnloadedChunks = true; -+ } -+ // Folia end - region threading - force prevent moving into unloaded chunks -+ - public AutosavePeriod autoSaveInterval = AutosavePeriod.def(); - public int maxAutoSaveChunksPerTick = 24; - public int fixedChunkInhabitedTime = -1; -diff --git a/src/main/java/io/papermc/paper/entity/activation/ActivationType.java b/src/main/java/io/papermc/paper/entity/activation/ActivationType.java -index cd43845a0819b5b63259d7a87ebb1cf5659ea5bc..01fef8353934f22a5176e731847d3df4a7df5306 100644 ---- a/src/main/java/io/papermc/paper/entity/activation/ActivationType.java -+++ b/src/main/java/io/papermc/paper/entity/activation/ActivationType.java -@@ -19,7 +19,7 @@ public enum ActivationType { - RAIDER, - MISC; - -- AABB boundingBox = new AABB(0, 0, 0, 0, 0, 0); -+ //AABB boundingBox = new AABB(0, 0, 0, 0, 0, 0); // Folia - threaded regions - replaced by local variable - - /** - * Returns the activation type for the given entity. -diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java -index 3e82ea07ca4194844c5528446e2c4a46ff4acee5..adfd4c16809f6ddd9cc73e4bd845d7aed4925068 100644 ---- a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java -+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java -@@ -256,12 +256,7 @@ class PaperPluginInstanceManager { - + pluginName + " (Is it up to date?)", ex, plugin); // Paper - } - -- try { -- this.server.getScheduler().cancelTasks(plugin); -- } catch (Throwable ex) { -- this.handlePluginException("Error occurred (in the plugin loader) while cancelling tasks for " -- + pluginName + " (Is it up to date?)", ex, plugin); // Paper -- } -+ // Folia - region threading - - // Paper start - Folia schedulers - try { -diff --git a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java -index c03608fec96b51e1867f43d8f42e5aefb1520e46..127d96280cad2d4e5db574a089d67ad68977b34e 100644 ---- a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java -+++ b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java -@@ -50,6 +50,14 @@ public final class EntityScheduler { - this.entity = Validate.notNull(entity); - } - -+ // Folia start - region threading -+ public boolean isRetired() { -+ synchronized (this.stateLock) { -+ return this.tickCount == RETIRED_TICK_COUNT; -+ } -+ } -+ // Folia end - region threading -+ - /** - * Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback - * on all currently scheduled tasks. -diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java -index a4ac34ebb58a404f4fca7e763e61d4ab05ee3af4..4dcec640f5870d713bd3b98389a45dbef8a4ea8a 100644 ---- a/src/main/java/io/papermc/paper/util/MCUtil.java -+++ b/src/main/java/io/papermc/paper/util/MCUtil.java -@@ -94,6 +94,7 @@ public final class MCUtil { - */ - public static void ensureMain(String reason, Runnable run) { - if (!isMainThread()) { -+ if (true) throw new UnsupportedOperationException(); // Folia - region threading - if (reason != null) { - MinecraftServer.LOGGER.warn("Asynchronous " + reason + "!", new IllegalStateException()); - } -@@ -148,6 +149,30 @@ public final class MCUtil { - return new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()); - } - -+ // Folia start - TODO MERGE INTO MCUTIL -+ /** -+ * Converts a NMS World/Vector to Bukkit Location -+ * @param world -+ * @param pos -+ * @return -+ */ -+ public static Location toLocation(Level world, Vec3 pos) { -+ return new Location(world.getWorld(), pos.x(), pos.y(), pos.z()); -+ } -+ -+ /** -+ * Converts a NMS World/Vector to Bukkit Location -+ * @param world -+ * @param pos -+ * @param yaw -+ * @param pitch -+ * @return -+ */ -+ public static Location toLocation(Level world, Vec3 pos, float yaw, float pitch) { -+ return new Location(world.getWorld(), pos.x(), pos.y(), pos.z(), yaw, pitch); -+ } -+ // Folia end - TODO MERGE INTO MCUTIL -+ - public static BlockPos toBlockPosition(Location loc) { - return new BlockPos(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - } -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index fda9daa6369933c80051ae007ba89513aa19227c..f12ac98285a18ce30fd5593aba9c0ef0b65622c5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -315,7 +315,7 @@ public final class CraftServer implements Server { - public final io.papermc.paper.SparksFly spark; // Paper - spark - - // Paper start - Folia region threading API -- private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler(); -+ private final io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler(); // Folia - region threading - private final io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler asyncScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler(); - private final io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler globalRegionScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler(); - -@@ -392,7 +392,7 @@ public final class CraftServer implements Server { - - @Override - public final boolean isGlobalTickThread() { -- return ca.spottedleaf.moonrise.common.util.TickThread.isTickThread(); -+ return io.papermc.paper.threadedregions.RegionizedServer.isGlobalTickThread(); // Folia - region threading API - } - // Paper end - Folia reagion threading API - -@@ -987,6 +987,9 @@ public final class CraftServer implements Server { - - // NOTE: Should only be called from DedicatedServer.ah() - public boolean dispatchServerCommand(CommandSender sender, ConsoleInput serverCommand) { -+ // Folia start - region threading -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("May not dispatch server commands async"); -+ // Folia end - region threading - if (sender instanceof Conversable) { - Conversable conversable = (Conversable) sender; - -@@ -1006,12 +1009,46 @@ public final class CraftServer implements Server { - } - } - -+ // Folia start - region threading -+ public void dispatchCmdAsync(CommandSender sender, String commandLine) { -+ if ((sender instanceof Entity entity)) { -+ ((org.bukkit.craftbukkit.entity.CraftEntity)entity).taskScheduler.schedule( -+ (nmsEntity) -> { -+ CraftServer.this.dispatchCommand(nmsEntity.getBukkitEntity(), commandLine); -+ }, -+ null, -+ 1L -+ ); -+ } else if (sender instanceof ConsoleCommandSender || sender instanceof io.papermc.paper.commands.FeedbackForwardingSender) { -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { -+ CraftServer.this.dispatchCommand(sender, commandLine); -+ }); -+ } else { -+ // huh? -+ throw new UnsupportedOperationException("Dispatching command for " + sender); -+ } -+ } -+ // Folia end - region threading -+ - @Override - public boolean dispatchCommand(CommandSender sender, String commandLine) { - Preconditions.checkArgument(sender != null, "sender cannot be null"); - Preconditions.checkArgument(commandLine != null, "commandLine cannot be null"); - org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + commandLine); // Spigot // Paper - Include command in error message - -+ // Folia start - region threading -+ if ((sender instanceof Entity entity)) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(((org.bukkit.craftbukkit.entity.CraftEntity)entity).getHandle(), "Dispatching command async"); -+ } else if (sender instanceof ConsoleCommandSender || sender instanceof net.minecraft.server.rcon.RconConsoleSource -+ || sender instanceof org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender -+ || sender instanceof io.papermc.paper.commands.FeedbackForwardingSender) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Dispatching command async"); -+ } else { -+ // huh? -+ throw new UnsupportedOperationException("Dispatching command for " + sender); -+ } -+ // Folia end - region threading -+ - if (this.commandMap.dispatch(sender, commandLine)) { - return true; - } -@@ -3252,7 +3289,7 @@ public final class CraftServer implements Server { - - @Override - public int getCurrentTick() { -- return net.minecraft.server.MinecraftServer.currentTick; -+ return (int)io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick(); // Folia - region threading - } - - @Override -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 28196931453c6c65599d33915130fdfe009f1d11..3d7dd06f4d0b612f04d0f9a627c7d8215f50d915 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -228,7 +228,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public int getTickableTileEntityCount() { -- return world.blockEntityTickers.size(); -+ throw new UnsupportedOperationException(); // Folia - region threading - TODO fix this? - } - - @Override -@@ -295,7 +295,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - // Paper start - per world spawn limits - for (SpawnCategory spawnCategory : SpawnCategory.values()) { - if (CraftSpawnCategory.isValidForLimits(spawnCategory)) { -- setSpawnLimit(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory))); -+ this.spawnCategoryLimit.put(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory))); // Folia - region threading - } - } - // Paper end - per world spawn limits -@@ -365,6 +365,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public Chunk getChunkAt(int x, int z) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.getHandle(), x, z, "Async chunk retrieval"); // Folia - region threading - warnUnsafeChunk("getting a faraway chunk", x, z); // Paper - net.minecraft.world.level.chunk.LevelChunk chunk = (net.minecraft.world.level.chunk.LevelChunk) this.world.getChunk(x, z, ChunkStatus.FULL, true); - return new CraftChunk(chunk); -@@ -395,10 +396,10 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - public boolean isChunkGenerated(int x, int z) { - // Paper start - Fix this method -- if (!Bukkit.isPrimaryThread()) { -+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.getHandle(), x, z)) { // Folia - region threading - return java.util.concurrent.CompletableFuture.supplyAsync(() -> { - return CraftWorld.this.isChunkGenerated(x, z); -- }, world.getChunkSource().mainThreadProcessor).join(); -+ }, (run) -> { io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this.getHandle(), x, z, run);}).join(); // Folia - region threading - } - ChunkAccess chunk = world.getChunkSource().getChunkAtImmediately(x, z); - if (chunk != null) { -@@ -455,7 +456,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - } - - private boolean unloadChunk0(int x, int z, boolean save) { -- org.spigotmc.AsyncCatcher.catchOp("chunk unload"); // Spigot -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot unload chunk asynchronously"); // Folia - region threading - if (!this.isChunkLoaded(x, z)) { - return true; - } -@@ -472,7 +473,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public boolean regenerateChunk(int x, int z) { -- org.spigotmc.AsyncCatcher.catchOp("chunk regenerate"); // Spigot -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot regenerate chunk asynchronously"); // Folia - region threading - throw new UnsupportedOperationException("Not supported in this Minecraft version! Unless you can fix it, this is not a bug :)"); - /* - if (!unloadChunk0(x, z, false)) { -@@ -499,6 +500,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public boolean refreshChunk(int x, int z) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot refresh chunk asynchronously"); // Folia - region threading - ChunkHolder playerChunk = this.world.getChunkSource().chunkMap.getVisibleChunkIfPresent(ChunkPos.asLong(x, z)); - if (playerChunk == null) return false; - -@@ -549,7 +551,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public boolean loadChunk(int x, int z, boolean generate) { -- org.spigotmc.AsyncCatcher.catchOp("chunk load"); // Spigot -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.getHandle(), x, z, "May not sync load chunks asynchronously"); // Folia - region threading - warnUnsafeChunk("loading a faraway chunk", x, z); // Paper - ChunkAccess chunk = this.world.getChunkSource().getChunk(x, z, generate || isChunkGenerated(x, z) ? ChunkStatus.FULL : ChunkStatus.EMPTY, true); // Paper - -@@ -589,7 +591,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - final DistanceManager distanceManager = this.world.getChunkSource().chunkMap.distanceManager; - if (distanceManager.addPluginRegionTicket(new ChunkPos(x, z), plugin)) { -- this.getChunkAt(x, z); // ensure it's loaded -+ //this.getChunkAt(x, z); // ensure it's loaded // Folia - region threading - do not load chunks for tickets anymore to make this mt-safe - return true; - } - -@@ -777,13 +779,15 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) { -- this.world.captureTreeGeneration = true; -- this.world.captureBlockStates = true; -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, loc.getX(), loc.getZ(), "Cannot generate tree asynchronously"); // Folia - region threading -+ io.papermc.paper.threadedregions.RegionizedWorldData worldData = world.getCurrentWorldData(); // Folia - region threading -+ worldData.captureTreeGeneration = true; // Folia - region threading -+ worldData.captureBlockStates = true; // Folia - region threading - boolean grownTree = this.generateTree(loc, type); -- this.world.captureBlockStates = false; -- this.world.captureTreeGeneration = false; -+ worldData.captureBlockStates = false; // Folia - region threading -+ worldData.captureTreeGeneration = false; // Folia - region threading - if (grownTree) { // Copy block data to delegate -- for (BlockState blockstate : this.world.capturedBlockStates.values()) { -+ for (BlockState blockstate : worldData.capturedBlockStates.values()) { // Folia - region threading - BlockPos position = ((CraftBlockState) blockstate).getPosition(); - net.minecraft.world.level.block.state.BlockState oldBlock = this.world.getBlockState(position); - int flag = ((CraftBlockState) blockstate).getFlag(); -@@ -791,10 +795,10 @@ public class CraftWorld extends CraftRegionAccessor implements World { - net.minecraft.world.level.block.state.BlockState newBlock = this.world.getBlockState(position); - this.world.notifyAndUpdatePhysics(position, null, oldBlock, newBlock, newBlock, flag, 512); - } -- this.world.capturedBlockStates.clear(); -+ worldData.capturedBlockStates.clear(); // Folia - region threading - return true; - } else { -- this.world.capturedBlockStates.clear(); -+ worldData.capturedBlockStates.clear(); // Folia - region threading - return false; - } - } -@@ -828,6 +832,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setTime(long time) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify time off of the global region"); // Folia - region threading - long margin = (time - this.getFullTime()) % 24000; - if (margin < 0) margin += 24000; - this.setFullTime(this.getFullTime() + margin); -@@ -840,6 +845,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setFullTime(long time) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify time off of the global region"); // Folia - region threading - // Notify anyone who's listening - TimeSkipEvent event = new TimeSkipEvent(this, TimeSkipEvent.SkipReason.CUSTOM, time - this.world.getDayTime()); - this.server.getPluginManager().callEvent(event); -@@ -867,7 +873,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public long getGameTime() { -- return this.world.levelData.getGameTime(); -+ return this.getHandle().getGameTime(); // Folia - region threading - } - - @Override -@@ -892,6 +898,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - } - public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks, Entity source, Consumer configurator) { - // Paper end - expand explosion API -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot create explosion asynchronously"); // Folia - region threading - net.minecraft.world.level.Level.ExplosionInteraction explosionType; - if (!breakBlocks) { - explosionType = net.minecraft.world.level.Level.ExplosionInteraction.NONE; // Don't break blocks -@@ -901,6 +908,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - explosionType = net.minecraft.world.level.Level.ExplosionInteraction.MOB; // Respect mobGriefing gamerule - } - -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot create explosion asynchronously"); // Folia - region threading - net.minecraft.world.entity.Entity entity = (source == null) ? null : ((CraftEntity) source).getHandle(); - return !this.world.explode0(entity, Explosion.getDefaultDamageSource(this.world, entity), null, x, y, z, power, setFire, explosionType, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE, configurator).wasCanceled; // Paper - expand explosion API - } -@@ -983,6 +991,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public int getHighestBlockYAt(int x, int z, org.bukkit.HeightMap heightMap) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x >> 4, z >> 4, "Cannot retrieve chunk asynchronously"); // Folia - region threading - warnUnsafeChunk("getting a faraway chunk", x >> 4, z >> 4); // Paper - // Transient load for this tick - return this.world.getChunk(x >> 4, z >> 4).getHeight(CraftHeightMap.toNMS(heightMap), x, z); -@@ -1013,6 +1022,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - public void setBiome(int x, int y, int z, Holder bb) { - BlockPos pos = new BlockPos(x, 0, z); -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, pos, "Cannot retrieve chunk asynchronously"); // Folia - region threading - if (this.world.hasChunkAt(pos)) { - net.minecraft.world.level.chunk.LevelChunk chunk = this.world.getChunkAt(pos); - -@@ -1323,6 +1333,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setStorm(boolean hasStorm) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading - this.world.serverLevelData.setRaining(hasStorm, org.bukkit.event.weather.WeatherChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents - this.setWeatherDuration(0); // Reset weather duration (legacy behaviour) - this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands) -@@ -1335,6 +1346,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setWeatherDuration(int duration) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading - this.world.serverLevelData.setRainTime(duration); - } - -@@ -1345,6 +1357,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setThundering(boolean thundering) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading - this.world.serverLevelData.setThundering(thundering, org.bukkit.event.weather.ThunderChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents - this.setThunderDuration(0); // Reset weather duration (legacy behaviour) - this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands) -@@ -1357,6 +1370,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setThunderDuration(int duration) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading - this.world.serverLevelData.setThunderTime(duration); - } - -@@ -1367,6 +1381,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setClearWeatherDuration(int duration) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading - this.world.serverLevelData.setClearWeatherTime(duration); - } - -@@ -1565,6 +1580,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setKeepSpawnInMemory(boolean keepLoaded) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify keep spawn in memory off of the global region"); // Folia - region threading - if (keepLoaded) { - this.setGameRule(GameRule.SPAWN_CHUNK_RADIUS, this.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); - } else { -@@ -1633,6 +1649,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setHardcore(boolean hardcore) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.world.serverLevelData.settings.hardcore = hardcore; - } - -@@ -1645,6 +1662,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setTicksPerSpawns(SpawnCategory.ANIMAL, ticksPerAnimalSpawns); - } - -@@ -1657,6 +1675,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setTicksPerSpawns(SpawnCategory.MONSTER, ticksPerMonsterSpawns); - } - -@@ -1669,6 +1688,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setTicksPerWaterSpawns(int ticksPerWaterSpawns) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setTicksPerSpawns(SpawnCategory.WATER_ANIMAL, ticksPerWaterSpawns); - } - -@@ -1681,6 +1701,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setTicksPerWaterAmbientSpawns(int ticksPerWaterAmbientSpawns) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setTicksPerSpawns(SpawnCategory.WATER_AMBIENT, ticksPerWaterAmbientSpawns); - } - -@@ -1693,6 +1714,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setTicksPerWaterUndergroundCreatureSpawns(int ticksPerWaterUndergroundCreatureSpawns) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setTicksPerSpawns(SpawnCategory.WATER_UNDERGROUND_CREATURE, ticksPerWaterUndergroundCreatureSpawns); - } - -@@ -1705,11 +1727,13 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setTicksPerAmbientSpawns(int ticksPerAmbientSpawns) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setTicksPerSpawns(SpawnCategory.AMBIENT, ticksPerAmbientSpawns); - } - - @Override - public void setTicksPerSpawns(SpawnCategory spawnCategory, int ticksPerCategorySpawn) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null"); - Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory); - -@@ -1726,21 +1750,25 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify metadata off of the global region"); // Folia - region threading - this.server.getWorldMetadata().setMetadata(this, metadataKey, newMetadataValue); - } - - @Override - public List getMetadata(String metadataKey) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot retrieve metadata off of the global region"); // Folia - region threading - return this.server.getWorldMetadata().getMetadata(this, metadataKey); - } - - @Override - public boolean hasMetadata(String metadataKey) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot retrieve metadata off of the global region"); // Folia - region threading - return this.server.getWorldMetadata().hasMetadata(this, metadataKey); - } - - @Override - public void removeMetadata(String metadataKey, Plugin owningPlugin) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify metadata off of the global region"); // Folia - region threading - this.server.getWorldMetadata().removeMetadata(this, metadataKey, owningPlugin); - } - -@@ -1753,6 +1781,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setMonsterSpawnLimit(int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setSpawnLimit(SpawnCategory.MONSTER, limit); - } - -@@ -1765,6 +1794,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setAnimalSpawnLimit(int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setSpawnLimit(SpawnCategory.ANIMAL, limit); - } - -@@ -1777,6 +1807,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setWaterAnimalSpawnLimit(int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setSpawnLimit(SpawnCategory.WATER_ANIMAL, limit); - } - -@@ -1789,6 +1820,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setWaterAmbientSpawnLimit(int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setSpawnLimit(SpawnCategory.WATER_AMBIENT, limit); - } - -@@ -1801,6 +1833,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setWaterUndergroundCreatureSpawnLimit(int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setSpawnLimit(SpawnCategory.WATER_UNDERGROUND_CREATURE, limit); - } - -@@ -1813,6 +1846,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - @Override - @Deprecated - public void setAmbientSpawnLimit(int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - this.setSpawnLimit(SpawnCategory.AMBIENT, limit); - } - -@@ -1835,6 +1869,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void setSpawnLimit(SpawnCategory spawnCategory, int limit) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null"); - Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory); - -@@ -1917,7 +1952,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return; - - ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(CraftSound.bukkitToMinecraftHolder(sound), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed); -- ChunkMap.TrackedEntity entityTracker = this.getHandle().getChunkSource().chunkMap.entityMap.get(entity.getEntityId()); -+ ChunkMap.TrackedEntity entityTracker = ((CraftEntity) entity).getHandle().moonrise$getTrackedEntity(); // Folia - region threading - if (entityTracker != null) { - entityTracker.broadcastAndSend(packet); - } -@@ -1938,7 +1973,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return; - - ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(Holder.direct(SoundEvent.createVariableRangeEvent(ResourceLocation.parse(sound))), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed); -- ChunkMap.TrackedEntity entityTracker = this.getHandle().getChunkSource().chunkMap.entityMap.get(entity.getEntityId()); -+ ChunkMap.TrackedEntity entityTracker = ((CraftEntity)entity).getHandle().moonrise$getTrackedEntity(); // Folia - region threading - if (entityTracker != null) { - entityTracker.broadcastAndSend(packet); - } -@@ -2021,6 +2056,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public boolean setGameRuleValue(String rule, String value) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - // No null values allowed - if (rule == null || value == null) return false; - -@@ -2063,6 +2099,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public boolean setGameRule(GameRule rule, T newValue) { -+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading - Preconditions.checkArgument(rule != null, "GameRule cannot be null"); - Preconditions.checkArgument(newValue != null, "GameRule value cannot be null"); - -@@ -2290,6 +2327,12 @@ public class CraftWorld extends CraftRegionAccessor implements World { - - @Override - public void sendGameEvent(Entity sourceEntity, org.bukkit.GameEvent gameEvent, Vector position) { -+ // Folia start - region threading -+ if (sourceEntity != null && !Bukkit.isOwnedByCurrentRegion(sourceEntity)) { -+ throw new IllegalStateException("Cannot send game event asynchronously"); -+ } -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, position.getX(), position.getZ(), "Cannot send game event asynchronously"); -+ // Folia end - region threading - getHandle().gameEvent(sourceEntity != null ? ((CraftEntity) sourceEntity).getHandle(): null, net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT.get(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(gameEvent.getKey())).orElseThrow(), org.bukkit.craftbukkit.util.CraftVector.toBlockPos(position)); - } - // Paper end -diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -index 5cb69d0b822e11a99a96aef4f59986d083b079f4..a2f35f6d057b098a016a40094d84c54cb5e174fd 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java -@@ -75,6 +75,11 @@ public class CraftBlock implements Block { - } - - public net.minecraft.world.level.block.state.BlockState getNMS() { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - return this.world.getBlockState(this.position); - } - -@@ -157,6 +162,11 @@ public class CraftBlock implements Block { - } - - private void setData(final byte data, int flag) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - this.world.setBlock(this.position, CraftMagicNumbers.getBlock(this.getType(), data), flag); - } - -@@ -198,6 +208,11 @@ public class CraftBlock implements Block { - } - - public static boolean setTypeAndData(LevelAccessor world, BlockPos position, net.minecraft.world.level.block.state.BlockState old, net.minecraft.world.level.block.state.BlockState blockData, boolean applyPhysics) { -+ // Folia start - region threading -+ if (world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, position, "Cannot modify world asynchronously"); -+ } -+ // Folia end - region threading - // SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in tile entity cleanup - if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes - // SPIGOT-4612: faster - just clear tile -@@ -343,18 +358,33 @@ public class CraftBlock implements Block { - - @Override - public Biome getBiome() { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - return this.getWorld().getBiome(this.getX(), this.getY(), this.getZ()); - } - - // Paper start - @Override - public Biome getComputedBiome() { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - return this.getWorld().getComputedBiome(this.getX(), this.getY(), this.getZ()); - } - // Paper end - - @Override - public void setBiome(Biome bio) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - this.getWorld().setBiome(this.getX(), this.getY(), this.getZ(), bio); - } - -@@ -402,6 +432,11 @@ public class CraftBlock implements Block { - - @Override - public boolean isBlockFaceIndirectlyPowered(BlockFace face) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - int power = this.world.getMinecraftWorld().getSignal(this.position, CraftBlock.blockFaceToNotch(face)); - - Block relative = this.getRelative(face); -@@ -414,6 +449,11 @@ public class CraftBlock implements Block { - - @Override - public int getBlockPower(BlockFace face) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - int power = 0; - net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); - int x = this.getX(); -@@ -500,6 +540,11 @@ public class CraftBlock implements Block { - - @Override - public boolean breakNaturally(ItemStack item, boolean triggerEffect, boolean dropExperience) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - // Paper end - // Order matters here, need to drop before setting to air so skulls can get their data - net.minecraft.world.level.block.state.BlockState iblockdata = this.getNMS(); -@@ -543,21 +588,27 @@ public class CraftBlock implements Block { - - @Override - public boolean applyBoneMeal(BlockFace face) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - Direction direction = CraftBlock.blockFaceToNotch(face); - BlockFertilizeEvent event = null; - ServerLevel world = this.getCraftWorld().getHandle(); - UseOnContext context = new UseOnContext(world, null, InteractionHand.MAIN_HAND, Items.BONE_MEAL.getDefaultInstance(), new BlockHitResult(Vec3.ZERO, direction, this.getPosition(), false)); - -+ io.papermc.paper.threadedregions.RegionizedWorldData worldData = world.getCurrentWorldData(); // Folia - region threading - // SPIGOT-6895: Call StructureGrowEvent and BlockFertilizeEvent -- world.captureTreeGeneration = true; -+ worldData.captureTreeGeneration = true; // Folia - region threading - InteractionResult result = BoneMealItem.applyBonemeal(context); -- world.captureTreeGeneration = false; -+ worldData.captureTreeGeneration = false; // Folia - region threading - -- if (world.capturedBlockStates.size() > 0) { -- TreeType treeType = SaplingBlock.treeType; -- SaplingBlock.treeType = null; -- List blocks = new ArrayList<>(world.capturedBlockStates.values()); -- world.capturedBlockStates.clear(); -+ if (worldData.capturedBlockStates.size() > 0) { // Folia - region threading -+ TreeType treeType = SaplingBlock.treeTypeRT.get(); // Folia - region threading -+ SaplingBlock.treeTypeRT.set(null); // Folia - region threading -+ List blocks = new ArrayList<>(worldData.capturedBlockStates.values()); // Folia - region threading -+ worldData.capturedBlockStates.clear(); // Folia - region threading - StructureGrowEvent structureEvent = null; - - if (treeType != null) { -@@ -644,6 +695,11 @@ public class CraftBlock implements Block { - - @Override - public RayTraceResult rayTrace(Location start, Vector direction, double maxDistance, FluidCollisionMode fluidCollisionMode) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - Preconditions.checkArgument(start != null, "Location start cannot be null"); - Preconditions.checkArgument(this.getWorld().equals(start.getWorld()), "Location start cannot be a different world"); - start.checkFinite(); -@@ -685,6 +741,11 @@ public class CraftBlock implements Block { - - @Override - public boolean canPlace(BlockData data) { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - Preconditions.checkArgument(data != null, "BlockData cannot be null"); - net.minecraft.world.level.block.state.BlockState iblockdata = ((CraftBlockData) data).getState(); - net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); -@@ -719,18 +780,32 @@ public class CraftBlock implements Block { - - @Override - public void tick() { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - final ServerLevel level = this.world.getMinecraftWorld(); - this.getNMS().tick(level, this.position, level.random); - } - -- - @Override - public void fluidTick() { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - this.getNMSFluid().tick(this.world.getMinecraftWorld(), this.position, this.getNMS()); - } - - @Override - public void randomTick() { -+ // Folia start - region threading -+ if (this.world instanceof ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); -+ } -+ // Folia end - region threading - final ServerLevel level = this.world.getMinecraftWorld(); - this.getNMS().randomTick(level, this.position, level.random); - } -diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java -index 04ae258a2f8e98421340d29d5cceedec045171b7..698a87ac30cc9efabeef3344ee254bcace1256c9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java -@@ -25,7 +25,7 @@ public abstract class CraftBlockEntityState extends Craft - private final T tileEntity; - private final T snapshot; - public boolean snapshotDisabled; // Paper -- public static boolean DISABLE_SNAPSHOT = false; // Paper -+ public static final ThreadLocal DISABLE_SNAPSHOT = ThreadLocal.withInitial(() -> Boolean.FALSE); // Paper // Folia - region threading - - public CraftBlockEntityState(World world, T tileEntity) { - super(world, tileEntity.getBlockPos(), tileEntity.getBlockState()); -@@ -34,8 +34,8 @@ public abstract class CraftBlockEntityState extends Craft - - try { // Paper - Show blockstate location if we failed to read it - // Paper start -- this.snapshotDisabled = DISABLE_SNAPSHOT; -- if (DISABLE_SNAPSHOT) { -+ this.snapshotDisabled = DISABLE_SNAPSHOT.get().booleanValue(); // Folia - region threading -+ if (this.snapshotDisabled) { // Folia - region threading - this.snapshot = this.tileEntity; - } else { - this.snapshot = this.createSnapshot(tileEntity); -diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java -index fa63a6cfcfcc4eee4503a82d85333c139c8c8b2b..def7749e6dc4ae8351b72deefc75936629c33d7f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java -@@ -215,6 +215,12 @@ public class CraftBlockState implements BlockState { - LevelAccessor access = this.getWorldHandle(); - CraftBlock block = this.getBlock(); - -+ // Folia start - region threading -+ if (access instanceof net.minecraft.server.level.ServerLevel serverWorld) { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, position, "Cannot modify world asynchronously"); -+ } -+ // Folia end - region threading -+ - if (block.getType() != this.getType()) { - if (!force) { - return false; -@@ -350,6 +356,9 @@ public class CraftBlockState implements BlockState { - - @Override - public java.util.Collection getDrops(org.bukkit.inventory.ItemStack item, org.bukkit.entity.Entity entity) { -+ // Folia start - region threading -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(world.getHandle(), position, "Cannot modify world asynchronously"); -+ // Folia end - region threading - this.requirePlaced(); - net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item); - -diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java -index 56453454cbd4b9e9270fc833f8ab38d5fa7a3763..69e8a170a80c2fde79bc015cd54879896c110d9d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java -+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java -@@ -249,8 +249,8 @@ public final class CraftBlockStates { - net.minecraft.world.level.block.state.BlockState blockData = craftBlock.getNMS(); - BlockEntity tileEntity = craftBlock.getHandle().getBlockEntity(blockPosition); - // Paper start - block state snapshots -- boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT; -- CraftBlockEntityState.DISABLE_SNAPSHOT = !useSnapshot; -+ boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT.get().booleanValue(); // Folia - region threading -+ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(!useSnapshot)); // Folia - region threading - try { - // Paper end - CraftBlockState blockState = CraftBlockStates.getBlockState(world, blockPosition, blockData, tileEntity); -@@ -258,7 +258,7 @@ public final class CraftBlockStates { - return blockState; - // Paper start - } finally { -- CraftBlockEntityState.DISABLE_SNAPSHOT = prev; -+ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(prev)); // Folia - region threading - } - // Paper end - } -diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java -index a45e658996e483e9a21cfd8178153ddb7b87ae69..25303f144422469350fdc6f84320b16bcc9f6e0c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java -+++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java -@@ -50,7 +50,7 @@ public class ConsoleCommandCompleter implements Completer { - return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of(); - } - }; -- server.getServer().processQueue.add(syncCompletions); -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(syncCompletions); // Folia - region threading - try { - final List legacyCompletions = syncCompletions.get(); - completions.removeIf(it -> !legacyCompletions.contains(it.suggestion())); // remove any suggestions that were removed -@@ -98,7 +98,7 @@ public class ConsoleCommandCompleter implements Completer { - return tabEvent.isCancelled() ? Collections.EMPTY_LIST : tabEvent.getCompletions(); - } - }; -- server.getServer().processQueue.add(waitable); // Paper - Remove "this." -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(waitable); // Folia - region threading - try { - List offers = waitable.get(); - if (offers == null) { -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 4562bee2e2795801862bae03d783799fc076b73e..e0ed7e9501bcf95c9bf7480f766738ed694295b0 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -82,6 +82,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - return this.apiScheduler; - }; - // Paper end - Folia schedulers -+ // Folia start - region threading -+ public boolean isPurged() { -+ return this.taskScheduler.isRetired(); -+ } -+ // Folia end - region threading - - public CraftEntity(final CraftServer server, final Entity entity) { - this.server = server; -@@ -239,6 +244,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - - @Override - public boolean teleport(Location location, TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { -+ // Folia start - region threading -+ if (true) { -+ throw new UnsupportedOperationException("Must use teleportAsync while in region threading"); -+ } -+ // Folia end - region threading - // Paper end - Preconditions.checkArgument(location != null, "location cannot be null"); - location.checkFinite(); -@@ -722,7 +732,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - ImmutableSet.Builder players = ImmutableSet.builder(); - - ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); -- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); -+ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading - - if (entityTracker != null) { - for (ServerPlayerConnection connection : entityTracker.seenBy) { -@@ -1026,7 +1036,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - } - - ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); -- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); -+ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading - - if (entityTracker == null) { - return; -@@ -1045,7 +1055,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - } - - ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); -- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); -+ ChunkMap.TrackedEntity entityTracker = this.entity.moonrise$getTrackedEntity(); // Folia - region threading - - if (entityTracker == null) { - return; -@@ -1079,29 +1089,43 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - location.checkFinite(); - Location locationClone = location.clone(); // clone so we don't need to worry about mutations after this call. - -- net.minecraft.server.level.ServerLevel world = ((CraftWorld)locationClone.getWorld()).getHandle(); -+ // Folia start - region threading - java.util.concurrent.CompletableFuture ret = new java.util.concurrent.CompletableFuture<>(); -- -- world.loadChunksForMoveAsync(getHandle().getBoundingBoxAt(locationClone.getX(), locationClone.getY(), locationClone.getZ()), -- this instanceof CraftPlayer ? ca.spottedleaf.concurrentutil.util.Priority.HIGHER : ca.spottedleaf.concurrentutil.util.Priority.NORMAL, (list) -> { -- net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> { -- final net.minecraft.server.level.ServerChunkCache chunkCache = world.getChunkSource(); -- for (final net.minecraft.world.level.chunk.ChunkAccess chunk : list) { -- chunkCache.addTicketAtLevel(net.minecraft.server.level.TicketType.POST_TELEPORT, chunk.getPos(), 33, CraftEntity.this.getEntityId()); -- } -- try { -- ret.complete(CraftEntity.this.teleport(locationClone, cause, teleportFlags) ? Boolean.TRUE : Boolean.FALSE); -- } catch (Throwable throwable) { -- if (throwable instanceof ThreadDeath) { -- throw (ThreadDeath)throwable; -- } -- net.minecraft.server.MinecraftServer.LOGGER.error("Failed to teleport entity " + CraftEntity.this, throwable); -- ret.completeExceptionally(throwable); -- } -- }); -- }); -+ java.util.function.Consumer run = (Entity nmsEntity) -> { -+ boolean success = nmsEntity.teleportAsync( -+ ((CraftWorld)locationClone.getWorld()).getHandle(), -+ new net.minecraft.world.phys.Vec3(locationClone.getX(), locationClone.getY(), locationClone.getZ()), -+ locationClone.getYaw(), locationClone.getPitch(), net.minecraft.world.phys.Vec3.ZERO, -+ cause == null ? TeleportCause.UNKNOWN : cause, -+ Entity.TELEPORT_FLAG_LOAD_CHUNK | Entity.TELEPORT_FLAG_TELEPORT_PASSENGERS, // preserve behavior with old API: dismount the entity so it can teleport -+ (Entity entityTp) -> { -+ ret.complete(Boolean.TRUE); -+ } -+ ); -+ if (!success) { -+ ret.complete(Boolean.FALSE); -+ } -+ }; -+ if (org.bukkit.Bukkit.isOwnedByCurrentRegion(this)) { -+ run.accept(this.getHandle()); -+ return ret; -+ } -+ boolean scheduled = this.taskScheduler.schedule( -+ // success -+ run, -+ // retired -+ (Entity nmsEntity) -> { -+ ret.complete(Boolean.FALSE); -+ }, -+ 1L -+ ); -+ -+ if (!scheduled) { -+ ret.complete(Boolean.FALSE); -+ } - - return ret; -+ // Folia end - region threading - } - // Paper end - more teleport API / async chunk API - -@@ -1214,8 +1238,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - // Paper start - tracked players API - @Override - public Set getTrackedPlayers() { -- ServerLevel world = (net.minecraft.server.level.ServerLevel)this.entity.level(); -- ChunkMap.TrackedEntity tracker = world == null ? null : world.getChunkSource().chunkMap.entityMap.get(this.entity.getId()); -+ ChunkMap.TrackedEntity tracker = this.entity.moonrise$getTrackedEntity(); // Folia - region threading - if (tracker == null) { - return java.util.Collections.emptySet(); - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 98fc89cc7a715d35b62e13f8ecbe56c05605ca64..89633d88be288e8caba846c49c6267e45fcadc06 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -666,7 +666,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - - @Override - public void kickPlayer(String message) { -- org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot -+ //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot // Folia - thread-safe now, as it will simply delay the kick - this.getHandle().transferCookieConnection.kickPlayer(CraftChatMessage.fromStringOrEmpty(message, true), org.bukkit.event.player.PlayerKickEvent.Cause.PLUGIN); // Paper - kick event cause - } - -@@ -1403,6 +1403,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - - @Override - public boolean teleport(Location location, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { -+ // Folia start - region threading -+ if (true) { -+ throw new UnsupportedOperationException("Must use teleportAsync while in region threading"); -+ } -+ // Folia end - region threading - Set relativeArguments; - Set allFlags; - if (flags.length == 0) { -@@ -2067,7 +2072,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - private void unregisterEntity(Entity other) { - // Paper end - ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap; -- ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); -+ ChunkMap.TrackedEntity entry = other.moonrise$getTrackedEntity(); // Folia - region threading - if (entry != null) { - entry.removePlayer(this.getHandle()); - } -@@ -2164,7 +2169,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - if (original != null) otherPlayer.setUUID(original); // Paper - uuid override - } - -- ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); -+ ChunkMap.TrackedEntity entry = other.moonrise$getTrackedEntity(); // Folia - region threading - if (entry != null && !entry.seenBy.contains(this.getHandle().connection)) { - entry.updatePlayer(this.getHandle()); - } -@@ -3345,7 +3350,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - { - if ( CraftPlayer.this.getHealth() <= 0 && CraftPlayer.this.isOnline() ) - { -- CraftPlayer.this.server.getServer().getPlayerList().respawn( CraftPlayer.this.getHandle(), false, Entity.RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.PLUGIN ); -+ CraftPlayer.this.getHandle().respawn(null, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.PLUGIN); // Folia - region threading - } - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index e37aaf77f94b97b736cc20ef070cefdff0400188..ebbe224d81f6a96f3b05e3379cd0c5b5ab50fcbd 100644 ---- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -951,7 +951,7 @@ public class CraftEventFactory { - return CraftEventFactory.handleBlockSpreadEvent(world, source, target, block, 2); - } - -- public static BlockPos sourceBlockOverride = null; // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep. -+ public static final ThreadLocal sourceBlockOverrideRT = new ThreadLocal<>(); // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep. // Folia - region threading - - public static boolean handleBlockSpreadEvent(LevelAccessor world, BlockPos source, BlockPos target, net.minecraft.world.level.block.state.BlockState block, int flag) { - // Suppress during worldgen -@@ -963,7 +963,7 @@ public class CraftEventFactory { - CraftBlockState state = CraftBlockStates.getBlockState(world, target, flag); - state.setData(block); - -- BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverride != null ? CraftEventFactory.sourceBlockOverride : source), state); -+ BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverrideRT.get() != null ? CraftEventFactory.sourceBlockOverrideRT.get() : source), state); // Folia - region threading - Bukkit.getPluginManager().callEvent(event); - - if (!event.isCancelled()) { -@@ -2229,7 +2229,7 @@ public class CraftEventFactory { - CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemStack.copyWithCount(1)); - - org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(bukkitBlock, craftItem.clone(), CraftVector.toBukkit(to)); -- if (!net.minecraft.world.level.block.DispenserBlock.eventFired) { -+ if (!net.minecraft.world.level.block.DispenserBlock.eventFired.get().booleanValue()) { // Folia - region threading - if (!event.callEvent()) { - return itemStack; - } -diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 1354ccfbf525e5e64483ac5f443cc2325ba63850..fad85bea8643a3a88ec5c4194de7a5060e81c136 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -@@ -514,6 +514,7 @@ public class CraftScheduler implements BukkitScheduler { - } - - protected CraftTask handle(final CraftTask task, final long delay) { // Paper -+ if (true) throw new UnsupportedOperationException(); // Folia - region threading - // Paper start - if (!this.isAsyncScheduler && !task.isSync()) { - this.asyncScheduler.handle(task, delay); -diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 32750451421fc559e9be1d98e6e328ede0049263..53817969cce8eed9e821c38a8b932f14dbb7ba8b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -384,6 +384,12 @@ public final class CraftMagicNumbers implements UnsafeValues { - throw new InvalidPluginException("Unsupported API version " + pdf.getAPIVersion()); - } - -+ // Folia start - block plugins not marked as supported -+ if (!pdf.isFoliaSupported()) { -+ throw new InvalidPluginException("Plugin " + pdf.getFullName() + " is not marked as supporting regionised multithreading"); -+ } -+ // Folia end - block plugins not marked as supported -+ - if (toCheck.isOlderThan(minimumVersion)) { - // Older than supported - throw new InvalidPluginException("Plugin API version " + pdf.getAPIVersion() + " is lower than the minimum allowed version. Please update or replace it."); -diff --git a/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java b/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java -index 09e87552159e24603aa9a4f658ab4449d7eaeb0a..698c8b061649fa84761f278ff7a2e9c88bb5fb87 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java -@@ -66,6 +66,13 @@ public abstract class DelegatedGeneratorAccess implements WorldGenLevel { - this.handle = worldAccess; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.level.StructureManager structureManager() { -+ return this.handle.structureManager(); -+ } -+ // Folia end - region threading -+ - public WorldGenLevel getHandle() { - return this.handle; - } -diff --git a/src/main/java/org/spigotmc/SpigotCommand.java b/src/main/java/org/spigotmc/SpigotCommand.java -index 1b60abf5f5951288f6d54f522621472673eada6e..4ea06cb7a9e9db0d7feb0981de90015320c092d4 100644 ---- a/src/main/java/org/spigotmc/SpigotCommand.java -+++ b/src/main/java/org/spigotmc/SpigotCommand.java -@@ -35,6 +35,7 @@ public class SpigotCommand extends Command { - .build() - ); - -+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading - MinecraftServer console = MinecraftServer.getServer(); - org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); - for (ServerLevel world : console.getAllLevels()) { -@@ -43,6 +44,7 @@ public class SpigotCommand extends Command { - console.server.reloadCount++; - - Command.broadcastCommandMessage(sender, text("Reload complete.", NamedTextColor.GREEN)); -+ }); // Folia - region threading - } - - return true; -diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java -index e0d4222a99f22d7130d95cf29b034a98f2f3b76e..48432a7c9df33bae8aa72991843ed61545c64814 100644 ---- a/src/main/java/org/spigotmc/SpigotConfig.java -+++ b/src/main/java/org/spigotmc/SpigotConfig.java -@@ -182,7 +182,7 @@ public class SpigotConfig { - SpigotConfig.restartOnCrash = SpigotConfig.getBoolean("settings.restart-on-crash", SpigotConfig.restartOnCrash); - SpigotConfig.restartScript = SpigotConfig.getString("settings.restart-script", SpigotConfig.restartScript); - SpigotConfig.restartMessage = SpigotConfig.transform(SpigotConfig.getString("messages.restart", "Server is restarting")); -- SpigotConfig.commands.put("restart", new RestartCommand("restart")); -+ //SpigotConfig.commands.put("restart", new RestartCommand("restart")); // Folia - region threading - } - - public static boolean bungee; -@@ -228,7 +228,7 @@ public class SpigotConfig { - } - - private static void tpsCommand() { -- SpigotConfig.commands.put("tps", new TicksPerSecondCommand("tps")); -+ //SpigotConfig.commands.put("tps", new TicksPerSecondCommand("tps")); // Folia - region threading - } - - public static int playerSample; -diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java -index 89e2adbc1e1a0709d03e151e3ffcdbff10a44098..3476d639141c15ddb96fe0da1f11569e1e4b5bec 100644 ---- a/src/main/java/org/spigotmc/SpigotWorldConfig.java -+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java -@@ -401,7 +401,7 @@ public class SpigotWorldConfig { - this.otherMultiplier = (float) this.getDouble("hunger.other-multiplier", 0.0); - } - -- public int currentPrimedTnt = 0; -+ //public int currentPrimedTnt = 0; // Folia - region threading - moved to regionised world data - public int maxTntTicksPerTick; - private void maxTntPerTick() { - if (SpigotConfig.version < 7) { diff --git a/folia-server/paper-patches/features/0004-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch b/folia-server/paper-patches/features/0004-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch deleted file mode 100644 index 5e7304c..0000000 --- a/folia-server/paper-patches/features/0004-Make-CraftEntity-getHandle-and-overrides-perform-thr.patch +++ /dev/null @@ -1,3306 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Sun, 19 Mar 2023 14:35:46 -0700 -Subject: [PATCH] Make CraftEntity#getHandle and overrides perform thread - checks - -While these checks are painful, it should assist in debugging -threading issues for plugins. - -diff --git a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java -index 41bf71d116ffc5431586ce54abba7f8def6c1dcf..1cf9a7677449ab8f03fb23d835e3fadce61542db 100644 ---- a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java -+++ b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java -@@ -11,8 +11,16 @@ public class PaperSchoolableFish extends CraftFish implements SchoolableFish { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractSchoolingFish getHandleRaw() { -+ return (AbstractSchoolingFish)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractSchoolingFish getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractSchoolingFish) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java -index e8d82054d17ef1859eb57f3871043b3fe3de22b9..6fae4697512e6e1ded15938d4cdce93e7e2eef39 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java -@@ -1,5 +1,6 @@ - package org.bukkit.craftbukkit.entity; - -+import net.minecraft.world.entity.Entity; - import org.bukkit.craftbukkit.CraftServer; - import org.bukkit.entity.Projectile; - -@@ -38,6 +39,13 @@ public abstract class AbstractProjectile extends CraftEntity implements Projecti - this.getHandle().hasBeenShot = beenShot; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.Projectile getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.Projectile)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public boolean canHitEntity(org.bukkit.entity.Entity entity) { - return this.getHandle().canHitEntityPublic(((CraftEntity) entity).getHandle()); -@@ -55,6 +63,7 @@ public abstract class AbstractProjectile extends CraftEntity implements Projecti - - @Override - public net.minecraft.world.entity.projectile.Projectile getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.Projectile) entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java -index af2c1ad8cd878f0048f326699ac4462b86e7a4be..866456bda1bebb75ee4be77466d02f951060b693 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java -@@ -133,6 +133,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr - - @Override - public net.minecraft.world.entity.projectile.AbstractArrow getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.AbstractArrow) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java -index 467693a60786688b753cebac3b0a88898e332eee..5c6bd9186e47d1414c5e7bd4fa46a8e305390908 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java -@@ -17,8 +17,16 @@ public abstract class CraftAbstractHorse extends CraftAnimals implements Abstrac - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.horse.AbstractHorse getHandleRaw() { -+ return (net.minecraft.world.entity.animal.horse.AbstractHorse)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.horse.AbstractHorse getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.horse.AbstractHorse) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java -index 5beaa2bb0d58fe477ce8d2de8b77600d3b416d8c..c8406f2d83f4c8b60efec0de546f45760c759a2a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java -@@ -15,8 +15,17 @@ public abstract class CraftAbstractSkeleton extends CraftMonster implements Abst - throw new UnsupportedOperationException("Not supported."); - } - // Paper start -+ -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.AbstractSkeleton getHandleRaw() { -+ return (net.minecraft.world.entity.monster.AbstractSkeleton)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.AbstractSkeleton getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.AbstractSkeleton) super.getHandle(); - } - // Paper end -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java -index 3199f04d00836a0a51547c679f3f3c80d00da502..a1959919109fe04d4b829dcd2d244842ab05fe13 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java -@@ -15,8 +15,16 @@ public class CraftAbstractVillager extends CraftAgeable implements CraftMerchant - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.npc.AbstractVillager getHandleRaw() { -+ return (net.minecraft.world.entity.npc.AbstractVillager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.npc.AbstractVillager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Villager) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java -index 59df9031e8b4466c8687671d745318e7ee83d271..b91b11c2e1ed5df27e6ff99eb5cc25b931e0b79d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java -@@ -17,6 +17,7 @@ public abstract class CraftAbstractWindCharge extends CraftFireball implements A - - @Override - public net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java -index ae16e8d1bfe8e9315391510eddb367a3fbdc9e03..2b165c209f65de06f55ed51817e33b92463a2987 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java -@@ -63,8 +63,16 @@ public class CraftAgeable extends CraftCreature implements Ageable { - } - } - -+ // Folia start - region threading -+ @Override -+ public AgeableMob getHandleRaw() { -+ return (AgeableMob)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AgeableMob getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AgeableMob) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java -index c64918175ec08d20cde2bda9e0cac8b474385fe0..0df0824d56d62f7b82fcca8f0b9a6175f012e8d3 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java -@@ -16,8 +16,16 @@ public class CraftAllay extends CraftCreature implements org.bukkit.entity.Allay - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Allay getHandleRaw() { -+ return (Allay)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Allay getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Allay) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java -index 2a2f9f0907eafcabef26a41d20f64a0aa953d181..9d56293083aac5c14e8333366fd4cf6148486585 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java -@@ -9,8 +9,16 @@ public class CraftAmbient extends CraftMob implements Ambient { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AmbientCreature getHandleRaw() { -+ return (AmbientCreature)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AmbientCreature getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AmbientCreature) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java -index ab42bc721d5b6c17c2ca6c7153b757571aea05e8..e48528689d49c01aa2b0c1599c66f3c1e94c9cd6 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java -@@ -15,8 +15,16 @@ public class CraftAnimals extends CraftAgeable implements Animals { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Animal getHandleRaw() { -+ return (Animal)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Animal getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Animal) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java -index f9c113dc018702159345240d6d0de85767afa0c3..0872943dc4e5895728d12289cb23682c9bef290c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java -@@ -28,8 +28,16 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.AreaEffectCloud getHandleRaw() { -+ return (net.minecraft.world.entity.AreaEffectCloud)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.AreaEffectCloud getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.AreaEffectCloud) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java -index e7f2d8de25a489d7f52c78c750e6f7f9b8fee177..75191dd32bba12b5742702a2af151b1079a6b48f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java -@@ -11,6 +11,7 @@ public class CraftArmadillo extends CraftAnimals implements Armadillo { - - @Override - public net.minecraft.world.entity.animal.armadillo.Armadillo getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.armadillo.Armadillo) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java -index 184fe8257e5ffb0ef090ffa2833786a4db8b59ea..6c5358f77be3e46860b0c3c49d36b25286af6851 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java -@@ -20,8 +20,16 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand { - return "CraftArmorStand"; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.decoration.ArmorStand getHandleRaw() { -+ return (net.minecraft.world.entity.decoration.ArmorStand)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.decoration.ArmorStand getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.decoration.ArmorStand) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java -index 15d50a284cafc2eb59239ca00926836526f09e06..dc455a211005f70754f3b99213b22e85821c216f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java -@@ -26,6 +26,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow { - - @Override - public net.minecraft.world.entity.projectile.Arrow getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.Arrow) this.entity; - } - -@@ -90,6 +91,13 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow { - return true; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.AbstractArrow getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.AbstractArrow)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public void setBasePotionData(PotionData data) { - this.setBasePotionType(CraftPotionUtil.fromBukkit(data)); -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java -index cbfca242f820d238b112f8ce64e9de8398c48a1c..efbfc8480bddf901fe0acebc06408ee625b57418 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java -@@ -10,8 +10,16 @@ public class CraftAxolotl extends CraftAnimals implements Axolotl, io.papermc.pa - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.axolotl.Axolotl getHandleRaw() { -+ return (net.minecraft.world.entity.animal.axolotl.Axolotl)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.axolotl.Axolotl getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.axolotl.Axolotl) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java -index 1bb72f28085f3885bec068b586ec222111044884..cb56b6690a385e76197cfc0667ebdec72f0cd096 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java -@@ -8,8 +8,16 @@ public class CraftBat extends CraftAmbient implements Bat { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.ambient.Bat getHandleRaw() { -+ return (net.minecraft.world.entity.ambient.Bat)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.ambient.Bat getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.ambient.Bat) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java -index 3dac93b0ab5d5acf5b33dc4b0efed60319eb657b..6ade6ca1a32f824271b7deeabc4dd154ae5a67b6 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java -@@ -13,8 +13,16 @@ public class CraftBee extends CraftAnimals implements Bee { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Bee getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Bee)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Bee getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Bee) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java -index a4c9c73691300880777483b0beb17e1bd6779d06..05951297aaed63c22f038703ad6fb68dfcec5227 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java -@@ -8,8 +8,16 @@ public class CraftBlaze extends CraftMonster implements Blaze { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Blaze getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Blaze)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Blaze getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Blaze) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java -index 5b0dd9aae3fbd9257d0375a37a07c812199d64a2..d22538ecda7685093f400ee560ae53c206ed62b2 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java -@@ -8,8 +8,16 @@ public class CraftBlockAttachedEntity extends CraftEntity { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public BlockAttachedEntity getHandleRaw() { -+ return (BlockAttachedEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public BlockAttachedEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (BlockAttachedEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java -index dd91de8f24c27b9318c2a898a49991d74c100bff..b951571eda47da97ee73ba7d9b71b4f6cf0373d6 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java -@@ -12,8 +12,16 @@ public class CraftBlockDisplay extends CraftDisplay implements BlockDisplay { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Display.BlockDisplay getHandleRaw() { -+ return (net.minecraft.world.entity.Display.BlockDisplay)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Display.BlockDisplay getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Display.BlockDisplay) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java -index 2a2839c31989d127739d829159a8b6e5b9a5210b..fb87800c02d5ff9bcb197170c11e305273cea083 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java -@@ -101,8 +101,16 @@ public abstract class CraftBoat extends CraftVehicle implements Boat, io.papermc - return CraftBoat.boatStatusFromNms(this.getHandle().status); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractBoat getHandleRaw() { -+ return (AbstractBoat)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractBoat getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractBoat) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java -index e8e4704304504e69c7964dcd4df8ce5db9e92bf6..20630858d00fa23e911ec38788df971a12f98c6a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java -@@ -12,6 +12,7 @@ public class CraftBogged extends CraftAbstractSkeleton implements Bogged, io.pap - - @Override - public net.minecraft.world.entity.monster.Bogged getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Bogged) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java -index 7648e2c700a55f9c0b3539dc720903238d138d54..b21f1654ddd2a4d7c85baae44fef10842905fbf9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java -@@ -13,6 +13,7 @@ public class CraftBreeze extends CraftMonster implements Breeze { - - @Override - public net.minecraft.world.entity.monster.breeze.Breeze getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.breeze.Breeze) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java -index e88e52a9b8a4d2d750101b0529cbe2a9976e91dd..0eadb421cc505c4639f68c932d284e8ef56f7f57 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java -@@ -10,6 +10,7 @@ public class CraftBreezeWindCharge extends CraftAbstractWindCharge implements Br - - @Override - public net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java -index 80e571c977db5cdf43bfbfce035f37a3fa325c95..562ac40645f98452d0d923146d4e95c59b029f5b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java -@@ -11,8 +11,16 @@ public class CraftCamel extends CraftAbstractHorse implements Camel { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.camel.Camel getHandleRaw() { -+ return (net.minecraft.world.entity.animal.camel.Camel)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.camel.Camel getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.camel.Camel) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java -index 88e876da7df64b68a5b71fd1deab75b59c5a64e3..3319f46e2c464c553425e33ac31f1d5190c2d1b5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java -@@ -19,8 +19,16 @@ public class CraftCat extends CraftTameableAnimal implements Cat { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Cat getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Cat)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Cat getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Cat) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java -index 4f661fbdb860cf550da0d952b775fe6f990b43b3..2dfbfbbe98815a303516d88e6ea96b9fba9b7f39 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java -@@ -8,8 +8,16 @@ public class CraftCaveSpider extends CraftSpider implements CaveSpider { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.CaveSpider getHandleRaw() { -+ return (net.minecraft.world.entity.monster.CaveSpider)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.CaveSpider getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.CaveSpider) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java -index a1e04bb965f18ffd07e2f5bf827c5e4ddd6aeeda..8ba8189ddff9f35a60c31015cccf6480246cf21c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java -@@ -15,8 +15,16 @@ public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.ent - this.inventory = new CraftInventory(entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractChestBoat getHandleRaw() { -+ return (AbstractChestBoat)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractChestBoat getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractChestBoat) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java -index 40ee96e31dea64ab3a77553dbb6daad001736f2e..9cdb7e5ce6883709b709e88037e70a1953d755a0 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java -@@ -10,8 +10,16 @@ public abstract class CraftChestedHorse extends CraftAbstractHorse implements Ch - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractChestedHorse getHandleRaw() { -+ return (AbstractChestedHorse)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractChestedHorse getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractChestedHorse) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java -index 96f6e2fd9c6b20d34122abfe5c7fba732502d5a0..2546ce4d7a25bfe6be1533bfbc770726815e8148 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java -@@ -9,8 +9,16 @@ public class CraftChicken extends CraftAnimals implements Chicken { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Chicken getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Chicken)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Chicken getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Chicken) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java -index 63e6b07e3b159c74d9ef17be20b5ab43d07f0f5f..44fa01798eed8368fa0187cecb88de830d7d2e16 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java -@@ -9,8 +9,16 @@ public class CraftCod extends io.papermc.paper.entity.PaperSchoolableFish implem - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Cod getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Cod)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Cod getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Cod) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java -index c2583982d84c736639eec511daba594d7806a628..d31bba789c51bc344d21a357f54dd8ef55b88873 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java -@@ -32,8 +32,16 @@ public class CraftComplexPart extends CraftEntity implements ComplexEntityPart { - return this.getParent().isValid(); - } - -+ // Folia start - region threading -+ @Override -+ public EnderDragonPart getHandleRaw() { -+ return (EnderDragonPart)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public EnderDragonPart getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (EnderDragonPart) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java -index 7babc404e4920cd264206d4e83b1be6f841cdb8c..7a5312ab0fe3a21907a1d6b82fab9b4dce15c44e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java -@@ -9,8 +9,16 @@ public class CraftCow extends CraftAnimals implements Cow { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Cow getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Cow)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Cow getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Cow) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java -index 267f3c85058ef7c73e372c04493cfa6c907e44bb..df838d551fa08895e390eb793506e2f3697555f4 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java -@@ -9,8 +9,16 @@ public class CraftCreaking extends CraftMonster implements org.bukkit.entity.Cre - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Creaking getHandleRaw() { -+ return (Creaking)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Creaking getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Creaking) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java -index 664d9c1793b823ed03f198a936f2ebd9b7695898..6cbe6b6438296b6137ceea01b21ab6a69da2cc9c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java -@@ -9,8 +9,16 @@ public class CraftCreature extends CraftMob implements Creature { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public PathfinderMob getHandleRaw() { -+ return (PathfinderMob)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public PathfinderMob getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (PathfinderMob) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java -index 42dd26b9170f7d217d73f725a6b8440b45ac2190..e59a29ee70e8b1f525c370bb711fa77a5732c500 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java -@@ -87,6 +87,13 @@ public class CraftCreeper extends CraftMonster implements Creeper { - this.getHandle().ignite(); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Creeper getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Creeper)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Entity getIgniter() { - return (this.getHandle().entityIgniter != null) ? this.getHandle().entityIgniter.getBukkitEntity() : null; -@@ -94,6 +101,7 @@ public class CraftCreeper extends CraftMonster implements Creeper { - - @Override - public net.minecraft.world.entity.monster.Creeper getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Creeper) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java -index 48eeb1d9ba0ad6f895bfe507a6fbe4b9c9530e47..65301b94dc8d813c487deff24cd04b379e666e98 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java -@@ -12,8 +12,16 @@ public class CraftDisplay extends CraftEntity implements Display { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Display getHandleRaw() { -+ return (net.minecraft.world.entity.Display)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Display getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Display) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java -index 83867b9c5497e6e793b21c482646cc419587e182..55dfb073e4355e68855580f26464af6cf1c6ac33 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java -@@ -9,8 +9,16 @@ public class CraftDolphin extends CraftAgeable implements Dolphin { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Dolphin getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Dolphin)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Dolphin getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Dolphin) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java -index 51fc4acae9f20e8891069704e4a27f212b870766..2b27d3e685ee1882dc6ecc1ceaee2fb52f1b548f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java -@@ -9,8 +9,16 @@ public class CraftDrowned extends CraftZombie implements Drowned, com.destroysto - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Drowned getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Drowned)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Drowned getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Drowned) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java -index 010e9e922a6e30df4e40da151cfd398d1062633e..8f36a715a5fdf1595cdfdad3d9971cca39279777 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java -@@ -9,8 +9,16 @@ public class CraftEgg extends CraftThrowableProjectile implements Egg { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public ThrownEgg getHandleRaw() { -+ return (ThrownEgg)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ThrownEgg getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ThrownEgg) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java -index 676dd5331bec75407a74aea2a89e78ab72d69724..4f876511b116dd6e7704f1f047af6fab2c3a3e47 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java -@@ -39,8 +39,16 @@ public class CraftEnderCrystal extends CraftEntity implements EnderCrystal { - } - } - -+ // Folia start - region threading -+ @Override -+ public EndCrystal getHandleRaw() { -+ return (EndCrystal)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public EndCrystal getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (EndCrystal) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java -index 1ef0ec7ed3b13c25d76c03c7013c8e2eaba4d66a..9f37334ba0e2358f583df5a6d3e347909cfe681e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java -@@ -30,8 +30,16 @@ public class CraftEnderDragon extends CraftMob implements EnderDragon, CraftEnem - return builder.build(); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.boss.enderdragon.EnderDragon getHandleRaw() { -+ return (net.minecraft.world.entity.boss.enderdragon.EnderDragon)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.boss.enderdragon.EnderDragon getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.boss.enderdragon.EnderDragon) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java -index 33ae03b78b01c005a291a343b42507fb539e81a6..36aec95539044edd429c17833338638262b9db00 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java -@@ -16,8 +16,16 @@ public class CraftEnderDragonPart extends CraftComplexPart implements EnderDrago - return (EnderDragon) super.getParent(); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.boss.EnderDragonPart getHandleRaw() { -+ return (net.minecraft.world.entity.boss.EnderDragonPart)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.boss.EnderDragonPart getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.boss.EnderDragonPart) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java -index 3bb8d74f2b59c7f0c7c1cbde47a570d628ceceb2..25d7577d17d52dc00a355a684f1493efb2e88584 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java -@@ -9,8 +9,16 @@ public class CraftEnderPearl extends CraftThrowableProjectile implements EnderPe - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public ThrownEnderpearl getHandleRaw() { -+ return (ThrownEnderpearl)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ThrownEnderpearl getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ThrownEnderpearl) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java -index 27f56fa4b7ef92a9a4dfa6b782350424b88210f2..e76390fe22e2e846313c9a5b2c7f5492f798ca3e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java -@@ -15,8 +15,16 @@ public class CraftEnderSignal extends CraftEntity implements EnderSignal { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public EyeOfEnder getHandleRaw() { -+ return (EyeOfEnder)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public EyeOfEnder getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (EyeOfEnder) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java -index 983b9d6ddb58eff297e96e5c8b28ec427efa267d..16e33e302f8a60f1f9ff67929dc7c63cd5192a37 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java -@@ -62,8 +62,16 @@ public class CraftEnderman extends CraftMonster implements Enderman { - } - // Paper end - -+ // Folia start - region threading -+ @Override -+ public EnderMan getHandleRaw() { -+ return (EnderMan)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public EnderMan getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (EnderMan) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java -index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..399ef60ab5f1bf02b638c8c46a72d297932f6b38 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java -@@ -9,8 +9,16 @@ public class CraftEndermite extends CraftMonster implements Endermite { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Endermite getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Endermite)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Endermite getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Endermite) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index e0ed7e9501bcf95c9bf7480f766738ed694295b0..fd6449e015289a0079e363ec6ca605cd0c8d7c27 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -538,6 +538,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { - } - - public Entity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java -index 3a890cccf1766758794f3a3b5d31428f42590049..8c148db1b84c65b89fb2779e5b96a71ea4900083 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java -@@ -11,8 +11,16 @@ public class CraftEvoker extends CraftSpellcaster implements Evoker { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Evoker getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Evoker)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Evoker getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Evoker) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java -index 19b368cc862cd7e3e1f0e89401a7d099e3eaefa3..4a1c1af06719ff75f6ec2ac27198858b549b0302 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java -@@ -11,8 +11,16 @@ public class CraftEvokerFangs extends CraftEntity implements EvokerFangs { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.EvokerFangs getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.EvokerFangs)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.EvokerFangs getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.EvokerFangs) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java -index 650e4a01cecc4cc08e7ff9ebcc4c367084351f21..81b2b850dd7d08f2fae7baf56733d753b68d294c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java -@@ -42,8 +42,16 @@ public class CraftExperienceOrb extends CraftEntity implements ExperienceOrb { - } - // Paper end - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.ExperienceOrb getHandleRaw() { -+ return (net.minecraft.world.entity.ExperienceOrb)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.ExperienceOrb getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.ExperienceOrb) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -index 1359d25a32b4a5d5e8e68ce737bd19f7b5afaf69..4c6ac7f2531311d24081b397c60b2f8b183fad34 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java -@@ -14,8 +14,16 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public FallingBlockEntity getHandleRaw() { -+ return (FallingBlockEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public FallingBlockEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (FallingBlockEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java -index 43d7bea201a52cfeacf60c75caa28dfd2c4ff164..ac7237e8c28377d5f9abf38b628215ac865c9709 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java -@@ -83,8 +83,16 @@ public class CraftFireball extends AbstractProjectile implements Fireball { - } - // Paper end - Expose power on fireball projectiles - -+ // Folia start - region threading -+ @Override -+ public AbstractHurtingProjectile getHandleRaw() { -+ return (AbstractHurtingProjectile)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractHurtingProjectile getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractHurtingProjectile) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -index 759b6e54db93792c9862b1f1625118ac6fa49d7a..6fdd39c78a2f7c1c53d5de16e09e0f271c42039e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -@@ -37,8 +37,16 @@ public class CraftFirework extends CraftProjectile implements Firework { - // Paper end - Expose firework item directly - } - -+ // Folia start - region threading -+ @Override -+ public FireworkRocketEntity getHandleRaw() { -+ return (FireworkRocketEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public FireworkRocketEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (FireworkRocketEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java -index eb10f94d5ed8ca89d3786138647dd43357609a6c..f4d92fb44fd7cee7debe3e283e8b672021e3e23f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java -@@ -10,8 +10,16 @@ public class CraftFish extends CraftWaterMob implements Fish, io.papermc.paper.e - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractFish getHandleRaw() { -+ return (AbstractFish)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractFish getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractFish) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -index e0d65df2e5b4c14abeb89a5f72cc2d9fa034dcf5..bd8f1925cb3eee30a5b5ea83225b6d94c80bc69a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java -@@ -14,8 +14,16 @@ public class CraftFishHook extends CraftProjectile implements FishHook { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public FishingHook getHandleRaw() { -+ return (FishingHook)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public FishingHook getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (FishingHook) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java -index 8117faa0c89a966d057f4bf251c03a09d1e8797e..7c3827e6ef608ff15be9bced4788b09f1572aecb 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java -@@ -10,8 +10,16 @@ public class CraftFlying extends CraftMob implements Flying { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public FlyingMob getHandleRaw() { -+ return (FlyingMob)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public FlyingMob getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (FlyingMob) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java -index bb2b59ce9775a0d1dd9828885e57c14cf40d9f04..90dcbf746c5effa98c09059552674a3e428ac1b9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java -@@ -14,8 +14,16 @@ public class CraftFox extends CraftAnimals implements Fox { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Fox getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Fox)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Fox getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Fox) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java -index ebf09c27e02a19d31c777b70a38376e4d01e5ee7..0eb55d6e7541acbc6727a108fdeed1711a17f3cd 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java -@@ -19,8 +19,16 @@ public class CraftFrog extends CraftAnimals implements org.bukkit.entity.Frog { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Frog getHandleRaw() { -+ return (Frog)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Frog getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Frog) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java -index 97fa4e1e70203194bd939618b2fad92665af6d59..27b309c9ce10798e3c3a7a9d39b8c300e471e177 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java -@@ -9,8 +9,16 @@ public class CraftGhast extends CraftFlying implements Ghast, CraftEnemy { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Ghast getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Ghast)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Ghast getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Ghast) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java -index 5826205339e99e2536b93c8589d95917749f8417..9bb22fc146012310bca849fccb0a1e7e987875e9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java -@@ -9,8 +9,16 @@ public class CraftGiant extends CraftMonster implements Giant { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Giant getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Giant)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Giant getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Giant) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java -index b9a7576d2481b64b7e5b46d66c1f55d1dc28c540..00c95313a233a032518e2435922d4044a9d67aee 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java -@@ -9,8 +9,16 @@ public class CraftGlowItemFrame extends CraftItemFrame implements GlowItemFrame - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.decoration.GlowItemFrame getHandleRaw() { -+ return (net.minecraft.world.entity.decoration.GlowItemFrame)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.decoration.GlowItemFrame getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.decoration.GlowItemFrame) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java -index 253a0d2f987163cbbb28d261674b47137cbbcbe2..1ed09d2aa4077165e9f88dd9db34f4083a2953c2 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java -@@ -10,8 +10,16 @@ public class CraftGlowSquid extends CraftSquid implements GlowSquid { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.GlowSquid getHandleRaw() { -+ return (net.minecraft.world.entity.GlowSquid)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.GlowSquid getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.GlowSquid) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java -index 2c21de478bff9cdf13ba46cd041831d54c11e924..e64d7c4cfe65d34bdab13496741645f808f43dc6 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java -@@ -9,8 +9,16 @@ public class CraftGoat extends CraftAnimals implements Goat { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.goat.Goat getHandleRaw() { -+ return (net.minecraft.world.entity.animal.goat.Goat)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.goat.Goat getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.goat.Goat) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java -index e27e469894bdd17cf7a004a85fdf0eaa746111a6..bbb8ff66580e62b5fb66aac22de72b9b9eafd3ef 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java -@@ -9,8 +9,16 @@ public class CraftGolem extends CraftCreature implements Golem { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractGolem getHandleRaw() { -+ return (AbstractGolem)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractGolem getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractGolem) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java -index e232350f2c6ef1900b05fda4d3f94099057d10e5..2c411b569cc4b222ed3cdfb95237c86cd6a0fabb 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java -@@ -13,8 +13,16 @@ public class CraftGuardian extends CraftMonster implements Guardian { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Guardian getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Guardian)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Guardian getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Guardian) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java -index f1e3f2b89bcd969f3c80548e165881a9b290eb53..2e4b86b44ace5eecefc9ab09c6e1f0a31247ad2f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java -@@ -57,8 +57,16 @@ public class CraftHanging extends CraftBlockAttachedEntity implements Hanging { - return CraftBlock.notchToBlockFace(direction); - } - -+ // Folia start - region threading -+ @Override -+ public HangingEntity getHandleRaw() { -+ return (HangingEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public HangingEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (HangingEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java -index 37007775d27598e319c0c78929c6a808b697724a..b9819fc2c2ffc1a21a6e0973bb0d3595ee9c565d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java -@@ -51,8 +51,16 @@ public class CraftHoglin extends CraftAnimals implements Hoglin, CraftEnemy { - return this.getHandle().isConverting(); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.hoglin.Hoglin getHandleRaw() { -+ return (net.minecraft.world.entity.monster.hoglin.Hoglin)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.hoglin.Hoglin getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.hoglin.Hoglin) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java -index 9b6ff0f64966c78a3233860bb0840182b52f01bc..fb34651a9e4ed0cb05721d15524a26f89333d5e7 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java -@@ -13,8 +13,16 @@ public class CraftHorse extends CraftAbstractHorse implements Horse { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.horse.Horse getHandleRaw() { -+ return (net.minecraft.world.entity.animal.horse.Horse)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.horse.Horse getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.horse.Horse) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index a1f42f860f080227a2223ec48d218e91d8f65977..9ce7dba9cfae9c34185a4edcfc2e3c1cc215ccea 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -@@ -303,8 +303,16 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { - this.mode = mode; - } - -+ // Folia start - region threading -+ @Override -+ public Player getHandleRaw() { -+ return (Player)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Player getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Player) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java -index fb3c518f02cb4c428f022523d2f838625841332b..846a429493236f5002f0fae85c6cd7d20169dbe0 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java -@@ -10,8 +10,16 @@ public class CraftIllager extends CraftRaider implements Illager { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractIllager getHandleRaw() { -+ return (AbstractIllager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractIllager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractIllager) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java -index 5b2af80e584977683cd39e6f440e65a76e929be9..789191168f74b3272e8da2131e0311853033c938 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java -@@ -9,8 +9,16 @@ public class CraftIllusioner extends CraftSpellcaster implements Illusioner, com - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Illusioner getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Illusioner)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Illusioner getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Illusioner) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java -index caa3016bf9742222205e3ea9a327fad3c4f912bb..2e00c7fe8dadd4c57c83a51cdfce165b6bfd6807 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java -@@ -12,8 +12,16 @@ public class CraftInteraction extends CraftEntity implements Interaction { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Interaction getHandleRaw() { -+ return (net.minecraft.world.entity.Interaction)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Interaction getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Interaction) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java -index 63cae1a2e95d8da17c45c4404a8dd0ca6a413c39..e417ff87b047dcffa6121835af6f4e713526e16b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java -@@ -8,8 +8,16 @@ public class CraftIronGolem extends CraftGolem implements IronGolem { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.IronGolem getHandleRaw() { -+ return (net.minecraft.world.entity.animal.IronGolem)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.IronGolem getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.IronGolem) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 7a3d982b133f8cdaeb936cf40f92565f0f7f6dd0..9216543d8f9c25221abb510b35c6bd504e2ccfeb 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -@@ -18,8 +18,16 @@ public class CraftItem extends CraftEntity implements Item { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public ItemEntity getHandleRaw() { -+ return (ItemEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ItemEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ItemEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java -index 787f91566fc53c2b4aeba1ec10d8f46ccf15cbe6..04a73a31ba09557e901ff1985dc5d5e53f18d99a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java -@@ -13,8 +13,16 @@ public class CraftItemDisplay extends CraftDisplay implements ItemDisplay { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Display.ItemDisplay getHandleRaw() { -+ return (net.minecraft.world.entity.Display.ItemDisplay)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Display.ItemDisplay getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Display.ItemDisplay) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java -index 350ad61ab3fe66abd528e353b431a4a6dac17506..332f209980d3e645ad469fcebb93cc09253ebc20 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java -@@ -157,8 +157,16 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame { - this.getHandle().fixed = fixed; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.decoration.ItemFrame getHandleRaw() { -+ return (net.minecraft.world.entity.decoration.ItemFrame)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.decoration.ItemFrame getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.decoration.ItemFrame) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java -index 0848963e61e03aa2a1740208ee372fd9edb7fc11..de2236f0106330ebe9d76bd308f9eee8751db826 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java -@@ -14,8 +14,16 @@ public class CraftLargeFireball extends CraftSizedFireball implements LargeFireb - this.getHandle().explosionPower = (int) yield; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.LargeFireball getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.LargeFireball)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.LargeFireball getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.LargeFireball) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java -index 76a7fc3d6c561d12bde17b9f93cae03a6cbb84b3..cd1ba99a75da644d06c4eb2f2c1ff91bfa5afa01 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java -@@ -24,6 +24,13 @@ public class CraftLeash extends CraftBlockAttachedEntity implements LeashHitch { - return BlockFace.SELF; - } - -+ // Folia start - region threading -+ @Override -+ public LeashFenceKnotEntity getHandleRaw() { -+ return (LeashFenceKnotEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public BlockFace getAttachedFace() { - // Leash hitch has no facing direction, so we return self -@@ -37,6 +44,7 @@ public class CraftLeash extends CraftBlockAttachedEntity implements LeashHitch { - - @Override - public LeashFenceKnotEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (LeashFenceKnotEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java -index e9f471e60af0725ec34e2985d63ae9ea9f88590a..cd824fc65ac2b1fe55710da4700f7c31f820f205 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java -@@ -41,8 +41,16 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike - this.getHandle().setCause((player != null) ? ((CraftPlayer) player).getHandle() : null); - } - -+ // Folia start - region threading -+ @Override -+ public LightningBolt getHandleRaw() { -+ return (LightningBolt)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public LightningBolt getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (LightningBolt) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 4f98d138a275a6c34528b7a5148ef265bc38d6b5..228f7fbce72b7828905e21f21525371a92ec07d4 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -487,6 +487,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { - this.getHandle().invulnerableTime = ticks; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.LivingEntity getHandleRaw() { -+ return (net.minecraft.world.entity.LivingEntity)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public int getNoActionTicks() { - return this.getHandle().getNoActionTime(); -@@ -500,6 +507,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { - - @Override - public net.minecraft.world.entity.LivingEntity getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.LivingEntity) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -index 351f42842b780d053cd2e5bad9ae299449141b10..63513eff9b849f240b16ea28060b78c774e23934 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -@@ -14,8 +14,16 @@ public class CraftLlama extends CraftChestedHorse implements Llama, com.destroys - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.horse.Llama getHandleRaw() { -+ return (net.minecraft.world.entity.animal.horse.Llama)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.horse.Llama getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.horse.Llama) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java -index 47633f05b4fab1dcabc2117e7645fe6d6949622a..5e51d6eeda2abdc5df9c9a280a191ca1cbf615b9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java -@@ -10,8 +10,16 @@ public class CraftLlamaSpit extends AbstractProjectile implements LlamaSpit { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.LlamaSpit getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.LlamaSpit)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.LlamaSpit getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.LlamaSpit) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java -index 58b638ffd338e1b0f4962490c665c1eebcf33dcc..9f1b4d0561c10fbbfe0daec3d9dabfdaca9cf70b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java -@@ -9,8 +9,16 @@ public class CraftMagmaCube extends CraftSlime implements MagmaCube { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.MagmaCube getHandleRaw() { -+ return (net.minecraft.world.entity.monster.MagmaCube)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.MagmaCube getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.MagmaCube) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java -index e6782a48d22ba1e683e3fe463e970e8a5ed60fbd..afaa4570c1991cd4260ffcdba823ba2452ad156a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java -@@ -9,8 +9,16 @@ public class CraftMarker extends CraftEntity implements Marker { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Marker getHandleRaw() { -+ return (net.minecraft.world.entity.Marker)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Marker getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Marker) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java -index b42bce0c4f4b3aac2729cfdad392d863245ed693..d3ffa2b4402fdd005104d07d92e4066c6170615e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java -@@ -77,8 +77,16 @@ public abstract class CraftMinecart extends CraftVehicle implements Minecart { - } - // Paper end - -+ // Folia start - region threading -+ @Override -+ public AbstractMinecart getHandleRaw() { -+ return (AbstractMinecart)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractMinecart getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractMinecart) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java -index f34fa6715e477936097367a7aefd1a2bf87d3d90..e5310b138b13d54448072c15f6768acc1c33a45c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java -@@ -20,8 +20,16 @@ public class CraftMinecartCommand extends CraftMinecart implements CommandMineca - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public MinecartCommandBlock getHandleRaw() { -+ return (MinecartCommandBlock)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public MinecartCommandBlock getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (MinecartCommandBlock) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java -index 451f3a6f0b47493da3af3f5d6baced6a8c97f350..d4f98fe5eb5e463679ebc5b82b077c98e4448203 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java -@@ -13,8 +13,16 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements co - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public AbstractMinecartContainer getHandleRaw() { -+ return (AbstractMinecartContainer)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractMinecartContainer getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractMinecartContainer) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java -index 1be1f6d23f2224d4d8720d40f2e530736b1bae81..eee08d53714b485bffd1398506ed0cb3b7002d2c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java -@@ -11,8 +11,16 @@ public class CraftMinecartFurnace extends CraftMinecart implements PoweredMineca - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public MinecartFurnace getHandleRaw() { -+ return (MinecartFurnace)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public MinecartFurnace getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (MinecartFurnace) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java -index 3a3563a1bdbc0d84d973b3a04b50b78b4bc3d379..1e86ce7c1a3fc1f4eae2d8136fc0d879fbde5301 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java -@@ -34,8 +34,17 @@ public final class CraftMinecartHopper extends CraftMinecartContainer implements - ((MinecartHopper) this.getHandle()).setEnabled(enabled); - } - // Paper start -+ -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.vehicle.MinecartHopper getHandleRaw() { -+ return (net.minecraft.world.entity.vehicle.MinecartHopper)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.vehicle.MinecartHopper getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.vehicle.MinecartHopper) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java -index e8ece01669373ecf6552d33b2ed72668524e2650..fbb5c2e2a136cd03eb1f4b4b5ef289d6a6c39173 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java -@@ -162,8 +162,16 @@ final class CraftMinecartMobSpawner extends CraftMinecart implements SpawnerMine - this.getHandle().getSpawner().spawnRange = spawnRange; - } - -+ // Folia start - region threading -+ @Override -+ public MinecartSpawner getHandleRaw() { -+ return (MinecartSpawner)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public MinecartSpawner getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (MinecartSpawner) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java -index 15184e7fc3aeb388fb9de6be2ad72f98fee52044..f18093c5ccacfb55e7c6133cf5212c464e41ead4 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java -@@ -72,8 +72,16 @@ public final class CraftMinecartTNT extends CraftMinecart implements ExplosiveMi - this.getHandle().explode(power); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.vehicle.MinecartTNT getHandleRaw() { -+ return (net.minecraft.world.entity.vehicle.MinecartTNT)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public MinecartTNT getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (MinecartTNT) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java -index 778a9d3f8bfe5dba59e1e655e4eeb8822678b8cf..b4ec6c1f8ea5d5c34f2ecb2b066e49993ae79dc7 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java -@@ -54,8 +54,16 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob, io.pape - return (sound != null) ? CraftSound.minecraftToBukkit(sound) : null; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Mob getHandleRaw() { -+ return (net.minecraft.world.entity.Mob)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Mob getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Mob) this.entity; - } - -@@ -63,7 +71,7 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob, io.pape - @Override - public void setHandle(net.minecraft.world.entity.Entity entity) { - super.setHandle(entity); -- paperPathfinder.setHandle(getHandle()); -+ paperPathfinder.setHandle((net.minecraft.world.entity.Mob)entity); // Folia - region threading - } - // Paper end - Mob Pathfinding API - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java -index 706c74c832f6893df3797023f68add31139c7d57..1cf155fc23f13691f86673eac3084d7530d69ab5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java -@@ -9,8 +9,16 @@ public class CraftMonster extends CraftCreature implements Monster, CraftEnemy { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Monster getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Monster)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Monster getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Monster) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java -index 596146ad7899c21645df8834ce5f0afd6c1b0604..78f6e16a745924419d5aad53f95d767d87bdf5d0 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java -@@ -19,6 +19,13 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow, io.paperm - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.MushroomCow getHandleRaw() { -+ return (net.minecraft.world.entity.animal.MushroomCow)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public boolean hasEffectsForNextStew() { - SuspiciousStewEffects stewEffects = this.getHandle().stewEffects; -@@ -94,6 +101,7 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow, io.paperm - - @Override - public net.minecraft.world.entity.animal.MushroomCow getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.MushroomCow) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java -index 5c60a30e80448fbf04b5fa4b1ef12fb2ee99bfd5..4ba52939450c0a89e5ba1fa57a84b3ceccb9fef0 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java -@@ -9,8 +9,16 @@ public class CraftOcelot extends CraftAnimals implements Ocelot { - super(server, ocelot); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Ocelot getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Ocelot)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Ocelot getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Ocelot) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java -index ecdac2cf74e99f0d69e053dece11ab891973dc2b..fa365c38c9e0f671df1481c8b36bc993eee42afd 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java -@@ -13,6 +13,7 @@ public class CraftOminousItemSpawner extends CraftEntity implements OminousItemS - - @Override - public net.minecraft.world.entity.OminousItemSpawner getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.OminousItemSpawner) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java -index bcac1359c667ef1ee46384f9c7a5adf4010d2b08..e740abd53d99f549acb5048d748241560dfeddd1 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java -@@ -50,8 +50,16 @@ public class CraftPainting extends CraftHanging implements Painting { - return false; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.decoration.Painting getHandleRaw() { -+ return (net.minecraft.world.entity.decoration.Painting)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.decoration.Painting getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.decoration.Painting) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java -index 01d104d91de9e1319d27e39d3f474318c7809486..c298b263175dc82097c0ad2c35194f3e326c6658 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java -@@ -11,8 +11,16 @@ public class CraftPanda extends CraftAnimals implements Panda { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Panda getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Panda)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Panda getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Panda) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java -index 04d6cf6a1f3ae8316e3b2862c2d1b04e84a3b20a..4ed79610b50be635a7a7c8a8f7d7af8f91ce2d0d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java -@@ -11,8 +11,16 @@ public class CraftParrot extends CraftTameableAnimal implements Parrot { - super(server, parrot); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Parrot getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Parrot)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Parrot getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Parrot) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java -index 429200b0b06cc0f71db03924228240b8b5f22a55..634a95a5d89821d3464e2ae8bd86b3b574f0ef17 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java -@@ -9,8 +9,16 @@ public class CraftPhantom extends CraftFlying implements Phantom, CraftEnemy { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Phantom getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Phantom)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Phantom getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Phantom) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java -index fd4f13e8ea000eb38efd77bfb197855db8816744..7f049e504cf7af7c5c5ee247bccb4f6e01b80121 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java -@@ -55,8 +55,16 @@ public class CraftPig extends CraftAnimals implements Pig { - return Material.CARROT_ON_A_STICK; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Pig getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Pig)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Pig getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Pig) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java -index 49beb836d2801aadf869feefa602616daebe633f..d220874f678649acfae549691262c370f0228908 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java -@@ -30,8 +30,16 @@ public class CraftPigZombie extends CraftZombie implements PigZombie { - return this.getAnger() > 0; - } - -+ // Folia start - region threading -+ @Override -+ public ZombifiedPiglin getHandleRaw() { -+ return (ZombifiedPiglin)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ZombifiedPiglin getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ZombifiedPiglin) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java -index 5124a383b60b2c8de89fa992547d0c61db760c21..d75230de45102434660b3b7926a804d26e10ab2c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java -@@ -75,8 +75,16 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin, com.dest - return new CraftInventory(this.getHandle().inventory); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.piglin.Piglin getHandleRaw() { -+ return (net.minecraft.world.entity.monster.piglin.Piglin)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.piglin.Piglin getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.piglin.Piglin) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java -index e7957d6051244ba410f8633f9c16eeb8c5ac3ce0..f8465f75c15d96ccd82ee394c9e658966837ad07 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java -@@ -95,8 +95,16 @@ public class CraftPiglinAbstract extends CraftMonster implements PiglinAbstract - public void setBreed(boolean b) { - } - -+ // Folia start - region threading -+ @Override -+ public AbstractPiglin getHandleRaw() { -+ return (AbstractPiglin)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public AbstractPiglin getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (AbstractPiglin) super.getHandle(); - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java -index be874dc973fe632e8ace86041392ca69beaefd16..efb64160089eeb6be8faf7790989909145c22a4b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java -@@ -9,8 +9,16 @@ public class CraftPiglinBrute extends CraftPiglinAbstract implements PiglinBrute - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.piglin.PiglinBrute getHandleRaw() { -+ return (net.minecraft.world.entity.monster.piglin.PiglinBrute)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.piglin.PiglinBrute getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.piglin.PiglinBrute) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java -index 2638c341bc02f201f7ab17fdebcdbdf3a7ec05bf..074b2919be2b5544b0a46e6cd32f6c57dad6bfdc 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java -@@ -11,8 +11,16 @@ public class CraftPillager extends CraftIllager implements Pillager, com.destroy - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Pillager getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Pillager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Pillager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Pillager) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 89633d88be288e8caba846c49c6267e45fcadc06..5aa9fcb697a758da10a9e1f839dd5502a446c076 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -684,7 +684,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - - @Override - public void kick(net.kyori.adventure.text.Component message, org.bukkit.event.player.PlayerKickEvent.Cause cause) { -- org.spigotmc.AsyncCatcher.catchOp("player kick"); -+ //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Folia - region threading - no longer needed - final ServerGamePacketListenerImpl connection = this.getHandle().connection; - if (connection != null) { - connection.disconnect(message == null ? net.kyori.adventure.text.Component.empty() : message, cause); -@@ -2318,9 +2318,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - return this; - } - -+ // Folia start - region threading -+ @Override -+ public ServerPlayer getHandleRaw() { -+ return (ServerPlayer)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ServerPlayer getHandle() { -- return (ServerPlayer) this.entity; -+ return (ServerPlayer) this.entity; // Folia - region threading - no checks for players, as it's a total mess - } - - public void setHandle(final ServerPlayer entity) { -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java -index fe075cfdf3097d6cb768e71b8cc360abb8eaf367..657886dfb8e152ed4a64a64878da23526dad0160 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java -@@ -8,8 +8,17 @@ public class CraftPolarBear extends CraftAnimals implements PolarBear { - public CraftPolarBear(CraftServer server, net.minecraft.world.entity.animal.PolarBear entity) { - super(server, entity); - } -+ -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.PolarBear getHandleRaw() { -+ return (net.minecraft.world.entity.animal.PolarBear)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.PolarBear getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.PolarBear) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java -index 4f1fa7dec78970bdfc184d3c1f1632dc9d75a574..99fd39c60d1b0a50bddf7b9b9f45f22c189a2f25 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java -@@ -12,8 +12,16 @@ public abstract class CraftProjectile extends AbstractProjectile implements Proj - - // Paper - moved to AbstractProjectile - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.Projectile getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.Projectile)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.Projectile getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.Projectile) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java -index 35a8219734633529325430810e88755b2dd23125..7ba16121cb1828cf5c0ff8f027fa05e9c1814ffa 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java -@@ -10,8 +10,16 @@ public class CraftPufferFish extends CraftFish implements PufferFish { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Pufferfish getHandleRaw() { -+ return (Pufferfish)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Pufferfish getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Pufferfish) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java -index 519ef701a7d6534f7cb516f6296b95ee521f661d..6407b4e6ca793a676e7d669920ae90b762207970 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java -@@ -10,8 +10,16 @@ public class CraftRabbit extends CraftAnimals implements Rabbit { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Rabbit getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Rabbit)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Rabbit getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Rabbit) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java -index 763c368e299588f9a0e085a8a5e04e97e1f33428..3e85638f3941c2085a7ddb102d0ccc23446cc1d6 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java -@@ -16,8 +16,16 @@ public abstract class CraftRaider extends CraftMonster implements Raider { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.raid.Raider getHandleRaw() { -+ return (net.minecraft.world.entity.raid.Raider)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.raid.Raider getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.raid.Raider) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java -index 09796ce15658e3f7c223a265a547a51ee729ed40..bfca2951d18f7451787877b5a6503b0572945447 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java -@@ -9,8 +9,16 @@ public class CraftRavager extends CraftRaider implements Ravager { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Ravager getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Ravager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Ravager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Ravager) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java -index 7660cc21e936002ebb23510f0ec2b58d71e5157d..a13976b2712413ef9fdeecd1e3ca762238d4efd9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java -@@ -10,8 +10,16 @@ public class CraftSalmon extends io.papermc.paper.entity.PaperSchoolableFish imp - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Salmon getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Salmon)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Salmon getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Salmon) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java -index 37291d7ad9fdf0fe78894f82a418f40bb581f58b..6c7e54a929b46fd160726e41bf63023a8622d044 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java -@@ -29,8 +29,16 @@ public class CraftSheep extends CraftAnimals implements Sheep, io.papermc.paper. - this.getHandle().setSheared(flag); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Sheep getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Sheep)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Sheep getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Sheep) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java -index 05ec06b71642ab1ef03829039f7ac1e4c527ee50..1e1e908cbc08df06996128e3dd6d277a19f9a2df 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java -@@ -18,8 +18,16 @@ public class CraftShulker extends CraftGolem implements Shulker, CraftEnemy { - return "CraftShulker"; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Shulker getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Shulker)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Shulker getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Shulker) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java -index b3797a43eeee11cb7ae0774d61bd5f195d0aa3ad..d045d50d1cfccb696153b8c33e86e193194271fc 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java -@@ -69,8 +69,16 @@ public class CraftShulkerBullet extends AbstractProjectile implements ShulkerBul - return "CraftShulkerBullet"; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.ShulkerBullet getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.ShulkerBullet)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.ShulkerBullet getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.ShulkerBullet) this.entity; - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java -index 7c75d78e5e28d7320c6dbe979bcd576658fb310b..a25ca7fa49a3bb213f6af5804079b2efe43ef0e4 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java -@@ -8,8 +8,16 @@ public class CraftSilverfish extends CraftMonster implements Silverfish { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Silverfish getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Silverfish)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Silverfish getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Silverfish) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java -index de3327812c08b3bb8f5907ae657f67962d1e4e8b..c479f4adb945e8bb6ea2279ad23d679ca0dee606 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java -@@ -27,8 +27,16 @@ public class CraftSizedFireball extends CraftFireball implements SizedFireball { - this.getHandle().setItem(CraftItemStack.asNMSCopy(item)); - } - -+ // Folia start - region threading -+ @Override -+ public Fireball getHandleRaw() { -+ return (Fireball)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Fireball getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Fireball) this.entity; - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java -index 6f98da9be6aef35e3b5c940188b872459a383c8e..dc93b8aaf48671d66d3bb3fb413b83fc4b4b26cf 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java -@@ -31,8 +31,16 @@ public class CraftSkeleton extends CraftAbstractSkeleton implements Skeleton { - } - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Skeleton getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Skeleton)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Skeleton getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Skeleton) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java -index fbb47491dcc75f8247dee9f123f946f99ef1467f..6cc1ea31340298037c2a00d64d70928f31278a4a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java -@@ -20,8 +20,16 @@ public class CraftSkeletonHorse extends CraftAbstractHorse implements SkeletonHo - return Variant.SKELETON_HORSE; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.horse.SkeletonHorse getHandleRaw() { -+ return (net.minecraft.world.entity.animal.horse.SkeletonHorse)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.horse.SkeletonHorse getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.horse.SkeletonHorse) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java -index e48f7d1cbec4a2319745ba48a5d44ab9925214e2..27b07865edfa659d9cdfcf2d84935ad313472e87 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java -@@ -19,8 +19,16 @@ public class CraftSlime extends CraftMob implements Slime, CraftEnemy { - this.getHandle().setSize(size, /* true */ getHandle().isAlive()); // Paper - fix dead slime setSize invincibility - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Slime getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Slime)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Slime getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Slime) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java -index 072df206858944ef78179b0a6d61ed990a844d2b..71625cc4e4b2fd3773baf1b2c1ea7e463b854ffa 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java -@@ -8,8 +8,16 @@ public class CraftSmallFireball extends CraftSizedFireball implements SmallFireb - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.SmallFireball getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.SmallFireball)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.SmallFireball getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.SmallFireball) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java -index 555337018fe218ac5a296a5e6a1d82720fee05e1..873b7e7a05b3465b79a82ed583ce16bb245ebcbf 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java -@@ -16,8 +16,16 @@ public class CraftSniffer extends CraftAnimals implements Sniffer { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.sniffer.Sniffer getHandleRaw() { -+ return (net.minecraft.world.entity.animal.sniffer.Sniffer)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.sniffer.Sniffer getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.sniffer.Sniffer) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java -index d959825fd11a94aba175934cd7739544a23958fc..9f53ba11a2adabdebd70eee5a811fec7dccd7b10 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java -@@ -8,8 +8,16 @@ public class CraftSnowball extends CraftThrowableProjectile implements Snowball - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.Snowball getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.Snowball)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.Snowball getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.Snowball) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java -index 4ce2373ff71c3c1b8951646e057587a3ab09e145..6f88f18fc23cb793d4394b80201e40b09a0a7f9d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java -@@ -19,8 +19,16 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok - this.getHandle().setPumpkin(!derpMode); - } - -+ // Folia start - region threading -+ @Override -+ public SnowGolem getHandleRaw() { -+ return (SnowGolem)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public SnowGolem getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (SnowGolem) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java -index 70f1f8740091d5a3d5983227ef2e6e166bb6ce7e..4886c9ba4bf952415ee4b1395adfeca8d928cdf5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java -@@ -9,8 +9,16 @@ public class CraftSpectralArrow extends CraftAbstractArrow implements SpectralAr - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.SpectralArrow getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.SpectralArrow)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.SpectralArrow getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.SpectralArrow) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java -index 525827f1747631fa108be7e1b7395b47d33aa397..3ec5d458a895300da462f63bae683980a741e477 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java -@@ -12,8 +12,16 @@ public class CraftSpellcaster extends CraftIllager implements Spellcaster { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public SpellcasterIllager getHandleRaw() { -+ return (SpellcasterIllager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public SpellcasterIllager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (SpellcasterIllager) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java -index b4afc37c21fc478df44fca7ec3fbc33d337dc6b7..bf3236f673118539d7cfb883bcdf84de7ae5bd73 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java -@@ -9,8 +9,16 @@ public class CraftSpider extends CraftMonster implements Spider { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Spider getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Spider)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Spider getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Spider) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java -index 067a95ea50418601acfb8b9453d1291161bb706a..3a41ef5fdecee262f3e8899deec360c35ddf1b6f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java -@@ -9,8 +9,16 @@ public class CraftSquid extends CraftAgeable implements Squid { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Squid getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Squid)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Squid getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Squid) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java -index 74fac97231d4d89d1b941a1b5295afc2dafc6007..27992471bb7727a17f5fee61046cc0718994403a 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java -@@ -65,8 +65,16 @@ public class CraftStrider extends CraftAnimals implements Strider { - return Material.WARPED_FUNGUS_ON_A_STICK; - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Strider getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Strider)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Strider getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Strider) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -index a61aec087fa7cec27a803668bdc1b9e6eb336755..1c3826dc868a78402531b6abdddd017c83dae853 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java -@@ -42,8 +42,16 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed { - this.getHandle().setFuse(fuseTicks); - } - -+ // Folia start - region threading -+ @Override -+ public PrimedTnt getHandleRaw() { -+ return (PrimedTnt)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public PrimedTnt getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (PrimedTnt) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java -index d7c6a0bbc5671ea8f2488230c94df5146a1e98b9..ea001c3e91478cde59eb6b7663013d43554e5fb5 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java -@@ -9,8 +9,16 @@ public class CraftTadpole extends CraftFish implements org.bukkit.entity.Tadpole - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Tadpole getHandleRaw() { -+ return (Tadpole)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Tadpole getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Tadpole) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java -index cedb8e67e208cdf954d052a4f0a100c1c07a962b..8bf3936ad7a42a98a14e82fcabd238712e8532c8 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java -@@ -12,8 +12,16 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public TamableAnimal getHandleRaw() { -+ return (TamableAnimal)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public TamableAnimal getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (TamableAnimal) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java -index 9ef939b76d06874b856e0c850addb364146f5a00..7dfed8c0be93bc2083ea40def6e2a806d336094e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java -@@ -13,8 +13,16 @@ public class CraftTextDisplay extends CraftDisplay implements TextDisplay { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.Display.TextDisplay getHandleRaw() { -+ return (net.minecraft.world.entity.Display.TextDisplay)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.Display.TextDisplay getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.Display.TextDisplay) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java -index bf7b111abdf42969218a3608d86a3313432bc0a0..b2b1b7ad56d0adc452b32a866fa0c6682fcd4882 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java -@@ -26,8 +26,16 @@ public abstract class CraftThrowableProjectile extends CraftProjectile implement - this.getHandle().setItem(CraftItemStack.asNMSCopy(item)); - } - -+ // Folia start - region threading -+ @Override -+ public ThrowableItemProjectile getHandleRaw() { -+ return (ThrowableItemProjectile)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ThrowableItemProjectile getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ThrowableItemProjectile) this.entity; - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java -index 5e7fef664c56d6087502e56a0eb4fc07d34ade9f..00d578700c09cab5b5ae99bcb27fa17048ac24b1 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java -@@ -9,8 +9,16 @@ public class CraftThrownExpBottle extends CraftThrowableProjectile implements Th - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public ThrownExperienceBottle getHandleRaw() { -+ return (ThrownExperienceBottle)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ThrownExperienceBottle getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ThrownExperienceBottle) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java -index 65b6de9d21da6843d7c7087f0dea98d3b75f24cf..8988f2a1e3fe6a296c245e893ddb927da1d59167 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java -@@ -61,8 +61,17 @@ public class CraftThrownPotion extends CraftThrowableProjectile implements Throw - this.getHandle().splash(null); - } - // Paper end -+ -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.ThrownPotion getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.ThrownPotion)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.ThrownPotion getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.ThrownPotion) this.entity; - } - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java -index 4b3a764114c8372e1549dadeeced26dc7727f2d1..b800efe68124c27f97114a69a096fca2d66e671e 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java -@@ -9,8 +9,16 @@ public class CraftTraderLlama extends CraftLlama implements TraderLlama { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.horse.TraderLlama getHandleRaw() { -+ return (net.minecraft.world.entity.animal.horse.TraderLlama)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.horse.TraderLlama getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.horse.TraderLlama) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java -index 4fc893378fb0568ddcffc7593d66df6bfe23f659..5ddc96b17ddbd152929b0548bfedc802bd6dd7ca 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java -@@ -12,8 +12,16 @@ public class CraftTrident extends CraftAbstractArrow implements Trident { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public ThrownTrident getHandleRaw() { -+ return (ThrownTrident)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public ThrownTrident getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (ThrownTrident) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java -index 9e53c30801c700719c78c0fd521fd615c94e02c8..11884c20e73846ec95288edcb514d3ae638eb803 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java -@@ -13,8 +13,16 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.TropicalFish getHandleRaw() { -+ return (net.minecraft.world.entity.animal.TropicalFish)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.TropicalFish getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.TropicalFish) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java -index d44e6f4bb682d18c1497eee9fb2802f2bda6e840..a857258419c666a0fe38f54a6197d19c84891028 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java -@@ -9,8 +9,16 @@ public class CraftTurtle extends CraftAnimals implements Turtle { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Turtle getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Turtle)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Turtle getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Turtle) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java -index e9ec3455eabc473e104b5342a615a38c1ac25a4f..3a65ae7e6ac1894855e4eafecc9c2bb87476298f 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java -@@ -13,8 +13,16 @@ public class CraftVex extends CraftMonster implements Vex { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Vex getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Vex)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Vex getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Vex) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index 8e895d6f84f7d84b219f2424909dd42e5f08dec4..e2341684f56a14b3a05fa65d9ac7b3adb52d9077 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -@@ -34,8 +34,16 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.npc.Villager getHandleRaw() { -+ return (net.minecraft.world.entity.npc.Villager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.npc.Villager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.npc.Villager) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java -index 3aa23d9f22d5cd22231293fd7d1ca4cb79eb7cb3..e705d49eafcf1def6e849bfc0ded4b7269a40ffb 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java -@@ -14,8 +14,16 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.ZombieVillager getHandleRaw() { -+ return (net.minecraft.world.entity.monster.ZombieVillager)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.ZombieVillager getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.ZombieVillager) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java -index bcd3370bc48520ea4bb53af25b892131d6ca0b33..8be282b028bc30056afc8852e8f47b287b238e73 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java -@@ -9,8 +9,16 @@ public class CraftVindicator extends CraftIllager implements Vindicator { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Vindicator getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Vindicator)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Vindicator getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Vindicator) super.getHandle(); - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java -index 3cceefa0d6278924a19641a49bdf16bcdacb2233..07d6b1296aeee0de3455380a8aeaedc8a9344735 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java -@@ -9,8 +9,16 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.npc.WanderingTrader getHandleRaw() { -+ return (net.minecraft.world.entity.npc.WanderingTrader)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.npc.WanderingTrader getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.npc.WanderingTrader) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java -index c284eb96a1e330078076cbe61f0f6e2ff4ed89bd..a53dee61a4669ac9c1d051ad9f881230a186e92c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java -@@ -15,8 +15,16 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public Warden getHandleRaw() { -+ return (Warden)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public Warden getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (Warden) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java -index 1b347deb6eb0b39c4a23936f7cd387421f06350d..4f26f0caca8a97d7770a569a65c1addaf6e9512c 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java -@@ -10,8 +10,16 @@ public class CraftWaterMob extends CraftCreature implements WaterMob { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public WaterAnimal getHandleRaw() { -+ return (WaterAnimal)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public WaterAnimal getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (WaterAnimal) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java -index 46447b9651dc48181916ce1306ee5deec397be12..c26120711251a17b558a97ae0e20789d5c33b104 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java -@@ -10,6 +10,7 @@ public class CraftWindCharge extends CraftAbstractWindCharge implements WindChar - - @Override - public net.minecraft.world.entity.projectile.windcharge.WindCharge getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.windcharge.WindCharge) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java -index 4b3d783cabcb2de1a67d7fbfb6f525bfb493aed1..216c97fb1d611b84322927c6eb97871dd05cf600 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java -@@ -15,8 +15,16 @@ public class CraftWitch extends CraftRaider implements Witch, com.destroystokyo. - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Witch getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Witch)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Witch getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Witch) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -index 7881c6253c1d652c0c0d54a9a8accdf0a1ff0f3e..077b5685ccd1b5972ef92aa759ebabe5ec6d23c6 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -@@ -21,8 +21,16 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok - } - } - -+ // Folia start - region threading -+ @Override -+ public WitherBoss getHandleRaw() { -+ return (WitherBoss)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public WitherBoss getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (WitherBoss) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java -index bc978391255c9414e06ff393f2e6707d329d020a..8d436a1453c8a66422c2a735764273176a6a4545 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java -@@ -18,8 +18,16 @@ public class CraftWitherSkull extends CraftFireball implements WitherSkull { - return this.getHandle().isDangerous(); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.projectile.WitherSkull getHandleRaw() { -+ return (net.minecraft.world.entity.projectile.WitherSkull)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.projectile.WitherSkull getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.projectile.WitherSkull) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -index ecd33b4add46acbe4e4f8879c0601220423d66ca..5b4c42eb9ade06ad2470e938a8717637e658e026 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -@@ -31,8 +31,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { - } - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.animal.Wolf getHandleRaw() { -+ return (net.minecraft.world.entity.animal.Wolf)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.animal.Wolf getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.animal.Wolf) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java -index c134c4bb8c0377ceb7f8a5c40c94fd6312a9e448..d334e4a3ea075670e0aa7ea1429ffe4231eb0559 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java -@@ -19,8 +19,16 @@ public class CraftZoglin extends CraftMonster implements Zoglin { - this.getHandle().setBaby(flag); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Zoglin getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Zoglin)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Zoglin getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Zoglin) this.entity; - } - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java -index dfc2b40e20069705f92d86a6898e3e8348bf4dcd..9e158d32dc13f8890511de1496d9d5b4c1956e3b 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java -@@ -12,8 +12,16 @@ public class CraftZombie extends CraftMonster implements Zombie { - super(server, entity); - } - -+ // Folia start - region threading -+ @Override -+ public net.minecraft.world.entity.monster.Zombie getHandleRaw() { -+ return (net.minecraft.world.entity.monster.Zombie)this.entity; -+ } -+ // Folia end - region threading -+ - @Override - public net.minecraft.world.entity.monster.Zombie getHandle() { -+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading - return (net.minecraft.world.entity.monster.Zombie) this.entity; - } - diff --git a/folia-server/paper-patches/features/0010-Region-profiler.patch b/folia-server/paper-patches/features/0004-Region-profiler.patch similarity index 100% rename from folia-server/paper-patches/features/0010-Region-profiler.patch rename to folia-server/paper-patches/features/0004-Region-profiler.patch diff --git a/folia-server/paper-patches/features/0011-Add-watchdog-thread.patch b/folia-server/paper-patches/features/0005-Add-watchdog-thread.patch similarity index 100% rename from folia-server/paper-patches/features/0011-Add-watchdog-thread.patch rename to folia-server/paper-patches/features/0005-Add-watchdog-thread.patch diff --git a/folia-server/paper-patches/features/0005-Throw-UnsupportedOperationException-for-broken-APIs.patch b/folia-server/paper-patches/features/0005-Throw-UnsupportedOperationException-for-broken-APIs.patch deleted file mode 100644 index aeab88d..0000000 --- a/folia-server/paper-patches/features/0005-Throw-UnsupportedOperationException-for-broken-APIs.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Wed, 22 Mar 2023 14:40:24 -0700 -Subject: [PATCH] Throw UnsupportedOperationException() for broken APIs - - -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 82e4b25fbfb27d4a2a96a0785daf2168c60584aa..62a9bb77078522c3a98806083a4995251e036138 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1320,6 +1320,7 @@ public final class CraftServer implements Server { - - @Override - public World createWorld(WorldCreator creator) { -+ if (true) throw new UnsupportedOperationException(); // Folia - not implemented properly yet - Preconditions.checkState(this.console.getAllLevels().iterator().hasNext(), "Cannot create additional worlds on STARTUP"); - //Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot create a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes. - Preconditions.checkArgument(creator != null, "WorldCreator cannot be null"); -@@ -1517,6 +1518,7 @@ public final class CraftServer implements Server { - - @Override - public boolean unloadWorld(World world, boolean save) { -+ if (true) throw new UnsupportedOperationException(); // Folia - not implemented properly yet - //Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot unload a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes. - if (world == null) { - return false; -diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java -index 253574890a9ed23d38a84680ba1eb221dc72b310..ce8b91f00f925960ad17f381162a11294e8b511d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java -+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java -@@ -45,6 +45,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard { - } - @Override - public CraftObjective registerNewObjective(String name, Criteria criteria, net.kyori.adventure.text.Component displayName, RenderType renderType) throws IllegalArgumentException { -+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet - if (displayName == null) { - displayName = net.kyori.adventure.text.Component.empty(); - } -@@ -204,6 +205,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard { - - @Override - public Team registerNewTeam(String name) { -+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet - Preconditions.checkArgument(name != null, "Team name cannot be null"); - Preconditions.checkArgument(name.length() <= Short.MAX_VALUE, "Team name '%s' is longer than the limit of 32767 characters (%s)", name, name.length()); - Preconditions.checkArgument(this.board.getPlayerTeam(name) == null, "Team name '%s' is already in use", name); -@@ -231,6 +233,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard { - - @Override - public void clearSlot(DisplaySlot slot) { -+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet - Preconditions.checkArgument(slot != null, "Slot cannot be null"); - this.board.setDisplayObjective(CraftScoreboardTranslations.fromBukkitSlot(slot), null); - } -diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -index f3184be3853dfc4df4ae4b8af764dfef07628ef4..99ba4d19b72a66ea1fc83fda16d37aaa0f154abb 100644 ---- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -@@ -42,6 +42,7 @@ public final class CraftScoreboardManager implements ScoreboardManager { - - @Override - public CraftScoreboard getNewScoreboard() { -+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet - org.spigotmc.AsyncCatcher.catchOp("scoreboard creation"); // Spigot - CraftScoreboard scoreboard = new CraftScoreboard(new ServerScoreboard(this.server)); - // Paper start -@@ -68,6 +69,7 @@ public final class CraftScoreboardManager implements ScoreboardManager { - - // CraftBukkit method - public void setPlayerBoard(CraftPlayer player, org.bukkit.scoreboard.Scoreboard bukkitScoreboard) { -+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet - Preconditions.checkArgument(bukkitScoreboard instanceof CraftScoreboard, "Cannot set player scoreboard to an unregistered Scoreboard"); - - CraftScoreboard scoreboard = (CraftScoreboard) bukkitScoreboard; diff --git a/folia-server/paper-patches/features/0007-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch b/folia-server/paper-patches/features/0007-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch deleted file mode 100644 index bcbce29..0000000 --- a/folia-server/paper-patches/features/0007-Require-plugins-to-be-explicitly-marked-as-Folia-sup.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Owen1212055 <23108066+Owen1212055@users.noreply.github.com> -Date: Wed, 29 Mar 2023 16:50:14 -0400 -Subject: [PATCH] Require plugins to be explicitly marked as Folia supported - - -diff --git a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java -index d3b3a8baca013909fa9c6204d964d7d7efeb2719..fb7c6621e2805f4339c255f6c2e02c55ff4c502e 100644 ---- a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java -+++ b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java -@@ -64,6 +64,7 @@ public class PaperPluginMeta implements PluginMeta { - private PermissionConfiguration permissionConfiguration = new PermissionConfiguration(PermissionDefault.OP, List.of()); - @Required - private ApiVersion apiVersion; -+ private boolean foliaSupported = false; // Folia - - private Map> dependencies = new EnumMap<>(PluginDependencyLifeCycle.class); - -@@ -251,6 +252,13 @@ public class PaperPluginMeta implements PluginMeta { - return this.apiVersion.getVersionString(); - } - -+ // Folia start -+ @Override -+ public boolean isFoliaSupported() { -+ return this.foliaSupported; -+ } -+ // Folia end -+ - @Override - public @NotNull List getProvidedPlugins() { - return this.provides; -diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java -index 0a27b468560ccf4b9588cd12d50c02e442f3024f..6369b13e1fcdbdb25dd9d6e4d3bffdedbee4f739 100644 ---- a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java -+++ b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java -@@ -24,6 +24,11 @@ class PaperPluginProviderFactory implements PluginTypeFactory -Date: Wed, 31 Jul 2024 11:27:24 -0700 -Subject: [PATCH] Disable spark profiler - -It's not thread-safe. The plugin instead needs to be used. - -diff --git a/src/main/java/io/papermc/paper/SparksFly.java b/src/main/java/io/papermc/paper/SparksFly.java -index 2ad5b9b0b7e18780ee73310451d9fa73f44c4bdb..b332645ed65928100f580221d8a9948bc77e362e 100644 ---- a/src/main/java/io/papermc/paper/SparksFly.java -+++ b/src/main/java/io/papermc/paper/SparksFly.java -@@ -116,7 +116,7 @@ public final class SparksFly { - - private void enable() { - if (!this.enabled) { -- if (GlobalConfiguration.get().spark.enabled) { -+ if (false) { // Folia - disable in-built spark profiler - this.enabled = true; - this.spark.enable(); - } else { -@@ -168,7 +168,7 @@ public final class SparksFly { - } - - public static boolean isPluginPreferred() { -- return Boolean.getBoolean(PREFER_SPARK_PLUGIN_PROPERTY); -+ return true; // Folia - disable in-built spark profiler - } - - private static boolean isPluginEnabled(final Server server) { diff --git a/folia-server/paper-patches/files/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java.patch b/folia-server/paper-patches/files/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java.patch new file mode 100644 index 0000000..89fddcd --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java.patch @@ -0,0 +1,184 @@ +--- a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java ++++ b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java +@@ -1,5 +_,11 @@ + package ca.spottedleaf.moonrise.common.util; + ++import io.papermc.paper.threadedregions.RegionShutdownThread; ++import io.papermc.paper.threadedregions.RegionizedServer; ++import io.papermc.paper.threadedregions.RegionizedWorldData; ++import io.papermc.paper.threadedregions.ThreadedRegionizer; ++import io.papermc.paper.threadedregions.TickRegionScheduler; ++import io.papermc.paper.threadedregions.TickRegions; + import net.minecraft.core.BlockPos; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.level.ChunkPos; +@@ -119,50 +_,157 @@ + } + + public static boolean isShutdownThread() { +- return false; ++ return Thread.currentThread().getClass() == RegionShutdownThread.class; + } + + public static boolean isTickThreadFor(final Level world, final BlockPos pos) { +- return isTickThread(); ++ return isTickThreadFor(world, pos.getX() >> 4, pos.getZ() >> 4); + } + + public static boolean isTickThreadFor(final Level world, final BlockPos pos, final int blockRadius) { +- return isTickThread(); ++ return isTickThreadFor( ++ world, ++ (pos.getX() - blockRadius) >> 4, (pos.getZ() - blockRadius) >> 4, ++ (pos.getX() + blockRadius) >> 4, (pos.getZ() + blockRadius) >> 4 ++ ); + } + + public static boolean isTickThreadFor(final Level world, final ChunkPos pos) { +- return isTickThread(); ++ return isTickThreadFor(world, pos.x, pos.z); + } + + public static boolean isTickThreadFor(final Level world, final Vec3 pos) { +- return isTickThread(); ++ return isTickThreadFor(world, net.minecraft.util.Mth.floor(pos.x) >> 4, net.minecraft.util.Mth.floor(pos.z) >> 4); + } + + public static boolean isTickThreadFor(final Level world, final int chunkX, final int chunkZ) { +- return isTickThread(); ++ final ThreadedRegionizer.ThreadedRegion region = ++ TickRegionScheduler.getCurrentRegion(); ++ if (region == null) { ++ return isShutdownThread(); ++ } ++ return ((net.minecraft.server.level.ServerLevel)world).regioniser.getRegionAtUnsynchronised(chunkX, chunkZ) == region; + } + + public static boolean isTickThreadFor(final Level world, final AABB aabb) { +- return isTickThread(); ++ return isTickThreadFor( ++ world, ++ CoordinateUtils.getChunkCoordinate(aabb.minX), CoordinateUtils.getChunkCoordinate(aabb.minZ), ++ CoordinateUtils.getChunkCoordinate(aabb.maxX), CoordinateUtils.getChunkCoordinate(aabb.maxZ) ++ ); + } + + public static boolean isTickThreadFor(final Level world, final double blockX, final double blockZ) { +- return isTickThread(); ++ return isTickThreadFor(world, CoordinateUtils.getChunkCoordinate(blockX), CoordinateUtils.getChunkCoordinate(blockZ)); + } + + public static boolean isTickThreadFor(final Level world, final Vec3 position, final Vec3 deltaMovement, final int buffer) { +- return isTickThread(); ++ final int fromChunkX = CoordinateUtils.getChunkX(position); ++ final int fromChunkZ = CoordinateUtils.getChunkZ(position); ++ ++ final int toChunkX = CoordinateUtils.getChunkCoordinate(position.x + deltaMovement.x); ++ final int toChunkZ = CoordinateUtils.getChunkCoordinate(position.z + deltaMovement.z); ++ ++ // expect from < to, but that may not be the case ++ return isTickThreadFor( ++ world, ++ Math.min(fromChunkX, toChunkX) - buffer, ++ Math.min(fromChunkZ, toChunkZ) - buffer, ++ Math.max(fromChunkX, toChunkX) + buffer, ++ Math.max(fromChunkZ, toChunkZ) + buffer ++ ); + } + + public static boolean isTickThreadFor(final Level world, final int fromChunkX, final int fromChunkZ, final int toChunkX, final int toChunkZ) { +- return isTickThread(); ++ final ThreadedRegionizer.ThreadedRegion region = ++ TickRegionScheduler.getCurrentRegion(); ++ if (region == null) { ++ return isShutdownThread(); ++ } ++ ++ final int shift = ((net.minecraft.server.level.ServerLevel)world).regioniser.sectionChunkShift; ++ ++ final int minSectionX = fromChunkX >> shift; ++ final int maxSectionX = toChunkX >> shift; ++ final int minSectionZ = fromChunkZ >> shift; ++ final int maxSectionZ = toChunkZ >> shift; ++ ++ for (int secZ = minSectionZ; secZ <= maxSectionZ; ++secZ) { ++ for (int secX = minSectionX; secX <= maxSectionX; ++secX) { ++ final int lowerLeftCX = secX << shift; ++ final int lowerLeftCZ = secZ << shift; ++ if (((net.minecraft.server.level.ServerLevel)world).regioniser.getRegionAtUnsynchronised(lowerLeftCX, lowerLeftCZ) != region) { ++ return false; ++ } ++ } ++ } ++ ++ return true; + } + + public static boolean isTickThreadFor(final Level world, final int chunkX, final int chunkZ, final int radius) { +- return isTickThread(); ++ return isTickThreadFor(world, chunkX - radius, chunkZ - radius, chunkX + radius, chunkZ + radius); + } + + public static boolean isTickThreadFor(final Entity entity) { +- return isTickThread(); ++ if (entity == null) { ++ return true; ++ } ++ final ThreadedRegionizer.ThreadedRegion region = ++ TickRegionScheduler.getCurrentRegion(); ++ if (region == null) { ++ if (RegionizedServer.isGlobalTickThread()) { ++ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { ++ final net.minecraft.server.network.ServerGamePacketListenerImpl possibleBad = serverPlayer.connection; ++ if (possibleBad == null) { ++ return true; ++ } ++ ++ final net.minecraft.network.PacketListener packetListener = possibleBad.connection.getPacketListener(); ++ if (packetListener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) { ++ return gamePacketListener.waitingForSwitchToConfig; ++ } ++ if (packetListener instanceof net.minecraft.server.network.ServerConfigurationPacketListenerImpl configurationPacketListener) { ++ return !configurationPacketListener.switchToMain; ++ } ++ return true; ++ } else { ++ return false; ++ } ++ } ++ if (isShutdownThread()) { ++ return true; ++ } ++ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { ++ // off-main access to server player is never ok, server player is owned by one of global context or region context always ++ return false; ++ } ++ // only own entities that have not yet been added to the world ++ ++ // if the entity is removed, then it was in the world previously - which means that a region containing its location ++ // owns it ++ // if the entity has a callback, then it is contained in a world ++ return entity.hasNullCallback() && !entity.isRemoved(); ++ } ++ ++ final Level world = entity.level(); ++ if (world != region.regioniser.world) { ++ // world mismatch ++ return false; ++ } ++ ++ final RegionizedWorldData worldData = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData(); ++ ++ // pass through the check if the entity is removed and we own its chunk ++ if (worldData.hasEntity(entity)) { ++ return true; ++ } ++ ++ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { ++ net.minecraft.server.network.ServerGamePacketListenerImpl conn = serverPlayer.connection; ++ return conn != null && worldData.connections.contains(conn.connection); ++ } else { ++ return ((entity.hasNullCallback() || entity.isRemoved())) && isTickThreadFor((net.minecraft.server.level.ServerLevel)world, entity.chunkPosition()); ++ } + } + } diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/SparksFly.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/SparksFly.java.patch new file mode 100644 index 0000000..47ae398 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/SparksFly.java.patch @@ -0,0 +1,57 @@ +--- a/src/main/java/io/papermc/paper/SparksFly.java ++++ b/src/main/java/io/papermc/paper/SparksFly.java +@@ -33,13 +_,13 @@ + + private final Logger logger; + private final PaperSparkModule spark; +- private final ConcurrentLinkedQueue mainThreadTaskQueue; ++ // Folia - region threading + + private boolean enabled; + private boolean disabledInConfigurationWarningLogged; + + public SparksFly(final Server server) { +- this.mainThreadTaskQueue = new ConcurrentLinkedQueue<>(); ++ // Folia - region threading + this.logger = Logger.getLogger(ID); + this.logger.log(Level.INFO, "This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling"); + this.spark = PaperSparkModule.create(Compatibility.VERSION_1_0, server, this.logger, new PaperScheduler() { +@@ -50,7 +_,7 @@ + + @Override + public void executeSync(final Runnable runnable) { +- SparksFly.this.mainThreadTaskQueue.offer(this.catching(runnable, "synchronous")); ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(this.catching(runnable, "synchronous")); // Folia - region threading + } + + private Runnable catching(final Runnable runnable, final String type) { +@@ -88,10 +_,7 @@ + } + + public void executeMainThreadTasks() { +- Runnable task; +- while ((task = this.mainThreadTaskQueue.poll()) != null) { +- task.run(); +- } ++ throw new UnsupportedOperationException(); // Folia - region threading + } + + public void enableEarlyIfRequested() { +@@ -119,7 +_,7 @@ + + private void enable() { + if (!this.enabled) { +- if (GlobalConfiguration.get().spark.enabled) { ++ if (false) { // Folia - disable in-built spark profiler + this.enabled = true; + this.spark.enable(); + } else { +@@ -171,7 +_,7 @@ + } + + public static boolean isPluginPreferred() { +- return Boolean.getBoolean(PREFER_SPARK_PLUGIN_PROPERTY); ++ return true; // Folia - disable in-built spark profiler + } + + private static boolean isPluginEnabled(final Server server) { diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/ChatProcessor.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/ChatProcessor.java.patch new file mode 100644 index 0000000..712e9b1 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/ChatProcessor.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java ++++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java +@@ -83,7 +_,7 @@ + final CraftPlayer player = this.player.getBukkitEntity(); + final AsyncPlayerChatEvent ae = new AsyncPlayerChatEvent(this.async, player, this.craftbukkit$originalMessage, new LazyPlayerSet(this.server)); + this.post(ae); +- if (listenersOnSyncEvent) { ++ if (false && listenersOnSyncEvent) { // Folia - region threading + final PlayerChatEvent se = new PlayerChatEvent(player, ae.getMessage(), ae.getFormat(), ae.getRecipients()); + se.setCancelled(ae.isCancelled()); // propagate cancelled state + this.queueIfAsyncOrRunImmediately(new Waitable() { +@@ -150,7 +_,7 @@ + ae.setCancelled(cancelled); // propagate cancelled state + this.post(ae); + final boolean listenersOnSyncEvent = canYouHearMe(ChatEvent.getHandlerList()); +- if (listenersOnSyncEvent) { ++ if (false && listenersOnSyncEvent) { // Folia - region threading + this.queueIfAsyncOrRunImmediately(new Waitable() { + @Override + protected Void evaluate() { diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java.patch new file mode 100644 index 0000000..9aa9565 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java.patch @@ -0,0 +1,57 @@ +--- a/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java ++++ b/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java +@@ -23,35 +_,42 @@ + + public static final class CallbackManager { + +- private final Map callbacks = new HashMap<>(); +- private final Queue queue = new ConcurrentLinkedQueue<>(); ++ private final java.util.concurrent.ConcurrentHashMap callbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Folia - region threading ++ // Folia - region threading + + private CallbackManager() { + } + + public UUID addCallback(final @NotNull ClickCallback callback, final ClickCallback.@NotNull Options options) { + final UUID id = UUID.randomUUID(); +- this.queue.add(new StoredCallback(callback, options, id)); ++ final StoredCallback scb = new StoredCallback(callback, options, id); // Folia - region threading ++ this.callbacks.put(scb.id(), scb); // Folia - region threading + return id; + } + + public void handleQueue(final int currentTick) { + // Evict expired entries + if (currentTick % 100 == 0) { +- this.callbacks.values().removeIf(callback -> !callback.valid()); ++ this.callbacks.values().removeIf(StoredCallback::expired); // Folia - region threading - don't read uses field + } + +- // Add entries from queue +- StoredCallback callback; +- while ((callback = this.queue.poll()) != null) { +- this.callbacks.put(callback.id(), callback); +- } ++ // Folia - region threading + } + + public void runCallback(final @NotNull Audience audience, final UUID id) { +- final StoredCallback callback = this.callbacks.get(id); +- if (callback != null && callback.valid()) { //TODO Message if expired/invalid? +- callback.takeUse(); ++ // Folia start - region threading ++ final StoredCallback[] use = new StoredCallback[1]; ++ this.callbacks.computeIfPresent(id, (final UUID keyInMap, final StoredCallback value) -> { ++ if (!value.valid()) { ++ return null; ++ } ++ use[0] = value; ++ value.takeUse(); ++ return value.valid() ? value : null; ++ }); ++ final StoredCallback callback = use[0]; ++ if (callback != null) { //TODO Message if expired/invalid? ++ // Folia end - region threading + callback.callback.accept(audience); + } + } diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/PaperCommands.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/PaperCommands.java.patch new file mode 100644 index 0000000..b67e21c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/PaperCommands.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/io/papermc/paper/command/PaperCommands.java ++++ b/src/main/java/io/papermc/paper/command/PaperCommands.java +@@ -19,6 +_,7 @@ + COMMANDS.put("paper", new PaperCommand("paper")); + COMMANDS.put("callback", new CallbackCommand("callback")); + COMMANDS.put("mspt", new MSPTCommand("mspt")); ++ COMMANDS.put("tps", new io.papermc.paper.threadedregions.commands.CommandServerHealth()); // Folia - region threading + } + + public static void registerCommands(final MinecraftServer server) { diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java.patch new file mode 100644 index 0000000..61df3e3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java.patch @@ -0,0 +1,11 @@ +--- a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java ++++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java +@@ -129,7 +_,7 @@ + final int z = (e.getKey().z << 4) + 8; + final Component message = text(" " + e.getValue() + ": " + e.getKey().x + ", " + e.getKey().z + (chunkProviderServer.isPositionTicking(e.getKey().toLong()) ? " (Ticking)" : " (Non-Ticking)")) + .hoverEvent(HoverEvent.showText(text("Click to teleport to chunk", GREEN))) +- .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (world.getWorld().getHighestBlockYAt(x, z, HeightMap.MOTION_BLOCKING) + 1) + " " + z)); ++ .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (128) + " " + z)); // Folia - region threading - avoid sync load here + sender.sendMessage(message); + }); + } else { diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java.patch new file mode 100644 index 0000000..57b1571 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java.patch @@ -0,0 +1,12 @@ +--- a/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java ++++ b/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java +@@ -18,7 +_,9 @@ + public final class HeapDumpCommand implements PaperSubcommand { + @Override + public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading + this.dumpHeap(sender); ++ }); // Folia - region threading + return true; + } + diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java.patch new file mode 100644 index 0000000..04acff5 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java.patch @@ -0,0 +1,12 @@ +--- a/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java ++++ b/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java +@@ -16,7 +_,9 @@ + public final class ReloadCommand implements PaperSubcommand { + @Override + public boolean execute(final CommandSender sender, final String subCommand, final String[] args) { ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading + this.doReload(sender); ++ }); // Folia - region threading + return true; + } + diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java.patch new file mode 100644 index 0000000..a022543 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java ++++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +@@ -396,4 +_,17 @@ + } + } + } ++ // Folia start - threaded regions ++ public ThreadedRegions threadedRegions; ++ public class ThreadedRegions extends ConfigurationPart { ++ ++ public int threads = -1; ++ public int gridExponent = 4; ++ ++ @PostProcess ++ public void postProcess() { ++ io.papermc.paper.threadedregions.TickRegions.init(this); ++ } ++ } ++ // Folia end - threaded regions + } diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java.patch new file mode 100644 index 0000000..9eefbc0 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java.patch @@ -0,0 +1,17 @@ +--- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java ++++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +@@ -493,6 +_,14 @@ + public Chunks chunks; + + public class Chunks extends ConfigurationPart { ++ ++ // Folia start - region threading - force prevent moving into unloaded chunks ++ @PostProcess ++ public void postProcess() { ++ this.preventMovingIntoUnloadedChunks = true; ++ } ++ // Folia end - region threading - force prevent moving into unloaded chunks ++ + public AutosavePeriod autoSaveInterval = AutosavePeriod.def(); + public int maxAutoSaveChunksPerTick = 24; + public int fixedChunkInhabitedTime = -1; diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java.patch new file mode 100644 index 0000000..c680038 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java ++++ b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractSchoolingFish getHandleRaw() { ++ return (AbstractSchoolingFish)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractSchoolingFish getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractSchoolingFish) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/activation/ActivationType.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/activation/ActivationType.java.patch new file mode 100644 index 0000000..360738d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/entity/activation/ActivationType.java.patch @@ -0,0 +1,11 @@ +--- a/src/main/java/io/papermc/paper/entity/activation/ActivationType.java ++++ b/src/main/java/io/papermc/paper/entity/activation/ActivationType.java +@@ -19,7 +_,7 @@ + RAIDER, + MISC; + +- AABB boundingBox = new AABB(0, 0, 0, 0, 0, 0); ++ //AABB boundingBox = new AABB(0, 0, 0, 0, 0, 0); // Folia - threaded regions - replaced by local variable + + /** + * Returns the activation type for the given entity. diff --git a/folia-server/paper-patches/features/0008-Synchronize-PaperPermissionManager.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java.patch similarity index 83% rename from folia-server/paper-patches/features/0008-Synchronize-PaperPermissionManager.patch rename to folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java.patch index 4229ce4..b0edbe2 100644 --- a/folia-server/paper-patches/features/0008-Synchronize-PaperPermissionManager.patch +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java.patch @@ -1,20 +1,6 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Mon, 15 May 2023 10:58:06 -0700 -Subject: [PATCH] Synchronize PaperPermissionManager - -Since multiple regions can exist, there are concurrent accesses -in this class. To prevent deadlock, the monitor is not held -when recalculating permissions, as Permissable holds its own -lock. - -This fixes CMEs originating from this class. - -diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java -index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276efceda41 100644 --- a/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java +++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java -@@ -32,7 +32,9 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -32,7 +_,9 @@ @Override @Nullable public Permission getPermission(@NotNull String name) { @@ -24,7 +10,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 } @Override -@@ -52,12 +54,24 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -52,12 +_,24 @@ private void addPermission(@NotNull Permission perm, boolean dirty) { String name = perm.getName().toLowerCase(java.util.Locale.ENGLISH); @@ -50,7 +36,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 } @Override -@@ -80,42 +94,58 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -80,42 +_,58 @@ @Override public void recalculatePermissionDefaults(@NotNull Permission perm) { @@ -62,6 +48,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 this.defaultPerms().get(false).remove(perm); - this.calculatePermissionDefault(perm, true); +- } + recalc = this.calculatePermissionDefault(perm, true); // Folia - synchronized + } + } // Folia - synchronized @@ -72,7 +59,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 + } else { + this.dirtyPermissibles(false); + } - } ++ } + // Folia end - synchronize this class - we hold a lock now, prevent deadlock by moving this out } @@ -113,7 +100,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 Map map = this.permSubs().get(name); if (map != null) { -@@ -125,11 +155,13 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -125,11 +_,13 @@ this.permSubs().remove(name); } } @@ -127,7 +114,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 String name = permission.toLowerCase(java.util.Locale.ENGLISH); Map map = this.permSubs().get(name); -@@ -138,17 +170,21 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -138,17 +_,21 @@ } else { return ImmutableSet.copyOf(map.keySet()); } @@ -149,7 +136,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 Map map = this.defSubs().get(op); if (map != null) { -@@ -158,11 +194,13 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -158,11 +_,13 @@ this.defSubs().remove(op); } } @@ -163,7 +150,7 @@ index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276 Map map = this.defSubs().get(op); if (map == null) { -@@ -170,19 +208,24 @@ abstract class PaperPermissionManager implements PermissionManager { +@@ -170,19 +_,24 @@ } else { return ImmutableSet.copyOf(map.keySet()); } diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java.patch new file mode 100644 index 0000000..0aba61f --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java.patch @@ -0,0 +1,16 @@ +--- a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java ++++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java +@@ -256,12 +_,7 @@ + + pluginName + " (Is it up to date?)", ex, plugin); // Paper + } + +- try { +- this.server.getScheduler().cancelTasks(plugin); +- } catch (Throwable ex) { +- this.handlePluginException("Error occurred (in the plugin loader) while cancelling tasks for " +- + pluginName + " (Is it up to date?)", ex, plugin); // Paper +- } ++ // Folia - region threading + + // Paper start - Folia schedulers + try { diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java.patch new file mode 100644 index 0000000..37ea36b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java.patch @@ -0,0 +1,24 @@ +--- a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java ++++ b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java +@@ -64,6 +_,7 @@ + private PermissionConfiguration permissionConfiguration = new PermissionConfiguration(PermissionDefault.OP, List.of()); + @Required + private ApiVersion apiVersion; ++ private boolean foliaSupported = false; // Folia + + private Map> dependencies = new EnumMap<>(PluginDependencyLifeCycle.class); + +@@ -250,6 +_,13 @@ + public @NotNull String getAPIVersion() { + return this.apiVersion.getVersionString(); + } ++ ++ // Folia start ++ @Override ++ public boolean isFoliaSupported() { ++ return this.foliaSupported; ++ } ++ // Folia end + + @Override + public @NotNull List getProvidedPlugins() { diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java.patch new file mode 100644 index 0000000..7d64071 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java.patch @@ -0,0 +1,14 @@ +--- a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java ++++ b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java +@@ -24,6 +_,11 @@ + + @Override + public PaperPluginParent build(JarFile file, PaperPluginMeta configuration, Path source) { ++ // Folia start - block plugins not marked as supported ++ if (!configuration.isFoliaSupported()) { ++ throw new RuntimeException("Could not load plugin '" + configuration.getDisplayName() + "' as it is not marked as supporting Folia!"); ++ } ++ // Folia end - block plugins not marked as supported + Logger jul = PaperPluginLogger.getLogger(configuration); + ComponentLogger logger = ComponentLogger.logger(jul.getName()); + PluginProviderContext context = PluginProviderContextImpl.create(configuration, logger, source); diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java.patch new file mode 100644 index 0000000..f8a75e0 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java.patch @@ -0,0 +1,14 @@ +--- a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java ++++ b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java +@@ -35,6 +_,11 @@ + + @Override + public SpigotPluginProvider build(JarFile file, PluginDescriptionFile configuration, Path source) throws InvalidDescriptionException { ++ // Folia start - block plugins not marked as supported ++ if (!configuration.isFoliaSupported()) { ++ throw new RuntimeException("Could not load plugin '" + configuration.getDisplayName() + "' as it is not marked as supporting Folia!"); ++ } ++ // Folia end - block plugins not marked as supported + // Copied from SimplePluginManager#loadPlugins + // Spigot doesn't validate the name when the config is created, and instead when the plugin is loaded. + // Paper plugin configuration will do these checks in config serializer instead of when this is created. diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java.patch new file mode 100644 index 0000000..00b3679 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java.patch @@ -0,0 +1,17 @@ +--- a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java ++++ b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java +@@ -50,6 +_,14 @@ + this.entity = Validate.notNull(entity); + } + ++ // Folia start - region threading ++ public boolean isRetired() { ++ synchronized (this.stateLock) { ++ return this.tickCount == RETIRED_TICK_COUNT; ++ } ++ } ++ // Folia end - region threading ++ + /** + * Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback + * on all currently scheduled tasks. diff --git a/folia-server/paper-patches/files/src/main/java/io/papermc/paper/util/MCUtil.java.patch b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/util/MCUtil.java.patch new file mode 100644 index 0000000..89d2d8c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/io/papermc/paper/util/MCUtil.java.patch @@ -0,0 +1,41 @@ +--- a/src/main/java/io/papermc/paper/util/MCUtil.java ++++ b/src/main/java/io/papermc/paper/util/MCUtil.java +@@ -94,6 +_,7 @@ + */ + public static void ensureMain(String reason, Runnable run) { + if (!isMainThread()) { ++ if (true) throw new UnsupportedOperationException(); // Folia - region threading + if (reason != null) { + MinecraftServer.LOGGER.warn("Asynchronous " + reason + "!", new IllegalStateException()); + } +@@ -147,6 +_,30 @@ + public static Location toLocation(Level world, BlockPos pos) { + return new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()); + } ++ ++ // Folia start - TODO MERGE INTO MCUTIL ++ /** ++ * Converts a NMS World/Vector to Bukkit Location ++ * @param world ++ * @param pos ++ * @return ++ */ ++ public static Location toLocation(Level world, Vec3 pos) { ++ return new Location(world.getWorld(), pos.x(), pos.y(), pos.z()); ++ } ++ ++ /** ++ * Converts a NMS World/Vector to Bukkit Location ++ * @param world ++ * @param pos ++ * @param yaw ++ * @param pitch ++ * @return ++ */ ++ public static Location toLocation(Level world, Vec3 pos, float yaw, float pitch) { ++ return new Location(world.getWorld(), pos.x(), pos.y(), pos.z(), yaw, pitch); ++ } ++ // Folia end - TODO MERGE INTO MCUTIL + + public static BlockPos toBlockPosition(Location loc) { + return new BlockPos(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch new file mode 100644 index 0000000..a7e2dc5 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftServer.java.patch @@ -0,0 +1,102 @@ +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -315,7 +_,7 @@ + public final io.papermc.paper.SparksFly spark; // Paper - spark + + // Paper start - Folia region threading API +- private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler(); ++ private final io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler(); // Folia - region threading + private final io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler asyncScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler(); + private final io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler globalRegionScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler(); + +@@ -392,7 +_,7 @@ + + @Override + public final boolean isGlobalTickThread() { +- return ca.spottedleaf.moonrise.common.util.TickThread.isTickThread(); ++ return io.papermc.paper.threadedregions.RegionizedServer.isGlobalTickThread(); // Folia - region threading API + } + // Paper end - Folia reagion threading API + +@@ -987,6 +_,9 @@ + + // NOTE: Should only be called from DedicatedServer.ah() + public boolean dispatchServerCommand(CommandSender sender, ConsoleInput serverCommand) { ++ // Folia start - region threading ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("May not dispatch server commands async"); ++ // Folia end - region threading + if (sender instanceof Conversable) { + Conversable conversable = (Conversable) sender; + +@@ -1006,12 +_,46 @@ + } + } + ++ // Folia start - region threading ++ public void dispatchCmdAsync(CommandSender sender, String commandLine) { ++ if ((sender instanceof Entity entity)) { ++ ((org.bukkit.craftbukkit.entity.CraftEntity)entity).taskScheduler.schedule( ++ (nmsEntity) -> { ++ CraftServer.this.dispatchCommand(nmsEntity.getBukkitEntity(), commandLine); ++ }, ++ null, ++ 1L ++ ); ++ } else if (sender instanceof ConsoleCommandSender || sender instanceof io.papermc.paper.commands.FeedbackForwardingSender) { ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { ++ CraftServer.this.dispatchCommand(sender, commandLine); ++ }); ++ } else { ++ // huh? ++ throw new UnsupportedOperationException("Dispatching command for " + sender); ++ } ++ } ++ // Folia end - region threading ++ + @Override + public boolean dispatchCommand(CommandSender sender, String commandLine) { + Preconditions.checkArgument(sender != null, "sender cannot be null"); + Preconditions.checkArgument(commandLine != null, "commandLine cannot be null"); + org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + commandLine); // Spigot // Paper - Include command in error message + ++ // Folia start - region threading ++ if ((sender instanceof Entity entity)) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(((org.bukkit.craftbukkit.entity.CraftEntity)entity).getHandle(), "Dispatching command async"); ++ } else if (sender instanceof ConsoleCommandSender || sender instanceof net.minecraft.server.rcon.RconConsoleSource ++ || sender instanceof org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender ++ || sender instanceof io.papermc.paper.commands.FeedbackForwardingSender) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Dispatching command async"); ++ } else { ++ // huh? ++ throw new UnsupportedOperationException("Dispatching command for " + sender); ++ } ++ // Folia end - region threading ++ + if (this.commandMap.dispatch(sender, commandLine)) { + return true; + } +@@ -1283,6 +_,7 @@ + + @Override + public World createWorld(WorldCreator creator) { ++ if (true) throw new UnsupportedOperationException(); // Folia - not implemented properly yet + Preconditions.checkState(this.console.getAllLevels().iterator().hasNext(), "Cannot create additional worlds on STARTUP"); + //Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot create a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes. + Preconditions.checkArgument(creator != null, "WorldCreator cannot be null"); +@@ -1480,6 +_,7 @@ + + @Override + public boolean unloadWorld(World world, boolean save) { ++ if (true) throw new UnsupportedOperationException(); // Folia - not implemented properly yet + //Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot unload a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes. + if (world == null) { + return false; +@@ -3252,7 +_,7 @@ + + @Override + public int getCurrentTick() { +- return net.minecraft.server.MinecraftServer.currentTick; ++ return (int)io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick(); // Folia - region threading + } + + @Override diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch new file mode 100644 index 0000000..ade03a5 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/CraftWorld.java.patch @@ -0,0 +1,415 @@ +--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +@@ -228,7 +_,7 @@ + + @Override + public int getTickableTileEntityCount() { +- return world.blockEntityTickers.size(); ++ throw new UnsupportedOperationException(); // Folia - region threading - TODO fix this? + } + + @Override +@@ -295,7 +_,7 @@ + // Paper start - per world spawn limits + for (SpawnCategory spawnCategory : SpawnCategory.values()) { + if (CraftSpawnCategory.isValidForLimits(spawnCategory)) { +- setSpawnLimit(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory))); ++ this.spawnCategoryLimit.put(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory))); // Folia - region threading + } + } + // Paper end - per world spawn limits +@@ -365,6 +_,7 @@ + + @Override + public Chunk getChunkAt(int x, int z) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.getHandle(), x, z, "Async chunk retrieval"); // Folia - region threading + warnUnsafeChunk("getting a faraway chunk", x, z); // Paper + net.minecraft.world.level.chunk.LevelChunk chunk = (net.minecraft.world.level.chunk.LevelChunk) this.world.getChunk(x, z, ChunkStatus.FULL, true); + return new CraftChunk(chunk); +@@ -395,10 +_,10 @@ + @Override + public boolean isChunkGenerated(int x, int z) { + // Paper start - Fix this method +- if (!Bukkit.isPrimaryThread()) { ++ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.getHandle(), x, z)) { // Folia - region threading + return java.util.concurrent.CompletableFuture.supplyAsync(() -> { + return CraftWorld.this.isChunkGenerated(x, z); +- }, world.getChunkSource().mainThreadProcessor).join(); ++ }, (run) -> { io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this.getHandle(), x, z, run);}).join(); // Folia - region threading + } + ChunkAccess chunk = world.getChunkSource().getChunkAtImmediately(x, z); + if (chunk != null) { +@@ -455,7 +_,7 @@ + } + + private boolean unloadChunk0(int x, int z, boolean save) { +- org.spigotmc.AsyncCatcher.catchOp("chunk unload"); // Spigot ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot unload chunk asynchronously"); // Folia - region threading + if (!this.isChunkLoaded(x, z)) { + return true; + } +@@ -472,7 +_,7 @@ + + @Override + public boolean regenerateChunk(int x, int z) { +- org.spigotmc.AsyncCatcher.catchOp("chunk regenerate"); // Spigot ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot regenerate chunk asynchronously"); // Folia - region threading + throw new UnsupportedOperationException("Not supported in this Minecraft version! Unless you can fix it, this is not a bug :)"); + /* + if (!unloadChunk0(x, z, false)) { +@@ -499,6 +_,7 @@ + + @Override + public boolean refreshChunk(int x, int z) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot refresh chunk asynchronously"); // Folia - region threading + ChunkHolder playerChunk = this.world.getChunkSource().chunkMap.getVisibleChunkIfPresent(ChunkPos.asLong(x, z)); + if (playerChunk == null) return false; + +@@ -549,7 +_,7 @@ + + @Override + public boolean loadChunk(int x, int z, boolean generate) { +- org.spigotmc.AsyncCatcher.catchOp("chunk load"); // Spigot ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.getHandle(), x, z, "May not sync load chunks asynchronously"); // Folia - region threading + warnUnsafeChunk("loading a faraway chunk", x, z); // Paper + ChunkAccess chunk = this.world.getChunkSource().getChunk(x, z, generate || isChunkGenerated(x, z) ? ChunkStatus.FULL : ChunkStatus.EMPTY, true); // Paper + +@@ -589,7 +_,7 @@ + + final DistanceManager distanceManager = this.world.getChunkSource().chunkMap.distanceManager; + if (distanceManager.addPluginRegionTicket(new ChunkPos(x, z), plugin)) { +- this.getChunkAt(x, z); // ensure it's loaded ++ //this.getChunkAt(x, z); // ensure it's loaded // Folia - region threading - do not load chunks for tickets anymore to make this mt-safe + return true; + } + +@@ -777,13 +_,15 @@ + + @Override + public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) { +- this.world.captureTreeGeneration = true; +- this.world.captureBlockStates = true; ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, loc.getX(), loc.getZ(), "Cannot generate tree asynchronously"); // Folia - region threading ++ io.papermc.paper.threadedregions.RegionizedWorldData worldData = world.getCurrentWorldData(); // Folia - region threading ++ worldData.captureTreeGeneration = true; // Folia - region threading ++ worldData.captureBlockStates = true; // Folia - region threading + boolean grownTree = this.generateTree(loc, type); +- this.world.captureBlockStates = false; +- this.world.captureTreeGeneration = false; ++ worldData.captureBlockStates = false; // Folia - region threading ++ worldData.captureTreeGeneration = false; // Folia - region threading + if (grownTree) { // Copy block data to delegate +- for (BlockState blockstate : this.world.capturedBlockStates.values()) { ++ for (BlockState blockstate : worldData.capturedBlockStates.values()) { // Folia - region threading + BlockPos position = ((CraftBlockState) blockstate).getPosition(); + net.minecraft.world.level.block.state.BlockState oldBlock = this.world.getBlockState(position); + int flag = ((CraftBlockState) blockstate).getFlag(); +@@ -791,10 +_,10 @@ + net.minecraft.world.level.block.state.BlockState newBlock = this.world.getBlockState(position); + this.world.notifyAndUpdatePhysics(position, null, oldBlock, newBlock, newBlock, flag, 512); + } +- this.world.capturedBlockStates.clear(); ++ worldData.capturedBlockStates.clear(); // Folia - region threading + return true; + } else { +- this.world.capturedBlockStates.clear(); ++ worldData.capturedBlockStates.clear(); // Folia - region threading + return false; + } + } +@@ -828,6 +_,7 @@ + + @Override + public void setTime(long time) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify time off of the global region"); // Folia - region threading + long margin = (time - this.getFullTime()) % 24000; + if (margin < 0) margin += 24000; + this.setFullTime(this.getFullTime() + margin); +@@ -840,6 +_,7 @@ + + @Override + public void setFullTime(long time) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify time off of the global region"); // Folia - region threading + // Notify anyone who's listening + TimeSkipEvent event = new TimeSkipEvent(this, TimeSkipEvent.SkipReason.CUSTOM, time - this.world.getDayTime()); + this.server.getPluginManager().callEvent(event); +@@ -867,7 +_,7 @@ + + @Override + public long getGameTime() { +- return this.world.levelData.getGameTime(); ++ return this.getHandle().getGameTime(); // Folia - region threading + } + + @Override +@@ -892,6 +_,7 @@ + } + public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks, Entity source, Consumer configurator) { + // Paper end - expand explosion API ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot create explosion asynchronously"); // Folia - region threading + net.minecraft.world.level.Level.ExplosionInteraction explosionType; + if (!breakBlocks) { + explosionType = net.minecraft.world.level.Level.ExplosionInteraction.NONE; // Don't break blocks +@@ -901,6 +_,7 @@ + explosionType = net.minecraft.world.level.Level.ExplosionInteraction.MOB; // Respect mobGriefing gamerule + } + ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot create explosion asynchronously"); // Folia - region threading + net.minecraft.world.entity.Entity entity = (source == null) ? null : ((CraftEntity) source).getHandle(); + return !this.world.explode0(entity, Explosion.getDefaultDamageSource(this.world, entity), null, x, y, z, power, setFire, explosionType, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE, configurator).wasCanceled; // Paper - expand explosion API + } +@@ -983,6 +_,7 @@ + + @Override + public int getHighestBlockYAt(int x, int z, org.bukkit.HeightMap heightMap) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x >> 4, z >> 4, "Cannot retrieve chunk asynchronously"); // Folia - region threading + warnUnsafeChunk("getting a faraway chunk", x >> 4, z >> 4); // Paper + // Transient load for this tick + return this.world.getChunk(x >> 4, z >> 4).getHeight(CraftHeightMap.toNMS(heightMap), x, z); +@@ -1013,6 +_,7 @@ + @Override + public void setBiome(int x, int y, int z, Holder bb) { + BlockPos pos = new BlockPos(x, 0, z); ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, pos, "Cannot retrieve chunk asynchronously"); // Folia - region threading + if (this.world.hasChunkAt(pos)) { + net.minecraft.world.level.chunk.LevelChunk chunk = this.world.getChunkAt(pos); + +@@ -1323,6 +_,7 @@ + + @Override + public void setStorm(boolean hasStorm) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading + this.world.serverLevelData.setRaining(hasStorm, org.bukkit.event.weather.WeatherChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents + this.setWeatherDuration(0); // Reset weather duration (legacy behaviour) + this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands) +@@ -1335,6 +_,7 @@ + + @Override + public void setWeatherDuration(int duration) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading + this.world.serverLevelData.setRainTime(duration); + } + +@@ -1345,6 +_,7 @@ + + @Override + public void setThundering(boolean thundering) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading + this.world.serverLevelData.setThundering(thundering, org.bukkit.event.weather.ThunderChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents + this.setThunderDuration(0); // Reset weather duration (legacy behaviour) + this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands) +@@ -1357,6 +_,7 @@ + + @Override + public void setThunderDuration(int duration) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading + this.world.serverLevelData.setThunderTime(duration); + } + +@@ -1367,6 +_,7 @@ + + @Override + public void setClearWeatherDuration(int duration) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading + this.world.serverLevelData.setClearWeatherTime(duration); + } + +@@ -1565,6 +_,7 @@ + + @Override + public void setKeepSpawnInMemory(boolean keepLoaded) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify keep spawn in memory off of the global region"); // Folia - region threading + if (keepLoaded) { + this.setGameRule(GameRule.SPAWN_CHUNK_RADIUS, this.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS)); + } else { +@@ -1633,6 +_,7 @@ + + @Override + public void setHardcore(boolean hardcore) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.world.serverLevelData.settings.hardcore = hardcore; + } + +@@ -1645,6 +_,7 @@ + @Override + @Deprecated + public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setTicksPerSpawns(SpawnCategory.ANIMAL, ticksPerAnimalSpawns); + } + +@@ -1657,6 +_,7 @@ + @Override + @Deprecated + public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setTicksPerSpawns(SpawnCategory.MONSTER, ticksPerMonsterSpawns); + } + +@@ -1669,6 +_,7 @@ + @Override + @Deprecated + public void setTicksPerWaterSpawns(int ticksPerWaterSpawns) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setTicksPerSpawns(SpawnCategory.WATER_ANIMAL, ticksPerWaterSpawns); + } + +@@ -1681,6 +_,7 @@ + @Override + @Deprecated + public void setTicksPerWaterAmbientSpawns(int ticksPerWaterAmbientSpawns) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setTicksPerSpawns(SpawnCategory.WATER_AMBIENT, ticksPerWaterAmbientSpawns); + } + +@@ -1693,6 +_,7 @@ + @Override + @Deprecated + public void setTicksPerWaterUndergroundCreatureSpawns(int ticksPerWaterUndergroundCreatureSpawns) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setTicksPerSpawns(SpawnCategory.WATER_UNDERGROUND_CREATURE, ticksPerWaterUndergroundCreatureSpawns); + } + +@@ -1705,11 +_,13 @@ + @Override + @Deprecated + public void setTicksPerAmbientSpawns(int ticksPerAmbientSpawns) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setTicksPerSpawns(SpawnCategory.AMBIENT, ticksPerAmbientSpawns); + } + + @Override + public void setTicksPerSpawns(SpawnCategory spawnCategory, int ticksPerCategorySpawn) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null"); + Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory); + +@@ -1726,21 +_,25 @@ + + @Override + public void setMetadata(String metadataKey, MetadataValue newMetadataValue) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify metadata off of the global region"); // Folia - region threading + this.server.getWorldMetadata().setMetadata(this, metadataKey, newMetadataValue); + } + + @Override + public List getMetadata(String metadataKey) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot retrieve metadata off of the global region"); // Folia - region threading + return this.server.getWorldMetadata().getMetadata(this, metadataKey); + } + + @Override + public boolean hasMetadata(String metadataKey) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot retrieve metadata off of the global region"); // Folia - region threading + return this.server.getWorldMetadata().hasMetadata(this, metadataKey); + } + + @Override + public void removeMetadata(String metadataKey, Plugin owningPlugin) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify metadata off of the global region"); // Folia - region threading + this.server.getWorldMetadata().removeMetadata(this, metadataKey, owningPlugin); + } + +@@ -1753,6 +_,7 @@ + @Override + @Deprecated + public void setMonsterSpawnLimit(int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setSpawnLimit(SpawnCategory.MONSTER, limit); + } + +@@ -1765,6 +_,7 @@ + @Override + @Deprecated + public void setAnimalSpawnLimit(int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setSpawnLimit(SpawnCategory.ANIMAL, limit); + } + +@@ -1777,6 +_,7 @@ + @Override + @Deprecated + public void setWaterAnimalSpawnLimit(int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setSpawnLimit(SpawnCategory.WATER_ANIMAL, limit); + } + +@@ -1789,6 +_,7 @@ + @Override + @Deprecated + public void setWaterAmbientSpawnLimit(int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setSpawnLimit(SpawnCategory.WATER_AMBIENT, limit); + } + +@@ -1801,6 +_,7 @@ + @Override + @Deprecated + public void setWaterUndergroundCreatureSpawnLimit(int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setSpawnLimit(SpawnCategory.WATER_UNDERGROUND_CREATURE, limit); + } + +@@ -1813,6 +_,7 @@ + @Override + @Deprecated + public void setAmbientSpawnLimit(int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + this.setSpawnLimit(SpawnCategory.AMBIENT, limit); + } + +@@ -1835,6 +_,7 @@ + + @Override + public void setSpawnLimit(SpawnCategory spawnCategory, int limit) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null"); + Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory); + +@@ -1917,7 +_,7 @@ + if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return; + + ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(CraftSound.bukkitToMinecraftHolder(sound), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed); +- ChunkMap.TrackedEntity entityTracker = this.getHandle().getChunkSource().chunkMap.entityMap.get(entity.getEntityId()); ++ ChunkMap.TrackedEntity entityTracker = ((CraftEntity) entity).getHandle().moonrise$getTrackedEntity(); // Folia - region threading + if (entityTracker != null) { + entityTracker.broadcastAndSend(packet); + } +@@ -1938,7 +_,7 @@ + if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return; + + ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(Holder.direct(SoundEvent.createVariableRangeEvent(ResourceLocation.parse(sound))), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed); +- ChunkMap.TrackedEntity entityTracker = this.getHandle().getChunkSource().chunkMap.entityMap.get(entity.getEntityId()); ++ ChunkMap.TrackedEntity entityTracker = ((CraftEntity)entity).getHandle().moonrise$getTrackedEntity(); // Folia - region threading + if (entityTracker != null) { + entityTracker.broadcastAndSend(packet); + } +@@ -2021,6 +_,7 @@ + + @Override + public boolean setGameRuleValue(String rule, String value) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + // No null values allowed + if (rule == null || value == null) return false; + +@@ -2063,6 +_,7 @@ + + @Override + public boolean setGameRule(GameRule rule, T newValue) { ++ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading + Preconditions.checkArgument(rule != null, "GameRule cannot be null"); + Preconditions.checkArgument(newValue != null, "GameRule value cannot be null"); + +@@ -2290,6 +_,12 @@ + + @Override + public void sendGameEvent(Entity sourceEntity, org.bukkit.GameEvent gameEvent, Vector position) { ++ // Folia start - region threading ++ if (sourceEntity != null && !Bukkit.isOwnedByCurrentRegion(sourceEntity)) { ++ throw new IllegalStateException("Cannot send game event asynchronously"); ++ } ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, position.getX(), position.getZ(), "Cannot send game event asynchronously"); ++ // Folia end - region threading + getHandle().gameEvent(sourceEntity != null ? ((CraftEntity) sourceEntity).getHandle(): null, net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT.get(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(gameEvent.getKey())).orElseThrow(), org.bukkit.craftbukkit.util.CraftVector.toBlockPos(position)); + } + // Paper end diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.patch new file mode 100644 index 0000000..2ba5ead --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java.patch @@ -0,0 +1,201 @@ +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +@@ -75,6 +_,11 @@ + } + + public net.minecraft.world.level.block.state.BlockState getNMS() { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + return this.world.getBlockState(this.position); + } + +@@ -157,6 +_,11 @@ + } + + private void setData(final byte data, int flag) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + this.world.setBlock(this.position, CraftMagicNumbers.getBlock(this.getType(), data), flag); + } + +@@ -198,6 +_,11 @@ + } + + public static boolean setTypeAndData(LevelAccessor world, BlockPos position, net.minecraft.world.level.block.state.BlockState old, net.minecraft.world.level.block.state.BlockState blockData, boolean applyPhysics) { ++ // Folia start - region threading ++ if (world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, position, "Cannot modify world asynchronously"); ++ } ++ // Folia end - region threading + // SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in tile entity cleanup + if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes + // SPIGOT-4612: faster - just clear tile +@@ -343,18 +_,33 @@ + + @Override + public Biome getBiome() { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + return this.getWorld().getBiome(this.getX(), this.getY(), this.getZ()); + } + + // Paper start + @Override + public Biome getComputedBiome() { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + return this.getWorld().getComputedBiome(this.getX(), this.getY(), this.getZ()); + } + // Paper end + + @Override + public void setBiome(Biome bio) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + this.getWorld().setBiome(this.getX(), this.getY(), this.getZ(), bio); + } + +@@ -402,6 +_,11 @@ + + @Override + public boolean isBlockFaceIndirectlyPowered(BlockFace face) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + int power = this.world.getMinecraftWorld().getSignal(this.position, CraftBlock.blockFaceToNotch(face)); + + Block relative = this.getRelative(face); +@@ -414,6 +_,11 @@ + + @Override + public int getBlockPower(BlockFace face) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + int power = 0; + net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); + int x = this.getX(); +@@ -500,6 +_,11 @@ + + @Override + public boolean breakNaturally(ItemStack item, boolean triggerEffect, boolean dropExperience) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + // Paper end + // Order matters here, need to drop before setting to air so skulls can get their data + net.minecraft.world.level.block.state.BlockState iblockdata = this.getNMS(); +@@ -543,21 +_,27 @@ + + @Override + public boolean applyBoneMeal(BlockFace face) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + Direction direction = CraftBlock.blockFaceToNotch(face); + BlockFertilizeEvent event = null; + ServerLevel world = this.getCraftWorld().getHandle(); + UseOnContext context = new UseOnContext(world, null, InteractionHand.MAIN_HAND, Items.BONE_MEAL.getDefaultInstance(), new BlockHitResult(Vec3.ZERO, direction, this.getPosition(), false)); + ++ io.papermc.paper.threadedregions.RegionizedWorldData worldData = world.getCurrentWorldData(); // Folia - region threading + // SPIGOT-6895: Call StructureGrowEvent and BlockFertilizeEvent +- world.captureTreeGeneration = true; ++ worldData.captureTreeGeneration = true; // Folia - region threading + InteractionResult result = BoneMealItem.applyBonemeal(context); +- world.captureTreeGeneration = false; ++ worldData.captureTreeGeneration = false; // Folia - region threading + +- if (world.capturedBlockStates.size() > 0) { +- TreeType treeType = SaplingBlock.treeType; +- SaplingBlock.treeType = null; +- List blocks = new ArrayList<>(world.capturedBlockStates.values()); +- world.capturedBlockStates.clear(); ++ if (worldData.capturedBlockStates.size() > 0) { // Folia - region threading ++ TreeType treeType = SaplingBlock.treeTypeRT.get(); // Folia - region threading ++ SaplingBlock.treeTypeRT.set(null); // Folia - region threading ++ List blocks = new ArrayList<>(worldData.capturedBlockStates.values()); // Folia - region threading ++ worldData.capturedBlockStates.clear(); // Folia - region threading + StructureGrowEvent structureEvent = null; + + if (treeType != null) { +@@ -644,6 +_,11 @@ + + @Override + public RayTraceResult rayTrace(Location start, Vector direction, double maxDistance, FluidCollisionMode fluidCollisionMode) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + Preconditions.checkArgument(start != null, "Location start cannot be null"); + Preconditions.checkArgument(this.getWorld().equals(start.getWorld()), "Location start cannot be a different world"); + start.checkFinite(); +@@ -685,6 +_,11 @@ + + @Override + public boolean canPlace(BlockData data) { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + Preconditions.checkArgument(data != null, "BlockData cannot be null"); + net.minecraft.world.level.block.state.BlockState iblockdata = ((CraftBlockData) data).getState(); + net.minecraft.world.level.Level world = this.world.getMinecraftWorld(); +@@ -719,18 +_,32 @@ + + @Override + public void tick() { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + final ServerLevel level = this.world.getMinecraftWorld(); + this.getNMS().tick(level, this.position, level.random); + } + +- + @Override + public void fluidTick() { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + this.getNMSFluid().tick(this.world.getMinecraftWorld(), this.position, this.getNMS()); + } + + @Override + public void randomTick() { ++ // Folia start - region threading ++ if (this.world instanceof ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously"); ++ } ++ // Folia end - region threading + final ServerLevel level = this.world.getMinecraftWorld(); + this.getNMS().randomTick(level, this.position, level.random); + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java.patch new file mode 100644 index 0000000..ccb6997 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java.patch @@ -0,0 +1,22 @@ +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java +@@ -25,7 +_,7 @@ + private final T tileEntity; + private final T snapshot; + public boolean snapshotDisabled; // Paper +- public static boolean DISABLE_SNAPSHOT = false; // Paper ++ public static final ThreadLocal DISABLE_SNAPSHOT = ThreadLocal.withInitial(() -> Boolean.FALSE); // Paper // Folia - region threading + + public CraftBlockEntityState(World world, T tileEntity) { + super(world, tileEntity.getBlockPos(), tileEntity.getBlockState()); +@@ -34,8 +_,8 @@ + + try { // Paper - Show blockstate location if we failed to read it + // Paper start +- this.snapshotDisabled = DISABLE_SNAPSHOT; +- if (DISABLE_SNAPSHOT) { ++ this.snapshotDisabled = DISABLE_SNAPSHOT.get().booleanValue(); // Folia - region threading ++ if (this.snapshotDisabled) { // Folia - region threading + this.snapshot = this.tileEntity; + } else { + this.snapshot = this.createSnapshot(tileEntity); diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java.patch new file mode 100644 index 0000000..34b0d7b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java.patch @@ -0,0 +1,25 @@ +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +@@ -215,6 +_,12 @@ + LevelAccessor access = this.getWorldHandle(); + CraftBlock block = this.getBlock(); + ++ // Folia start - region threading ++ if (access instanceof net.minecraft.server.level.ServerLevel serverWorld) { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, position, "Cannot modify world asynchronously"); ++ } ++ // Folia end - region threading ++ + if (block.getType() != this.getType()) { + if (!force) { + return false; +@@ -350,6 +_,9 @@ + + @Override + public java.util.Collection getDrops(org.bukkit.inventory.ItemStack item, org.bukkit.entity.Entity entity) { ++ // Folia start - region threading ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(world.getHandle(), position, "Cannot modify world asynchronously"); ++ // Folia end - region threading + this.requirePlaced(); + net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item); + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch new file mode 100644 index 0000000..3878f0d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java.patch @@ -0,0 +1,22 @@ +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +@@ -249,8 +_,8 @@ + net.minecraft.world.level.block.state.BlockState blockData = craftBlock.getNMS(); + BlockEntity tileEntity = craftBlock.getHandle().getBlockEntity(blockPosition); + // Paper start - block state snapshots +- boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT; +- CraftBlockEntityState.DISABLE_SNAPSHOT = !useSnapshot; ++ boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT.get().booleanValue(); // Folia - region threading ++ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(!useSnapshot)); // Folia - region threading + try { + // Paper end + CraftBlockState blockState = CraftBlockStates.getBlockState(world, blockPosition, blockData, tileEntity); +@@ -258,7 +_,7 @@ + return blockState; + // Paper start + } finally { +- CraftBlockEntityState.DISABLE_SNAPSHOT = prev; ++ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(prev)); // Folia - region threading + } + // Paper end + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java.patch new file mode 100644 index 0000000..672875e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java ++++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java +@@ -50,7 +_,7 @@ + return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of(); + } + }; +- server.getServer().processQueue.add(syncCompletions); ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(syncCompletions); // Folia - region threading + try { + final List legacyCompletions = syncCompletions.get(); + completions.removeIf(it -> !legacyCompletions.contains(it.suggestion())); // remove any suggestions that were removed +@@ -98,7 +_,7 @@ + return tabEvent.isCancelled() ? Collections.EMPTY_LIST : tabEvent.getCompletions(); + } + }; +- server.getServer().processQueue.add(waitable); // Paper - Remove "this." ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(waitable); // Folia - region threading + try { + List offers = waitable.get(); + if (offers == null) { diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java.patch new file mode 100644 index 0000000..716014d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java.patch @@ -0,0 +1,31 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java +@@ -1,5 +_,6 @@ + package org.bukkit.craftbukkit.entity; + ++import net.minecraft.world.entity.Entity; + import org.bukkit.craftbukkit.CraftServer; + import org.bukkit.entity.Projectile; + +@@ -38,6 +_,13 @@ + this.getHandle().hasBeenShot = beenShot; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.Projectile getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.Projectile)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public boolean canHitEntity(org.bukkit.entity.Entity entity) { + return this.getHandle().canHitEntityPublic(((CraftEntity) entity).getHandle()); +@@ -55,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.projectile.Projectile getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.Projectile) entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java.patch new file mode 100644 index 0000000..a5575bc --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java +@@ -133,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.projectile.AbstractArrow getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.AbstractArrow) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java.patch new file mode 100644 index 0000000..52c414a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java +@@ -17,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.horse.AbstractHorse getHandleRaw() { ++ return (net.minecraft.world.entity.animal.horse.AbstractHorse)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.horse.AbstractHorse getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.horse.AbstractHorse) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java.patch new file mode 100644 index 0000000..cd87cac --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java +@@ -15,8 +_,17 @@ + throw new UnsupportedOperationException("Not supported."); + } + // Paper start ++ ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.AbstractSkeleton getHandleRaw() { ++ return (net.minecraft.world.entity.monster.AbstractSkeleton)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.AbstractSkeleton getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.AbstractSkeleton) super.getHandle(); + } + // Paper end diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java.patch new file mode 100644 index 0000000..a832c3d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java +@@ -15,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.npc.AbstractVillager getHandleRaw() { ++ return (net.minecraft.world.entity.npc.AbstractVillager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.npc.AbstractVillager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Villager) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java.patch new file mode 100644 index 0000000..4422297 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java +@@ -17,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java.patch new file mode 100644 index 0000000..68b3d72 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java +@@ -63,8 +_,16 @@ + } + } + ++ // Folia start - region threading ++ @Override ++ public AgeableMob getHandleRaw() { ++ return (AgeableMob)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AgeableMob getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AgeableMob) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java.patch new file mode 100644 index 0000000..2130f95 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java +@@ -16,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Allay getHandleRaw() { ++ return (Allay)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Allay getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Allay) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java.patch new file mode 100644 index 0000000..534b271 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AmbientCreature getHandleRaw() { ++ return (AmbientCreature)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AmbientCreature getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AmbientCreature) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java.patch new file mode 100644 index 0000000..cb59aca --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java +@@ -15,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Animal getHandleRaw() { ++ return (Animal)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Animal getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Animal) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java.patch new file mode 100644 index 0000000..9a6c783 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java +@@ -28,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.AreaEffectCloud getHandleRaw() { ++ return (net.minecraft.world.entity.AreaEffectCloud)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.AreaEffectCloud getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.AreaEffectCloud) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java.patch new file mode 100644 index 0000000..23a0f4a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java +@@ -11,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.animal.armadillo.Armadillo getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.armadillo.Armadillo) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java.patch new file mode 100644 index 0000000..fee2c1d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java +@@ -20,8 +_,16 @@ + return "CraftArmorStand"; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.decoration.ArmorStand getHandleRaw() { ++ return (net.minecraft.world.entity.decoration.ArmorStand)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.decoration.ArmorStand getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.decoration.ArmorStand) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java.patch new file mode 100644 index 0000000..b2861d3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java.patch @@ -0,0 +1,24 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java +@@ -26,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.projectile.Arrow getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.Arrow) this.entity; + } + +@@ -89,6 +_,13 @@ + this.getHandle().setPotionContents(new PotionContents(old.potion(), old.customColor(), old.customEffects().stream().filter((mobEffect) -> !mobEffect.getEffect().equals(minecraft)).toList(), old.customName())); + return true; + } ++ ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.AbstractArrow getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.AbstractArrow)this.entity; ++ } ++ // Folia end - region threading + + @Override + public void setBasePotionData(PotionData data) { diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java.patch new file mode 100644 index 0000000..7663d8c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.axolotl.Axolotl getHandleRaw() { ++ return (net.minecraft.world.entity.animal.axolotl.Axolotl)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.axolotl.Axolotl getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.axolotl.Axolotl) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java.patch new file mode 100644 index 0000000..79c2c7a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.ambient.Bat getHandleRaw() { ++ return (net.minecraft.world.entity.ambient.Bat)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.ambient.Bat getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.ambient.Bat) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java.patch new file mode 100644 index 0000000..81913e7 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Bee getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Bee)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Bee getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Bee) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java.patch new file mode 100644 index 0000000..c61b760 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Blaze getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Blaze)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Blaze getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Blaze) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java.patch new file mode 100644 index 0000000..4dde751 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public BlockAttachedEntity getHandleRaw() { ++ return (BlockAttachedEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public BlockAttachedEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (BlockAttachedEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java.patch new file mode 100644 index 0000000..6a00782 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Display.BlockDisplay getHandleRaw() { ++ return (net.minecraft.world.entity.Display.BlockDisplay)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Display.BlockDisplay getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Display.BlockDisplay) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java.patch new file mode 100644 index 0000000..ab24dda --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java +@@ -101,8 +_,16 @@ + return CraftBoat.boatStatusFromNms(this.getHandle().status); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractBoat getHandleRaw() { ++ return (AbstractBoat)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractBoat getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractBoat) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java.patch new file mode 100644 index 0000000..1e2b9b0 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java +@@ -12,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.monster.Bogged getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Bogged) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java.patch new file mode 100644 index 0000000..4c1f9ec --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java +@@ -13,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.monster.breeze.Breeze getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.breeze.Breeze) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java.patch new file mode 100644 index 0000000..aaeedf3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java +@@ -10,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java.patch new file mode 100644 index 0000000..2d93f76 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.camel.Camel getHandleRaw() { ++ return (net.minecraft.world.entity.animal.camel.Camel)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.camel.Camel getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.camel.Camel) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java.patch new file mode 100644 index 0000000..472064c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java +@@ -19,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Cat getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Cat)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Cat getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Cat) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java.patch new file mode 100644 index 0000000..f17a382 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.CaveSpider getHandleRaw() { ++ return (net.minecraft.world.entity.monster.CaveSpider)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.CaveSpider getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.CaveSpider) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java.patch new file mode 100644 index 0000000..f581c90 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java +@@ -15,8 +_,16 @@ + this.inventory = new CraftInventory(entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractChestBoat getHandleRaw() { ++ return (AbstractChestBoat)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractChestBoat getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractChestBoat) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java.patch new file mode 100644 index 0000000..c90d991 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractChestedHorse getHandleRaw() { ++ return (AbstractChestedHorse)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractChestedHorse getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractChestedHorse) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java.patch new file mode 100644 index 0000000..175e8b0 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Chicken getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Chicken)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Chicken getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Chicken) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java.patch new file mode 100644 index 0000000..416849a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Cod getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Cod)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Cod getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Cod) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java.patch new file mode 100644 index 0000000..4504b63 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java +@@ -32,8 +_,16 @@ + return this.getParent().isValid(); + } + ++ // Folia start - region threading ++ @Override ++ public EnderDragonPart getHandleRaw() { ++ return (EnderDragonPart)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public EnderDragonPart getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (EnderDragonPart) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java.patch new file mode 100644 index 0000000..e87a4b2 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Cow getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Cow)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Cow getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Cow) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java.patch new file mode 100644 index 0000000..66386c6 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Creaking getHandleRaw() { ++ return (Creaking)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Creaking getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Creaking) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java.patch new file mode 100644 index 0000000..1769463 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public PathfinderMob getHandleRaw() { ++ return (PathfinderMob)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public PathfinderMob getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (PathfinderMob) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java.patch new file mode 100644 index 0000000..eaa7b37 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java.patch @@ -0,0 +1,24 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java +@@ -87,6 +_,13 @@ + this.getHandle().ignite(); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Creeper getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Creeper)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Entity getIgniter() { + return (this.getHandle().entityIgniter != null) ? this.getHandle().entityIgniter.getBukkitEntity() : null; +@@ -94,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.monster.Creeper getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Creeper) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java.patch new file mode 100644 index 0000000..7c0501d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Display getHandleRaw() { ++ return (net.minecraft.world.entity.Display)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Display getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Display) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java.patch new file mode 100644 index 0000000..6633c80 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Dolphin getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Dolphin)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Dolphin getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Dolphin) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java.patch new file mode 100644 index 0000000..5187a46 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Drowned getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Drowned)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Drowned getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Drowned) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java.patch new file mode 100644 index 0000000..7eebe8d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public ThrownEgg getHandleRaw() { ++ return (ThrownEgg)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ThrownEgg getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ThrownEgg) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java.patch new file mode 100644 index 0000000..5305f4a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java +@@ -39,8 +_,16 @@ + } + } + ++ // Folia start - region threading ++ @Override ++ public EndCrystal getHandleRaw() { ++ return (EndCrystal)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public EndCrystal getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (EndCrystal) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java.patch new file mode 100644 index 0000000..10e70ad --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java +@@ -30,8 +_,16 @@ + return builder.build(); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.boss.enderdragon.EnderDragon getHandleRaw() { ++ return (net.minecraft.world.entity.boss.enderdragon.EnderDragon)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.boss.enderdragon.EnderDragon getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.boss.enderdragon.EnderDragon) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java.patch new file mode 100644 index 0000000..3812c41 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java +@@ -16,8 +_,16 @@ + return (EnderDragon) super.getParent(); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.boss.EnderDragonPart getHandleRaw() { ++ return (net.minecraft.world.entity.boss.EnderDragonPart)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.boss.EnderDragonPart getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.boss.EnderDragonPart) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java.patch new file mode 100644 index 0000000..0b3de28 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public ThrownEnderpearl getHandleRaw() { ++ return (ThrownEnderpearl)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ThrownEnderpearl getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ThrownEnderpearl) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java.patch new file mode 100644 index 0000000..2c9e06e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java +@@ -15,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public EyeOfEnder getHandleRaw() { ++ return (EyeOfEnder)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public EyeOfEnder getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (EyeOfEnder) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java.patch new file mode 100644 index 0000000..664605b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java +@@ -62,8 +_,16 @@ + } + // Paper end + ++ // Folia start - region threading ++ @Override ++ public EnderMan getHandleRaw() { ++ return (EnderMan)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public EnderMan getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (EnderMan) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java.patch new file mode 100644 index 0000000..0873cc7 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Endermite getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Endermite)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Endermite getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Endermite) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java.patch new file mode 100644 index 0000000..392014a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java.patch @@ -0,0 +1,134 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +@@ -82,6 +_,11 @@ + return this.apiScheduler; + }; + // Paper end - Folia schedulers ++ // Folia start - region threading ++ public boolean isPurged() { ++ return this.taskScheduler.isRetired(); ++ } ++ // Folia end - region threading + + public CraftEntity(final CraftServer server, final Entity entity) { + this.server = server; +@@ -239,6 +_,11 @@ + + @Override + public boolean teleport(Location location, TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { ++ // Folia start - region threading ++ if (true) { ++ throw new UnsupportedOperationException("Must use teleportAsync while in region threading"); ++ } ++ // Folia end - region threading + // Paper end + Preconditions.checkArgument(location != null, "location cannot be null"); + location.checkFinite(); +@@ -528,6 +_,7 @@ + } + + public Entity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return this.entity; + } + +@@ -722,7 +_,7 @@ + ImmutableSet.Builder players = ImmutableSet.builder(); + + ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); +- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); ++ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading + + if (entityTracker != null) { + for (ServerPlayerConnection connection : entityTracker.seenBy) { +@@ -1026,7 +_,7 @@ + } + + ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); +- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); ++ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading + + if (entityTracker == null) { + return; +@@ -1045,7 +_,7 @@ + } + + ServerLevel world = ((CraftWorld) this.getWorld()).getHandle(); +- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId()); ++ ChunkMap.TrackedEntity entityTracker = this.entity.moonrise$getTrackedEntity(); // Folia - region threading + + if (entityTracker == null) { + return; +@@ -1079,29 +_,43 @@ + location.checkFinite(); + Location locationClone = location.clone(); // clone so we don't need to worry about mutations after this call. + +- net.minecraft.server.level.ServerLevel world = ((CraftWorld)locationClone.getWorld()).getHandle(); ++ // Folia start - region threading + java.util.concurrent.CompletableFuture ret = new java.util.concurrent.CompletableFuture<>(); ++ java.util.function.Consumer run = (Entity nmsEntity) -> { ++ boolean success = nmsEntity.teleportAsync( ++ ((CraftWorld)locationClone.getWorld()).getHandle(), ++ new net.minecraft.world.phys.Vec3(locationClone.getX(), locationClone.getY(), locationClone.getZ()), ++ locationClone.getYaw(), locationClone.getPitch(), net.minecraft.world.phys.Vec3.ZERO, ++ cause == null ? TeleportCause.UNKNOWN : cause, ++ Entity.TELEPORT_FLAG_LOAD_CHUNK | Entity.TELEPORT_FLAG_TELEPORT_PASSENGERS, // preserve behavior with old API: dismount the entity so it can teleport ++ (Entity entityTp) -> { ++ ret.complete(Boolean.TRUE); ++ } ++ ); ++ if (!success) { ++ ret.complete(Boolean.FALSE); ++ } ++ }; ++ if (org.bukkit.Bukkit.isOwnedByCurrentRegion(this)) { ++ run.accept(this.getHandle()); ++ return ret; ++ } ++ boolean scheduled = this.taskScheduler.schedule( ++ // success ++ run, ++ // retired ++ (Entity nmsEntity) -> { ++ ret.complete(Boolean.FALSE); ++ }, ++ 1L ++ ); + +- world.loadChunksForMoveAsync(getHandle().getBoundingBoxAt(locationClone.getX(), locationClone.getY(), locationClone.getZ()), +- this instanceof CraftPlayer ? ca.spottedleaf.concurrentutil.util.Priority.HIGHER : ca.spottedleaf.concurrentutil.util.Priority.NORMAL, (list) -> { +- net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> { +- final net.minecraft.server.level.ServerChunkCache chunkCache = world.getChunkSource(); +- for (final net.minecraft.world.level.chunk.ChunkAccess chunk : list) { +- chunkCache.addTicketAtLevel(net.minecraft.server.level.TicketType.POST_TELEPORT, chunk.getPos(), 33, CraftEntity.this.getEntityId()); +- } +- try { +- ret.complete(CraftEntity.this.teleport(locationClone, cause, teleportFlags) ? Boolean.TRUE : Boolean.FALSE); +- } catch (Throwable throwable) { +- if (throwable instanceof ThreadDeath) { +- throw (ThreadDeath)throwable; +- } +- net.minecraft.server.MinecraftServer.LOGGER.error("Failed to teleport entity " + CraftEntity.this, throwable); +- ret.completeExceptionally(throwable); +- } +- }); +- }); ++ if (!scheduled) { ++ ret.complete(Boolean.FALSE); ++ } + + return ret; ++ // Folia end - region threading + } + // Paper end - more teleport API / async chunk API + +@@ -1214,8 +_,7 @@ + // Paper start - tracked players API + @Override + public Set getTrackedPlayers() { +- ServerLevel world = (net.minecraft.server.level.ServerLevel)this.entity.level(); +- ChunkMap.TrackedEntity tracker = world == null ? null : world.getChunkSource().chunkMap.entityMap.get(this.entity.getId()); ++ ChunkMap.TrackedEntity tracker = this.entity.moonrise$getTrackedEntity(); // Folia - region threading + if (tracker == null) { + return java.util.Collections.emptySet(); + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java.patch new file mode 100644 index 0000000..a3ca20a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Evoker getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Evoker)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Evoker getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Evoker) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java.patch new file mode 100644 index 0000000..b95509f --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.EvokerFangs getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.EvokerFangs)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.EvokerFangs getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.EvokerFangs) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java.patch new file mode 100644 index 0000000..d74268b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java +@@ -42,8 +_,16 @@ + } + // Paper end + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.ExperienceOrb getHandleRaw() { ++ return (net.minecraft.world.entity.ExperienceOrb)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.ExperienceOrb getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.ExperienceOrb) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java.patch new file mode 100644 index 0000000..29f0fef --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java +@@ -14,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public FallingBlockEntity getHandleRaw() { ++ return (FallingBlockEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public FallingBlockEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (FallingBlockEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java.patch new file mode 100644 index 0000000..d9d7ebe --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java +@@ -83,8 +_,16 @@ + } + // Paper end - Expose power on fireball projectiles + ++ // Folia start - region threading ++ @Override ++ public AbstractHurtingProjectile getHandleRaw() { ++ return (AbstractHurtingProjectile)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractHurtingProjectile getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractHurtingProjectile) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java.patch new file mode 100644 index 0000000..ab889ea --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java +@@ -37,8 +_,16 @@ + // Paper end - Expose firework item directly + } + ++ // Folia start - region threading ++ @Override ++ public FireworkRocketEntity getHandleRaw() { ++ return (FireworkRocketEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public FireworkRocketEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (FireworkRocketEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java.patch new file mode 100644 index 0000000..6db5db9 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractFish getHandleRaw() { ++ return (AbstractFish)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractFish getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractFish) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java.patch new file mode 100644 index 0000000..91dcb18 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java +@@ -14,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public FishingHook getHandleRaw() { ++ return (FishingHook)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public FishingHook getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (FishingHook) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java.patch new file mode 100644 index 0000000..df6bed1 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public FlyingMob getHandleRaw() { ++ return (FlyingMob)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public FlyingMob getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (FlyingMob) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java.patch new file mode 100644 index 0000000..0638e55 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java +@@ -14,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Fox getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Fox)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Fox getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Fox) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java.patch new file mode 100644 index 0000000..edffcf7 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java +@@ -19,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Frog getHandleRaw() { ++ return (Frog)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Frog getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Frog) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java.patch new file mode 100644 index 0000000..549a042 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Ghast getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Ghast)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Ghast getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Ghast) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java.patch new file mode 100644 index 0000000..b55d541 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Giant getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Giant)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Giant getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Giant) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java.patch new file mode 100644 index 0000000..a72eb37 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.decoration.GlowItemFrame getHandleRaw() { ++ return (net.minecraft.world.entity.decoration.GlowItemFrame)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.decoration.GlowItemFrame getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.decoration.GlowItemFrame) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java.patch new file mode 100644 index 0000000..5512462 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.GlowSquid getHandleRaw() { ++ return (net.minecraft.world.entity.GlowSquid)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.GlowSquid getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.GlowSquid) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java.patch new file mode 100644 index 0000000..c57a479 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.goat.Goat getHandleRaw() { ++ return (net.minecraft.world.entity.animal.goat.Goat)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.goat.Goat getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.goat.Goat) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java.patch new file mode 100644 index 0000000..64cf726 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractGolem getHandleRaw() { ++ return (AbstractGolem)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractGolem getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractGolem) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java.patch new file mode 100644 index 0000000..dab0db8 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Guardian getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Guardian)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Guardian getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Guardian) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java.patch new file mode 100644 index 0000000..2fcfe42 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java +@@ -57,8 +_,16 @@ + return CraftBlock.notchToBlockFace(direction); + } + ++ // Folia start - region threading ++ @Override ++ public HangingEntity getHandleRaw() { ++ return (HangingEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public HangingEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (HangingEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java.patch new file mode 100644 index 0000000..bca67fb --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java +@@ -51,8 +_,16 @@ + return this.getHandle().isConverting(); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.hoglin.Hoglin getHandleRaw() { ++ return (net.minecraft.world.entity.monster.hoglin.Hoglin)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.hoglin.Hoglin getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.hoglin.Hoglin) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java.patch new file mode 100644 index 0000000..b9122e8 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.horse.Horse getHandleRaw() { ++ return (net.minecraft.world.entity.animal.horse.Horse)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.horse.Horse getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.horse.Horse) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch new file mode 100644 index 0000000..542406a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +@@ -303,8 +_,16 @@ + this.mode = mode; + } + ++ // Folia start - region threading ++ @Override ++ public Player getHandleRaw() { ++ return (Player)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Player getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Player) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java.patch new file mode 100644 index 0000000..a279527 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractIllager getHandleRaw() { ++ return (AbstractIllager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractIllager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractIllager) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java.patch new file mode 100644 index 0000000..da84a0e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Illusioner getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Illusioner)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Illusioner getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Illusioner) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java.patch new file mode 100644 index 0000000..44334f9 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Interaction getHandleRaw() { ++ return (net.minecraft.world.entity.Interaction)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Interaction getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Interaction) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java.patch new file mode 100644 index 0000000..1ea99d1 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.IronGolem getHandleRaw() { ++ return (net.minecraft.world.entity.animal.IronGolem)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.IronGolem getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.IronGolem) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java.patch new file mode 100644 index 0000000..724cb38 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +@@ -18,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public ItemEntity getHandleRaw() { ++ return (ItemEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ItemEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ItemEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java.patch new file mode 100644 index 0000000..4aacec6 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Display.ItemDisplay getHandleRaw() { ++ return (net.minecraft.world.entity.Display.ItemDisplay)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Display.ItemDisplay getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Display.ItemDisplay) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java.patch new file mode 100644 index 0000000..b965c8e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java +@@ -157,8 +_,16 @@ + this.getHandle().fixed = fixed; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.decoration.ItemFrame getHandleRaw() { ++ return (net.minecraft.world.entity.decoration.ItemFrame)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.decoration.ItemFrame getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.decoration.ItemFrame) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java.patch new file mode 100644 index 0000000..537c2d8 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java +@@ -14,8 +_,16 @@ + this.getHandle().explosionPower = (int) yield; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.LargeFireball getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.LargeFireball)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.LargeFireball getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.LargeFireball) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java.patch new file mode 100644 index 0000000..ea0d25c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java.patch @@ -0,0 +1,24 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java +@@ -24,6 +_,13 @@ + return BlockFace.SELF; + } + ++ // Folia start - region threading ++ @Override ++ public LeashFenceKnotEntity getHandleRaw() { ++ return (LeashFenceKnotEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public BlockFace getAttachedFace() { + // Leash hitch has no facing direction, so we return self +@@ -37,6 +_,7 @@ + + @Override + public LeashFenceKnotEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (LeashFenceKnotEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java.patch new file mode 100644 index 0000000..5abd367 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java +@@ -41,8 +_,16 @@ + this.getHandle().setCause((player != null) ? ((CraftPlayer) player).getHandle() : null); + } + ++ // Folia start - region threading ++ @Override ++ public LightningBolt getHandleRaw() { ++ return (LightningBolt)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public LightningBolt getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (LightningBolt) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch new file mode 100644 index 0000000..5eff551 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java.patch @@ -0,0 +1,24 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +@@ -487,6 +_,13 @@ + this.getHandle().invulnerableTime = ticks; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.LivingEntity getHandleRaw() { ++ return (net.minecraft.world.entity.LivingEntity)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public int getNoActionTicks() { + return this.getHandle().getNoActionTime(); +@@ -500,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.LivingEntity getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.LivingEntity) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java.patch new file mode 100644 index 0000000..36737c6 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java +@@ -14,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.horse.Llama getHandleRaw() { ++ return (net.minecraft.world.entity.animal.horse.Llama)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.horse.Llama getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.horse.Llama) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java.patch new file mode 100644 index 0000000..ea0e15a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.LlamaSpit getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.LlamaSpit)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.LlamaSpit getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.LlamaSpit) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java.patch new file mode 100644 index 0000000..c51a116 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.MagmaCube getHandleRaw() { ++ return (net.minecraft.world.entity.monster.MagmaCube)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.MagmaCube getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.MagmaCube) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java.patch new file mode 100644 index 0000000..b142aea --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Marker getHandleRaw() { ++ return (net.minecraft.world.entity.Marker)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Marker getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Marker) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java.patch new file mode 100644 index 0000000..a576a85 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java +@@ -77,8 +_,16 @@ + } + // Paper end + ++ // Folia start - region threading ++ @Override ++ public AbstractMinecart getHandleRaw() { ++ return (AbstractMinecart)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractMinecart getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractMinecart) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java.patch new file mode 100644 index 0000000..393aef3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java +@@ -20,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public MinecartCommandBlock getHandleRaw() { ++ return (MinecartCommandBlock)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public MinecartCommandBlock getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (MinecartCommandBlock) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java.patch new file mode 100644 index 0000000..a17b22e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public AbstractMinecartContainer getHandleRaw() { ++ return (AbstractMinecartContainer)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractMinecartContainer getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractMinecartContainer) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java.patch new file mode 100644 index 0000000..2163179 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public MinecartFurnace getHandleRaw() { ++ return (MinecartFurnace)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public MinecartFurnace getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (MinecartFurnace) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java.patch new file mode 100644 index 0000000..842f001 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java +@@ -34,8 +_,17 @@ + ((MinecartHopper) this.getHandle()).setEnabled(enabled); + } + // Paper start ++ ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.vehicle.MinecartHopper getHandleRaw() { ++ return (net.minecraft.world.entity.vehicle.MinecartHopper)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.vehicle.MinecartHopper getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.vehicle.MinecartHopper) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java.patch new file mode 100644 index 0000000..d6e85bf --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java +@@ -162,8 +_,16 @@ + this.getHandle().getSpawner().spawnRange = spawnRange; + } + ++ // Folia start - region threading ++ @Override ++ public MinecartSpawner getHandleRaw() { ++ return (MinecartSpawner)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public MinecartSpawner getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (MinecartSpawner) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java.patch new file mode 100644 index 0000000..5eb048e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java +@@ -72,8 +_,16 @@ + this.getHandle().explode(power); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.vehicle.MinecartTNT getHandleRaw() { ++ return (net.minecraft.world.entity.vehicle.MinecartTNT)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public MinecartTNT getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (MinecartTNT) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java.patch new file mode 100644 index 0000000..e0f12ee --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java.patch @@ -0,0 +1,28 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java +@@ -54,8 +_,16 @@ + return (sound != null) ? CraftSound.minecraftToBukkit(sound) : null; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Mob getHandleRaw() { ++ return (net.minecraft.world.entity.Mob)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Mob getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Mob) this.entity; + } + +@@ -63,7 +_,7 @@ + @Override + public void setHandle(net.minecraft.world.entity.Entity entity) { + super.setHandle(entity); +- paperPathfinder.setHandle(getHandle()); ++ paperPathfinder.setHandle((net.minecraft.world.entity.Mob)entity); // Folia - region threading + } + // Paper end - Mob Pathfinding API + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java.patch new file mode 100644 index 0000000..cae2bf6 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Monster getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Monster)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Monster getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Monster) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java.patch new file mode 100644 index 0000000..6e24796 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java.patch @@ -0,0 +1,24 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java +@@ -19,6 +_,13 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.MushroomCow getHandleRaw() { ++ return (net.minecraft.world.entity.animal.MushroomCow)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public boolean hasEffectsForNextStew() { + SuspiciousStewEffects stewEffects = this.getHandle().stewEffects; +@@ -94,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.animal.MushroomCow getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.MushroomCow) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java.patch new file mode 100644 index 0000000..75bb112 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java +@@ -9,8 +_,16 @@ + super(server, ocelot); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Ocelot getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Ocelot)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Ocelot getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Ocelot) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java.patch new file mode 100644 index 0000000..64680e5 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java +@@ -13,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.OminousItemSpawner getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.OminousItemSpawner) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java.patch new file mode 100644 index 0000000..8fb7a09 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java +@@ -50,8 +_,16 @@ + return false; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.decoration.Painting getHandleRaw() { ++ return (net.minecraft.world.entity.decoration.Painting)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.decoration.Painting getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.decoration.Painting) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java.patch new file mode 100644 index 0000000..11b5bcc --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Panda getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Panda)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Panda getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Panda) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java.patch new file mode 100644 index 0000000..d013a3b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java +@@ -11,8 +_,16 @@ + super(server, parrot); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Parrot getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Parrot)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Parrot getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Parrot) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java.patch new file mode 100644 index 0000000..68258f7 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Phantom getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Phantom)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Phantom getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Phantom) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java.patch new file mode 100644 index 0000000..25fa7ac --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java +@@ -55,8 +_,16 @@ + return Material.CARROT_ON_A_STICK; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Pig getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Pig)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Pig getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Pig) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java.patch new file mode 100644 index 0000000..1cb73fc --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java +@@ -30,8 +_,16 @@ + return this.getAnger() > 0; + } + ++ // Folia start - region threading ++ @Override ++ public ZombifiedPiglin getHandleRaw() { ++ return (ZombifiedPiglin)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ZombifiedPiglin getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ZombifiedPiglin) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java.patch new file mode 100644 index 0000000..f012272 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java +@@ -75,8 +_,16 @@ + return new CraftInventory(this.getHandle().inventory); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.piglin.Piglin getHandleRaw() { ++ return (net.minecraft.world.entity.monster.piglin.Piglin)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.piglin.Piglin getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.piglin.Piglin) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java.patch new file mode 100644 index 0000000..72de3cb --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java +@@ -95,8 +_,16 @@ + public void setBreed(boolean b) { + } + ++ // Folia start - region threading ++ @Override ++ public AbstractPiglin getHandleRaw() { ++ return (AbstractPiglin)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public AbstractPiglin getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (AbstractPiglin) super.getHandle(); + } + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java.patch new file mode 100644 index 0000000..f6f60bc --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.piglin.PiglinBrute getHandleRaw() { ++ return (net.minecraft.world.entity.monster.piglin.PiglinBrute)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.piglin.PiglinBrute getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.piglin.PiglinBrute) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java.patch new file mode 100644 index 0000000..8df4340 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java +@@ -11,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Pillager getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Pillager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Pillager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Pillager) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch new file mode 100644 index 0000000..9f656a6 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java.patch @@ -0,0 +1,77 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -666,7 +_,7 @@ + + @Override + public void kickPlayer(String message) { +- org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot ++ //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot // Folia - thread-safe now, as it will simply delay the kick + this.getHandle().transferCookieConnection.kickPlayer(CraftChatMessage.fromStringOrEmpty(message, true), org.bukkit.event.player.PlayerKickEvent.Cause.PLUGIN); // Paper - kick event cause + } + +@@ -684,7 +_,7 @@ + + @Override + public void kick(net.kyori.adventure.text.Component message, org.bukkit.event.player.PlayerKickEvent.Cause cause) { +- org.spigotmc.AsyncCatcher.catchOp("player kick"); ++ //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Folia - region threading - no longer needed + final ServerGamePacketListenerImpl connection = this.getHandle().connection; + if (connection != null) { + connection.disconnect(message == null ? net.kyori.adventure.text.Component.empty() : message, cause); +@@ -1403,6 +_,11 @@ + + @Override + public boolean teleport(Location location, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) { ++ // Folia start - region threading ++ if (true) { ++ throw new UnsupportedOperationException("Must use teleportAsync while in region threading"); ++ } ++ // Folia end - region threading + Set relativeArguments; + Set allFlags; + if (flags.length == 0) { +@@ -2067,7 +_,7 @@ + private void unregisterEntity(Entity other) { + // Paper end + ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap; +- ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); ++ ChunkMap.TrackedEntity entry = other.moonrise$getTrackedEntity(); // Folia - region threading + if (entry != null) { + entry.removePlayer(this.getHandle()); + } +@@ -2164,7 +_,7 @@ + if (original != null) otherPlayer.setUUID(original); // Paper - uuid override + } + +- ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId()); ++ ChunkMap.TrackedEntity entry = other.moonrise$getTrackedEntity(); // Folia - region threading + if (entry != null && !entry.seenBy.contains(this.getHandle().connection)) { + entry.updatePlayer(this.getHandle()); + } +@@ -2313,9 +_,16 @@ + return this; + } + ++ // Folia start - region threading ++ @Override ++ public ServerPlayer getHandleRaw() { ++ return (ServerPlayer)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ServerPlayer getHandle() { +- return (ServerPlayer) this.entity; ++ return (ServerPlayer) this.entity; // Folia - region threading - no checks for players, as it's a total mess + } + + public void setHandle(final ServerPlayer entity) { +@@ -3345,7 +_,7 @@ + { + if ( CraftPlayer.this.getHealth() <= 0 && CraftPlayer.this.isOnline() ) + { +- CraftPlayer.this.server.getServer().getPlayerList().respawn( CraftPlayer.this.getHandle(), false, Entity.RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.PLUGIN ); ++ CraftPlayer.this.getHandle().respawn(null, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.PLUGIN); // Folia - region threading + } + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java.patch new file mode 100644 index 0000000..fd4256b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java +@@ -8,8 +_,17 @@ + public CraftPolarBear(CraftServer server, net.minecraft.world.entity.animal.PolarBear entity) { + super(server, entity); + } ++ ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.PolarBear getHandleRaw() { ++ return (net.minecraft.world.entity.animal.PolarBear)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.PolarBear getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.PolarBear) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java.patch new file mode 100644 index 0000000..1aa0709 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java +@@ -12,8 +_,16 @@ + + // Paper - moved to AbstractProjectile + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.Projectile getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.Projectile)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.Projectile getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.Projectile) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java.patch new file mode 100644 index 0000000..c1c8c99 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Pufferfish getHandleRaw() { ++ return (Pufferfish)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Pufferfish getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Pufferfish) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java.patch new file mode 100644 index 0000000..932d02f --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Rabbit getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Rabbit)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Rabbit getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Rabbit) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java.patch new file mode 100644 index 0000000..438d095 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java +@@ -16,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.raid.Raider getHandleRaw() { ++ return (net.minecraft.world.entity.raid.Raider)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.raid.Raider getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.raid.Raider) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java.patch new file mode 100644 index 0000000..f7a51b1 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Ravager getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Ravager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Ravager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Ravager) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java.patch new file mode 100644 index 0000000..b9ee51c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Salmon getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Salmon)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Salmon getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Salmon) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java.patch new file mode 100644 index 0000000..0eacda5 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java +@@ -29,8 +_,16 @@ + this.getHandle().setSheared(flag); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Sheep getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Sheep)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Sheep getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Sheep) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java.patch new file mode 100644 index 0000000..fb0fd06 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java +@@ -18,8 +_,16 @@ + return "CraftShulker"; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Shulker getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Shulker)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Shulker getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Shulker) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java.patch new file mode 100644 index 0000000..a2975c6 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java +@@ -69,8 +_,16 @@ + return "CraftShulkerBullet"; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.ShulkerBullet getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.ShulkerBullet)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.ShulkerBullet getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.ShulkerBullet) this.entity; + } + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java.patch new file mode 100644 index 0000000..e8a508c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Silverfish getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Silverfish)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Silverfish getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Silverfish) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java.patch new file mode 100644 index 0000000..93b569c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java +@@ -27,8 +_,16 @@ + this.getHandle().setItem(CraftItemStack.asNMSCopy(item)); + } + ++ // Folia start - region threading ++ @Override ++ public Fireball getHandleRaw() { ++ return (Fireball)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Fireball getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Fireball) this.entity; + } + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java.patch new file mode 100644 index 0000000..7405f2a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java +@@ -31,8 +_,16 @@ + } + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Skeleton getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Skeleton)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Skeleton getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Skeleton) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java.patch new file mode 100644 index 0000000..7f4e927 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java +@@ -20,8 +_,16 @@ + return Variant.SKELETON_HORSE; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.horse.SkeletonHorse getHandleRaw() { ++ return (net.minecraft.world.entity.animal.horse.SkeletonHorse)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.horse.SkeletonHorse getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.horse.SkeletonHorse) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java.patch new file mode 100644 index 0000000..2865ab4 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java +@@ -19,8 +_,16 @@ + this.getHandle().setSize(size, /* true */ getHandle().isAlive()); // Paper - fix dead slime setSize invincibility + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Slime getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Slime)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Slime getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Slime) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java.patch new file mode 100644 index 0000000..f823c87 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.SmallFireball getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.SmallFireball)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.SmallFireball getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.SmallFireball) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java.patch new file mode 100644 index 0000000..dae2ba5 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java +@@ -16,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.sniffer.Sniffer getHandleRaw() { ++ return (net.minecraft.world.entity.animal.sniffer.Sniffer)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.sniffer.Sniffer getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.sniffer.Sniffer) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java.patch new file mode 100644 index 0000000..1d9f493 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java +@@ -8,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.Snowball getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.Snowball)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.Snowball getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.Snowball) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java.patch new file mode 100644 index 0000000..e77bebd --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java +@@ -19,8 +_,16 @@ + this.getHandle().setPumpkin(!derpMode); + } + ++ // Folia start - region threading ++ @Override ++ public SnowGolem getHandleRaw() { ++ return (SnowGolem)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public SnowGolem getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (SnowGolem) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java.patch new file mode 100644 index 0000000..2cdd926 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.SpectralArrow getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.SpectralArrow)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.SpectralArrow getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.SpectralArrow) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java.patch new file mode 100644 index 0000000..bf5426a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public SpellcasterIllager getHandleRaw() { ++ return (SpellcasterIllager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public SpellcasterIllager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (SpellcasterIllager) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java.patch new file mode 100644 index 0000000..40a1f9e --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Spider getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Spider)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Spider getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Spider) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java.patch new file mode 100644 index 0000000..e6186e3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Squid getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Squid)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Squid getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Squid) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java.patch new file mode 100644 index 0000000..804621f --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java +@@ -65,8 +_,16 @@ + return Material.WARPED_FUNGUS_ON_A_STICK; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Strider getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Strider)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Strider getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Strider) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java.patch new file mode 100644 index 0000000..c9a241f --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java +@@ -42,8 +_,16 @@ + this.getHandle().setFuse(fuseTicks); + } + ++ // Folia start - region threading ++ @Override ++ public PrimedTnt getHandleRaw() { ++ return (PrimedTnt)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public PrimedTnt getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (PrimedTnt) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java.patch new file mode 100644 index 0000000..36f1ac2 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Tadpole getHandleRaw() { ++ return (Tadpole)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Tadpole getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Tadpole) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java.patch new file mode 100644 index 0000000..e194704 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public TamableAnimal getHandleRaw() { ++ return (TamableAnimal)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public TamableAnimal getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (TamableAnimal) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java.patch new file mode 100644 index 0000000..6320217 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.Display.TextDisplay getHandleRaw() { ++ return (net.minecraft.world.entity.Display.TextDisplay)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.Display.TextDisplay getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.Display.TextDisplay) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java.patch new file mode 100644 index 0000000..8b7402b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java +@@ -26,8 +_,16 @@ + this.getHandle().setItem(CraftItemStack.asNMSCopy(item)); + } + ++ // Folia start - region threading ++ @Override ++ public ThrowableItemProjectile getHandleRaw() { ++ return (ThrowableItemProjectile)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ThrowableItemProjectile getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ThrowableItemProjectile) this.entity; + } + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java.patch new file mode 100644 index 0000000..e7462eb --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public ThrownExperienceBottle getHandleRaw() { ++ return (ThrownExperienceBottle)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ThrownExperienceBottle getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ThrownExperienceBottle) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java.patch new file mode 100644 index 0000000..5abe8ad --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java +@@ -61,8 +_,17 @@ + this.getHandle().splash(null); + } + // Paper end ++ ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.ThrownPotion getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.ThrownPotion)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.ThrownPotion getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.ThrownPotion) this.entity; + } + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java.patch new file mode 100644 index 0000000..cdd53c8 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.horse.TraderLlama getHandleRaw() { ++ return (net.minecraft.world.entity.animal.horse.TraderLlama)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.horse.TraderLlama getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.horse.TraderLlama) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java.patch new file mode 100644 index 0000000..6e20eff --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public ThrownTrident getHandleRaw() { ++ return (ThrownTrident)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public ThrownTrident getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (ThrownTrident) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java.patch new file mode 100644 index 0000000..b2e108a --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.TropicalFish getHandleRaw() { ++ return (net.minecraft.world.entity.animal.TropicalFish)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.TropicalFish getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.TropicalFish) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java.patch new file mode 100644 index 0000000..c64ced8 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Turtle getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Turtle)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Turtle getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Turtle) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java.patch new file mode 100644 index 0000000..5d6d800 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java +@@ -13,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Vex getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Vex)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Vex getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Vex) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java.patch new file mode 100644 index 0000000..5cfafd1 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +@@ -34,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.npc.Villager getHandleRaw() { ++ return (net.minecraft.world.entity.npc.Villager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.npc.Villager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.npc.Villager) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java.patch new file mode 100644 index 0000000..4c8aad3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java +@@ -14,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.ZombieVillager getHandleRaw() { ++ return (net.minecraft.world.entity.monster.ZombieVillager)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.ZombieVillager getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.ZombieVillager) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java.patch new file mode 100644 index 0000000..e404089 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Vindicator getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Vindicator)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Vindicator getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Vindicator) super.getHandle(); + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java.patch new file mode 100644 index 0000000..0dcf330 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java +@@ -9,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.npc.WanderingTrader getHandleRaw() { ++ return (net.minecraft.world.entity.npc.WanderingTrader)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.npc.WanderingTrader getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.npc.WanderingTrader) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java.patch new file mode 100644 index 0000000..42eaeb3 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java +@@ -15,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public Warden getHandleRaw() { ++ return (Warden)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public Warden getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (Warden) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java.patch new file mode 100644 index 0000000..ed98d4d --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java +@@ -10,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public WaterAnimal getHandleRaw() { ++ return (WaterAnimal)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public WaterAnimal getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (WaterAnimal) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java.patch new file mode 100644 index 0000000..da70c98 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java +@@ -10,6 +_,7 @@ + + @Override + public net.minecraft.world.entity.projectile.windcharge.WindCharge getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.windcharge.WindCharge) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java.patch new file mode 100644 index 0000000..de84304 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java +@@ -15,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Witch getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Witch)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Witch getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Witch) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch new file mode 100644 index 0000000..2c8600b --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java +@@ -21,8 +_,16 @@ + } + } + ++ // Folia start - region threading ++ @Override ++ public WitherBoss getHandleRaw() { ++ return (WitherBoss)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public WitherBoss getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (WitherBoss) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java.patch new file mode 100644 index 0000000..3501f85 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java +@@ -18,8 +_,16 @@ + return this.getHandle().isDangerous(); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.projectile.WitherSkull getHandleRaw() { ++ return (net.minecraft.world.entity.projectile.WitherSkull)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.projectile.WitherSkull getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.projectile.WitherSkull) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java.patch new file mode 100644 index 0000000..b816304 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java +@@ -31,8 +_,16 @@ + } + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.animal.Wolf getHandleRaw() { ++ return (net.minecraft.world.entity.animal.Wolf)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.animal.Wolf getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.animal.Wolf) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java.patch new file mode 100644 index 0000000..df6cac7 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java +@@ -19,8 +_,16 @@ + this.getHandle().setBaby(flag); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Zoglin getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Zoglin)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Zoglin getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Zoglin) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java.patch new file mode 100644 index 0000000..f20758c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java.patch @@ -0,0 +1,19 @@ +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java +@@ -12,8 +_,16 @@ + super(server, entity); + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.entity.monster.Zombie getHandleRaw() { ++ return (net.minecraft.world.entity.monster.Zombie)this.entity; ++ } ++ // Folia end - region threading ++ + @Override + public net.minecraft.world.entity.monster.Zombie getHandle() { ++ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading + return (net.minecraft.world.entity.monster.Zombie) this.entity; + } + diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java.patch new file mode 100644 index 0000000..76e63dc --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java.patch @@ -0,0 +1,29 @@ +--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java ++++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +@@ -951,7 +_,7 @@ + return CraftEventFactory.handleBlockSpreadEvent(world, source, target, block, 2); + } + +- public static BlockPos sourceBlockOverride = null; // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep. ++ public static final ThreadLocal sourceBlockOverrideRT = new ThreadLocal<>(); // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep. // Folia - region threading + + public static boolean handleBlockSpreadEvent(LevelAccessor world, BlockPos source, BlockPos target, net.minecraft.world.level.block.state.BlockState block, int flag) { + // Suppress during worldgen +@@ -963,7 +_,7 @@ + CraftBlockState state = CraftBlockStates.getBlockState(world, target, flag); + state.setData(block); + +- BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverride != null ? CraftEventFactory.sourceBlockOverride : source), state); ++ BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverrideRT.get() != null ? CraftEventFactory.sourceBlockOverrideRT.get() : source), state); // Folia - region threading + Bukkit.getPluginManager().callEvent(event); + + if (!event.isCancelled()) { +@@ -2229,7 +_,7 @@ + CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemStack.copyWithCount(1)); + + org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(bukkitBlock, craftItem.clone(), CraftVector.toBukkit(to)); +- if (!net.minecraft.world.level.block.DispenserBlock.eventFired) { ++ if (!net.minecraft.world.level.block.DispenserBlock.eventFired.get().booleanValue()) { // Folia - region threading + if (!event.callEvent()) { + return itemStack; + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java.patch new file mode 100644 index 0000000..baa45c9 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java.patch @@ -0,0 +1,10 @@ +--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java ++++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +@@ -514,6 +_,7 @@ + } + + protected CraftTask handle(final CraftTask task, final long delay) { // Paper ++ if (true) throw new UnsupportedOperationException(); // Folia - region threading + // Paper start + if (!this.isAsyncScheduler && !task.isSync()) { + this.asyncScheduler.handle(task, delay); diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java.patch new file mode 100644 index 0000000..f1229aa --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java.patch @@ -0,0 +1,26 @@ +--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java ++++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java +@@ -45,6 +_,7 @@ + } + @Override + public CraftObjective registerNewObjective(String name, Criteria criteria, net.kyori.adventure.text.Component displayName, RenderType renderType) throws IllegalArgumentException { ++ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet + if (displayName == null) { + displayName = net.kyori.adventure.text.Component.empty(); + } +@@ -204,6 +_,7 @@ + + @Override + public Team registerNewTeam(String name) { ++ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet + Preconditions.checkArgument(name != null, "Team name cannot be null"); + Preconditions.checkArgument(name.length() <= Short.MAX_VALUE, "Team name '%s' is longer than the limit of 32767 characters (%s)", name, name.length()); + Preconditions.checkArgument(this.board.getPlayerTeam(name) == null, "Team name '%s' is already in use", name); +@@ -231,6 +_,7 @@ + + @Override + public void clearSlot(DisplaySlot slot) { ++ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet + Preconditions.checkArgument(slot != null, "Slot cannot be null"); + this.board.setDisplayObjective(CraftScoreboardTranslations.fromBukkitSlot(slot), null); + } diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java.patch new file mode 100644 index 0000000..6ac7bad --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java.patch @@ -0,0 +1,18 @@ +--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java ++++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +@@ -42,6 +_,7 @@ + + @Override + public CraftScoreboard getNewScoreboard() { ++ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet + org.spigotmc.AsyncCatcher.catchOp("scoreboard creation"); // Spigot + CraftScoreboard scoreboard = new CraftScoreboard(new ServerScoreboard(this.server)); + // Paper start +@@ -68,6 +_,7 @@ + + // CraftBukkit method + public void setPlayerBoard(CraftPlayer player, org.bukkit.scoreboard.Scoreboard bukkitScoreboard) { ++ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet + Preconditions.checkArgument(bukkitScoreboard instanceof CraftScoreboard, "Cannot set player scoreboard to an unregistered Scoreboard"); + + CraftScoreboard scoreboard = (CraftScoreboard) bukkitScoreboard; diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java.patch new file mode 100644 index 0000000..c66d0fc --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java.patch @@ -0,0 +1,15 @@ +--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +@@ -384,6 +_,12 @@ + throw new InvalidPluginException("Unsupported API version " + pdf.getAPIVersion()); + } + ++ // Folia start - block plugins not marked as supported ++ if (!pdf.isFoliaSupported()) { ++ throw new InvalidPluginException("Plugin " + pdf.getFullName() + " is not marked as supporting regionised multithreading"); ++ } ++ // Folia end - block plugins not marked as supported ++ + if (toCheck.isOlderThan(minimumVersion)) { + // Older than supported + throw new InvalidPluginException("Plugin API version " + pdf.getAPIVersion() + " is lower than the minimum allowed version. Please update or replace it."); diff --git a/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java.patch b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java.patch new file mode 100644 index 0000000..96fed3c --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java.patch @@ -0,0 +1,16 @@ +--- a/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java +@@ -66,6 +_,13 @@ + this.handle = worldAccess; + } + ++ // Folia start - region threading ++ @Override ++ public net.minecraft.world.level.StructureManager structureManager() { ++ return this.handle.structureManager(); ++ } ++ // Folia end - region threading ++ + public WorldGenLevel getHandle() { + return this.handle; + } diff --git a/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotCommand.java.patch b/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotCommand.java.patch new file mode 100644 index 0000000..cb0e892 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotCommand.java.patch @@ -0,0 +1,18 @@ +--- a/src/main/java/org/spigotmc/SpigotCommand.java ++++ b/src/main/java/org/spigotmc/SpigotCommand.java +@@ -35,6 +_,7 @@ + .build() + ); + ++ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading + MinecraftServer console = MinecraftServer.getServer(); + org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); + for (ServerLevel world : console.getAllLevels()) { +@@ -43,6 +_,7 @@ + console.server.reloadCount++; + + Command.broadcastCommandMessage(sender, text("Reload complete.", NamedTextColor.GREEN)); ++ }); // Folia - region threading + } + + return true; diff --git a/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotConfig.java.patch b/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotConfig.java.patch new file mode 100644 index 0000000..642c402 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotConfig.java.patch @@ -0,0 +1,20 @@ +--- a/src/main/java/org/spigotmc/SpigotConfig.java ++++ b/src/main/java/org/spigotmc/SpigotConfig.java +@@ -182,7 +_,7 @@ + SpigotConfig.restartOnCrash = SpigotConfig.getBoolean("settings.restart-on-crash", SpigotConfig.restartOnCrash); + SpigotConfig.restartScript = SpigotConfig.getString("settings.restart-script", SpigotConfig.restartScript); + SpigotConfig.restartMessage = SpigotConfig.transform(SpigotConfig.getString("messages.restart", "Server is restarting")); +- SpigotConfig.commands.put("restart", new RestartCommand("restart")); ++ //SpigotConfig.commands.put("restart", new RestartCommand("restart")); // Folia - region threading + } + + public static boolean bungee; +@@ -228,7 +_,7 @@ + } + + private static void tpsCommand() { +- SpigotConfig.commands.put("tps", new TicksPerSecondCommand("tps")); ++ //SpigotConfig.commands.put("tps", new TicksPerSecondCommand("tps")); // Folia - region threading + } + + public static int playerSample; diff --git a/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotWorldConfig.java.patch b/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotWorldConfig.java.patch new file mode 100644 index 0000000..4437f16 --- /dev/null +++ b/folia-server/paper-patches/files/src/main/java/org/spigotmc/SpigotWorldConfig.java.patch @@ -0,0 +1,11 @@ +--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java ++++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java +@@ -401,7 +_,7 @@ + this.otherMultiplier = (float) this.getDouble("hunger.other-multiplier", 0.0); + } + +- public int currentPrimedTnt = 0; ++ //public int currentPrimedTnt = 0; // Folia - region threading - moved to regionised world data + public int maxTntTicksPerTick; + private void maxTntPerTick() { + if (SpigotConfig.version < 7) { diff --git a/folia-server/paper-patches/files/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java.patch b/folia-server/paper-patches/files/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java.patch new file mode 100644 index 0000000..ca30437 --- /dev/null +++ b/folia-server/paper-patches/files/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java.patch @@ -0,0 +1,16 @@ +--- a/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java ++++ b/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java +@@ -20,6 +_,13 @@ + this.identifier = identifier; + } + ++ // Folia start - region threading ++ @Override ++ public boolean isFoliaSupported() { ++ return true; ++ } ++ // Folia end - region threading ++ + @Override + public @NotNull String getName() { + return this.identifier;