mirror of
https://github.com/GTNewHorizons/NotEnoughItems.git
synced 2026-11-15 17:54:50 +00:00
* Added keyboard shortcuts to NEI * OptionButton: Add Tooltip to long prefix * fix formatting * Tooltip shown when shift is held
153 lines
4.1 KiB
Java
153 lines
4.1 KiB
Java
package codechicken.nei.recipe;
|
|
|
|
import codechicken.nei.PositionedStack;
|
|
import codechicken.nei.util.NBTJson;
|
|
import com.google.gson.JsonArray;
|
|
import com.google.gson.JsonElement;
|
|
import com.google.gson.JsonObject;
|
|
import com.google.gson.JsonPrimitive;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
public class BookmarkRecipeId {
|
|
|
|
public int position = -1;
|
|
|
|
public int recipetype = -1;
|
|
|
|
public String handlerName = null;
|
|
|
|
public List<NBTTagCompound> ingredients = new ArrayList<>();
|
|
|
|
public BookmarkRecipeId(String handlerName, List<?> stacks) {
|
|
this.handlerName = handlerName;
|
|
|
|
for (Object pos : stacks) {
|
|
|
|
if (pos instanceof PositionedStack) {
|
|
pos = StackInfo.getItemStackWithMinimumDamage(((PositionedStack) pos).items);
|
|
}
|
|
|
|
if (pos instanceof ItemStack) {
|
|
pos = StackInfo.itemStackToNBT((ItemStack) pos);
|
|
}
|
|
|
|
if (pos instanceof NBTTagCompound) {
|
|
ingredients.add((NBTTagCompound) pos);
|
|
}
|
|
}
|
|
}
|
|
|
|
public BookmarkRecipeId(JsonObject json) {
|
|
|
|
if (json.get("handlerName") != null) {
|
|
handlerName = json.get("handlerName").getAsString();
|
|
}
|
|
|
|
if (json.get("ingredients") != null) {
|
|
JsonArray arr = (JsonArray) json.get("ingredients");
|
|
List<NBTTagCompound> ingredients = convertJsonArrayToIngredients(arr);
|
|
|
|
if (ingredients != null) {
|
|
this.ingredients = ingredients;
|
|
}
|
|
}
|
|
}
|
|
|
|
public BookmarkRecipeId() {}
|
|
|
|
public boolean equalsIngredients(List<PositionedStack> stacks) {
|
|
|
|
if (ingredients.size() != stacks.size()) {
|
|
return false;
|
|
}
|
|
|
|
Short idx = 0;
|
|
|
|
for (PositionedStack pStack : stacks) {
|
|
final NBTTagCompound tagCompoundA =
|
|
StackInfo.itemStackToNBT(StackInfo.getItemStackWithMinimumDamage(pStack.items));
|
|
final NBTTagCompound tagCompoundB = ingredients.get(idx);
|
|
|
|
if (tagCompoundB == null || !tagCompoundB.equals(tagCompoundA)) {
|
|
return false;
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public JsonObject toJsonObject() {
|
|
JsonObject json = new JsonObject();
|
|
|
|
if (handlerName != null) {
|
|
json.add("handlerName", new JsonPrimitive(handlerName));
|
|
json.add("ingredients", convertIngredientsToJsonArray(ingredients));
|
|
}
|
|
|
|
return json;
|
|
}
|
|
|
|
protected List<NBTTagCompound> convertJsonArrayToIngredients(JsonArray arr) {
|
|
List<NBTTagCompound> ingredients = new ArrayList<>();
|
|
|
|
for (JsonElement elem : arr) {
|
|
final NBTTagCompound nbt = (NBTTagCompound) NBTJson.toNbt(elem);
|
|
|
|
if (nbt == null) {
|
|
return null;
|
|
}
|
|
|
|
ingredients.add(nbt);
|
|
}
|
|
|
|
return ingredients;
|
|
}
|
|
|
|
protected JsonArray convertIngredientsToJsonArray(List<NBTTagCompound> ingredients) {
|
|
JsonArray arr = new JsonArray();
|
|
|
|
for (NBTTagCompound nbTag : ingredients) {
|
|
arr.add(NBTJson.toJsonObject(nbTag));
|
|
}
|
|
|
|
return arr;
|
|
}
|
|
|
|
public boolean equals(Object anObject) {
|
|
if (this == anObject) {
|
|
return true;
|
|
}
|
|
|
|
if (anObject instanceof BookmarkRecipeId) {
|
|
final BookmarkRecipeId anRecipeId = (BookmarkRecipeId) anObject;
|
|
|
|
if (!handlerName.equals(anRecipeId.handlerName)) {
|
|
return false;
|
|
}
|
|
|
|
if (ingredients.size() != anRecipeId.ingredients.size()) {
|
|
return false;
|
|
}
|
|
|
|
for (int idx = 0; idx < ingredients.size(); idx++) {
|
|
if (!ingredients.get(idx).equals(anRecipeId.ingredients.get(idx))) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public BookmarkRecipeId copy() {
|
|
return new BookmarkRecipeId(handlerName, ingredients);
|
|
}
|
|
}
|