package com.xfestudio.mydimensionlord.item;
import com.xfestudio.mydimensionlord.equipment.EquipmentPowers;
import com.xfestudio.mydimensionlord.equipment.EquipmentRules;
import com.xfestudio.mydimensionlord.platform.EquipmentCombat;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.*;
import net.minecraft.world.level.Level;
public final class DimensionBladeItem extends SwordItem {
@Override public void initializeClient(java.util.function.Consumer<net.minecraftforge.client.extensions.common.IClientItemExtensions> consumer) {
com.xfestudio.mydimensionlord.client.gear.EquipmentClientExtensions.initialize(consumer);
}
public DimensionBladeItem(Tier tier, Item.Properties properties) { super(tier, properties.attributes(SwordItem.createAttributes(tier, EquipmentRules.BLADE_ATTACK_BONUS, -2.6F))); }
@Override public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
if (hand != InteractionHand.MAIN_HAND) return super.use(level, player, hand);
ItemStack stack = player.getItemInHand(hand);
if (EquipmentCombat.cooling(player, stack)) return InteractionResultHolder.fail(stack);
player.startUsingItem(hand);
return InteractionResultHolder.consume(stack);
}
@Override public int getUseDuration(ItemStack stack, LivingEntity entity) { return EquipmentRules.BLADE_USE_DURATION; }
@Override public UseAnim getUseAnimation(ItemStack stack) { return UseAnim.NONE; }
@Override public boolean useOnRelease(ItemStack stack) { return true; }
@Override public void onUseTick(Level level, LivingEntity entity, ItemStack stack, int remaining) {
if (!level.isClientSide() && entity instanceof Player player) {
int ticks = EquipmentRules.BLADE_USE_DURATION - remaining;
if (ticks % 5 == 0) player.displayClientMessage(net.minecraft.network.chat.Component.translatable(
"message.mydimension_lord.blade.charge", (int)(100 * EquipmentRules.chargeFraction(ticks))), true);
if (ticks == EquipmentRules.BLADE_CHARGE_TICKS) level.playSound(null, player.blockPosition(),
net.minecraft.sounds.SoundEvents.AMETHYST_BLOCK_RESONATE, net.minecraft.sounds.SoundSource.PLAYERS, .65F, 1.5F);
}
}
@Override public void releaseUsing(ItemStack stack, Level level, LivingEntity entity, int remaining) {
boolean released = entity instanceof Player player && player.getUsedItemHand() == InteractionHand.MAIN_HAND
&& player.getMainHandItem() == stack && !EquipmentCombat.cooling(player, stack);
if (released && !level.isClientSide()) {
Player player = (Player)entity;
EquipmentPowers.slash(player, stack, InteractionHand.MAIN_HAND, EquipmentRules.BLADE_USE_DURATION - remaining);
player.displayClientMessage(net.minecraft.network.chat.Component.empty(), true);
}
}
}
package com.xfestudio.mydimensionlord.item;
import com.xfestudio.mydimensionlord.equipment.EquipmentPowers;
import com.xfestudio.mydimensionlord.equipment.EquipmentRules;
import com.xfestudio.mydimensionlord.platform.EquipmentCombat;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.*;
import net.minecraft.world.level.Level;
public final class DimensionBladeItem extends SwordItem {
@Override public void initializeClient(java.util.function.Consumer<net.minecraftforge.client.extensions.common.IClientItemExtensions> consumer) {
com.xfestudio.mydimensionlord.client.gear.EquipmentClientExtensions.initialize(consumer);
}
public DimensionBladeItem(Tier tier, Item.Properties properties) { super(tier, properties.attributes(SwordItem.createAttributes(tier, EquipmentRules.BLADE_ATTACK_BONUS, -2.6F))); }
@Override public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
if (hand != InteractionHand.MAIN_HAND) return super.use(level, player, hand);
ItemStack stack = player.getItemInHand(hand);
if (EquipmentCombat.cooling(player, stack)) return InteractionResultHolder.fail(stack);
player.startUsingItem(hand);
return InteractionResultHolder.consume(stack);
}
@Override public int getUseDuration(ItemStack stack, LivingEntity entity) { return EquipmentRules.BLADE_USE_DURATION; }
@Override public UseAnim getUseAnimation(ItemStack stack) { return UseAnim.NONE; }
@Override public boolean useOnRelease(ItemStack stack) { return true; }
@Override public void onUseTick(Level level, LivingEntity entity, ItemStack stack, int remaining) {
if (!level.isClientSide() && entity instanceof Player player) {
int ticks = EquipmentRules.BLADE_USE_DURATION - remaining;
if (ticks % 5 == 0) player.displayClientMessage(net.minecraft.network.chat.Component.translatable(
"message.mydimension_lord.blade.charge", (int)(100 * EquipmentRules.chargeFraction(ticks))), true);
if (ticks == EquipmentRules.BLADE_CHARGE_TICKS) level.playSound(null, player.blockPosition(),
net.minecraft.sounds.SoundEvents.AMETHYST_BLOCK_RESONATE, net.minecraft.sounds.SoundSource.PLAYERS, .65F, 1.5F);
}
}
@Override public void releaseUsing(ItemStack stack, Level level, LivingEntity entity, int remaining) {
boolean released = entity instanceof Player player && player.getUsedItemHand() == InteractionHand.MAIN_HAND
&& player.getMainHandItem() == stack && !EquipmentCombat.cooling(player, stack);
if (released && !level.isClientSide()) {
Player player = (Player)entity;
EquipmentPowers.slash(player, stack, InteractionHand.MAIN_HAND, EquipmentRules.BLADE_USE_DURATION - remaining);
player.displayClientMessage(net.minecraft.network.chat.Component.empty(), true);
}
}
}