Make use of Curios' SlotModifiersUpdatedEvent

This commit is contained in:
DBotThePony 2023-03-16 21:41:15 +07:00
parent 3c61a03fd8
commit 9cfd1e2119
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 31 additions and 2 deletions

View File

@ -34,6 +34,7 @@ import ru.dbotthepony.mc.otm.client.render.ShockwaveRenderer;
import ru.dbotthepony.mc.otm.client.render.blockentity.BatteryBankRenderer; import ru.dbotthepony.mc.otm.client.render.blockentity.BatteryBankRenderer;
import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer; import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer;
import ru.dbotthepony.mc.otm.compat.adastra.AdAstraCompatKt; import ru.dbotthepony.mc.otm.compat.adastra.AdAstraCompatKt;
import ru.dbotthepony.mc.otm.compat.curios.CuriosCompatKt;
import ru.dbotthepony.mc.otm.compat.mekanism.QIOKt; import ru.dbotthepony.mc.otm.compat.mekanism.QIOKt;
import ru.dbotthepony.mc.otm.compat.mekanism.TooltipsKt; import ru.dbotthepony.mc.otm.compat.mekanism.TooltipsKt;
import ru.dbotthepony.mc.otm.config.AndroidConfig; import ru.dbotthepony.mc.otm.config.AndroidConfig;
@ -53,6 +54,7 @@ import ru.dbotthepony.mc.otm.network.*;
import ru.dbotthepony.mc.otm.registry.*; import ru.dbotthepony.mc.otm.registry.*;
import ru.dbotthepony.mc.otm.storage.*; import ru.dbotthepony.mc.otm.storage.*;
import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger; import ru.dbotthepony.mc.otm.triggers.KillAsAndroidTrigger;
import top.theillusivec4.curios.api.CuriosApi;
import static net.minecraftforge.common.MinecraftForge.EVENT_BUS; import static net.minecraftforge.common.MinecraftForge.EVENT_BUS;
@ -199,6 +201,10 @@ public final class OverdriveThatMatters {
EVENT_BUS.addGenericListener(BlockEntity.class, EventPriority.NORMAL, QIOKt::attachCapabilities); EVENT_BUS.addGenericListener(BlockEntity.class, EventPriority.NORMAL, QIOKt::attachCapabilities);
} }
if (ModList.get().isLoaded(CuriosApi.MODID)) {
EVENT_BUS.addListener(EventPriority.NORMAL, CuriosCompatKt::onCuriosSlotModifiersUpdated);
}
if (AdAstraCompatKt.isAdAstraLoaded()) { if (AdAstraCompatKt.isAdAstraLoaded()) {
EVENT_BUS.addListener(EventPriority.NORMAL, AdAstraCompatKt::onDamageEvent); EVENT_BUS.addListener(EventPriority.NORMAL, AdAstraCompatKt::onDamageEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, AdAstraCompatKt::onMatteryTick); EVENT_BUS.addListener(EventPriority.NORMAL, AdAstraCompatKt::onMatteryTick);

View File

@ -230,6 +230,7 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
private var _exoPackMenu: ExoPackInventoryMenu? = null private var _exoPackMenu: ExoPackInventoryMenu? = null
set(value) { set(value) {
if (field == ply.containerMenu) { ply.closeContainer() } if (field == ply.containerMenu) { ply.closeContainer() }
field?.removed(ply)
field = value field = value
} }
@ -245,6 +246,10 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
return _exoPackMenu!! return _exoPackMenu!!
} }
fun recreateExoPackMenu() {
_exoPackMenu = ExoPackInventoryMenu(this)
}
private var shouldSendIteration = false private var shouldSendIteration = false
/** /**
@ -1160,8 +1165,13 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
} }
fun onPlayerChangeDimensionEvent(event: PlayerEvent.PlayerChangedDimensionEvent) { fun onPlayerChangeDimensionEvent(event: PlayerEvent.PlayerChangedDimensionEvent) {
event.entity.getCapability(MatteryCapability.MATTERY_PLAYER) event.entity.getCapability(MatteryCapability.MATTERY_PLAYER).ifPresentK {
.ifPresentK { it.invalidateNetworkState() } it.invalidateNetworkState()
onceServer(20) {
it.recreateExoPackMenu()
}
}
} }
fun onPlayerDeath(event: LivingDeathEvent) { fun onPlayerDeath(event: LivingDeathEvent) {
@ -1215,6 +1225,12 @@ class MatteryPlayerCapability(val ply: Player) : ICapabilityProvider, INBTSerial
it.deserializeNBT(original.serializeNBT()) it.deserializeNBT(original.serializeNBT())
it.invalidateNetworkState() it.invalidateNetworkState()
event.original.invalidateCaps() event.original.invalidateCaps()
if (SERVER_IS_LIVE) {
onceServer(20) {
it.recreateExoPackMenu()
}
}
} }
const val SLEEP_TICKS_LIMIT = 80 const val SLEEP_TICKS_LIMIT = 80

View File

@ -6,12 +6,14 @@ import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.ItemStack import net.minecraft.world.item.ItemStack
import net.minecraftforge.fml.ModList import net.minecraftforge.fml.ModList
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.container.awareStream import ru.dbotthepony.mc.otm.container.awareStream
import ru.dbotthepony.mc.otm.container.stream import ru.dbotthepony.mc.otm.container.stream
import ru.dbotthepony.mc.otm.core.collect.AwareItemStack import ru.dbotthepony.mc.otm.core.collect.AwareItemStack
import ru.dbotthepony.mc.otm.core.orNull import ru.dbotthepony.mc.otm.core.orNull
import ru.dbotthepony.mc.otm.menu.PlayerSlot import ru.dbotthepony.mc.otm.menu.PlayerSlot
import top.theillusivec4.curios.api.CuriosApi import top.theillusivec4.curios.api.CuriosApi
import top.theillusivec4.curios.api.event.SlotModifiersUpdatedEvent
import top.theillusivec4.curios.common.inventory.CosmeticCurioSlot import top.theillusivec4.curios.common.inventory.CosmeticCurioSlot
import top.theillusivec4.curios.common.inventory.CurioSlot import top.theillusivec4.curios.common.inventory.CurioSlot
import java.util.* import java.util.*
@ -21,6 +23,11 @@ val isCuriosLoaded by lazy {
ModList.get().isLoaded(CuriosApi.MODID) ModList.get().isLoaded(CuriosApi.MODID)
} }
fun onCuriosSlotModifiersUpdated(event: SlotModifiersUpdatedEvent) {
check(isCuriosLoaded) { "Curios is not loaded!" }
event.entity.matteryPlayer?.recreateExoPackMenu()
}
private fun Player.getCuriosSlotsImpl(): List<PlayerSlot<Slot, Slot>> { private fun Player.getCuriosSlotsImpl(): List<PlayerSlot<Slot, Slot>> {
val handler = getCapability(MatteryCapability.CURIOS_INVENTORY).orNull() ?: return listOf() val handler = getCapability(MatteryCapability.CURIOS_INVENTORY).orNull() ?: return listOf()