Make hammer deal actual damage when attacking mobs and make it not spammable
This commit is contained in:
parent
2feb540076
commit
d0ffa85647
@ -5,6 +5,7 @@ package ru.dbotthepony.mc.otm.core
|
||||
|
||||
import com.google.common.collect.ImmutableList
|
||||
import com.google.common.collect.ImmutableMap
|
||||
import com.google.common.collect.ImmutableMultimap
|
||||
import com.google.common.collect.ImmutableSet
|
||||
import com.google.gson.JsonElement
|
||||
import com.google.gson.JsonObject
|
||||
@ -151,6 +152,12 @@ inline fun <K : Any, V : Any> immutableMap(initializer: ImmutableMap.Builder<K,
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
inline fun <K : Any, V : Any> immutableMultimap(initializer: ImmutableMultimap.Builder<K, V>.() -> Unit): ImmutableMultimap<K, V> {
|
||||
val builder = ImmutableMultimap.Builder<K, V>()
|
||||
initializer.invoke(builder)
|
||||
return builder.build()
|
||||
}
|
||||
|
||||
inline fun <V : Any> immutableSet(initializer: Consumer<V>.() -> Unit): ImmutableSet<V> {
|
||||
val builder = ImmutableSet.Builder<V>()
|
||||
initializer.invoke(builder::add)
|
||||
|
@ -1,5 +1,7 @@
|
||||
package ru.dbotthepony.mc.otm.item.tool
|
||||
|
||||
import com.google.common.collect.ImmutableMultimap
|
||||
import com.google.common.collect.Multimap
|
||||
import it.unimi.dsi.fastutil.objects.ObjectArraySet
|
||||
import net.minecraft.ChatFormatting
|
||||
import net.minecraft.core.BlockPos
|
||||
@ -9,7 +11,11 @@ import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.InteractionHand
|
||||
import net.minecraft.world.damagesource.DamageSource
|
||||
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.entity.item.ItemEntity
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.Item
|
||||
@ -23,12 +29,15 @@ import net.minecraftforge.common.MinecraftForge
|
||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent
|
||||
import net.minecraftforge.event.level.BlockEvent
|
||||
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
|
||||
import ru.dbotthepony.mc.otm.capability.matteryEnergy
|
||||
import ru.dbotthepony.mc.otm.config.ItemsConfig
|
||||
import ru.dbotthepony.mc.otm.config.ToolsConfig
|
||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||
import ru.dbotthepony.mc.otm.core.damageType
|
||||
import ru.dbotthepony.mc.otm.core.getExplosionResistance
|
||||
import ru.dbotthepony.mc.otm.core.gracefulBlockBreak
|
||||
import ru.dbotthepony.mc.otm.core.immutableMap
|
||||
import ru.dbotthepony.mc.otm.core.immutableMultimap
|
||||
import ru.dbotthepony.mc.otm.core.isExplosion
|
||||
import ru.dbotthepony.mc.otm.core.math.component1
|
||||
import ru.dbotthepony.mc.otm.core.math.component2
|
||||
@ -39,12 +48,13 @@ import ru.dbotthepony.mc.otm.core.math.toDoubleVector
|
||||
import ru.dbotthepony.mc.otm.core.nbt.set
|
||||
import ru.dbotthepony.mc.otm.core.position
|
||||
import ru.dbotthepony.mc.otm.core.tagNotNull
|
||||
import ru.dbotthepony.mc.otm.item.weapon.EnergySwordItem
|
||||
import ru.dbotthepony.mc.otm.registry.MDamageTypes
|
||||
import ru.dbotthepony.mc.otm.registry.MRegistry
|
||||
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
|
||||
import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger
|
||||
|
||||
class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).fireResistant().durability(durability)) {
|
||||
class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1).fireResistant().durability(durability)) {
|
||||
override fun canBeHurtBy(pDamageSource: DamageSource): Boolean {
|
||||
return super.canBeHurtBy(pDamageSource) && !pDamageSource.isExplosion
|
||||
}
|
||||
@ -64,8 +74,24 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
|
||||
private val aabb = AABB(-0.1, -0.1, -0.1, 0.1, 0.1, 0.1)
|
||||
|
||||
val attributes = immutableMultimap {
|
||||
put(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", 3.0, AttributeModifier.Operation.ADDITION))
|
||||
put(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", -3.4, AttributeModifier.Operation.ADDITION))
|
||||
}
|
||||
|
||||
override fun getAttributeModifiers(
|
||||
slot: EquipmentSlot,
|
||||
itemStack: ItemStack
|
||||
): Multimap<Attribute, AttributeModifier> {
|
||||
if (slot != EquipmentSlot.MAINHAND) {
|
||||
return ImmutableMultimap.of()
|
||||
}
|
||||
|
||||
return attributes
|
||||
}
|
||||
|
||||
fun attackAt(itemStack: ItemStack, attacker: LivingEntity, pos: Vec3, aim: Vec3, hand: InteractionHand) {
|
||||
if (!isPrimed(itemStack) || attacker.level.isClientSide)
|
||||
if (!isPrimed(itemStack) || attacker.level.isClientSide || attacker is Player && attacker.getAttackStrengthScale(0.4f) < 0.98f)
|
||||
return
|
||||
|
||||
val (ex, ey, ez) = pos
|
||||
@ -149,7 +175,7 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
|
||||
val copy = itemStack.copy()
|
||||
|
||||
itemStack.hurtAndBreak(1, attacker) {
|
||||
itemStack.hurtAndBreak(level.random.nextInt(1, 20), attacker) {
|
||||
it.broadcastBreakEvent(hand)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user