Added ability for Stalinium Sword to grant speed and resistance effects to player and nearby allies.
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package net.krituximon.stalinium.item;
|
package net.krituximon.stalinium.item;
|
||||||
|
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.InteractionHand;
|
||||||
|
import net.minecraft.world.InteractionResultHolder;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.effect.MobEffectInstance;
|
import net.minecraft.world.effect.MobEffectInstance;
|
||||||
@@ -8,13 +9,22 @@ import net.minecraft.world.effect.MobEffects;
|
|||||||
import net.minecraft.world.item.SwordItem;
|
import net.minecraft.world.item.SwordItem;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Tier;
|
import net.minecraft.world.item.Tier;
|
||||||
|
import net.minecraft.world.item.UseAnim;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.world.phys.AABB;
|
import net.minecraft.world.phys.AABB;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class StaliniumSwordItem extends SwordItem {
|
public class StaliniumSwordItem extends SwordItem {
|
||||||
|
private static final double RANGE = 6.0;
|
||||||
|
private static final double HALF_ANGLE = Math.toRadians(30);
|
||||||
|
private static final double COS_HALF_ANGLE = Math.cos(HALF_ANGLE);
|
||||||
|
private static final int DURATION = 5 * 20;
|
||||||
|
private static final int SPEED_AMP = 1;
|
||||||
|
private static final int RESIST_AMP = 0;
|
||||||
|
|
||||||
public StaliniumSwordItem(Tier tier, Properties props) {
|
public StaliniumSwordItem(Tier tier, Properties props) {
|
||||||
super(tier, props);
|
super(tier, props);
|
||||||
}
|
}
|
||||||
@@ -37,6 +47,35 @@ public class StaliniumSwordItem extends SwordItem {
|
|||||||
return super.hurtEnemy(stack, target, attacker);
|
return super.hurtEnemy(stack, target, attacker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
|
||||||
|
if (!world.isClientSide) {
|
||||||
|
player.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, DURATION, SPEED_AMP, false, true));
|
||||||
|
player.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, DURATION, RESIST_AMP, false, true));
|
||||||
|
AABB area = player.getBoundingBox().inflate(RANGE);
|
||||||
|
List<Player> allies = world.getEntitiesOfClass(
|
||||||
|
Player.class, area,
|
||||||
|
p -> p instanceof ServerPlayer && player.isAlliedTo(p)
|
||||||
|
);
|
||||||
|
Vec3 look = player.getLookAngle();
|
||||||
|
for (Player ally : allies) {
|
||||||
|
Vec3 toAlly = ally.position().subtract(player.position()).normalize();
|
||||||
|
if (toAlly.dot(look) >= COS_HALF_ANGLE) {
|
||||||
|
ally.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SPEED, DURATION, SPEED_AMP, false, true));
|
||||||
|
ally.addEffect(new MobEffectInstance(MobEffects.DAMAGE_RESISTANCE, DURATION, RESIST_AMP, false, true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
player.startUsingItem(hand);
|
||||||
|
player.swing(hand, true);
|
||||||
|
return InteractionResultHolder.sidedSuccess(player.getItemInHand(hand), world.isClientSide);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UseAnim getUseAnimation(ItemStack stack) {
|
||||||
|
return UseAnim.BOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDamageable(ItemStack stack) {
|
public boolean isDamageable(ItemStack stack) {
|
||||||
|
|||||||
Reference in New Issue
Block a user