From 418e85394c1ccba3a06472b9d3a8b9c7a43cd99a Mon Sep 17 00:00:00 2001 From: 3944Realms Date: Sat, 14 Mar 2026 22:09:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dfabric=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=94=99=E8=AF=AFwt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fabric/build.gradle | 11 ++++- .../SyncNBTLookupDataEntityS2CPacket.java | 1 + .../core/sync/IEntityApiLookUpImplExtend.java | 7 +++ .../core/sync/SyncData2LookupManager.java | 3 +- .../lib39/core/sync/SyncLookupProvider.java | 1 + .../lib39/mixin/MixinApiLookUpImpl.java | 47 +++++++++++++++++++ .../main/resources/lib39.fabric.mixins.json | 1 + forge/build.gradle | 11 ++--- 8 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 fabric/src/main/java/top/r3944realms/lib39/core/sync/IEntityApiLookUpImplExtend.java create mode 100644 fabric/src/main/java/top/r3944realms/lib39/mixin/MixinApiLookUpImpl.java diff --git a/fabric/build.gradle b/fabric/build.gradle index 018ae2a..b3116c9 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -17,6 +17,7 @@ dependencies { modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}" implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' implementation project(":common") + testImplementation "net.fabricmc:fabric-loader-junit:${fabric_loader_version}" } loom { @@ -38,7 +39,7 @@ loom { setConfigName("Fabric Client") ideConfigGenerated(true) runDir("run") - + programArgs "--username", "R3944Realms" def args = [ "-Dlib39.modid=${mod_id}".toString(), "-Dlib39.output=${generatedOutput}".toString(), @@ -58,6 +59,7 @@ loom { server { server() + serverWithGui() setConfigName("Fabric Server") ideConfigGenerated(true) runDir("run") @@ -72,8 +74,12 @@ loom { ] vmArgs.addAll(args) } + gameTest { + + } } } + tasks.named('sourcesJar', Jar) { dependsOn classes dependsOn project(':common').tasks.named('sourcesJar') // 显式依赖common的source @@ -197,6 +203,9 @@ publishing { } } +test { + useJUnitPlatform() +} tasks.named('generateMetadataFileForMavenJavaPublication') { dependsOn tasks.named('remapJavadocJar') diff --git a/fabric/src/main/java/top/r3944realms/lib39/core/network/toClient/SyncNBTLookupDataEntityS2CPacket.java b/fabric/src/main/java/top/r3944realms/lib39/core/network/toClient/SyncNBTLookupDataEntityS2CPacket.java index 9e5add3..3183e28 100644 --- a/fabric/src/main/java/top/r3944realms/lib39/core/network/toClient/SyncNBTLookupDataEntityS2CPacket.java +++ b/fabric/src/main/java/top/r3944realms/lib39/core/network/toClient/SyncNBTLookupDataEntityS2CPacket.java @@ -68,6 +68,7 @@ public record SyncNBTLookupDataEntityS2CPacket(int entityId, ResourceLocation id } else Lib39.LOGGER.debug("Unhandled sync data: {}", packet.data); } ); + } } } diff --git a/fabric/src/main/java/top/r3944realms/lib39/core/sync/IEntityApiLookUpImplExtend.java b/fabric/src/main/java/top/r3944realms/lib39/core/sync/IEntityApiLookUpImplExtend.java new file mode 100644 index 0000000..26eb719 --- /dev/null +++ b/fabric/src/main/java/top/r3944realms/lib39/core/sync/IEntityApiLookUpImplExtend.java @@ -0,0 +1,7 @@ +package top.r3944realms.lib39.core.sync; + +import net.minecraft.world.entity.Entity; + +public interface IEntityApiLookUpImplExtend { + A lib39$findWithoutCheck(Entity entity, C context); +} diff --git a/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncData2LookupManager.java b/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncData2LookupManager.java index dc331e6..b2a1550 100644 --- a/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncData2LookupManager.java +++ b/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncData2LookupManager.java @@ -23,10 +23,11 @@ public class SyncData2LookupManager extends SyncData2Manager manager, @Nullable EntityApiLookup apiLookup) { super(manager, key -> { if (apiLookup != null) { - T data = apiLookup.find(key, null); + T data = ((IEntityApiLookUpImplExtend) apiLookup).lib39$findWithoutCheck(key, null); return Optional.ofNullable(data); } return Optional.empty(); diff --git a/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncLookupProvider.java b/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncLookupProvider.java index adbdf12..8612e54 100644 --- a/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncLookupProvider.java +++ b/fabric/src/main/java/top/r3944realms/lib39/core/sync/SyncLookupProvider.java @@ -20,6 +20,7 @@ public abstract class SyncLookupProvider implements } T defaultLookup = createEmptyLookup(entity); ILib39SyncDataHolder.getHolder(entity).loadSyncData(defaultLookup); + objectISyncDataISyncManager.getSyncMap().put(entity.getUUID(), defaultLookup); return defaultLookup; } ).orElse(createEmptyLookup(entity)); diff --git a/fabric/src/main/java/top/r3944realms/lib39/mixin/MixinApiLookUpImpl.java b/fabric/src/main/java/top/r3944realms/lib39/mixin/MixinApiLookUpImpl.java new file mode 100644 index 0000000..0459d0e --- /dev/null +++ b/fabric/src/main/java/top/r3944realms/lib39/mixin/MixinApiLookUpImpl.java @@ -0,0 +1,47 @@ +package top.r3944realms.lib39.mixin; + +import net.fabricmc.fabric.api.lookup.v1.custom.ApiProviderMap; +import net.fabricmc.fabric.api.lookup.v1.entity.EntityApiLookup; +import net.fabricmc.fabric.impl.lookup.entity.EntityApiLookupImpl; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import top.r3944realms.lib39.core.sync.IEntityApiLookUpImplExtend; + +import java.util.List; +import java.util.Objects; + +@SuppressWarnings("UnstableApiUsage") +@Mixin(value = EntityApiLookupImpl.class, remap = false) +public class MixinApiLookUpImpl implements IEntityApiLookUpImplExtend { + @Shadow @Final private ApiProviderMap, EntityApiLookup.EntityApiProvider> providerMap; + + @Shadow @Final private List> fallbackProviders; + + @Override + @Nullable + public A lib39$findWithoutCheck(Entity entity, C context) { + Objects.requireNonNull(entity, "Entity may not be null."); + EntityApiLookup.EntityApiProvider provider = providerMap.get(entity.getType()); + + if (provider != null) { + A instance = provider.find(entity, context); + + if (instance != null) { + return instance; + } + } + + for (EntityApiLookup.EntityApiProvider fallback : fallbackProviders) { + A instance = fallback.find(entity, context); + + if (instance != null) { + return instance; + } + } + return null; + } +} diff --git a/fabric/src/main/resources/lib39.fabric.mixins.json b/fabric/src/main/resources/lib39.fabric.mixins.json index 6c68486..34ff003 100644 --- a/fabric/src/main/resources/lib39.fabric.mixins.json +++ b/fabric/src/main/resources/lib39.fabric.mixins.json @@ -5,6 +5,7 @@ "refmap": "${mod_id}.fabric.refmap.json", "compatibilityLevel": "JAVA_17", "mixins": [ + "MixinApiLookUpImpl", "MixinEntity", "callback.MixinAnvilMenu", "callback.MixinDedicateServer" diff --git a/forge/build.gradle b/forge/build.gradle index 21e049a..d876983 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -58,14 +58,6 @@ legacyForge { } server { server() - programArguments.addAll( - '--mod', project.mod_id, - '--all', - '--existing', forgeResources, - '--existing', commonResources, - '--existing', forgeBuildResources, - '--existing', commonBuildResources - ) } } @@ -202,6 +194,9 @@ publishing { } } } +test { + useJUnitPlatform() +} // 处理资源 processResources {