-
Notifications
You must be signed in to change notification settings - Fork 497
/
FluidDefinition.java
148 lines (126 loc) · 5.65 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package buildcraft.core.lib.fluids;
import java.util.Locale;
import net.minecraft.block.Block;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
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.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.api.core.BCLog;
import buildcraft.core.BCRegistry;
import buildcraft.core.lib.block.BlockBuildCraftFluid;
public class FluidDefinition {
public final Fluid fluid;
public final Block block;
public final Material material;
public final Item bucket;
// Master version. These will be null if BC did not register the fluid.
public final BCFluid masterFluid;
public final BlockBuildCraftFluid masterBlock;
public final MaterialBuildCraftLiquid masterMaterial;
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
if (!FluidRegistry.isFluidRegistered(fluidName)) {
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");
masterFluid = new BCFluid(fluidName, still, flow).setColour(colourLight, colourDark);
fluid = masterFluid;
fluid.setDensity(density).setViscosity(viscocity);
if (density < 0) fluid.setGaseous(true);
FluidRegistry.registerFluid(fluid);
} else {
BCLog.logger.warn("Not using BuildCraft fluid " + fluidName + " - issues might occur!");
masterFluid = null;
fluid = FluidRegistry.getFluid(fluidName);
createBucket = false;
}
// Block + Material
if (fluid.getBlock() == null) {
material = masterMaterial = new MaterialBuildCraftLiquid(MapColor.blackColor);
masterBlock = new BlockBuildCraftFluid(fluid, material).setFlammability(0);
block = masterBlock;
block.setRegistryName(Loader.instance().activeModContainer().getModId(), "fluid_block_" + fluidName);
block.setUnlocalizedName("blockFluid_" + fluidName);
BCRegistry.INSTANCE.registerBlock(block, true);
fluid.setBlock(block);
} else {
block = fluid.getBlock();
masterBlock = null;
material = block.getMaterial();
masterMaterial = null;
}
// Bucket
FluidStack bucketFluid = new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME);
if (createBucket) {
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));
} else {
ItemStack stack = FluidContainerRegistry.fillFluidContainer(bucketFluid, new ItemStack(Items.bucket));
if (stack == null) bucket = null;
else bucket = stack.getItem();
}
}
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 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;
}
}
}