Progress toward including Citizens plugin as proper dependency

This commit is contained in:
Altiami
2024-04-03 09:22:15 -07:00
parent 9a783e9d5d
commit f86cb52c01
4 changed files with 20 additions and 32 deletions

View File

@@ -13,6 +13,7 @@ dependencies {
dependencies {
compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
compileOnly("Citizens2:Citizens:2.0.33:3367@jar")
}
java {

View File

@@ -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 {

View File

@@ -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;
}
}

View File

@@ -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)
);