Made the Oil Generator scale per time, not per energy

This commit is contained in:
Ellpeck 2016-11-21 13:30:38 +01:00
parent 32b757d71f
commit dd7e522605
5 changed files with 91 additions and 31 deletions

View file

@ -31,7 +31,7 @@ public final class ActuallyAdditionsAPI{
public static final String MOD_ID = "actuallyadditions"; public static final String MOD_ID = "actuallyadditions";
public static final String API_ID = MOD_ID+"api"; public static final String API_ID = MOD_ID+"api";
public static final String API_VERSION = "29"; public static final String API_VERSION = "30";
public static final List<CrusherRecipe> CRUSHER_RECIPES = new ArrayList<CrusherRecipe>(); public static final List<CrusherRecipe> CRUSHER_RECIPES = new ArrayList<CrusherRecipe>();
public static final List<BallOfFurReturn> BALL_OF_FUR_RETURN_ITEMS = new ArrayList<BallOfFurReturn>(); public static final List<BallOfFurReturn> BALL_OF_FUR_RETURN_ITEMS = new ArrayList<BallOfFurReturn>();
@ -41,7 +41,7 @@ public final class ActuallyAdditionsAPI{
public static final Map<Item, IColorLensChanger> RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap<Item, IColorLensChanger>(); public static final Map<Item, IColorLensChanger> RECONSTRUCTOR_LENS_COLOR_CHANGERS = new HashMap<Item, IColorLensChanger>();
public static final List<CoffeeIngredient> COFFEE_MACHINE_INGREDIENTS = new ArrayList<CoffeeIngredient>(); public static final List<CoffeeIngredient> COFFEE_MACHINE_INGREDIENTS = new ArrayList<CoffeeIngredient>();
public static final List<CompostRecipe> COMPOST_RECIPES = new ArrayList<CompostRecipe>(); public static final List<CompostRecipe> COMPOST_RECIPES = new ArrayList<CompostRecipe>();
public static final Map<String, Integer> OIL_GENERATOR_RECIPES = new HashMap<String, Integer>(); public static final List<OilGenRecipe> OIL_GENERATOR_RECIPES = new ArrayList<OilGenRecipe>();
public static final List<IBookletEntry> BOOKLET_ENTRIES = new ArrayList<IBookletEntry>(); public static final List<IBookletEntry> BOOKLET_ENTRIES = new ArrayList<IBookletEntry>();
//This is added to automatically, you don't need to add anything to this list //This is added to automatically, you don't need to add anything to this list
public static final List<IBookletChapter> ALL_CHAPTERS = new ArrayList<IBookletChapter>(); public static final List<IBookletChapter> ALL_CHAPTERS = new ArrayList<IBookletChapter>();
@ -148,7 +148,17 @@ public final class ActuallyAdditionsAPI{
* @param genAmount The amount of energy generated per operation * @param genAmount The amount of energy generated per operation
*/ */
public static void addOilGenRecipe(String fluidName, int genAmount){ public static void addOilGenRecipe(String fluidName, int genAmount){
OIL_GENERATOR_RECIPES.put(fluidName, genAmount); addOilGenRecipe(fluidName, genAmount, 100);
}
/**
* Adds a Recipe to the Oil generator
*
* @param fluidName The name of the fluid to be consumed
* @param genAmount The amount of energy generated per operation
*/
public static void addOilGenRecipe(String fluidName, int genAmount, int genTime){
OIL_GENERATOR_RECIPES.add(new OilGenRecipe(fluidName, genAmount, genTime));
} }
/** /**

View file

@ -0,0 +1,27 @@
/*
* This file ("OilGenRecipe.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.api.recipe;
import net.minecraftforge.fluids.FluidStack;
public class OilGenRecipe{
public final String fluidName;
public final int genAmount;
public final int genTime;
public OilGenRecipe(String fluidName, int genAmount, int genTime){
this.fluidName = fluidName;
this.genAmount = genAmount;
this.genTime = genTime;
}
}

View file

@ -33,10 +33,10 @@ public final class InitCrafting{
ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT); ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemMisc, 10, TheMiscItems.MASHED_FOOD.ordinal()), Blocks.LEAVES, new ItemStack(InitItems.itemFertilizer, 10), Blocks.DIRT);
ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemCanolaSeed, 20), Blocks.DIRT, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), Blocks.SOUL_SAND); ActuallyAdditionsAPI.addCompostRecipe(new ItemStack(InitItems.itemCanolaSeed, 20), Blocks.DIRT, new ItemStack(InitItems.itemMisc, 1, TheMiscItems.BIOMASS.ordinal()), Blocks.SOUL_SAND);
ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidCanolaOil.getName(), 40); ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidCanolaOil.getName(), 40, 100);
ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidOil.getName(), 100); ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidOil.getName(), 60, 100);
ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidCrystalOil.getName(), 200); ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidCrystalOil.getName(), 80, 200);
ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidEmpoweredOil.getName(), 350); ActuallyAdditionsAPI.addOilGenRecipe(InitFluids.fluidEmpoweredOil.getName(), 80, 350);
RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShaped", RecipeKeepDataShaped.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped"); RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShaped", RecipeKeepDataShaped.class, RecipeSorter.Category.SHAPED, "after:minecraft:shaped");
RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShapeless", RecipeKeepDataShapeless.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless"); RecipeSorter.register(ModUtil.MOD_ID+":recipeKeepDataShapeless", RecipeKeepDataShapeless.class, RecipeSorter.Category.SHAPELESS, "after:minecraft:shapeless");

View file

@ -75,13 +75,14 @@ public class GuiOilGenerator extends GuiContainer{
this.mc.getTextureManager().bindTexture(RES_LOC); this.mc.getTextureManager().bindTexture(RES_LOC);
this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93); this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, 176, 93);
if(this.generator.currentBurnTime > 0){ if(this.generator.currentBurnTime > 0 && this.generator.maxBurnTime > 0){
int i = this.generator.getBurningScaled(13); int i = this.generator.getBurningScaled(13);
this.drawTexturedModalRect(this.guiLeft+72, this.guiTop+44+12-i, 176, 96-i, 14, i); this.drawTexturedModalRect(this.guiLeft+72, this.guiTop+44+12-i, 176, 96-i, 14, i);
} }
if(this.generator.currentEnergyProduce > 0){ if(this.generator.maxBurnTime > 0 && this.generator.currentEnergyProduce > 0){
this.drawCenteredString(this.fontRendererObj, this.generator.currentEnergyProduce+" RF/t", this.guiLeft+87, this.guiTop+75, 0xFFFFFF); this.drawCenteredString(this.fontRendererObj, this.generator.currentEnergyProduce+" RF/t", this.guiLeft+87, this.guiTop+65, 0xFFFFFF);
this.drawCenteredString(this.fontRendererObj, "for "+this.generator.maxBurnTime+" t", this.guiLeft+87, this.guiTop+75, 0xFFFFFF);
} }
this.energy.draw(); this.energy.draw();

View file

@ -12,18 +12,19 @@ package de.ellpeck.actuallyadditions.mod.tile;
import cofh.api.energy.EnergyStorage; import cofh.api.energy.EnergyStorage;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.recipe.OilGenRecipe;
import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraftforge.fluids.*; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidTankProperties;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
public class TileEntityOilGenerator extends TileEntityBase implements ISharingEnergyProvider, ISharingFluidHandler{ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEnergyProvider, ISharingFluidHandler{
private static final int BURN_TIME = 100;
public final EnergyStorage storage = new EnergyStorage(50000); public final EnergyStorage storage = new EnergyStorage(50000);
public final FluidTank tank = new FluidTank(2*Util.BUCKET){ public final FluidTank tank = new FluidTank(2*Util.BUCKET){
@Override @Override
@ -34,14 +35,16 @@ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEn
@Override @Override
public boolean canFillFluidType(FluidStack stack){ public boolean canFillFluidType(FluidStack stack){
Fluid fluid = stack.getFluid(); Fluid fluid = stack.getFluid();
return fluid != null && ActuallyAdditionsAPI.OIL_GENERATOR_RECIPES.containsKey(fluid.getName()); return fluid != null && getRecipeForFluid(fluid.getName()) != null;
} }
}; };
public int currentEnergyProduce; public int currentEnergyProduce;
public int currentBurnTime; public int currentBurnTime;
public int maxBurnTime;
private int lastEnergy; private int lastEnergy;
private int lastTank; private int lastTank;
private int lastBurnTime; private int lastBurnTime;
private int lastMaxBurnTime;
private int lastEnergyProduce; private int lastEnergyProduce;
public TileEntityOilGenerator(){ public TileEntityOilGenerator(){
@ -50,7 +53,29 @@ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEn
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public int getBurningScaled(int i){ public int getBurningScaled(int i){
return this.currentBurnTime*i/BURN_TIME; return this.currentBurnTime*i/this.maxBurnTime;
}
private OilGenRecipe getRecipeForCurrentFluid(){
FluidStack stack = this.tank.getFluid();
if(stack != null){
Fluid fluid = stack.getFluid();
if(fluid != null){
return getRecipeForFluid(fluid.getName());
}
}
return null;
}
private static OilGenRecipe getRecipeForFluid(String fluidName){
if(fluidName != null){
for(OilGenRecipe recipe : ActuallyAdditionsAPI.OIL_GENERATOR_RECIPES){
if(recipe != null && fluidName.equals(recipe.fluidName)){
return recipe;
}
}
}
return null;
} }
@Override @Override
@ -58,6 +83,7 @@ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEn
if(type != NBTType.SAVE_BLOCK){ if(type != NBTType.SAVE_BLOCK){
compound.setInteger("BurnTime", this.currentBurnTime); compound.setInteger("BurnTime", this.currentBurnTime);
compound.setInteger("CurrentEnergy", this.currentEnergyProduce); compound.setInteger("CurrentEnergy", this.currentEnergyProduce);
compound.setInteger("MaxBurnTime", this.maxBurnTime);
} }
this.storage.writeToNBT(compound); this.storage.writeToNBT(compound);
this.tank.writeToNBT(compound); this.tank.writeToNBT(compound);
@ -69,6 +95,7 @@ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEn
if(type != NBTType.SAVE_BLOCK){ if(type != NBTType.SAVE_BLOCK){
this.currentBurnTime = compound.getInteger("BurnTime"); this.currentBurnTime = compound.getInteger("BurnTime");
this.currentEnergyProduce = compound.getInteger("CurrentEnergy"); this.currentEnergyProduce = compound.getInteger("CurrentEnergy");
this.maxBurnTime = compound.getInteger("MaxBurnTime");
} }
this.storage.readFromNBT(compound); this.storage.readFromNBT(compound);
this.tank.readFromNBT(compound); this.tank.readFromNBT(compound);
@ -86,15 +113,20 @@ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEn
this.storage.receiveEnergy(this.currentEnergyProduce, false); this.storage.receiveEnergy(this.currentEnergyProduce, false);
} }
else{ else{
this.currentEnergyProduce = this.getEnergyForCurrentFluid();
int fuelUsed = 50; int fuelUsed = 50;
if(this.storage.getEnergyStored() < this.storage.getMaxEnergyStored() && this.tank.getFluidAmount() >= fuelUsed){
this.currentBurnTime = BURN_TIME; OilGenRecipe recipe = this.getRecipeForCurrentFluid();
if(recipe != null && this.storage.getEnergyStored() < this.storage.getMaxEnergyStored() && this.tank.getFluidAmount() >= fuelUsed){
this.currentEnergyProduce = recipe.genAmount;
this.maxBurnTime = recipe.genTime;
this.currentBurnTime = this.maxBurnTime;
this.tank.drainInternal(fuelUsed, true); this.tank.drainInternal(fuelUsed, true);
} }
else{ else{
this.currentEnergyProduce = 0;
this.currentBurnTime = 0; this.currentBurnTime = 0;
this.maxBurnTime = 0;
} }
} }
@ -102,26 +134,16 @@ public class TileEntityOilGenerator extends TileEntityBase implements ISharingEn
this.markDirty(); this.markDirty();
} }
if((this.storage.getEnergyStored() != this.lastEnergy || this.tank.getFluidAmount() != this.lastTank || this.lastBurnTime != this.currentBurnTime || this.lastEnergyProduce != this.currentEnergyProduce) && this.sendUpdateWithInterval()){ if((this.storage.getEnergyStored() != this.lastEnergy || this.tank.getFluidAmount() != this.lastTank || this.lastBurnTime != this.currentBurnTime || this.lastEnergyProduce != this.currentEnergyProduce || this.lastMaxBurnTime != this.maxBurnTime) && this.sendUpdateWithInterval()){
this.lastEnergy = this.storage.getEnergyStored(); this.lastEnergy = this.storage.getEnergyStored();
this.lastTank = this.tank.getFluidAmount(); this.lastTank = this.tank.getFluidAmount();
this.lastBurnTime = this.currentBurnTime; this.lastBurnTime = this.currentBurnTime;
this.lastEnergyProduce = this.currentEnergyProduce; this.lastEnergyProduce = this.currentEnergyProduce;
this.lastMaxBurnTime = this.maxBurnTime;
} }
} }
} }
private int getEnergyForCurrentFluid(){
FluidStack stack = this.tank.getFluid();
if(stack != null){
Fluid fluid = stack.getFluid();
if(fluid != null){
return ActuallyAdditionsAPI.OIL_GENERATOR_RECIPES.get(fluid.getName());
}
}
return 0;
}
@Override @Override
public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate){ public int extractEnergy(EnumFacing from, int maxExtract, boolean simulate){
return this.storage.extractEnergy(maxExtract, simulate); return this.storage.extractEnergy(maxExtract, simulate);