From d51da147c1886855ea644f2e6961b8f4a2e4f0c0 Mon Sep 17 00:00:00 2001 From: Gegy Date: Tue, 28 Jul 2020 21:13:22 +0200 Subject: [PATCH] Refactors to ThreadedAnvilChunkStorage and ChunkHolder generation logic (#1542) * Refactors to ThreadedAnvilChunkStorage and ChunkHolder generation logic * revert statusListeners * improve consistency of future-returning functions * ChunkHolder.ticking -> accessible * Update ChunkStatus "distance from full" mappings and name ChunkHolder#future more specific to saving * Remove `await` prefix for consistency --- .../server/world/ChunkHolder.mapping | 32 +++++++++++-------- .../world/ThreadedAnvilChunkStorage.mapping | 23 +++++++++---- .../minecraft/world/chunk/ChunkStatus.mapping | 16 +++++----- .../world/gen/StructureAccessor.mapping | 6 +++- 4 files changed, 48 insertions(+), 29 deletions(-) diff --git a/mappings/net/minecraft/server/world/ChunkHolder.mapping b/mappings/net/minecraft/server/world/ChunkHolder.mapping index daa1fa70bd..fde09eaa49 100644 --- a/mappings/net/minecraft/server/world/ChunkHolder.mapping +++ b/mappings/net/minecraft/server/world/ChunkHolder.mapping @@ -10,15 +10,15 @@ CLASS net/minecraft/class_3193 net/minecraft/server/world/ChunkHolder FIELD field_16425 futuresByStatus Ljava/util/concurrent/atomic/AtomicReferenceArray; FIELD field_16426 UNLOADED_CHUNK Lcom/mojang/datafixers/util/Either; FIELD field_16427 UNLOADED_WORLD_CHUNK Lcom/mojang/datafixers/util/Either; - FIELD field_16428 future Ljava/util/concurrent/CompletableFuture; + FIELD field_16428 savingFuture Ljava/util/concurrent/CompletableFuture; FIELD field_16429 UNLOADED_WORLD_CHUNK_FUTURE Ljava/util/concurrent/CompletableFuture; FIELD field_16430 UNLOADED_CHUNK_FUTURE Ljava/util/concurrent/CompletableFuture; - FIELD field_16431 borderFuture Ljava/util/concurrent/CompletableFuture; + FIELD field_16431 accessibleFuture Ljava/util/concurrent/CompletableFuture; FIELD field_16432 lastTickLevel I FIELD field_17208 completedLevel I FIELD field_17209 levelUpdateListener Lnet/minecraft/class_3193$class_3896; FIELD field_17210 playersWatchingChunkProvider Lnet/minecraft/class_3193$class_3897; - FIELD field_19238 ticking Z + FIELD field_19238 accessible Z FIELD field_19333 tickingFuture Ljava/util/concurrent/CompletableFuture; METHOD (Lnet/minecraft/class_1923;ILnet/minecraft/class_3568;Lnet/minecraft/class_3193$class_3896;Lnet/minecraft/class_3193$class_3897;)V ARG 1 pos @@ -28,15 +28,16 @@ CLASS net/minecraft/class_3193 net/minecraft/server/world/ChunkHolder ARG 5 playersWatchingChunkProvider METHOD method_13992 sendPacketToPlayersWatching (Lnet/minecraft/class_2596;Z)V ARG 2 onlyOnWatchDistanceEdge - METHOD method_13993 createFuture (Lnet/minecraft/class_2806;Lnet/minecraft/class_3898;)Ljava/util/concurrent/CompletableFuture; + METHOD method_13993 getChunkAt (Lnet/minecraft/class_2806;Lnet/minecraft/class_3898;)Ljava/util/concurrent/CompletableFuture; ARG 1 targetStatus ARG 2 chunkStorage METHOD method_13994 getPos ()Lnet/minecraft/class_1923; - METHOD method_14000 getFuture ()Ljava/util/concurrent/CompletableFuture; + METHOD method_14000 getSavingFuture ()Ljava/util/concurrent/CompletableFuture; METHOD method_14002 markForBlockUpdate (Lnet/minecraft/class_2338;)V METHOD method_14003 getEntityTickingFuture ()Ljava/util/concurrent/CompletableFuture; METHOD method_14005 getLevel ()I METHOD method_14006 flushUpdates (Lnet/minecraft/class_2818;)V + ARG 1 chunk METHOD method_14007 tick (Lnet/minecraft/class_3898;)V ARG 1 chunkStorage METHOD method_14008 getLevelType (I)Lnet/minecraft/class_3193$class_3194; @@ -44,28 +45,31 @@ CLASS net/minecraft/class_3193 net/minecraft/server/world/ChunkHolder METHOD method_14009 sendBlockEntityUpdatePacket (Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;)V ARG 1 world ARG 2 pos - METHOD method_14010 getCompletedChunk ()Lnet/minecraft/class_2791; - METHOD method_14011 getTargetGenerationStatus (I)Lnet/minecraft/class_2806; + METHOD method_14010 getCurrentChunk ()Lnet/minecraft/class_2791; + METHOD method_14011 getTargetStatusForLevel (I)Lnet/minecraft/class_2806; ARG 0 level METHOD method_14012 markForLightUpdate (Lnet/minecraft/class_1944;I)V ARG 1 type ARG 2 y METHOD method_15890 setLevel (I)V ARG 1 level - METHOD method_16143 updateFuture (Ljava/util/concurrent/CompletableFuture;)V - ARG 1 newChunkFuture + METHOD method_16143 combineSavingFuture (Ljava/util/concurrent/CompletableFuture;)V + ARG 1 then METHOD method_16144 getWorldChunk ()Lnet/minecraft/class_2818; METHOD method_16145 getTickingFuture ()Ljava/util/concurrent/CompletableFuture; - METHOD method_16146 getFuture (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; + METHOD method_16146 getFutureFor (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; ARG 1 leastStatus METHOD method_17207 setCompletedLevel (I)V ARG 1 level METHOD method_17208 getCompletedLevel ()I - METHOD method_20384 isTicking ()Z - METHOD method_20385 updateTickingStatus ()V - METHOD method_20725 getBorderFuture ()Ljava/util/concurrent/CompletableFuture; - METHOD method_21737 getNowFuture (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; + METHOD method_20384 isAccessible ()Z + METHOD method_20385 updateAccessibleStatus ()V + METHOD method_20456 finalizeChunk (Lnet/minecraft/class_2821;)V + ARG 1 chunk + METHOD method_20725 getAccessibleFuture ()Ljava/util/concurrent/CompletableFuture; + METHOD method_21737 getValidFutureFor (Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; ARG 1 leastStatus + METHOD method_23270 getCurrentStatus ()Lnet/minecraft/class_2806; METHOD method_23271 getLevelType ()Lnet/minecraft/class_3193$class_3194; CLASS class_3194 LevelType METHOD method_14014 isAfter (Lnet/minecraft/class_3193$class_3194;)Z diff --git a/mappings/net/minecraft/server/world/ThreadedAnvilChunkStorage.mapping b/mappings/net/minecraft/server/world/ThreadedAnvilChunkStorage.mapping index a8e0cab5aa..a6e71e4c76 100644 --- a/mappings/net/minecraft/server/world/ThreadedAnvilChunkStorage.mapping +++ b/mappings/net/minecraft/server/world/ThreadedAnvilChunkStorage.mapping @@ -23,7 +23,10 @@ CLASS net/minecraft/class_3898 net/minecraft/server/world/ThreadedAnvilChunkStor FIELD field_18242 entityTrackers Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; FIELD field_18243 watchDistance I FIELD field_18307 loadedChunks Lit/unimi/dsi/fastutil/longs/LongSet; + FIELD field_18807 chunksToUnload Lit/unimi/dsi/fastutil/longs/Long2ObjectLinkedOpenHashMap; FIELD field_18808 pointOfInterestStorage Lnet/minecraft/class_4153; + FIELD field_19343 unloadTaskQueue Ljava/util/Queue; + FIELD field_23786 chunkToType Lit/unimi/dsi/fastutil/longs/Long2ByteMap; METHOD (Lnet/minecraft/class_3218;Lnet/minecraft/class_32$class_5143;Lcom/mojang/datafixers/DataFixer;Lnet/minecraft/class_3485;Ljava/util/concurrent/Executor;Lnet/minecraft/class_1255;Lnet/minecraft/class_2823;Lnet/minecraft/class_2794;Lnet/minecraft/class_3949;Ljava/util/function/Supplier;IZ)V ARG 3 dataFixer ARG 5 workerExecutor @@ -40,19 +43,23 @@ CLASS net/minecraft/class_3898 net/minecraft/server/world/ThreadedAnvilChunkStor ARG 1 pos ARG 3 level ARG 4 holder - METHOD method_17220 createChunkRegionFuture (Lnet/minecraft/class_1923;ILjava/util/function/IntFunction;)Ljava/util/concurrent/CompletableFuture; + METHOD method_17220 getRegion (Lnet/minecraft/class_1923;ILjava/util/function/IntFunction;)Ljava/util/concurrent/CompletableFuture; ARG 1 centerChunk ARG 2 margin ARG 3 distanceToStatus METHOD method_17226 convertToFullChunk (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; METHOD method_17228 save (Lnet/minecraft/class_2791;)Z + ARG 1 chunk METHOD method_17229 getRequiredStatusForGeneration (Lnet/minecraft/class_2806;I)Lnet/minecraft/class_2806; ARG 1 centerChunkTargetStatus ARG 2 distance METHOD method_17233 tick (Ljava/util/function/BooleanSupplier;)V ARG 1 shouldKeepTicking - METHOD method_17235 createTickingFuture (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; - METHOD method_17236 createChunkFuture (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; + METHOD method_17235 makeChunkTickable (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; + ARG 1 holder + METHOD method_17236 getChunk (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; + ARG 1 holder + ARG 2 requiredStatus METHOD method_17241 sendWatchPackets (Lnet/minecraft/class_3222;Lnet/minecraft/class_1923;[Lnet/minecraft/class_2596;ZZ)V ARG 1 player ARG 2 pos @@ -62,7 +69,7 @@ CLASS net/minecraft/class_3898 net/minecraft/server/world/ThreadedAnvilChunkStor METHOD method_17242 save (Z)V ARG 1 flush METHOD method_17244 updateHolderMap ()Z - METHOD method_17247 createEntityTickingChunkFuture (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; + METHOD method_17247 makeChunkEntitiesTickable (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; ARG 1 pos METHOD method_17253 getTotalChunksLoadedCount ()I METHOD method_17255 getCurrentChunkHolder (J)Lnet/minecraft/class_3193; @@ -111,10 +118,14 @@ CLASS net/minecraft/class_3898 net/minecraft/server/world/ThreadedAnvilChunkStor ARG 1 pos METHOD method_20458 tryUnloadChunk (JLnet/minecraft/class_3193;)V ARG 1 pos - METHOD method_20580 createBorderFuture (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; + METHOD method_20576 enableTickSchedulers (Lnet/minecraft/class_2818;)Ljava/util/concurrent/CompletableFuture; + METHOD method_20580 makeChunkAccessible (Lnet/minecraft/class_3193;)Ljava/util/concurrent/CompletableFuture; + ARG 1 holder METHOD method_20605 unloadChunks (Ljava/util/function/BooleanSupplier;)V ARG 1 shouldKeepTicking - METHOD method_20617 generateChunk (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; + METHOD method_20617 upgradeChunk (Lnet/minecraft/class_3193;Lnet/minecraft/class_2806;)Ljava/util/concurrent/CompletableFuture; + ARG 1 holder + ARG 2 requiredStatus METHOD method_20619 loadChunk (Lnet/minecraft/class_1923;)Ljava/util/concurrent/CompletableFuture; ARG 1 pos METHOD method_21619 dump (Ljava/io/Writer;)V diff --git a/mappings/net/minecraft/world/chunk/ChunkStatus.mapping b/mappings/net/minecraft/world/chunk/ChunkStatus.mapping index 24cb14bc75..c475cc5722 100644 --- a/mappings/net/minecraft/world/chunk/ChunkStatus.mapping +++ b/mappings/net/minecraft/world/chunk/ChunkStatus.mapping @@ -1,8 +1,8 @@ CLASS net/minecraft/class_2806 net/minecraft/world/chunk/ChunkStatus FIELD field_12787 chunkType Lnet/minecraft/class_2806$class_2808; - FIELD field_12788 STATUS_TO_TARGET_GENERATION_RADIUS Lit/unimi/dsi/fastutil/ints/IntList; + FIELD field_12788 STATUS_TO_DISTANCE Lit/unimi/dsi/fastutil/ints/IntList; FIELD field_12789 id Ljava/lang/String; - FIELD field_12791 DISTANCE_TO_TARGET_GENERATION_STATUS Ljava/util/List; + FIELD field_12791 DISTANCE_TO_STATUS Ljava/util/List; FIELD field_12792 generationTask Lnet/minecraft/class_2806$class_2807; FIELD field_12793 heightMapTypes Ljava/util/EnumSet; FIELD field_12802 taskMargin I @@ -10,7 +10,7 @@ CLASS net/minecraft/class_2806 net/minecraft/world/chunk/ChunkStatus FIELD field_16647 previous Lnet/minecraft/class_2806; FIELD field_19159 PRE_CARVER_HEIGHTMAPS Ljava/util/EnumSet; FIELD field_19160 POST_CARVER_HEIGHTMAPS Ljava/util/EnumSet; - FIELD field_19345 STATUS_BUMP_NO_GEN_TASK Lnet/minecraft/class_2806$class_4305; + FIELD field_19345 STATUS_BUMP_LOAD_TASK Lnet/minecraft/class_2806$class_4305; COMMENT A load task which only bumps the chunk status of the chunk. FIELD field_19346 loadTask Lnet/minecraft/class_2806$class_4305; METHOD (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_2807;Lnet/minecraft/class_2806$class_4305;)V @@ -36,17 +36,17 @@ CLASS net/minecraft/class_2806 net/minecraft/world/chunk/ChunkStatus ARG 3 structureManager ARG 4 lightingProvider ARG 6 chunks - METHOD method_12155 getMaxTargetGenerationRadius ()I + METHOD method_12155 getMaxDistanceFromFull ()I METHOD method_12160 getHeightmapTypes ()Ljava/util/EnumSet; - METHOD method_12161 getTargetGenerationStatus (I)Lnet/minecraft/class_2806; - ARG 0 distance + METHOD method_12161 byDistanceFromFull (I)Lnet/minecraft/class_2806; + ARG 0 level METHOD method_12164 getChunkType ()Lnet/minecraft/class_2806$class_2808; METHOD method_12165 isAtLeast (Lnet/minecraft/class_2806;)Z ARG 1 chunk - METHOD method_12168 get (Ljava/lang/String;)Lnet/minecraft/class_2806; + METHOD method_12168 byId (Ljava/lang/String;)Lnet/minecraft/class_2806; ARG 0 id METHOD method_12172 getId ()Ljava/lang/String; - METHOD method_12175 getTargetGenerationRadius (Lnet/minecraft/class_2806;)I + METHOD method_12175 getDistanceFromFull (Lnet/minecraft/class_2806;)I ARG 0 status METHOD method_16555 register (Ljava/lang/String;Lnet/minecraft/class_2806;ILjava/util/EnumSet;Lnet/minecraft/class_2806$class_2808;Lnet/minecraft/class_2806$class_3768;)Lnet/minecraft/class_2806; ARG 0 id diff --git a/mappings/net/minecraft/world/gen/StructureAccessor.mapping b/mappings/net/minecraft/world/gen/StructureAccessor.mapping index df4f11f8f3..e705d6637b 100644 --- a/mappings/net/minecraft/world/gen/StructureAccessor.mapping +++ b/mappings/net/minecraft/world/gen/StructureAccessor.mapping @@ -32,7 +32,11 @@ CLASS net/minecraft/class_5138 net/minecraft/world/gen/StructureAccessor ARG 1 piece METHOD method_28387 (Lnet/minecraft/class_2338;Lnet/minecraft/class_3449;)Z ARG 1 structureStart + METHOD method_28388 getStructureAt (Lnet/minecraft/class_2338;ZLnet/minecraft/class_3195;)Lnet/minecraft/class_3449; + ARG 1 pos + ARG 2 matchChildren + ARG 3 feature METHOD method_28389 (ZLnet/minecraft/class_2338;Lnet/minecraft/class_3449;)Z ARG 2 structureStart - METHOD method_29951 (Lnet/minecraft/class_3233;)Lnet/minecraft/class_5138; + METHOD method_29951 forRegion (Lnet/minecraft/class_3233;)Lnet/minecraft/class_5138; ARG 1 region