diff --git a/build.gradle b/build.gradle index 15523341ff..0370ab07ef 100644 --- a/build.gradle +++ b/build.gradle @@ -124,6 +124,7 @@ dependencies { exclude(group: "mezz.jei") } // https://github.com/klikli-dev/modonomicon implementation("maven.modrinth:exclusions-lib:${project.exclusionslib_version}") + compileOnly("maven.modrinth:jade:${project.jade_version}") implementation "org.jspecify:jspecify:1.0.0" diff --git a/gradle.properties b/gradle.properties index 87bf6de255..99195a62fc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -26,6 +26,7 @@ architectury_version=13.0.8 # https://cloudsmith.io/~klikli-dev/repos/mods/groups/ modonomicon_version=1.117.4 modonomicon_version_range=[1.117.4,) +jade_version=15.10.1+neoforge # https://maven.terraformersmc.com/releases/dev/emi/trinkets/ trinkets_version=3.10.0 # https://maven.is-immensely.gay/#/releases/de/dafuqs/additionalentityattributes diff --git a/src/main/java/de/dafuqs/spectrum/compat/jade/JadeCompat.java b/src/main/java/de/dafuqs/spectrum/compat/jade/JadeCompat.java new file mode 100644 index 0000000000..771c36c3cc --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/jade/JadeCompat.java @@ -0,0 +1,38 @@ +package de.dafuqs.spectrum.compat.jade; + +import de.dafuqs.revelationary.api.revelations.*; +import net.minecraft.world.phys.*; +import org.jetbrains.annotations.*; +import snownee.jade.api.*; +import snownee.jade.api.callback.*; + +@WailaPlugin +public class JadeCompat implements IWailaPlugin, JadeRayTraceCallback { + + @Nullable + private IWailaClientRegistration registration; + + @Override + public void registerClient(IWailaClientRegistration wailaRegistration) { + registration = wailaRegistration; + registration.addRayTraceCallback(1000, this); + } + + @Override + public @Nullable Accessor onRayTrace(HitResult hitResult, @Nullable Accessor currentAccessor, @Nullable Accessor originalAccessor) { + if (registration == null) { + return currentAccessor; + } + if (currentAccessor instanceof BlockAccessor blockAccessor + && blockAccessor.getBlock() instanceof RevelationAware revelationAware) { + if (revelationAware.isVisibleTo(currentAccessor.getPlayer())) { + return currentAccessor; + } + return registration.blockAccessor() + .from(blockAccessor) + .blockState(revelationAware.getBlockStateCloaks().get(blockAccessor.getBlockState())) + .build(); + } + return currentAccessor; + } +} diff --git a/src/main/java/de/dafuqs/spectrum/compat/jade/package-info.java b/src/main/java/de/dafuqs/spectrum/compat/jade/package-info.java new file mode 100644 index 0000000000..7a8e7e7db5 --- /dev/null +++ b/src/main/java/de/dafuqs/spectrum/compat/jade/package-info.java @@ -0,0 +1,8 @@ +@NullMarked +@MethodsReturnNonnullByDefault +@FieldsAreNonnullByDefault +package de.dafuqs.spectrum.compat.jade; + +import net.minecraft.FieldsAreNonnullByDefault; +import net.minecraft.MethodsReturnNonnullByDefault; +import org.jspecify.annotations.NullMarked;