1
0
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:
chylex 2019-01-17 05:36:17 +01:00
parent 48d53d1e7d
commit 50c2518f91
4 changed files with 21 additions and 9 deletions

View File

@ -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)
}

View File

@ -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")
}
}

View File

@ -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){}

View File

@ -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)
}