From 14d7da21473a330a8347239eed9373f3a07c338e Mon Sep 17 00:00:00 2001 From: Ben Kerllenevich Date: Wed, 15 Sep 2021 21:19:47 -0400 Subject: [PATCH] Update Upstream (Airplane) Upstream has released updates that appear to apply and compile correctly Airplane Changes: TECHNOVE/Airplane@1888adc Reduce fluid lookups for entities --- .../server/0001-Airplane-Server-Changes.patch | 200 ------------------ patches/server/0007-Ridables.patch | 10 +- 2 files changed, 1 insertion(+), 209 deletions(-) diff --git a/patches/server/0001-Airplane-Server-Changes.patch b/patches/server/0001-Airplane-Server-Changes.patch index 196cc5c13..6811d6f53 100644 --- a/patches/server/0001-Airplane-Server-Changes.patch +++ b/patches/server/0001-Airplane-Server-Changes.patch @@ -2108,47 +2108,6 @@ index 8a864238e154e2131834d013652746b7e7a78c97..b8e512e1c4b00b468b2d22add5653b98 this.goalSelector.tick(); this.level.getProfiler().pop(); this.level.getProfiler().push("navigation"); -diff --git a/src/main/java/net/minecraft/world/entity/ai/Brain.java b/src/main/java/net/minecraft/world/entity/ai/Brain.java -index 75022e5888de2730bb29d1e7535ddc63e2c5f713..a7c71fc4e49079d11b9a0537a4f6d20bbbba815b 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/Brain.java -+++ b/src/main/java/net/minecraft/world/entity/ai/Brain.java -@@ -76,15 +76,15 @@ public class Brain { - - @Override - public DataResult> decode(DynamicOps dynamicOps, MapLike mapLike) { -- MutableObject>>> mutableObject = new MutableObject<>(DataResult.success(ImmutableList.builder())); -+ MutableObject>>> mutableObject2 = new MutableObject<>(DataResult.success(ImmutableList.builder())); // Airplane - compile error due to decompiler - mapLike.entries().forEach((pair) -> { - DataResult> dataResult = Registry.MEMORY_MODULE_TYPE.parse(dynamicOps, pair.getFirst()); - DataResult> dataResult2 = dataResult.flatMap((memoryModuleType) -> { - return this.captureRead(memoryModuleType, dynamicOps, (T)pair.getSecond()); - }); -- mutableObject.setValue(mutableObject.getValue().apply2(Builder::add, dataResult2)); -+ mutableObject2.setValue(mutableObject2.getValue().apply2(Builder::add, dataResult2)); // Airplane - compile error due to decompiler - }); -- ImmutableList> immutableList = mutableObject.getValue().resultOrPartial(Brain.LOGGER::error).map(Builder::build).orElseGet(ImmutableList::of); -+ ImmutableList> immutableList = mutableObject2.getValue().resultOrPartial(Brain.LOGGER::error).map(Builder::build).orElseGet(ImmutableList::of); // Airplane - compile error due to decompiler - return DataResult.success(new Brain<>(memoryModules, sensors, immutableList, mutableObject::getValue)); - } - -@@ -174,7 +174,7 @@ public class Brain { - } - - public Optional getMemory(MemoryModuleType type) { -- return this.memories.get(type).map(ExpirableValue::getValue); -+ return (Optional) this.memories.get(type).map(ExpirableValue::getValue); // Airplane - compile fix - } - - public long getTimeUntilExpiry(MemoryModuleType type) { -@@ -465,7 +465,7 @@ public class Brain { - private final Optional> value; - - static Brain.MemoryValue createUnchecked(MemoryModuleType type, Optional> data) { -- return new Brain.MemoryValue<>(type, data); -+ return new Brain.MemoryValue<>(type, (Optional) data); // Airplane - compile fix - } - - MemoryValue(MemoryModuleType type, Optional> data) { diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java index 9cbfda029782385d1a7987f5be46d450bd8a758e..d3e97858dacc850012e5585ac44a1aeafc82b8f4 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -2191,23 +2150,6 @@ index afbb2acd27416c801af3d718850b82a170734cd3..0b206a3f964f5143e0720890d78d682b PoiManager poiManager = world.getPoiManager(); this.batchCache.long2ObjectEntrySet().removeIf((entry) -> { return !entry.getValue().isStillValid(time); -diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java -index 42d466f7f162943886078eba3db18f2dfc2d7bee..32da2d3f87758bee359522769ebbee73f4f3256a 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java -+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/VillagerPanicTrigger.java -@@ -37,7 +37,11 @@ public class VillagerPanicTrigger extends Behavior { - - @Override - protected void tick(ServerLevel serverLevel, Villager villager, long l) { -- if (l % 100L == 0L) { -+ // Airplane start -+ if (villager.nextGolemPanic < 0) villager.nextGolemPanic = l + 100; -+ if (--villager.nextGolemPanic < l) { -+ villager.nextGolemPanic = -1; -+ // Airplane end - villager.spawnGolemIfNeeded(serverLevel, l, 3); - } - diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java index a96831d5df2b88203aec8fe2a5909708764b38ee..441e2edd8357c4f11093b4dee2192780ac3f3579 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java @@ -2369,26 +2311,6 @@ index e1e220b3e4967590a2a77370e2a6ab919ad50eaa..5d371a3e94720e24058d007474355af6 boolean flag = iblockdata.getMaterial().blocksMotion(); boolean flag1 = iblockdata.getFluidState().is((Tag) FluidTags.WATER); -diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index c510da19883d1aa79b2fc25e2d9c8f5cd8dd7bfa..3f6697d21cf32b83d3dcd74d810effc28c9efc95 100644 ---- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -+++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -123,12 +123,14 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - - @Override - public Brain getBrain() { -- return super.getBrain(); -+ return (Brain) super.getBrain(); // Airplane - decompile fix - } - -+ private int behaviorTick; // Airplane - @Override - protected void customServerAiStep() { - this.level.getProfiler().push("hoglinBrain"); -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane - this.getBrain().tick((ServerLevel)this.level, this); - this.level.getProfiler().pop(); - HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java index c7ad0e317c0c74e5ad3e08278c5e7b31c894413e..06c6ed64488bb3685b9de3e05d8a1e74ebc62e37 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -3325,128 +3247,6 @@ index 7fda7da544b2d0bbd3803d88ee34c92350a8b8ef..adf91f3006a2d224c957f08520f93f76 return flag; } -diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java b/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java -index 05b64f2730bfe836bd1d72dcfccd9f536908a099..39e941a6a315e2a9fc0f47eb39ef9d2b58069f90 100644 ---- a/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java -+++ b/src/main/java/net/minecraft/world/level/storage/loot/LootContext.java -@@ -41,8 +41,10 @@ public class LootContext { - this.level = world; - this.lootTables = tableGetter; - this.conditions = conditionGetter; -- this.params = ImmutableMap.copyOf(parameters); -- this.dynamicDrops = ImmutableMap.copyOf(drops); -+ // Airplane start - use unmodifiable maps instead of immutable ones to skip the copy -+ this.params = java.util.Collections.unmodifiableMap(parameters); -+ this.dynamicDrops = java.util.Collections.unmodifiableMap(drops); -+ // Airplane end - } - - public boolean hasParam(LootContextParam parameter) { -diff --git a/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java b/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java -index fcb7bd9f3b6b6ada0f2e5692bce32ab76b8798a7..61c2096f2c034dbc3ad33b193b058c7d0d05e909 100644 ---- a/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java -+++ b/src/main/java/net/minecraft/world/phys/shapes/EntityCollisionContext.java -@@ -22,55 +22,82 @@ public class EntityCollisionContext implements CollisionContext { - return defaultValue; - } - }; -- private final boolean descending; -- private final double entityBottom; -- private final ItemStack heldItem; -- private final ItemStack footItem; -- private final Predicate canStandOnFluid; -- private final Optional entity; -+ // Airplane start - remove these and pray no plugin uses them -+ //private final boolean descending; -+ //private final double entityBottom; -+ //private final ItemStack heldItem; -+ //private final ItemStack footItem; -+ //private final Predicate canStandOnFluid; -+ // Airplane end -+ private final @org.jetbrains.annotations.Nullable Entity entity; // Airplane - - protected EntityCollisionContext(boolean descending, double minY, ItemStack boots, ItemStack heldItem, Predicate walkOnFluidPredicate, Optional entity) { -- this.descending = descending; -- this.entityBottom = minY; -- this.footItem = boots; -- this.heldItem = heldItem; -- this.canStandOnFluid = walkOnFluidPredicate; -- this.entity = entity; -+ // Airplane start -+ //this.descending = descending; -+ //this.entityBottom = minY; -+ //this.footItem = boots; -+ //this.heldItem = heldItem; -+ ///this.canStandOnFluid = walkOnFluidPredicate; -+ this.entity = entity.orElse(null); -+ // Airplane end - } - - @Deprecated - protected EntityCollisionContext(Entity entity) { -+ // Airplane start - remove unneeded things -+ /* - this(entity.isDescending(), entity.getY(), entity instanceof LivingEntity ? ((LivingEntity)entity).getItemBySlot(EquipmentSlot.FEET) : ItemStack.EMPTY, entity instanceof LivingEntity ? ((LivingEntity)entity).getMainHandItem() : ItemStack.EMPTY, entity instanceof LivingEntity ? ((LivingEntity)entity)::canStandOnFluid : (fluid) -> { - return false; - }, Optional.of(entity)); -+ */ -+ this.entity = entity; -+ // Airplane end - } - - @Override - public boolean hasItemOnFeet(Item item) { -- return this.footItem.is(item); -+ // Airplane start -+ Entity entity = this.entity; -+ if (entity instanceof LivingEntity livingEntity) { -+ return livingEntity.getItemBySlot(EquipmentSlot.FEET).is(item); -+ } -+ return ItemStack.EMPTY.is(item); -+ // Airplane end - } - - @Override - public boolean isHoldingItem(Item item) { -- return this.heldItem.is(item); -+ // Airplane start -+ Entity entity = this.entity; -+ if (entity instanceof LivingEntity livingEntity) { -+ return livingEntity.getMainHandItem().is(item); -+ } -+ return ItemStack.EMPTY.is(item); -+ // Airplane end - } - - @Override - public boolean canStandOnFluid(FluidState state, FlowingFluid fluid) { -- return this.canStandOnFluid.test(fluid) && !state.getType().isSame(fluid); -+ // Airplane start -+ Entity entity = this.entity; -+ if (entity instanceof LivingEntity livingEntity) { -+ return livingEntity.canStandOnFluid(fluid) && !state.getType().isSame(fluid); -+ } -+ return false; -+ // Airplane end - } - - @Override - public boolean isDescending() { -- return this.descending; -+ return this.entity != null && this.entity.isDescending(); // Airplane - } - - @Override - public boolean isAbove(VoxelShape shape, BlockPos pos, boolean defaultValue) { -- return this.entityBottom > (double)pos.getY() + shape.max(Direction.Axis.Y) - (double)1.0E-5F; -+ return (this.entity == null ? -Double.MAX_VALUE : entity.getY()) > (double)pos.getY() + shape.max(Direction.Axis.Y) - (double)1.0E-5F; // Airplane - } - - public Optional getEntity() { -- return this.entity; -+ return Optional.ofNullable(this.entity); // Airplane - } - } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index c1fc309411c277f7b7450686543a6a7a7fe2fdb1..28fa8e5c0d1e78d57d9cfb5ea2998740b8d700dc 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/patches/server/0007-Ridables.patch b/patches/server/0007-Ridables.patch index a24a99eb1..d09298d1d 100644 --- a/patches/server/0007-Ridables.patch +++ b/patches/server/0007-Ridables.patch @@ -4287,7 +4287,7 @@ index 025d53ab0787d596f4c486b15d286b9547838e16..708ba2c64a0736a30e477017b46dc711 public void setPersistentAngerTarget(@Nullable UUID uuid) { this.persistentAngerTarget = uuid; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 3f6697d21cf32b83d3dcd74d810effc28c9efc95..060676e094c425ab11889ee221808e5814d34f43 100644 +index c510da19883d1aa79b2fc25e2d9c8f5cd8dd7bfa..b5773abd11ee898b2fbe4d910619bcbf35bf4bcd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -67,6 +67,18 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -4309,14 +4309,6 @@ index 3f6697d21cf32b83d3dcd74d810effc28c9efc95..060676e094c425ab11889ee221808e58 @Override public boolean canBeLeashed(Player player) { return !this.isLeashed(); -@@ -130,6 +142,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - @Override - protected void customServerAiStep() { - this.level.getProfiler().push("hoglinBrain"); -+ if (getRider() == null) // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Airplane - this.getBrain().tick((ServerLevel)this.level, this); - this.level.getProfiler().pop(); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java index 06c6ed64488bb3685b9de3e05d8a1e74ebc62e37..ace6891fd0e14af5268249b60e14a99c17a2f435 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java