Update energy sword
This commit is contained in:
parent
4cb3acf126
commit
192b26e8ab
@ -1,27 +1,24 @@
|
||||
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.Holder
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
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.ai.attributes.Attribute
|
||||
import net.minecraft.world.entity.ai.attributes.AttributeModifier
|
||||
import net.minecraft.world.entity.ai.attributes.Attributes
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Rarity
|
||||
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.block.Blocks
|
||||
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 ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||
import ru.dbotthepony.mc.otm.capability.energy.EnergyConsumerItem
|
||||
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.matteryEnergy
|
||||
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.math.Decimal
|
||||
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.item.MatteryItem
|
||||
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.MatteryDamageSource
|
||||
|
||||
class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)) {
|
||||
val chargedAttributes: ItemAttributeModifiers
|
||||
val dischargedAttributes: ItemAttributeModifiers
|
||||
class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)), CapabilitiesRegisterListener {
|
||||
private val chargedAttributes: ItemAttributeModifiers
|
||||
private val dischargedAttributes: ItemAttributeModifiers
|
||||
|
||||
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.put(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", -2.4, AttributeModifier.Operation.ADDITION))
|
||||
builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(MODIFIER_ID, 11.0, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
|
||||
builder.add(Attributes.ATTACK_SPEED, AttributeModifier(MODIFIER_ID, -2.4, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
|
||||
|
||||
chargedAttributes = builder.build()
|
||||
builder = ItemAttributeModifiers.builder()
|
||||
|
||||
builder = ImmutableMultimap.builder()
|
||||
|
||||
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))
|
||||
|
||||
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)
|
||||
dischargedAttributes = builder.build()
|
||||
}
|
||||
|
||||
@ -64,10 +61,6 @@ class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)
|
||||
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 {
|
||||
return 12
|
||||
}
|
||||
@ -160,34 +153,26 @@ class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun initCapabilities(stack: ItemStack, nbt: CompoundTag?): ICapabilityProvider {
|
||||
return EnergyConsumerItem(stack, MAX_ENERGY)
|
||||
private fun cap(stack: ItemStack) = 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 {
|
||||
return super.getDefaultAttributeModifiers(stack)
|
||||
}
|
||||
val energy = cap(stack)
|
||||
|
||||
override fun getAttributeModifiers(
|
||||
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) {
|
||||
if (energy.batteryLevel >= ENERGY_PER_SWING) {
|
||||
return chargedAttributes
|
||||
}
|
||||
|
||||
return dischargedAttributes
|
||||
}
|
||||
|
||||
override fun canPerformAction(stack: ItemStack, toolAction: ToolAction): Boolean {
|
||||
if (stack.matteryEnergy?.extractEnergyExact(ENERGY_PER_SWING, true) == true) {
|
||||
return ToolActions.DEFAULT_SWORD_ACTIONS.contains(toolAction)
|
||||
override fun canPerformAction(stack: ItemStack, toolAction: ItemAbility): Boolean {
|
||||
if (cap(stack).extractEnergyExact(ENERGY_PER_SWING, true)) {
|
||||
return ItemAbilities.DEFAULT_SWORD_ACTIONS.contains(toolAction)
|
||||
}
|
||||
|
||||
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_VARIANCE: DecimalConfigValue by WriteOnce()
|
||||
|
||||
private val MODIFIER_ID = ResourceLocation(OverdriveThatMatters.MOD_ID, "energy_sword")
|
||||
|
||||
fun registerConfig(builder: ModConfigSpec.Builder) {
|
||||
builder.comment("Energy sword values").push("EnergySword")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user