minecraft-src/net/minecraft/stats/RecipeBookSettings.java
2025-07-04 01:41:11 +03:00

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 + "]";
}
}
}