Add more events to android research

This commit is contained in:
DBotThePony 2023-06-20 21:31:56 +07:00
parent 070b962df9
commit 805297564a
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 23 additions and 18 deletions

View File

@ -3,25 +3,23 @@ package ru.dbotthepony.mc.otm.android
import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream
import net.minecraft.ChatFormatting
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.ListTag
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.entity.player.Player
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.common.util.INBTSerializable
import net.minecraftforge.eventbus.api.Cancelable
import net.minecraftforge.eventbus.api.Event
import net.minecraftforge.eventbus.api.Event.HasResult
import ru.dbotthepony.mc.otm.OverdriveThatMatters
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.awareItemsStream
import ru.dbotthepony.mc.otm.core.TextComponent
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.nbt.getCompoundList
import ru.dbotthepony.mc.otm.core.registryName
import ru.dbotthepony.mc.otm.core.nbt.set
import ru.dbotthepony.mc.otm.milliTime
import ru.dbotthepony.mc.otm.network.synchronizer.FieldSynchronizer
import ru.dbotthepony.mc.otm.registry.MRegistry
import ru.dbotthepony.mc.otm.triggers.AndroidResearchTrigger
import java.io.InputStream
import kotlin.math.absoluteValue
@ -49,20 +47,27 @@ class AndroidResearch(val type: AndroidResearchType, val capability: MatteryPlay
return
}
onRefunded()
onUnResearched()
isResearched = false
}
fun onRefunded() {
data class OnResearched(val research: AndroidResearch) : Event()
data class OnUnResearched(val research: AndroidResearch) : Event()
fun onUnResearched() {
for (result in type.results) {
result.onRefunded(this)
result.onUnResearched(this)
}
MinecraftForge.EVENT_BUS.post(OnUnResearched(this))
}
fun onResearched() {
for (result in type.results) {
result.onResearched(this)
}
MinecraftForge.EVENT_BUS.post(OnResearched(this))
}
/**
@ -114,16 +119,14 @@ class AndroidResearch(val type: AndroidResearchType, val capability: MatteryPlay
return true
}
data class OnRefunded(val research: AndroidResearch) : Event()
/**
* Grants all (or some) resources back consumed by [consumeResearchCost].
*
* Returns true whenever player accepted all resources refunded, false otherwise.
*/
fun refund(simulate: Boolean): Boolean {
if (simulate) {
return true
}
fun refund(): Boolean {
if (type.experienceLevels > 0) {
var experiencePoints = 0
@ -148,6 +151,8 @@ class AndroidResearch(val type: AndroidResearchType, val capability: MatteryPlay
}
}
MinecraftForge.EVENT_BUS.post(OnRefunded(this))
return true
}

View File

@ -32,7 +32,7 @@ object AndroidResearchResults {
feature.strength++
}
override fun onRefunded(research: AndroidResearch) {
override fun onUnResearched(research: AndroidResearch) {
val feature = research.capability.getFeature(AndroidFeatures.NANOBOTS_ARMOR) ?: return
feature.strength--
}
@ -48,7 +48,7 @@ object AndroidResearchResults {
feature.speed++
}
override fun onRefunded(research: AndroidResearch) {
override fun onUnResearched(research: AndroidResearch) {
val feature = research.capability.getFeature(AndroidFeatures.NANOBOTS_ARMOR) ?: return
feature.speed--
}
@ -82,7 +82,7 @@ interface AndroidResearchResult {
research.capability.addFeature(feature ?: return)
}
override fun onRefunded(research: AndroidResearch) {
override fun onUnResearched(research: AndroidResearch) {
research.capability.removeFeature(feature ?: return)
}
@ -122,7 +122,7 @@ interface AndroidResearchResult {
}
}
override fun onRefunded(research: AndroidResearch) {
override fun onUnResearched(research: AndroidResearch) {
val get = research.capability.getFeature(feature ?: return)
if (get == null) {
@ -160,7 +160,7 @@ interface AndroidResearchResult {
/**
* Called when research is refunded
*/
fun onRefunded(research: AndroidResearch) {}
fun onUnResearched(research: AndroidResearch) {}
companion object {
private val LOGGER = LogManager.getLogger()

View File

@ -492,7 +492,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
instance.unResearch()
if (refund) {
instance.refund(simulate = false)
instance.refund()
}
}
}