commit 18ac992f4c3b6f4e954e2c6420f01d785e9deb2a from: rohanverma2007 date: Sun Apr 26 20:44:09 2026 UTC fix cobblemon commit - 5f62d807b374df4f08e70f0159c6dc1e67dacbad commit + 18ac992f4c3b6f4e954e2c6420f01d785e9deb2a blob - /dev/null blob + f72a77ea936d3b43a69541b872412a2b5404427b (mode 644) --- /dev/null +++ src/main/java/com/cobblemon/mod/common/api/pasture/PastureLink.java @@ -0,0 +1,10 @@ +package com.cobblemon.mod.common.api.pasture; + +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; + +public final class PastureLink { + private PastureLink() {} + public BlockPos getPos() { return null; } + public ResourceLocation getDimension() { return null; } +} blob - /dev/null blob + defa5f5eb1b74a912b8c470aa21bbe430168620e (mode 644) --- /dev/null +++ src/main/java/com/cobblemon/mod/common/api/pasture/PastureLinkManager.java @@ -0,0 +1,9 @@ +package com.cobblemon.mod.common.api.pasture; + +import net.minecraft.server.level.ServerPlayer; + +public final class PastureLinkManager { + public static final PastureLinkManager INSTANCE = new PastureLinkManager(); + private PastureLinkManager() {} + public static PastureLink getLinkByPlayer(ServerPlayer player) { return null; } +} blob - /dev/null blob + a98b2eed63c15eb5a55e850eaaf2e7a948f446e2 (mode 644) --- /dev/null +++ src/main/java/com/cobblemon/mod/common/entity/pokemon/PokemonEntity.java @@ -0,0 +1,11 @@ +package com.cobblemon.mod.common.entity.pokemon; + +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.level.Level; + +public abstract class PokemonEntity extends PathfinderMob { + protected PokemonEntity(EntityType type, Level level) { + super(type, level); + } +} blob - 5319aa243154738410e10270af29660aef00a23e blob + 5dafc0ede48fbe660bd393799047a007478f8558 --- src/main/java/sh/rsap/aeronauticscompat/mixin/AeronauticsCompatMixinPlugin.java +++ src/main/java/sh/rsap/aeronauticscompat/mixin/AeronauticsCompatMixinPlugin.java @@ -45,6 +45,10 @@ public class AeronauticsCompatMixinPlugin implements I Map.entry("sh.rsap.aeronauticscompat.mixin.sable.ClientPacketListenerMixin", new String[]{SABLE}), Map.entry("sh.rsap.aeronauticscompat.mixin.cobblemon.ProximityPCLinkMixin", + new String[]{SABLE, COBBLEMON}), + Map.entry("sh.rsap.aeronauticscompat.mixin.cobblemon.PastureLinkManagerMixin", + new String[]{SABLE, COBBLEMON}), + Map.entry("sh.rsap.aeronauticscompat.mixin.cobblemon.PokemonEntityRidingMixin", new String[]{SABLE, COBBLEMON}) ); @Override blob - /dev/null blob + 961d4ee326f3eb3c80722a5378cf62d6ab62eafa (mode 644) --- /dev/null +++ src/main/java/sh/rsap/aeronauticscompat/mixin/cobblemon/PastureLinkManagerMixin.java @@ -0,0 +1,88 @@ +package sh.rsap.aeronauticscompat.mixin.cobblemon; + +import com.cobblemon.mod.common.api.pasture.PastureLink; +import com.cobblemon.mod.common.api.pasture.PastureLinkManager; +import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import sh.rsap.aeronauticscompat.compat.SableBridge; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.UUID; + +@Pseudo +@Mixin(value = PastureLinkManager.class, remap = false) +public abstract class PastureLinkManagerMixin { + + private static volatile Field LINKS_FIELD; + private static volatile Method GET_POS_METHOD; + private static volatile Method GET_DIMENSION_METHOD; + + @Inject(method = "getLinkByPlayer", at = @At("HEAD"), cancellable = true, remap = false) + private static void aeronauticscompat$crossSubLevelLinkCheck( + ServerPlayer player, CallbackInfoReturnable cir) { + + if (!SableBridge.isAvailable()) return; + + try { + Field linksField = LINKS_FIELD; + if (linksField == null) { + linksField = PastureLinkManager.class.getDeclaredField("links"); + linksField.setAccessible(true); + LINKS_FIELD = linksField; + } + + @SuppressWarnings("unchecked") + Map links = (Map) linksField.get(null); + PastureLink link = links.get(player.getUUID()); + if (link == null) { + cir.setReturnValue(null); + return; + } + + Method getPos = GET_POS_METHOD; + if (getPos == null) { + getPos = link.getClass().getMethod("getPos"); + GET_POS_METHOD = getPos; + } + Method getDim = GET_DIMENSION_METHOD; + if (getDim == null) { + getDim = link.getClass().getMethod("getDimension"); + GET_DIMENSION_METHOD = getDim; + } + + BlockPos pos = (BlockPos) getPos.invoke(link); + ResourceLocation dim = (ResourceLocation) getDim.invoke(link); + + if (pos == null || dim == null) return; + + if (!player.level().dimensionTypeRegistration().is(dim)) { + links.remove(player.getUUID()); + cir.setReturnValue(null); + return; + } + + Level world = player.level(); + Vec3 pastureCenter = new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + double distSq = SableBridge.distanceSquaredWithSubLevels(world, player.position(), pastureCenter); + if (Double.isNaN(distSq)) return; + + if (distSq <= 10.0 * 10.0) { + cir.setReturnValue(link); + return; + } + + links.remove(player.getUUID()); + cir.setReturnValue(null); + } catch (Throwable ignored) {} + } +} blob - /dev/null blob + 6c2d38197d13348c4c3b0df5f4d86b630f8c893f (mode 644) --- /dev/null +++ src/main/java/sh/rsap/aeronauticscompat/mixin/cobblemon/PokemonEntityRidingMixin.java @@ -0,0 +1,59 @@ +package sh.rsap.aeronauticscompat.mixin.cobblemon; + +import com.cobblemon.mod.common.entity.pokemon.PokemonEntity; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Pseudo; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.lang.reflect.Method; + +@Pseudo +@Mixin(value = PokemonEntity.class, remap = false) +public abstract class PokemonEntityRidingMixin extends LivingEntity { + + private static volatile Method SET_PLOT_POSITION; + private static volatile boolean SETUP_TRIED = false; + + private PokemonEntityRidingMixin() { super(null, null); } + + @Inject(method = "tick", at = @At("HEAD"), remap = false) + private void aeronauticscompat$unstickAtTickHead(CallbackInfo ci) { + aeronauticscompat$clearPlotPositionIfRidden(); + } + + @Inject(method = "travel", at = @At("HEAD"), remap = false) + private void aeronauticscompat$unstickAtTravelHead(CallbackInfo ci) { + aeronauticscompat$clearPlotPositionIfRidden(); + } + + private void aeronauticscompat$clearPlotPositionIfRidden() { + Entity self = (Entity)(Object)this; + if (self.level().isClientSide) return; + if (this.getControllingPassenger() == null) return; + + if (!SETUP_TRIED) { + synchronized (PokemonEntityRidingMixin.class) { + if (!SETUP_TRIED) { + try { + Class ext = Class.forName( + "dev.ryanhcode.sable.mixinterface.entity.entities_stick_sublevels.EntityStickExtension"); + SET_PLOT_POSITION = ext.getMethod("sable$setPlotPosition", + net.minecraft.world.phys.Vec3.class); + } catch (Throwable ignored) {} + SETUP_TRIED = true; + } + } + } + + Method m = SET_PLOT_POSITION; + if (m == null) return; + + try { + m.invoke(self, (Object) null); + } catch (Throwable ignored) {} + } +} blob - 659a02f705416d640f81745c4bf74f544f1b1ddf blob + 379f4b03199b71307a52758029ad6bd066516bc1 --- src/main/resources/aeronauticscompat.mixins.json +++ src/main/resources/aeronauticscompat.mixins.json @@ -12,7 +12,9 @@ "bitsnbobs.CogwheelChainBlockEntityMixin", "pneumaticcraft.SentryTurretEntitySelectorMixin", "pneumaticcraft.AbstractPneumaticCraftBlockMixin", - "cobblemon.ProximityPCLinkMixin" + "cobblemon.ProximityPCLinkMixin", + "cobblemon.PastureLinkManagerMixin", + "cobblemon.PokemonEntityRidingMixin" ], "client": [ "etched.EtchedStopListeningSoundMixin",