Added a crafting cooldown on IAltar, so that outside blocks may request the altar to not perform work while it is not active.

This commit is contained in:
WayofTime 2015-02-27 08:31:39 -05:00
parent 8fbb19acc0
commit 39e3d6eb34
14 changed files with 57 additions and 26 deletions

View file

@ -11,10 +11,10 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitDefault;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitIgnMeta;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitMatchNBT;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogicLimitModItems;
import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitDefault;
import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitIgnMeta;
import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitMatchNBT;
import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicLimitModItems;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

View file

@ -0,0 +1,13 @@
package WayofTime.alchemicalWizardry.common.routing;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
import net.minecraft.item.ItemStack;
public class RoutingFocusLogicIgnMeta extends RoutingFocusLogic
{
@Override
public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack)
{
return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() : false);
}
}

View file

@ -0,0 +1,12 @@
package WayofTime.alchemicalWizardry.common.routing;
import WayofTime.alchemicalWizardry.api.ILimitingLogic;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
public class RoutingFocusLogicLimit extends RoutingFocusLogic implements ILimitingLogic
{
public int getRoutingLimit()
{
return 0;
}
}

View file

@ -0,0 +1,26 @@
package WayofTime.alchemicalWizardry.common.routing;
import net.minecraft.item.ItemStack;
import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus;
public class RoutingFocusLogicLimitDefault extends RoutingFocusLogicLimit
{
public int limit = 0;
public RoutingFocusLogicLimitDefault(ItemStack stack)
{
if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus)
{
limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack);
}else
{
limit = 0;
}
}
@Override
public int getRoutingLimit()
{
return limit;
}
}

View file

@ -0,0 +1,27 @@
package WayofTime.alchemicalWizardry.common.routing;
import net.minecraft.item.ItemStack;
import WayofTime.alchemicalWizardry.api.ILimitingLogic;
import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus;
public class RoutingFocusLogicLimitIgnMeta extends RoutingFocusLogicIgnMeta implements ILimitingLogic
{
public int limit = 0;
public RoutingFocusLogicLimitIgnMeta(ItemStack stack)
{
if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus)
{
limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack);
}else
{
limit = 0;
}
}
@Override
public int getRoutingLimit()
{
return limit;
}
}

View file

@ -0,0 +1,27 @@
package WayofTime.alchemicalWizardry.common.routing;
import net.minecraft.item.ItemStack;
import WayofTime.alchemicalWizardry.api.ILimitingLogic;
import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus;
public class RoutingFocusLogicLimitMatchNBT extends RoutingFocusLogicMatchNBT implements ILimitingLogic
{
public int limit = 0;
public RoutingFocusLogicLimitMatchNBT(ItemStack stack)
{
if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus)
{
limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack);
}else
{
limit = 0;
}
}
@Override
public int getRoutingLimit()
{
return limit;
}
}

View file

@ -0,0 +1,27 @@
package WayofTime.alchemicalWizardry.common.routing;
import net.minecraft.item.ItemStack;
import WayofTime.alchemicalWizardry.api.ILimitingLogic;
import WayofTime.alchemicalWizardry.common.items.routing.ILimitedRoutingFocus;
public class RoutingFocusLogicLimitModItems extends RoutingFocusLogicModItems implements ILimitingLogic
{
public int limit = 0;
public RoutingFocusLogicLimitModItems(ItemStack stack)
{
if(stack != null && stack.getItem() instanceof ILimitedRoutingFocus)
{
limit = ((ILimitedRoutingFocus)stack.getItem()).getRoutingFocusLimit(stack);
}else
{
limit = 0;
}
}
@Override
public int getRoutingLimit()
{
return limit;
}
}

View file

@ -0,0 +1,18 @@
package WayofTime.alchemicalWizardry.common.routing;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
import net.minecraft.item.ItemStack;
public class RoutingFocusLogicMatchNBT extends RoutingFocusLogic
{
public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack)
{
return (keyStack != null ? checkedStack != null && keyStack.getItem() == checkedStack.getItem() && (keyStack.getItem().getHasSubtypes() ? keyStack.getItemDamage() == checkedStack.getItemDamage() : true) && keyStack.areItemStackTagsEqual(keyStack, checkedStack) : false);
}
@Override
public boolean doesItemMatch(boolean previous, ItemStack keyStack, ItemStack checkedStack)
{
return previous && this.getDefaultMatch(keyStack, checkedStack);
}
}

View file

@ -0,0 +1,22 @@
package WayofTime.alchemicalWizardry.common.routing;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
public class RoutingFocusLogicModItems extends RoutingFocusLogic
{
@Override
public boolean getDefaultMatch(ItemStack keyStack, ItemStack checkedStack)
{
if(keyStack != null && checkedStack != null)
{
UniqueIdentifier keyId = GameRegistry.findUniqueIdentifierFor(keyStack.getItem());
UniqueIdentifier checkedId = GameRegistry.findUniqueIdentifierFor(checkedStack.getItem());
return keyId.modId.equals(checkedId.modId);
}
return false;
}
}

View file

@ -1,8 +1,8 @@
package WayofTime.alchemicalWizardry.common.spell.complex.effect;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogic;
import WayofTime.alchemicalWizardry.api.RoutingFocusLogicModItems;
import WayofTime.alchemicalWizardry.common.items.routing.OutputRoutingFocus;
import WayofTime.alchemicalWizardry.common.routing.RoutingFocusLogicModItems;
public class OutputRoutingFocusModItems extends OutputRoutingFocus
{

View file

@ -36,8 +36,6 @@ import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.AltarUpgradeCompone
import WayofTime.alchemicalWizardry.common.bloodAltarUpgrade.UpgradedAltars;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper;
import com.ibm.icu.text.MessageFormat;
public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFluidHandler, IBloodAltar
{
public static final int sizeInv = 1;
@ -70,6 +68,8 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui
private int lockdownDuration;
private int demonBloodDuration;
private int cooldownAfterCrafting = 0;
public TEAltar()
{
@ -192,6 +192,7 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui
lockdownDuration = par1NBTTagCompound.getInteger("lockdownDuration");
accelerationUpgrades = par1NBTTagCompound.getInteger("accelerationUpgrades");
demonBloodDuration = par1NBTTagCompound.getInteger("demonBloodDuration");
cooldownAfterCrafting = par1NBTTagCompound.getInteger("cooldownAfterCrafting");
}
public void setMainFluid(FluidStack fluid)
@ -271,6 +272,7 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui
par1NBTTagCompound.setInteger("lockdownDuration", lockdownDuration);
par1NBTTagCompound.setInteger("accelerationUpgrades", this.accelerationUpgrades);
par1NBTTagCompound.setInteger("demonBloodDuration", demonBloodDuration);
par1NBTTagCompound.setInteger("cooldownAfterCrafting", cooldownAfterCrafting);
}
@Override
@ -646,13 +648,17 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui
this.fluid.amount -= fluidOutputted;
}
if (worldObj.getWorldTime() % 100 == 0)
if (worldObj.getWorldTime() % 100 == 0 && this.cooldownAfterCrafting <= 0)
{
startCycle();
}
if (!isActive)
{
if(cooldownAfterCrafting > 0)
{
cooldownAfterCrafting--;
}
return;
}
@ -1076,4 +1082,13 @@ public class TEAltar extends TileEntity implements IInventory, IFluidTank, IFlui
player.addChatMessage(new ChatComponentText(String.format(StatCollector.translateToLocal("message.altar.inputtank"), this.fluidInput.amount)));
player.addChatMessage(new ChatComponentText(String.format(StatCollector.translateToLocal("message.altar.outputtank"), this.fluidOutput.amount)));
}
@Override
public void requestPauseAfterCrafting(int amount)
{
if(this.isActive)
{
this.cooldownAfterCrafting = amount;
}
}
}