diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 7f6a8ee..55e3702 100755 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -13,6 +13,7 @@ dependencies { dependencies { compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) + compileOnly("Citizens2:Citizens:2.0.33:3367@jar") } java { diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index db3dd3b..24c0ffd 100755 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -4,6 +4,22 @@ dependencyResolutionManagement { repositories { gradlePluginPortal() maven("https://repo.papermc.io/repository/maven-public/") + val citizensJenkins = ivy { + name = "citizensRepo" + url = uri("https://ci.citizensnpcs.co/job") + patternLayout { + artifact("/[organisation]/[classifier]/artifact/dist/target/[module]-[revision]-b[classifier].[ext]") + } + metadataSources { + artifact() + } + } + exclusiveContent { + forRepositories(citizensJenkins) + filter { + includeGroup("Citizens2") + } + } } versionCatalogs { diff --git a/src/main/java/net/gensokyoreimagined/nitori/access/IMixinChunkMapAccess.java b/src/main/java/net/gensokyoreimagined/nitori/access/IMixinChunkMapAccess.java index 339404e..2ea27cc 100644 --- a/src/main/java/net/gensokyoreimagined/nitori/access/IMixinChunkMapAccess.java +++ b/src/main/java/net/gensokyoreimagined/nitori/access/IMixinChunkMapAccess.java @@ -20,35 +20,4 @@ import javax.annotation.Nullable; public interface IMixinChunkMapAccess { void gensouHacks$runOnTrackerMainThread(final Runnable runnable); - - @Nullable - Class gensouHacks$citizensPluginTrackedEntityClass = initCitizensPluginTrackedEntityClass(); - @Nullable - Class gensouHacks$citizensPluginHumanNPCEntityClass = initCitizensPluginHumanNPCEntityClass(); - - @Nullable - private static Class initCitizensPluginTrackedEntityClass() { - try { - return Class.forName("net.citizensnpcs.nms.v1_20_R3.util.CitizensEntityTracker", false, ClassLoader.getSystemClassLoader()); - } catch (ClassNotFoundException e) { - return null; - } - } - @Nullable - private static Class initCitizensPluginHumanNPCEntityClass() { - try { - return Class.forName("net.citizensnpcs.nms.v1_20_R3.entity.EntityHumanNPC", false, ClassLoader.getSystemClassLoader()); - } catch (ClassNotFoundException e) { - return null; - } - } - - @Nullable - static Class getGensouHacks$citizensPluginTrackedEntityClass() { - return gensouHacks$citizensPluginTrackedEntityClass; - } - @Nullable - static Class getGensouHacks$citizensPluginHumanNPCEntityClass() { - return gensouHacks$citizensPluginHumanNPCEntityClass; - } } diff --git a/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java b/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java index c8494cb..2ec3b49 100755 --- a/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java +++ b/src/main/java/net/gensokyoreimagined/nitori/core/ChunkMapMixin.java @@ -19,6 +19,8 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import it.unimi.dsi.fastutil.objects.ReferenceSets; +import net.citizensnpcs.nms.v1_20_R3.util.CitizensEntityTracker; +import net.citizensnpcs.nms.v1_20_R3.entity.EntityHumanNPC; //import net.gensokyoreimagined.nitori.plugins.NitoriConfig; import net.gensokyoreimagined.nitori.access.IMixinChunkMapAccess; import net.gensokyoreimagined.nitori.access.IMixinChunkMap_TrackedEntityAccess; @@ -133,7 +135,7 @@ public class ChunkMapMixin implements IMixinChunkMapAccess { @Redirect(method = "updatePlayers(Lcom/destroystokyo/paper/util/misc/PooledLinkedHashSets$PooledObjectLinkedOpenHashSet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ChunkMap$TrackedEntity;updatePlayer(Lnet/minecraft/server/level/ServerPlayer;)V")) private void handleCitizensPluginTracking(ChunkMap.TrackedEntity self, ServerPlayer serverPlayer) { // Nitori - Citizens tracker must run on the main thread to avoid cyclic wait - if (IMixinChunkMapAccess.gensouHacks$citizensPluginTrackedEntityClass != null && IMixinChunkMapAccess.gensouHacks$citizensPluginHumanNPCEntityClass != null && ChunkMapMixin.gensouHacks$citizensPluginTrackedEntityClass.isInstance(this) && ChunkMapMixin.gensouHacks$citizensPluginHumanNPCEntityClass.isInstance(serverPlayer)) { + if (this instanceof CitizensEntityTracker && !(serverPlayer instanceof net.citizensnpcs.nms.v1_20_R3.entity.EntityHumanNPC)) { ((IMixinChunkMapAccess) (Object) ((ServerLevel) serverPlayer.level()).chunkSource.chunkMap).gensouHacks$runOnTrackerMainThread(() -> this.updatePlayer(serverPlayer) );