package cyano.basemetals.init;
import cyano.basemetals.BaseMetals;
import cyano.basemetals.blocks.InteractiveFluidBlock;
import cyano.basemetals.fluids.CustomFluid;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.ItemMeshDefinition;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.fluids.BlockFluidBase;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import java.util.HashMap;
import java.util.Map;
public abstract class Fluids{
static{
FluidRegistry.enableUniversalBucket();
}
public static Fluid fluidMercury = null;
public static BlockFluidBase fluidBlockMercury = null;
private static final Map<Fluid,BlockFluidBase> fluidBlocks = new HashMap<>();
private static final Map<BlockFluidBase,String> fluidBlockNames = new HashMap<>();
private static final ResourceLocation dizzyPotionKey = new ResourceLocation("nausea");
private static boolean initDone = false;
public static void init(){
if(initDone)return;
// fluids
fluidMercury = newFluid(BaseMetals.MODID, "mercury",13594,2000,300,0, 0xFFD8D8D8);
// fluid blocks
fluidBlockMercury = registerFluidBlock(fluidMercury, new InteractiveFluidBlock(
fluidMercury, false, (World w, EntityLivingBase e)->{
if(w.rand.nextInt(32) == 0)e.addPotionEffect(new PotionEffect(Potion.REGISTRY.getObject(dizzyPotionKey),30*20,2));
}),"liquid_mercury");
initDone = true;
}
@SideOnly(Side.CLIENT)
public static void bakeModels(String modID){
for(Fluid fluid : fluidBlocks.keySet()){
BlockFluidBase block = fluidBlocks.get(fluid);
Item item = Item.getItemFromBlock(block);
final ModelResourceLocation fluidModelLocation = new ModelResourceLocation(
modID.toLowerCase() + ":" + fluidBlockNames.get(block), "fluid");
ModelBakery.registerItemVariants(item);
ModelLoader.setCustomMeshDefinition(item, new ItemMeshDefinition()
{
public ModelResourceLocation getModelLocation(ItemStack stack)
{
return fluidModelLocation;
}
});
ModelLoader.setCustomStateMapper(block, new StateMapperBase()
{
protected ModelResourceLocation getModelResourceLocation(IBlockState state)
{
return fluidModelLocation;
}
});
}
}
private static Fluid newFluid(String modID, String name, int density, int viscosity, int temperature, int luminosity, int tintColor) {
Fluid f = new CustomFluid(name,new ResourceLocation(modID+":blocks/"+name+"_still"),new ResourceLocation(modID+":blocks/"+name+"_flow"),tintColor);
f.setDensity(density);
f.setViscosity(viscosity);
f.setTemperature(temperature);
f.setLuminosity(luminosity);
f.setUnlocalizedName(modID+"."+name);
FluidRegistry.registerFluid(f);
return f;
}
private static BlockFluidBase registerFluidBlock(Fluid f, BlockFluidBase block, String name) {
block.setUnlocalizedName(BaseMetals.MODID+"."+name);
GameRegistry.registerBlock(block, name);
block.setCreativeTab(CreativeTabs.MISC);
FluidRegistry.addBucketForFluid(f);
fluidBlocks.put(f, block);
fluidBlockNames.put(block, name);
return block;
}
}