mirror of
https://github.com/PaperMC/Paper.git
synced 2024-10-29 23:09:33 +01:00
9147456fc9
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing CraftBukkit Changes: ab8ace685 SPIGOT-7236: Bone meal doesn't increase use statistic 7dcb59b8e Avoid switch on material in previous commit Spigot Changes: 19641c75 SPIGOT-7235: World.Spigot#strikeLightningEffect doesn't do anything
58 lines
2.6 KiB
Diff
58 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Aikar <aikar@aikar.co>
|
|
Date: Wed, 12 Sep 2018 21:47:01 -0400
|
|
Subject: [PATCH] Optimize Biome Mob Lookups for Mob Spawning
|
|
|
|
Uses an EnumMap as well as a Set paired List for O(1) contains calls.
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/biome/MobSpawnSettings.java b/src/main/java/net/minecraft/world/level/biome/MobSpawnSettings.java
|
|
index 23b3d2235c90cf6b15da279ba83200d7a9e709d8..04c35af0431654c2a5c54113f257a0e0a42bff4f 100644
|
|
--- a/src/main/java/net/minecraft/world/level/biome/MobSpawnSettings.java
|
|
+++ b/src/main/java/net/minecraft/world/level/biome/MobSpawnSettings.java
|
|
@@ -59,11 +59,43 @@ public class MobSpawnSettings {
|
|
}
|
|
|
|
public static class Builder {
|
|
- private final Map<MobCategory, List<MobSpawnSettings.SpawnerData>> spawners = Stream.of(MobCategory.values()).collect(ImmutableMap.toImmutableMap((mobCategory) -> {
|
|
+ // Paper start - keep track of data in a pair set to give O(1) contains calls - we have to hook removals incase plugins mess with it
|
|
+ public static class MobList extends java.util.ArrayList<MobSpawnSettings.SpawnerData> {
|
|
+ java.util.Set<MobSpawnSettings.SpawnerData> biomes = new java.util.HashSet<>();
|
|
+
|
|
+ @Override
|
|
+ public boolean contains(Object o) {
|
|
+ return biomes.contains(o);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean add(MobSpawnSettings.SpawnerData BiomeSettingsMobs) {
|
|
+ biomes.add(BiomeSettingsMobs);
|
|
+ return super.add(BiomeSettingsMobs);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public MobSpawnSettings.SpawnerData remove(int index) {
|
|
+ MobSpawnSettings.SpawnerData removed = super.remove(index);
|
|
+ if (removed != null) {
|
|
+ biomes.remove(removed);
|
|
+ }
|
|
+ return removed;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void clear() {
|
|
+ biomes.clear();
|
|
+ super.clear();
|
|
+ }
|
|
+ }
|
|
+ // use toImmutableEnumMap collector
|
|
+ private final Map<MobCategory, List<MobSpawnSettings.SpawnerData>> spawners = (Map) Stream.of(MobCategory.values()).collect(Maps.toImmutableEnumMap((mobCategory) -> {
|
|
return mobCategory;
|
|
}, (mobCategory) -> {
|
|
- return Lists.newArrayList();
|
|
+ return new MobList(); // Use MobList instead of ArrayList
|
|
}));
|
|
+ // Paper end
|
|
private final Map<EntityType<?>, MobSpawnSettings.MobSpawnCost> mobSpawnCosts = Maps.newLinkedHashMap();
|
|
private float creatureGenerationProbability = 0.1F;
|
|
|