Skip to content

Commit

Permalink
Revert dependency idea; new attempt for class locating
Browse files Browse the repository at this point in the history
  • Loading branch information
yoshiweegee committed Apr 4, 2024
1 parent 5b34de4 commit 2ab81f1
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 22 deletions.
1 change: 0 additions & 1 deletion build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ dependencies {

dependencies {
compileOnly(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
compileOnly("Citizens2:Citizens:2.0.33:3367@jar")
}

java {
Expand Down
16 changes: 0 additions & 16 deletions build-logic/settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,6 @@ 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 {
Expand Down
1 change: 0 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ pluginManagement {
includeBuild("build-logic")
repositories {
gradlePluginPortal()
maven("https://repo.papermc.io/repository/maven-public/")
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@
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;
Expand Down Expand Up @@ -118,7 +116,35 @@ public static abstract class TrackedEntity implements IMixinChunkMap_TrackedEnti
@Shadow
public Set<ServerPlayerConnection> seenBy;

@Shadow public abstract void updatePlayer(ServerPlayer player);
@Shadow
public abstract void updatePlayer(ServerPlayer player);

@Nullable
@Unique
private static Class<?> gensouHacks$citizensPluginCitizensEntityTrackerClass = null;
@Nullable
@Unique
private static Class<?> gensouHacks$citizensPluginEntityHumanNPCClass = null;
@Unique
private static boolean gensouHacks$attemptedCitizenssearch = false;

@Unique
private static void gensouHacks$findCitizensClassesIfNeeded() {
if (!gensouHacks$attemptedCitizenssearch) {
try {
var systemClassLoader = ClassLoader.getSystemClassLoader();
gensouHacks$citizensPluginCitizensEntityTrackerClass = Class.forName("net.citizensnpcs.nms.v1_20_R3.util.CitizensEntityTracker", false, systemClassLoader);
gensouHacks$citizensPluginEntityHumanNPCClass = Class.forName("net.citizensnpcs.nms.v1_20_R3.entity.EntityHumanNPC", false, systemClassLoader);
} catch (ClassNotFoundException ignored) {}
gensouHacks$attemptedCitizenssearch = true;
}
}

@Unique
private static boolean gensouHacks$areCitizensClassesPresent() {
gensouHacks$findCitizensClassesIfNeeded();
return gensouHacks$citizensPluginCitizensEntityTrackerClass != null && gensouHacks$citizensPluginEntityHumanNPCClass != null;
}

@Inject(method = "<init>", at = @At("RETURN"))
private void reassignSeenBy(CallbackInfo ci) {
Expand All @@ -135,7 +161,7 @@ private void reassignSeenBy(CallbackInfo ci) {
@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 (this instanceof CitizensEntityTracker && !(serverPlayer instanceof EntityHumanNPC)) {
if (gensouHacks$areCitizensClassesPresent() && gensouHacks$citizensPluginCitizensEntityTrackerClass.isInstance(this) && !gensouHacks$citizensPluginEntityHumanNPCClass.isInstance(serverPlayer)) {
((IMixinChunkMapAccess) (Object) ((ServerLevel) serverPlayer.level()).chunkSource.chunkMap).gensouHacks$runOnTrackerMainThread(() ->
this.updatePlayer(serverPlayer)
);
Expand Down

0 comments on commit 2ab81f1

Please sign in to comment.