aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/kotlin/events/TickEvent.kt3
-rw-r--r--src/main/kotlin/features/inventory/storageoverlay/StorageOverlay.kt14
-rw-r--r--src/main/kotlin/util/async/CompletableFutureExt.kt6
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 { }