mirror of
https://github.com/chylex/Hardcore-Ender-Expansion-2.git
synced 2025-04-14 12:15:44 +02:00
Allow resetting dimension instability action multiplier & tweak naming
This commit is contained in:
parent
48d53d1e7d
commit
50c2518f91
src/main/java/chylex/hee/game/mechanics/instability/dimension
@ -20,6 +20,10 @@ class DimensionInstabilityEndTerritory(private val world: World) : IDimensionIns
|
||||
return territories[key] ?: putEntry(key)
|
||||
}
|
||||
|
||||
override fun resetActionMultiplier(pos: BlockPos){
|
||||
getEntry(pos).resetActionMultiplier(pos)
|
||||
}
|
||||
|
||||
override fun triggerAction(amount: UShort, pos: BlockPos){
|
||||
getEntry(pos).triggerAction(amount, pos)
|
||||
}
|
||||
|
@ -11,13 +11,15 @@ import kotlin.math.pow
|
||||
|
||||
open class DimensionInstabilityGlobal(private val world: World, private val endermiteSpawnLogic: EndermiteSpawnLogic) : IDimensionInstability{
|
||||
private companion object{
|
||||
private const val INITIAL_ENDERMITE_SPAWN_TIME = -300L
|
||||
|
||||
private fun calculatePassiveRelief(ticksSinceLastAction: Long): UShort{
|
||||
return (5 * (ticksSinceLastAction / (20L * 20L))).toUShort()
|
||||
}
|
||||
|
||||
private fun calculateActionMultiplier(ticksSinceFullRelief: Long): Float{
|
||||
return if (ticksSinceFullRelief < 300L)
|
||||
remapRange(ticksSinceFullRelief.toFloat(), (0F)..(300F), (0.2F)..(1F))
|
||||
private fun calculateActionMultiplier(ticksSinceEndermiteSpawn: Long): Float{
|
||||
return if (ticksSinceEndermiteSpawn < 300L)
|
||||
remapRange(ticksSinceEndermiteSpawn.toFloat(), (0F)..(300F), (0.2F)..(1F))
|
||||
else
|
||||
1F
|
||||
}
|
||||
@ -30,22 +32,26 @@ open class DimensionInstabilityGlobal(private val world: World, private val ende
|
||||
private var level = 0
|
||||
|
||||
private var lastActionTime = 0L
|
||||
private var lastFullReliefTime = -300L
|
||||
private var lastEndermiteSpawnTime = INITIAL_ENDERMITE_SPAWN_TIME
|
||||
|
||||
override fun resetActionMultiplier(pos: BlockPos){
|
||||
lastEndermiteSpawnTime = INITIAL_ENDERMITE_SPAWN_TIME
|
||||
}
|
||||
|
||||
override fun triggerAction(amount: UShort, pos: BlockPos){
|
||||
val currentTime = world.totalWorldTime
|
||||
val ticksSinceLastAction = currentTime - lastActionTime
|
||||
val ticksSinceFullRelief = currentTime - lastFullReliefTime
|
||||
val ticksSinceEndermiteSpawn = currentTime - lastEndermiteSpawnTime
|
||||
|
||||
triggerRelief(calculatePassiveRelief(ticksSinceLastAction), pos)
|
||||
lastActionTime = currentTime
|
||||
|
||||
level += (amount.toInt() * calculateActionMultiplier(ticksSinceFullRelief)).ceilToInt()
|
||||
level += (amount.toInt() * calculateActionMultiplier(ticksSinceEndermiteSpawn)).ceilToInt()
|
||||
|
||||
if (level >= 200 && level >= 200 + calculateExtraLevelRequired(endermiteSpawnLogic.countExisting(world, pos))){
|
||||
if (endermiteSpawnLogic.trySpawnNear(world, pos)){
|
||||
triggerReliefMultiplier(0.9F)
|
||||
lastFullReliefTime = currentTime
|
||||
lastEndermiteSpawnTime = currentTime
|
||||
}
|
||||
else{
|
||||
triggerReliefMultiplier(0.45F)
|
||||
@ -66,12 +72,12 @@ open class DimensionInstabilityGlobal(private val world: World, private val ende
|
||||
override fun serializeNBT() = NBTTagCompound().apply {
|
||||
setInteger("Level", level)
|
||||
setLong("LastAction", lastActionTime)
|
||||
setLong("LastFullRelief", lastFullReliefTime)
|
||||
setLong("LastEndermiteSpawn", lastEndermiteSpawnTime)
|
||||
}
|
||||
|
||||
override fun deserializeNBT(nbt: NBTTagCompound) = with(nbt){
|
||||
level = getInteger("Level")
|
||||
lastActionTime = getLong("LastAction")
|
||||
lastFullReliefTime = getLong("LastFullRelief")
|
||||
lastEndermiteSpawnTime = getLong("LastEndermiteSpawn")
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ import net.minecraft.nbt.NBTTagCompound
|
||||
import net.minecraft.util.math.BlockPos
|
||||
|
||||
object DimensionInstabilityNull : IDimensionInstability{
|
||||
override fun resetActionMultiplier(pos: BlockPos){}
|
||||
override fun triggerAction(amount: UShort, pos: BlockPos){}
|
||||
override fun triggerRelief(amount: UShort, pos: BlockPos){}
|
||||
|
||||
|
@ -4,6 +4,7 @@ import net.minecraft.util.math.BlockPos
|
||||
import net.minecraftforge.common.util.INBTSerializable
|
||||
|
||||
interface IDimensionInstability : INBTSerializable<NBTTagCompound>{
|
||||
fun resetActionMultiplier(pos: BlockPos)
|
||||
fun triggerAction(amount: UShort, pos: BlockPos)
|
||||
fun triggerRelief(amount: UShort, pos: BlockPos)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user