mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-10-01 08:38:00 +02:00
c09ee99f7e
Closes #257 Ports 2 patches from Purpur: Infinity-bow-settings & Allow-infinite-and-mending-enchantments-together Added an option for infinity with no arrows too. Option for custom locale has come! You can put a locale.json file in your server folder to change it. We've got the finest patches from Hydrinity ( Mykyta approved & allowed ) too. We have some amazing new options in yatopia.yml, we're gonna have documentation for them soon so stay tuned! Last but not least, chunk generation patches. We've tested them extensively so no weirdness happens. Thanks for using Yatopia as your production server software. Co-authored-by: Ivan Pekov <ivan@mrivanplays.com>
108 lines
5.0 KiB
Diff
108 lines
5.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Ivan Pekov <ivan@mrivanplays.com>
|
|
Date: Tue, 6 Oct 2020 15:10:12 +0300
|
|
Subject: [PATCH] Optimize advancement loading
|
|
|
|
Removed some object allocations and reduced loops
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/Advancement.java b/src/main/java/net/minecraft/server/Advancement.java
|
|
index c405047c00d354bbc1449fd2f917b73f980ef1a5..8b31098032dc7a08d201e20c917f27348dd2f437 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 17789407b9e86896a963a305a13357286aa5f319..30e5220770f813a28c4c9bdf5d90592e4f12dc68 100644
|
|
--- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java
|
|
@@ -159,11 +159,16 @@ public class AdvancementDataPlayer {
|
|
throw new JsonParseException("Found null for advancements");
|
|
}
|
|
|
|
+ /* // Yatopia start - streams no good
|
|
Stream<Entry<MinecraftKey, AdvancementProgress>> stream = map.entrySet().stream().sorted(Comparator.comparing(Entry::getValue));
|
|
Iterator iterator = ((List) stream.collect(Collectors.toList())).iterator();
|
|
|
|
while (iterator.hasNext()) {
|
|
Entry<MinecraftKey, AdvancementProgress> entry = (Entry) iterator.next();
|
|
+ */
|
|
+ Entry<MinecraftKey, AdvancementProgress>[] entries = map.entrySet().toArray(new Entry[0]);
|
|
+ java.util.Arrays.sort(entries, Entry.comparingByValue());
|
|
+ for (Entry<MinecraftKey, AdvancementProgress> entry : entries) { // Yatopia end
|
|
Advancement advancement = advancementdataworld.a((MinecraftKey) entry.getKey());
|
|
|
|
if (advancement == null) {
|
|
@@ -200,11 +205,37 @@ 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
|
|
+ }
|
|
+ beginTrackingNoIsDone(advancement, progress);
|
|
+ }
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
public void b() {
|
|
if (org.spigotmc.SpigotConfig.disableAdvancementSaving) return; // Spigot
|
|
Map<MinecraftKey, AdvancementProgress> map = Maps.newHashMap();
|
|
@@ -329,6 +360,11 @@ public class AdvancementDataPlayer {
|
|
AdvancementProgress advancementprogress = this.getProgress(advancement);
|
|
|
|
if (!advancementprogress.isDone()) {
|
|
+ // Yatopia start - beginTrackig with no isDone check
|
|
+ beginTrackingNoIsDone(advancement, advancementprogress);
|
|
+ }
|
|
+ }
|
|
+ private void beginTrackingNoIsDone(Advancement advancement, AdvancementProgress advancementprogress) {
|
|
Iterator iterator = advancement.getCriteria().entrySet().iterator();
|
|
|
|
while (iterator.hasNext()) {
|
|
@@ -348,7 +384,7 @@ public class AdvancementDataPlayer {
|
|
}
|
|
}
|
|
|
|
- }
|
|
+ //} // Yatopia end
|
|
}
|
|
|
|
private void d(Advancement advancement) {
|
|
@@ -442,6 +478,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);
|