Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
add 0138-Yatopia-Optimize-advancement-loading.patch
  • Loading branch information
Simon Gardling committed Oct 21, 2020
commit 9845b562caaaf7d51142aab709eacbe71b804871
100 changes: 100 additions & 0 deletions patches/server/0138-Yatopia-Optimize-advancement-loading.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Simon Gardling <titaniumtown@gmail.com>
Date: Tue, 20 Oct 2020 22:08:26 -0400
Subject: [PATCH] Yatopia-Optimize-advancement-loading


diff --git a/src/main/java/net/minecraft/server/Advancement.java b/src/main/java/net/minecraft/server/Advancement.java
index 384d4090f..486034a82 100644
--- a/src/main/java/net/minecraft/server/Advancement.java
+++ b/src/main/java/net/minecraft/server/Advancement.java
@@ -68,6 +68,7 @@ public class Advancement {
return this.display;
}

+ public final AdvancementRewards getRewards() { return d(); } // Yatopia - OBFHELPER
public AdvancementRewards d() {
return this.rewards;
}
diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java
index c31f4040c..1c625d154 100644
--- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java
+++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java
@@ -160,12 +160,15 @@ public class AdvancementDataPlayer {
}

Stream<Entry<MinecraftKey, AdvancementProgress>> stream = map.entrySet().stream().sorted(Comparator.comparing(Entry::getValue));
+ /* // Yatopia start - avoid calling collect and iterator
Iterator iterator = ((List) stream.collect(Collectors.toList())).iterator();

while (iterator.hasNext()) {
Entry<MinecraftKey, AdvancementProgress> entry = (Entry) iterator.next();
+ */
+ stream.forEach(entry -> {
Advancement advancement = advancementdataworld.a((MinecraftKey) entry.getKey());
-
+
if (advancement == null) {
// CraftBukkit start
if (entry.getKey().getNamespace().equals("minecraft")) {
@@ -176,7 +179,7 @@ public class AdvancementDataPlayer {
} else {
this.a(advancement, (AdvancementProgress) entry.getValue());
}
- }
+ }); // Yatopia end
} catch (Throwable throwable1) {
throwable = throwable1;
throw throwable1;
@@ -201,10 +204,35 @@ public class AdvancementDataPlayer {
}
}

+ /* // Yatopia start
this.c(advancementdataworld);
this.c();
this.b(advancementdataworld);
+ */
+ loadAdvancements(advancementdataworld);
+ // Yatopia end
}
+ // Yatopia start - reduce overload by post io load of advancements
+ // this combines c(AdvancementDataWorld), c() and b(AdvancementDataWorld) into 1 method
+ // the changes done: loops thru all the advancements only once, does not create an additional list
+ // and does not loop thru the additional list, does not create an additional set when checking for progress and
+ // does not additionally loop thru it
+ private void loadAdvancements(AdvancementDataWorld serverAdvancementManager) {
+ for (Advancement advancement : serverAdvancementManager.getAdvancements()) {
+ if (advancement.getCriteria().isEmpty()) {
+ grantCriteria(advancement, "");
+ advancement.getRewards().a(player); // todo: too lazy to import AdvancementRewards for an obfhelper
+ }
+ AdvancementProgress progress = getProgress(advancement);
+ if (progress.isDone()) {
+ this.j.add(advancement);
+ updateVisibility(advancement);
+ continue; // Do not double check isDone
+ }
+ beginTracking(advancement);
+ }
+ }
+ // Yatopia end

public void b() {
if (org.spigotmc.SpigotConfig.disableAdvancementSaving) return; // Spigot
@@ -326,6 +354,7 @@ public class AdvancementDataPlayer {
return flag;
}

+ private final void beginTracking(Advancement advancement) { c(advancement); } // Yatopia - OBFHELPER
private void c(Advancement advancement) {
AdvancementProgress advancementprogress = this.getProgress(advancement);

@@ -443,6 +472,7 @@ public class AdvancementDataPlayer {
this.data.put(advancement, advancementprogress);
}

+ private final void updateVisibility(Advancement advancement) { e(advancement); } // Yatopia
private void e(Advancement advancement) {
// Paper start
e(advancement, IterationEntryPoint.ROOT);