Compare commits

...
17 Commits
Author SHA1 Message Date
mezz 95135544e2 Fix #1330 Fix resource checks for resources below an Alveary 2016-06-23 15:31:36 -07:00
mezz e34b71c13e Update dependencies 2016-06-23 14:51:32 -07:00
mezz cc8bcf384a Fix rare crash when getting rewards from escritoire 2016-06-23 14:51:12 -07:00
mezz 1f21952beb Fix #1328 Crash when trying to pick up wheat from Moistener process slot 2016-06-23 14:50:35 -07:00
mezz 1ed4ced65f Remove "useDepAts = true" in gradle, it's no longer needed for JEI's API 2016-06-23 02:54:25 -07:00
mezz beb74e635d Use JEI API jar at compile time 2016-06-23 02:34:50 -07:00
mezz 40c4fc5d1f Update for Minecraft 1.10 2016-06-23 02:19:36 -07:00
mezz 645dba903d Improve the look of cherry tree leaf generation 2016-06-22 21:14:38 -07:00
mezz 1ac4acdb47 Fix ebony trees growing offcenter from their saplings 2016-06-22 21:13:52 -07:00
mezz 74aa33e80c Remove all the saplings when a large tree grows 2016-06-22 21:13:35 -07:00
mezz 6f6b45abcf Add EnderIO compat for ice coolant and ethanol fuel 2016-06-22 19:00:05 -07:00
mezz 7297a6a5d3 Add ExtraUtils2 EnderLily compat for the farm 2016-06-22 18:40:07 -07:00
mezz 5ef76cffca Fix invalid recipes warning when BoP plugin is enabled 2016-06-22 16:19:40 -07:00
mezz 9284f84645 Fix pipette filling bug 2016-06-22 16:18:55 -07:00
mezz 85ba33e1ff Add trapdoorWood oredict name 2016-06-20 23:11:44 -07:00
mezz 9f5f5e7812 Fix network sync of item floating over Escritoire 2016-06-19 23:03:02 -07:00
mezz 8617c4a79f Properly center the item floating over the escritoire 2016-06-19 22:18:31 -07:00
43 changed files with 417 additions and 301 deletions

No files matched your search

+2 -2
View File
@@ -40,7 +40,6 @@ targetCompatibility = 1.8
minecraft {
version = mcversion + "-" + forgeversion
runDir = "run"
useDepAts = true
mappings = mcp_mappings
replace '@VERSION@', project.version
@@ -66,7 +65,8 @@ repositories {
}
dependencies {
deobfCompile "mezz.jei:jei_${mcversion}:${jei_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"
}
+5 -5
View File
@@ -1,10 +1,10 @@
mcversion=1.9.4
forgeversion=12.17.0.1957
mcversion=1.10
forgeversion=12.18.0.1984-1.10.0
mcp_mappings=snapshot_20160525
jei_version=3.6.4.+
jei_version=3.7.0.+
ic2_version=2.5.5-ex19
version_major=5
version_minor=0
version_patch=19
version_minor=1
version_patch=2
+2 -2
View File
@@ -1,6 +1,6 @@
#Mon Sep 14 12:28:28 PDT 2015
#Tue Jun 21 15:23:47 PDT 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-all.zip
+3 -10
View File
@@ -49,16 +49,9 @@ import forestry.plugins.PluginManager;
name = "Forestry",
version = Constants.VERSION,
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
dependencies = "required-after:Forge@[12.17.0.1949,);"
+ "after:Buildcraft|Core@[7.2,);"
+ "after:BuildCraft|Energy@[7.2,);"
+ "after:ExtrabiomesXL;"
+ "after:BiomesOPlenty;"
+ "after:IC2@[2.3.235,);"
+ "after:Natura@[2.2.0,);"
+ "after:HardcoreEnderExpansion;"
+ "after:JEI@[3.6.4,);"
+ "after:basemetals;")
acceptedMinecraftVersions = "[1.10]",
dependencies = "required-after:Forge@[12.18.0.1984,);"
+ "after:JEI@[3.7.0,);")
public class Forestry {
@Mod.Instance(Constants.MOD_ID)
@@ -5,12 +5,12 @@
******************************************************************************/
package forestry.api.apiculture;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
public interface IJubilanceFactory {
/** The default Jubilance Provider is satisfied when the humidity and temperature are ideal for the bee. */
IJubilanceProvider getDefault();
/** The Requires Resource Jubilance Provider is satisfied when a specific block is under the hive. */
IJubilanceProvider getRequiresResource(Block block, int meta);
IJubilanceProvider getRequiresResource(IBlockState... acceptedBlockStates);
}
@@ -84,7 +84,7 @@ public interface ITree extends IIndividual, ITreeGenData {
* @return Integer denoting the size of the tree trunk.
*/
@Override
int getGirth(World world, BlockPos pos);
int getGirth();
/**
* @return Growth conditions at the given position.
@@ -5,13 +5,10 @@
******************************************************************************/
package forestry.api.genetics;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraftforge.common.BiomeDictionary;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import net.minecraft.block.state.IBlockState;
import net.minecraftforge.common.BiomeDictionary;
/** Set custom mutation requirements */
public interface IMutationBuilder {
@@ -46,7 +43,7 @@ public interface IMutationBuilder {
IMutationBuilder requireNight();
/** Require a specific resource to be under the location of the mutation */
IMutationBuilder requireResource(IBlockState requiredBlockState);
IMutationBuilder requireResource(IBlockState... acceptedBlockStates);
IMutationBuilder requireResource(String oreDictName);
@@ -18,7 +18,7 @@ import forestry.api.arboriculture.ITreeGenome;
public interface ITreeGenData {
int getGirth(World world, BlockPos pos);
int getGirth();
float getHeightModifier();
@@ -66,7 +66,7 @@ public class AIAvoidPlayers extends EntityAIBase {
}
path = pathNavigator.getPathToXYZ(randomTarget.xCoord, randomTarget.yCoord, randomTarget.zCoord);
return path != null && path.isDestinationSame(randomTarget);
return path != null;
}
@Override
@@ -10,10 +10,9 @@
******************************************************************************/
package forestry.apiculture.genetics;
import net.minecraft.block.Block;
import forestry.api.apiculture.IJubilanceFactory;
import forestry.api.apiculture.IJubilanceProvider;
import net.minecraft.block.state.IBlockState;
public class JubilanceFactory implements IJubilanceFactory {
@Override
@@ -22,7 +21,7 @@ public class JubilanceFactory implements IJubilanceFactory {
}
@Override
public IJubilanceProvider getRequiresResource(Block block, int meta) {
return new JubilanceRequiresResource(block, meta);
public IJubilanceProvider getRequiresResource(IBlockState... acceptedBlockStates) {
return new JubilanceRequiresResource(acceptedBlockStates);
}
}
@@ -10,33 +10,40 @@
******************************************************************************/
package forestry.apiculture.genetics;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import forestry.api.apiculture.IAlleleBeeSpecies;
import forestry.api.apiculture.IBeeGenome;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.apiculture.IJubilanceProvider;
import forestry.core.utils.ItemStackUtil;
import net.minecraft.block.state.IBlockState;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class JubilanceRequiresResource implements IJubilanceProvider {
private final ItemStack blockRequired;
private final Set<IBlockState> acceptedBlockStates = new HashSet<>();
public JubilanceRequiresResource(Block block, int meta) {
this.blockRequired = new ItemStack(block, meta);
public JubilanceRequiresResource(IBlockState... acceptedBlockStates) {
Collections.addAll(this.acceptedBlockStates, acceptedBlockStates);
}
@Override
public boolean isJubilant(IAlleleBeeSpecies species, IBeeGenome genome, IBeeHousing housing) {
World world = housing.getWorldObj();
BlockPos housingCoords = housing.getCoordinates();
BlockPos pos = housing.getCoordinates();
IBlockState state = world.getBlockState(housingCoords.down());
return ItemStackUtil.equals(state, blockRequired);
TileEntity tile;
do {
pos = pos.down();
tile = world.getTileEntity(pos);
} while (tile instanceof IBeeHousing && pos.getY() > 0);
IBlockState blockState = world.getBlockState(pos);
return this.acceptedBlockStates.contains(blockState);
}
}
@@ -69,7 +69,6 @@ public class VillageApiaristHouse extends StructureVillagePieces.House1 {
private static final Random random = new Random();
private int averageGroundLevel = -1;
private boolean isInDesert = false;
private IBlockState planks;
private IBlockState slabs;
private IBlockState logs;
@@ -86,8 +85,6 @@ public class VillageApiaristHouse extends StructureVillagePieces.House1 {
public VillageApiaristHouse(StructureVillagePieces.Start startPiece, int componentType, Random random, StructureBoundingBox boundingBox, EnumFacing facing) {
super(startPiece, componentType, random, boundingBox, facing);
isInDesert = startPiece.inDesert;
createBuildingBlocks(random);
}
@@ -280,7 +277,7 @@ public class VillageApiaristHouse extends StructureVillagePieces.House1 {
private void buildGarden(World world, StructureBoundingBox box) {
Block ground = Blocks.DIRT;
if (isInDesert) {
if (field_189928_h == 1) { // desert
ground = Blocks.SAND;
}
@@ -293,7 +290,7 @@ public class VillageApiaristHouse extends StructureVillagePieces.House1 {
private void plantFlowerGarden(World world, StructureBoundingBox box, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
if (isInDesert) {
if (field_189928_h == 1) { // desert
setBlockState(world, Blocks.CACTUS.getDefaultState(), 4, 1, 7, box);
return;
}
@@ -203,7 +203,7 @@ public class Tree extends Individual implements ITree, IPlantable {
}
@Override
public int getGirth(World world, BlockPos pos) {
public int getGirth() {
return genome.getGirth();
}
@@ -18,6 +18,7 @@ import java.util.List;
import java.util.Random;
import java.util.Set;
import forestry.arboriculture.blocks.BlockSapling;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -61,6 +62,7 @@ public abstract class WorldGenArboriculture extends WorldGenBase {
}
if (genPos != null) {
clearSaplings(world, genPos);
List<BlockPos> branchEnds = new ArrayList<>(generateTrunk(world, rand, wood, genPos));
Collections.sort(branchEnds, TopDownBlockPosComparator.INSTANCE);
generateLeaves(world, rand, leaf, branchEnds, genPos);
@@ -96,6 +98,18 @@ public abstract class WorldGenArboriculture extends WorldGenBase {
@Nullable
public abstract BlockPos getValidGrowthPos(World world, BlockPos pos);
public void clearSaplings(World world, BlockPos genPos) {
int treeGirth = tree.getGirth();
for (int x = 0; x < treeGirth; x++) {
for (int z = 0; z < treeGirth; z++) {
BlockPos saplingPos = genPos.add(x, 0, z);
if (world.getBlockState(saplingPos).getBlock() instanceof BlockSapling) {
world.setBlockToAir(saplingPos);
}
}
}
}
public boolean hasPods() {
return tree.allowsFruitBlocks();
}
@@ -47,12 +47,13 @@ public class WorldGenCherry extends WorldGenTree {
@Override
protected void generateLeaves(World world, Random rand, TreeBlockTypeLeaf leaf, List<BlockPos> branchEnds, BlockPos startPos) {
int leafSpawn = height + 1;
int leafSpawn = height + 2;
WorldGenHelper.generateCylinderFromTreeStartPos(world, leaf, startPos.add(0, leafSpawn--, 0), girth, girth, 1, WorldGenHelper.EnumReplaceMode.SOFT);
WorldGenHelper.generateCylinderFromTreeStartPos(world, leaf, startPos.add(0, leafSpawn, 0), girth, (float) 1 + girth, 1, WorldGenHelper.EnumReplaceMode.SOFT);
WorldGenHelper.generateCylinderFromTreeStartPos(world, leaf, startPos.add(0, leafSpawn, 0), girth, 1 + girth, 1, WorldGenHelper.EnumReplaceMode.SOFT);
for (BlockPos branchEnd : branchEnds) {
WorldGenHelper.generateCircle(world, rand, branchEnd, 4, 3, 2, leaf, 1.0f, WorldGenHelper.EnumReplaceMode.AIR);
WorldGenHelper.generateCircle(world, rand, branchEnd.up(), 3, 3, 1, leaf, 1.0f, WorldGenHelper.EnumReplaceMode.AIR);
WorldGenHelper.generateCircle(world, rand, branchEnd, 4, 3, 1, leaf, 1.0f, WorldGenHelper.EnumReplaceMode.AIR);
}
}
}
@@ -31,11 +31,10 @@ public class WorldGenEbony extends WorldGenTree {
@Nonnull
@Override
public Set<BlockPos> generateTrunk(World world, Random rand, TreeBlockTypeLog wood, BlockPos startPos) {
int offset = (girth - 1) / 2;
int trunksGenerated = 0;
for (int x = -offset; x < -offset + girth; x++) {
for (int z = -offset; z < -offset + girth; z++) {
for (int x = 0; x < girth; x++) {
for (int z = 0; z < girth; z++) {
if (rand.nextFloat() < 0.6f) {
for (int y = 0; y < height; y++) {
WorldGenHelper.addBlock(world, startPos.add(x, y, z), wood, WorldGenHelper.EnumReplaceMode.ALL);
@@ -68,8 +67,8 @@ public class WorldGenEbony extends WorldGenTree {
h = height / 2 + rand.nextInt(height / 2);
}
int x_off = -girth + rand.nextInt(2 * girth);
int y_off = -girth + rand.nextInt(2 * girth);
int x_off = rand.nextInt(girth);
int y_off = rand.nextInt(girth);
BlockPos center = startPos.add(x_off, h, y_off);
int radius = 1 + rand.nextInt(girth);
@@ -74,7 +74,7 @@ public abstract class WorldGenTree extends WorldGenArboriculture {
public final void preGenerate(World world, Random rand, BlockPos startPos) {
super.preGenerate(world, rand, startPos);
height = determineHeight(world, rand, baseHeight, heightVariation);
girth = tree.getGirth(world, startPos);
girth = tree.getGirth();
}
protected int modifyByHeight(World world, int val, int min, int max) {
@@ -69,5 +69,6 @@ public class BlockRegistryCore extends BlockRegistry {
// register some common oreDict names for our recipes
OreDictionary.registerOre(OreDictUtil.CRAFTING_TABLE_WOOD, Blocks.CRAFTING_TABLE);
OreDictionary.registerOre(OreDictUtil.TRAPDOOR_WOOD, Blocks.TRAPDOOR);
}
}
@@ -14,13 +14,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.BiomeDictionary;
import forestry.api.core.EnumHumidity;
import forestry.api.core.EnumTemperature;
import forestry.api.genetics.IAllele;
@@ -29,6 +22,10 @@ import forestry.api.genetics.IGenome;
import forestry.api.genetics.IMutation;
import forestry.api.genetics.IMutationBuilder;
import forestry.api.genetics.IMutationCondition;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.BiomeDictionary;
public abstract class Mutation implements IMutation, IMutationBuilder {
@@ -109,14 +106,14 @@ public abstract class Mutation implements IMutation, IMutationBuilder {
}
@Override
public Mutation requireResource(IBlockState blockState) {
IMutationCondition mutationCondition = new MutationConditionRequiresResource(blockState);
public Mutation requireResource(IBlockState... acceptedBlockStates) {
IMutationCondition mutationCondition = new MutationConditionRequiresResource(acceptedBlockStates);
return addMutationCondition(mutationCondition);
}
@Override
public Mutation requireResource(String oreName) {
IMutationCondition mutationCondition = new MutationConditionRequiresResourceOreDict(oreName);
IMutationCondition mutationCondition = new MutationConditionRequiresResource(oreName);
return addMutationCondition(mutationCondition);
}
@@ -10,38 +10,63 @@
******************************************************************************/
package forestry.core.genetics.mutations;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IGenome;
import forestry.api.genetics.IMutationCondition;
import forestry.core.utils.ItemStackUtil;
import forestry.core.utils.Translator;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
public class MutationConditionRequiresResource implements IMutationCondition {
private final IBlockState requiredBlockState;
private final Set<IBlockState> acceptedBlockStates = new HashSet<>();
private final String displayName;
public MutationConditionRequiresResource(IBlockState requiredBlockState) {
this.requiredBlockState = requiredBlockState;
public MutationConditionRequiresResource(String oreDictName) {
this.displayName = oreDictName;
for (ItemStack ore : OreDictionary.getOres(oreDictName)) {
if (ore != null) {
Item oreItem = ore.getItem();
if (oreItem != null) {
Block oreBlock = Block.getBlockFromItem(oreItem);
if (oreBlock != null) {
this.acceptedBlockStates.addAll(oreBlock.getBlockState().getValidStates());
}
}
}
}
}
public MutationConditionRequiresResource(IBlockState... acceptedBlockStates) {
Collections.addAll(this.acceptedBlockStates, acceptedBlockStates);
this.displayName = acceptedBlockStates[0].getBlock().getLocalizedName();
}
@Override
public float getChance(World world, BlockPos pos, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1) {
IBlockState blockState;
TileEntity tile;
do {
pos = pos.down();
blockState = world.getBlockState(pos);
} while (blockState.getBlock() instanceof IBeeHousing);
tile = world.getTileEntity(pos);
} while (tile instanceof IBeeHousing);
return this.requiredBlockState == blockState ? 1 : 0;
IBlockState blockState = world.getBlockState(pos);
return this.acceptedBlockStates.contains(blockState) ? 1 : 0;
}
@Override
public String getDescription() {
return Translator.translateToLocalFormatted("for.mutation.condition.resource", requiredBlockState.getBlock().getLocalizedName());
return Translator.translateToLocalFormatted("for.mutation.condition.resource", displayName);
}
}
@@ -1,71 +0,0 @@
/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry.core.genetics.mutations;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import forestry.api.apiculture.IBeeHousing;
import forestry.api.genetics.IAllele;
import forestry.api.genetics.IGenome;
import forestry.api.genetics.IMutationCondition;
import forestry.core.utils.Translator;
public class MutationConditionRequiresResourceOreDict implements IMutationCondition {
private final int oreDictId;
private final String displayName;
public MutationConditionRequiresResourceOreDict(String oreDictName) {
this.oreDictId = OreDictionary.getOreID(oreDictName);
List<ItemStack> ores = OreDictionary.getOres(oreDictName);
if (ores != null && !ores.isEmpty()) {
this.displayName = ores.get(0).getDisplayName();
} else {
this.displayName = oreDictName;
}
}
@Override
public float getChance(World world, BlockPos pos, IAllele allele0, IAllele allele1, IGenome genome0, IGenome genome1) {
Block block;
int meta;
int i = 1;
do {
BlockPos blockPos = new BlockPos(pos.getX(), pos.getY() - i, pos.getY());
IBlockState blockState = world.getBlockState(blockPos);
block = blockState.getBlock();
meta = block.getMetaFromState(blockState);
i++;
} while (block instanceof IBeeHousing);
int[] oreIds = OreDictionary.getOreIDs(new ItemStack(block, 1, meta));
for (int oreId : oreIds) {
if (oreId == this.oreDictId) {
return 1;
}
}
return 0;
}
@Override
public String getDescription() {
return Translator.translateToLocalFormatted("for.mutation.condition.resource", displayName);
}
}
@@ -31,7 +31,7 @@ public class SlotWorking extends SlotForestry {
}
@Override
public boolean getHasStack() {
public boolean canTakeStack(EntityPlayer stack) {
return false;
}
@@ -59,7 +59,6 @@ public class ItemPipette extends ItemForestry implements IToolPipette, IFluidCon
}
contained = new PipetteContents(new FluidStack(liquid, filled));
filled = liquid.amount;
} else {
if (contained.getContents().amount >= limit) {
return 0;
@@ -141,7 +140,7 @@ public class ItemPipette extends ItemForestry implements IToolPipette, IFluidCon
contained.getContents().amount -= drained;
if (contained.getContents().amount <= 0) {
pipette.setTagCompound(null);
pipette.setTagCompound(new NBTTagCompound());
pipette.setItemDamage(0);
} else {
NBTTagCompound nbttagcompound = new NBTTagCompound();
@@ -10,6 +10,7 @@
******************************************************************************/
package forestry.core.network.packets;
import javax.annotation.Nullable;
import java.io.IOException;
import net.minecraft.entity.player.EntityPlayer;
@@ -30,8 +31,8 @@ public class PacketItemStackDisplay extends PacketCoordinates implements IForest
public PacketItemStackDisplay() {
}
public <T extends TileForestry & IItemStackDisplay> PacketItemStackDisplay(T tile, ItemStack itemStack) {
public <T extends TileForestry & IItemStackDisplay> PacketItemStackDisplay(T tile, @Nullable ItemStack itemStack) {
super(tile);
this.itemStack = itemStack;
}
@@ -6,8 +6,9 @@ import forestry.core.utils.Translator;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.recipe.BlankRecipeCategory;
import mezz.jei.api.recipe.IRecipeWrapper;
public abstract class ForestryRecipeCategory extends BlankRecipeCategory {
public abstract class ForestryRecipeCategory<T extends IRecipeWrapper> extends BlankRecipeCategory<T> {
@Nonnull
private final IDrawable background;
@Nonnull
@@ -1,72 +0,0 @@
/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry.core.recipes.jei;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidBlock;
import net.minecraftforge.fluids.IFluidContainerItem;
public class JEIUtils {
public static List<ItemStack> getItemVariations(ItemStack base) {
List<ItemStack> variations = new ArrayList<>();
base.getItem().getSubItems(base.getItem(), null, variations);
Iterator<ItemStack> itr = variations.iterator();
ItemStack stack;
while (itr.hasNext()) {
stack = itr.next();
if (!base.isItemEqual(stack) || !stack.hasTagCompound()) {
itr.remove();
}
}
if (variations.isEmpty()) {
return Collections.singletonList(base);
}
return variations;
}
public static FluidStack getFluidStack(ItemStack stack) {
if (stack != null) {
FluidStack fluidStack = null;
if (stack.getItem() instanceof IFluidContainerItem) {
fluidStack = ((IFluidContainerItem) stack.getItem()).getFluid(stack);
}
if (fluidStack == null) {
fluidStack = FluidContainerRegistry.getFluidForFilledItem(stack);
}
if (fluidStack == null && Block.getBlockFromItem(stack.getItem()) instanceof IFluidBlock) {
Fluid fluid = ((IFluidBlock) Block.getBlockFromItem(stack.getItem())).getFluid();
if (fluid != null) {
fluidStack = new FluidStack(fluid, Fluid.BUCKET_VOLUME);
}
}
return fluidStack;
}
return null;
}
public static boolean areFluidsSameType(FluidStack fluidStack1, FluidStack fluidStack2) {
if (fluidStack1 == null || fluidStack2 == null) {
return false;
}
return fluidStack1.getFluid() == fluidStack2.getFluid();
}
}
@@ -24,7 +24,6 @@ import net.minecraft.world.World;
import forestry.core.blocks.BlockBase;
import forestry.core.config.Constants;
import forestry.core.inventory.InventoryEscritoire;
import forestry.core.models.ModelEscritoire;
import forestry.core.proxy.Proxies;
import forestry.core.tiles.TileEscritoire;
@@ -46,7 +45,7 @@ public class RenderEscritoire extends TileEntitySpecialRenderer<TileEscritoire>
IBlockState blockState = world.getBlockState(escritoire.getPos());
if (blockState != null && blockState.getBlock() instanceof BlockBase) {
EnumFacing facing = blockState.getValue(BlockBase.FACING);
render(escritoire.getStackInSlot(InventoryEscritoire.SLOT_ANALYZE), world, facing, x, y, z);
render(escritoire.getIndividualOnDisplay(), world, facing, x, y, z);
return;
}
}
@@ -92,7 +91,7 @@ public class RenderEscritoire extends TileEntitySpecialRenderer<TileEscritoire>
GlStateManager.pushMatrix();
{
GlStateManager.translate((float) x + 0.6f, (float) y + 0.6f, (float) z + 0.5f);
GlStateManager.translate((float) x + 0.5f, (float) y + 0.6f, (float) z + 0.5f);
GlStateManager.scale(renderScale, renderScale, renderScale);
dummyEntityItem.setEntityItemStack(itemstack);
@@ -25,16 +25,20 @@ import forestry.api.genetics.IAlleleSpecies;
import forestry.api.genetics.IIndividual;
import forestry.core.gui.ContainerEscritoire;
import forestry.core.gui.GuiEscritoire;
import forestry.core.inventory.InventoryAnalyzer;
import forestry.core.inventory.InventoryEscritoire;
import forestry.core.inventory.watchers.ISlotPickupWatcher;
import forestry.core.network.DataInputStreamForestry;
import forestry.core.network.DataOutputStreamForestry;
import forestry.core.network.IStreamableGui;
import forestry.core.network.packets.PacketItemStackDisplay;
import forestry.core.proxy.Proxies;
import forestry.core.utils.InventoryUtil;
public class TileEscritoire extends TileBase implements ISidedInventory, ISlotPickupWatcher, IStreamableGui {
public class TileEscritoire extends TileBase implements ISidedInventory, ISlotPickupWatcher, IStreamableGui, IItemStackDisplay {
private final EscritoireGame game = new EscritoireGame();
private ItemStack individualOnDisplayClient;
public TileEscritoire() {
super("escritoire");
@@ -116,15 +120,39 @@ public class TileEscritoire extends TileBase implements ISidedInventory, ISlotPi
public void readGuiData(DataInputStreamForestry data) throws IOException {
game.readData(data);
}
@Override
public void writeData(DataOutputStreamForestry data) throws IOException {
super.writeData(data);
ItemStack displayStack = getIndividualOnDisplay();
data.writeItemStack(displayStack);
}
@Override
public void readData(DataInputStreamForestry data) throws IOException {
super.readData(data);
individualOnDisplayClient = data.readItemStack();
}
/* ISlotPickupWatcher */
@Override
public void onPickupFromSlot(int slotIndex, EntityPlayer player) {
if (slotIndex == InventoryEscritoire.SLOT_ANALYZE) {
game.reset();
PacketItemStackDisplay packet = new PacketItemStackDisplay(this, getIndividualOnDisplay());
Proxies.net.sendNetworkPacket(packet, worldObj);
}
}
@Override
public void setInventorySlotContents(int slotIndex, ItemStack itemstack) {
super.setInventorySlotContents(slotIndex, itemstack);
if (slotIndex == InventoryEscritoire.SLOT_ANALYZE) {
PacketItemStackDisplay packet = new PacketItemStackDisplay(this, getIndividualOnDisplay());
Proxies.net.sendNetworkPacket(packet, worldObj);
}
}
@Override
public Object getGui(EntityPlayer player, int data) {
return new GuiEscritoire(player, this);
@@ -134,4 +162,19 @@ public class TileEscritoire extends TileBase implements ISidedInventory, ISlotPi
public Object getContainer(EntityPlayer player, int data) {
return new ContainerEscritoire(player, this);
}
@Override
public void handleItemStackForDisplay(ItemStack itemStack) {
if (!ItemStack.areItemStacksEqual(itemStack, individualOnDisplayClient)) {
individualOnDisplayClient = itemStack;
worldObj.markBlockRangeForRenderUpdate(getPos(), getPos());
}
}
public ItemStack getIndividualOnDisplay() {
if (worldObj.isRemote) {
return individualOnDisplayClient;
}
return getStackInSlot(InventoryAnalyzer.SLOT_ANALYZE);
}
}
@@ -14,11 +14,17 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyReceiver;
import forestry.core.network.packets.PacketFXSignal;
import forestry.core.proxy.Proxies;
import forestry.core.tiles.TileEngine;
import net.minecraft.block.Block;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.BlockOldLog;
import net.minecraft.block.BlockPlanks;
import net.minecraft.block.BlockStaticLiquid;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
@@ -31,16 +37,8 @@ import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import forestry.core.network.packets.PacketFXSignal;
import forestry.core.proxy.Proxies;
import forestry.core.tiles.TileEngine;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyReceiver;
public abstract class BlockUtil {
private static final int slabWoodId = OreDictionary.getOreID("slabWood");
@@ -343,4 +341,17 @@ public abstract class BlockUtil {
}
return false;
}
@Nullable
public static <T extends Comparable<T>> IProperty<T> getProperty(Block block, String propertyName, Class<T> valueClass) {
for (IProperty<?> property : block.getDefaultState().getPropertyNames()) {
if (property.getName().equals(propertyName)) {
if (property.getValueClass().isAssignableFrom(valueClass)) {
//noinspection unchecked
return (IProperty<T>) property;
}
}
}
return null;
}
}
@@ -423,9 +423,15 @@ public abstract class ItemStackUtil {
}
public static ItemStack copyWithRandomSize(ItemStack template, int max, Random rand) {
int size = rand.nextInt(max);
int size = max <= 0 ? 0 : rand.nextInt(max);
ItemStack created = template.copy();
created.stackSize = size <= 0 ? 1 : size > created.getMaxStackSize() ? created.getMaxStackSize() : size;
if (size <= 0) {
created.stackSize = 1;
} else if (size > created.getMaxStackSize()) {
created.stackSize = created.getMaxStackSize();
} else {
created.stackSize = size;
}
return created;
}
@@ -34,6 +34,7 @@ public class OreDictUtil {
public static final String FENCE_GATE_WOOD = "fenceGateWood";
public static final String STAIR_WOOD = "stairWood";
public static final String DOOR_WOOD = "doorWood";
public static final String TRAPDOOR_WOOD = "trapdoorWood";
public static final String TREE_LEAVES = "treeLeaves";
public static final String EMPTIED_LETTER_ORE_DICT = "emptiedLetter";
@@ -29,6 +29,10 @@ public class FermenterRecipe implements IFermenterRecipe {
if (resource == null) {
throw new NullPointerException("Fermenter Resource cannot be null!");
}
if (resource.getItem() == null) {
throw new NullPointerException("Fermenter Resource item cannot be null!");
}
if (output == null) {
throw new NullPointerException("Fermenter Output cannot be null!");
@@ -92,7 +92,7 @@ public class FactoryJeiPlugin extends BlankModPlugin {
registry.addRecipes(CarpenterRecipeMaker.getCarpenterRecipes());
registry.addRecipes(CentrifugeRecipeMaker.getCentrifugeRecipe());
registry.addRecipes(FabricatorRecipeMaker.getFabricatorRecipes());
registry.addRecipes(FermenterRecipeMaker.getFermenterRecipes());
registry.addRecipes(FermenterRecipeMaker.getFermenterRecipes(jeiHelpers.getStackHelper()));
registry.addRecipes(MoistenerRecipeMaker.getMoistenerRecipes());
registry.addRecipes(RainmakerRecipeMaker.getRecipes());
registry.addRecipes(SqueezerRecipeMaker.getSqueezerRecipes());
@@ -6,19 +6,17 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import forestry.factory.gui.ContainerWorktable;
import forestry.factory.inventory.InventoryCraftingForestry;
import forestry.factory.recipes.MemorizedRecipe;
import mezz.jei.api.gui.IGuiIngredient;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.recipe.VanillaRecipeCategoryUid;
import mezz.jei.api.recipe.transfer.IRecipeTransferError;
import mezz.jei.api.recipe.transfer.IRecipeTransferHandler;
import mezz.jei.gui.ingredients.IGuiIngredient;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
class WorktableRecipeTransferHandler implements IRecipeTransferHandler {
@Override
@@ -23,7 +23,7 @@ import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.recipe.IRecipeWrapper;
public class FermenterRecipeCategory extends ForestryRecipeCategory {
public class FermenterRecipeCategory extends ForestryRecipeCategory<FermenterRecipeWrapper> {
private static final int resourceSlot = 0;
private static final int fuelSlot = 1;
@@ -62,7 +62,7 @@ public class FermenterRecipeCategory extends ForestryRecipeCategory {
}
@Override
public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) {
public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull FermenterRecipeWrapper recipeWrapper) {
IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks();
IGuiFluidStackGroup guiFluidStacks = recipeLayout.getFluidStacks();
@@ -72,18 +72,15 @@ public class FermenterRecipeCategory extends ForestryRecipeCategory {
guiFluidStacks.init(inputTank, true, 1, 1, 16, 58, 3000, false, tankOverlay);
guiFluidStacks.init(outputTank, false, 91, 1, 16, 58, 3000, false, tankOverlay);
FermenterRecipeWrapper wrapper = (FermenterRecipeWrapper) recipeWrapper;
guiItemStacks.set(resourceSlot, wrapper.getFermentable());
guiItemStacks.set(resourceSlot, recipeWrapper.getFermentable());
List<ItemStack> fuels = new ArrayList<>();
for (FermenterFuel fuel : FuelManager.fermenterFuel.values()) {
fuels.add(fuel.item);
}
guiItemStacks.set(fuelSlot, fuels);
guiFluidStacks.set(inputTank, wrapper.getFluidInputs());
guiFluidStacks.set(outputTank, wrapper.getFluidOutputs());
guiFluidStacks.set(inputTank, recipeWrapper.getFluidInputs());
guiFluidStacks.set(outputTank, recipeWrapper.getFluidOutputs());
}
}
@@ -8,22 +8,29 @@ import net.minecraft.item.ItemStack;
import forestry.api.recipes.IFermenterRecipe;
import forestry.api.recipes.IVariableFermentable;
import forestry.api.recipes.RecipeManagers;
import forestry.core.recipes.jei.JEIUtils;
import forestry.core.utils.Log;
import forestry.factory.recipes.jei.FactoryJeiPlugin;
import mezz.jei.api.recipe.IStackHelper;
public class FermenterRecipeMaker {
private FermenterRecipeMaker() {
}
public static List<FermenterRecipeWrapper> getFermenterRecipes() {
public static List<FermenterRecipeWrapper> getFermenterRecipes(IStackHelper stackHelper) {
List<FermenterRecipeWrapper> recipes = new ArrayList<>();
for (IFermenterRecipe recipe : RecipeManagers.fermenterManager.recipes()) {
if (recipe.getResource() != null && recipe.getResource().getItem() instanceof IVariableFermentable) {
for (ItemStack stack : JEIUtils.getItemVariations(recipe.getResource())) {
recipes.add(new FermenterRecipeWrapper(recipe, stack));
if (recipe.getResource() != null) {
if (recipe.getResource().getItem() instanceof IVariableFermentable) {
for (ItemStack stack : stackHelper.getSubtypes(recipe.getResource())) {
recipes.add(new FermenterRecipeWrapper(recipe, stack));
}
} else {
recipes.add(new FermenterRecipeWrapper(recipe, recipe.getResource()));
}
} else {
recipes.add(new FermenterRecipeWrapper(recipe, recipe.getResource()));
Log.error("Null resource for recipe");
}
}
return recipes;
@@ -42,6 +42,7 @@ import forestry.core.circuits.CircuitLayout;
import forestry.core.config.Constants;
import forestry.core.items.EnumElectronTube;
import forestry.core.recipes.RecipeUtil;
import forestry.core.utils.OreDictUtil;
import forestry.farming.blocks.BlockMushroom;
import forestry.farming.blocks.BlockRegistryFarming;
import forestry.farming.blocks.EnumFarmBlockType;
@@ -207,7 +208,7 @@ public class PluginFarming extends BlankForestryPlugin {
"TDT",
'#', basic,
'T', "gearTin",
'D', Blocks.TRAPDOOR);
'D', OreDictUtil.TRAPDOOR_WOOD);
RecipeUtil.addRecipe(valve,
" # ",
@@ -27,6 +27,7 @@ import forestry.core.fluids.Fluids;
import forestry.core.items.EnumElectronTube;
import forestry.core.network.IPacketRegistry;
import forestry.core.recipes.RecipeUtil;
import forestry.core.utils.OreDictUtil;
import forestry.greenhouse.blocks.BlockGreenhouseType;
import forestry.greenhouse.blocks.BlockRegistryGreenhouse;
import forestry.greenhouse.logics.GreenhouseLogicGreenhouseDoor;
@@ -91,7 +92,7 @@ public class PluginGreenhouse extends BlankForestryPlugin {
"TXT",
"#H#",
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
'H', Blocks.TRAPDOOR,
'H', OreDictUtil.TRAPDOOR_WOOD,
'#', "gearTin",
'T', PluginCore.items.tubes.get(EnumElectronTube.BRONZE, 1));
@@ -100,7 +101,7 @@ public class PluginGreenhouse extends BlankForestryPlugin {
"#H#",
"TXT",
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
'H', Blocks.TRAPDOOR,
'H', OreDictUtil.TRAPDOOR_WOOD,
'#', "gearTin",
'T', PluginCore.items.tubes.get(EnumElectronTube.BRONZE, 1));
@@ -20,6 +20,8 @@ public class ForestryPluginUids {
public static final String BUILDCRAFT_STATEMENTS = "forestry.buildcraft.statements";
public static final String BUILDCRAFT_TRANSPORT = "forestry.buildcraft.transport";
public static final String CHISEL = "forestry.chisel";
public static final String ENDER_IO = "forestry.ender.io";
public static final String EXTRA_UTILITIES = "forestry.extra.utilities";
public static final String NATURA = "forestry.natura";
public static final String INDUSTRIALCRAFT2 = "forestry.industrialcraft2";
}
@@ -14,14 +14,18 @@ import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.event.FMLInterModComms;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.oredict.OreDictionary;
import forestry.api.core.ForestryAPI;
import forestry.api.farming.Farmables;
import forestry.api.recipes.RecipeManagers;
import forestry.api.storage.BackpackManager;
import forestry.core.PluginCore;
@@ -31,6 +35,8 @@ import forestry.core.recipes.RecipeUtil;
import forestry.core.utils.ItemStackUtil;
import forestry.core.utils.Log;
import forestry.core.utils.ModUtil;
import forestry.farming.logic.FarmableBasicAgricraft;
import forestry.farming.logic.FarmableGE;
import forestry.plugins.BlankForestryPlugin;
import forestry.plugins.ForestryPlugin;
import forestry.plugins.ForestryPluginUids;
@@ -43,8 +49,6 @@ public class PluginBiomesOPlenty extends BlankForestryPlugin {
private static Block saplings;
private static Block colorizedSaplings;
private static Item food;
private static Item misc;
private static ItemStack persimmon;
private static int amount;
@Override
@@ -61,12 +65,9 @@ public class PluginBiomesOPlenty extends BlankForestryPlugin {
public void doInit() {
super.doInit();
saplings = GameRegistry.findBlock(BoP, "saplings");
colorizedSaplings = GameRegistry.findBlock(BoP, "colorizedSaplings");
food = GameRegistry.findItem(BoP, "food");
if (food != null) {
persimmon = new ItemStack(food, 1, 8);
}
saplings = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(BoP, "saplings"));
colorizedSaplings = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(BoP, "colorizedSaplings"));
food = ForgeRegistries.ITEMS.getValue(new ResourceLocation(BoP, "food"));
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.APICULTURE)) {
addFlowers();
@@ -98,21 +99,21 @@ public class PluginBiomesOPlenty extends BlankForestryPlugin {
}
for (String key : saplingItemKeys) {
Item saplingItem = GameRegistry.findItem(BoP, key);
Item saplingItem = ForgeRegistries.ITEMS.getValue(new ResourceLocation(BoP, key));
String saplingName = ItemStackUtil.getItemNameFromRegistryAsString(saplingItem);
if (saplingName != null) {
FMLInterModComms.sendMessage(Constants.MOD_ID, "add-farmable-sapling", String.format("farmArboreal@%s.-1", saplingName));
}
}
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FARMING) && saplings != null && persimmon != null) {
//TODO BoP for 1.9: Add farmables
//TODO BoP for 1.9: Add farmables
// if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FARMING) && saplings != null && persimmon != null) {
// Farmables.farmables.put("farmArboreal", new FarmableGenericSapling(saplings, 15, persimmon));
}
// }
Block boPTurnip = GameRegistry.findBlock(BoP, "turnip");
Block boPTurnip = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(BoP, "turnip"));
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FARMING) && boPTurnip != null) {
Item boPTurnipSeeds = GameRegistry.findItem(BoP, "turnipSeeds");
Item boPTurnipSeeds = ForgeRegistries.ITEMS.getValue(new ResourceLocation(BoP, "turnipSeeds"));
ItemStack boPTurnipSeedStack = new ItemStack(boPTurnipSeeds, 1, 0);
if (boPTurnipSeeds != null) {
//TODO BoP for 1.9: Add farmable saplings
@@ -130,11 +131,11 @@ public class PluginBiomesOPlenty extends BlankForestryPlugin {
private static void addFermenterRecipes() {
int saplingYield = ForestryAPI.activeMode.getIntegerSetting("fermenter.yield.sapling");
if (saplings != null) {
if (saplings != Blocks.AIR) {
RecipeUtil.addFermenterRecipes(new ItemStack(saplings, 1, OreDictionary.WILDCARD_VALUE), saplingYield, Fluids.BIOMASS);
}
if (colorizedSaplings != null) {
if (colorizedSaplings != Blocks.AIR) {
RecipeUtil.addFermenterRecipes(new ItemStack(colorizedSaplings, 1, OreDictionary.WILDCARD_VALUE), saplingYield, Fluids.BIOMASS);
}
}
@@ -142,20 +143,18 @@ public class PluginBiomesOPlenty extends BlankForestryPlugin {
private static void addSqueezerRecipes() {
ItemStack mulch = new ItemStack(PluginCore.items.mulch);
misc = GameRegistry.findItem(BoP, "misc");
if (misc != null) {
ItemStack pinecone = new ItemStack(misc, 1, 13);
if (pinecone != null) {
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{pinecone}, Fluids.SEED_OIL.getFluid(3 * amount));
}
Item pinecone = ForgeRegistries.ITEMS.getValue(new ResourceLocation(BoP, "pinecone"));
if (pinecone != null) {
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{new ItemStack(pinecone)}, Fluids.SEED_OIL.getFluid(3 * amount));
}
if (food != null) {
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{new ItemStack(food)}, Fluids.JUICE.getFluid(50), mulch, 5);
}
Item persimmon = ForgeRegistries.ITEMS.getValue(new ResourceLocation(BoP, "persimmon"));
if (persimmon != null) {
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{persimmon}, Fluids.JUICE.getFluid(200), mulch, 20);
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{new ItemStack(persimmon)}, Fluids.JUICE.getFluid(200), mulch, 20);
}
}
@@ -234,7 +233,7 @@ public class PluginBiomesOPlenty extends BlankForestryPlugin {
private static void addBlocksToBackpack(String backpackUid, String... blockNames) {
for (String blockName : blockNames) {
Block block = GameRegistry.findBlock(BoP, blockName);
Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(BoP, blockName));
if (block != null) {
ItemStack blockStack = new ItemStack(block, 1, OreDictionary.WILDCARD_VALUE);
BackpackManager.backpackInterface.getBackpack(backpackUid).addValidItem(blockStack);
@@ -0,0 +1,70 @@
package forestry.plugins.compat;
import forestry.api.core.ForestryAPI;
import forestry.core.config.Constants;
import forestry.core.fluids.Fluids;
import forestry.core.utils.ModUtil;
import forestry.plugins.BlankForestryPlugin;
import forestry.plugins.ForestryPlugin;
import forestry.plugins.ForestryPluginUids;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fml.common.event.FMLInterModComms;
@ForestryPlugin(pluginID = ForestryPluginUids.ENDER_IO, name = "EnderIO", author = "mezz", url = Constants.URL, unlocalizedDescription = "for.plugin.enderIO.description")
public class PluginEnderIO extends BlankForestryPlugin {
private static final String EnderIO = "EnderIO";
private static final String FLUID_FUEL_ADD = "fluidFuel:add";
private static final String FLUID_COOLANT_ADD = "fluidCoolant:add";
private static final String KEY_FLUID_NAME = "fluidName";
private static final String KEY_POWER_PER_CYCLE = "powerPerCycle";
private static final String KEY_TOTAL_BURN_TIME = "totalBurnTime";
private static final String KEY_COOLING_PER_MB = "coolingPerMb";
private static final float WATER_COOLING_PER_MB = 0.0023f;
@Override
public boolean isAvailable() {
return ModUtil.isModLoaded(EnderIO);
}
@Override
public String getFailMessage() {
return "EnderIO not found";
}
@Override
public void doInit() {
Fluid ethanol = Fluids.BIO_ETHANOL.getFluid();
if (ethanol != null) {
int ethanolBurnTime = Math.round(Constants.ENGINE_CYCLE_DURATION_ETHANOL * ForestryAPI.activeMode.getFloatSetting("fuel.ethanol.combustion"));
addFuel(ethanol, 40, ethanolBurnTime);
}
Fluid crushedIce = Fluids.ICE.getFluid();
if (crushedIce != null) {
addCoolant(crushedIce, Constants.ICE_COOLING_MULTIPLIER);
}
}
private static void addFuel(Fluid fluid, int powerPerCycle, int totalBurnTime) {
NBTTagCompound fuelTag = new NBTTagCompound();
fuelTag.setString(KEY_FLUID_NAME, fluid.getName());
fuelTag.setInteger(KEY_POWER_PER_CYCLE, powerPerCycle);
fuelTag.setInteger(KEY_TOTAL_BURN_TIME, totalBurnTime);
FMLInterModComms.sendMessage(EnderIO, FLUID_FUEL_ADD, fuelTag);
}
private static void addCoolant(Fluid fluid, float coolingMultiplier) {
float coolingPerMb = coolingMultiplier * WATER_COOLING_PER_MB;
NBTTagCompound coolantTag = new NBTTagCompound();
coolantTag.setString(KEY_FLUID_NAME, fluid.getName());
coolantTag.setFloat(KEY_COOLING_PER_MB, coolingPerMb);
FMLInterModComms.sendMessage(EnderIO, FLUID_COOLANT_ADD, coolantTag);
}
}
@@ -0,0 +1,89 @@
/*******************************************************************************
* Copyright (c) 2011-2014 SirSengir.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Various Contributors including, but not limited to:
* SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
******************************************************************************/
package forestry.plugins.compat;
import java.util.Collections;
import forestry.api.circuits.ChipsetManager;
import forestry.api.circuits.ICircuitLayout;
import forestry.api.core.ForestryAPI;
import forestry.api.farming.Farmables;
import forestry.core.PluginCore;
import forestry.core.circuits.Circuit;
import forestry.core.config.Config;
import forestry.core.config.Constants;
import forestry.core.items.EnumElectronTube;
import forestry.core.utils.BlockUtil;
import forestry.core.utils.Log;
import forestry.core.utils.ModUtil;
import forestry.farming.circuits.CircuitFarmLogic;
import forestry.farming.logic.FarmLogicEnder;
import forestry.farming.logic.FarmableAgingCrop;
import forestry.plugins.BlankForestryPlugin;
import forestry.plugins.ForestryPlugin;
import forestry.plugins.ForestryPluginUids;
import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
@ForestryPlugin(pluginID = ForestryPluginUids.EXTRA_UTILITIES, name = "ExtraUtilities", author = "Nirek", url = Constants.URL, unlocalizedDescription = "for.plugin.extrautilities.description")
public class PluginExtraUtilities extends BlankForestryPlugin {
private static final String ExU = "ExtraUtils2";
@Override
public boolean isAvailable() {
return ModUtil.isModLoaded(ExU);
}
@Override
public String getFailMessage() {
return "ExtraUtilities not found";
}
@Override
public void doInit() {
super.doInit();
if (Config.isExUtilEnderLilyEnabled()) {
Block enderLillyBlock = ForgeRegistries.BLOCKS.getValue(new ResourceLocation("extrautils2", "EnderLilly"));
Item enderLillyItem = Item.getItemFromBlock(enderLillyBlock);
if (enderLillyBlock == Blocks.AIR) {
Log.error("Could not find ender lilly block.");
} else if (enderLillyItem == null) {
Log.error("Could not find ender lilly item.");
} else {
IProperty<Integer> growthProperty = BlockUtil.getProperty(enderLillyBlock, "growth", Integer.class);
if (growthProperty == null) {
Log.error("Could not find the growth property of ender lily.");
} else {
int harvestAge = Collections.max(growthProperty.getAllowedValues());
int replantAge = enderLillyBlock.getDefaultState().getValue(growthProperty);
Farmables.farmables.put("farmEnder", new FarmableAgingCrop(new ItemStack(enderLillyItem), enderLillyBlock, growthProperty, harvestAge, replantAge));
Circuit.farmEnderManaged = new CircuitFarmLogic("managedEnder", new FarmLogicEnder());
}
}
}
}
@Override
public void registerRecipes() {
super.registerRecipes();
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FARMING) && Circuit.farmEnderManaged != null) {
ICircuitLayout layoutManaged = ChipsetManager.circuitRegistry.getLayout("forestry.farms.managed");
ChipsetManager.solderManager.addRecipe(layoutManaged, PluginCore.items.tubes.get(EnumElectronTube.ENDER, 1), Circuit.farmEnderManaged);
}
}
}
@@ -219,11 +219,12 @@ public class PluginStorage extends BlankForestryPlugin {
"stainedGlass[A-Z].*",
"stone",
"sandstone",
"plankWood",
"stairWood",
"slabWood",
OreDictUtil.PLANK_WOOD,
OreDictUtil.STAIR_WOOD,
OreDictUtil.SLAB_WOOD,
OreDictUtil.FENCE_WOOD,
OreDictUtil.FENCE_GATE_WOOD,
OreDictUtil.TRAPDOOR_WOOD,
"glass",
"paneGlass",
"torch",
@@ -350,7 +351,6 @@ public class PluginStorage extends BlankForestryPlugin {
new ItemStack(Blocks.PURPUR_SLAB),
new ItemStack(Blocks.END_BRICKS),
new ItemStack(Blocks.CARPET, 1, OreDictionary.WILDCARD_VALUE),
new ItemStack(Blocks.TRAPDOOR),
new ItemStack(Blocks.IRON_TRAPDOOR),
new ItemStack(Blocks.STONE_PRESSURE_PLATE),
new ItemStack(Blocks.WOODEN_PRESSURE_PLATE),