-
Notifications
You must be signed in to change notification settings - Fork 497
/
FluidDefinition.java
125 lines (104 loc) · 4.78 KB
/
FluidDefinition.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
package buildcraft.core.lib.fluids;
import java.util.Locale;
import net.minecraft.block.material.MapColor;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import buildcraft.core.BCRegistry;
import buildcraft.core.lib.block.BlockBuildCraftFluid;
public class FluidDefinition {
public final BCFluid fluid;
public final BlockBuildCraftFluid block;
public final MaterialBuildCraftLiquid material;
public final Item bucket;
public FluidDefinition(String fluidName, int density, int viscocity, boolean createBucket) {
this(fluidName, fluidName, density, viscocity, createBucket, 0xFF_FF_FF_FF, 0xFF_FF_FF_FF);
}
public FluidDefinition(String fluidName, String textureSuffix, int density, int viscocity, boolean createBucket, int colourLight,
int colourDark) {
// Fluid itself
String modid = Loader.instance().activeModContainer().getModId();
String fluidTextureBase = modid.toLowerCase(Locale.ROOT).replace("|", "") + ":blocks/fluids/" + textureSuffix;
ResourceLocation still = new ResourceLocation(fluidTextureBase + "_still");
ResourceLocation flow = new ResourceLocation(fluidTextureBase + "_flow");
fluid = new BCFluid(fluidName, still, flow).setColour(colourLight, colourDark);
fluid.setDensity(density).setViscosity(viscocity);
if (density < 0) fluid.setGaseous(true);
FluidRegistry.registerFluid(fluid);
material = new MaterialBuildCraftLiquid(MapColor.blackColor);
block = new BlockBuildCraftFluid(fluid, material).setFlammability(0);
block.setRegistryName(Loader.instance().activeModContainer().getModId(), "fluid_block_" + fluidName);
block.setUnlocalizedName("blockFluid_" + fluidName);
BCRegistry.INSTANCE.registerBlock(block, true);
fluid.setBlock(block);
// Bucket
FluidStack bucketFluid = new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME);
bucket = new ItemBucketBuildcraft(block);
bucket.setUnlocalizedName("bucket_" + fluidName);
bucket.setRegistryName(Loader.instance().activeModContainer().getModId(), "fluid_bucket_" + fluidName);
BCRegistry.INSTANCE.registerItem(bucket, true);
FluidContainerRegistry.registerFluidContainer(bucketFluid, new ItemStack(bucket), new ItemStack(Items.bucket));
}
public final FluidStack createFluidStack(int amount) {
return new FluidStack(fluid, amount);
}
@SideOnly(Side.CLIENT)
public void textureStitchPre(TextureStitchEvent.Pre event) {
TextureAtlasSprite still = event.map.getTextureExtry(fluid.getStill().toString());
if (still == null) event.map.registerSprite(fluid.getStill());
TextureAtlasSprite flow = event.map.getTextureExtry(fluid.getFlowing().toString());
if (flow == null) event.map.registerSprite(fluid.getFlowing());
}
public static class BCFluid extends Fluid {
private int colour = 0xFFFFFFFF, light = 0xFF_FF_FF_FF, dark = 0xFF_FF_FF_FF;
private int heat;
public BCFluid(String fluidName, ResourceLocation still, ResourceLocation flowing) {
super(fluidName, still, flowing);
}
@Override
public String getLocalizedName(FluidStack stack) {
if (heat <= 0) return super.getLocalizedName(stack);
String name = super.getLocalizedName(stack);
String heatString = StatCollector.translateToLocalFormatted("buildcraft.fluid.heat_" + heat);
return name + heatString;
}
@Override
public int getColor() {
return colour;
}
public int getLightColour() {
return light;
}
public int getDarkColour() {
return dark;
}
public BCFluid setColour(int colour) {
this.colour = colour;
return this;
}
public BCFluid setColour(int light, int dark) {
this.light = light;
this.dark = dark;
this.colour = 0xFF_FF_FF_FF;
return this;
}
public BCFluid setHeat(int heat) {
this.heat = heat;
return this;
}
public int getHeatValue() {
return heat;
}
}
}