Update energy sword

This commit is contained in:
DBotThePony 2024-08-14 20:08:58 +07:00
parent 4cb3acf126
commit 192b26e8ab
Signed by: DBot
GPG Key ID: DCC23B5715498507

View File

@ -1,27 +1,24 @@
package ru.dbotthepony.mc.otm.item.weapon package ru.dbotthepony.mc.otm.item.weapon
import com.google.common.collect.ImmutableMultimap
import com.google.common.collect.Multimap
import net.minecraft.core.BlockPos import net.minecraft.core.BlockPos
import net.minecraft.core.Holder
import net.minecraft.nbt.CompoundTag
import net.minecraft.tags.BlockTags import net.minecraft.tags.BlockTags
import net.minecraft.world.entity.EquipmentSlot import net.minecraft.world.entity.EquipmentSlotGroup
import net.minecraft.world.entity.LivingEntity 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.AttributeModifier
import net.minecraft.world.entity.ai.attributes.Attributes import net.minecraft.world.entity.ai.attributes.Attributes
import net.minecraft.world.entity.player.Player import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Rarity import net.minecraft.world.item.Rarity
import net.minecraft.world.item.component.ItemAttributeModifiers import net.minecraft.world.item.component.ItemAttributeModifiers
import net.minecraft.world.item.enchantment.Enchantment
import net.minecraft.world.item.enchantment.EnchantmentCategory
import net.minecraft.world.item.enchantment.Enchantments
import net.minecraft.world.level.Level import net.minecraft.world.level.Level
import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.Blocks
import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.level.block.state.BlockState
import net.neoforged.neoforge.capabilities.Capabilities
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent
import net.neoforged.neoforge.common.ItemAbilities
import net.neoforged.neoforge.common.ItemAbility
import net.neoforged.neoforge.common.ModConfigSpec import net.neoforged.neoforge.common.ModConfigSpec
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.energy.EnergyConsumerItem import ru.dbotthepony.mc.otm.capability.energy.EnergyConsumerItem
import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact import ru.dbotthepony.mc.otm.capability.energy.extractEnergyExact
@ -29,6 +26,7 @@ import ru.dbotthepony.mc.otm.capability.energy.getBarColor
import ru.dbotthepony.mc.otm.capability.energy.getBarWidth import ru.dbotthepony.mc.otm.capability.energy.getBarWidth
import ru.dbotthepony.mc.otm.capability.matteryEnergy import ru.dbotthepony.mc.otm.capability.matteryEnergy
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.core.ResourceLocation
import ru.dbotthepony.mc.otm.core.damageType import ru.dbotthepony.mc.otm.core.damageType
import ru.dbotthepony.mc.otm.core.math.Decimal import ru.dbotthepony.mc.otm.core.math.Decimal
import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue import ru.dbotthepony.mc.otm.core.math.DecimalConfigValue
@ -37,26 +35,25 @@ import ru.dbotthepony.mc.otm.core.math.nextVariance
import ru.dbotthepony.mc.otm.core.util.WriteOnce import ru.dbotthepony.mc.otm.core.util.WriteOnce
import ru.dbotthepony.mc.otm.item.MatteryItem import ru.dbotthepony.mc.otm.item.MatteryItem
import ru.dbotthepony.mc.otm.item.addSimpleDescription import ru.dbotthepony.mc.otm.item.addSimpleDescription
import ru.dbotthepony.mc.otm.registry.CapabilitiesRegisterListener
import ru.dbotthepony.mc.otm.registry.MDamageTypes import ru.dbotthepony.mc.otm.registry.MDamageTypes
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)) { class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)), CapabilitiesRegisterListener {
val chargedAttributes: ItemAttributeModifiers private val chargedAttributes: ItemAttributeModifiers
val dischargedAttributes: ItemAttributeModifiers private val dischargedAttributes: ItemAttributeModifiers
init { init {
var builder = ImmutableMultimap.builder<Holder<Attribute>, AttributeModifier>() var builder = ItemAttributeModifiers.builder()
builder.put(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", 11.0, AttributeModifier.Operation.ADDITION)) builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(MODIFIER_ID, 11.0, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
builder.put(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", -2.4, AttributeModifier.Operation.ADDITION)) builder.add(Attributes.ATTACK_SPEED, AttributeModifier(MODIFIER_ID, -2.4, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
chargedAttributes = builder.build() chargedAttributes = builder.build()
builder = ItemAttributeModifiers.builder()
builder = ImmutableMultimap.builder() builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(MODIFIER_ID, 3.5, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
builder.add(Attributes.ATTACK_SPEED, AttributeModifier(MODIFIER_ID, -2.4, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
builder.put(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", 3.5, AttributeModifier.Operation.ADDITION))
builder.put(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", -2.4, AttributeModifier.Operation.ADDITION))
dischargedAttributes = builder.build() dischargedAttributes = builder.build()
} }
@ -64,10 +61,6 @@ class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)
return p_41456_.count == 1 return p_41456_.count == 1
} }
override fun canApplyAtEnchantingTable(stack: ItemStack, enchantment: Enchantment): Boolean {
return enchantment.category == EnchantmentCategory.WEAPON && enchantment != Enchantments.SWEEPING_EDGE
}
override fun getEnchantmentValue(stack: ItemStack): Int { override fun getEnchantmentValue(stack: ItemStack): Int {
return 12 return 12
} }
@ -160,34 +153,26 @@ class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)
return true return true
} }
override fun initCapabilities(stack: ItemStack, nbt: CompoundTag?): ICapabilityProvider { private fun cap(stack: ItemStack) = EnergyConsumerItem(stack, MAX_ENERGY)
return EnergyConsumerItem(stack, MAX_ENERGY)
override fun registerCapabilities(event: RegisterCapabilitiesEvent) {
event.registerItem(MatteryCapability.ITEM_ENERGY, { o, _ -> cap(o) }, this)
event.registerItem(Capabilities.EnergyStorage.ITEM, { o, _ -> cap(o) }, this)
} }
override fun getDefaultAttributeModifiers(stack: ItemStack): ItemAttributeModifiers { override fun getDefaultAttributeModifiers(stack: ItemStack): ItemAttributeModifiers {
return super.getDefaultAttributeModifiers(stack) val energy = cap(stack)
}
override fun getAttributeModifiers( if (energy.batteryLevel >= ENERGY_PER_SWING) {
slot: EquipmentSlot,
itemStack: ItemStack
): Multimap<Attribute, AttributeModifier> {
if (slot != EquipmentSlot.MAINHAND) {
return ImmutableMultimap.of()
}
val energy = itemStack.matteryEnergy
if (energy != null && energy.batteryLevel >= ENERGY_PER_SWING) {
return chargedAttributes return chargedAttributes
} }
return dischargedAttributes return dischargedAttributes
} }
override fun canPerformAction(stack: ItemStack, toolAction: ToolAction): Boolean { override fun canPerformAction(stack: ItemStack, toolAction: ItemAbility): Boolean {
if (stack.matteryEnergy?.extractEnergyExact(ENERGY_PER_SWING, true) == true) { if (cap(stack).extractEnergyExact(ENERGY_PER_SWING, true)) {
return ToolActions.DEFAULT_SWORD_ACTIONS.contains(toolAction) return ItemAbilities.DEFAULT_SWORD_ACTIONS.contains(toolAction)
} }
return false return false
@ -214,6 +199,8 @@ class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)
private var _PLANT_POWER_COST: DecimalConfigValue by WriteOnce() private var _PLANT_POWER_COST: DecimalConfigValue by WriteOnce()
private var _PLANT_POWER_COST_VARIANCE: DecimalConfigValue by WriteOnce() private var _PLANT_POWER_COST_VARIANCE: DecimalConfigValue by WriteOnce()
private val MODIFIER_ID = ResourceLocation(OverdriveThatMatters.MOD_ID, "energy_sword")
fun registerConfig(builder: ModConfigSpec.Builder) { fun registerConfig(builder: ModConfigSpec.Builder) {
builder.comment("Energy sword values").push("EnergySword") builder.comment("Energy sword values").push("EnergySword")