- 2
- 0
Я хочу исправить гриф в Solarcraft, я знаю, как исправить это в 1.7.10 с помощью EventHelper от GamerForEA, но его не существует для 1.20.1
Как вызвать форджевский эвент атаки и проверить, было ли он отменен или нет?
Как вызвать форджевский эвент атаки и проверить, было ли он отменен или нет?
Исходник:
@Override
public void releaseUsing(ItemStack stack, Level level, LivingEntity entity, int remainingTime) {
if (entity instanceof ServerPlayer) {
stack.hurtAndBreak(1,entity,(l)->{
l.broadcastBreakEvent(l.getUsedItemHand());
});
}
if (!level.isClientSide){
int i = this.getUseDuration(stack) - remainingTime;
float power = BowItem.getPowerForTime(i);
int damage = 10;
if (getItemLevel(stack) >= 1){
damage+=5;
}
damage *= power;
Consumer<EntityHitResult> cons = (ctx)-> {
Entity entity1 = ctx.getEntity();
if (entity1 instanceof LivingEntity ent) {
if (getItemLevel(stack) >= 2){
ent.setSecondsOnFire(8);
}
if (getItemLevel(stack) >= 3) {
ent.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 80, 2));
}
if (getItemLevel(stack) >= 5){
List<LivingEntity> targets = ent.level.getEntitiesOfClass(LivingEntity.class,aoe.move(ent.position()),(target)->{
if (target.equals(ent) || target.equals(entity)) {
return false;
}else{
return true;
}
});
targets.forEach((target)->{
Vec3 origPos = ent.position().add(0,ent.getBbHeight()/1.2,0);
Vec3 targetPos = target.position().add(0,target.getBbHeight()/1.2,0);
Vec3 velocity = new Vec3(targetPos.x - origPos.x,targetPos.y - origPos.y,targetPos.z - origPos.z);
AbstractTurretProjectile proj = new AbstractTurretProjectile(level,new AbstractTurretProjectile.Constructor()
.setPosition(origPos)
.setVelocity(velocity.normalize().multiply(3,3,3))
.setDamageSource(SolarcraftDamageSources.livingArmorPierceProjectile(entity))
.setDamage(15*power)
.addOnHitEntityEffect((sideContext)->{
if (sideContext.getEntity() instanceof LivingEntity t){
t.setSecondsOnFire(8);
t.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 80, 2));
}
})
);
ctx.getEntity().level.addFreshEntity(proj);
});
}
}
};
AbstractTurretProjectile proj = new AbstractTurretProjectile(level,new AbstractTurretProjectile.Constructor()
.setPosition(entity.position().add(entity.getLookAngle().x,entity.getBbHeight()/1.4 + entity.getLookAngle().y,entity.getLookAngle().z))
.setVelocity(entity.getLookAngle().multiply(3,3,3))
.setDamageSource(SolarcraftDamageSources.livingArmorPierceProjectile(entity))
.setDamage(damage)
.addOnHitEntityEffect(cons)
);
if ((getItemLevel(stack) >= 4) && power >= 0.8){
proj.explosionPower = 5;
}
level.addFreshEntity(proj);
}
super.releaseUsing(stack, level, entity, remainingTime);
}
Я хочу вызвать проверку тут:
if (sideContext.getEntity() instanceof LivingEntity t){
t.setSecondsOnFire(8);
t.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 80, 2));
}