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.ImmutableList
|
||||||
import com.google.common.collect.ImmutableMap
|
import com.google.common.collect.ImmutableMap
|
||||||
|
import com.google.common.collect.ImmutableMultimap
|
||||||
import com.google.common.collect.ImmutableSet
|
import com.google.common.collect.ImmutableSet
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
@ -151,6 +152,12 @@ inline fun <K : Any, V : Any> immutableMap(initializer: ImmutableMap.Builder<K,
|
|||||||
return builder.build()
|
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> {
|
inline fun <V : Any> immutableSet(initializer: Consumer<V>.() -> Unit): ImmutableSet<V> {
|
||||||
val builder = ImmutableSet.Builder<V>()
|
val builder = ImmutableSet.Builder<V>()
|
||||||
initializer.invoke(builder::add)
|
initializer.invoke(builder::add)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package ru.dbotthepony.mc.otm.item.tool
|
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 it.unimi.dsi.fastutil.objects.ObjectArraySet
|
||||||
import net.minecraft.ChatFormatting
|
import net.minecraft.ChatFormatting
|
||||||
import net.minecraft.core.BlockPos
|
import net.minecraft.core.BlockPos
|
||||||
@ -9,7 +11,11 @@ import net.minecraft.server.level.ServerLevel
|
|||||||
import net.minecraft.server.level.ServerPlayer
|
import net.minecraft.server.level.ServerPlayer
|
||||||
import net.minecraft.world.InteractionHand
|
import net.minecraft.world.InteractionHand
|
||||||
import net.minecraft.world.damagesource.DamageSource
|
import net.minecraft.world.damagesource.DamageSource
|
||||||
|
import net.minecraft.world.entity.EquipmentSlot
|
||||||
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.Attributes
|
||||||
import net.minecraft.world.entity.item.ItemEntity
|
import net.minecraft.world.entity.item.ItemEntity
|
||||||
import net.minecraft.world.entity.player.Player
|
import net.minecraft.world.entity.player.Player
|
||||||
import net.minecraft.world.item.Item
|
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.entity.player.PlayerInteractEvent
|
||||||
import net.minecraftforge.event.level.BlockEvent
|
import net.minecraftforge.event.level.BlockEvent
|
||||||
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
|
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.ItemsConfig
|
||||||
import ru.dbotthepony.mc.otm.config.ToolsConfig
|
import ru.dbotthepony.mc.otm.config.ToolsConfig
|
||||||
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
import ru.dbotthepony.mc.otm.core.TranslatableComponent
|
||||||
import ru.dbotthepony.mc.otm.core.damageType
|
import ru.dbotthepony.mc.otm.core.damageType
|
||||||
import ru.dbotthepony.mc.otm.core.getExplosionResistance
|
import ru.dbotthepony.mc.otm.core.getExplosionResistance
|
||||||
import ru.dbotthepony.mc.otm.core.gracefulBlockBreak
|
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.isExplosion
|
||||||
import ru.dbotthepony.mc.otm.core.math.component1
|
import ru.dbotthepony.mc.otm.core.math.component1
|
||||||
import ru.dbotthepony.mc.otm.core.math.component2
|
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.nbt.set
|
||||||
import ru.dbotthepony.mc.otm.core.position
|
import ru.dbotthepony.mc.otm.core.position
|
||||||
import ru.dbotthepony.mc.otm.core.tagNotNull
|
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.MDamageTypes
|
||||||
import ru.dbotthepony.mc.otm.registry.MRegistry
|
import ru.dbotthepony.mc.otm.registry.MRegistry
|
||||||
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
|
import ru.dbotthepony.mc.otm.registry.MatteryDamageSource
|
||||||
import ru.dbotthepony.mc.otm.triggers.NailedEntityTrigger
|
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 {
|
override fun canBeHurtBy(pDamageSource: DamageSource): Boolean {
|
||||||
return super.canBeHurtBy(pDamageSource) && !pDamageSource.isExplosion
|
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)
|
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) {
|
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
|
return
|
||||||
|
|
||||||
val (ex, ey, ez) = pos
|
val (ex, ey, ez) = pos
|
||||||
@ -149,7 +175,7 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
|||||||
|
|
||||||
val copy = itemStack.copy()
|
val copy = itemStack.copy()
|
||||||
|
|
||||||
itemStack.hurtAndBreak(1, attacker) {
|
itemStack.hurtAndBreak(level.random.nextInt(1, 20), attacker) {
|
||||||
it.broadcastBreakEvent(hand)
|
it.broadcastBreakEvent(hand)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user