aboutsummaryrefslogtreecommitdiff
path: root/RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2020-09-09 17:08:36 +0800
committershedaniel <daniel@shedaniel.me>2020-09-09 17:08:36 +0800
commite3bbafaad49d15c7459ec0b38dd4268b4fd7e5ef (patch)
treeaad638798bc66a140ad6900fde438f5040952903 /RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
parentafe32352abcef8d501acf7985d2e9b1f3fcb673e (diff)
downloadRoughlyEnoughItems-e3bbafaad49d15c7459ec0b38dd4268b4fd7e5ef.tar.gz
RoughlyEnoughItems-e3bbafaad49d15c7459ec0b38dd4268b4fd7e5ef.tar.bz2
RoughlyEnoughItems-e3bbafaad49d15c7459ec0b38dd4268b4fd7e5ef.zip
Get rid of mixins, turn EntryStack methods turn an ImmutableList instead of ArrayList
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java')
-rw-r--r--RoughlyEnoughItems-runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java43
1 files changed, 31 insertions, 12 deletions
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<Settings<?>, Object> EMPTY_SETTINGS = Reference2ObjectMaps.emptyMap();
- private Map<Settings<?>, Object> settings = null;
+ private static final Short2ObjectMap<Object> EMPTY_SETTINGS = Short2ObjectMaps.emptyMap();
+ private Short2ObjectMap<Object> settings = null;
@Override
public <T> EntryStack setting(Settings<T> 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<Object> singletonSettings = this.settings;
+ this.settings = new Short2ObjectOpenHashMap<>(4, 1);
+ this.settings.putAll(singletonSettings);
+ }
+ }
+ this.settings.put(settingsId, value);
+ }
return this;
}
@Override
public <T> EntryStack removeSetting(Settings<T> 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<Settings<?>, Object> getSettings() {
+ protected Short2ObjectMap<Object> getSettings() {
return this.settings == null ? EMPTY_SETTINGS : this.settings;
}
@Override
public <T> T get(Settings<T> 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;