Move explosive hammer config to appropriate place
This commit is contained in:
parent
37a91c525e
commit
3e36725f9e
@ -98,76 +98,4 @@ object ItemsConfig : AbstractConfig("items") {
|
||||
|
||||
val FLUID_CAPSULE_CAPACITY: Int by builder.defineInRange("FLUID_CAPSULE_CAPACITY", 1000, 1, Int.MAX_VALUE)
|
||||
val FLUID_TANK_CAPACITY: Int by builder.defineInRange("FLUID_TANK_CAPACITY", 32_000, 1, Int.MAX_VALUE)
|
||||
|
||||
object ExplosiveHammer {
|
||||
val MAX_TRAVEL: Double by builder
|
||||
.comment("Max distance, in blocks, the nail can travel", "This also dictates potential max damage nail can deal (controlled by TRAVEL_DAMAGE_MULT)")
|
||||
.comment("The nail penetrate through blocks and entities, losing power in process")
|
||||
.comment("The nail can not travel into unloaded chunks and will stop immediately if it does so")
|
||||
.comment("The nail travels its entire path instantaneously")
|
||||
.defineInRange("MAX_TRAVEL", 48.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val TRAVEL_EXPLOSION_RESIST_MULT: Double by builder
|
||||
.comment("Multiplier of explosion resistance of blocks on nail path")
|
||||
.comment("If explosion resistance multiplied by this is bigger than nail current force (base of MAX_TRAVEL)")
|
||||
.comment("then nail movement halts, otherwise nail force is reduced by explosion resistance multiplied by this")
|
||||
.comment("and block is broken (if DAMAGE_BLOCKS is true, otherwise it only acts as stopping power)")
|
||||
.comment("---")
|
||||
.comment("Values over 1 will make blocks more resistant to be penetrated through (and broken)")
|
||||
.comment("Values below 1 will make blocks less resistant to be penetrated though (and broken)")
|
||||
.comment("Value of 0 means no matter how strong block resistance is, it will be broken by nail", "(this includes bedrock!!!)")
|
||||
.comment("---")
|
||||
.defineInRange("TRAVEL_EXPLOSION_RESIST_MULT", 1.75, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val TRAVEL_DAMAGE_MULT: Double by builder
|
||||
.comment("Multiplier of current nail force (base of MAX_TRAVEL) for damage values")
|
||||
.comment("That is, any being on path of nail will get damaged by nail power multiplied by this")
|
||||
.defineInRange("TRAVEL_DAMAGE_MULT", 0.6, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val TRAVEL_MAX_HEALTH_MULT: Double by builder
|
||||
.comment("Multiplier of being's max health in nail path subtracted from nail force when penetrating through")
|
||||
.defineInRange("TRAVEL_MAX_HEALTH_MULT", 0.4, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val DAMAGE_BLOCKS: Boolean by builder
|
||||
.comment("Should hammer (**not** explosion) damage blocks", "Blocks damaged this way will always be dropped")
|
||||
.define("DAMAGE_BLOCKS", true)
|
||||
|
||||
val EXPLOSION_DAMAGE_BLOCKS: Boolean by builder
|
||||
.comment("Should hammer **explosion** damage blocks")
|
||||
.define("EXPLOSION_DAMAGE_BLOCKS", false)
|
||||
|
||||
val FLY_OFF_CHANCE: Double by builder
|
||||
.comment("Chance that hammer will fly off hands of attacker upon impact")
|
||||
.defineInRange("FLY_OFF_CHANCE", 0.6, 0.0, 1.0)
|
||||
|
||||
val SELF_HARM_CHANCE: Double by builder
|
||||
.comment("When hammer DOES NOT fly off hands, what is chance of it damaging the user?", "(this does not account for damage because of hitting things close)", "(idiot)")
|
||||
.defineInRange("SELF_HARM_CHANCE", 0.4, 0.0, 1.0)
|
||||
|
||||
val SELF_HARM_MIN_DAMAGE: Double by builder
|
||||
.comment("When hammer DOES NOT fly off hands, what is minimal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("SELF_HARM_MIN_DAMAGE", 2.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val SELF_HARM_MAX_DAMAGE: Double by builder
|
||||
.comment("When hammer DOES NOT fly off hands, what is maximal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("SELF_HARM_MAX_DAMAGE", 10.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val FLY_OFF_DAMAGE_CHANCE: Double by builder
|
||||
.comment("When hammer flies off hands, what is chance of it damaging the user?")
|
||||
.defineInRange("FLY_OFF_DAMAGE_CHANCE", 0.8, 0.0, 1.0)
|
||||
|
||||
val FLY_OFF_MIN_DAMAGE: Double by builder
|
||||
.comment("When hammer flies off hands, what is minimal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("FLY_OFF_MIN_DAMAGE", 4.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val FLY_OFF_MAX_DAMAGE: Double by builder
|
||||
.comment("When hammer flies off hands, what is maximal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("FLY_OFF_MAX_DAMAGE", 25.0, 0.0, Double.MAX_VALUE)
|
||||
}
|
||||
|
||||
init {
|
||||
builder.push("ExplosiveHammer")
|
||||
ExplosiveHammer
|
||||
builder.pop()
|
||||
}
|
||||
}
|
||||
|
@ -8,4 +8,76 @@ object ToolsConfig : AbstractConfig("tools") {
|
||||
init {
|
||||
EnergySwordItem.registerConfig(builder)
|
||||
}
|
||||
|
||||
object ExplosiveHammer {
|
||||
val MAX_TRAVEL: Double by builder
|
||||
.comment("Max distance, in blocks, the nail can travel", "This also dictates potential max damage nail can deal (controlled by TRAVEL_DAMAGE_MULT)")
|
||||
.comment("The nail penetrate through blocks and entities, losing power in process")
|
||||
.comment("The nail can not travel into unloaded chunks and will stop immediately if it does so")
|
||||
.comment("The nail travels its entire path instantaneously")
|
||||
.defineInRange("MAX_TRAVEL", 48.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val TRAVEL_EXPLOSION_RESIST_MULT: Double by builder
|
||||
.comment("Multiplier of explosion resistance of blocks on nail path")
|
||||
.comment("If explosion resistance multiplied by this is bigger than nail current force (base of MAX_TRAVEL)")
|
||||
.comment("then nail movement halts, otherwise nail force is reduced by explosion resistance multiplied by this")
|
||||
.comment("and block is broken (if DAMAGE_BLOCKS is true, otherwise it only acts as stopping power)")
|
||||
.comment("---")
|
||||
.comment("Values over 1 will make blocks more resistant to be penetrated through (and broken)")
|
||||
.comment("Values below 1 will make blocks less resistant to be penetrated though (and broken)")
|
||||
.comment("Value of 0 means no matter how strong block resistance is, it will be broken by nail", "(this includes bedrock!!!)")
|
||||
.comment("---")
|
||||
.defineInRange("TRAVEL_EXPLOSION_RESIST_MULT", 1.75, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val TRAVEL_DAMAGE_MULT: Double by builder
|
||||
.comment("Multiplier of current nail force (base of MAX_TRAVEL) for damage values")
|
||||
.comment("That is, any being on path of nail will get damaged by nail power multiplied by this")
|
||||
.defineInRange("TRAVEL_DAMAGE_MULT", 0.6, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val TRAVEL_MAX_HEALTH_MULT: Double by builder
|
||||
.comment("Multiplier of being's max health in nail path subtracted from nail force when penetrating through")
|
||||
.defineInRange("TRAVEL_MAX_HEALTH_MULT", 0.4, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val DAMAGE_BLOCKS: Boolean by builder
|
||||
.comment("Should hammer (**not** explosion) damage blocks", "Blocks damaged this way will always be dropped")
|
||||
.define("DAMAGE_BLOCKS", true)
|
||||
|
||||
val EXPLOSION_DAMAGE_BLOCKS: Boolean by builder
|
||||
.comment("Should hammer **explosion** damage blocks")
|
||||
.define("EXPLOSION_DAMAGE_BLOCKS", false)
|
||||
|
||||
val FLY_OFF_CHANCE: Double by builder
|
||||
.comment("Chance that hammer will fly off hands of attacker upon impact")
|
||||
.defineInRange("FLY_OFF_CHANCE", 0.6, 0.0, 1.0)
|
||||
|
||||
val SELF_HARM_CHANCE: Double by builder
|
||||
.comment("When hammer DOES NOT fly off hands, what is chance of it damaging the user?", "(this does not account for damage because of hitting things close)", "(idiot)")
|
||||
.defineInRange("SELF_HARM_CHANCE", 0.4, 0.0, 1.0)
|
||||
|
||||
val SELF_HARM_MIN_DAMAGE: Double by builder
|
||||
.comment("When hammer DOES NOT fly off hands, what is minimal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("SELF_HARM_MIN_DAMAGE", 2.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val SELF_HARM_MAX_DAMAGE: Double by builder
|
||||
.comment("When hammer DOES NOT fly off hands, what is maximal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("SELF_HARM_MAX_DAMAGE", 10.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val FLY_OFF_DAMAGE_CHANCE: Double by builder
|
||||
.comment("When hammer flies off hands, what is chance of it damaging the user?")
|
||||
.defineInRange("FLY_OFF_DAMAGE_CHANCE", 0.8, 0.0, 1.0)
|
||||
|
||||
val FLY_OFF_MIN_DAMAGE: Double by builder
|
||||
.comment("When hammer flies off hands, what is minimal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("FLY_OFF_MIN_DAMAGE", 4.0, 0.0, Double.MAX_VALUE)
|
||||
|
||||
val FLY_OFF_MAX_DAMAGE: Double by builder
|
||||
.comment("When hammer flies off hands, what is maximal damage it deals to the user (in half of hearts)?")
|
||||
.defineInRange("FLY_OFF_MAX_DAMAGE", 25.0, 0.0, Double.MAX_VALUE)
|
||||
}
|
||||
|
||||
init {
|
||||
builder.push("ExplosiveHammer")
|
||||
ExplosiveHammer
|
||||
builder.pop()
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ 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.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
|
||||
@ -70,18 +71,18 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
val (ex, ey, ez) = pos
|
||||
|
||||
// взрыв в месте удара молотком
|
||||
val exp = Explosion(attacker.level, attacker, ex, ey, ez, 1f, false, if (ItemsConfig.ExplosiveHammer.EXPLOSION_DAMAGE_BLOCKS) Explosion.BlockInteraction.DESTROY_WITH_DECAY else Explosion.BlockInteraction.KEEP)
|
||||
val exp = Explosion(attacker.level, attacker, ex, ey, ez, 1f, false, if (ToolsConfig.ExplosiveHammer.EXPLOSION_DAMAGE_BLOCKS) Explosion.BlockInteraction.DESTROY_WITH_DECAY else Explosion.BlockInteraction.KEEP)
|
||||
exp.explode()
|
||||
exp.finalizeExplosion(true)
|
||||
|
||||
if (!ItemsConfig.ExplosiveHammer.EXPLOSION_DAMAGE_BLOCKS)
|
||||
if (!ToolsConfig.ExplosiveHammer.EXPLOSION_DAMAGE_BLOCKS)
|
||||
exp.clearToBlow()
|
||||
|
||||
val level = attacker.level as ServerLevel
|
||||
|
||||
val hitEntities = ObjectArraySet<LivingEntity>()
|
||||
hitEntities.add(attacker)
|
||||
var canTravel = ItemsConfig.ExplosiveHammer.MAX_TRAVEL
|
||||
var canTravel = ToolsConfig.ExplosiveHammer.MAX_TRAVEL
|
||||
var rayPos = pos
|
||||
var lastBlockPos: BlockPos? = null
|
||||
|
||||
@ -97,12 +98,12 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
val block = level.getBlockState(blockPos)
|
||||
|
||||
if (!block.isAir) {
|
||||
val resist = block.getExplosionResistance(level, blockPos) * ItemsConfig.ExplosiveHammer.TRAVEL_EXPLOSION_RESIST_MULT
|
||||
val resist = block.getExplosionResistance(level, blockPos) * ToolsConfig.ExplosiveHammer.TRAVEL_EXPLOSION_RESIST_MULT
|
||||
|
||||
if (resist >= 0.0) {
|
||||
if (resist <= canTravel) {
|
||||
canTravel -= resist
|
||||
val cond = ItemsConfig.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)))
|
||||
|
||||
if (cond) {
|
||||
@ -122,8 +123,8 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
val damageSource = MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.HAMMER_NAIL), attacker, itemStack)
|
||||
|
||||
for (it in entities) {
|
||||
val damage = canTravel * ItemsConfig.ExplosiveHammer.TRAVEL_DAMAGE_MULT
|
||||
canTravel -= it.maxHealth * ItemsConfig.ExplosiveHammer.TRAVEL_MAX_HEALTH_MULT
|
||||
val damage = canTravel * ToolsConfig.ExplosiveHammer.TRAVEL_DAMAGE_MULT
|
||||
canTravel -= it.maxHealth * ToolsConfig.ExplosiveHammer.TRAVEL_MAX_HEALTH_MULT
|
||||
|
||||
it.hurt(damageSource, damage.toFloat())
|
||||
|
||||
@ -152,7 +153,7 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
it.broadcastBreakEvent(hand)
|
||||
}
|
||||
|
||||
if (!itemStack.isEmpty && attacker.random.nextDouble() <= ItemsConfig.ExplosiveHammer.FLY_OFF_CHANCE) {
|
||||
if (!itemStack.isEmpty && attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.FLY_OFF_CHANCE) {
|
||||
attacker.setItemInHand(hand, ItemStack.EMPTY)
|
||||
|
||||
val (x, y, z) = attacker.position
|
||||
@ -168,14 +169,14 @@ class ExplosiveHammerItem(durability: Int = 64) : Item(Properties().stacksTo(1).
|
||||
|
||||
attacker.level.addFreshEntity(entity)
|
||||
|
||||
if (attacker.random.nextDouble() <= ItemsConfig.ExplosiveHammer.FLY_OFF_DAMAGE_CHANCE) {
|
||||
if (attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.FLY_OFF_DAMAGE_CHANCE) {
|
||||
attacker.invulnerableTime = 0
|
||||
val dmg = ItemsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE + attacker.random.nextDouble() * (ItemsConfig.ExplosiveHammer.FLY_OFF_MAX_DAMAGE - ItemsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE)
|
||||
val dmg = ToolsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE + attacker.random.nextDouble() * (ToolsConfig.ExplosiveHammer.FLY_OFF_MAX_DAMAGE - ToolsConfig.ExplosiveHammer.FLY_OFF_MIN_DAMAGE)
|
||||
attacker.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXPLOSIVE_HAMMER), inflictor = copy), dmg.toFloat())
|
||||
}
|
||||
} else if (attacker.random.nextDouble() <= ItemsConfig.ExplosiveHammer.SELF_HARM_CHANCE) {
|
||||
} else if (attacker.random.nextDouble() <= ToolsConfig.ExplosiveHammer.SELF_HARM_CHANCE) {
|
||||
attacker.invulnerableTime = 0
|
||||
val dmg = ItemsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE + attacker.random.nextDouble() * (ItemsConfig.ExplosiveHammer.SELF_HARM_MAX_DAMAGE - ItemsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE)
|
||||
val dmg = ToolsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE + attacker.random.nextDouble() * (ToolsConfig.ExplosiveHammer.SELF_HARM_MAX_DAMAGE - ToolsConfig.ExplosiveHammer.SELF_HARM_MIN_DAMAGE)
|
||||
attacker.hurt(MatteryDamageSource(level.registryAccess().damageType(MDamageTypes.EXPLOSIVE_HAMMER), inflictor = copy), dmg.toFloat())
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user