156 lines
5.2 KiB
Java
156 lines
5.2 KiB
Java
package net.minecraft.stats;
|
|
|
|
import com.google.common.collect.ImmutableMap;
|
|
import com.google.common.collect.Maps;
|
|
import com.mojang.datafixers.util.Pair;
|
|
import java.util.Map;
|
|
import net.minecraft.Util;
|
|
import net.minecraft.nbt.CompoundTag;
|
|
import net.minecraft.network.FriendlyByteBuf;
|
|
import net.minecraft.world.inventory.RecipeBookType;
|
|
|
|
public final class RecipeBookSettings {
|
|
private static final Map<RecipeBookType, Pair<String, String>> TAG_FIELDS = ImmutableMap.of(
|
|
RecipeBookType.CRAFTING,
|
|
Pair.of("isGuiOpen", "isFilteringCraftable"),
|
|
RecipeBookType.FURNACE,
|
|
Pair.of("isFurnaceGuiOpen", "isFurnaceFilteringCraftable"),
|
|
RecipeBookType.BLAST_FURNACE,
|
|
Pair.of("isBlastingFurnaceGuiOpen", "isBlastingFurnaceFilteringCraftable"),
|
|
RecipeBookType.SMOKER,
|
|
Pair.of("isSmokerGuiOpen", "isSmokerFilteringCraftable")
|
|
);
|
|
private final Map<RecipeBookType, RecipeBookSettings.TypeSettings> states;
|
|
|
|
private RecipeBookSettings(Map<RecipeBookType, RecipeBookSettings.TypeSettings> states) {
|
|
this.states = states;
|
|
}
|
|
|
|
public RecipeBookSettings() {
|
|
this(Util.make(Maps.newEnumMap(RecipeBookType.class), enumMap -> {
|
|
for (RecipeBookType recipeBookType : RecipeBookType.values()) {
|
|
enumMap.put(recipeBookType, new RecipeBookSettings.TypeSettings(false, false));
|
|
}
|
|
}));
|
|
}
|
|
|
|
public boolean isOpen(RecipeBookType bookType) {
|
|
return ((RecipeBookSettings.TypeSettings)this.states.get(bookType)).open;
|
|
}
|
|
|
|
public void setOpen(RecipeBookType bookType, boolean open) {
|
|
((RecipeBookSettings.TypeSettings)this.states.get(bookType)).open = open;
|
|
}
|
|
|
|
public boolean isFiltering(RecipeBookType bookType) {
|
|
return ((RecipeBookSettings.TypeSettings)this.states.get(bookType)).filtering;
|
|
}
|
|
|
|
public void setFiltering(RecipeBookType bookType, boolean filtering) {
|
|
((RecipeBookSettings.TypeSettings)this.states.get(bookType)).filtering = filtering;
|
|
}
|
|
|
|
public static RecipeBookSettings read(FriendlyByteBuf buffer) {
|
|
Map<RecipeBookType, RecipeBookSettings.TypeSettings> map = Maps.newEnumMap(RecipeBookType.class);
|
|
|
|
for (RecipeBookType recipeBookType : RecipeBookType.values()) {
|
|
boolean bl = buffer.readBoolean();
|
|
boolean bl2 = buffer.readBoolean();
|
|
map.put(recipeBookType, new RecipeBookSettings.TypeSettings(bl, bl2));
|
|
}
|
|
|
|
return new RecipeBookSettings(map);
|
|
}
|
|
|
|
public void write(FriendlyByteBuf buffer) {
|
|
for (RecipeBookType recipeBookType : RecipeBookType.values()) {
|
|
RecipeBookSettings.TypeSettings typeSettings = (RecipeBookSettings.TypeSettings)this.states.get(recipeBookType);
|
|
if (typeSettings == null) {
|
|
buffer.writeBoolean(false);
|
|
buffer.writeBoolean(false);
|
|
} else {
|
|
buffer.writeBoolean(typeSettings.open);
|
|
buffer.writeBoolean(typeSettings.filtering);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static RecipeBookSettings read(CompoundTag tag) {
|
|
Map<RecipeBookType, RecipeBookSettings.TypeSettings> map = Maps.newEnumMap(RecipeBookType.class);
|
|
TAG_FIELDS.forEach((recipeBookType, pair) -> {
|
|
boolean bl = tag.getBoolean((String)pair.getFirst());
|
|
boolean bl2 = tag.getBoolean((String)pair.getSecond());
|
|
map.put(recipeBookType, new RecipeBookSettings.TypeSettings(bl, bl2));
|
|
});
|
|
return new RecipeBookSettings(map);
|
|
}
|
|
|
|
public void write(CompoundTag tag) {
|
|
TAG_FIELDS.forEach((recipeBookType, pair) -> {
|
|
RecipeBookSettings.TypeSettings typeSettings = (RecipeBookSettings.TypeSettings)this.states.get(recipeBookType);
|
|
tag.putBoolean((String)pair.getFirst(), typeSettings.open);
|
|
tag.putBoolean((String)pair.getSecond(), typeSettings.filtering);
|
|
});
|
|
}
|
|
|
|
public RecipeBookSettings copy() {
|
|
Map<RecipeBookType, RecipeBookSettings.TypeSettings> map = Maps.newEnumMap(RecipeBookType.class);
|
|
|
|
for (RecipeBookType recipeBookType : RecipeBookType.values()) {
|
|
RecipeBookSettings.TypeSettings typeSettings = (RecipeBookSettings.TypeSettings)this.states.get(recipeBookType);
|
|
map.put(recipeBookType, typeSettings.copy());
|
|
}
|
|
|
|
return new RecipeBookSettings(map);
|
|
}
|
|
|
|
public void replaceFrom(RecipeBookSettings other) {
|
|
this.states.clear();
|
|
|
|
for (RecipeBookType recipeBookType : RecipeBookType.values()) {
|
|
RecipeBookSettings.TypeSettings typeSettings = (RecipeBookSettings.TypeSettings)other.states.get(recipeBookType);
|
|
this.states.put(recipeBookType, typeSettings.copy());
|
|
}
|
|
}
|
|
|
|
public boolean equals(Object object) {
|
|
return this == object || object instanceof RecipeBookSettings && this.states.equals(((RecipeBookSettings)object).states);
|
|
}
|
|
|
|
public int hashCode() {
|
|
return this.states.hashCode();
|
|
}
|
|
|
|
static final class TypeSettings {
|
|
boolean open;
|
|
boolean filtering;
|
|
|
|
public TypeSettings(boolean open, boolean filtering) {
|
|
this.open = open;
|
|
this.filtering = filtering;
|
|
}
|
|
|
|
public RecipeBookSettings.TypeSettings copy() {
|
|
return new RecipeBookSettings.TypeSettings(this.open, this.filtering);
|
|
}
|
|
|
|
public boolean equals(Object object) {
|
|
if (this == object) {
|
|
return true;
|
|
} else {
|
|
return !(object instanceof RecipeBookSettings.TypeSettings typeSettings)
|
|
? false
|
|
: this.open == typeSettings.open && this.filtering == typeSettings.filtering;
|
|
}
|
|
}
|
|
|
|
public int hashCode() {
|
|
int i = this.open ? 1 : 0;
|
|
return 31 * i + (this.filtering ? 1 : 0);
|
|
}
|
|
|
|
public String toString() {
|
|
return "[open=" + this.open + ", filtering=" + this.filtering + "]";
|
|
}
|
|
}
|
|
}
|