diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearch.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearch.kt index ad276b238..2a5ab14df 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearch.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearch.kt @@ -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 } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchResult.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchResult.kt index 39e43b686..8dfa6821d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchResult.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/android/AndroidResearchResult.kt @@ -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() diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt index 36c96ccb7..f7bccfebb 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/capability/MatteryPlayerCapability.kt @@ -492,7 +492,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial instance.unResearch() if (refund) { - instance.refund(simulate = false) + instance.refund() } } }