From e3bbafaad49d15c7459ec0b38dd4268b4fd7e5ef Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 9 Sep 2020 17:08:36 +0800 Subject: Get rid of mixins, turn EntryStack methods turn an ImmutableList instead of ArrayList Signed-off-by: shedaniel --- .../me/shedaniel/rei/impl/AbstractEntryStack.java | 43 ++++++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) (limited to 'RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java') diff --git a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java index 91907294d..2f182ab35 100644 --- a/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java +++ b/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java @@ -23,31 +23,50 @@ package me.shedaniel.rei.impl; -import it.unimi.dsi.fastutil.objects.Reference2ObjectMaps; -import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; +import it.unimi.dsi.fastutil.shorts.Short2ObjectMaps; +import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; import me.shedaniel.rei.api.EntryStack; import net.minecraft.client.gui.GuiComponent; import org.jetbrains.annotations.ApiStatus; -import java.util.Map; - @ApiStatus.Internal public abstract class AbstractEntryStack extends GuiComponent implements EntryStack { - private static final Map, Object> EMPTY_SETTINGS = Reference2ObjectMaps.emptyMap(); - private Map, Object> settings = null; + private static final Short2ObjectMap EMPTY_SETTINGS = Short2ObjectMaps.emptyMap(); + private Short2ObjectMap settings = null; @Override public EntryStack setting(Settings settings, T value) { + short settingsId = settings.getId(); if (this.settings == null) - this.settings = new Reference2ObjectOpenHashMap<>(4); - this.settings.put(settings, value); + this.settings = Short2ObjectMaps.singleton(settingsId, value); + else { + if (this.settings.size() == 1) { + if (this.settings.containsKey(settingsId)) { + this.settings = Short2ObjectMaps.singleton(settingsId, value); + return this; + } else { + Short2ObjectMap singletonSettings = this.settings; + this.settings = new Short2ObjectOpenHashMap<>(4, 1); + this.settings.putAll(singletonSettings); + } + } + this.settings.put(settingsId, value); + } return this; } @Override public EntryStack removeSetting(Settings settings) { - if (this.settings != null && this.settings.remove(settings) != null && this.settings.isEmpty()) { - this.settings = null; + if (this.settings != null) { + short settingsId = settings.getId(); + if (this.settings.size() == 1) { + if (this.settings.containsKey(settingsId)) { + this.settings = null; + } + } else if (this.settings.remove(settingsId) != null && this.settings.isEmpty()) { + this.settings = null; + } } return this; } @@ -58,13 +77,13 @@ public abstract class AbstractEntryStack extends GuiComponent implements EntrySt return this; } - protected Map, Object> getSettings() { + protected Short2ObjectMap getSettings() { return this.settings == null ? EMPTY_SETTINGS : this.settings; } @Override public T get(Settings settings) { - Object o = this.settings == null ? null : this.settings.get(settings); + Object o = this.settings == null ? null : this.settings.get(settings.getId()); if (o == null) return settings.getDefaultValue(); return (T) o; -- cgit