From 2070b77fd4f0121f248faf19c8cc110f52f99809 Mon Sep 17 00:00:00 2001 From: Sara Freimer Date: Mon, 27 Jun 2022 22:58:57 -0500 Subject: [PATCH] Fix ticking chunk tickets from forge's chunk manager not causing chunks to fully tick (#8775) --- .../server/level/DistanceManager.java.patch | 30 ++++++++++++------- .../server/level/ServerChunkCache.java.patch | 23 ++++++++------ .../common/world/ForgeChunkManager.java | 11 ++----- src/main/resources/forge.exc | 7 +++-- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch b/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch index 16d0279b36..1400dadd3c 100644 --- a/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch +++ b/patches/minecraft/net/minecraft/server/level/DistanceManager.java.patch @@ -34,21 +34,29 @@ } public void m_140792_(TicketType p_140793_, ChunkPos p_140794_, int p_140795_, T p_140796_) { -@@ -200,6 +_,14 @@ - this.f_183901_.m_184165_(i, ticket); +@@ -187,14 +_,20 @@ } -+ public void registerTicking(TicketType type, ChunkPos pos, int distance, T value) { -+ this.m_140784_(pos.m_45588_(), new Ticket<>(type, 33 - distance, value, true)); + public void m_140840_(TicketType p_140841_, ChunkPos p_140842_, int p_140843_, T p_140844_) { +- Ticket ticket = new Ticket<>(p_140841_, 33 - p_140843_, p_140844_); ++ addRegionTicket(p_140841_, p_140842_, p_140843_, p_140844_, false); + } -+ -+ public void releaseTicking(TicketType type, ChunkPos pos, int distance, T value) { -+ this.m_140818_(pos.m_45588_(), new Ticket<>(type, 33 - distance, value, true)); ++ public void addRegionTicket(TicketType p_140841_, ChunkPos p_140842_, int p_140843_, T p_140844_, boolean forceTicks) { ++ Ticket ticket = new Ticket<>(p_140841_, 33 - p_140843_, p_140844_, forceTicks); + long i = p_140842_.m_45588_(); + this.m_140784_(i, ticket); + this.f_183901_.m_184151_(i, ticket); + } + + public void m_140849_(TicketType p_140850_, ChunkPos p_140851_, int p_140852_, T p_140853_) { +- Ticket ticket = new Ticket<>(p_140850_, 33 - p_140852_, p_140853_); ++ removeRegionTicket(p_140850_, p_140851_, p_140852_, p_140853_, false); + } -+ - private SortedArraySet> m_140857_(long p_140858_) { - return this.f_140761_.computeIfAbsent(p_140858_, (p_183923_) -> { - return SortedArraySet.m_14246_(4); ++ public void removeRegionTicket(TicketType p_140850_, ChunkPos p_140851_, int p_140852_, T p_140853_, boolean forceTicks) { ++ Ticket ticket = new Ticket<>(p_140850_, 33 - p_140852_, p_140853_, forceTicks); + long i = p_140851_.m_45588_(); + this.m_140818_(i, ticket); + this.f_183901_.m_184165_(i, ticket); @@ -285,6 +_,11 @@ public String m_140837_() { diff --git a/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch b/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch index 6764352e72..adb61a59e5 100644 --- a/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch +++ b/patches/minecraft/net/minecraft/server/level/ServerChunkCache.java.patch @@ -17,18 +17,23 @@ levelchunk1.m_187632_(j); if (flag2 && (this.f_8335_ || this.f_8336_) && this.f_8329_.m_6857_().m_61927_(chunkpos)) { NaturalSpawner.m_47029_(this.f_8329_, levelchunk1, naturalspawner$spawnstate, this.f_8336_, this.f_8335_, flag1); -@@ -431,6 +_,14 @@ +@@ -426,11 +_,17 @@ + } + + public void m_8387_(TicketType p_8388_, ChunkPos p_8389_, int p_8390_, T p_8391_) { +- this.f_8327_.m_140840_(p_8388_, p_8389_, p_8390_, p_8391_); ++ addRegionTicket(p_8388_, p_8389_, p_8390_, p_8391_, false); ++ } ++ public void addRegionTicket(TicketType p_8388_, ChunkPos p_8389_, int p_8390_, T p_8391_, boolean forceTicks) { ++ this.f_8327_.addRegionTicket(p_8388_, p_8389_, p_8390_, p_8391_, forceTicks); + } public void m_8438_(TicketType p_8439_, ChunkPos p_8440_, int p_8441_, T p_8442_) { - this.f_8327_.m_140849_(p_8439_, p_8440_, p_8441_, p_8442_); +- this.f_8327_.m_140849_(p_8439_, p_8440_, p_8441_, p_8442_); ++ removeRegionTicket(p_8439_, p_8440_, p_8441_, p_8442_, false); + } -+ -+ public void registerTickingTicket(TicketType type, ChunkPos pos, int distance, T value) { -+ this.f_8327_.registerTicking(type, pos, distance, value); -+ } -+ -+ public void releaseTickingTicket(TicketType type, ChunkPos pos, int distance, T value) { -+ this.f_8327_.releaseTicking(type, pos, distance, value); ++ public void removeRegionTicket(TicketType p_8439_, ChunkPos p_8440_, int p_8441_, T p_8442_, boolean forceTicks) { ++ this.f_8327_.removeRegionTicket(p_8439_, p_8440_, p_8441_, p_8442_, forceTicks); } public void m_6692_(ChunkPos p_8400_, boolean p_8401_) { diff --git a/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java b/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java index 8f57f600a7..fa21a1f5cf 100644 --- a/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java +++ b/src/main/java/net/minecraftforge/common/world/ForgeChunkManager.java @@ -152,16 +152,9 @@ public class ForgeChunkManager boolean ticking) { if (add) - { - if (ticking) - level.getChunkSource().registerTickingTicket(type, pos, 2, owner); - else - level.getChunkSource().addRegionTicket(type, pos, 2, owner); - } - else if (ticking) - level.getChunkSource().releaseTickingTicket(type, pos, 2, owner); + level.getChunkSource().addRegionTicket(type, pos, 2, owner, ticking); else - level.getChunkSource().removeRegionTicket(type, pos, 2, owner); + level.getChunkSource().removeRegionTicket(type, pos, 2, owner, ticking); } /** diff --git a/src/main/resources/forge.exc b/src/main/resources/forge.exc index db79b23b57..dd6adcbc4e 100644 --- a/src/main/resources/forge.exc +++ b/src/main/resources/forge.exc @@ -35,13 +35,16 @@ net/minecraft/data/tags/WorldPresetTagsProvider.(Lnet/minecraft/data/DataG net/minecraft/gametest/framework/GameTestRegistry.register(Ljava/lang/reflect/Method;Ljava/util/Set;)V=|p_177504_,allowedNamespaces net/minecraft/network/FriendlyByteBuf.writeItemStack(Lnet/minecraft/world/item/ItemStack;Z)Lnet/minecraft/network/FriendlyByteBuf;=|p_130056_,limitedTag net/minecraft/server/ServerAdvancementManager.(Lnet/minecraft/world/level/storage/loot/PredicateManager;Lnet/minecraftforge/common/crafting/conditions/ICondition$IContext;)V=|p_136027_,context +net/minecraft/server/level/DistanceManager.addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_140841_,p_140842_,p_140843_,p_140844_,forceTicks +net/minecraft/server/level/DistanceManager.removeRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_140850_,p_140851_,p_140852_,p_140853_,forceTicks +net/minecraft/server/level/ServerChunkCache.addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_8388_,p_8389_,p_8390_,p_8391_,forceTicks +net/minecraft/server/level/ServerChunkCache.removeRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;Z)V=|p_8439_,p_8440_,p_8441_,p_8442_,forceTicks net/minecraft/server/level/ServerPlayer.changeDimension(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraftforge/common/util/ITeleporter;)Lnet/minecraft/world/entity/Entity;=|p_9180_,teleporter net/minecraft/server/level/ServerPlayerGameMode.removeBlock(Lnet/minecraft/core/BlockPos;Z)Z=|p_180235_1_,canHarvest net/minecraft/server/level/Ticket.(Lnet/minecraft/server/level/TicketType;ILjava/lang/Object;Z)V=|p_9425_,p_9426_,p_9427_,forceTicks net/minecraft/server/packs/metadata/pack/PackMetadataSection.(Lnet/minecraft/network/chat/Component;ILjava/util/Map;)V=|p_10371_,p_10372_,packTypeVersions net/minecraft/server/packs/repository/Pack.(Ljava/lang/String;ZLjava/util/function/Supplier;Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/Component;Lnet/minecraft/server/packs/repository/PackCompatibility;Lnet/minecraft/server/packs/repository/Pack$Position;ZLnet/minecraft/server/packs/repository/PackSource;Z)V=|p_10420_,p_10421_,p_10422_,p_10423_,p_10424_,p_10425_,p_10426_,p_10427_,p_10428_,hidden net/minecraft/world/entity/Entity.changeDimension(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraftforge/common/util/ITeleporter;)Lnet/minecraft/world/entity/Entity;=|p_20118_,teleporter -net/minecraft/world/entity/Entity.updateFluidHeightAndDoFluidPushing()V=| net/minecraft/world/entity/EntityType.(Lnet/minecraft/world/entity/EntityType$EntityFactory;Lnet/minecraft/world/entity/MobCategory;ZZZZLcom/google/common/collect/ImmutableSet;Lnet/minecraft/world/entity/EntityDimensions;IILjava/util/function/Predicate;Ljava/util/function/ToIntFunction;Ljava/util/function/ToIntFunction;Ljava/util/function/BiFunction;)V=|p_20574_,p_20575_,p_20576_,p_20577_,p_20578_,p_20579_,p_20580_,p_20581_,p_20582_,p_20583_,velocityUpdateSupplier,trackingRangeSupplier,updateIntervalSupplier,customClientFactory net/minecraft/world/entity/item/ItemEntity.changeDimension(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraftforge/common/util/ITeleporter;)Lnet/minecraft/world/entity/Entity;=|p_32042_,teleporter net/minecraft/world/entity/npc/AbstractVillager.changeDimension(Lnet/minecraft/server/level/ServerLevel;Lnet/minecraftforge/common/util/ITeleporter;)Lnet/minecraft/world/entity/Entity;=|p_35295_,teleporter @@ -56,9 +59,9 @@ net/minecraft/world/item/ItemStack.onItemUse(Lnet/minecraft/world/item/context/U net/minecraft/world/item/ItemStack.onItemUseFirst(Lnet/minecraft/world/item/context/UseOnContext;)Lnet/minecraft/world/InteractionResult;=|p_41662_ net/minecraft/world/item/MapItem.getCustomMapData(Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/level/Level;)Lnet/minecraft/world/level/saveddata/maps/MapItemSavedData;=|p_42910_,p_42911_ net/minecraft/world/item/alchemy/PotionBrewing$Mix.(Lnet/minecraftforge/registries/IForgeRegistry;Ljava/lang/Object;Lnet/minecraft/world/item/crafting/Ingredient;Ljava/lang/Object;)V=|registry,p_43536_,p_43537_,p_43538_ -net/minecraft/world/item/enchantment/EnchantmentHelper.getTagEnchantmentLevel(Lnet/minecraft/world/item/enchantment/Enchantment;Lnet/minecraft/world/item/ItemStack;)I=|p_44844_,p_44845_ net/minecraft/world/item/crafting/RecipeManager.(Lnet/minecraftforge/common/crafting/conditions/ICondition$IContext;)V=|context net/minecraft/world/item/crafting/RecipeManager.fromJson(Lnet/minecraft/resources/ResourceLocation;Lcom/google/gson/JsonObject;Lnet/minecraftforge/common/crafting/conditions/ICondition$IContext;)Lnet/minecraft/world/item/crafting/Recipe;=|p_44046_,p_44047_,context +net/minecraft/world/item/enchantment/EnchantmentHelper.getTagEnchantmentLevel(Lnet/minecraft/world/item/enchantment/Enchantment;Lnet/minecraft/world/item/ItemStack;)I=|p_44844_,p_44845_ net/minecraft/world/level/Level.markAndNotifyBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/chunk/LevelChunk;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/state/BlockState;II)V=|p_46605_,levelchunk,blockstate,p_46606_,p_46607_,p_46608_ net/minecraft/world/level/LevelSettings.(Ljava/lang/String;Lnet/minecraft/world/level/GameType;ZLnet/minecraft/world/Difficulty;ZLnet/minecraft/world/level/GameRules;Lnet/minecraft/world/level/DataPackConfig;Lcom/mojang/serialization/Lifecycle;)V=|p_46910_,p_46911_,p_46912_,p_46913_,p_46914_,p_46915_,p_46916_,lifecycle net/minecraft/world/level/block/ConcretePowderBlock.touchesLiquid(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;)Z=|p_52065_,p_52066_,state