Update explosive hammer

This commit is contained in:
DBotThePony 2024-08-14 21:53:29 +07:00
parent 192b26e8ab
commit aaecbf8ae5
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 26 additions and 23 deletions

View File

@ -31,6 +31,7 @@ import net.minecraft.tags.TagKey
import net.minecraft.world.entity.Entity import net.minecraft.world.entity.Entity
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.component.ItemAttributeModifiers
import net.minecraft.world.item.crafting.CraftingInput import net.minecraft.world.item.crafting.CraftingInput
import net.minecraft.world.item.crafting.RecipeInput import net.minecraft.world.item.crafting.RecipeInput
import net.minecraft.world.level.BlockGetter import net.minecraft.world.level.BlockGetter
@ -200,6 +201,12 @@ fun <V : Any> immutableList(a: V, vararg values: V): ImmutableList<V> {
return builder.build() return builder.build()
} }
inline fun itemAttributes(builder: ItemAttributeModifiers.Builder.() -> Unit): ItemAttributeModifiers {
val value = ItemAttributeModifiers.builder()
builder(value)
return value.build()
}
fun FriendlyByteBuf.writeItemType(value: Item) { fun FriendlyByteBuf.writeItemType(value: Item) {
writeInt(BuiltInRegistries.ITEM.getId(value)) writeInt(BuiltInRegistries.ITEM.getId(value))
} }

View File

@ -5,6 +5,7 @@ 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
import net.minecraft.core.particles.ParticleTypes
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import net.minecraft.network.protocol.game.ClientboundExplodePacket import net.minecraft.network.protocol.game.ClientboundExplodePacket
import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerLevel
@ -15,6 +16,7 @@ import net.minecraft.world.InteractionHand
import net.minecraft.world.InteractionResultHolder import net.minecraft.world.InteractionResultHolder
import net.minecraft.world.damagesource.DamageSource import net.minecraft.world.damagesource.DamageSource
import net.minecraft.world.entity.EquipmentSlot 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.Attribute
import net.minecraft.world.entity.ai.attributes.AttributeModifier import net.minecraft.world.entity.ai.attributes.AttributeModifier
@ -31,9 +33,12 @@ import net.minecraft.world.level.Level
import net.minecraft.world.phys.AABB import net.minecraft.world.phys.AABB
import net.minecraft.world.phys.Vec3 import net.minecraft.world.phys.Vec3
import net.neoforged.neoforge.common.CommonHooks import net.neoforged.neoforge.common.CommonHooks
import net.neoforged.neoforge.common.NeoForge
import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.Tags
import net.neoforged.neoforge.event.EventHooks import net.neoforged.neoforge.event.EventHooks
import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent
import net.neoforged.neoforge.event.level.BlockEvent
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity import ru.dbotthepony.mc.otm.block.entity.MatteryBlockEntity
import ru.dbotthepony.mc.otm.config.ToolsConfig import ru.dbotthepony.mc.otm.config.ToolsConfig
import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.*
@ -70,9 +75,9 @@ class ExplosiveHammerItem(durability: Int = 512) : 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 { private val attributes = itemAttributes {
put(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", 3.0, AttributeModifier.Operation.ADDITION)) add(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_ID, 3.0, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
put(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_UUID, "Weapon modifier", -3.4, AttributeModifier.Operation.ADDITION)) add(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_ID, -3.4, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
} }
override fun hasCraftingRemainingItem(itemStack: ItemStack): Boolean = true override fun hasCraftingRemainingItem(itemStack: ItemStack): Boolean = true
@ -82,11 +87,11 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
if (player.level().isClientSide) return itemStack.copy() if (player.level().isClientSide) return itemStack.copy()
if (!isPrimed(itemStack)) { if (!isPrimed(itemStack)) {
itemStack.hurtAndBreak(1, player) {} itemStack.hurtAndBreak(1, player.level() as ServerLevel, player) {}
} else { } else {
val level = player.level() as ServerLevel val level = player.level() as ServerLevel
itemStack.hurtAndBreak(level.random.nextInt(1, 20), player) {} itemStack.hurtAndBreak(level.random.nextInt(1, 20), player.level() as ServerLevel, player) {}
unprime(itemStack) unprime(itemStack)
val (ex, ey, ez) = Vector.atCenterOf(player.blockPosition()) val (ex, ey, ez) = Vector.atCenterOf(player.blockPosition())
@ -101,7 +106,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
MatteryBlockEntity.watchingPlayers(player.position(), level) MatteryBlockEntity.watchingPlayers(player.position(), level)
.filter { it.position.distanceTo(player.position()) <= 64.0 } .filter { it.position.distanceTo(player.position()) <= 64.0 }
.forEach { .forEach {
it.connection.send(ClientboundExplodePacket(ex, ey, ez, 1f, exp.toBlow, exp.hitPlayers[it])) it.connection.send(ClientboundExplodePacket(ex, ey, ez, 1f, exp.toBlow, exp.hitPlayers[it], Explosion.BlockInteraction.DESTROY, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE))
} }
if (!player.isCreative) { if (!player.isCreative) {
@ -139,14 +144,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
return itemStack.copy() return itemStack.copy()
} }
override fun getAttributeModifiers( override fun getDefaultAttributeModifiers(stack: ItemStack): ItemAttributeModifiers {
slot: EquipmentSlot,
itemStack: ItemStack
): Multimap<Attribute, AttributeModifier> {
if (slot != EquipmentSlot.MAINHAND) {
return ImmutableMultimap.of()
}
return attributes return attributes
} }
@ -190,7 +188,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
if (resist <= canTravel) { if (resist <= canTravel) {
canTravel -= resist canTravel -= resist
val cond = ToolsConfig.ExplosiveHammer.DAMAGE_BLOCKS && val cond = ToolsConfig.ExplosiveHammer.DAMAGE_BLOCKS &&
(attacker !is Player || level.mayInteract(attacker, blockPos) && !MinecraftForge.EVENT_BUS.post(BlockEvent.BreakEvent(level, blockPos, block, attacker))) (attacker !is Player || level.mayInteract(attacker, blockPos) && !NeoForge.EVENT_BUS.post(BlockEvent.BreakEvent(level, blockPos, block, attacker)).isCanceled)
if (cond) { if (cond) {
level.gracefulBlockBreak(blockPos, block) level.gracefulBlockBreak(blockPos, block)
@ -227,7 +225,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
MatteryBlockEntity.watchingPlayers(pos, level) MatteryBlockEntity.watchingPlayers(pos, level)
.filter { it.position.distanceTo(pos) <= 64.0 } .filter { it.position.distanceTo(pos) <= 64.0 }
.forEach { .forEach {
it.connection.send(ClientboundExplodePacket(ex, ey, ez, 1f, exp.toBlow, exp.hitPlayers[it])) it.connection.send(ClientboundExplodePacket(ex, ey, ez, 1f, exp.toBlow, exp.hitPlayers[it], Explosion.BlockInteraction.DESTROY, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE))
} }
if (attacker !is Player || !attacker.isCreative) { if (attacker !is Player || !attacker.isCreative) {
@ -318,7 +316,7 @@ class ExplosiveHammerItem(durability: Int = 512) : Item(Properties().stacksTo(1)
prime(stack) prime(stack)
} }
level.playSound(entity, entity.blockPosition(), SoundEvents.CROSSBOW_LOADING_END, SoundSource.PLAYERS, 1.0F, 1.0F) level.playSound(entity, entity.blockPosition(), SoundEvents.CROSSBOW_LOADING_END.value(), SoundSource.PLAYERS, 1.0F, 1.0F)
} }
return super.finishUsingItem(stack, level, entity) return super.finishUsingItem(stack, level, entity)

View File

@ -46,14 +46,14 @@ class EnergySwordItem : MatteryItem(Properties().stacksTo(1).rarity(Rarity.RARE)
init { init {
var builder = ItemAttributeModifiers.builder() var builder = ItemAttributeModifiers.builder()
builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(MODIFIER_ID, 11.0, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND) builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_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) builder.add(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_ID, -2.4, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
chargedAttributes = builder.build() chargedAttributes = builder.build()
builder = ItemAttributeModifiers.builder() builder = ItemAttributeModifiers.builder()
builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(MODIFIER_ID, 3.5, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND) builder.add(Attributes.ATTACK_DAMAGE, AttributeModifier(BASE_ATTACK_DAMAGE_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.add(Attributes.ATTACK_SPEED, AttributeModifier(BASE_ATTACK_SPEED_ID, -2.4, AttributeModifier.Operation.ADD_VALUE), EquipmentSlotGroup.MAINHAND)
dischargedAttributes = builder.build() dischargedAttributes = builder.build()
} }
@ -199,8 +199,6 @@ 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")