Replace Int2Object avl maps with hash maps

This commit is contained in:
DBotThePony 2022-12-05 00:28:05 +07:00
parent e971a6014d
commit 400b92faf6
Signed by: DBot
GPG Key ID: DCC23B5715498507
6 changed files with 14 additions and 6 deletions

View File

@ -46,6 +46,7 @@ import kotlin.collections.HashMap
private class SlotTuple(val slot: Int, val stack: ItemStack)
private class TrackedTuple(override val stack: ItemStackWrapper, override val id: UUID) : IStorageTuple<ItemStackWrapper> {
// do not use hash map because we need keys to be iterated in natural order
val children = Int2ObjectAVLTreeMap<SlotTuple>()
override fun toString(): String {

View File

@ -6,6 +6,7 @@ import com.mojang.blaze3d.vertex.PoseStack
import it.unimi.dsi.fastutil.ints.Int2FloatAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectFunction
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import net.minecraft.ChatFormatting
import net.minecraft.client.Minecraft
import net.minecraft.network.chat.Component
@ -524,7 +525,7 @@ class AndroidStationScreen constructor(p_97741_: AndroidStationMenu, p_97742_: I
MatteryScreen<AndroidStationMenu>(p_97741_, p_97742_, p_97743_) {
private fun makeCanvas(isPreview: Boolean): DraggableCanvasPanel<AndroidStationScreen> {
val rows = Int2ObjectAVLTreeMap<EditablePanel<AndroidStationScreen>>()
val rows = Int2ObjectOpenHashMap<EditablePanel<AndroidStationScreen>>()
val canvas = object : DraggableCanvasPanel<AndroidStationScreen>(this@AndroidStationScreen, null) {
private val random = Random()

View File

@ -4,6 +4,7 @@ import com.mojang.blaze3d.systems.RenderSystem
import com.mojang.blaze3d.vertex.PoseStack
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectFunction
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import net.minecraft.ChatFormatting
import net.minecraft.client.gui.Font
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
@ -63,7 +64,7 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
}
}
private val inventorySlotsRows = Int2ObjectAVLTreeMap<EditablePanel<MatteryScreen<*>>>()
private val inventorySlotsRows = Int2ObjectOpenHashMap<EditablePanel<MatteryScreen<*>>>()
private lateinit var slotListCanvas: EditablePanel<MatteryScreen<*>>
private lateinit var inventoryScrollbar: DiscreteScrollBarPanel<MatteryScreen<*>>

View File

@ -3,6 +3,7 @@ package ru.dbotthepony.mc.otm.compat
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap
import it.unimi.dsi.fastutil.ints.Int2ObjectFunction
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import it.unimi.dsi.fastutil.objects.ReferenceArraySet
import net.minecraft.network.FriendlyByteBuf
import net.minecraft.world.SimpleContainer
@ -37,7 +38,7 @@ private class MenuConfiguration(
}
private val slotPositions = Int2ObjectArrayMap<List<SlotPos>>()
private val rows = Int2ObjectAVLTreeMap<List<Slot>>()
private val rows = Int2ObjectOpenHashMap<List<Slot>>()
val isIncomplete: Boolean
private fun getRow(index: Int, matteryPlayer: MatteryPlayerCapability) = rows.computeIfAbsent(index, Int2ObjectFunction {
@ -200,6 +201,7 @@ class InventoryScrollPacket(val scroll: Int) : MatteryPacket {
}
menuConfigurations.computeIfAbsent(containerMenu) {
// do not use hash map because we need keys be iterated in natural order
val originalSlots = Int2ObjectAVLTreeMap<Slot>()
for (slot in it.slots) {

View File

@ -2,6 +2,7 @@ package ru.dbotthepony.mc.otm.menu.data
import com.mojang.blaze3d.platform.InputConstants
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.screens.Screen
import net.minecraft.network.FriendlyByteBuf
@ -205,7 +206,7 @@ open class NetworkedItemView(val ply: Player, val menu: MatteryMenu, val remote:
get() = ITEM_STORAGE
// this (how client see and interact with)
val localState = Int2ObjectAVLTreeMap<NetworkedItem>()
val localState = Int2ObjectOpenHashMap<NetworkedItem>()
val sortedView = LinkedList<NetworkedItem>()
var sorter: Comparator<ItemStack> = NAME_SORTER

View File

@ -1,6 +1,8 @@
package ru.dbotthepony.mc.otm.network
import it.unimi.dsi.fastutil.ints.Int2ObjectAVLTreeMap
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import it.unimi.dsi.fastutil.io.FastByteArrayInputStream
import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream
import it.unimi.dsi.fastutil.objects.ObjectArraySet
@ -1064,9 +1066,9 @@ class FieldSynchronizer(private val callback: Runnable, private val alwaysCallCa
return values
}
private val idToField = Int2ObjectAVLTreeMap<IField<*>>()
private val idToField = Int2ObjectOpenHashMap<IField<*>>()
private val missingFields = ObjectArraySet<String>()
private val missingFieldsMap = Int2ObjectAVLTreeMap<String>()
private val missingFieldsMap = Int2ObjectArrayMap<String>()
fun applyNetworkPayload(stream: InputStream): Int {
if (stream.read() > 0) {