Compare commits

...
15 Commits
Author SHA1 Message Date
mezz dd21d83ea3 Merge branch 'dev' into 4.2 2015-12-30 04:39:13 -08:00
mezz d0ead16eaa Bump version to 4.2.4 2015-12-30 04:38:44 -08:00
mezz 1d924d5ed5 Merge pull request #1004 from estebes/dev
Add IC2 crops support to multifarms (uses orchard farm logic)
2015-12-30 04:37:20 -08:00
mezz ff7adac9e1 Fix #1001 Slabs can't combine on placement in same block 2015-12-30 04:34:23 -08:00
mezz 45993f8213 Fix #999 Forestry Wood Logs Placement Issue 2015-12-30 02:31:19 -08:00
mezz 33573fea20 Fix #1022 Indistinguishable pollination color for some tree species 2015-12-29 12:34:26 -08:00
mezz 178142bf7a Fix #922 New tree branching generates non-connected logs 2015-12-29 11:17:42 -08:00
mezz 5d2aaea757 Fix #1008 Backpack superposition bug 2015-12-29 09:40:37 -08:00
mezz fbb02e43f5 Limit packets from engines supplying power to nearly full receivers 2015-12-29 08:20:05 -08:00
mezz 896767ae1b auto format 2015-12-23 23:06:45 -08:00
mezz d11034e4aa Merge branch 'dev' into 4.2 2015-12-22 17:47:29 -08:00
mezz cc64b09ad4 Fix #1017 crash when accessing bee cart gui 2015-12-22 17:44:38 -08:00
mezz d5ebc02999 Fix BreedingTracker crash 2015-12-19 16:02:08 -08:00
mezz 8415b657f2 Use Forge 10.13.4.1566 fuel burn time workaround.
Fix #960 Fireproof wood have fuel value,
Fix #469 Burn time of wooden slabs should be 150 ticks
2015-12-13 13:47:55 -08:00
estebes 962a17494c Added IC2 crops support to multifarms (uses orchard farm logic) 2015-12-05 11:10:34 +00:00
44 changed files with 483 additions and 70 deletions

No files matched your search

+2 -2
View File
@@ -1,5 +1,5 @@
mcversion=1.7.10
forgeversion=10.13.4.1541-1.7.10
forgeversion=10.13.4.1566-1.7.10
version_major=4
version_minor=2
version_patch=2
version_patch=4
+1 -1
View File
@@ -59,7 +59,7 @@ import forestry.plugins.PluginManager;
name = "Forestry",
version = Version.VERSION,
guiFactory = "forestry.core.config.ForestryGuiConfigFactory",
dependencies = "required-after:Forge@[10.13.4.1448,);"
dependencies = "required-after:Forge@[10.13.4.1566,);"
+ "after:Buildcraft|Core@[6.1.7,);"
+ "after:ExtrabiomesXL;"
+ "after:BiomesOPlenty;"
@@ -113,4 +113,9 @@ public class EntityMinecartApiary extends EntityMinecartBeeHousingBase implement
public Object getContainer(EntityPlayer player, int data) {
return new ContainerMinecartBeehouse(player.inventory, this, true);
}
@Override
public int getIdOfEntity() {
return getEntityId();
}
}
@@ -98,4 +98,9 @@ public class EntityMinecartBeehouse extends EntityMinecartBeeHousingBase {
public Object getContainer(EntityPlayer player, int data) {
return new ContainerMinecartBeehouse(player.inventory, this, false);
}
@Override
public int getIdOfEntity() {
return getEntityId();
}
}
@@ -225,7 +225,7 @@ public final class FlowerRegistry implements IFlowerRegistry, IFlowerGrowthHelpe
if (PluginManager.Module.AGRICRAFT.isEnabled()) {
Block cropBlock = GameRegistry.findBlock("AgriCraft", "crops");
if (block == cropBlock) {
if(block instanceof IPlantable) {
if (block instanceof IPlantable) {
//For agricraft versions which implement IPlantable in the BlockCrop class
block = ((IPlantable) block).getPlant(world, x, y, z);
} else {
@@ -21,7 +21,7 @@ import forestry.core.items.ItemWithGui;
public class ItemBeealyzer extends ItemWithGui {
public ItemBeealyzer() {
super(Tabs.tabApiculture);
setCreativeTab(Tabs.tabApiculture);
}
@Override
@@ -41,7 +41,7 @@ public class ItemHabitatLocator extends ItemWithGui {
private final HabitatLocatorLogic locatorLogic;
public ItemHabitatLocator() {
super(Tabs.tabApiculture);
setCreativeTab(Tabs.tabApiculture);
setMaxStackSize(1);
locatorLogic = new HabitatLocatorLogic();
}
@@ -21,7 +21,7 @@ import forestry.core.items.ItemWithGui;
public class ItemImprinter extends ItemWithGui {
public ItemImprinter() {
super(Tabs.tabApiculture);
setCreativeTab(Tabs.tabApiculture);
}
@Override
@@ -36,6 +36,7 @@ public class FruitProviderPod extends FruitProviderNone {
PAPAYA((short) 2013, (short) 2014, (short) 2015);//, COCONUT((short)2016, (short)2017, (short)2018);
public final short[] uids;
EnumPodType(short stage1, short stage2, short stage3) {
uids = new short[]{stage1, stage2, stage3};
}
@@ -10,8 +10,6 @@
******************************************************************************/
package forestry.arboriculture.blocks;
import javax.annotation.Nullable;
import forestry.arboriculture.tiles.TileArboristChest;
import forestry.core.blocks.IMachinePropertiesTESR;
import forestry.core.proxy.Proxies;
@@ -46,8 +46,9 @@ public class BlockPlanks extends BlockWood {
@Override
public IIcon getIcon(int side, int meta) {
EnumWoodType woodType = EnumWoodType.LARCH;
if (meta > 0 && meta < EnumWoodType.VALUES.length)
if (meta > 0 && meta < EnumWoodType.VALUES.length) {
woodType = EnumWoodType.VALUES[meta];
}
return IconProviderWood.getPlankIcon(woodType);
}
@@ -12,6 +12,7 @@ package forestry.arboriculture.blocks;
import forestry.arboriculture.items.ItemBlockLeaves;
import forestry.arboriculture.items.ItemBlockWood;
import forestry.arboriculture.items.ItemBlockWoodSlab;
import forestry.core.blocks.BlockRegistry;
import forestry.core.items.ItemBlockForestry;
@@ -19,11 +20,13 @@ public class BlockRegistryArboriculture extends BlockRegistry {
public final BlockLog logs;
public final BlockPlanks planks;
public final BlockSlab slabs;
public final BlockSlab slabsDouble;
public final BlockArbFence fences;
public final BlockArbStairs stairs;
public final BlockLog logsFireproof;
public final BlockPlanks planksFireproof;
public final BlockSlab slabsFireproof;
public final BlockSlab slabsDoubleFireproof;
public final BlockArbFence fencesFireproof;
public final BlockArbStairs stairsFireproof;
@@ -40,9 +43,13 @@ public class BlockRegistryArboriculture extends BlockRegistry {
planks = registerBlock(new BlockPlanks(false), ItemBlockWood.class, "planks");
registerOreDictWildcard("plankWood", planks);
slabs = registerBlock(new BlockSlab(false), ItemBlockWood.class, "slabs");
BlockSlab blockSlab = new BlockSlab(false, false);
BlockSlab blockSlabDouble = new BlockSlab(true, false);
slabs = registerBlock(blockSlab, ItemBlockWoodSlab.class, "slabs", blockSlabDouble, blockSlab);
registerOreDictWildcard("slabWood", slabs);
slabsDouble = registerBlock(blockSlabDouble, ItemBlockWoodSlab.class, "slabsDouble", blockSlabDouble, blockSlab);
fences = registerBlock(new BlockArbFence(false), ItemBlockWood.class, "fences");
registerOreDictWildcard("fenceWood", fences);
@@ -55,9 +62,13 @@ public class BlockRegistryArboriculture extends BlockRegistry {
planksFireproof = registerBlock(new BlockPlanks(true), ItemBlockWood.class, "planksFireproof");
registerOreDictWildcard("plankWood", planksFireproof);
slabsFireproof = registerBlock(new BlockSlab(true), ItemBlockWood.class, "slabsFireproof");
BlockSlab blockSlabFireproof = new BlockSlab(false, true);
BlockSlab blockSlabDoubleFireproof = new BlockSlab(true, true);
slabsFireproof = registerBlock(blockSlabFireproof, ItemBlockWoodSlab.class, "slabsFireproof", blockSlabDoubleFireproof, blockSlabFireproof);
registerOreDictWildcard("slabWood", slabsFireproof);
slabsDoubleFireproof = registerBlock(blockSlabDoubleFireproof, ItemBlockWoodSlab.class, "slabsDoubleFireproof", blockSlabDoubleFireproof, blockSlabFireproof);
fencesFireproof = registerBlock(new BlockArbFence(true), ItemBlockWood.class, "fencesFireproof");
registerOreDictWildcard("fenceWood", fencesFireproof);
@@ -46,8 +46,8 @@ public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyp
private final ParticleHelper.Callback particleCallback;
private final boolean fireproof;
public BlockSlab(boolean fireproof) {
super(false, Material.wood);
public BlockSlab(boolean doubleSlab, boolean fireproof) {
super(doubleSlab, Material.wood);
this.fireproof = fireproof;
@@ -61,9 +61,8 @@ public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyp
this.particleCallback = new ParticleHelper.DefaultCallback(this);
}
@Override
public boolean isOpaqueCube() {
return false;
public boolean isDoubleSlab() {
return field_150004_a;
}
/* ICONS */
@@ -100,8 +99,10 @@ public class BlockSlab extends net.minecraft.block.BlockSlab implements IWoodTyp
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public void getSubBlocks(Item item, CreativeTabs par2CreativeTabs, List list) {
for (EnumWoodType woodType : EnumWoodType.VALUES) {
list.add(TreeManager.woodItemAccess.getSlab(woodType, fireproof));
if (!isDoubleSlab()) {
for (EnumWoodType woodType : EnumWoodType.VALUES) {
list.add(TreeManager.woodItemAccess.getSlab(woodType, fireproof));
}
}
}
@@ -45,7 +45,6 @@ import forestry.arboriculture.genetics.alleles.AlleleFruit;
import forestry.arboriculture.genetics.alleles.AlleleGrowth;
import forestry.arboriculture.render.IconProviderGermling;
import forestry.arboriculture.render.IconProviderGermlingVanilla;
import forestry.arboriculture.render.IconProviderLeaves;
import forestry.arboriculture.tiles.TileLeaves;
import forestry.arboriculture.worldgen.BlockTypeLog;
import forestry.arboriculture.worldgen.WorldGenAcacia;
@@ -462,7 +461,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
// only available by rare villager trade
}
},
Jungle(TreeBranchDefinition.TROPICAL, "jungle", "tectona", false, EnumLeafType.JUNGLE, new Color(4764952), new Color(0x539d12), 3, new ItemStack(Blocks.log, 1, 3)) {
Jungle(TreeBranchDefinition.TROPICAL, "jungle", "tectona", false, EnumLeafType.JUNGLE, new Color(4764952), new Color(0x658917), 3, new ItemStack(Blocks.log, 1, 3)) {
@Override
public WorldGenerator getWorldGenerator(ITreeGenData tree) {
return new WorldGenJungle(tree);
@@ -868,7 +867,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
.restrictHumidity(EnumHumidity.DAMP);
}
},
Papaya(TreeBranchDefinition.CARICA, "papaya", "papaya", true, EnumLeafType.PALM, new Color(0x6d9f58), new Color(0x9ee67f), EnumWoodType.PAPAYA) {
Papaya(TreeBranchDefinition.CARICA, "papaya", "papaya", true, EnumLeafType.PALM, new Color(0x6d9f58), new Color(0x75E675), EnumWoodType.PAPAYA) {
@Override
public WorldGenerator getWorldGenerator(ITreeGenData tree) {
return new WorldGenPapaya(tree);
@@ -893,7 +892,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
registerMutation(Jungle, Cherry, 5);
}
},
Date(TreeBranchDefinition.PHOENIX, "datePalm", "dactylifera", true, EnumLeafType.PALM, new Color(0xcbcd79), new Color(0xf0f38f), EnumWoodType.PALM) {
Date(TreeBranchDefinition.PHOENIX, "datePalm", "dactylifera", true, EnumLeafType.PALM, new Color(0xcbcd79), new Color(0xB3F370), EnumWoodType.PALM) {
@Override
public WorldGenerator getWorldGenerator(ITreeGenData tree) {
return new WorldGenDate(tree);
@@ -963,7 +962,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
this.branch = branch;
ILeafIconProvider leafIconProvider = new IconProviderLeaves(leafType, primary, secondary);
ILeafIconProvider leafIconProvider = TreeManager.treeFactory.getLeafIconProvider(leafType, primary, secondary);
IGermlingIconProvider germlingIconProvider = new IconProviderGermlingVanilla(vanillaMeta);
this.species = TreeManager.treeFactory.createSpecies(uid, unlocalizedName, "Sengir", unlocalizedDescription, dominant, branch.getBranch(), binomial, leafIconProvider, germlingIconProvider, this);
@@ -979,7 +978,7 @@ public enum TreeDefinition implements ITreeDefinition, ITreeGenerator {
this.branch = branch;
ILeafIconProvider leafIconProvider = new IconProviderLeaves(leafType, primary, secondary);
ILeafIconProvider leafIconProvider = TreeManager.treeFactory.getLeafIconProvider(leafType, primary, secondary);
IGermlingIconProvider germlingIconProvider = new IconProviderGermling(uid);
this.species = TreeManager.treeFactory.createSpecies(uid, unlocalizedName, "Sengir", unlocalizedDescription, dominant, branch.getBranch(), binomial, leafIconProvider, germlingIconProvider, this);
@@ -44,6 +44,10 @@ public class ItemBlockWood extends ItemBlockForestry {
EnumWoodType woodType = getWoodType(stack);
Block block = Block.getBlockFromItem(stack.getItem());
return placeWood(stack, woodType, block, player, world, x, y, z, metadata);
}
public static boolean placeWood(ItemStack stack, EnumWoodType woodType, Block block, @Nullable EntityPlayer player, World world, int x, int y, int z, int metadata) {
boolean placed = world.setBlock(x, y, z, block, metadata, Constants.FLAG_BLOCK_SYNCH_AND_UPDATE);
if (!placed) {
return false;
@@ -120,6 +124,11 @@ public class ItemBlockWood extends ItemBlockForestry {
return null;
}
@Override
public int getMetadata(int i) {
return 0;
}
@Override
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) {
return placeWood(stack, player, world, x, y, z, metadata);
@@ -0,0 +1,173 @@
package forestry.arboriculture.items;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import forestry.api.arboriculture.EnumWoodType;
import forestry.arboriculture.blocks.BlockSlab;
import forestry.arboriculture.tiles.TileWood;
import forestry.core.tiles.TileUtil;
public class ItemBlockWoodSlab extends ItemBlockWood {
private final BlockSlab slab;
private final BlockSlab doubleSlab;
private final boolean isDoubleSlab;
public ItemBlockWoodSlab(Block block, BlockSlab doubleSlab, BlockSlab slab) {
super(block);
this.doubleSlab = doubleSlab;
this.slab = slab;
this.isDoubleSlab = (block == doubleSlab);
}
@Override
public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
if (isDoubleSlab) {
return super.onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ);
} else if (itemStack.stackSize == 0) {
return false;
} else if (!player.canPlayerEdit(x, y, z, side, itemStack)) {
return false;
} else {
Block block = world.getBlock(x, y, z);
int i1 = world.getBlockMetadata(x, y, z);
boolean flag = (i1 & 8) != 0;
EnumWoodType blockWoodType = null;
EnumWoodType stackWoodType = getWoodType(itemStack);
TileWood tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile != null) {
blockWoodType = tile.getWoodType();
}
if ((side == 1 && !flag || side == 0 && flag) && block == this.slab && blockWoodType == stackWoodType) {
if (world.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(world, x, y, z))) {
if (placeWood(itemStack, stackWoodType, doubleSlab, player, world, x, y, z, 0)) {
world.playSoundEffect((double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), this.doubleSlab.stepSound.func_150496_b(), (this.doubleSlab.stepSound.getVolume() + 1.0F) / 2.0F, this.doubleSlab.stepSound.getPitch() * 0.8F);
--itemStack.stackSize;
}
}
return true;
} else {
if (this.func_150946_a(itemStack, player, world, x, y, z, side)) {
return true;
} else {
return super.onItemUse(itemStack, player, world, x, y, z, side, hitX, hitY, hitZ);
}
}
}
}
@Override
@SideOnly(Side.CLIENT)
public boolean func_150936_a(World world, int x, int y, int z, int side, EntityPlayer player, ItemStack itemStack) {
int i1 = x;
int j1 = y;
int k1 = z;
Block block = world.getBlock(x, y, z);
int l1 = world.getBlockMetadata(x, y, z);
boolean flag = (l1 & 8) != 0;
EnumWoodType blockWoodType = null;
EnumWoodType stackWoodType = getWoodType(itemStack);
TileWood tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile != null) {
blockWoodType = tile.getWoodType();
}
if ((side == 1 && !flag || side == 0 && flag) && block == this.slab && stackWoodType == blockWoodType) {
return true;
} else {
if (side == 0) {
--y;
}
if (side == 1) {
++y;
}
if (side == 2) {
--z;
}
if (side == 3) {
++z;
}
if (side == 4) {
--x;
}
if (side == 5) {
++x;
}
Block block1 = world.getBlock(x, y, z);
tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile == null) {
blockWoodType = null;
} else {
blockWoodType = tile.getWoodType();
}
if (block1 == this.slab && stackWoodType == blockWoodType) {
return true;
} else {
return super.func_150936_a(world, i1, j1, k1, side, player, itemStack);
}
}
}
private boolean func_150946_a(ItemStack itemStack, EntityPlayer player, World world, int x, int y, int z, int side) {
if (side == 0) {
--y;
}
if (side == 1) {
++y;
}
if (side == 2) {
--z;
}
if (side == 3) {
++z;
}
if (side == 4) {
--x;
}
if (side == 5) {
++x;
}
Block block = world.getBlock(x, y, z);
EnumWoodType blockWoodType = null;
EnumWoodType stackWoodType = getWoodType(itemStack);
TileWood tile = TileUtil.getTile(world, x, y, z, TileWood.class);
if (tile != null) {
blockWoodType = tile.getWoodType();
}
if (block == this.slab && blockWoodType == stackWoodType) {
if (world.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(world, x, y, z))) {
if (placeWood(itemStack, stackWoodType, doubleSlab, player, world, x, y, z, 0)) {
world.playSoundEffect((double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), this.doubleSlab.stepSound.func_150496_b(), (this.doubleSlab.stepSound.getVolume() + 1.0F) / 2.0F, this.doubleSlab.stepSound.getPitch() * 0.8F);
--itemStack.stackSize;
}
}
return true;
} else {
return false;
}
}
}
@@ -21,7 +21,7 @@ import forestry.core.items.ItemWithGui;
public class ItemTreealyzer extends ItemWithGui {
public ItemTreealyzer() {
super(Tabs.tabArboriculture);
setCreativeTab(Tabs.tabArboriculture);
}
@Override
@@ -23,12 +23,14 @@ import net.minecraft.world.World;
import forestry.api.arboriculture.EnumWoodType;
import forestry.arboriculture.IWoodTyped;
import forestry.arboriculture.blocks.BlockSlab;
import forestry.arboriculture.items.ItemBlockWood;
import forestry.core.network.DataInputStreamForestry;
import forestry.core.network.DataOutputStreamForestry;
import forestry.core.network.IStreamable;
import forestry.core.network.packets.PacketTileStream;
import forestry.core.tiles.TileUtil;
import forestry.plugins.PluginArboriculture;
public class TileWood extends TileEntity implements IStreamable {
private EnumWoodType woodType;
@@ -93,7 +95,16 @@ public class TileWood extends TileEntity implements IStreamable {
}
EnumWoodType woodType = wood.getWoodType();
ItemStack itemStack = new ItemStack(block);
int amount = 1;
if (block instanceof BlockSlab) {
BlockSlab blockSlab = (BlockSlab) block;
if (blockSlab.isDoubleSlab()) {
amount = 2;
block = PluginArboriculture.blocks.slabs;
}
}
ItemStack itemStack = new ItemStack(block, amount);
ItemBlockWood.saveToItemStack(woodType, itemStack);
return itemStack;
}
@@ -285,8 +285,11 @@ public abstract class WorldGenArboriculture extends WorldGenBase {
wood.setDirection(branchDirection);
}
}
addWood(world, x, y, z, EnumReplaceMode.SOFT);
branchEnds.add(new ChunkCoordinates(x, y, z));
if (addWood(world, x, y, z, EnumReplaceMode.SOFT)) {
branchEnds.add(new ChunkCoordinates(x, y, z));
} else {
break;
}
}
}
}
@@ -295,28 +298,30 @@ public abstract class WorldGenArboriculture extends WorldGenBase {
}
@Override
protected void addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace) {
protected boolean addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace) {
if (replace == EnumReplaceMode.ALL
|| (replace == EnumReplaceMode.SOFT && BlockUtil.isReplaceableBlock(world, startX + x, startY + y, startZ + z))
|| world.isAirBlock(startX + x, startY + y, startZ + z)) {
type.setBlock(world, tree, startX + x, startY + y, startZ + z);
return true;
}
return false;
}
protected final void clearBlock(World world, int x, int y, int z) {
air.setBlock(world, startX + x, startY + y, startZ + z);
}
protected final void addWood(World world, int x, int y, int z, EnumReplaceMode replace) {
addBlock(world, x, y, z, wood, replace);
protected final boolean addWood(World world, int x, int y, int z, EnumReplaceMode replace) {
return addBlock(world, x, y, z, wood, replace);
}
protected final void addLeaf(World world, int x, int y, int z, EnumReplaceMode replace) {
addBlock(world, x, y, z, leaf, replace);
protected final boolean addLeaf(World world, int x, int y, int z, EnumReplaceMode replace) {
return addBlock(world, x, y, z, leaf, replace);
}
protected final void addVine(World world, int x, int y, int z, ITreeBlockType vine) {
addBlock(world, x, y, z, vine, EnumReplaceMode.NONE);
protected final boolean addVine(World world, int x, int y, int z, ITreeBlockType vine) {
return addBlock(world, x, y, z, vine, EnumReplaceMode.NONE);
}
protected final void addVines(World world, int x, int y, int z, float chance) {
@@ -12,5 +12,6 @@ package forestry.core.access;
public interface IRestrictedAccess {
IAccessHandler getAccessHandler();
void onSwitchAccess(EnumAccess oldAccess, EnumAccess newAccess);
}
@@ -22,12 +22,12 @@ import forestry.core.utils.StringUtil;
import forestry.plugins.PluginManager;
public abstract class BlockRegistry {
protected static <T extends Block> T registerBlock(T block, Class<? extends ItemBlock> itemClass, String name) {
protected static <T extends Block> T registerBlock(T block, Class<? extends ItemBlock> itemClass, String name, Object... itemCtorArgs) {
if (PluginManager.getStage() != PluginManager.Stage.SETUP) {
throw new RuntimeException("Tried to register Block outside of Setup");
}
block.setBlockName("for." + name);
GameRegistry.registerBlock(block, itemClass, StringUtil.cleanBlockName(block));
GameRegistry.registerBlock(block, itemClass, StringUtil.cleanBlockName(block), itemCtorArgs);
return block;
}
@@ -113,7 +113,7 @@ public abstract class BreedingTracker extends WorldSavedData implements IBreedin
}
private void syncToPlayer(Collection<String> discoveredSpecies, Collection<String> discoveredMutations, Collection<String> researchedMutations) {
if (world != null && username != null) {
if (world != null && username != null && username.getName() != null) {
EntityPlayer player = world.getPlayerEntityByName(username.getName());
if (player instanceof EntityPlayerMP && !(player instanceof FakePlayer)) {
IBreedingTracker breedingTracker = getBreedingTracker(player);
@@ -29,7 +29,7 @@ public class GuiHandler implements IGuiHandler {
public static void openGui(EntityPlayer entityplayer, IGuiHandlerEntity guiHandler, short data) {
int guiData = encodeGuiData(guiHandler, data);
entityplayer.openGui(ForestryAPI.instance, guiData, entityplayer.worldObj, guiHandler.getEntityId(), 0, 0);
entityplayer.openGui(ForestryAPI.instance, guiData, entityplayer.worldObj, guiHandler.getIdOfEntity(), 0, 0);
}
public static void openGui(EntityPlayer entityplayer, IGuiHandlerItem guiHandler) {
@@ -17,5 +17,6 @@ public interface IGuiHandlerEntity extends IGuiHandlerForestry {
Object getContainer(EntityPlayer player, int data);
int getEntityId();
// can't be named getEntityId() for obfuscation reasons
int getIdOfEntity();
}
@@ -16,9 +16,11 @@ package forestry.core.gui.buttons;
public interface IButtonTextureSet {
int getX();
int getY();
int getHeight();
int getWidth();
}
@@ -16,7 +16,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import forestry.core.config.Constants;
import forestry.core.network.DataInputStreamForestry;
@@ -14,7 +14,6 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import forestry.api.core.INBTTagable;
import forestry.core.utils.InventoryUtil;
@@ -28,8 +28,11 @@ import forestry.core.utils.StringUtil;
public class ItemOverlay extends ItemForestry {
public interface IOverlayInfo {
String getName();
int getPrimaryColor();
int getSecondaryColor();
boolean isSecret();
}
@@ -10,7 +10,6 @@
******************************************************************************/
package forestry.core.items;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -22,11 +21,7 @@ import forestry.core.gui.IGuiHandlerItem;
public abstract class ItemWithGui extends ItemForestry implements IGuiHandlerItem {
public ItemWithGui() {
}
public ItemWithGui(CreativeTabs creativeTabs) {
super(creativeTabs);
setMaxStackSize(1);
}
@Override
@@ -14,5 +14,6 @@ import java.io.IOException;
public interface IStreamableGui {
void writeGuiData(DataOutputStreamForestry data) throws IOException;
void readGuiData(DataInputStreamForestry data) throws IOException;
}
@@ -34,8 +34,10 @@ import forestry.energy.EnergyManager;
import cofh.api.energy.IEnergyConnection;
public abstract class TileEngine extends TileBase implements IEnergyConnection, IActivatable {
private static final int CANT_SEND_ENERGY_TIME = 20;
private boolean active = false; // Used for smp.
private int cantSendEnergyCountdown = CANT_SEND_ENERGY_TIME;
/**
* Indicates whether the piston is receding from or approaching the
* combustion chamber
@@ -147,8 +149,14 @@ public abstract class TileEngine extends TileBase implements IEnergyConnection,
if (energyManager.canSendEnergy(getOrientation(), tile)) {
stagePiston = 1; // If we can transfer energy, start running
setActive(true);
cantSendEnergyCountdown = CANT_SEND_ENERGY_TIME;
} else {
setActive(false);
if (isActive()) {
cantSendEnergyCountdown--;
if (cantSendEnergyCountdown <= 0) {
setActive(false);
}
}
}
} else {
setActive(false);
@@ -12,7 +12,6 @@ package forestry.core.utils;
import java.util.List;
import net.minecraft.command.IEntitySelector;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLiving;
@@ -466,7 +466,7 @@ public abstract class InventoryUtil {
int added = addStack(inventory, stack, startSlot, slots, false);
boolean success = all ? (added == stack.stackSize) : (added > 0);
if (success && doAdd) {
if (success && doAdd) {
addStack(inventory, stack, startSlot, slots, true);
}
@@ -66,7 +66,7 @@ public abstract class WorldGenBase extends WorldGenerator {
return false;
}
protected abstract void addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace);
protected abstract boolean addBlock(World world, int x, int y, int z, ITreeBlockType type, EnumReplaceMode replace);
protected final void generateCuboid(World world, Vector start, Vector area, ITreeBlockType block, EnumReplaceMode replace) {
for (int x = (int) start.x; x < (int) start.x + area.x; x++) {
@@ -12,12 +12,9 @@ package forestry.energy.tiles;
import net.minecraft.world.IBlockAccess;
import forestry.core.blocks.IMachineProperties;
import forestry.core.blocks.IMachinePropertiesTESR;
import forestry.core.render.IBlockRenderer;
import forestry.core.tiles.MachineDefinition;
import forestry.core.tiles.TileEngine;
import forestry.core.tiles.TileForestry;
import forestry.core.tiles.TileUtil;
public class EngineDefinition extends MachineDefinition {
@@ -0,0 +1,28 @@
package forestry.farming.logic;
import forestry.core.utils.vect.Vect;
import forestry.plugins.compat.PluginIC2;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import java.util.Collection;
public class CropBasicIC2Crop extends Crop {
private final TileEntity tileEntity;
public CropBasicIC2Crop(World world, TileEntity tileEntity, Vect position) {
super(world, position);
this.tileEntity = tileEntity;
}
@Override
protected boolean isCrop(Vect pos) {
return PluginIC2.instance.canHarvestCrop(this.tileEntity);
}
@Override
protected Collection<ItemStack> harvestBlock(Vect pos) {
return PluginIC2.instance.getCropDrops(this.tileEntity);
}
}
@@ -40,6 +40,7 @@ import forestry.core.utils.vect.VectUtil;
import forestry.plugins.PluginCore;
public class FarmLogicArboreal extends FarmLogicHomogeneous {
private static final int BRANCH_RANGE = 20;
public FarmLogicArboreal(IFarmHousing housing, ItemStack resource, ItemStack ground, Iterable<IFarmable> germlings) {
super(housing, resource, ground, germlings);
@@ -172,10 +173,10 @@ public class FarmLogicArboreal extends FarmLogicHomogeneous {
if (candidate.equals(position)) {
continue;
}
if (Math.abs(candidate.x - start.x) > 10) {
if (Math.abs(candidate.x - start.x) > BRANCH_RANGE) {
continue;
}
if (Math.abs(candidate.z - start.z) > 10) {
if (Math.abs(candidate.z - start.z) > BRANCH_RANGE) {
continue;
}
@@ -0,0 +1,52 @@
package forestry.farming.logic;
import forestry.api.farming.ICrop;
import forestry.api.farming.IFarmable;
import forestry.core.utils.vect.Vect;
import forestry.plugins.compat.PluginIC2;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class FarmableBasicIC2Crop implements IFarmable {
@Override
public boolean isSaplingAt(World world, int x, int y, int z) {
TileEntity crop = world.getTileEntity(x, y, z);
if(PluginIC2.instance.isIC2Crop(crop)) {
PluginIC2.instance.babysitCrop(crop);
return true;
}
return false;
}
@Override
public ICrop getCropAt(World world, int x, int y, int z) {
TileEntity crop = world.getTileEntity(x, y, z);
if (crop == null) {
return null;
}
if (!PluginIC2.instance.isIC2Crop(crop)) {
return null;
}
if (!PluginIC2.instance.canHarvestCrop(crop)) {
return null;
}
return new CropBasicIC2Crop(world, crop, new Vect(x, y, z));
}
@Override
public boolean isGermling(ItemStack itemstack) {
return false;
}
@Override
public boolean isWindfall(ItemStack itemstack) {
return false;
}
@Override
public boolean plantSaplingAt(EntityPlayer player, ItemStack germling, World world, int x, int y, int z) {
return false;
}
}
@@ -21,7 +21,7 @@ import forestry.lepidopterology.inventory.ItemInventoryFlutterlyzer;
public class ItemFlutterlyzer extends ItemWithGui {
public ItemFlutterlyzer() {
super(Tabs.tabLepidopterology);
setCreativeTab(Tabs.tabLepidopterology);
}
@Override
@@ -21,11 +21,15 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraftforge.common.ChestGenHooks;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.FuelBurnTimeEvent;
import net.minecraftforge.oredict.OreDictionary;
import cpw.mods.fml.common.IFuelHandler;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInterModComms.IMCMessage;
import cpw.mods.fml.common.eventhandler.Event;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.VillagerRegistry;
@@ -38,6 +42,7 @@ import forestry.api.genetics.AlleleManager;
import forestry.api.recipes.RecipeManagers;
import forestry.api.storage.ICrateRegistry;
import forestry.api.storage.StorageManager;
import forestry.arboriculture.IWoodTyped;
import forestry.arboriculture.VillageHandlerArboriculture;
import forestry.arboriculture.WoodItemAccess;
import forestry.arboriculture.blocks.BlockArboricultureType;
@@ -119,6 +124,9 @@ public class PluginArboriculture extends ForestryPlugin {
public void preInit() {
super.preInit();
// register for FuelBurnTimeEvent
MinecraftForge.EVENT_BUS.register(this);
for (EnumWoodType woodType : EnumWoodType.VALUES) {
WoodItemAccess.registerLog(blocks.logs, woodType, false);
WoodItemAccess.registerPlanks(blocks.planks, woodType, false);
@@ -411,11 +419,24 @@ public class PluginArboriculture extends ForestryPlugin {
return 100;
}
if (blocks.slabs == Block.getBlockFromItem(item)) {
return 150;
}
return 0;
}
}
@SubscribeEvent
public void fuelBurnTimeEvent(FuelBurnTimeEvent fuelBurnTimeEvent) {
Item item = fuelBurnTimeEvent.fuel.getItem();
Block block = Block.getBlockFromItem(item);
if (block instanceof IWoodTyped) {
IWoodTyped woodTypedBlock = (IWoodTyped) block;
if (woodTypedBlock.isFireproof()) {
fuelBurnTimeEvent.burnTime = 0;
fuelBurnTimeEvent.setResult(Event.Result.DENY);
} else if (blocks.slabs == block) {
fuelBurnTimeEvent.burnTime = 150;
fuelBurnTimeEvent.setResult(Event.Result.DENY);
}
}
}
}
@@ -303,9 +303,9 @@ public class PluginHarvestCraft extends ForestryPlugin {
}
plants.add(cropName);
}
ItemStack mustardCropSeed = GameRegistry.findItemStack(HC,"mustard" + "seedItem",1);
Block mustardCropBlock = GameRegistry.findBlock(HC,"pam"+"mustardseeds" + "Crop");
ItemStack mustardFruit = GameRegistry.findItemStack(HC,"mustard" + "seedsItem",1);
ItemStack mustardCropSeed = GameRegistry.findItemStack(HC, "mustard" + "seedItem", 1);
Block mustardCropBlock = GameRegistry.findBlock(HC, "pam" + "mustardseeds" + "Crop");
ItemStack mustardFruit = GameRegistry.findItemStack(HC, "mustard" + "seedsItem", 1);
if (mustardCropSeed != null) {
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{mustardCropSeed}, Fluids.SEEDOIL.getFluid(seedamount));
}
@@ -12,11 +12,19 @@ package forestry.plugins.compat;
import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import cpw.mods.fml.common.registry.GameRegistry;
import forestry.api.farming.Farmables;
import forestry.farming.logic.FarmableBasicIC2Crop;
import ic2.api.crops.ICropTile;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
@@ -300,6 +308,11 @@ public class PluginIC2 extends ForestryPlugin {
ChipsetManager.solderManager.addRecipe(layoutManual, PluginCore.items.tubes.get(EnumElectronTube.RUBBER, 1), Circuit.farmRubberManual);
}
Block ic2Crop = GameRegistry.findBlock("IC2", "blockCrop");
if (PluginManager.Module.FARMING.isEnabled() && ic2Crop != null) {
Farmables.farmables.get("farmOrchard").add(new FarmableBasicIC2Crop());
}
BlockRegistryEnergy energyBlocks = PluginEnergy.blocks;
if (energyBlocks != null) {
RecipeUtil.addRecipe(energyBlocks.engine.get(BlockEngineType.GENERATOR),
@@ -320,4 +333,78 @@ public class PluginIC2 extends ForestryPlugin {
'V', Blocks.piston);
}
}
/**
* Check if there is an instance of ICropTile.
* @param tileEntity tile entity to be checked.
* @return true if there is an IC2 crop and false otherwise.
*/
@Optional.Method(modid = "IC2")
public boolean isIC2Crop(TileEntity tileEntity) {
if (tileEntity != null && tileEntity instanceof ICropTile) {
return true;
}
return false;
}
/**
* Check if an IC2 crop is ready to be harvested.
* @param tileEntity tile entity to be checked.
* @return true if crop size is optimal for harvest and false otherwise.
*/
@Optional.Method(modid = "IC2")
public boolean canHarvestCrop(TileEntity tileEntity) {
if (isIC2Crop(tileEntity)) {
ICropTile crop = (ICropTile)tileEntity;
if (crop.getCrop() == null) {
return false;
}
if (crop.getSize() == crop.getCrop().getOptimalHavestSize(crop)) {
return true;
}
}
return false;
}
/**
* Perform some of the actions of the crop-matron.
* @param tileEntity
*/
@Optional.Method(modid = "IC2")
public void babysitCrop(TileEntity tileEntity) {
if (isIC2Crop(tileEntity)) {
ICropTile crop = (ICropTile)tileEntity;
/*
This part might be unbalanced until a custom farm logic is added and makes use of weed-ex.
if (crop.getCrop() != null) {
if (crop.getCrop().isWeed(crop)) {
crop.reset();
}
}*/
if (crop.getHydrationStorage() <= 200) {
crop.setHydrationStorage(200);
}
if (crop.getNutrientStorage() <= 100) {
crop.setNutrientStorage(crop.getNutrientStorage() + 100);
}
}
}
/**
* This function takes care of everything related to the harvesting of the
* crop meaning it will calculate the drops and also do setSizeAfterHarvest().
* @param tileEntity tile entity to be checked.
* @return arraylist containing the drops.
*/
@Optional.Method(modid = "IC2")
public ArrayList<ItemStack> getCropDrops(TileEntity tileEntity) {
if (isIC2Crop(tileEntity)) {
ICropTile crop = (ICropTile)tileEntity;
ItemStack[] cropDrops = crop.harvest_automated(true);
if (cropDrops != null) {
return new ArrayList<>(Arrays.asList(cropDrops));
}
}
return null;
}
}
@@ -158,7 +158,7 @@ public class PluginPlantMegaPack extends ForestryPlugin {
.put("cropRice", 4)
.put("cropWaterSpinach", 4)
.put("cropWildRice", 4)
.put("immersedArrowArum", 4)
.put("immersedCommonReed", 4)
.put("immersedDuckPotato", 4)
@@ -47,7 +47,7 @@ public class PluginRotaryCraft extends ForestryPlugin {
ItemStack canolaSeed = GameRegistry.findItemStack(RC, "rotarycraft_item_canola", 1);
Block canolaCrop = GameRegistry.findBlock(RC, "rotarycraft_block_canola");
int seedAmount = (ForestryAPI.activeMode.getIntegerSetting("squeezer.liquid.seed")/16);
int seedAmount = (ForestryAPI.activeMode.getIntegerSetting("squeezer.liquid.seed") / 16);
seedAmount = Math.max(seedAmount, 1); // Produce at least 1 mb.
if (canolaSeed != null && canolaCrop != null) {
RecipeManagers.squeezerManager.addRecipe(10, new ItemStack[]{canolaSeed}, Fluids.SEEDOIL.getFluid(seedAmount));