Compare commits

...
12 Commits
44 changed files with 523 additions and 245 deletions

No files matched your search

+4
View File
@@ -55,6 +55,9 @@ sourceSets {
}
repositories {
maven {
url 'http://maven.epoxide.xyz'
}
maven {
url "http://dvs1.progwml6.com/files/maven"
}
@@ -65,6 +68,7 @@ repositories {
}
dependencies {
deobfCompile "net.darkhax.tesla:Tesla:${tesla_version}"
deobfCompile "mezz.jei:jei_${mcversion}:${jei_version}:api"
runtime "mezz.jei:jei_${mcversion}:${jei_version}"
deobfCompile "net.industrial-craft:industrialcraft-2:${ic2_version}:api"
+6 -5
View File
@@ -1,10 +1,11 @@
mcversion=1.10
forgeversion=12.18.0.1989-1.10.0
mcversion=1.10.2
forgeversion=12.18.0.2005-1.10.0
mcp_mappings=snapshot_20160525
jei_version=3.7.0.+
ic2_version=2.5.5-ex19
tesla_version=1.9.4-1.1.0.24
jei_version=3.7.3.221
ic2_version=2.6.5-ex110
version_major=5
version_minor=1
version_patch=7
version_patch=10
+2 -2
View File
@@ -1,6 +1,6 @@
#Tue Jun 21 15:23:47 PDT 2016
#Mon Sep 14 12:28:28 PDT 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-bin.zip
@@ -5,6 +5,8 @@
******************************************************************************/
package forestry.api.apiculture;
import javax.annotation.Nonnull;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
@@ -32,6 +34,7 @@ public interface IBeeHousing extends IHousing, IErrorLogicSource {
*/
Iterable<IBeeListener> getBeeListeners();
@Nonnull
IBeeHousingInventory getBeeInventory();
IBeekeepingLogic getBeekeepingLogic();
@@ -11,6 +11,7 @@
package forestry.apiculture;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@@ -233,7 +234,7 @@ public class BeekeepingLogic implements IBeekeepingLogic, IStreamable {
if (beeType == EnumBeeType.PRINCESS) {
tickBreed();
} else if (beeType == EnumBeeType.QUEEN) {
queenWorkTick(queen);
queenWorkTick(queen, queenStack);
}
}
@@ -246,7 +247,7 @@ public class BeekeepingLogic implements IBeekeepingLogic, IStreamable {
}
}
private void queenWorkTick(IBee queen) {
private void queenWorkTick(@Nullable IBee queen, @Nonnull ItemStack queenStack) {
if (queen == null) {
beeProgress = 0;
beeProgressMax = 0;
@@ -272,7 +273,8 @@ public class BeekeepingLogic implements IBeekeepingLogic, IStreamable {
// Write the changed queen back into the item stack.
NBTTagCompound nbttagcompound = new NBTTagCompound();
queen.writeToNBT(nbttagcompound);
housing.getBeeInventory().getQueen().setTagCompound(nbttagcompound);
queenStack.setTagCompound(nbttagcompound);
housing.getBeeInventory().setQueen(queenStack);
}
beeProgress = queen.getHealth();
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.entities;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -36,8 +37,11 @@ import forestry.core.config.Config;
import forestry.core.inventory.IInventoryAdapter;
public class EntityMinecartApiary extends EntityMinecartBeeHousingBase implements IApiary {
@Nonnull
private static final IBeeModifier beeModifier = new ApiaryBeeModifier();
@Nonnull
private final IBeeListener beeListener = new ApiaryBeeListener(this);
@Nonnull
private final InventoryApiary inventory = new InventoryApiary(getAccessHandler());
@SuppressWarnings("unused")
@@ -64,6 +68,7 @@ public class EntityMinecartApiary extends EntityMinecartBeeHousingBase implement
return inventory;
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return inventory;
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.entities;
import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
@@ -72,6 +73,7 @@ public class EntityMinecartBeehouse extends EntityMinecartBeeHousingBase {
return Collections.singleton(beeListener);
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return beeInventory;
@@ -53,6 +53,7 @@ import forestry.core.utils.Translator;
public class AlvearyController extends RectangularMultiblockControllerBase implements IAlvearyControllerInternal, IClimateControlled {
@Nonnull
private final InventoryBeeHousing inventory;
private final IBeekeepingLogic beekeepingLogic;
@@ -77,6 +78,7 @@ public class AlvearyController extends RectangularMultiblockControllerBase imple
this.beeModifiers.add(new AlvearyBeeModifier());
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return inventory;
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.multiblock;
import javax.annotation.Nonnull;
import java.util.Collections;
import net.minecraft.util.math.BlockPos;
@@ -45,6 +46,7 @@ public class FakeAlvearyController extends FakeMultiblockController implements I
return Collections.emptyList();
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return FakeBeeHousingInventory.instance;
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.multiblock;
import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.List;
@@ -99,6 +100,7 @@ public abstract class TileAlveary extends MultiblockTileEntityForestry<Multibloc
return getMultiblockLogic().getController().getBeeListeners();
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return getMultiblockLogic().getController().getBeeInventory();
@@ -11,6 +11,7 @@
package forestry.apiculture.multiblock;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
@@ -23,6 +24,7 @@ import forestry.core.tiles.IActivatable;
import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyReceiver;
import net.minecraftforge.common.capabilities.Capability;
public abstract class TileAlvearyClimatiser extends TileAlveary implements IEnergyReceiver, IActivatable, IAlvearyComponent.Climatiser {
@@ -143,4 +145,18 @@ public abstract class TileAlvearyClimatiser extends TileAlveary implements IEner
return energyManager.canConnectEnergy(from);
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return energyManager.hasCapability(capability) || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
T energyCapability = energyManager.getCapability(capability);
if (energyCapability != null) {
return energyCapability;
}
return super.getCapability(capability, facing);
}
}
@@ -1,10 +1,13 @@
package forestry.apiculture.tiles;
import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
import forestry.api.apiculture.IBeeHousingInventory;
public class FakeBeeHousingInventory implements IBeeHousingInventory {
@Nonnull
public static final FakeBeeHousingInventory instance = new FakeBeeHousingInventory();
private FakeBeeHousingInventory() {
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.tiles;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -30,8 +31,11 @@ import forestry.apiculture.inventory.IApiaryInventory;
import forestry.apiculture.inventory.InventoryApiary;
public class TileApiary extends TileBeeHousingBase implements IApiary {
@Nonnull
private final IBeeModifier beeModifier = new ApiaryBeeModifier();
@Nonnull
private final IBeeListener beeListener = new ApiaryBeeListener(this);
@Nonnull
private final InventoryApiary inventory = new InventoryApiary(getAccessHandler());
public TileApiary() {
@@ -39,6 +43,7 @@ public class TileApiary extends TileBeeHousingBase implements IApiary {
setInternalInventory(inventory);
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return inventory;
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.apiculture.tiles;
import javax.annotation.Nonnull;
import java.util.Collections;
import net.minecraft.entity.player.EntityPlayer;
@@ -24,9 +25,12 @@ import forestry.apiculture.gui.ContainerBeeHousing;
import forestry.apiculture.gui.GuiBeeHousing;
public class TileBeeHouse extends TileBeeHousingBase {
@Nonnull
private static final IBeeModifier beeModifier = new BeehouseBeeModifier();
@Nonnull
private final IBeeListener beeListener;
@Nonnull
private final InventoryBeeHousing beeInventory;
public TileBeeHouse() {
@@ -38,6 +42,7 @@ public class TileBeeHouse extends TileBeeHousingBase {
setInternalInventory(beeInventory);
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return beeInventory;
@@ -15,26 +15,8 @@ import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ITickable;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import com.google.common.base.Predicate;
import com.mojang.authlib.GameProfile;
import forestry.api.apiculture.BeeManager;
import forestry.api.apiculture.IBee;
import forestry.api.apiculture.IBeeGenome;
@@ -62,9 +44,41 @@ import forestry.core.tiles.IActivatable;
import forestry.core.utils.DamageSourceForestry;
import forestry.core.utils.InventoryUtil;
import forestry.core.utils.ItemStackUtil;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.IMob;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ITickable;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
public class TileHive extends TileEntity implements ITickable, IHiveTile, IActivatable, IBeeHousing {
private static final DamageSource damageSourceBeeHive = new DamageSourceForestry("bee.hive");
private static final Predicate<EntityLivingBase> BEE_TARGET_PREDICATE = new Predicate<EntityLivingBase>() {
@Override
public boolean apply(@Nullable EntityLivingBase input) {
if (input != null && input.isEntityAlive() && !input.isInvisible()) {
if (input instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) input;
return !player.isSpectator() && !player.isCreative();
} else if (input instanceof IMob) {
return true;
}
}
return false;
}
};
@Nonnull
private final InventoryAdapter contained = new InventoryAdapter(2, "Contained");
@@ -113,7 +127,7 @@ public class TileHive extends TileEntity implements ITickable, IHiveTile, IActiv
if (calmTime == 0) {
if (canWork) {
AxisAlignedBB boundingBox = AlleleEffect.getBounding(getContainedBee().getGenome(), this);
List<EntityLivingBase> entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, boundingBox);
List<EntityLivingBase> entities = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, boundingBox, BEE_TARGET_PREDICATE);
if (!entities.isEmpty()) {
Collections.shuffle(entities);
EntityLivingBase entity = entities.get(0);
@@ -293,6 +307,7 @@ public class TileHive extends TileEntity implements ITickable, IHiveTile, IActiv
return Collections.emptyList();
}
@Nonnull
@Override
public IBeeHousingInventory getBeeInventory() {
return inventory;
@@ -101,7 +101,6 @@ public class BlockArbDoor extends BlockDoor implements IWoodTyped, IItemModelReg
}
@Override
@SideOnly(Side.CLIENT)
public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state) {
return new ItemStack(getItem());
}
@@ -113,7 +113,7 @@ public abstract class AlleleSpecies extends Allele implements IAlleleSpeciesBuil
@Override
public ItemStack[] getResearchBounty(World world, GameProfile researcher, IIndividual individual, int bountyLevel) {
if (world.rand.nextFloat() < bountyLevel / 32.0f) {
if (world.rand.nextFloat() < bountyLevel / 16.0f) {
List<? extends IMutation> allMutations = getRoot().getCombinations(this);
if (!allMutations.isEmpty()) {
List<IMutation> unresearchedMutations = new ArrayList<>();
+9 -17
View File
@@ -15,6 +15,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Stack;
import forestry.api.genetics.IGenome;
import org.apache.commons.lang3.StringUtils;
import net.minecraft.client.renderer.GlStateManager;
@@ -292,17 +293,9 @@ public class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory> {
RenderHelper.enableGUIStandardItemLighting();
HashMap<IMutation, IAllele> combinations = new HashMap<>();
ISpeciesRoot speciesRoot = individual.getGenome().getSpeciesRoot();
for (IMutation mutation : speciesRoot.getCombinations(individual.getGenome().getPrimary())) {
combinations.put(mutation, individual.getGenome().getPrimary());
}
for (IMutation mutation : speciesRoot.getCombinations(individual.getGenome().getSecondary())) {
combinations.put(mutation, individual.getGenome().getSecondary());
}
IGenome genome = individual.getGenome();
ISpeciesRoot speciesRoot = genome.getSpeciesRoot();
IAlleleSpecies species = genome.getPrimary();
int columnWidth = 50;
int x = 0;
@@ -310,17 +303,16 @@ public class GuiAlyzer extends GuiForestry<ContainerAlyzer, IInventory> {
EntityPlayer player = Proxies.common.getPlayer();
IBreedingTracker breedingTracker = speciesRoot.getBreedingTracker(player.worldObj, player.getGameProfile());
for (Map.Entry<IMutation, IAllele> mutation : combinations.entrySet()) {
if (breedingTracker.isDiscovered(mutation.getKey())) {
drawMutationInfo(mutation.getKey(), mutation.getValue(), COLUMN_0 + x, breedingTracker);
for (IMutation mutation : speciesRoot.getCombinations(species)) {
if (breedingTracker.isDiscovered(mutation)) {
drawMutationInfo(mutation, species, COLUMN_0 + x, breedingTracker);
} else {
// Do not display secret undiscovered mutations.
if (mutation.getKey().isSecret()) {
if (mutation.isSecret()) {
continue;
}
drawUnknownMutation(mutation.getKey(), COLUMN_0 + x, breedingTracker);
drawUnknownMutation(mutation, COLUMN_0 + x, breedingTracker);
}
x += columnWidth;
@@ -65,7 +65,7 @@ public class ProxyCommon {
public boolean isOp(EntityPlayer player) {
MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
UserListOpsEntry userlistopsentry = server.getPlayerList().getOppedPlayers().getEntry(player.getGameProfile());
return userlistopsentry.getPermissionLevel() >= server.getOpPermissionLevel();
return userlistopsentry != null && userlistopsentry.getPermissionLevel() >= server.getOpPermissionLevel();
}
public double getBlockReachDistance(EntityPlayer entityplayer) {
@@ -11,6 +11,7 @@
package forestry.core.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -251,22 +252,17 @@ public class TileAnalyzer extends TilePowered implements ISidedInventory, ILiqui
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -11,6 +11,7 @@
package forestry.core.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.block.state.IBlockState;
@@ -33,6 +34,7 @@ import forestry.core.utils.BlockUtil;
import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyConnection;
import net.minecraftforge.common.capabilities.Capability;
public abstract class TileEngine extends TileBase implements IEnergyConnection, IActivatable {
private static final int CANT_SEND_ENERGY_TIME = 20;
@@ -294,4 +296,19 @@ public abstract class TileEngine extends TileBase implements IEnergyConnection,
public EnergyManager getEnergyManager() {
return energyManager;
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return energyManager.hasCapability(capability) || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
T energyCapability = energyManager.getCapability(capability);
if (energyCapability != null) {
return energyCapability;
}
return super.getCapability(capability, facing);
}
}
@@ -352,8 +352,9 @@ public abstract class TileForestry extends TileEntity implements IStreamable, IE
public void clear() {
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && inventory != null){
SidedInvWrapper sidedInvWrapper = new SidedInvWrapper(inventory, facing);
return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.cast(sidedInvWrapper);
@@ -362,8 +363,8 @@ public abstract class TileForestry extends TileEntity implements IStreamable, IE
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if(capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && inventory != null){
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY && inventory != null){
return true;
}
return super.hasCapability(capability, facing);
@@ -11,6 +11,7 @@
package forestry.core.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.nbt.NBTTagCompound;
@@ -27,6 +28,7 @@ import forestry.core.render.TankRenderInfo;
import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyReceiver;
import net.minecraftforge.common.capabilities.Capability;
//@Optional.Interface(iface = "buildcraft.api.tiles.IHasWork", modid = "BuildCraftAPI|tiles")
public abstract class TilePowered extends TileBase implements IRenderableTile, IEnergyReceiver, IPowerHandler, ISpeedUpgradable, IStreamableGui {
@@ -218,4 +220,19 @@ public abstract class TilePowered extends TileBase implements IRenderableTile, I
public boolean canConnectEnergy(EnumFacing from) {
return energyManager.canConnectEnergy(from);
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return energyManager.hasCapability(capability) || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
T energyCapability = energyManager.getCapability(capability);
if (energyCapability != null) {
return energyCapability;
}
return super.getCapability(capability, facing);
}
}
@@ -19,6 +19,7 @@ import cofh.api.energy.IEnergyReceiver;
import forestry.core.network.packets.PacketFXSignal;
import forestry.core.proxy.Proxies;
import forestry.core.tiles.TileEngine;
import forestry.energy.EnergyManager;
import net.minecraft.block.Block;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.BlockOldLog;
@@ -51,12 +52,19 @@ public abstract class BlockUtil {
}
public static boolean isEnergyReceiverOrEngine(EnumFacing side, TileEntity tile) {
if (!(tile instanceof IEnergyReceiver) && !(tile instanceof TileEngine)) {
return false;
}
if (tile != null) {
if (EnergyManager.TESLA_CONSUMER != null) {
if (tile.hasCapability(EnergyManager.TESLA_CONSUMER, side)) {
return true;
}
}
IEnergyConnection receptor = (IEnergyConnection) tile;
return receptor.canConnectEnergy(side);
if (tile instanceof IEnergyReceiver || (tile instanceof TileEngine)) {
IEnergyConnection receptor = (IEnergyConnection) tile;
return receptor.canConnectEnergy(side);
}
}
return false;
}
public static boolean tryPlantCocoaPod(World world, BlockPos pos) {
@@ -36,15 +36,6 @@ import forestry.plugins.ForestryPluginUids;
public abstract class InventoryUtil {
public static ItemStack depleteItem(ItemStack stack) {
if (stack.stackSize == 1) {
return stack.getItem().getContainerItem(stack);
} else {
stack.splitStack(1);
return stack;
}
}
public static boolean isWildcard(ItemStack stack) {
return stack.getItemDamage() == OreDictionary.WILDCARD_VALUE;
}
@@ -335,10 +335,6 @@ public abstract class ItemStackUtil {
* Compare two item stacks for crafting equivalency.
*/
public static boolean isCraftingEquivalent(ItemStack base, ItemStack comparison, boolean oreDictionary, boolean craftingTools) {
if (isCraftingEquivalent(base, comparison)) {
return true;
}
if (base == null || comparison == null) {
return false;
}
@@ -347,6 +343,10 @@ public abstract class ItemStackUtil {
return true;
}
if (isCraftingEquivalent(base, comparison)) {
return true;
}
if (base.hasTagCompound() && !base.getTagCompound().hasNoTags()) {
if (!ItemStack.areItemStacksEqual(base, comparison)) {
return false;
@@ -2,6 +2,9 @@ package forestry.energy;
import java.io.IOException;
import net.darkhax.tesla.api.ITeslaConsumer;
import net.darkhax.tesla.api.ITeslaHolder;
import net.darkhax.tesla.api.ITeslaProducer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
@@ -13,11 +16,25 @@ import forestry.core.network.IStreamable;
import forestry.core.tiles.TileEngine;
import forestry.core.utils.BlockUtil;
import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyProvider;
import cofh.api.energy.IEnergyReceiver;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.fml.common.Optional;
@Optional.InterfaceList({
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "Tesla"),
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaProducer", modid = "Tesla"),
@Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "Tesla")
})
public class EnergyManager implements IEnergyReceiver, ITeslaConsumer, ITeslaProducer, ITeslaHolder, IEnergyProvider, IStreamable {
@CapabilityInject(ITeslaConsumer.class)
public static Capability<ITeslaConsumer> TESLA_CONSUMER = null;
@CapabilityInject(ITeslaProducer.class)
public static Capability<ITeslaProducer> TESLA_PRODUCER = null;
@CapabilityInject(ITeslaHolder.class)
public static Capability<ITeslaHolder> TESLA_HOLDER = null;
public class EnergyManager implements IEnergyReceiver, IEnergyProvider, IStreamable {
private enum EnergyTransferMode {
EXTRACT, RECEIVE, BOTH
}
@@ -63,7 +80,6 @@ public class EnergyManager implements IEnergyReceiver, IEnergyProvider, IStreama
/* NBT */
public EnergyManager readFromNBT(NBTTagCompound nbt) {
NBTTagCompound energyManagerNBT = nbt.getCompoundTag("EnergyManager");
NBTTagCompound energyStorageNBT = energyManagerNBT.getCompoundTag("EnergyStorage");
energyStorage.readFromNBT(energyStorageNBT);
@@ -72,7 +88,6 @@ public class EnergyManager implements IEnergyReceiver, IEnergyProvider, IStreama
}
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
NBTTagCompound energyStorageNBT = new NBTTagCompound();
energyStorage.writeToNBT(energyStorageNBT);
@@ -188,16 +203,18 @@ public class EnergyManager implements IEnergyReceiver, IEnergyProvider, IStreama
*/
public int sendEnergy(EnumFacing orientation, TileEntity tile, int amount, boolean simulate) {
int sent = 0;
if (BlockUtil.isEnergyReceiverOrEngine(orientation.getOpposite(), tile)) {
if (tile != null) {
int extractable = energyStorage.extractEnergy(amount, true);
if (extractable > 0) {
if (tile instanceof IEnergyReceiver) {
EnumFacing side = orientation.getOpposite();
if (TESLA_CONSUMER != null && tile.hasCapability(TESLA_CONSUMER, side)) {
sent = sendEnergyTesla(tile, side, extractable, simulate);
} else if (tile instanceof IEnergyReceiver) {
IEnergyReceiver receptor = (IEnergyReceiver) tile;
sent = receptor.receiveEnergy(orientation.getOpposite(), extractable, simulate);
} else if (tile instanceof TileEngine) {
sent = receptor.receiveEnergy(side, extractable, simulate);
} else if (tile instanceof TileEngine) { // engine chaining
TileEngine receptor = (TileEngine) tile;
sent = receptor.getEnergyManager().receiveEnergy(orientation.getOpposite(), extractable, simulate);
sent = receptor.getEnergyManager().receiveEnergy(side, extractable, simulate);
}
energyStorage.extractEnergy(sent, simulate);
@@ -219,4 +236,62 @@ public class EnergyManager implements IEnergyReceiver, IEnergyProvider, IStreama
public void generateEnergy(int amount) {
energyStorage.modifyEnergyStored(amount);
}
public boolean hasCapability(Capability<?> capability) {
if (capability == TESLA_PRODUCER && canExtract()) {
return true;
} else if (capability == TESLA_CONSUMER && canReceive()) {
return true;
} else if (capability == TESLA_HOLDER) {
return true;
}
return false;
}
public <T> T getCapability(Capability<T> capability) {
if (capability == TESLA_PRODUCER && canExtract()) {
return TESLA_PRODUCER.cast(this);
} else if (capability == TESLA_CONSUMER && canReceive()) {
return TESLA_CONSUMER.cast(this);
} else if (capability == TESLA_HOLDER) {
return TESLA_HOLDER.cast(this);
}
return null;
}
@Optional.Method(modid = "Tesla")
public static int sendEnergyTesla(TileEntity tile, EnumFacing side, int amount, boolean simulate) {
ITeslaConsumer consumer = tile.getCapability(TESLA_CONSUMER, side);
return (int) consumer.givePower(amount, simulate);
}
@Optional.Method(modid = "Tesla")
@Override
public long givePower(long power, boolean simulated) {
if (!canReceive()) {
return 0;
}
return energyStorage.receiveEnergy(power, simulated);
}
@Optional.Method(modid = "Tesla")
@Override
public long takePower(long power, boolean simulated) {
if (!canExtract()) {
return 0;
}
return energyStorage.extractEnergy(power, simulated);
}
@Optional.Method(modid = "Tesla")
@Override
public long getStoredPower() {
return energyStorage.getEnergyStored();
}
@Optional.Method(modid = "Tesla")
@Override
public long getCapacity() {
return energyStorage.getMaxEnergyStored();
}
}
@@ -0,0 +1,129 @@
package forestry.energy;
import net.minecraft.nbt.NBTTagCompound;
public class EnergyStorage {
protected int energy;
protected int capacity;
protected int maxReceive;
protected int maxExtract;
public EnergyStorage(int capacity, int maxReceive, int maxExtract) {
this.capacity = capacity;
this.maxReceive = maxReceive;
this.maxExtract = maxExtract;
}
public EnergyStorage readFromNBT(NBTTagCompound nbt) {
this.energy = nbt.getInteger("Energy");
if (energy > capacity) {
energy = capacity;
}
return this;
}
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
if (energy < 0) {
energy = 0;
}
nbt.setInteger("Energy", energy);
return nbt;
}
public EnergyStorage setCapacity(int capacity) {
this.capacity = capacity;
if (energy > capacity) {
energy = capacity;
}
return this;
}
public EnergyStorage setMaxTransfer(int maxTransfer) {
setMaxReceive(maxTransfer);
setMaxExtract(maxTransfer);
return this;
}
public EnergyStorage setMaxReceive(int maxReceive) {
this.maxReceive = maxReceive;
return this;
}
public EnergyStorage setMaxExtract(int maxExtract) {
this.maxExtract = maxExtract;
return this;
}
public int getMaxReceive() {
return maxReceive;
}
public int getMaxExtract() {
return maxExtract;
}
/**
* This function is included to allow for server to client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers
* are guaranteed to have it.
*
* @param energy
*/
public void setEnergyStored(int energy) {
if (energy > capacity) {
this.energy = capacity;
} else if (energy < 0) {
this.energy = 0;
} else {
this.energy = energy;
}
}
/**
* This function is included to allow the containing tile to directly and efficiently modify the energy contained in the EnergyStorage. Do not rely on this
* externally, as not all IEnergyHandlers are guaranteed to have it.
*
* @param energy
*/
public void modifyEnergyStored(int energy) {
this.energy += energy;
if (this.energy > capacity) {
this.energy = capacity;
} else if (this.energy < 0) {
this.energy = 0;
}
}
/* IEnergyStorage */
public int receiveEnergy(long maxReceive, boolean simulate) {
int energyReceived = (int) Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
if (!simulate) {
energy += energyReceived;
}
return energyReceived;
}
public int extractEnergy(long maxExtract, boolean simulate) {
int energyExtracted = (int) Math.min(energy, Math.min(this.maxExtract, maxExtract));
if (!simulate) {
energy -= energyExtracted;
}
return energyExtracted;
}
public int getEnergyStored() {
return energy;
}
public int getMaxEnergyStored() {
return capacity;
}
}
@@ -11,8 +11,10 @@
package forestry.energy.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import forestry.energy.EnergyManager;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IContainerListener;
@@ -293,22 +295,17 @@ public class TileEngineBiogas extends TileEngine implements ISidedInventory, ILi
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -11,6 +11,7 @@
package forestry.energy.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -215,15 +216,16 @@ public class TileEuGenerator extends TileBase implements ISidedInventory, ILiqui
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -167,22 +168,17 @@ public class TileBottler extends TilePowered implements ISidedInventory, ILiquid
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
/* ITRIGGERPROVIDER */
@@ -250,22 +250,17 @@ public class TileCarpenter extends TilePowered implements ISidedInventory, ILiqu
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -320,22 +321,17 @@ public class TileFabricator extends TilePowered implements ISlotPickupWatcher, I
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -324,21 +325,16 @@ public class TileFermenter extends TilePowered implements ISidedInventory, ILiqu
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
}
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import java.util.ArrayList;
@@ -520,21 +521,16 @@ public class TileMoistener extends TileBase implements ISidedInventory, ILiquidT
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
}
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -161,22 +162,17 @@ public class TileRaintank extends TileBase implements ISidedInventory, ILiquidTa
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -257,22 +258,17 @@ public class TileSqueezer extends TilePowered implements ISocketable, ISidedInve
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -11,6 +11,7 @@
package forestry.factory.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -187,22 +188,17 @@ public class TileStill extends TilePowered implements ISidedInventory, ILiquidTa
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return true;
}
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY;
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (super.hasCapability(capability, facing)) {
return super.getCapability(capability, facing);
}
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) {
return CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY.cast(tankManager);
}
return null;
return super.getCapability(capability, facing);
}
@Override
@@ -14,13 +14,6 @@ import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeHooks;
import forestry.core.inventory.InventoryAdapterTile;
import forestry.core.inventory.wrappers.InventoryMapper;
import forestry.core.network.DataInputStreamForestry;
@@ -36,6 +29,12 @@ import forestry.factory.inventory.InventoryGhostCrafting;
import forestry.factory.inventory.InventoryWorktable;
import forestry.factory.recipes.MemorizedRecipe;
import forestry.factory.recipes.RecipeMemory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeHooks;
public class TileWorktable extends TileBase implements ICrafterWorktable {
private RecipeMemory recipeMemory;
@@ -157,30 +156,15 @@ public class TileWorktable extends TileBase implements ICrafterWorktable {
@Override
public void onCraftingComplete(EntityPlayer player) {
IInventory craftingInventory = getCraftingDisplay();
for (int i = 0; i < craftingInventory.getSizeInventory(); ++i) {
ItemStack itemStack = craftingInventory.getStackInSlot(i);
if (itemStack == null) {
continue;
}
ForgeHooks.setCraftingPlayer(player);
ItemStack[] remainingItems = CraftingManager.getInstance().getRemainingItems(currentRecipe.getCraftMatrix(), player.worldObj);
ForgeHooks.setCraftingPlayer(null);
ItemStack container = null;
if (itemStack.getItem().hasContainerItem(itemStack)) {
container = ForgeHooks.getContainerItem(itemStack);
} else if (itemStack.stackSize > 1) {
// TerraFirmaCraft's crafting event handler does some tricky stuff with its tools.
// It sets the tool's stack size to 2 instead of using a container.
container = ItemStackUtil.createSplitStack(itemStack, itemStack.stackSize - 1);
itemStack.stackSize = 1;
}
if (container == null) {
continue;
}
if (!InventoryUtil.tryAddStack(this, container, true)) {
player.dropItem(container, false);
for (ItemStack remainingItem : remainingItems) {
if (remainingItem != null) {
if (!InventoryUtil.tryAddStack(this, remainingItem, true)) {
player.dropItem(remainingItem, false);
}
}
}
@@ -192,8 +192,7 @@ public class BlockFarm extends BlockStructure {
@Override
public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, EnumFacing side) {
IBlockState blockState = world.getBlockState(pos);
return blockState.getValue(META) == EnumFarmBlockType.CONTROL;
return state.getValue(META) == EnumFarmBlockType.CONTROL;
}
public ItemStack get(EnumFarmBlockType type, int amount) {
@@ -483,11 +483,6 @@ public class FarmController extends RectangularMultiblockControllerBase implemen
continue;
}
// Allow listeners to cancel this cycle.
if (isCycleCanceledByListeners(logic, farmSide, farmListeners)) {
continue;
}
// Always try to collect windfall.
if (collectWindfall(logic)) {
farmWorkStatus.didWork = true;
@@ -504,7 +499,7 @@ public class FarmController extends RectangularMultiblockControllerBase implemen
harvestProvider = logic;
}
} else if (stage == Stage.CULTIVATE) {
farmWorkStatus = cultivateTargets(farmWorkStatus, farmTargets, logic);
farmWorkStatus = cultivateTargets(farmWorkStatus, farmTargets, logic, farmSide);
}
if (farmWorkStatus.didWork) {
@@ -622,31 +617,37 @@ public class FarmController extends RectangularMultiblockControllerBase implemen
private static class FarmWorkStatus {
public boolean didWork = false;
public boolean hasFarmland = false;
public boolean hasFertilizer = false;
public boolean hasLiquid = false;
public boolean hasFertilizer = true;
public boolean hasLiquid = true;
}
private FarmWorkStatus cultivateTargets(FarmWorkStatus farmWorkStatus, List<FarmTarget> farmTargets, IFarmLogic logic) {
float hydrationModifier = hydrationManager.getHydrationModifier();
final int fertilizerConsumption = logic.getFertilizerConsumption();
int liquidConsumption = logic.getWaterConsumption(hydrationModifier);
FluidStack liquid = new FluidStack(FluidRegistry.WATER, liquidConsumption);
private FarmWorkStatus cultivateTargets(FarmWorkStatus farmWorkStatus, List<FarmTarget> farmTargets, IFarmLogic logic, FarmDirection farmSide) {
boolean hasFarmland = false;
if (farmTargets != null) {
for (FarmTarget target : farmTargets) {
if (target.getExtent() <= 0) {
break;
} else {
if (target.getExtent() > 0) {
hasFarmland = true;
farmWorkStatus.hasFarmland = true;
break;
}
}
}
if (hasFarmland && !isCycleCanceledByListeners(logic, farmSide, farmListeners)) {
final float hydrationModifier = hydrationManager.getHydrationModifier();
final int fertilizerConsumption = logic.getFertilizerConsumption();
final int liquidConsumption = logic.getWaterConsumption(hydrationModifier);
final FluidStack liquid = new FluidStack(FluidRegistry.WATER, liquidConsumption);
for (FarmTarget target : farmTargets) {
// Check fertilizer and water
if (!fertilizerManager.hasFertilizer(fertilizerConsumption)) {
farmWorkStatus.hasFertilizer = false;
continue;
}
if (liquid.amount > 0 && !hasLiquid(liquid)) {
farmWorkStatus.hasLiquid = false;
continue;
}
@@ -660,9 +661,6 @@ public class FarmController extends RectangularMultiblockControllerBase implemen
}
}
farmWorkStatus.hasLiquid = liquid.amount <= 0 || hasLiquid(liquid);
farmWorkStatus.hasFertilizer = fertilizerManager.hasFertilizer(fertilizerConsumption);
return farmWorkStatus;
}
@@ -10,6 +10,8 @@
******************************************************************************/
package forestry.farming.tiles;
import forestry.farming.blocks.BlockFarm;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -42,15 +44,11 @@ public class TileFarmControl extends TileFarm implements IFarmComponent.Listener
@Override
public boolean cancelTask(IFarmLogic logic, FarmDirection direction) {
return hasRedstoneSignal(direction.getFacing()) || hasRedstoneSignal(EnumFacing.UP) || hasRedstoneSignal(EnumFacing.DOWN);
}
private boolean hasRedstoneSignal(EnumFacing direction) {
BlockPos side = tile.getPos().offset(direction);
EnumFacing dir = direction.getOpposite();
World world = tile.getWorld();
return world.getRedstonePower(side, dir) > 0 || world.getStrongPower(side, dir) > 0;
BlockPos pos = tile.getPos();
EnumFacing facing = direction.getFacing();
World world = tile.getWorldObj();
IBlockState blockState = world.getBlockState(pos.offset(facing));
return !(blockState.getBlock() instanceof BlockFarm) && world.getRedstonePower(pos, facing) > 0;
}
}
@@ -11,6 +11,7 @@
package forestry.farming.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
@@ -21,6 +22,7 @@ import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyHandler;
import cofh.api.energy.IEnergyReceiver;
import net.minecraftforge.common.capabilities.Capability;
public class TileFarmGearbox extends TileFarm implements IEnergyReceiver, IEnergyHandler, IFarmComponent.Active {
@@ -117,4 +119,18 @@ public class TileFarmGearbox extends TileFarm implements IEnergyReceiver, IEnerg
return energyManager.canConnectEnergy(from);
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return energyManager.hasCapability(capability) || super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
T energyCapability = energyManager.getCapability(capability);
if (energyCapability != null) {
return energyCapability;
}
return super.getCapability(capability, facing);
}
}
@@ -10,12 +10,16 @@
******************************************************************************/
package forestry.greenhouse.tiles;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.util.EnumFacing;
import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyHandler;
import cofh.api.energy.IEnergyReceiver;
import net.minecraftforge.common.capabilities.Capability;
public class TileGreenhouseGearbox extends TileGreenhouse implements IEnergyReceiver, IEnergyHandler {
@@ -59,4 +63,25 @@ public class TileGreenhouseGearbox extends TileGreenhouse implements IEnergyRece
return getMultiblockLogic().getController().getEnergyManager();
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
EnergyManager energyManager = getEnergyManager();
if (energyManager != null && energyManager.hasCapability(capability)) {
return true;
}
return super.hasCapability(capability, facing);
}
@Nonnull
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
EnergyManager energyManager = getEnergyManager();
if (energyManager != null) {
T energyCapability = energyManager.getCapability(capability);
if (energyCapability != null) {
return energyCapability;
}
}
return super.getCapability(capability, facing);
}
}