diff options
| -rw-r--r-- | src/main/kotlin/events/TickEvent.kt | 3 | ||||
| -rw-r--r-- | src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt | 14 | ||||
| -rw-r--r-- | src/main/kotlin/util/async/CompletableFutureExt.kt | 6 |
3 files changed, 17 insertions, 6 deletions
diff --git a/src/main/kotlin/events/TickEvent.kt b/src/main/kotlin/events/TickEvent.kt index 18007f8..bf51774 100644 --- a/src/main/kotlin/events/TickEvent.kt +++ b/src/main/kotlin/events/TickEvent.kt @@ -3,5 +3,8 @@ package moe.nea.firmament.events data class TickEvent(val tickCount: Int) : FirmamentEvent() { + // TODO: introduce a client / server tick system. + // client ticks should ignore the game state + // server ticks should per-tick count packets received by the server companion object : FirmamentEventBus<TickEvent>() } diff --git a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt index 6043335..bd4bfdb 100644 --- a/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt +++ b/src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt @@ -8,12 +8,15 @@ import net.minecraft.client.gui.screen.ingame.HandledScreen import net.minecraft.entity.player.PlayerInventory import net.minecraft.item.Items import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket +import net.minecraft.text.Text import moe.nea.firmament.annotations.Subscribe +import moe.nea.firmament.events.ChestInventoryUpdateEvent import moe.nea.firmament.events.ScreenChangeEvent import moe.nea.firmament.events.SlotClickEvent import moe.nea.firmament.events.SlotRenderEvents import moe.nea.firmament.events.TickEvent import moe.nea.firmament.util.MC +import moe.nea.firmament.util.async.discard import moe.nea.firmament.util.customgui.customGui import moe.nea.firmament.util.data.Config import moe.nea.firmament.util.data.ManagedConfig @@ -90,8 +93,8 @@ object StorageOverlay { var currentHandler: StorageBackingHandle? = null @Subscribe - fun onTick(event: TickEvent) { - rememberContent(currentHandler ?: return) + fun onChestContentUpdate(event: ChestInventoryUpdateEvent) { + rememberContent(currentHandler) } @Subscribe @@ -149,13 +152,11 @@ object StorageOverlay { fun rememberContent(handler: StorageBackingHandle?) { handler ?: return - // TODO: Make all of these functions work on deltas / updates instead of the entire contents - val data = Data.data?.storageInventories ?: return + val data = Data.data.storageInventories when (handler) { is StorageBackingHandle.Overview -> rememberStorageOverview(handler, data) is StorageBackingHandle.Page -> rememberPage(handler, data) } - Data.markDirty() } private fun rememberStorageOverview( @@ -176,13 +177,13 @@ object StorageOverlay { data[slot] = StorageData.StorageInventory(slot.defaultName(), slot, null) } } + Data.markDirty() } private fun rememberPage( handler: StorageBackingHandle.Page, data: SortedMap<StoragePageSlot, StorageData.StorageInventory> ) { - // TODO: FIXME: FIXME NOW: Definitely don't copy all of this every tick into persistence val newStacks = VirtualInventory(handler.handler.stacks.take(handler.handler.rows * 9).drop(9).map { it.copy() }) data.compute(handler.storagePageSlot) { slot, existingInventory -> @@ -194,5 +195,6 @@ object StorageOverlay { it.inventory = newStacks } } + Data.markDirty(newStacks.serializationCache.discard()) } } diff --git a/src/main/kotlin/util/async/CompletableFutureExt.kt b/src/main/kotlin/util/async/CompletableFutureExt.kt new file mode 100644 index 0000000..5476371 --- /dev/null +++ b/src/main/kotlin/util/async/CompletableFutureExt.kt @@ -0,0 +1,6 @@ +package moe.nea.firmament.util.async + +import java.util.concurrent.CompletableFuture + + +fun CompletableFuture<*>.discard(): CompletableFuture<Void?> = thenRun { } |
