From 23f03de4f88c2b9a4b62f5ebdcf74226b2bb0ac1 Mon Sep 17 00:00:00 2001 From: Drex Date: Sat, 14 Sep 2024 17:32:11 +0200 Subject: [PATCH] Add moonrise compatibility --- CHANGELOG.md | 3 ++ gradle.properties | 10 ++--- .../drex/vanish/mixin/EntityGetterMixin.java | 4 +- .../interaction/VanishEntitySelector.java | 39 +++++++++++++++++++ .../interaction/VanishEntitySelector.java | 37 ++++++++++++++++++ .../interaction/VanishEntitySelector.java | 22 ----------- .../vanish/util/VanishMixinConfigPlugin.java | 10 ++++- src/main/resources/vanish.mixins.json | 4 +- 8 files changed, 99 insertions(+), 30 deletions(-) create mode 100644 src/main/java/me/drex/vanish/mixin/compat/moonrise/disabled/interaction/VanishEntitySelector.java create mode 100644 src/main/java/me/drex/vanish/mixin/compat/moonrise/enabled/interaction/VanishEntitySelector.java diff --git a/CHANGELOG.md b/CHANGELOG.md index fbaa31e..f054188 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added +- Moonrise compatibility + ### Fixed - Containers remaining open by vanished players in certain conditions - Pressure plates remaining pressed by vanished players in certain conditions diff --git a/gradle.properties b/gradle.properties index 7214032..06bafa6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,17 +2,17 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21 -curseforge_minecraft_version=1.21 -loader_version=0.15.11 +minecraft_version=1.21.1 +curseforge_minecraft_version=1.21.1 +loader_version=0.16.5 # Mod Properties mod_version=1.5.6 maven_group=me.drex archives_base_name=vanish # Dependencies -fabric_version=0.100.1+1.21 +fabric_version=0.104.0+1.21.1 permission_api_version=0.3.1 -placeholder_api_version=2.4.0-pre.2+1.21 +placeholder_api_version=2.4.1+1.21 player_data_api_version=0.6.0+1.21 translations_version=2.3.1+1.21-pre2 configurate_hocon_version=4.1.2 diff --git a/src/main/java/me/drex/vanish/mixin/EntityGetterMixin.java b/src/main/java/me/drex/vanish/mixin/EntityGetterMixin.java index 7b1fcbb..20d91bb 100644 --- a/src/main/java/me/drex/vanish/mixin/EntityGetterMixin.java +++ b/src/main/java/me/drex/vanish/mixin/EntityGetterMixin.java @@ -9,7 +9,9 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(EntityGetter.class) +// Priority is increased for compatibility with +// https://github.com/Tuinity/Moonrise/blob/master/src/main/java/ca/spottedleaf/moonrise/mixin/collisions/EntityGetterMixin.java#L74-L104 +@Mixin(value = EntityGetter.class, priority = 1500) public interface EntityGetterMixin { @WrapOperation( diff --git a/src/main/java/me/drex/vanish/mixin/compat/moonrise/disabled/interaction/VanishEntitySelector.java b/src/main/java/me/drex/vanish/mixin/compat/moonrise/disabled/interaction/VanishEntitySelector.java new file mode 100644 index 0000000..3a4c4d7 --- /dev/null +++ b/src/main/java/me/drex/vanish/mixin/compat/moonrise/disabled/interaction/VanishEntitySelector.java @@ -0,0 +1,39 @@ +package me.drex.vanish.mixin.compat.moonrise.disabled.interaction; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import me.drex.vanish.VanishMod; +import me.drex.vanish.config.ConfigManager; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.EntityGetter; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.function.Predicate; + +public class VanishEntitySelector { + @Mixin(EntityGetter.class) + public interface EntityGetterMixin { + @WrapOperation( + method = "getEntityCollisions", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/world/entity/EntitySelector;NO_SPECTATORS:Ljava/util/function/Predicate;" + ) + ) + default Predicate vanish_preventEntityCollisions(Operation> original) { + return ConfigManager.vanish().interaction.entityCollisions ? VanishMod.NO_SPECTATORS_AND_NO_VANISH : original.call(); + } + + @WrapOperation( + method = "getEntityCollisions", + at = @At( + value = "FIELD", + target = "Lnet/minecraft/world/entity/EntitySelector;CAN_BE_COLLIDED_WITH:Ljava/util/function/Predicate;" + ) + ) + default Predicate vanish_preventEntityCollisions2(Operation> original) { + return ConfigManager.vanish().interaction.entityCollisions ? VanishMod.CAN_BE_COLLIDED_WITH_AND_NO_VANISH : original.call(); + } + } +} diff --git a/src/main/java/me/drex/vanish/mixin/compat/moonrise/enabled/interaction/VanishEntitySelector.java b/src/main/java/me/drex/vanish/mixin/compat/moonrise/enabled/interaction/VanishEntitySelector.java new file mode 100644 index 0000000..8467640 --- /dev/null +++ b/src/main/java/me/drex/vanish/mixin/compat/moonrise/enabled/interaction/VanishEntitySelector.java @@ -0,0 +1,37 @@ +package me.drex.vanish.mixin.compat.moonrise.enabled.interaction; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import me.drex.vanish.api.VanishAPI; +import me.drex.vanish.config.ConfigManager; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.EntityGetter; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +public class VanishEntitySelector { + @Mixin(value = EntityGetter.class, priority = 1500) + public interface EntityGetterMixin { + @WrapOperation( + method = "getEntityCollisions", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/Entity;isSpectator()Z" + ) + ) + default boolean vanish_preventEntityCollisions(Entity entity, Operation original) { + return original.call(entity) || (ConfigManager.vanish().interaction.entityCollisions && VanishAPI.isVanished(entity)); + } + + @WrapOperation( + method = "getEntityCollisions", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/Entity;canBeCollidedWith()Z" + ) + ) + default boolean vanish_preventEntityCollisions2(Entity entity, Operation original) { + return original.call(entity) || (ConfigManager.vanish().interaction.entityCollisions && VanishAPI.isVanished(entity)); + } + } +} diff --git a/src/main/java/me/drex/vanish/mixin/interaction/VanishEntitySelector.java b/src/main/java/me/drex/vanish/mixin/interaction/VanishEntitySelector.java index 95071fe..0bf3640 100644 --- a/src/main/java/me/drex/vanish/mixin/interaction/VanishEntitySelector.java +++ b/src/main/java/me/drex/vanish/mixin/interaction/VanishEntitySelector.java @@ -53,28 +53,6 @@ default Predicate vanish_preventMobSpawning(Operation> default Predicate vanish_preventMobSpawning2(Operation> original) { return ConfigManager.vanish().interaction.mobSpawning ? VanishMod.NO_SPECTATORS_AND_NO_VANISH : original.call(); } - - @WrapOperation( - method = "getEntityCollisions", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/world/entity/EntitySelector;NO_SPECTATORS:Ljava/util/function/Predicate;" - ) - ) - default Predicate vanish_preventEntityCollisions(Operation> original) { - return ConfigManager.vanish().interaction.entityCollisions ? VanishMod.NO_SPECTATORS_AND_NO_VANISH : original.call(); - } - - @WrapOperation( - method = "getEntityCollisions", - at = @At( - value = "FIELD", - target = "Lnet/minecraft/world/entity/EntitySelector;CAN_BE_COLLIDED_WITH:Ljava/util/function/Predicate;" - ) - ) - default Predicate vanish_preventEntityCollisions2(Operation> original) { - return ConfigManager.vanish().interaction.entityCollisions ? VanishMod.CAN_BE_COLLIDED_WITH_AND_NO_VANISH : original.call(); - } } @Mixin(EntitySelector.class) diff --git a/src/main/java/me/drex/vanish/util/VanishMixinConfigPlugin.java b/src/main/java/me/drex/vanish/util/VanishMixinConfigPlugin.java index ee53783..0ad161a 100644 --- a/src/main/java/me/drex/vanish/util/VanishMixinConfigPlugin.java +++ b/src/main/java/me/drex/vanish/util/VanishMixinConfigPlugin.java @@ -1,5 +1,6 @@ package me.drex.vanish.util; +import net.fabricmc.loader.api.FabricLoader; import org.objectweb.asm.tree.ClassNode; import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; import org.spongepowered.asm.mixin.extensibility.IMixinInfo; @@ -11,7 +12,6 @@ public class VanishMixinConfigPlugin implements IMixinConfigPlugin { @Override public void onLoad(String mixinPackage) { - } @Override @@ -21,6 +21,14 @@ public String getRefMapperConfig() { @Override public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if (mixinClassName.startsWith("me.drex.vanish.mixin.compat.")) { + String compatName = mixinClassName.replace("me.drex.vanish.mixin.compat.", ""); + String[] parts = compatName.split("\\.", 3); + String modId = parts[0]; + String status = parts[1]; + boolean enabled = status.equals("enabled"); + return FabricLoader.getInstance().isModLoaded(modId) == enabled; + } return true; } diff --git a/src/main/resources/vanish.mixins.json b/src/main/resources/vanish.mixins.json index abc082f..6c0d40e 100644 --- a/src/main/resources/vanish.mixins.json +++ b/src/main/resources/vanish.mixins.json @@ -46,6 +46,8 @@ "interaction.VanishEntitySelector$EntityGetterMixin", "interaction.VanishEntitySelector$EntitySelectorMixin", "interaction.VanishEntitySelector$PlayerMixin", - "interaction.VibrationSystemMixin" + "interaction.VibrationSystemMixin", + "compat.moonrise.disabled.interaction.VanishEntitySelector$EntityGetterMixin", + "compat.moonrise.enabled.interaction.VanishEntitySelector$EntityGetterMixin" ] }