Skip to content

Commit

Permalink
Add moonrise compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
DrexHD committed Sep 14, 2024
1 parent 56ff78e commit 23f03de
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 30 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/me/drex/vanish/mixin/EntityGetterMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Entity> vanish_preventEntityCollisions(Operation<Predicate<Entity>> 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<Entity> vanish_preventEntityCollisions2(Operation<Predicate<Entity>> original) {
return ConfigManager.vanish().interaction.entityCollisions ? VanishMod.CAN_BE_COLLIDED_WITH_AND_NO_VANISH : original.call();
}
}
}
Original file line number Diff line number Diff line change
@@ -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<Boolean> 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<Boolean> original) {
return original.call(entity) || (ConfigManager.vanish().interaction.entityCollisions && VanishAPI.isVanished(entity));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,28 +53,6 @@ default Predicate<Entity> vanish_preventMobSpawning(Operation<Predicate<Entity>>
default Predicate<Entity> vanish_preventMobSpawning2(Operation<Predicate<Entity>> 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<Entity> vanish_preventEntityCollisions(Operation<Predicate<Entity>> 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<Entity> vanish_preventEntityCollisions2(Operation<Predicate<Entity>> original) {
return ConfigManager.vanish().interaction.entityCollisions ? VanishMod.CAN_BE_COLLIDED_WITH_AND_NO_VANISH : original.call();
}
}

@Mixin(EntitySelector.class)
Expand Down
10 changes: 9 additions & 1 deletion src/main/java/me/drex/vanish/util/VanishMixinConfigPlugin.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -11,7 +12,6 @@ public class VanishMixinConfigPlugin implements IMixinConfigPlugin {

@Override
public void onLoad(String mixinPackage) {

}

@Override
Expand All @@ -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;
}

Expand Down
4 changes: 3 additions & 1 deletion src/main/resources/vanish.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
]
}

0 comments on commit 23f03de

Please sign in to comment.