Giter Club home page Giter Club logo

tuinity's Introduction



Fork of Paper aimed at improving server performance at high playercounts.

Java CI IRC Discord

How To (Server Admins)

Tuinity uses the same paperclip jar system that Paper uses.

You can download the latest build (1.17.x) of Tuinity by going here

You can also build it yourself.

How To (Plugin developers)

In order to use Tuinity as a dependency you must build it yourself. Each time you want to update your dependency you must re-build Tuinity.

Tuinity-API maven dependency:

<dependency>
    <groupId>com.tuinity</groupId>
    <artifactId>tuinity-api</artifactId>
    <version>1.17.1-R0.1-SNAPSHOT</version>
    <scope>provided</scope>
 </dependency>

Tuinity-Server maven dependency:

<dependency>
    <groupId>com.tuinity</groupId>
    <artifactId>tuinity</artifactId>
    <version>1.17.1-R0.1-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>

TODO nms

Building

Requirements:

  • You need git installed, with a configured user name and email. On Windows you need to run from git bash.
  • You need maven installed.
  • You need jdk 16+ installed to compile (and jre 16+ to run).
  • Anything else that paper requires to build.

To set up the Tuinity-API and Tuinity-Server repo to begin editing/reading source code, clone the Tuinity repo and run gradlew applypatches from the root directory.

To build Tuinity, run the following commands in the root directory after cloning the Tuinity repo:

  1. gradlew applypatches
  2. gradlew build
  3. gradlew paperclipjar

Once all 3 steps complete successfully, tuinity-paperclip.jar will be placed into the project root directory

Creating a patch

Patches are effectively just commits in either Tuinity-API or Tuinity-Server. To create one, just add a commit to either repo and run ./gradlew rebuildpatches, and a patch will be placed in the patches folder. Modifying commits will also modify its corresponding patch file.

License

The PATCHES-LICENSE file describes the license for api & server patches, found in ./patches and its subdirectories except when noted otherwise.

The fork is based off of PaperMC's fork example found here. As such, it contains modifications to it in this project, please see the repository for license information of modified files.

tuinity's People

Contributors

aikar avatar astei avatar bigfinfrank avatar chasewhip8 avatar clrxbl avatar denwav avatar electronicboy avatar jowsey avatar jpenilla avatar jroy avatar kryptoskid avatar mio-19 avatar paulbgd avatar proximyst avatar silverwolfg11 avatar spottedleaf avatar starryskye avatar stephan-gh avatar theomega24 avatar toffikk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tuinity's Issues

/version update check

Describe the bug
/version shows "Unknown version" when checking for updates

To Reproduce

  1. Run /version

Plugins
N/A

Version
git-Tuinity-"d16b788"

Misc
N/A

Unload inactive chunks

Keeping lots more chunks loaded stresses memory load more, especially if they're not being used.

Must consider gen system and lighting - they could expect these chunks to be loaded, and if they do, they will either break or load them anyways

View distance and loaded chunks

Describe the bug
Tuinity seems to load more chunks with equal view distance comparing to other forks

To Reproduce
Test server with bare minimum plugins (and no tuinity magic)
No additional view distance settings other than the one from server.properties
The test results are:

         view.(set)  view.(effective)   chunks.loaded  =range
Spigot      5           5                  169            6
Paper       5           4                  169            6
Tuinity     5           5                  225            7

Conclusion: Tuinity adds another chunk to the range (compared to spigot) which increases the total number of loaded chunks. This means that there are 2 additional chunks in each direction loaded, which the player doesn't see. If these chunks are also pushed to the player, it increases the network load for that player and, of course, the load for the server. Especially when the range increases, it concerns a fairly large amount of chunks.

Edit: when I turn on the tuinity magic and the no-tick view distance is pumped up to 8, it loads 441 chunks which represents a bare view range of 10 (21*21).

Plugins
Barely just to show the number of chunks loaded

Version
git-Tuinity-"6316c97" (MC: 1.15.2)

Misc
Any block/light that changes in the non-ticking area are directly viewable for the player. Perhaps a slower update of these outer chunks may increase performance.

Use distance map for entity tracker

Should make track ops when players move less expensive, given they'll be using the distance map and not checking every entity/player in the world

Add "Reduce entity tracker updates on move" patch

Is your feature request related to a problem? Please describe.
Add "Reduce entity tracker updates on move" patch
PaperMC/Paper#2970

Describe the solution you'd like
The patch being added

Describe alternatives you've considered
/shrug

Additional context
From local testing of days now and from many others in the thread it seems like the PR is a very good performance increase with no issues.

Rewrite config handling

  • Add comments in config specifying what the option does
  • Move world config to a default section, allowing worlds to override (basically paper's way)
  • Use the wiki space on GH for documenting config (wiki also would serve as a guide)

Fake view distance

Allow a configurable per-world, per player (api) view distance where chunks load but do not tick.

Make chunk loading when creating a map async

Is your feature request related to a problem? Please describe.
When a player is creating a map image by moving around the main thread lags severely and can freeze up for 10+ seconds as the chunks are probably sync loaded as shown here: https://imgur.com/a/7wPyaL6

Describe the solution you'd like
I think these chunks should be loaded async

Describe alternatives you've considered
Disabling map creating XD

Additional context
This would be really cool thanks!

Load chunks async for player login

Is your feature request related to a problem? Please describe.
Load chunks async for player login since it causes the server to be unresponsive for various seconds after server startup.

Describe the solution you'd like
"report that on gh michael i wanna look into fixing it later i.e loading chunks async for player login" -leaf

Describe alternatives you've considered
Not using Tuinity

Additional context

[16:24:45] [Paper Watchdog Thread/ERROR]: ------------------------------
[16:24:45] [Paper Watchdog Thread/ERROR]: Server thread dump (Look for plugins here before reporting to Paper!):
[16:24:45] [Paper Watchdog Thread/ERROR]: Chunk wait task info below:
[16:24:45] [Paper Watchdog Thread/ERROR]: -135,13 in 'world:
[16:24:45] [Paper Watchdog Thread/ERROR]: Load Task - none
[16:24:45] [Paper Watchdog Thread/ERROR]: Save Task - none
[16:24:45] [Paper Watchdog Thread/ERROR]: Chunk Holder - non-null
[16:24:45] [Paper Watchdog Thread/ERROR]: Chunk Status - minecraft:full
[16:24:45] [Paper Watchdog Thread/ERROR]: Chunk Holder Status - minecraft:features
[16:24:45] [Paper Watchdog Thread/ERROR]: ------------------------------
[16:24:45] [Paper Watchdog Thread/ERROR]: Current Thread: Server thread
[16:24:45] [Paper Watchdog Thread/ERROR]:       PID: 27 | Suspended: false | Native: false | State: TIMED_WAITING
[16:24:45] [Paper Watchdog Thread/ERROR]:       Stack:
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/jdk.internal.misc.Unsafe.park(Native Method)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:235)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.IAsyncTaskHandler.bl(IAsyncTaskHandler.java:131)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.IAsyncTaskHandler.awaitTasks(IAsyncTaskHandler.java:120)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.ChunkProviderServer.getChunkAt(ChunkProviderServer.java:426)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.World.getChunkAt(World.java:328)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.World.c(World.java:1178)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.ICollisionAccess$1.tryAdvance(SourceFile:121)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//com.google.common.collect.CollectSpliterators$1FlatMapSpliterator.tryAdvance(CollectSpliterators.java:226)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.util.stream.ReferencePipeline.allMatch(ReferencePipeline.java:533)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.ICollisionAccess.a(SourceFile:61)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.ICollisionAccess.getCubes(SourceFile:57)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.World.getCubes(World.java:884)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.Entity.c(Entity.java:2104)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.EntityHuman.dX(EntityHuman.java:293)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.EntityHuman.tick(EntityHuman.java:215)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.EntityPlayer.playerTick(EntityPlayer.java:449)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.PlayerConnection.tick(PlayerConnection.java:149)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.NetworkManager.a(NetworkManager.java:260)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.ServerConnection.c(ServerConnection.java:139)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.MinecraftServer.b(MinecraftServer.java:1267)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.DedicatedServer.b(DedicatedServer.java:432)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.MinecraftServer.a(MinecraftServer.java:1112)
[16:24:45] [Paper Watchdog Thread/ERROR]:               app//net.minecraft.server.v1_15_R1.MinecraftServer.run(MinecraftServer.java:934)
[16:24:45] [Paper Watchdog Thread/ERROR]:               [email protected]/java.lang.Thread.run(Thread.java:830)
[16:24:45] [Paper Watchdog Thread/ERROR]: ------------------------------
[16:24:45] [Paper Watchdog Thread/ERROR]: --- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---
[16:24:45] [Paper Watchdog Thread/ERROR]: ------------------------------

Warning when player leaves

Describe the bug
When a player leaves the server then console spits this out a couple hundred times:

>.... [14:37:00 WARN]: java.nio.channels.ClosedChannelException
>.... [14:37:00 WARN]: at io.netty.channel.AbstractChannel$AbstractUnsafe.close(...)(Unknown Source)

To Reproduce
Join the server
Leave the server
Look in console

Plugins
Plugins (56): AdvancedWarn, AsyncWorldEdit, AsyncWorldEdit-BountifulAPI*, AuctionHouse, BountifulAPI, BungeeTabListPlus, BuycraftX, Citizens, ClearLag, CommandDoesNotExist, CommandHook, CoreProtect, CraftBook, CrazyCrates, EditableSign, Essentials, EssentialsChat, EssentialsGeoIP, EssentialsSpawn, GameModeInventories, GriefPrevention, GSit, Harbor, HolographicDisplays, Jobs, KeepDeathDrop, LibsDisguises, LimitPillagers, LuckPerms, Matrix, mcMMO, Multiverse-Core, Multiverse-NetherPortals, PlayerParticles, PlayTimeTracker, PlotSquared, PremiumVanish, ProtocolLib, SkQuery, Skript, Skungee*, skUtilities*, SSHD*, TAB, TimeIsMoney*, UltimateTimber, Vault, VeinMiner, Votifier, VotingPlugin, Wild, WildStacker, WorldEdit, WorldEditSUI, WorldGuard, WorldGuardExtraFlags

Version

>.... [14:45:30 INFO]: This server is running Tuinity version git-Tuinity-"6316c97" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)
>.... [14:45:30 INFO]: Checking version, please wait...
>.... [14:45:30 INFO]: Previous version: git-Paper-143 (MC: 1.15.2)
>.... [14:45:30 INFO]: You are running the latest version

Misc
Doesn't happen on normal Paper builds

High ping

Describe the bug

  • When loading chunks through the map, regardless of the client's viewing distance, PING goes up a lot.
  • The server is located in the United States of America and the players are mostly in Brazil and Portugal.
  • Pings between 150 and 300 are expected

To Reproduce

  • Fly on the map with the settings below.
server.properties
view-distance=4

spigot.yml
world-settings:
  default:
    view-distance: 4
  evento:
    view-distance: 3

tuinity.ymltuinity.yml
# Configuration file for Tuinity.
config-version-please-do-not-modify-me: 0
max-pending-chunk-tickets-per-player: 5
delay-chunkunloads-by: 10
world:
  optimized-tracker: true
  optimized-tracker-track-range: -1
  optimized-tracker-untrack-range: -1
  no-tick-view-distance: -1
world_nether:
  optimized-tracker: true
  optimized-tracker-track-range: -1
  optimized-tracker-untrack-range: -1
  no-tick-view-distance: -1
world_the_end:
  optimized-tracker: true
  optimized-tracker-track-range: -1
  optimized-tracker-untrack-range: -1
  no-tick-view-distance: -1
evento:
  optimized-tracker: true
  optimized-tracker-track-range: -1
  optimized-tracker-untrack-range: -1
  no-tick-view-distance: -1

startup flags
java -Xms10G -Xmx10G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=30 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=32M -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled -XX:+UseLargePagesInMetaspace -Dtuinity.excessive-te-limit=1000 -jar server.jar

plugins
>....=>.... [15:43:36 INFO]: Plugins (51): AntiCooldown, AuthMe, BuycraftX, ChatReaction, ChatReactionPlus, CheaperPhysicsEvent, ConsoleSpamFix, CoreProtect, CrazyCrates, DeluxeTags, EasyChairs, EntityDetection, Essentials, EssentialsSpawn, EZColors, eZProtector, FarmLimiter, FastLogin, GriefPrevention, Guilds, HolographicDisplays, KillerMoney, LimitPillagers, Lottery, LuckPerms, mcMMO, ModReq, PacketLimiter, PlaceholderAPI, PlayerHeads, PlayerShopGUIPlus, ProtocolLib, PsudoCommand, ShopGUIPlus, SkinsRestorer, spark, SpawnerManager, SuperbVote, TAB, TrMenu, UltimateChat, Vault, VillagerOptimiser, VKAutoPickup, VoidGenerator, Votifier, Wild, WorldBorder, WorldEdit, WorldGuard, WorldLoader

version
>....=>.... [15:40:46 INFO]: This server is running Tuinity version git-Tuinity-"9d4ff87" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)
>.... [15:40:46 INFO]: Checking version, please wait...
>.... [15:40:46 INFO]: Previous version: git-Paper-129 (MC: 1.15.2)
>.... [15:40:46 INFO]: Unknown version

Misc

  • The problem seems to get worse when the server reaches 65+ players.
  • Problem does not occur when using Paper-129 with the same settings.

Citizens NPCs disappear

Describe the bug
My Citizens NPCs disappear, if I move away from them, and then come back, they will not be.

To Reproduce
https://www.youtube.com/watch?v=OGFXWUxOlps&feature=youtu.be

Plugins
[18:51:21 INFO]: Plugins (32): AdvancedBan*, ajParkour, BlockParticles, ChatBubbles, Chatty*, Citizens, CitizensCMD, ExploitFixer, HolographicDisplays, HolographicScoreboard*, ItemJoin, KeepChunks, LuckPerms, Multiverse-Core, PacketLimiter, PlaceholderAPI, PlayMoreSounds*, PlugMan, PreventPortBypass*, ProtocolLib, ProtocolSupport, Scoreboard-revision*, SkinsRestorer, Spawntp*, StaffChat, TAB, TrMenu, Vault, VoidSpawn, WitherAC, WorldEdit, WorldGuard

Version
[18:51:33 INFO]: This server is running Tuinity version git-Tuinity-"36a0b0d" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)
[18:51:33 INFO]: Checking version, please wait...
[18:51:33 INFO]: Previous version: git-Paper-2e44dc1a (MC: 1.15.2)

Server-Worker-2 died java.lang.NullPointerException: null (in light code)

Describe the bug: Installed Tuinity and renamed it to server.jar... fired up the server and the console spat this big boi out, and just stopped everything before preparing the world...

https://pastebin.com/SgtrMe9e

To Reproduce: Removed my paper.jar (that was renamed to server.jar), and installed Tuinity-paperclip.jar and renamed it to server.jar? I did it correctly, right?

Any ideas if I did something wrong?

Plugins: AuctionHouse, Autorank, BuyRegion, Chair, ChestShop, Chunkmaster, Citizens, CitizensCMD, ClearLag, CoreProtect, CreativeItemControl, DiscordSRV, DynamicShop, dynmap*, EditableSign, EnjinMinecraftPlugin, EntityTrackerFixer, Essentials, EssentialsChat, EssentialsSpawn, HeadDatabase*, HeroAction*, HubThat, Jobs, Lands, LimitPillagers, LuckPerms, mcMMO, Multiverse-Core, Multiverse-Inventories, Multiverse-Portals, Playtimes*, PlotSquared, PluginLibrary, SilkSpawners, SmoothSleep, Statz, Vault, VillagerOptimiser, Votifier, VotingPlugin, WorldEdit, WorldGuard, WorldGuardExtraFlags

Version: Build #12 (Sun Mar 22 09:54:52 UTC 2020) (I think this is incorrect, if it is, pls let me know!)

Increasing Number Of Entities

Describe the bug
Before I use tuinity, im using paper.jar. The Number of entities i get around 3k+ and the number of chunks 6k+ but when switch to tuinity, the number chunks drastically increase with entities around 11307k and chunks 19k+

To Reproduce
No

Plugins
Plugins (53): AdvancedAnnouncement*, AdvancedHelp, AdvancedRegionMarket, AntiCommandSuggestions, AuthMe, BlockLocker, ChatManager, ChopTree2, ChunkSpawnerLimit, Citizens, CitizensCMD, ClearLag, CMI, CMIEInjector*, Core, CoreProtect, CrazyCrates, DeathTax*, DiscordSRV, EnchantControl, EntityTrackerFixer, EpicRename, FarmLimiter, GriefPrevention, GriefPreventionFlags, HubKick*, IllegalStack, Images, IPWhitelist*, LibsDisguises, LimitPillagers, LuckPerms, Multiverse-Core, NotTooExpensive*, PacketLimiter, PlaceholderAPI, ProtocolLib, RandomTeleport, RestrictedCreative, SAML, ShopChest, SilkTouchSpawners, SkinsRestorer, TAB, TimeVote, Vault, VillagerOptimiser, Votifier, VotingPlugin, WorldEdit, WorldGuard, WorldGuardExtraFlags, XRayShield

Version
This server is running Tuinity version git-Tuinity-"e5045a0" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)

Misc
Is this because EntityTrackerFixer Or Simple Anti Mob Lagg Plugin freezing the entities

Failed to schedule load callback for chunk

Describe the bug
Was genning the world when I got this error
https://pastebin.com/raw/fTa2c0M5

To Reproduce
Generator a fresh world and hope?

Plugins
[09:46:08 INFO]: Plugins (2): Essentials, EssentialsSpawn

Version
[09:46:27 INFO]: This server is running Tuinity version git-Tuinity-"8f8b451" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)
[09:46:27 INFO]: You are running the latest version

FAWE unable to resend chunks to players

[21:20:56 WARN]: java.lang.NoSuchFieldError: visibleChunks
[21:20:56 WARN]:     at com.boydti.fawe.bukkit.adapter.mc1_15.BukkitAdapter_1_15.getPlayerChunk(BukkitAdapter_1_15.java:141)
[21:20:56 WARN]:     at com.boydti.fawe.bukkit.adapter.mc1_15.BukkitAdapter_1_15.sendChunk(BukkitAdapter_1_15.java:146)
[21:20:56 WARN]:     at com.boydti.fawe.bukkit.adapter.mc1_15.BukkitGetBlocks_1_15.lambda$call$6(BukkitGetBlocks_1_15.java:436)
[21:20:56 WARN]:     at com.boydti.fawe.bukkit.adapter.mc1_15.BukkitGetBlocks_1_15.call(BukkitGetBlocks_1_15.java:470)
[21:20:56 WARN]:     at com.boydti.fawe.beta.implementation.chunk.ChunkHolder.call(ChunkHolder.java:421)
[21:20:56 WARN]:     at com.boydti.fawe.beta.implementation.chunk.ChunkHolder.call(ChunkHolder.java:410)
[21:20:56 WARN]:     at com.boydti.fawe.beta.implementation.chunk.ChunkHolder.call(ChunkHolder.java:29)
[21:20:56 WARN]:     at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[21:20:56 WARN]:     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[21:20:56 WARN]:     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[21:20:56 WARN]:     at java.base/java.lang.Thread.run(Thread.java:834)

Caused by GC patch replacing chunk map

Chunks not loading at all when teleporting (high player counts)

Describe the bug
At high player counts when I teleport to coordinates the chunks do not load at all.
image
Issue persists after reconnecting

To Reproduce
Steps to reproduce. Videos are nice if applicable.
Teleport to coordinates when the server is under load. No chunks load.

Plugins
Not a plugin issue, only arose after leaf added the limit on max chunk sends per second.

Version
Show the output of /version here.
image

Misc
Anything else helpful not belonging in the categories above.
Nope.

Server GUI improvements

Region view:

  • Tick time per region - by type (entity, te, player, etc)
  • Entity/TileEntity/Player count per chunk/region
  • Show chunk tickets

Add more graphs (configurable in GUI):

  • TPS/Tick time
  • GC timing
  • Entity count (by world?)
  • Chunk/Region count
  • Warmroast?

Player list:

  • Time played
  • Kick/ban/op/etc (add separate tab to unban)

More to add

Crash: "Exception ticking world"

Error posted to console as cause of crash:
https://paste.gg/p/anonymous/1f849091d6564125b208f85fde32c321

Crash report:
https://paste.gg/p/anonymous/fb016e55aca8493fb25d6ddc4325015c

Version:
[23:41:50 INFO]: This server is running Tuinity version git-Tuinity-"bf2a4dc" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)
[23:41:50 INFO]: Checking version, please wait...
[23:41:50 INFO]: Previous version: git-Tuinity-"daa949d" (MC: 1.15.2)
[23:41:50 INFO]: You are 2 version(s) behind

Plugins:
[23:42:05 INFO]: Plugins (67): AdvancedAnnouncement*, AntiVPN, BeastWithdraw, BlockLocker, BossShopPro, BuycraftX, ChatReaction, Citizens, CitizensCMD, CMI, CMIEInjector*, CommandBlocks, CommandToItem, CoreProtect, CrazyAuctions, CrazyCrates, CustomHeads*, DisableVillagers, DiscordSRV, dynmap*, Dynmap-Towny, FastCraft, Graves, IllegalStack, ImageOnMap, InventoryRollback, Jobs, LibsDisguises, LimitedUses*, LimitPillagers, LiteBans, Lottery, LuckPerms, mcMMO, Milestones, MobFarmManager, MorphRedeem, Multiverse-Core, NoPlugins, PlaceholderAPI, PlayerAds, PlayerVaults, PlayerWarps, ProCosmetics, ProtocolLib, QuickShop, SafariNet, ServerRestart, ShowItem, spark, SuperVanish, TAB, Towny, TownyFlight, TownyNameUpdater, TradeSystem, Vault, VentureChat, ViaVersion*, VoidGenerator, Votifier, VotingPlugin, Wild, WorldBorder, WorldEdit, WorldGuard, WorldGuardExtraFlags

java 8 support

some hosts use java 8 still because of that i cant run this to try it

Add regular chunk map for getIfLoaded type calls

In hot areas, the get player chunk -> get future -> get either -> get chunk is bad for performance

It's also worth modifying getChunkAt(x, z) to take advantage of this

Must be MT-Safe for reads.

Large player move vector causing sync loads

The server stops spamming these errors :
Crash Logs : https://hastebin.com/avucufejil.sql
Can be anytime.

Plugins (43): Bitcoin, BlockLocker, ChatControl, ChestShop, CMI, CoreProtect, CrazyAuctions, CrazyCrates, CrazyEnchantments, DisableJoinMessage*, Elevator, EpicWorldGenerator, FastAsyncWorldEdit, FeatherBoard*, Graves, GriefPrevention, Harbor, IllegalStack, Item2Chat, Jobs, LibsDisguises, LuckPerms, mcMMO, Multiverse-Core, MVdWPlaceholderAPI*, NametagEdit*, PL-Hide, PlaceholderAPI, Plan, PreventPortBypass*, ProtocolLib, ProtocolSupport, PWarp, ShopGUIPlus, SkinsRestorer, Vault, VoidWorld*, VoteSender*, Votifier, VotingPlugin, WooCraft*, WorldEdit, WorldGuard

This server is running Tuinity version git-Tuinity-"c2ad42c" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)

Fully prioritise chunk loading

Mojang's system has zero prioritisation - which means that if you get a lot of players stacking up chunk loads and then you make a sync chunk gen... well you're screwed.

Unable to build on Java 14

Describe the bug
Applying class mappings running a Java 14 JDK will crash ASM as it does not support class version 58.

To Reproduce

Downloading unmapped vanilla jar...
Applying class mappings...
Exception in thread "main" java.lang.IllegalArgumentException: Unsupported class file major version 58
	at org.objectweb.asm.ClassReader.<init>(ClassReader.java:195)
	at org.objectweb.asm.ClassReader.<init>(ClassReader.java:176)
	at org.objectweb.asm.ClassReader.<init>(ClassReader.java:162)
	at org.objectweb.asm.ClassReader.<init>(ClassReader.java:294)
	at net.md_5.ss.repo.RuntimeRepo.getClass0(RuntimeRepo.java:25)
	at net.md_5.ss.repo.ClassRepo.getClass(ClassRepo.java:22)
	at net.md_5.ss.repo.AggregateRepo.getClass0(AggregateRepo.java:30)
	at net.md_5.ss.repo.ClassRepo.getClass(ClassRepo.java:22)
	at net.md_5.ss.model.ClassInfo$1.apply(ClassInfo.java:103)
	at net.md_5.ss.model.ClassInfo$1.apply(ClassInfo.java:98)
	at com.google.common.collect.Iterators$7.transform(Iterators.java:750)
	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:47)
	at com.google.common.collect.Iterators$6.computeNext(Iterators.java:616)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
	at net.md_5.ss.remapper.EnhancedRemapper.findMethodDeclarer(EnhancedRemapper.java:77)
	at net.md_5.ss.remapper.EnhancedRemapper.mapMethodName0(EnhancedRemapper.java:189)
	at net.md_5.ss.remapper.EnhancedRemapper.mapMethodName(EnhancedRemapper.java:170)
	at net.md_5.ss.remapper.ClassRemapper.visitMethod(ClassRemapper.java:50)
	at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1122)
	at org.objectweb.asm.ClassReader.accept(ClassReader.java:688)
	at org.objectweb.asm.ClassReader.accept(ClassReader.java:400)
	at net.md_5.ss.model.ClassInfo.remap(ClassInfo.java:126)
	at net.md_5.ss.SpecialSource.map(SpecialSource.java:132)
	at net.md_5.ss.SpecialSource.main(SpecialSource.java:49)

Suggested fix

Update to a version with this 9 months old commit: https://gitlab.ow2.org/asm/asm/-/commit/f18253471214341c14de94696553dee6fb01619d

1.12.2 version

Paper 1.12.2 reached EOL
It would be nice to be optimized

Spiders Evade MaxEntityCramming

Is your feature request related to a problem? Please describe.
My server sometimes lags badly when players afk at cave spider spawners. I used /butcher to clean it up and there were over 400 entities. And after that, my tps went up from 8 to 20.

Describe the solution you'd like
Make climbable mobs obey the maxEntityCramming gamerule.

Describe alternatives you've considered
None

Additional context

Edit: Based on the comments, putting mobs on ladders also lets them evade maxEntityCramming and that works for any mob. Also, I no longer really need this because I switched to Purpur.

Remove Timings

Is your feature request related to a problem? Please describe.
Timings uses 5% as reported by someone on Discord even if disabled.

Describe the solution you'd like
Timings to be removed. People can use JVM profilers or spark?

Describe alternatives you've considered
Nothing should happen besides timings being removed.

Additional context
Remove timings

Production use

I would to ask if the server software is ready for a production usage or due of some issues which limitations existing.

optimized-tracker

Please tweak this setting as entities activate when you are litterally kissing them only. If I set this to false will I need to install EntityTrackerFixer back or the setting optimized-tracker is different from the EntityTrackerFixer plugin?

Rewrite entity tracker to be async

While the changes to the range checking has resulted in significant performance gains, the last issue is the update method - although only an issue for a large count of entities, looks as if it can really only be solved from making the logic not run on the main thread.

Error executing task on Client java.lang.NullPointerException: null

Describe the bug
@Spottedleaf The client spams errors and lag spikes when loading NPCs (fake players - citizens2).

[08:40:13] [Render thread/FATAL]: Error executing task on Client
java.lang.NullPointerException: null
	at dnp.a(SourceFile:565) ~[1.15.2.jar:?]
	at mc.a(SourceFile:57) ~[1.15.2.jar:?]
	at mc.a(SourceFile:11) ~[1.15.2.jar:?]
	at lv.a(SourceFile:21) ~[1.15.2.jar:?]
	at lv$$Lambda$2364/1789179461.run(Unknown Source) ~[?:?]
	at ais.c(SourceFile:144) [1.15.2.jar:?]
	at aiw.c(SourceFile:23) [1.15.2.jar:?]
	at ais.w(SourceFile:118) [1.15.2.jar:?]
	at ais.bk(SourceFile:103) [1.15.2.jar:?]
	at dbn.d(SourceFile:956) [1.15.2.jar:?]
	at dbn.d(SourceFile:619) [1.15.2.jar:?]
	at net.minecraft.client.main.Main.main(SourceFile:204) [1.15.2.jar:?]

This error is spammed for as many NPCs that are unloaded and loaded into view. (i.e. on login or flying away and back). It even occurs when NPCs are invisible with the current bug of NPCs disappearing when flying away and back. The error is spammed in the client log.

https://paste.ubuntu.com/p/y2phswQxHp/

To Reproduce
Vanilla 1.15.2 client on Tuinity dev 14 with Citizens2 dev 1852.

tuinity.yml
https://paste.ubuntu.com/p/KzV4Y4j43j/

Plugins
[08:35:03 INFO]: Plugins (1): Citizens

Version
This server is running Tuinity version git-Tuinity-"6316c97" (MC: 1.15.2) (Implementing API version 1.15.2-R0.1-SNAPSHOT)

Misc
This issue (client error spam) does not occur with Paper dev 143 or Spigot 1.15.2 git-Spigot-a03b1fd-fc318cc.

@BillyGalbreath This issue does occur with Purpur dev 507, but I assume it's due to Tuinity's patches merged since it occurs with Tuinity dev 14.

compiling with Java 11 causes causes certain plugins to break

Describe the bug
Compiling paper/bukkit with Java 11 seems to break part of TinyProtocol.
https://pastebin.com/tnMkP3DL

To Reproduce
Build using Java 11, use a plugin that takes advantage of tinyprotocol.
https://github.com/BananaPuncher714/Cartographer2 is the one that manifested the error for me.

I'm not a dev myself, so while I have done what I can to debug the issue, this is as far as I could get. Other plugins seem to work as they should.

I stripped out all the patches until I was left with the POM changes, that allowed me to compile using java 8 instead of 11. When compiled with java 8, everything works. Java 11 triggers the above error.

ExtendViewDistance

Describe the bug
I can't use ExtendViewDistance anymore. Even if the tuinity options are disabled (-1)
Tested with tuinity-paperclip build 3

To Reproduce

  • Default tuinity-paperclip server
  • default tuinity.yml with all options default/-1 to disable
  • Extendviewdistance plugin on the server
  • player joins
  • enjoy error
[Thread-7/WARN]: Exception in thread "Thread-7" java.lang.NoClassDefFoundError: xuan/cat/XuanCatAPI/Packet
[Thread-7/WARN]: 	at xuan.cat.ExtendViewDistance.Loop.runView(Loop.java:132)
[Thread-7/WARN]: 	at xuan.cat.ExtendViewDistance.Index.lambda$onEnable$0(Index.java:116)
[Thread-7/WARN]: 	at java.base/java.lang.Thread.run(Thread.java:834)
[Thread-7/WARN]: Caused by: java.lang.ClassNotFoundException: xuan.cat.XuanCatAPI.Packet
[Thread-7/WARN]: 	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
[Thread-7/WARN]: 	at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:171)
[Thread-7/WARN]: 	at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:100)
[Thread-7/WARN]: 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
[Thread-7/WARN]: 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
[Thread-7/WARN]: 	... 3 more

Plugins
ExtendViewDistance 8.1.5

Version
git-Tuinity-"90b50b1" (MC: 1.15.2)

Misc
You might ask why this is relevant. ExtendViewDistance outperformes Tuinity. It's faster and uses less active chunks.
ExtendViewDistance runs fine without errors on plain Paper.

Add Maven Repository

Is your feature request related to a problem? Please describe.
no its not - maven repository would make it easier for developers

Describe the solution you'd like
add maven repository

Describe alternatives you've considered
none

Additional context
add maven repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.