34 lines
1.2 KiB
Java
34 lines
1.2 KiB
Java
package com.r3944realms.leashedplayer.mixin.both;
|
||
|
||
import com.r3944realms.leashedplayer.modInterface.PlayerLeashable;
|
||
import net.minecraft.world.entity.Entity;
|
||
import net.minecraft.world.entity.Leashable;
|
||
import org.spongepowered.asm.mixin.Mixin;
|
||
import org.spongepowered.asm.mixin.Shadow;
|
||
import org.spongepowered.asm.mixin.injection.At;
|
||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||
|
||
@Mixin(Entity.class)
|
||
public abstract class MixinEntity {
|
||
@Shadow public abstract void igniteForSeconds(float pSeconds);
|
||
|
||
/**
|
||
* 这里重定向,当实体类实现了{@link PlayerLeashable}接口时,<br/>
|
||
* 阻止原版的{@link Leashable}中 的tickLeash方法调用,将其<br/>
|
||
* 我们需自己实现相关的逻辑
|
||
* @param entity 实体
|
||
* @param <E> 实体类型
|
||
*/
|
||
@Redirect(
|
||
method = "baseTick",
|
||
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Leashable;tickLeash(Lnet/minecraft/world/entity/Entity;)V")
|
||
)
|
||
<E extends Entity & Leashable> void checkAndCancelIfTure(E entity) {
|
||
if(!(entity instanceof PlayerLeashable)) {
|
||
Leashable.tickLeash(entity);
|
||
}
|
||
}
|
||
|
||
|
||
}
|