HTTPS
https://git.nageyqma.icu/nageyqma/odin_next.git
SSH
git@git.nageyqma.icu:nageyqma/odin_next.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
123456789101112131415161718192021222324252627282930313233343536373839404142434445
package com.odtheking.mixin.mixins;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.odtheking.odin.events.EntityEvent;
import com.odtheking.odin.features.impl.dungeon.Highlight;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.InterpolationHandler;
import net.minecraft.world.entity.PositionPath;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(Entity.class)
public abstract class EntityMixin {
@Inject(method = "getTeamColor", at = @At("HEAD"), cancellable = true)
public void onGetTeamColor(CallbackInfoReturnable<Integer> cir) {
Entity self = (Entity)(Object)this;
Integer color = Highlight.getTeammateColor(self);
if (color != null) cir.setReturnValue(color);
}
@WrapOperation(
method = "moveOrInterpolateTo(Lnet/minecraft/world/entity/PositionPath;FFZ)V",
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/InterpolationHandler;interpolateTo(Lnet/minecraft/world/entity/PositionPath;FFZ)Z")
)
private boolean onMoveOrInterpolateTo(InterpolationHandler instance, PositionPath path, float yRot, float xRot, boolean flag, Operation<Boolean> original) {
boolean result = original.call(instance, path, yRot, xRot, flag);
Entity entity = (Entity)(Object)this;
new EntityEvent.Move(entity, path.endPosition(), yRot, xRot, entity.onGround()).postAndCatch();
return result;
}
@Inject(method = "setOnGround", at = @At("TAIL"))
private void onSetOnGround(boolean onGround, CallbackInfo ci) {
Entity entity = (Entity)(Object)this;
new EntityEvent.Move(entity, Vec3.ZERO, 0f, 0f, onGround).postAndCatch();
}
}