diff --git a/patches/server/0077-Replace-shape-full-block-cache-with-hashtable.patch b/patches/server/0077-Replace-shape-full-block-cache-with-hashtable.patch
new file mode 100644
index 0000000..93a4004
--- /dev/null
+++ b/patches/server/0077-Replace-shape-full-block-cache-with-hashtable.patch
@@ -0,0 +1,105 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
+Date: Wed, 26 Jun 2024 18:52:28 +0800
+Subject: [PATCH] Replace shape full block cache with hashtable
+
+
+diff --git a/src/main/java/me/jellysquid/mods/lithium/common/util/collections/Object2BooleanCacheTable.java b/src/main/java/me/jellysquid/mods/lithium/common/util/collections/Object2BooleanCacheTable.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..5e422708ca0a6161892293a49342f78ae671bf9b
+--- /dev/null
++++ b/src/main/java/me/jellysquid/mods/lithium/common/util/collections/Object2BooleanCacheTable.java
+@@ -0,0 +1,62 @@
++// Gale - Lithium - replace shape full block cache with hashtable - cache table utility
++
++package me.jellysquid.mods.lithium.common.util.collections;
++
++import it.unimi.dsi.fastutil.HashCommon;
++import net.minecraft.util.Mth;
++
++import java.util.function.Predicate;
++
++/**
++ * A lossy hashtable implementation that stores a mapping between an object and a boolean.
++ *
++ * Any hash collisions will result in an overwrite: this is safe because the correct value can always be recomputed,
++ * given that the given operator is deterministic.
++ *
++ * This implementation is safe to use from multiple threads
++ */
++public final class Object2BooleanCacheTable {
++ private final int mask;
++
++ private final Node[] nodes;
++
++ private final Predicate operator;
++
++ @SuppressWarnings("unchecked")
++ public Object2BooleanCacheTable(int capacity, Predicate operator) {
++ int capacity1 = Mth.smallestEncompassingPowerOfTwo(capacity);
++ this.mask = capacity1 - 1;
++
++ this.nodes = (Node[]) new Node[capacity1];
++
++ this.operator = operator;
++ }
++
++ private static int hash(T key) {
++ return HashCommon.mix(key.hashCode());
++ }
++
++ public boolean get(T key) {
++ int idx = hash(key) & this.mask;
++
++ Node node = this.nodes[idx];
++ if (node != null && key.equals(node.key)) {
++ return node.value;
++ }
++
++ boolean test = this.operator.test(key);
++ this.nodes[idx] = new Node<>(key, test);
++
++ return test;
++ }
++
++ static class Node {
++ final T key;
++ final boolean value;
++
++ Node(T key, boolean value) {
++ this.key = key;
++ this.value = value;
++ }
++ }
++}
+diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
+index 45704653310efe9cb755a644674b54b8722c2c84..313b0ffb1e3b37872e86ae3cb50c70ef4e01b8bd 100644
+--- a/src/main/java/net/minecraft/world/level/block/Block.java
++++ b/src/main/java/net/minecraft/world/level/block/Block.java
+@@ -68,11 +68,12 @@ public class Block extends BlockBehaviour implements ItemLike {
+ private static final Logger LOGGER = LogUtils.getLogger();
+ private final Holder.Reference builtInRegistryHolder;
+ public static final IdMapper BLOCK_STATE_REGISTRY = new IdMapper<>();
+- private static final LoadingCache SHAPE_FULL_BLOCK_CACHE = CacheBuilder.newBuilder().maximumSize(512L).weakKeys().build(new CacheLoader() {
+- public Boolean load(VoxelShape voxelshape) {
+- return !Shapes.joinIsNotEmpty(Shapes.block(), voxelshape, BooleanOp.NOT_SAME);
+- }
+- });
++ // Gale start - Lithium - replace shape full block cache with hashtable
++ private static final me.jellysquid.mods.lithium.common.util.collections.Object2BooleanCacheTable SHAPE_FULL_BLOCK_CACHE = new me.jellysquid.mods.lithium.common.util.collections.Object2BooleanCacheTable<>(
++ 512,
++ shape -> !Shapes.joinIsNotEmpty(Shapes.block(), shape, BooleanOp.NOT_SAME)
++ );
++ // Gale end - Lithium - replace shape full block cache with hashtable
+ public static final int UPDATE_NEIGHBORS = 1;
+ public static final int UPDATE_CLIENTS = 2;
+ public static final int UPDATE_INVISIBLE = 4;
+@@ -279,7 +280,7 @@ public class Block extends BlockBehaviour implements ItemLike {
+ }
+
+ public static boolean isShapeFullBlock(VoxelShape shape) {
+- return (Boolean) Block.SHAPE_FULL_BLOCK_CACHE.getUnchecked(shape);
++ return SHAPE_FULL_BLOCK_CACHE.get(shape); // Gale - Lithium - replace shape full block cache with hashtable
+ }
+
+ public void animateTick(BlockState state, Level world, BlockPos pos, RandomSource random) {}
diff --git a/patches/server/0077-Avoid-Class-isAssignableFrom-call-in-ClassInstanceMu.patch b/patches/server/0078-Avoid-Class-isAssignableFrom-call-in-ClassInstanceMu.patch
similarity index 100%
rename from patches/server/0077-Avoid-Class-isAssignableFrom-call-in-ClassInstanceMu.patch
rename to patches/server/0078-Avoid-Class-isAssignableFrom-call-in-ClassInstanceMu.patch
diff --git a/patches/server/0078-Cache-BlockStatePairKey-hash.patch b/patches/server/0079-Cache-BlockStatePairKey-hash.patch
similarity index 90%
rename from patches/server/0078-Cache-BlockStatePairKey-hash.patch
rename to patches/server/0079-Cache-BlockStatePairKey-hash.patch
index 6f84d8f..d2ec994 100644
--- a/patches/server/0078-Cache-BlockStatePairKey-hash.patch
+++ b/patches/server/0079-Cache-BlockStatePairKey-hash.patch
@@ -13,10 +13,10 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium-fabric)
Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html)
diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java
-index 45704653310efe9cb755a644674b54b8722c2c84..dbfee1647c564e833eb23a3b90ad0f1cb78edfb5 100644
+index 313b0ffb1e3b37872e86ae3cb50c70ef4e01b8bd..ac0da3d2d1b83dd0fb3db170141a6b105476d8e6 100644
--- a/src/main/java/net/minecraft/world/level/block/Block.java
+++ b/src/main/java/net/minecraft/world/level/block/Block.java
-@@ -600,11 +600,18 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -601,11 +601,18 @@ public class Block extends BlockBehaviour implements ItemLike {
private final BlockState first;
private final BlockState second;
private final Direction direction;
@@ -35,7 +35,7 @@ index 45704653310efe9cb755a644674b54b8722c2c84..dbfee1647c564e833eb23a3b90ad0f1c
}
public boolean equals(Object object) {
-@@ -620,11 +627,7 @@ public class Block extends BlockBehaviour implements ItemLike {
+@@ -621,11 +628,7 @@ public class Block extends BlockBehaviour implements ItemLike {
}
public int hashCode() {
diff --git a/patches/server/0079-Replace-division-by-multiplication-in-CubePointRange.patch b/patches/server/0080-Replace-division-by-multiplication-in-CubePointRange.patch
similarity index 100%
rename from patches/server/0079-Replace-division-by-multiplication-in-CubePointRange.patch
rename to patches/server/0080-Replace-division-by-multiplication-in-CubePointRange.patch
diff --git a/patches/server/0080-Replace-parts-by-size-in-CubePointRange.patch b/patches/server/0081-Replace-parts-by-size-in-CubePointRange.patch
similarity index 100%
rename from patches/server/0080-Replace-parts-by-size-in-CubePointRange.patch
rename to patches/server/0081-Replace-parts-by-size-in-CubePointRange.patch
diff --git a/patches/server/0081-Check-frozen-ticks-before-landing-block.patch b/patches/server/0082-Check-frozen-ticks-before-landing-block.patch
similarity index 100%
rename from patches/server/0081-Check-frozen-ticks-before-landing-block.patch
rename to patches/server/0082-Check-frozen-ticks-before-landing-block.patch
diff --git a/patches/server/0082-Faster-chunk-serialization.patch b/patches/server/0083-Faster-chunk-serialization.patch
similarity index 100%
rename from patches/server/0082-Faster-chunk-serialization.patch
rename to patches/server/0083-Faster-chunk-serialization.patch
diff --git a/patches/server/0083-Update-boss-bar-within-tick.patch b/patches/server/0084-Update-boss-bar-within-tick.patch
similarity index 100%
rename from patches/server/0083-Update-boss-bar-within-tick.patch
rename to patches/server/0084-Update-boss-bar-within-tick.patch
diff --git a/patches/server/0084-Cache-ominous-banner-item.patch b/patches/server/0085-Cache-ominous-banner-item.patch
similarity index 100%
rename from patches/server/0084-Cache-ominous-banner-item.patch
rename to patches/server/0085-Cache-ominous-banner-item.patch
diff --git a/patches/server/0085-Cache-world-generator-sea-level.patch b/patches/server/0086-Cache-world-generator-sea-level.patch
similarity index 100%
rename from patches/server/0085-Cache-world-generator-sea-level.patch
rename to patches/server/0086-Cache-world-generator-sea-level.patch
diff --git a/patches/server/0086-Skip-secondary-POI-sensor-if-absent.patch b/patches/server/0087-Skip-secondary-POI-sensor-if-absent.patch
similarity index 100%
rename from patches/server/0086-Skip-secondary-POI-sensor-if-absent.patch
rename to patches/server/0087-Skip-secondary-POI-sensor-if-absent.patch
diff --git a/patches/server/0087-Skip-entity-move-if-movement-is-zero.patch b/patches/server/0088-Skip-entity-move-if-movement-is-zero.patch
similarity index 100%
rename from patches/server/0087-Skip-entity-move-if-movement-is-zero.patch
rename to patches/server/0088-Skip-entity-move-if-movement-is-zero.patch
diff --git a/patches/server/0088-Store-mob-counts-in-an-array.patch b/patches/server/0089-Store-mob-counts-in-an-array.patch
similarity index 100%
rename from patches/server/0088-Store-mob-counts-in-an-array.patch
rename to patches/server/0089-Store-mob-counts-in-an-array.patch
diff --git a/patches/server/0089-Use-linked-map-for-entity-trackers.patch b/patches/server/0090-Use-linked-map-for-entity-trackers.patch
similarity index 100%
rename from patches/server/0089-Use-linked-map-for-entity-trackers.patch
rename to patches/server/0090-Use-linked-map-for-entity-trackers.patch
diff --git a/patches/server/0090-Optimize-noise-generation.patch b/patches/server/0091-Optimize-noise-generation.patch
similarity index 100%
rename from patches/server/0090-Optimize-noise-generation.patch
rename to patches/server/0091-Optimize-noise-generation.patch
diff --git a/patches/server/0091-Optimize-sheep-offspring-color.patch b/patches/server/0092-Optimize-sheep-offspring-color.patch
similarity index 100%
rename from patches/server/0091-Optimize-sheep-offspring-color.patch
rename to patches/server/0092-Optimize-sheep-offspring-color.patch
diff --git a/patches/server/0092-Hide-flames-on-entities-with-fire-resistance.patch b/patches/server/0093-Hide-flames-on-entities-with-fire-resistance.patch
similarity index 100%
rename from patches/server/0092-Hide-flames-on-entities-with-fire-resistance.patch
rename to patches/server/0093-Hide-flames-on-entities-with-fire-resistance.patch
diff --git a/patches/server/0093-Skip-cloning-advancement-criteria.patch b/patches/server/0094-Skip-cloning-advancement-criteria.patch
similarity index 100%
rename from patches/server/0093-Skip-cloning-advancement-criteria.patch
rename to patches/server/0094-Skip-cloning-advancement-criteria.patch
diff --git a/patches/server/0094-Reduce-block-destruction-packet-allocations.patch b/patches/server/0095-Reduce-block-destruction-packet-allocations.patch
similarity index 100%
rename from patches/server/0094-Reduce-block-destruction-packet-allocations.patch
rename to patches/server/0095-Reduce-block-destruction-packet-allocations.patch
diff --git a/patches/server/0095-Spread-out-sending-all-player-info.patch b/patches/server/0096-Spread-out-sending-all-player-info.patch
similarity index 100%
rename from patches/server/0095-Spread-out-sending-all-player-info.patch
rename to patches/server/0096-Spread-out-sending-all-player-info.patch
diff --git a/patches/server/0096-Optimize-player-list-for-sending-player-info.patch b/patches/server/0097-Optimize-player-list-for-sending-player-info.patch
similarity index 100%
rename from patches/server/0096-Optimize-player-list-for-sending-player-info.patch
rename to patches/server/0097-Optimize-player-list-for-sending-player-info.patch
diff --git a/patches/server/0097-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch b/patches/server/0098-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch
similarity index 100%
rename from patches/server/0097-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch
rename to patches/server/0098-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch
diff --git a/patches/server/0098-Send-multiple-keep-alive-packets.patch b/patches/server/0099-Send-multiple-keep-alive-packets.patch
similarity index 100%
rename from patches/server/0098-Send-multiple-keep-alive-packets.patch
rename to patches/server/0099-Send-multiple-keep-alive-packets.patch
diff --git a/patches/server/0099-Make-slow-login-timeout-configurable.patch b/patches/server/0100-Make-slow-login-timeout-configurable.patch
similarity index 100%
rename from patches/server/0099-Make-slow-login-timeout-configurable.patch
rename to patches/server/0100-Make-slow-login-timeout-configurable.patch
diff --git a/patches/server/0100-Load-portal-destination-chunk-before-entity-teleport.patch b/patches/server/0101-Load-portal-destination-chunk-before-entity-teleport.patch
similarity index 100%
rename from patches/server/0100-Load-portal-destination-chunk-before-entity-teleport.patch
rename to patches/server/0101-Load-portal-destination-chunk-before-entity-teleport.patch
diff --git a/patches/server/0101-Don-t-load-chunks-to-spawn-phantoms.patch b/patches/server/0102-Don-t-load-chunks-to-spawn-phantoms.patch
similarity index 100%
rename from patches/server/0101-Don-t-load-chunks-to-spawn-phantoms.patch
rename to patches/server/0102-Don-t-load-chunks-to-spawn-phantoms.patch
diff --git a/patches/server/0102-Don-t-load-chunks-to-activate-climbing-entities.patch b/patches/server/0103-Don-t-load-chunks-to-activate-climbing-entities.patch
similarity index 100%
rename from patches/server/0102-Don-t-load-chunks-to-activate-climbing-entities.patch
rename to patches/server/0103-Don-t-load-chunks-to-activate-climbing-entities.patch
diff --git a/patches/server/0103-Broadcast-crit-animations-as-the-entity-being-critte.patch b/patches/server/0104-Broadcast-crit-animations-as-the-entity-being-critte.patch
similarity index 100%
rename from patches/server/0103-Broadcast-crit-animations-as-the-entity-being-critte.patch
rename to patches/server/0104-Broadcast-crit-animations-as-the-entity-being-critte.patch
diff --git a/patches/server/0104-Ignore-null-legacy-structure-data.patch b/patches/server/0105-Ignore-null-legacy-structure-data.patch
similarity index 100%
rename from patches/server/0104-Ignore-null-legacy-structure-data.patch
rename to patches/server/0105-Ignore-null-legacy-structure-data.patch
diff --git a/patches/server/0105-Skip-unnecessary-mob-spawning-computations.patch b/patches/server/0106-Skip-unnecessary-mob-spawning-computations.patch
similarity index 100%
rename from patches/server/0105-Skip-unnecessary-mob-spawning-computations.patch
rename to patches/server/0106-Skip-unnecessary-mob-spawning-computations.patch
diff --git a/patches/server/0106-Prevent-entities-random-strolling-into-non-ticking-c.patch b/patches/server/0107-Prevent-entities-random-strolling-into-non-ticking-c.patch
similarity index 100%
rename from patches/server/0106-Prevent-entities-random-strolling-into-non-ticking-c.patch
rename to patches/server/0107-Prevent-entities-random-strolling-into-non-ticking-c.patch
diff --git a/patches/server/0107-Do-not-place-player-in-world-if-kicked-before-being-.patch b/patches/server/0108-Do-not-place-player-in-world-if-kicked-before-being-.patch
similarity index 100%
rename from patches/server/0107-Do-not-place-player-in-world-if-kicked-before-being-.patch
rename to patches/server/0108-Do-not-place-player-in-world-if-kicked-before-being-.patch
diff --git a/patches/server/0108-CraftBukkit-UUID-to-world-map.patch b/patches/server/0109-CraftBukkit-UUID-to-world-map.patch
similarity index 100%
rename from patches/server/0108-CraftBukkit-UUID-to-world-map.patch
rename to patches/server/0109-CraftBukkit-UUID-to-world-map.patch
diff --git a/patches/server/0109-Global-EULA-file.patch b/patches/server/0110-Global-EULA-file.patch
similarity index 100%
rename from patches/server/0109-Global-EULA-file.patch
rename to patches/server/0110-Global-EULA-file.patch
diff --git a/patches/server/0110-Specific-interval-TPS-API.patch b/patches/server/0111-Specific-interval-TPS-API.patch
similarity index 100%
rename from patches/server/0110-Specific-interval-TPS-API.patch
rename to patches/server/0111-Specific-interval-TPS-API.patch
diff --git a/patches/server/0111-5-second-TPS-average.patch b/patches/server/0112-5-second-TPS-average.patch
similarity index 100%
rename from patches/server/0111-5-second-TPS-average.patch
rename to patches/server/0112-5-second-TPS-average.patch
diff --git a/patches/server/0112-Measure-last-tick-time.patch b/patches/server/0113-Measure-last-tick-time.patch
similarity index 100%
rename from patches/server/0112-Measure-last-tick-time.patch
rename to patches/server/0113-Measure-last-tick-time.patch
diff --git a/patches/server/0113-Last-tick-time-API.patch b/patches/server/0114-Last-tick-time-API.patch
similarity index 100%
rename from patches/server/0113-Last-tick-time-API.patch
rename to patches/server/0114-Last-tick-time-API.patch
diff --git a/patches/server/0114-Show-last-tick-time-in-tps-command.patch b/patches/server/0115-Show-last-tick-time-in-tps-command.patch
similarity index 100%
rename from patches/server/0114-Show-last-tick-time-in-tps-command.patch
rename to patches/server/0115-Show-last-tick-time-in-tps-command.patch
diff --git a/patches/server/0115-Increase-time-statistics-in-intervals.patch b/patches/server/0116-Increase-time-statistics-in-intervals.patch
similarity index 100%
rename from patches/server/0115-Increase-time-statistics-in-intervals.patch
rename to patches/server/0116-Increase-time-statistics-in-intervals.patch
diff --git a/patches/server/0116-For-collision-check-has-physics-before-same-vehicle.patch b/patches/server/0117-For-collision-check-has-physics-before-same-vehicle.patch
similarity index 100%
rename from patches/server/0116-For-collision-check-has-physics-before-same-vehicle.patch
rename to patches/server/0117-For-collision-check-has-physics-before-same-vehicle.patch
diff --git a/patches/server/0117-Skip-negligible-planar-movement-multiplication.patch b/patches/server/0118-Skip-negligible-planar-movement-multiplication.patch
similarity index 100%
rename from patches/server/0117-Skip-negligible-planar-movement-multiplication.patch
rename to patches/server/0118-Skip-negligible-planar-movement-multiplication.patch
diff --git a/patches/server/0118-Optimize-matching-item-checks.patch b/patches/server/0119-Optimize-matching-item-checks.patch
similarity index 100%
rename from patches/server/0118-Optimize-matching-item-checks.patch
rename to patches/server/0119-Optimize-matching-item-checks.patch
diff --git a/patches/server/0119-Pre-compute-VarLong-sizes.patch b/patches/server/0120-Pre-compute-VarLong-sizes.patch
similarity index 100%
rename from patches/server/0119-Pre-compute-VarLong-sizes.patch
rename to patches/server/0120-Pre-compute-VarLong-sizes.patch
diff --git a/patches/server/0120-Optimize-VarInt-write-and-VarLong-write.patch b/patches/server/0121-Optimize-VarInt-write-and-VarLong-write.patch
similarity index 100%
rename from patches/server/0120-Optimize-VarInt-write-and-VarLong-write.patch
rename to patches/server/0121-Optimize-VarInt-write-and-VarLong-write.patch
diff --git a/patches/server/0121-Reduce-RandomSource-instances.patch b/patches/server/0122-Reduce-RandomSource-instances.patch
similarity index 100%
rename from patches/server/0121-Reduce-RandomSource-instances.patch
rename to patches/server/0122-Reduce-RandomSource-instances.patch
diff --git a/patches/server/0122-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch b/patches/server/0123-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch
similarity index 100%
rename from patches/server/0122-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch
rename to patches/server/0123-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch
diff --git a/patches/server/0123-Initialize-line-of-sight-cache-with-low-capacity.patch b/patches/server/0124-Initialize-line-of-sight-cache-with-low-capacity.patch
similarity index 100%
rename from patches/server/0123-Initialize-line-of-sight-cache-with-low-capacity.patch
rename to patches/server/0124-Initialize-line-of-sight-cache-with-low-capacity.patch
diff --git a/patches/server/0124-Reduce-line-of-sight-updates-and-cache-lookups.patch b/patches/server/0125-Reduce-line-of-sight-updates-and-cache-lookups.patch
similarity index 100%
rename from patches/server/0124-Reduce-line-of-sight-updates-and-cache-lookups.patch
rename to patches/server/0125-Reduce-line-of-sight-updates-and-cache-lookups.patch
diff --git a/patches/server/0125-Server-thread-priority-environment-variable.patch b/patches/server/0126-Server-thread-priority-environment-variable.patch
similarity index 100%
rename from patches/server/0125-Server-thread-priority-environment-variable.patch
rename to patches/server/0126-Server-thread-priority-environment-variable.patch
diff --git a/patches/server/0126-Virtual-thread-support.patch b/patches/server/0127-Virtual-thread-support.patch
similarity index 100%
rename from patches/server/0126-Virtual-thread-support.patch
rename to patches/server/0127-Virtual-thread-support.patch