From 599bdee17357c86b3aed61a92a6bbe3d217c17e7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Fri, 28 Apr 2023 19:22:38 -0400 Subject: [PATCH] Refactor registry data into a custom object --- .../modernfix/registry/FastForgeRegistry.java | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/embeddedt/modernfix/registry/FastForgeRegistry.java b/src/main/java/org/embeddedt/modernfix/registry/FastForgeRegistry.java index f01208c7..c03e9940 100644 --- a/src/main/java/org/embeddedt/modernfix/registry/FastForgeRegistry.java +++ b/src/main/java/org/embeddedt/modernfix/registry/FastForgeRegistry.java @@ -2,14 +2,12 @@ package org.embeddedt.modernfix.registry; import com.google.common.collect.BiMap; import com.google.common.collect.Iterators; -import com.google.common.collect.Maps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.registries.IForgeRegistryEntry; -import org.apache.commons.lang3.tuple.MutablePair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -25,20 +23,20 @@ public class FastForgeRegistry> { private ResourceKey> registryKey; private ObjectArrayList valuesById; - private Map, Integer>> infoByValue; + private Map infoByValue; private Map, V> valuesByKey = new Object2ObjectOpenHashMap<>(); private void storeId(V value, int id) { - MutablePair, Integer> pair = infoByValue.computeIfAbsent(value, k -> new MutablePair<>(null, null)); - pair.setRight(id); + RegistryValueData pair = infoByValue.computeIfAbsent(value, k -> new RegistryValueData()); + pair.id = id; } - private void updateInfoPairAndClearIfNull(V v, Consumer, Integer>> consumer) { + private void updateInfoPairAndClearIfNull(V v, Consumer consumer) { infoByValue.compute(v, (oldValue, oldPair) -> { if(oldPair == null) - oldPair = new MutablePair<>(null, null); + oldPair = new RegistryValueData(); consumer.accept(oldPair); - if(oldPair.getLeft() == null && oldPair.getRight() == null) + if(oldPair.isEmpty()) return null; else return oldPair; @@ -75,7 +73,7 @@ public class FastForgeRegistry> { ensureArrayCanFitId(key); V oldValue = valuesById.set(key, value); if(oldValue != null) { - updateInfoPairAndClearIfNull(oldValue, pair -> pair.setRight(null)); + updateInfoPairAndClearIfNull(oldValue, pair -> pair.id = null); } storeId(value, key); return oldValue; @@ -143,20 +141,20 @@ public class FastForgeRegistry> { @Override public Integer get(Object key) { - MutablePair, Integer> pair = infoByValue.get(key); + RegistryValueData pair = infoByValue.get(key); if(pair == null) return null; - return pair.getRight(); + return pair.id; } @Override public Integer remove(Object key) { - MutablePair, Integer> pair = infoByValue.get(key); + RegistryValueData pair = infoByValue.get(key); if(pair == null) return null; - int id = pair.getRight(); + int id = pair.id; valuesById.set(id, null); - updateInfoPairAndClearIfNull((V)key, p -> p.setRight(null)); + updateInfoPairAndClearIfNull((V)key, p -> p.id = null); return id; } @@ -217,8 +215,8 @@ public class FastForgeRegistry> { public void clear() { valuesById.clear(); infoByValue.values().removeIf(pair -> { - pair.setRight(null); - return pair.getLeft() == null && pair.getRight() == null; + pair.id = null; + return pair.isEmpty(); }); } @@ -257,9 +255,9 @@ public class FastForgeRegistry> { public V forcePut(@Nullable ResourceKey key, @Nullable V value) { V oldValue = valuesByKey.put(key, value); if(oldValue != null) { - updateInfoPairAndClearIfNull(oldValue, p -> p.setLeft(null)); + updateInfoPairAndClearIfNull(oldValue, p -> p.key = null); } - updateInfoPairAndClearIfNull(value, p -> p.setLeft(key)); + updateInfoPairAndClearIfNull(value, p -> p.key = key); return oldValue; } @@ -325,22 +323,22 @@ public class FastForgeRegistry> { @Override public ResourceKey get(Object key) { - MutablePair, Integer> pair = infoByValue.get(key); + RegistryValueData pair = infoByValue.get(key); if(pair == null) return null; else - return pair.getLeft(); + return (ResourceKey)pair.key; } @Override public ResourceKey remove(Object key) { - MutablePair, Integer> pair = infoByValue.get(key); + RegistryValueData pair = infoByValue.get(key); if(pair == null) return null; else { - ResourceKey rk = pair.getLeft(); + ResourceKey rk = (ResourceKey)pair.key; valuesByKey.remove(rk); - updateInfoPairAndClearIfNull((V)key, p -> p.setLeft(null)); + updateInfoPairAndClearIfNull((V)key, p -> p.key = null); return rk; } } @@ -396,7 +394,7 @@ public class FastForgeRegistry> { @Override public void clear() { - valuesByKey.values().forEach(v -> updateInfoPairAndClearIfNull(v, p -> p.setLeft(null))); + valuesByKey.values().forEach(v -> updateInfoPairAndClearIfNull(v, p -> p.key = null)); valuesByKey.clear(); } @@ -488,11 +486,11 @@ public class FastForgeRegistry> { @Override public ResourceLocation get(Object key) { - MutablePair, Integer> pair = infoByValue.get(key); - if(pair == null || pair.getLeft() == null) + RegistryValueData pair = infoByValue.get(key); + if(pair == null || pair.key == null) return null; else - return pair.getLeft().location(); + return pair.key.location(); } @Override @@ -671,4 +669,13 @@ public class FastForgeRegistry> { throw new UnsupportedOperationException(); } } + + static class RegistryValueData { + public ResourceKey key; + public Integer id; + + boolean isEmpty() { + return key == null && id == null; + } + } }