Progress toward including Citizens plugin as proper dependency
This commit is contained in:
@@ -13,6 +13,7 @@ dependencies {
|
||||
|
||||
dependencies {
|
||||
compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
|
||||
compileOnly("Citizens2:Citizens:2.0.33:3367@jar")
|
||||
}
|
||||
|
||||
java {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user