diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java index 560e91ed..7b5f8860 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/world_leaks/MinecraftMixin.java @@ -24,7 +24,7 @@ public class MinecraftMixin { /** * To mitigate the effect of leaked client worlds, clear most of the data structures that waste memory. */ - @Inject(method = "disconnect(Lnet/minecraft/client/gui/screens/Screen;)V", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;")) + @Inject(method = "disconnect(Lnet/minecraft/client/gui/screens/Screen;Z)V", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/Minecraft;level:Lnet/minecraft/client/multiplayer/ClientLevel;")) private void clearLevelDataForLeaks(CallbackInfo ci) { if(this.level != null) { try { diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockBehaviourInvoker.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockBehaviourInvoker.java new file mode 100644 index 00000000..9c9eb142 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockBehaviourInvoker.java @@ -0,0 +1,15 @@ +package org.embeddedt.modernfix.common.mixin.perf.reduce_blockstate_cache_rebuilds; + +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(BlockBehaviour.class) +public interface BlockBehaviourInvoker { + @Invoker + FluidState invokeGetFluidState(BlockState blockState); + @Invoker + boolean invokeIsRandomlyTicking(BlockState blockState); +} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java index 58ffb614..d13e3f44 100644 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/reduce_blockstate_cache_rebuilds/BlockStateBaseMixin.java @@ -93,7 +93,7 @@ public abstract class BlockStateBaseMixin extends StateHolder if(!buildingCache) { buildingCache = true; try { - this.fluidState = this.owner.getFluidState(this.asState()); + this.fluidState = ((BlockBehaviourInvoker)this.owner).invokeGetFluidState(this.asState()); } finally { buildingCache = false; } @@ -112,7 +112,7 @@ public abstract class BlockStateBaseMixin extends StateHolder )) private boolean genCacheBeforeGettingTicking(BlockBehaviour.BlockStateBase base) { if(this.cacheInvalid) - return this.owner.isRandomlyTicking(this.asState()); + return ((BlockBehaviourInvoker)this.owner).invokeIsRandomlyTicking(this.asState()); return this.isRandomlyTicking; } diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/MinecraftServerMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/MinecraftServerMixin.java deleted file mode 100644 index 411766e5..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/MinecraftServerMixin.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.remove_spawn_chunks; - -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.level.ServerChunkCache; -import net.minecraft.server.level.TicketType; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.chunk.ChunkStatus; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(value = MinecraftServer.class, priority = 1100) -public class MinecraftServerMixin { - @Redirect(method = "prepareLevels", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;)V")) - private void addSpawnChunkTicket(ServerChunkCache cache, TicketType type, ChunkPos pos, int distance, Object o) { - // load first chunk - cache.getChunk(pos.x, pos.z, ChunkStatus.FULL, true); - } - - @Redirect(method = "prepareLevels", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;getTickingGenerated()I"), require = 0) - private int getGenerated(ServerChunkCache cache) { - return 441; - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/ServerChunkCacheAccessor.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/ServerChunkCacheAccessor.java deleted file mode 100644 index 1ae8cbaa..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/ServerChunkCacheAccessor.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.remove_spawn_chunks; - -import net.minecraft.server.level.DistanceManager; -import net.minecraft.server.level.ServerChunkCache; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(ServerChunkCache.class) -public interface ServerChunkCacheAccessor { - @Accessor("distanceManager") - DistanceManager getDistanceManager(); -} diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/ServerLevelMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/ServerLevelMixin.java deleted file mode 100644 index f9b39b5f..00000000 --- a/common/src/main/java/org/embeddedt/modernfix/common/mixin/perf/remove_spawn_chunks/ServerLevelMixin.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.embeddedt.modernfix.common.mixin.perf.remove_spawn_chunks; - -import net.minecraft.server.level.ServerChunkCache; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.TicketType; -import net.minecraft.world.level.ChunkPos; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -@Mixin(ServerLevel.class) -public class ServerLevelMixin { - @Redirect(method = "setDefaultSpawnPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;removeRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;)V")) - private void removeTicket(ServerChunkCache cache, TicketType type, ChunkPos pos, int distance, Object o) { - } - - @Redirect(method = "setDefaultSpawnPos", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerChunkCache;addRegionTicket(Lnet/minecraft/server/level/TicketType;Lnet/minecraft/world/level/ChunkPos;ILjava/lang/Object;)V")) - private void addTicket(ServerChunkCache cache, TicketType type, ChunkPos pos, int distance, Object o) { - } -} diff --git a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index a21f2542..7120e098 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -178,7 +178,6 @@ public class ModernFixEarlyConfig { .put("mixin.feature.warn_missing_perf_mods", true) .put("mixin.feature.spark_profile_launch", false) .put("mixin.devenv", isDevEnv) - .put("mixin.perf.remove_spawn_chunks", isDevEnv) .putConditionally(() -> !isFabric, "mixin.bugfix.fix_config_crashes", true) .putConditionally(() -> !isFabric, "mixin.feature.registry_event_progress", false) .putConditionally(() -> isFabric, "mixin.perf.clear_fabric_mapping_tables", false) diff --git a/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java b/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java index 9db7642b..66bd7106 100644 --- a/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java +++ b/common/src/main/java/org/embeddedt/modernfix/packet/EntityIDSyncPacket.java @@ -2,6 +2,7 @@ package org.embeddedt.modernfix.packet; import com.mojang.datafixers.util.Pair; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.resources.ResourceLocation; @@ -13,7 +14,11 @@ import java.lang.reflect.Modifier; import java.util.*; public class EntityIDSyncPacket implements CustomPacketPayload { + public static final StreamCodec STREAM_CODEC = CustomPacketPayload.codec(EntityIDSyncPacket::write, EntityIDSyncPacket::new); + public static final ResourceLocation ID = new ResourceLocation(ModernFix.MODID, "entity_id_sync"); + public static final CustomPacketPayload.Type TYPE = CustomPacketPayload.createType(ID.toString()); + private Map, List>> map; public EntityIDSyncPacket(Map, List>> map) { @@ -24,7 +29,6 @@ public class EntityIDSyncPacket implements CustomPacketPayload { return this.map; } - @Override public void write(FriendlyByteBuf buf) { buf.writeVarInt(map.keySet().size()); for(Map.Entry, List>> entry : map.entrySet()) { @@ -76,7 +80,7 @@ public class EntityIDSyncPacket implements CustomPacketPayload { } @Override - public ResourceLocation id() { - return ID; + public Type type() { + return TYPE; } } diff --git a/gradle.properties b/gradle.properties index bac75e44..9564e1c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ junit_version=5.10.0-M1 mixinextras_version=0.3.2 mod_id=modernfix -minecraft_version=23w51a +minecraft_version=24w03a enabled_platforms=fabric forge_version=20.4.70-beta # parchment_version=2023.07.09 @@ -15,9 +15,9 @@ rei_version=13.0.678 ctm_version=1.20.1-1.1.8+4 kubejs_version=1902.6.0-build.142 rhino_version=1902.2.2-build.268 -supported_minecraft_versions=23w51a +supported_minecraft_versions=24w03a -fabric_loader_version=0.15.1 +fabric_loader_version=0.15.6 fabric_api_version=0.91.1+1.20.4 continuity_version=3.0.0-beta.4+1.20.2