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

View File

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

View File

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