9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2026-01-04 15:41:31 +00:00

Improve ElytraAeronautics

This commit is contained in:
Lumine1909
2025-06-05 12:32:29 +08:00
parent 59b3d8b4fc
commit 0df69c8e43
16 changed files with 270 additions and 111 deletions

View File

@@ -5,20 +5,98 @@ Subject: [PATCH] Elytra aeronautics no chunk load
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
index 4785f9d6c53e18419a3df4a1be9c8a4f9d8cadfb..adba1c30d38f9d42c9c763f0ed2321d46363ca96 100644
index 4785f9d6c53e18419a3df4a1be9c8a4f9d8cadfb..af78e9ff6888ea3e7cc9eead64b643245c4cf836 100644
--- a/net/minecraft/server/level/ChunkMap.java
+++ b/net/minecraft/server/level/ChunkMap.java
@@ -854,7 +854,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -3,19 +3,12 @@ package net.minecraft.server.level;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import com.google.common.collect.Queues;
-import com.google.common.collect.ImmutableList.Builder;
import com.mojang.datafixers.DataFixer;
import com.mojang.logging.LogUtils;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.Long2ByteMap;
import it.unimi.dsi.fastutil.longs.Long2ByteOpenHashMap;
-import it.unimi.dsi.fastutil.longs.Long2LongMap;
-import it.unimi.dsi.fastutil.longs.Long2LongOpenHashMap;
-import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap;
-import it.unimi.dsi.fastutil.longs.LongIterator;
-import it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongSet;
import java.io.IOException;
@@ -24,17 +17,14 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
-import java.util.Queue;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
-import java.util.concurrent.CompletionStage;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BooleanSupplier;
@@ -55,13 +45,11 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtException;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundChunksBiomesPacket;
-import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.server.network.ServerPlayerConnection;
import net.minecraft.util.CsvOutput;
import net.minecraft.util.Mth;
import net.minecraft.util.StaticCache2D;
-import net.minecraft.util.TriState;
import net.minecraft.util.profiling.Profiler;
import net.minecraft.util.profiling.ProfilerFiller;
import net.minecraft.util.thread.BlockableEventLoop;
@@ -76,7 +64,6 @@ import net.minecraft.world.level.TicketStorage;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.ChunkGeneratorStructureState;
-import net.minecraft.world.level.chunk.ImposterProtoChunk;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.chunk.LightChunkGetter;
import net.minecraft.world.level.chunk.ProtoChunk;
@@ -87,17 +74,14 @@ import net.minecraft.world.level.chunk.status.ChunkType;
import net.minecraft.world.level.chunk.status.WorldGenContext;
import net.minecraft.world.level.chunk.storage.ChunkStorage;
import net.minecraft.world.level.chunk.storage.RegionStorageInfo;
-import net.minecraft.world.level.chunk.storage.SerializableChunkData;
import net.minecraft.world.level.entity.ChunkStatusUpdateListener;
import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.RandomState;
-import net.minecraft.world.level.levelgen.structure.StructureStart;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
import net.minecraft.world.level.storage.DimensionDataStorage;
import net.minecraft.world.level.storage.LevelStorageSource;
import net.minecraft.world.phys.Vec3;
-import org.apache.commons.lang3.mutable.MutableBoolean;
import org.slf4j.Logger;
public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider, GeneratingChunkMap, ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemChunkMap { // Paper - rewrite chunk system
@@ -854,7 +838,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
}
private boolean skipPlayer(ServerPlayer player) {
- return player.isSpectator() && !this.level.getGameRules().getBoolean(GameRules.RULE_SPECTATORSGENERATECHUNKS);
+ return (player.isSpectator() && !this.level.getGameRules().getBoolean(GameRules.RULE_SPECTATORSGENERATECHUNKS))
+ || (org.leavesmc.leaves.LeavesConfig.modify.elytraAeronautics.noChunk && player.elytraAeronauticsNoChunk); // Leaves - Elytra aeronautics
+ || (org.leavesmc.leaves.LeavesConfig.modify.elytraAeronautics.enableNoChunkLoad && player.elytraAeronauticsNoChunk); // Leaves - Elytra aeronautics
}
void updatePlayerStatus(ServerPlayer player, boolean track) {
@@ -888,6 +889,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
@@ -888,6 +873,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
}
public void move(ServerPlayer player) {
@@ -26,8 +104,65 @@ index 4785f9d6c53e18419a3df4a1be9c8a4f9d8cadfb..adba1c30d38f9d42c9c763f0ed2321d4
// Paper - optimise entity tracker
SectionPos lastSectionPos = player.getLastSectionPos();
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 270ce4c452ed7efce45923e80b11a606c3f15dab..07173b12bd5177d61c5bf0f8e77e1586ae36e548 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -52,7 +52,6 @@ import net.minecraft.network.protocol.game.ClientboundBlockEventPacket;
import net.minecraft.network.protocol.game.ClientboundDamageEventPacket;
import net.minecraft.network.protocol.game.ClientboundEntityEventPacket;
import net.minecraft.network.protocol.game.ClientboundExplodePacket;
-import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
import net.minecraft.network.protocol.game.ClientboundLevelEventPacket;
import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket;
import net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket;
@@ -73,7 +72,6 @@ import net.minecraft.util.CsvOutput;
import net.minecraft.util.Mth;
import net.minecraft.util.ProgressListener;
import net.minecraft.util.RandomSource;
-import net.minecraft.util.datafix.DataFixTypes;
import net.minecraft.util.profiling.Profiler;
import net.minecraft.util.profiling.ProfilerFiller;
import net.minecraft.util.valueproviders.IntProvider;
@@ -126,18 +124,14 @@ import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.LevelChunk;
import net.minecraft.world.level.chunk.LevelChunkSection;
-import net.minecraft.world.level.chunk.storage.EntityStorage;
import net.minecraft.world.level.chunk.storage.RegionStorageInfo;
-import net.minecraft.world.level.chunk.storage.SimpleRegionStorage;
import net.minecraft.world.level.dimension.BuiltinDimensionTypes;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.dimension.end.EndDragonFight;
-import net.minecraft.world.level.entity.EntityPersistentStorage;
import net.minecraft.world.level.entity.EntityTickList;
import net.minecraft.world.level.entity.EntityTypeTest;
import net.minecraft.world.level.entity.LevelCallback;
import net.minecraft.world.level.entity.LevelEntityGetter;
-import net.minecraft.world.level.entity.PersistentEntitySectionManager;
import net.minecraft.world.level.gameevent.DynamicGameEventListener;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.level.gameevent.GameEventDispatcher;
@@ -157,7 +151,6 @@ import net.minecraft.world.level.saveddata.maps.MapIndex;
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
import net.minecraft.world.level.storage.DimensionDataStorage;
import net.minecraft.world.level.storage.LevelStorageSource;
-import net.minecraft.world.level.storage.ServerLevelData;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.BooleanOp;
@@ -830,6 +823,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
}
);
+ if (org.leavesmc.leaves.LeavesConfig.modify.elytraAeronautics.enableNoChunkLoad) {
+ org.leavesmc.leaves.util.ElytraAeronauticsHelper.tick(this);
+ }
profilerFiller.pop();
this.tickBlockEntities();
}
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 0e1af5f3b7aaa1e0e1c385b47ff70bf7e6ab5e4f..ca6b80b9f6bb9de0741e98196e5dcbb741dd4cb5 100644
index 448c77f5002276eab680a96b518e8a7234806f80..655ca2ead22addbb458b89e12cb2be1d269e4f5e 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -541,7 +541,7 @@ public class ServerGamePacketListenerImpl
@@ -48,16 +183,24 @@ index 0e1af5f3b7aaa1e0e1c385b47ff70bf7e6ab5e4f..ca6b80b9f6bb9de0741e98196e5dcbb7
if (teleportBack) {
io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.CLIPPED_INTO_BLOCK,
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 2d54997ead46e5185104af621dbe39f66246aa96..5333c4bdf25fe05d63fc1caf0f45538f8ae9fcc6 100644
index 2d54997ead46e5185104af621dbe39f66246aa96..2b0b88592ff5ca5d3718832aacfcae65c039384c 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1092,7 +1092,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2,7 +2,6 @@ package net.minecraft.world.entity;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
import com.google.common.collect.ImmutableList.Builder;
import com.mojang.serialization.Codec;
import it.unimi.dsi.fastutil.floats.FloatArraySet;
@@ -1092,7 +1091,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return;
}
}
-
+ // Leaves start - elytra aeronautics
+ if (org.leavesmc.leaves.LeavesConfig.modify.elytraAeronautics.noChunk && this instanceof Player player) {
+ if (org.leavesmc.leaves.LeavesConfig.modify.elytraAeronautics.enableNoChunkLoad && this instanceof Player player) {
+ if (type == MoverType.PLAYER && player.isFallFlying()) {
+ org.leavesmc.leaves.util.ElytraAeronauticsHelper.flightBehaviour(player, movement);
+ }
@@ -66,7 +209,7 @@ index 2d54997ead46e5185104af621dbe39f66246aa96..5333c4bdf25fe05d63fc1caf0f45538f
ProfilerFiller profilerFiller = Profiler.get();
profilerFiller.push("move");
if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7) {
@@ -2053,6 +2059,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2053,6 +2058,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.yo = y;
this.zo = d1;
this.setPos(d, y, d1);
@@ -91,7 +234,7 @@ index 6893ca36cd4ae9a62fecedb1167cc6cf797a7f8f..a95fec1506af042bd3d4424e93aa3f4d
if (this.isSleeping()) {
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
index 9f792a7cf9da888e502b79d6b1d1075e9f084f43..e3de8bba5d37c2dc8c91d09e2225463ffbc2f7e5 100644
index 3eb9a9f6d7f8d28d527941177a5faf2c97628594..a00e1ccb915e9e33b0c56b228cb0447d8af1e195 100644
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -210,6 +210,7 @@ public abstract class Player extends LivingEntity {
@@ -102,6 +245,19 @@ index 9f792a7cf9da888e502b79d6b1d1075e9f084f43..e3de8bba5d37c2dc8c91d09e2225463f
// CraftBukkit start
public boolean fauxSleeping;
diff --git a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
index e0e193078e550225e163149638bf9e053c0531f8..484f1c5eba3776eff86438ba02607e60c7083b3b 100644
--- a/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
+++ b/net/minecraft/world/entity/projectile/FireworkRocketEntity.java
@@ -328,7 +328,7 @@ public class FireworkRocketEntity extends Projectile implements ItemSupplier {
this.spawningEntity = compound.read("SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); // Paper
}
- private List<FireworkExplosion> getExplosions() {
+ public List<FireworkExplosion> getExplosions() { // Leaves private -> public
ItemStack itemStack = this.entityData.get(DATA_ID_FIREWORKS_ITEM);
Fireworks fireworks = itemStack.get(DataComponents.FIREWORKS);
return fireworks != null ? fireworks.explosions() : List.of();
diff --git a/net/minecraft/world/item/FireworkRocketItem.java b/net/minecraft/world/item/FireworkRocketItem.java
index 18d63d2da49451a2d5e1da7bf0c00e05e2f192bc..6c78a59b6518799c9b199c96cc4592fb48229e9a 100644
--- a/net/minecraft/world/item/FireworkRocketItem.java

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] No block update command
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index 270ce4c452ed7efce45923e80b11a606c3f15dab..07f2af32c57cf002af0b25e4a9f2c75558663c86 100644
index 07173b12bd5177d61c5bf0f8e77e1586ae36e548..216f163376ea79fd576ae9ca8979a4080287c4ff 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -1786,6 +1786,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -1782,6 +1782,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@Override
public void updateNeighborsAt(BlockPos pos, Block block, @Nullable Orientation orientation) {

View File

@@ -83,10 +83,10 @@ index 7af8b2cf9ccfeadac1cc60541da31ba6f4dc0edb..284cdbd6034ec8962409abba6da37eab
public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
private static final float AVERAGE_PACKETS_SMOOTHING = 0.75F;
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index e1962e123dc2d6a3cf97ba723532e30863bf400f..ec61dcf1a69855ad48de3a46d21ffed9243ceb7a 100644
index 216f163376ea79fd576ae9ca8979a4080287c4ff..b14996a1840046c4c2e8b9ceb2db46510c27fc61 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -165,6 +165,7 @@ import net.minecraft.world.phys.shapes.Shapes;
@@ -158,6 +158,7 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.minecraft.world.ticks.LevelTicks;
import org.slf4j.Logger;
@@ -95,7 +95,7 @@ index e1962e123dc2d6a3cf97ba723532e30863bf400f..ec61dcf1a69855ad48de3a46d21ffed9
public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLevel, ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel, ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevelReader, ca.spottedleaf.moonrise.patches.chunk_tick_iteration.ChunkTickServerLevel { // Paper - rewrite chunk system // Paper - chunk tick iteration
public static final BlockPos END_SPAWN_POINT = new BlockPos(100, 50, 0);
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 0c811363c9b8ac2bed9039ccd86b4c72538e5e4e..c81bd1a48944a7e37f35866d3f580378e13fa86f 100644
index 655ca2ead22addbb458b89e12cb2be1d269e4f5e..926b09363bf5c8555a27e4be0374a5a0d3ee0c0d 100644
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -236,6 +236,7 @@ import org.bukkit.event.player.PlayerToggleFlightEvent;
@@ -162,7 +162,7 @@ index 50993ce7519a77c6a9d36cb925125adccda7037f..e5124b566e791c1c011b301f910a8926
public ZeroBitStorage(int size) {
diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java
index 12a63f75d878fcdad83847b20f5a57f7936c7779..ea25b29a5f28a171151cd1ca185a8fc0ceaa248a 100644
index 7c13e7b7a547150642c4a4bddf5e8dee1d580984..21d50e9a60be430d8fff259d31793c5a897d2272 100644
--- a/net/minecraft/world/level/Level.java
+++ b/net/minecraft/world/level/Level.java
@@ -93,6 +93,7 @@ import org.bukkit.craftbukkit.block.CraftBlockState;

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Optimize sun burn tick
This patch is Powered by Gale(https://github.com/GaleMC/Gale)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 5333c4bdf25fe05d63fc1caf0f45538f8ae9fcc6..dbd541361b518ccd6323996847f0ae1447d23362 100644
index 2b0b88592ff5ca5d3718832aacfcae65c039384c..c1659ce4f632b458f8c56f829c108585b95a7253 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -2034,9 +2034,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2033,9 +2033,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@Deprecated
public float getLightLevelDependentMagicValue() {
@@ -33,7 +33,7 @@ index 5333c4bdf25fe05d63fc1caf0f45538f8ae9fcc6..dbd541361b518ccd6323996847f0ae14
}
public void absSnapTo(double x, double y, double z, float yRot, float xRot) {
@@ -2051,6 +2062,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -2050,6 +2061,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.xRotO = this.getXRot();
this.setYHeadRot(yRot); // Paper - Update head rotation
}

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Skip entity move if movement is zero
This patch is Powered by Gale(https://github.com/GaleMC/Gale)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index dbd541361b518ccd6323996847f0ae1447d23362..20521e729704a925e8aa61f65afdcf76e3863b9f 100644
index c1659ce4f632b458f8c56f829c108585b95a7253..4ab45c8f62d2594c144cc7755d1d3f44e0aa0b01 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -242,6 +242,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -241,6 +241,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
public float yRotO;
public float xRotO;
private AABB bb = INITIAL_AABB;
@@ -17,7 +17,7 @@ index dbd541361b518ccd6323996847f0ae1447d23362..20521e729704a925e8aa61f65afdcf76
public boolean onGround;
public boolean horizontalCollision;
public boolean verticalCollision;
@@ -1068,6 +1069,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1067,6 +1068,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// Paper end - detailed watchdog information
public void move(MoverType type, Vec3 movement) {
@@ -31,7 +31,7 @@ index dbd541361b518ccd6323996847f0ae1447d23362..20521e729704a925e8aa61f65afdcf76
final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity
// Paper start - detailed watchdog information
ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main");
@@ -4191,6 +4199,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4190,6 +4198,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public final void setBoundingBox(AABB bb) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix villagers dont release memory
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 20521e729704a925e8aa61f65afdcf76e3863b9f..633419d830780f33f172bd9098440a832c78a6f0 100644
index 4ab45c8f62d2594c144cc7755d1d3f44e0aa0b01..225b37c6212fc9af9204fdd0788a377bafcf9557 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -3822,7 +3822,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3821,7 +3821,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this;
}

View File

@@ -120,10 +120,10 @@ index 814bb2981ab32b216b7953e9b14fe09e96cc7c89..45f884bf598b38ec45baf423b84f5293
.filter(player -> !playerList.isOp(player.getGameProfile()))
.map(player -> player.getGameProfile().getName()),
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index d9e9a5e2b28b8745f2a8576ddb03a31141d59eb6..a20969499e2734cabef2353b52c5386b47dbe234 100644
index b14996a1840046c4c2e8b9ceb2db46510c27fc61..4bc42cafd698e4fda951b4fa77b68c2858712781 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -2644,7 +2644,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2640,7 +2640,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.add(serverPlayer);
// Leaves start - skip
@@ -132,7 +132,7 @@ index d9e9a5e2b28b8745f2a8576ddb03a31141d59eb6..a20969499e2734cabef2353b52c5386b
ServerLevel.this.realPlayers.add(serverPlayer);
}
// Leaves end - skip
@@ -2715,7 +2715,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2711,7 +2711,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
if (entity instanceof ServerPlayer serverPlayer) {
ServerLevel.this.players.remove(serverPlayer);
// Leaves start - skip
@@ -142,7 +142,7 @@ index d9e9a5e2b28b8745f2a8576ddb03a31141d59eb6..a20969499e2734cabef2353b52c5386b
}
// Leaves end - skip
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
index 3b612c02ddbf25c6dcfe5df14fca027986e6f252..c2598c70492a16153d53079b5281466c0449db90 100644
index f2442fbf0cee7a2d1c3a155ec38d6a7eca36d6e8..e33776c039e36f55f0579b51b147d7be087839cf 100644
--- a/net/minecraft/server/players/PlayerList.java
+++ b/net/minecraft/server/players/PlayerList.java
@@ -131,6 +131,7 @@ public abstract class PlayerList {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Servux Protocol
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index c091c5d7a71821b51c37dbcbd1c12f92cf3ba0b3..66e5b969c23e4468dce90bb2cd455da2f5e912aa 100644
index 4bc42cafd698e4fda951b4fa77b68c2858712781..0d9e0d3baae8ea2bbd8e9dc083924f1abc5ee54d 100644
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -2205,6 +2205,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -2201,6 +2201,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
this.lastSpawnChunkRadius = i;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix falling block's block location
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 633419d830780f33f172bd9098440a832c78a6f0..c6077fb3db9e5e3c2b2da8335e27186c64bfa426 100644
index 225b37c6212fc9af9204fdd0788a377bafcf9557..929b0d90c815e25927bd9081b14e06ca359e35c7 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4818,6 +4818,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4817,6 +4817,15 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
int floor = Mth.floor(x);
int floor1 = Mth.floor(y);
int floor2 = Mth.floor(z);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable MC-67
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index c6077fb3db9e5e3c2b2da8335e27186c64bfa426..76324918b0c305d4ff15b4ae8f01de870cc64e46 100644
index 929b0d90c815e25927bd9081b14e06ca359e35c7..45215307dd7092491d86168861c5e49383434ec5 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -3970,6 +3970,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3969,6 +3969,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public boolean canTeleport(Level fromLevel, Level toLevel) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Fix EntityPortalExitEvent logic
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 76324918b0c305d4ff15b4ae8f01de870cc64e46..f6581d89e05771bfe9c5ef4f1599281a1a7fad95 100644
index 45215307dd7092491d86168861c5e49383434ec5..701ac15df1163b4887a07c40b91fb73c7831fb5a 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -3774,19 +3774,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -3773,19 +3773,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
if (this.portalProcess != null) { // if in a portal
org.bukkit.craftbukkit.entity.CraftEntity bukkitEntity = this.getBukkitEntity();

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Skip negligible planar movement multiplication
This patch is Powered by Gale(https://github.com/Dreeam-qwq/Gale)
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index f6581d89e05771bfe9c5ef4f1599281a1a7fad95..4be496e9a911f5eb3ebcad80b1b3b50c8144fe99 100644
index 701ac15df1163b4887a07c40b91fb73c7831fb5a..cac3567d90b0ef821cbc6936dcc2beb850f32515 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1218,8 +1218,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1217,8 +1217,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Vanilla portal handle
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 4be496e9a911f5eb3ebcad80b1b3b50c8144fe99..3c87cdb5bf4c84c7b8e8f051479197deab930580 100644
index cac3567d90b0ef821cbc6936dcc2beb850f32515..9e2fea332444925a8ca83d06826ead9c417f4afc 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -807,6 +807,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -806,6 +806,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// CraftBukkit start
public void postTick() {
@@ -16,7 +16,7 @@ index 4be496e9a911f5eb3ebcad80b1b3b50c8144fe99..3c87cdb5bf4c84c7b8e8f051479197de
// No clean way to break out of ticking once the entity has been copied to a new world, so instead we move the portalling later in the tick cycle
if (!(this instanceof ServerPlayer) && this.isAlive()) { // Paper - don't attempt to teleport dead entities
this.handlePortal();
@@ -827,7 +828,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -826,7 +827,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.boardingCooldown--;
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Sound update suppression
diff --git a/net/minecraft/world/level/block/SculkSensorBlock.java b/net/minecraft/world/level/block/SculkSensorBlock.java
index fa9cb4c40a41eea7fd63a4513d0b0f39067de9ba..4f8739f76cc4a8ecc322662e45145f6db017e9b7 100644
index fa9cb4c40a41eea7fd63a4513d0b0f39067de9ba..331276f4464d78dc86f35fe7d9c42864d7e73a6c 100644
--- a/net/minecraft/world/level/block/SculkSensorBlock.java
+++ b/net/minecraft/world/level/block/SculkSensorBlock.java
@@ -97,7 +97,7 @@ public class SculkSensorBlock extends BaseEntityBlock implements SimpleWaterlogg
@@ -17,17 +17,17 @@ index fa9cb4c40a41eea7fd63a4513d0b0f39067de9ba..4f8739f76cc4a8ecc322662e45145f6d
&& entity.getType() != EntityType.WARDEN
&& level.getBlockEntity(pos) instanceof SculkSensorBlockEntity sculkSensorBlockEntity
&& level instanceof ServerLevel serverLevel
@@ -213,7 +213,12 @@ public class SculkSensorBlock extends BaseEntityBlock implements SimpleWaterlogg
public static SculkSensorPhase getPhase(BlockState state) {
@@ -214,6 +214,13 @@ public class SculkSensorBlock extends BaseEntityBlock implements SimpleWaterlogg
return state.getValue(PHASE);
}
-
+ // Leaves start - Sound update suppression
+ public static boolean canActivate(BlockState state, BlockPos pos) {
+ if (org.leavesmc.leaves.LeavesConfig.modify.oldMC.updater.soundUpdateSuppression && !(state.getBlock() instanceof SculkSensorBlock)) throw new org.leavesmc.leaves.util.UpdateSuppressionException(pos, state.getBlock());
+ return canActivate(state);
+ }
+ // Leaves end - Sound update suppression
+
public static boolean canActivate(BlockState state) {
return state.getBlock() instanceof SculkSensorBlock && getPhase(state) == SculkSensorPhase.INACTIVE; // Paper - Check for a valid type
}

View File

@@ -342,15 +342,8 @@ public final class LeavesConfig {
@GlobalConfigCategory("elytra-aeronautics")
public static class ElytraAeronauticsConfig {
@GlobalConfig(value = "no-chunk-load", validator = ElytraNoChunkLoadValidator.class)
public boolean noChunk = false;
public static class ElytraNoChunkLoadValidator extends BooleanConfigValidator {
@Override
public void verify(Boolean old, Boolean value) throws IllegalArgumentException {
ElytraAeronauticsHelper.setActive(value);
}
}
@GlobalConfig("no-chunk-load")
public boolean enableNoChunkLoad = false;
@GlobalConfig(value = "no-chunk-height")
public double noChunkHeight = 500.0D;
@@ -359,13 +352,13 @@ public final class LeavesConfig {
public double noChunkSpeed = -1.0D;
@GlobalConfig("message")
public boolean noChunkMes = true;
public boolean doSendMessages = true;
@GlobalConfig(value = "message-start")
public String noChunkStartMes = "Flight enter cruise mode";
public String startMessage = "Flight enter cruise mode";
@GlobalConfig(value = "message-end")
public String noChunkEndMes = "Flight exit cruise mode";
public String endMessage = "Flight exit cruise mode";
}
@RemovedConfig(name = "redstone-shears-wrench", category = {}, transform = true)

View File

@@ -1,78 +1,88 @@
package org.leavesmc.leaves.util;
import ca.spottedleaf.moonrise.common.PlatformHooks;
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
import net.minecraft.core.SectionPos;
import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.FireworkRocketEntity;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.component.FireworkExplosion;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.phys.Vec3;
import org.bukkit.Bukkit;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.leavesmc.leaves.LeavesConfig;
import org.leavesmc.leaves.plugin.MinecraftInternalPlugin;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ElytraAeronauticsHelper {
public static final List<FireworkRocketEntity> proxyTickingFireworks = new ArrayList<>();
public static ScheduledTask tickTask;
private static boolean isActive;
public static final Map<ServerLevel, List<FireworkRocketEntity>> globalTickingFireworks = new HashMap<>();
public static void setActive(boolean active) {
isActive = active;
if (!isActive) {
if (tickTask != null) {
tickTask.cancel();
public static void tick(ServerLevel level) {
List<FireworkRocketEntity> tickingFireworks = globalTickingFireworks.getOrDefault(level, Collections.emptyList());
for (Iterator<FireworkRocketEntity> it = tickingFireworks.iterator(); it.hasNext(); ) {
FireworkRocketEntity firework = it.next();
firework.life++;
Vec3 handHoldingItemAngle;
if (!firework.isAlive()) {
it.remove();
}
tickTask = null;
if (firework.attachedToEntity == null || firework.life > firework.lifetime) {
explodeNoClip(firework);
continue;
}
if (firework.attachedToEntity.isFallFlying()) {
if (firework.attachedToEntity instanceof ServerPlayer player) {
player.connection.send(new ClientboundSetEntityMotionPacket(player));
}
Vec3 lookAngle = firework.attachedToEntity.getLookAngle();
Vec3 deltaMovement = firework.attachedToEntity.getDeltaMovement();
firework.attachedToEntity.setDeltaMovement(deltaMovement.add(
lookAngle.x * 0.1 + (lookAngle.x * 1.5 - deltaMovement.x) * 0.5,
lookAngle.y * 0.1 + (lookAngle.y * 1.5 - deltaMovement.y) * 0.5,
lookAngle.z * 0.1 + (lookAngle.z * 1.5 - deltaMovement.z) * 0.5
));
firework.attachedToEntity.hurtMarked = true;
handHoldingItemAngle = firework.attachedToEntity.getHandHoldingItemAngle(Items.FIREWORK_ROCKET);
} else {
handHoldingItemAngle = Vec3.ZERO;
}
firework.setPos(
firework.attachedToEntity.getX() + handHoldingItemAngle.x,
firework.attachedToEntity.getY() + handHoldingItemAngle.y,
firework.attachedToEntity.getZ() + handHoldingItemAngle.z
);
firework.setDeltaMovement(firework.attachedToEntity.getDeltaMovement());
}
tickTask = Bukkit.getGlobalRegionScheduler().runAtFixedRate(MinecraftInternalPlugin.INSTANCE, task -> {
proxyTickingFireworks.removeIf(Entity::isRemoved);
for (FireworkRocketEntity firework : proxyTickingFireworks) {
firework.life++;
Vec3 handHoldingItemAngle;
if (firework.attachedToEntity == null || firework.life > firework.lifetime) {
firework.discard();
continue;
}
if (firework.attachedToEntity.isFallFlying()) {
if (firework.attachedToEntity instanceof ServerPlayer player) {
player.connection.send(new ClientboundSetEntityMotionPacket(player));
}
Vec3 lookAngle = firework.attachedToEntity.getLookAngle();
Vec3 deltaMovement = firework.attachedToEntity.getDeltaMovement();
firework.attachedToEntity.setDeltaMovement(deltaMovement.add(
lookAngle.x * 0.1 + (lookAngle.x * 1.5 - deltaMovement.x) * 0.5,
lookAngle.y * 0.1 + (lookAngle.y * 1.5 - deltaMovement.y) * 0.5,
lookAngle.z * 0.1 + (lookAngle.z * 1.5 - deltaMovement.z) * 0.5
));
firework.attachedToEntity.hurtMarked = true;
handHoldingItemAngle = firework.attachedToEntity.getHandHoldingItemAngle(Items.FIREWORK_ROCKET);
} else {
handHoldingItemAngle = Vec3.ZERO;
}
}
firework.setPos(
firework.attachedToEntity.getX() + handHoldingItemAngle.x,
firework.attachedToEntity.getY() + handHoldingItemAngle.y,
firework.attachedToEntity.getZ() + handHoldingItemAngle.z
);
firework.setDeltaMovement(firework.attachedToEntity.getDeltaMovement());
}
}, 1, 1);
private static void explodeNoClip(FireworkRocketEntity firework) {
if (firework.life <= firework.lifetime) {
firework.discard();
}
ServerLevel level = firework.level().getMinecraftWorld();
List<FireworkExplosion> explosions = firework.getExplosions();
if (!explosions.isEmpty() && firework.attachedToEntity != null &&
org.bukkit.craftbukkit.event.CraftEventFactory.callFireworkExplodeEvent(firework)) {
level.broadcastEntityEvent(firework, (byte) 17);
firework.gameEvent(GameEvent.EXPLODE, firework.getOwner());
firework.attachedToEntity.hurtServer(level, firework.damageSources().fireworks(firework, firework.getOwner()), 5.0F + explosions.size() * 2);
firework.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.EXPLODE);
}
}
public static boolean proxySpawnAndTick(FireworkRocketEntity entity) {
if (!isActive) {
if (!LeavesConfig.modify.elytraAeronautics.enableNoChunkLoad) {
return false;
}
entity.generation = false;
@@ -87,12 +97,12 @@ public class ElytraAeronauticsHelper {
if (!org.bukkit.craftbukkit.event.CraftEventFactory.doEntityAddEventCalling(entity.level(), entity, CreatureSpawnEvent.SpawnReason.DEFAULT)) {
return false;
}
proxyTickingFireworks.add(entity);
globalTickingFireworks.computeIfAbsent(entity.level().getMinecraftWorld(), w -> new ArrayList<>()).add(entity);
return true;
}
public static void flightBehaviour(Player player, Vec3 velocity) {
if (!LeavesConfig.modify.elytraAeronautics.noChunk) {
if (!LeavesConfig.modify.elytraAeronautics.enableNoChunkLoad) {
return;
}
if ((LeavesConfig.modify.elytraAeronautics.noChunkSpeed <= 0.0D || velocity.horizontalDistanceSqr() >= LeavesConfig.modify.elytraAeronautics.noChunkSpeed)
@@ -107,8 +117,8 @@ public class ElytraAeronauticsHelper {
if (!player.elytraAeronauticsNoChunk) {
player.elytraAeronauticsNoChunk = true;
ServerPlayer serverPlayer = (ServerPlayer) player;
if (LeavesConfig.modify.elytraAeronautics.noChunkMes) {
serverPlayer.sendSystemMessage(Component.literal(LeavesConfig.modify.elytraAeronautics.noChunkStartMes), true);
if (LeavesConfig.modify.elytraAeronautics.doSendMessages) {
serverPlayer.sendSystemMessage(Component.literal(LeavesConfig.modify.elytraAeronautics.startMessage), true);
}
try {
PlatformHooks.get().removePlayerFromDistanceMaps(serverPlayer.serverLevel(), serverPlayer);
@@ -122,8 +132,8 @@ public class ElytraAeronauticsHelper {
if (player.elytraAeronauticsNoChunk) {
player.elytraAeronauticsNoChunk = false;
ServerPlayer serverPlayer = (ServerPlayer) player;
if (LeavesConfig.modify.elytraAeronautics.noChunkMes) {
serverPlayer.sendSystemMessage(Component.literal(LeavesConfig.modify.elytraAeronautics.noChunkEndMes), true);
if (LeavesConfig.modify.elytraAeronautics.doSendMessages) {
serverPlayer.sendSystemMessage(Component.literal(LeavesConfig.modify.elytraAeronautics.endMessage), true);
}
try {
PlatformHooks.get().addPlayerToDistanceMaps((ServerLevel) serverPlayer.level(), serverPlayer);