/
FluidStackHelper.java
137 lines (118 loc) · 4.14 KB
/
FluidStackHelper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package mezz.jei.plugins.vanilla.ingredients.fluid;
import java.util.Collection;
import javax.annotation.Nullable;
import java.util.Collections;
import net.minecraft.inventory.container.PlayerContainer;
import net.minecraftforge.fluids.FluidAttributes;
import net.minecraftforge.fluids.FluidStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.fluid.Fluid;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import com.google.common.base.MoreObjects;
import mezz.jei.api.ingredients.IIngredientHelper;
import mezz.jei.color.ColorGetter;
public class FluidStackHelper implements IIngredientHelper<FluidStack> {
@Override
@Nullable
public FluidStack getMatch(Iterable<FluidStack> ingredients, FluidStack toMatch) {
for (FluidStack fluidStack : ingredients) {
if (toMatch.getFluid() == fluidStack.getFluid()) {
return fluidStack;
}
}
return null;
}
@Override
public String getDisplayName(FluidStack ingredient) {
ITextComponent displayName = ingredient.getDisplayName();
return displayName.getString();
}
@Override
public String getUniqueId(FluidStack ingredient) {
Fluid fluid = ingredient.getFluid();
ResourceLocation registryName = fluid.getRegistryName();
CompoundNBT tag = ingredient.getTag();
if (tag != null) {
return "fluid:" + registryName + ":" + tag;
}
return "fluid:" + registryName;
}
@Override
public String getModId(FluidStack ingredient) {
Fluid fluid = ingredient.getFluid();
ResourceLocation registryName = fluid.getRegistryName();
if (registryName == null) {
String ingredientInfo = getErrorInfo(ingredient);
throw new IllegalStateException("fluid.getRegistryName() returned null for: " + ingredientInfo);
}
return registryName.getNamespace();
}
@Override
public Iterable<Integer> getColors(FluidStack ingredient) {
Fluid fluid = ingredient.getFluid();
FluidAttributes attributes = fluid.getAttributes();
ResourceLocation fluidStill = attributes.getStillTexture(ingredient);
if (fluidStill != null) {
Minecraft minecraft = Minecraft.getInstance();
TextureAtlasSprite fluidStillSprite = minecraft.getAtlasSpriteGetter(PlayerContainer.LOCATION_BLOCKS_TEXTURE).apply(fluidStill);
int renderColor = attributes.getColor(ingredient);
return ColorGetter.getColors(fluidStillSprite, renderColor, 1);
}
return Collections.emptyList();
}
@Override
public String getResourceId(FluidStack ingredient) {
Fluid fluid = ingredient.getFluid();
ResourceLocation registryName = fluid.getRegistryName();
if (registryName == null) {
String ingredientInfo = getErrorInfo(ingredient);
throw new IllegalStateException("fluid.getRegistryName() returned null for: " + ingredientInfo);
}
return registryName.getPath();
}
@Override
public ItemStack getCheatItemStack(FluidStack ingredient) {
Fluid fluid = ingredient.getFluid();
Item filledBucket = fluid.getFilledBucket();
return new ItemStack(filledBucket);
}
@Override
public FluidStack copyIngredient(FluidStack ingredient) {
return ingredient.copy();
}
@Override
public FluidStack normalizeIngredient(FluidStack ingredient) {
FluidStack copy = this.copyIngredient(ingredient);
copy.setAmount(FluidAttributes.BUCKET_VOLUME);
return copy;
}
@Override
public Collection<ResourceLocation> getTags(FluidStack ingredient) {
return ingredient.getFluid().getTags();
}
@Override
public String getErrorInfo(@Nullable FluidStack ingredient) {
if (ingredient == null) {
return "null";
}
MoreObjects.ToStringHelper toStringHelper = MoreObjects.toStringHelper(FluidStack.class);
Fluid fluid = ingredient.getFluid();
if (fluid != null) {
ITextComponent displayName = ingredient.getDisplayName();
toStringHelper.add("Fluid", displayName.getString());
} else {
toStringHelper.add("Fluid", "null");
}
toStringHelper.add("Amount", ingredient.getAmount());
CompoundNBT tag = ingredient.getTag();
if (tag != null) {
toStringHelper.add("Tag", tag);
}
return toStringHelper.toString();
}
}