diff --git a/build.gradle b/build.gradle index 472833ee2..71ae161ff 100644 --- a/build.gradle +++ b/build.gradle @@ -152,6 +152,18 @@ allprojects { } } + exclusiveContent { + forRepository { + maven { + name = "quiltmc" + url = "https://maven.quiltmc.org/repository/release" + } + } + filter { + includeGroup "org.quiltmc.parsers" + } + } + exclusiveContent { forRepository { ivy { diff --git a/common/build.gradle b/common/build.gradle index 38c50d11a..9c9c6aeed 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -40,6 +40,9 @@ dependencies { //for epic fight compat modCompileOnly("maven.modrinth:epic-fight:20.6.3") + // for origins compat + modCompileOnlyApi "com.github.apace100:apoli:2.9.0" + // needed dependencies compileOnly("com.google.code.findbugs:jsr305:3.0.2") compileOnly('com.electronwill.night-config:toml:3.6.6') diff --git a/common/src/main/java/org/vivecraft/client/Xplat.java b/common/src/main/java/org/vivecraft/client/Xplat.java index 0131c3f9c..5a439ecb7 100644 --- a/common/src/main/java/org/vivecraft/client/Xplat.java +++ b/common/src/main/java/org/vivecraft/client/Xplat.java @@ -42,6 +42,10 @@ enum ModLoader { ModLoader(String name) { this.name = name; } + + public boolean isFabric() { + return this == FABRIC || this == QUILT; + } } /** diff --git a/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java index 87c35d345..e98c6ea60 100644 --- a/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/ClimbTracker.java @@ -25,6 +25,7 @@ import org.vivecraft.client_vr.provider.ControllerType; import org.vivecraft.common.network.packet.c2s.ClimbingPayloadC2S; import org.vivecraft.data.BlockTags; +import org.vivecraft.mod_compat_vr.origins.OriginsHelper; import org.vivecraft.server.config.ClimbeyBlockmode; import java.util.*; @@ -94,7 +95,8 @@ public boolean isClimbeyClimb() { */ public static boolean hasClimbeyClimbEquipped(Player player) { return ClientNetworking.SERVER_ALLOWS_CLIMBEY && - (isClaws(player.getMainHandItem()) || isClaws(player.getOffhandItem())); + (isClaws(player.getMainHandItem()) || isClaws(player.getOffhandItem()) || + (OriginsHelper.isLoaded() && OriginsHelper.hasClimbingPower(player))); } /** diff --git a/common/src/main/java/org/vivecraft/client_vr/render/helpers/VRArmHelper.java b/common/src/main/java/org/vivecraft/client_vr/render/helpers/VRArmHelper.java index 0e5dacf88..a04851a2e 100644 --- a/common/src/main/java/org/vivecraft/client_vr/render/helpers/VRArmHelper.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/helpers/VRArmHelper.java @@ -178,8 +178,8 @@ public static void renderVRHand_Main(PoseStack poseStack, float partialTick) { item = override; } - // climbey override - if (DATA_HOLDER.climbTracker.isClimbeyClimb() && !ClimbTracker.isClaws(item) && override == null) { + if (DATA_HOLDER.climbTracker.isClimbeyClimb() && ClimbTracker.hasClimbeyClimbEquipped(MC.player) && + !DATA_HOLDER.climbTracker.isClaws(item) && override == null) { item = MC.player.getOffhandItem(); } @@ -233,8 +233,8 @@ public static void renderVRHand_Offhand(PoseStack poseStack, float partialTick, item = override; } - // climbey override - if (DATA_HOLDER.climbTracker.isClimbeyClimb() && !ClimbTracker.isClaws(item) && override == null) { + if (DATA_HOLDER.climbTracker.isClimbeyClimb() && ClimbTracker.hasClimbeyClimbEquipped(MC.player) && + !DATA_HOLDER.climbTracker.isClaws(item) && override == null) { item = MC.player.getMainHandItem(); } diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/origins/OriginsHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/origins/OriginsHelper.java new file mode 100644 index 000000000..d9a0d6027 --- /dev/null +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/origins/OriginsHelper.java @@ -0,0 +1,20 @@ +package org.vivecraft.mod_compat_vr.origins; + +import org.vivecraft.client.Xplat; +import io.github.apace100.apoli.component.PowerHolderComponent; +import io.github.apace100.apoli.power.ClimbingPower; +import io.github.apace100.apoli.power.TogglePower; +import net.minecraft.world.entity.LivingEntity; + +public class OriginsHelper { + @SuppressWarnings("ConstantConditions") + public static boolean isLoaded() { + return Xplat.isModLoaded("origins") && Xplat.getModloader().isFabric(); + } + + public static boolean hasClimbingPower(LivingEntity entity) { + // assumes toggle is for climbing, which is correct at least for stock origins + return !PowerHolderComponent.KEY.get(entity).getPowers(ClimbingPower.class, true).isEmpty() + && !PowerHolderComponent.KEY.get(entity).getPowers(TogglePower.class, false).isEmpty(); + } +}