superb-warfare/src/main/java/com/atsuishio/superbwarfare/item/Hammer.java
2025-05-22 20:10:24 +08:00

73 lines
2.4 KiB
Java

package com.atsuishio.superbwarfare.item;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tiers;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
import org.jetbrains.annotations.NotNull;
import javax.annotation.ParametersAreNonnullByDefault;
@EventBusSubscriber(bus = EventBusSubscriber.Bus.GAME)
public class Hammer extends SwordItem {
public Hammer() {
super(Tiers.IRON, new Item.Properties()
.durability(400)
.attributes(SwordItem.createAttributes(Tiers.IRON, 9, -3.2f))
);
}
@Override
public boolean hasCraftingRemainingItem(@NotNull ItemStack stack) {
return true;
}
@Override
public @NotNull ItemStack getCraftingRemainingItem(ItemStack itemstack) {
ItemStack stack = new ItemStack(this);
stack.setDamageValue(itemstack.getDamageValue() + 1);
if (stack.getDamageValue() >= stack.getMaxDamage()) {
return ItemStack.EMPTY;
}
return stack;
}
@Override
public boolean isRepairable(@NotNull ItemStack itemstack) {
return true;
}
@Override
@ParametersAreNonnullByDefault
public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
attacker.level().playSound(null, target.getOnPos(), ModSounds.MELEE_HIT.get(), SoundSource.PLAYERS, 1, (float) ((2 * org.joml.Math.random() - 1) * 0.1f + 1.0f));
return super.hurtEnemy(stack, target, attacker);
}
@SubscribeEvent
public static void onItemCrafted(PlayerEvent.ItemCraftedEvent event) {
var item = event.getCrafting();
var container = event.getInventory();
var player = event.getEntity();
if (player.level().isClientSide) return;
if (item.is(ModItems.HAMMER.get())) {
int count = 0;
for (int i = 0; i < container.getContainerSize(); i++) {
if (container.getItem(i).is(ModItems.HAMMER.get())) count++;
}
if (count == 2) {
container.clearContent();
}
}
}
}