Files
TiedUp-/src/main/java/com/tiedup/remake/items/ItemTaser.java
NotEvil f6466360b6 Clean repo for open source release
Remove build artifacts, dev tool configs, unused dependencies,
and third-party source dumps. Add proper README, update .gitignore,
clean up Makefile.
2026-04-12 00:51:22 +02:00

117 lines
3.5 KiB
Java

package com.tiedup.remake.items;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.tiedup.remake.core.ModConfig;
import com.tiedup.remake.core.ModSounds;
import java.util.UUID;
import net.minecraft.sounds.SoundSource;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
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.item.Item;
import net.minecraft.world.item.ItemStack;
/**
* Taser - Kidnapper's defensive weapon
*
* Used by kidnappers when attacked while holding a captive.
* On hit:
* - Plays electric shock sound
* - Applies Slowness I + Weakness I for 5 seconds
* - Deals 3 hearts of damage
*/
public class ItemTaser extends Item {
/** UUID for the attack damage modifier */
private static final UUID ATTACK_DAMAGE_UUID = UUID.fromString(
"CB3F55D3-645C-4F38-A497-9C13A33DB5CF"
);
private final Multimap<Attribute, AttributeModifier> defaultModifiers;
public ItemTaser() {
super(new Item.Properties().stacksTo(1).durability(64));
// Build attribute modifiers for attack damage
// NOTE: Using default value 5.0 (ModConfig not loaded yet during item registration)
ImmutableMultimap.Builder<Attribute, AttributeModifier> builder =
ImmutableMultimap.builder();
builder.put(
Attributes.ATTACK_DAMAGE,
new AttributeModifier(
ATTACK_DAMAGE_UUID,
"Weapon modifier",
5.0, // Default damage (matches ModConfig default)
AttributeModifier.Operation.ADDITION
)
);
this.defaultModifiers = builder.build();
}
/**
* Called when this item is used to attack an entity.
* Applies shock effects on successful hit.
*/
@Override
public boolean hurtEnemy(
ItemStack stack,
LivingEntity target,
LivingEntity attacker
) {
// Play electric shock sound
target
.level()
.playSound(
null,
target.blockPosition(),
ModSounds.ELECTRIC_SHOCK.get(),
SoundSource.HOSTILE,
1.0f,
1.0f
);
int duration = ModConfig.SERVER.taserStunDuration.get();
// Apply Slowness I
target.addEffect(
new MobEffectInstance(
MobEffects.MOVEMENT_SLOWDOWN,
duration,
0 // Amplifier 0 = level I
)
);
// Apply Weakness I
target.addEffect(
new MobEffectInstance(
MobEffects.WEAKNESS,
duration,
0 // Amplifier 0 = level I
)
);
// Consume durability
stack.hurtAndBreak(1, attacker, e ->
e.broadcastBreakEvent(EquipmentSlot.MAINHAND)
);
return true;
}
/**
* Get attribute modifiers for this item when equipped.
*/
@Override
public Multimap<Attribute, AttributeModifier> getDefaultAttributeModifiers(
EquipmentSlot slot
) {
return slot == EquipmentSlot.MAINHAND
? this.defaultModifiers
: super.getDefaultAttributeModifiers(slot);
}
}