Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package item;
- import com.doodle.spearsmod.SpearsMod;
- import com.google.common.collect.ImmutableMultimap;
- import com.google.common.collect.Multimap;
- import entity.ThrownNetheriteSpear;
- import init.ModEntityTypes;
- import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
- import net.minecraft.sounds.SoundEvent;
- import net.minecraft.sounds.SoundEvents;
- import net.minecraft.sounds.SoundSource;
- import net.minecraft.stats.Stats;
- import net.minecraft.util.Mth;
- import net.minecraft.world.InteractionHand;
- import net.minecraft.world.InteractionResultHolder;
- import net.minecraft.world.entity.EntityType;
- import net.minecraft.world.entity.EquipmentSlot;
- import net.minecraft.world.entity.LivingEntity;
- import net.minecraft.world.entity.MoverType;
- import net.minecraft.world.entity.ai.attributes.Attribute;
- import net.minecraft.world.entity.ai.attributes.AttributeModifier;
- import net.minecraft.world.entity.ai.attributes.Attributes;
- import net.minecraft.world.entity.player.Player;
- import net.minecraft.world.entity.projectile.AbstractArrow;
- import net.minecraft.world.item.Item;
- import net.minecraft.world.item.ItemStack;
- import net.minecraft.world.item.UseAnim;
- import net.minecraft.world.item.Vanishable;
- import net.minecraft.world.item.enchantment.EnchantmentHelper;
- import net.minecraft.world.level.Level;
- import net.minecraft.world.phys.Vec3;
- import net.minecraftforge.client.extensions.common.IClientItemExtensions;
- import java.util.function.Consumer;
- public class NetheriteSpearItem extends Item implements Vanishable {
- EntityType<? extends ThrownNetheriteSpear> type;
- private final Multimap<Attribute, AttributeModifier> defaultModifiers;
- public NetheriteSpearItem(Item.Properties properties) {
- super(properties);
- ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder();
- builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Tool modifier", 8.0D, AttributeModifier.Operation.ADDITION));
- builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Tool modifier", (double)-2.9F, AttributeModifier.Operation.ADDITION));
- this.defaultModifiers = builder.build();
- }
- public UseAnim getUseAnimation(ItemStack p_43417_) {
- return UseAnim.SPEAR;
- }
- public int getUseDuration(ItemStack p_43419_) {
- return 72000;
- }
- @Override
- public InteractionResultHolder<ItemStack> use(Level p_43405_, Player p_43406_, InteractionHand p_43407_) {
- ItemStack itemstack = p_43406_.getItemInHand(p_43407_);
- {
- p_43406_.startUsingItem(p_43407_);
- return InteractionResultHolder.consume(itemstack);
- }
- }
- @Override
- public void releaseUsing(ItemStack stack, Level level, LivingEntity entity, int p_43397_) {
- if (entity instanceof Player player) {
- int i = this.getUseDuration(stack) - p_43397_;
- if (i >= 10) {
- int j = EnchantmentHelper.getRiptide(stack);
- if (j <= 0 || player.isInWaterOrRain()) {
- if (!level.isClientSide) {
- stack.hurtAndBreak(1, player, (p_43388_) -> {
- p_43388_.broadcastBreakEvent(entity.getUsedItemHand());
- });
- if (j == 0) {
- ThrownNetheriteSpear netheriteSpear = new ThrownNetheriteSpear(ModEntityTypes.NETHERITE_SPEAR.get(), level, player, stack);
- netheriteSpear.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 2.5F, 1.0F);
- if (player.getAbilities().instabuild) {
- netheriteSpear.pickup = AbstractArrow.Pickup.CREATIVE_ONLY;
- }
- level.addFreshEntity(netheriteSpear);
- level.playSound((Player)null, netheriteSpear, SoundEvents.TRIDENT_THROW, SoundSource.PLAYERS, 1.0F, 1.0F);
- if (!player.getAbilities().instabuild) {
- player.getInventory().removeItem(stack);
- }
- }
- }
- player.awardStat(Stats.ITEM_USED.get(this));
- if (j > 0) {
- float f7 = player.getYRot();
- float f = player.getXRot();
- float f1 = -Mth.sin(f7 * ((float)Math.PI / 180F)) * Mth.cos(f * ((float)Math.PI / 180F));
- float f2 = -Mth.sin(f * ((float)Math.PI / 180F));
- float f3 = Mth.cos(f7 * ((float)Math.PI / 180F)) * Mth.cos(f * ((float)Math.PI / 180F));
- float f4 = Mth.sqrt(f1 * f1 + f2 * f2 + f3 * f3);
- float f5 = 3.0F * ((1.0F + (float)j) / 4.0F);
- f1 *= f5 / f4;
- f2 *= f5 / f4;
- f3 *= f5 / f4;
- player.push((double)f1, (double)f2, (double)f3);
- player.startAutoSpinAttack(20);
- if (player.isOnGround()) {
- float f6 = 1.1999999F;
- player.move(MoverType.SELF, new Vec3(0.0D, (double)1.1999999F, 0.0D));
- }
- SoundEvent soundevent;
- if (j >= 3) {
- soundevent = SoundEvents.TRIDENT_RIPTIDE_3;
- } else if (j == 2) {
- soundevent = SoundEvents.TRIDENT_RIPTIDE_2;
- } else {
- soundevent = SoundEvents.TRIDENT_RIPTIDE_1;
- }
- level.playSound((Player)null, player, soundevent, SoundSource.PLAYERS, 1.0F, 1.0F);
- }
- }
- }
- }
- }
- public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot p_43383_) {
- return p_43383_ == EquipmentSlot.MAINHAND ? this.defaultModifiers : super.getDefaultAttributeModifiers(p_43383_);
- }
- @Override
- public void initializeClient(Consumer<IClientItemExtensions> consumer) {
- consumer.accept(new IClientItemExtensions() {
- @Override
- public BlockEntityWithoutLevelRenderer getCustomRenderer() {
- return SpearsMod.getItemsRenderer();
- }
- });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment