Skip to content

Commit

Permalink
Change how fuel is used to allow rapid-use low duration fuels.
Browse files Browse the repository at this point in the history
Basically the fuel value in the smeltery is per tick now than a weird -3 every second. This also makes math a lot easier. Fuel also is consumed every time something is heated instead of every second.
  • Loading branch information
bonii-xx committed Oct 14, 2014
1 parent acd2a00 commit 02f405f
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 27 deletions.
42 changes: 29 additions & 13 deletions src/main/java/tconstruct/smeltery/TinkerSmeltery.java
@@ -1,34 +1,50 @@
package tconstruct.smeltery;

import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.registry.*;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.ObjectHolder;
import java.util.*;
import mantle.blocks.BlockUtils;
import mantle.blocks.abstracts.MultiServantLogic;
import mantle.pulsar.pulse.*;
import mantle.pulsar.pulse.Handler;
import mantle.pulsar.pulse.Pulse;
import net.minecraft.block.Block;
import net.minecraft.block.material.*;
import net.minecraft.init.*;
import net.minecraft.item.*;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.material.MaterialLiquid;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fluids.*;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData;
import net.minecraftforge.oredict.*;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe;
import tconstruct.TConstruct;
import tconstruct.library.TConstructRegistry;
import tconstruct.library.crafting.*;
import tconstruct.library.crafting.FluidType;
import tconstruct.library.crafting.LiquidCasting;
import tconstruct.library.crafting.Smeltery;
import tconstruct.library.util.IPattern;
import tconstruct.smeltery.blocks.*;
import tconstruct.smeltery.itemblocks.*;
import tconstruct.smeltery.items.*;
import tconstruct.smeltery.items.FilledBucket;
import tconstruct.smeltery.items.MetalPattern;
import tconstruct.smeltery.logic.*;
import tconstruct.tools.TinkerTools;
import tconstruct.util.config.PHConstruct;
import tconstruct.world.TinkerWorld;

import java.util.*;

@ObjectHolder(TConstruct.modID)
@Pulse(id = "Tinkers' Smeltery", description = "Liquid metals, casting, and the multiblock structure.")
public class TinkerSmeltery
Expand Down Expand Up @@ -1085,11 +1101,11 @@ protected void addRecipesForBasinCasting ()
protected static void addRecipesForSmeltery ()
{
// Smeltery fuels
Smeltery.addSmelteryFuel(FluidRegistry.LAVA, 1300, 12); // lava lasts 4 seconds per 15 mb
Smeltery.addSmelteryFuel(FluidRegistry.LAVA, 1300, 80); // lava lasts 4 seconds per 15 mb
// register pyrotheum if it's present
Fluid pyrotheum = FluidRegistry.getFluid("pyrotheum");
if (pyrotheum != null)
Smeltery.addSmelteryFuel(pyrotheum, 5000, 9); // pyrotheum lasts 3 seconds per 15 mb
Smeltery.addSmelteryFuel(pyrotheum, 5000, 70); // pyrotheum lasts 3.5 seconds per 15 mb

// BLOOD FOR THE BLOOD GOD
if (TinkerWorld.meatBlock != null)
Expand Down
34 changes: 20 additions & 14 deletions src/main/java/tconstruct/smeltery/logic/SmelteryLogic.java
Expand Up @@ -293,25 +293,26 @@ public void updateEntity ()
*/


if(validStructure)
if (tick % 4 == 0) {
if (tick % 4 == 0) {
if (useTime > 0)
useTime -= 4;

if(validStructure) {
checkHasItems();

// consume fuel if needed
if(useTime <= 0 && inUse)
updateFuelGague();

heatItems();
}
}

if (tick % 20 == 0)
{
if (!validStructure)
checkValidPlacement();

if (useTime > 0)
useTime -= 3;

if (validStructure && useTime <= 0 && inUse)
{
updateFuelGague();
}

if (needsUpdate)
{
needsUpdate = false;
Expand Down Expand Up @@ -600,10 +601,15 @@ public void updateFuelGague ()
FluidStack liquid = tankContainer.drain(ForgeDirection.DOWN, 15, false);
if (liquid != null && Smeltery.isSmelteryFuel(liquid.getFluid())) // doublecheck that everything is ok
{
// drain actual liquid, non simulated
liquid = tankContainer.drain(ForgeDirection.DOWN, 15, true);
useTime += (int)((float)Smeltery.getFuelDuration(liquid.getFluid())*15f/(float)liquid.amount);
internalTemp = Smeltery.getFuelPower(liquid.getFluid());
do {
// drain actual liquid, non simulated
liquid = tankContainer.drain(ForgeDirection.DOWN, 15, true);
// we try to do it as long as we don't have enough. Only needed for rapid-use fuels.
if(liquid == null || liquid.amount == 0)
break;
useTime += (int) ((float) Smeltery.getFuelDuration(liquid.getFluid()) * Math.round(15f / (float) liquid.amount));
internalTemp = Smeltery.getFuelPower(liquid.getFluid());
} while(useTime < 0);

// update fuel display
updateFuelDisplay(); // this also ensures that the next fuel tank is displayed if this drain made the current one empty
Expand Down

0 comments on commit 02f405f

Please sign in to comment.