ICanDoodle

Untitled

Jun 17th, 2023
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.51 KB | None | 0 0
  1. package item;
  2.  
  3. import com.doodle.spearsmod.SpearsMod;
  4. import com.google.common.collect.ImmutableMultimap;
  5. import com.google.common.collect.Multimap;
  6. import entity.ThrownNetheriteSpear;
  7. import init.ModEntityTypes;
  8. import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
  9. import net.minecraft.sounds.SoundEvent;
  10. import net.minecraft.sounds.SoundEvents;
  11. import net.minecraft.sounds.SoundSource;
  12. import net.minecraft.stats.Stats;
  13. import net.minecraft.util.Mth;
  14. import net.minecraft.world.InteractionHand;
  15. import net.minecraft.world.InteractionResultHolder;
  16. import net.minecraft.world.entity.EntityType;
  17. import net.minecraft.world.entity.EquipmentSlot;
  18. import net.minecraft.world.entity.LivingEntity;
  19. import net.minecraft.world.entity.MoverType;
  20. import net.minecraft.world.entity.ai.attributes.Attribute;
  21. import net.minecraft.world.entity.ai.attributes.AttributeModifier;
  22. import net.minecraft.world.entity.ai.attributes.Attributes;
  23. import net.minecraft.world.entity.player.Player;
  24. import net.minecraft.world.entity.projectile.AbstractArrow;
  25. import net.minecraft.world.item.Item;
  26. import net.minecraft.world.item.ItemStack;
  27. import net.minecraft.world.item.UseAnim;
  28. import net.minecraft.world.item.Vanishable;
  29. import net.minecraft.world.item.enchantment.EnchantmentHelper;
  30. import net.minecraft.world.level.Level;
  31. import net.minecraft.world.phys.Vec3;
  32. import net.minecraftforge.client.extensions.common.IClientItemExtensions;
  33.  
  34. import java.util.function.Consumer;
  35.  
  36. public class NetheriteSpearItem extends Item implements Vanishable {
  37.  
  38.     EntityType<? extends ThrownNetheriteSpear> type;
  39.  
  40.     private final Multimap<Attribute, AttributeModifier> defaultModifiers;
  41.  
  42.     public NetheriteSpearItem(Item.Properties properties) {
  43.         super(properties);
  44.         ImmutableMultimap.Builder<Attribute, AttributeModifier> builder = ImmutableMultimap.builder();
  45.         builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Tool modifier", 8.0D, AttributeModifier.Operation.ADDITION));
  46.         builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Tool modifier", (double)-2.9F, AttributeModifier.Operation.ADDITION));
  47.         this.defaultModifiers = builder.build();
  48.     }
  49.  
  50.     public UseAnim getUseAnimation(ItemStack p_43417_) {
  51.         return UseAnim.SPEAR;
  52.     }
  53.  
  54.  
  55.     public int getUseDuration(ItemStack p_43419_) {
  56.         return 72000;
  57.     }
  58.  
  59.  
  60.  
  61.     @Override
  62.     public InteractionResultHolder<ItemStack> use(Level p_43405_, Player p_43406_, InteractionHand p_43407_) {
  63.         ItemStack itemstack = p_43406_.getItemInHand(p_43407_);
  64.         {
  65.             p_43406_.startUsingItem(p_43407_);
  66.             return InteractionResultHolder.consume(itemstack);
  67.         }
  68.     }
  69.     @Override
  70.     public void releaseUsing(ItemStack stack, Level level, LivingEntity entity, int p_43397_) {
  71.         if (entity instanceof Player player) {
  72.             int i = this.getUseDuration(stack) - p_43397_;
  73.             if (i >= 10) {
  74.                 int j = EnchantmentHelper.getRiptide(stack);
  75.                 if (j <= 0 || player.isInWaterOrRain()) {
  76.                     if (!level.isClientSide) {
  77.                         stack.hurtAndBreak(1, player, (p_43388_) -> {
  78.                             p_43388_.broadcastBreakEvent(entity.getUsedItemHand());
  79.                         });
  80.                         if (j == 0) {
  81.                             ThrownNetheriteSpear netheriteSpear = new ThrownNetheriteSpear(ModEntityTypes.NETHERITE_SPEAR.get(), level, player, stack);
  82.                             netheriteSpear.shootFromRotation(player, player.getXRot(), player.getYRot(), 0.0F, 2.5F, 1.0F);
  83.                             if (player.getAbilities().instabuild) {
  84.                                 netheriteSpear.pickup = AbstractArrow.Pickup.CREATIVE_ONLY;
  85.                             }
  86.  
  87.                             level.addFreshEntity(netheriteSpear);
  88.                             level.playSound((Player)null, netheriteSpear, SoundEvents.TRIDENT_THROW, SoundSource.PLAYERS, 1.0F, 1.0F);
  89.                             if (!player.getAbilities().instabuild) {
  90.                                 player.getInventory().removeItem(stack);
  91.                             }
  92.                         }
  93.                     }
  94.  
  95.                     player.awardStat(Stats.ITEM_USED.get(this));
  96.                     if (j > 0) {
  97.                         float f7 = player.getYRot();
  98.                         float f = player.getXRot();
  99.                         float f1 = -Mth.sin(f7 * ((float)Math.PI / 180F)) * Mth.cos(f * ((float)Math.PI / 180F));
  100.                         float f2 = -Mth.sin(f * ((float)Math.PI / 180F));
  101.                         float f3 = Mth.cos(f7 * ((float)Math.PI / 180F)) * Mth.cos(f * ((float)Math.PI / 180F));
  102.                         float f4 = Mth.sqrt(f1 * f1 + f2 * f2 + f3 * f3);
  103.                         float f5 = 3.0F * ((1.0F + (float)j) / 4.0F);
  104.                         f1 *= f5 / f4;
  105.                         f2 *= f5 / f4;
  106.                         f3 *= f5 / f4;
  107.                         player.push((double)f1, (double)f2, (double)f3);
  108.                         player.startAutoSpinAttack(20);
  109.                         if (player.isOnGround()) {
  110.                             float f6 = 1.1999999F;
  111.                             player.move(MoverType.SELF, new Vec3(0.0D, (double)1.1999999F, 0.0D));
  112.                         }
  113.  
  114.                         SoundEvent soundevent;
  115.                         if (j >= 3) {
  116.                             soundevent = SoundEvents.TRIDENT_RIPTIDE_3;
  117.                         } else if (j == 2) {
  118.                             soundevent = SoundEvents.TRIDENT_RIPTIDE_2;
  119.                         } else {
  120.                             soundevent = SoundEvents.TRIDENT_RIPTIDE_1;
  121.                         }
  122.  
  123.                         level.playSound((Player)null, player, soundevent, SoundSource.PLAYERS, 1.0F, 1.0F);
  124.                     }
  125.  
  126.                 }
  127.             }
  128.         }
  129.     }
  130.  
  131.  
  132.     public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(EquipmentSlot p_43383_) {
  133.         return p_43383_ == EquipmentSlot.MAINHAND ? this.defaultModifiers : super.getDefaultAttributeModifiers(p_43383_);
  134.     }
  135.  
  136.     @Override
  137.     public void initializeClient(Consumer<IClientItemExtensions> consumer) {
  138.         consumer.accept(new IClientItemExtensions() {
  139.             @Override
  140.             public BlockEntityWithoutLevelRenderer getCustomRenderer() {
  141.                 return SpearsMod.getItemsRenderer();
  142.             }
  143.         });
  144.     }
  145.  
  146. }
  147.  
Advertisement
Add Comment
Please, Sign In to add comment