mirror of
https://github.com/GTNewHorizons/ForestryMC.git
synced 2026-11-15 01:24:59 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2cc2540bdc | ||
|
|
84af238d82 | ||
|
|
89960db2bd | ||
|
|
c5f53bda3e | ||
|
|
2e1b62e58d | ||
|
|
982aefa165 | ||
|
|
2cccf95775 | ||
|
|
1969ed8b09 | ||
|
|
c3fc490fac | ||
|
|
59687329fb |
No files matched your search
+1
-1
@@ -8,4 +8,4 @@ ic2_version=2.6.5-ex110
|
||||
|
||||
version_major=5
|
||||
version_minor=2
|
||||
version_patch=0
|
||||
version_patch=3
|
||||
+1
-1
Submodule lang updated: a8bbc7bd1c...0d52088d32.
@@ -6,6 +6,7 @@
|
||||
package forestry.api.storage;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -41,5 +42,5 @@ public interface IBackpackDefinition {
|
||||
* @return the backpack's item filter.
|
||||
*/
|
||||
@Nonnull
|
||||
IBackpackFilter getFilter();
|
||||
Predicate<ItemStack> getFilter();
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package forestry.api.storage;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
/**
|
||||
* Filters items that can be put into a backpack.
|
||||
* You can get a specific backpack's filter with {@link IBackpackDefinition#getFilter()}.
|
||||
* <p>
|
||||
* For Backpack Implementers: you can create a new filter with {@link IBackpackInterface#createBackpackFilter()} or implement your own.
|
||||
*
|
||||
* @see IBackpackFilterConfigurable
|
||||
*/
|
||||
public interface IBackpackFilter extends Predicate<ItemStack> {
|
||||
/**
|
||||
* Returns true if the ItemStack is a valid item for this backpack filter.
|
||||
*/
|
||||
@Override
|
||||
boolean test(ItemStack itemstack);
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package forestry.api.storage;
|
||||
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.oredict.OreDictionary;
|
||||
|
||||
@@ -7,7 +9,7 @@ import net.minecraftforge.oredict.OreDictionary;
|
||||
* A configurable backpack filter. Useful for implementers of {@link IBackpackDefinition}.
|
||||
* Get a new instance from {@link IBackpackInterface#createBackpackFilter()}.
|
||||
*/
|
||||
public interface IBackpackFilterConfigurable extends IBackpackFilter {
|
||||
public interface IBackpackFilterConfigurable extends Predicate<ItemStack> {
|
||||
/**
|
||||
* Adds an item as valid for this backpack to pick up.
|
||||
*/
|
||||
|
||||
@@ -7,6 +7,7 @@ package forestry.api.storage;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import forestry.api.genetics.ISpeciesRoot;
|
||||
import net.minecraft.item.Item;
|
||||
@@ -84,5 +85,5 @@ public interface IBackpackInterface {
|
||||
* @return a new backpack filter for the specified species root
|
||||
* @see #createNaturalistBackpack(String, ISpeciesRoot)
|
||||
*/
|
||||
IBackpackFilter createNaturalistBackpackFilter(String speciesRootUid);
|
||||
Predicate<ItemStack> createNaturalistBackpackFilter(String speciesRootUid);
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* This work (the API) is licensed under the "MIT" License, see LICENSE.txt for details.
|
||||
******************************************************************************/
|
||||
@API(apiVersion = "4.0.0", owner = "ForestryAPI|core", provides = "ForestryAPI|storage")
|
||||
@API(apiVersion = "5.0.0", owner = "ForestryAPI|core", provides = "ForestryAPI|storage")
|
||||
package forestry.api.storage;
|
||||
|
||||
import net.minecraftforge.fml.common.API;
|
||||
@@ -12,10 +12,11 @@ package forestry.apiculture.blocks;
|
||||
|
||||
import forestry.api.core.Tabs;
|
||||
import forestry.core.blocks.BlockBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
|
||||
public class BlockApiculture extends BlockBase<BlockTypeApiculture> {
|
||||
public BlockApiculture(BlockTypeApiculture type) {
|
||||
super(type);
|
||||
super(type, Material.WOOD);
|
||||
setCreativeTab(Tabs.tabApiculture);
|
||||
setHarvestLevel("axe", 0);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ package forestry.apiculture.blocks;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.api.core.Tabs;
|
||||
@@ -36,7 +37,7 @@ public class BlockRegistryApiculture extends BlockRegistry {
|
||||
beeHouse = new BlockApiculture(BlockTypeApiculture.BEE_HOUSE);
|
||||
registerBlock(beeHouse, new ItemBlockForestry(beeHouse), "bee_house");
|
||||
|
||||
beeChest = new BlockBase<>(BlockTypeApicultureTesr.APIARIST_CHEST);
|
||||
beeChest = new BlockBase<>(BlockTypeApicultureTesr.APIARIST_CHEST, Material.WOOD);
|
||||
registerBlock(beeChest, new ItemBlockForestry(beeChest), "bee_chest");
|
||||
beeChest.setCreativeTab(Tabs.tabApiculture);
|
||||
beeChest.setHarvestLevel("axe", 0);
|
||||
|
||||
@@ -1,9 +1,15 @@
|
||||
package forestry.apiculture.genetics.alleles;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import forestry.core.genetics.EffectData;
|
||||
import forestry.core.utils.VectUtil;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockMushroom;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.entity.passive.EntityCow;
|
||||
import net.minecraft.entity.passive.EntityMooshroom;
|
||||
import net.minecraft.init.Blocks;
|
||||
@@ -11,12 +17,6 @@ import net.minecraft.util.EnumParticleTypes;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3i;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.gen.feature.WorldGenBigMushroom;
|
||||
|
||||
import forestry.api.apiculture.IBeeGenome;
|
||||
import forestry.api.apiculture.IBeeHousing;
|
||||
import forestry.api.genetics.IEffectData;
|
||||
import forestry.core.genetics.EffectData;
|
||||
|
||||
public class AlleleEffectFungification extends AlleleEffectThrottled {
|
||||
|
||||
@@ -24,7 +24,7 @@ public class AlleleEffectFungification extends AlleleEffectThrottled {
|
||||
private static final int ENTITY_THROTTLE = 6;
|
||||
|
||||
public AlleleEffectFungification() {
|
||||
super("mycophilic", true, 10, false, false);
|
||||
super("mycophilic", true, 20, false, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,50 +57,51 @@ public class AlleleEffectFungification extends AlleleEffectThrottled {
|
||||
World world = housing.getWorldObj();
|
||||
BlockPos housingCoordinates = housing.getCoordinates();
|
||||
Vec3i area = getModifiedArea(genome, housing);
|
||||
|
||||
int blockX = getRandomOffset(world.rand, housingCoordinates.getX(), area.getX());
|
||||
int blockY = getRandomOffset(world.rand, housingCoordinates.getY(), area.getY());
|
||||
int blockZ = getRandomOffset(world.rand, housingCoordinates.getZ(), area.getZ());
|
||||
|
||||
for (int attempt = 0; attempt < MAX_BLOCK_FIND_TRIES; ++attempt) {
|
||||
BlockPos pos = new BlockPos(blockX, blockY, blockZ);
|
||||
Block block = world.getBlockState(pos).getBlock();
|
||||
if (isSuitableForMycelium(world, block, pos)) {
|
||||
world.setBlockState(pos, Blocks.MYCELIUM.getDefaultState());
|
||||
break;
|
||||
} else if (isSuitableForGrowth(block)) {
|
||||
doMushroomGrowth(block, world, pos);
|
||||
break;
|
||||
}
|
||||
blockX = getRandomOffset(world.rand, housingCoordinates.getX(), area.getX());
|
||||
blockY = getRandomOffset(world.rand, housingCoordinates.getY(), area.getY());
|
||||
blockZ = getRandomOffset(world.rand, housingCoordinates.getZ(), area.getZ());
|
||||
}
|
||||
Vec3i halfArea = new Vec3i(area.getX() / 2, area.getY() / 2, area.getZ() / 2);
|
||||
|
||||
for (int attempt = 0; attempt < MAX_BLOCK_FIND_TRIES; ++attempt) {
|
||||
BlockPos pos = VectUtil.getRandomPositionInArea(world.rand, area).subtract(halfArea).add(housingCoordinates);
|
||||
IBlockState blockState = world.getBlockState(pos);
|
||||
|
||||
if (convertToMycelium(world, blockState, pos)) {
|
||||
return;
|
||||
} else if (growGiantMushroom(world, blockState, pos)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void doEntityEffect(IBeeGenome genome, IBeeHousing housing) {
|
||||
List<EntityCow> cows = getEntitiesInRange(genome, housing, EntityCow.class);
|
||||
for (EntityCow cow : cows) {
|
||||
convertCowToMooshroom(cow);
|
||||
if (convertCowToMooshroom(cow)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int getRandomOffset(Random random, int centrePos, int offset) {
|
||||
return centrePos + random.nextInt(offset) - offset / 2;
|
||||
}
|
||||
|
||||
private static boolean isSuitableForMycelium(World world, Block block, BlockPos pos) {
|
||||
return block == Blocks.GRASS || block == Blocks.DIRT && world.canBlockSeeSky(pos);
|
||||
|
||||
private static boolean convertToMycelium(World world, IBlockState blockState, BlockPos pos) {
|
||||
Block block = blockState.getBlock();
|
||||
if (block == Blocks.GRASS || block == Blocks.DIRT && world.canBlockSeeSky(pos)) {
|
||||
world.setBlockState(pos, Blocks.MYCELIUM.getDefaultState());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isSuitableForGrowth(Block block) {
|
||||
return block == Blocks.RED_MUSHROOM || block == Blocks.BROWN_MUSHROOM;
|
||||
private static boolean growGiantMushroom(World world, IBlockState blockState, BlockPos pos) {
|
||||
Block block = blockState.getBlock();
|
||||
if (block instanceof BlockMushroom) {
|
||||
BlockMushroom mushroom = (BlockMushroom) block;
|
||||
mushroom.generateBigMushroom(world, pos, blockState, world.rand);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void convertCowToMooshroom(EntityCow cow) {
|
||||
|
||||
private static boolean convertCowToMooshroom(EntityCow cow) {
|
||||
if (cow instanceof EntityMooshroom) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
World worldObj = cow.worldObj;
|
||||
cow.setDead();
|
||||
@@ -110,14 +111,6 @@ public class AlleleEffectFungification extends AlleleEffectThrottled {
|
||||
mooshroom.renderYawOffset = cow.renderYawOffset;
|
||||
worldObj.spawnEntityInWorld(mooshroom);
|
||||
worldObj.spawnParticle(EnumParticleTypes.EXPLOSION_LARGE, cow.posX, cow.posY + cow.height / 2.0F, cow.posZ, 0.0D, 0.0D, 0.0D);
|
||||
}
|
||||
|
||||
private static void doMushroomGrowth(Block block, World world, BlockPos pos) {
|
||||
WorldGenBigMushroom giantMushroomGenerator;
|
||||
|
||||
giantMushroomGenerator = new WorldGenBigMushroom(block);
|
||||
|
||||
world.setBlockToAir(pos);
|
||||
giantMushroomGenerator.generate(world, world.rand, pos);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -12,10 +12,12 @@ package forestry.arboriculture.blocks;
|
||||
|
||||
import forestry.api.core.Tabs;
|
||||
import forestry.core.blocks.BlockBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
|
||||
public class BlockArboriculture extends BlockBase<BlockTypeArboricultureTesr> {
|
||||
public BlockArboriculture(BlockTypeArboricultureTesr type) {
|
||||
super(type);
|
||||
super(type, Material.WOOD);
|
||||
setCreativeTab(Tabs.tabArboriculture);
|
||||
setHarvestLevel("axe", 0);
|
||||
}
|
||||
}
|
||||
@@ -531,7 +531,7 @@ public abstract class BlockPile extends BlockStructure implements ITileEntityPro
|
||||
}
|
||||
|
||||
public static IAlleleTreeSpecies getTreeSpecies(ItemStack stack) {
|
||||
if (stack != null) {
|
||||
if (stack != null && stack.hasTagCompound()) {
|
||||
NBTTagCompound tagCompound = stack.getTagCompound();
|
||||
|
||||
// legacy
|
||||
|
||||
@@ -74,8 +74,8 @@ public class BlockBase<P extends Enum<P> & IBlockType & IStringSerializable> ext
|
||||
|
||||
protected final BlockStateContainer blockState;
|
||||
|
||||
public BlockBase(@Nonnull P blockType) {
|
||||
super(Material.IRON);
|
||||
public BlockBase(@Nonnull P blockType, Material material) {
|
||||
super(material);
|
||||
|
||||
this.blockType = blockType;
|
||||
blockType.getMachineProperties().setBlock(this);
|
||||
@@ -90,6 +90,10 @@ public class BlockBase<P extends Enum<P> & IBlockType & IStringSerializable> ext
|
||||
|
||||
particleCallback = new MachineParticleCallback<>(this, blockType);
|
||||
}
|
||||
|
||||
public BlockBase(@Nonnull P blockType) {
|
||||
this(blockType, Material.IRON);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube(IBlockState state) {
|
||||
|
||||
@@ -13,5 +13,6 @@ package forestry.core.blocks;
|
||||
public class BlockCore extends BlockBase<BlockTypeCoreTesr> {
|
||||
public BlockCore(BlockTypeCoreTesr blockType) {
|
||||
super(blockType);
|
||||
setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,9 @@ import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.init.SoundEvents;
|
||||
import net.minecraft.item.ItemPickaxe;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.ItemTool;
|
||||
import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
@@ -48,6 +50,15 @@ public class ItemForestryTool extends ItemForestry {
|
||||
public void setEfficiencyOnProperMaterial(float efficiencyOnProperMaterial) {
|
||||
this.efficiencyOnProperMaterial = efficiencyOnProperMaterial;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canHarvestBlock(IBlockState block) {
|
||||
if(this == PluginCore.items.bronzePickaxe){
|
||||
Material material = block.getMaterial();
|
||||
return material == Material.ROCK ? true : (material == Material.IRON ? true : material == Material.ANVIL);
|
||||
}
|
||||
return super.canHarvestBlock(block);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getStrVsBlock(ItemStack itemstack, IBlockState state) {
|
||||
@@ -56,6 +67,10 @@ public class ItemForestryTool extends ItemForestry {
|
||||
return efficiencyOnProperMaterial;
|
||||
}
|
||||
}
|
||||
if(this == PluginCore.items.bronzePickaxe){
|
||||
Material material = state.getMaterial();
|
||||
return material != Material.IRON && material != Material.ANVIL && material != Material.ROCK ? super.getStrVsBlock(itemstack, state) : this.efficiencyOnProperMaterial;
|
||||
}
|
||||
return super.getStrVsBlock(itemstack, state);
|
||||
}
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import net.minecraft.client.resources.IResource;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.client.renderer.block.model.ModelBakery;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
@@ -60,6 +61,7 @@ import gnu.trove.map.hash.TIntObjectHashMap;
|
||||
public class ModelCrate extends BlankItemModel {
|
||||
|
||||
private static final Map<String, IBakedModel> cache = Maps.newHashMap();
|
||||
private static final String CUSTOM_CRATES = "forestry:item/crates/";
|
||||
|
||||
private static IModel crateModel;
|
||||
private static ModelBlock MODEL_GENERATED;
|
||||
@@ -174,6 +176,24 @@ public class ModelCrate extends BlankItemModel {
|
||||
return new CrateOverrideList();
|
||||
}
|
||||
|
||||
private static IModel getCustomContentModel(ItemCrated crateItem){
|
||||
ItemStack contained = crateItem.getContained();
|
||||
if(contained != null){
|
||||
try {
|
||||
return ModelLoaderRegistry.getModel(getCustomContentModelLocation(crateItem));
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static ResourceLocation getCustomContentModelLocation(ItemCrated crateItem){
|
||||
String containedName = crateItem.getRegistryName().getResourcePath().replace("crated.", "");
|
||||
return new ResourceLocation(CUSTOM_CRATES + containedName);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Bake the crate model.
|
||||
*/
|
||||
@@ -181,6 +201,7 @@ public class ModelCrate extends BlankItemModel {
|
||||
List<IBakedModel> models = new ArrayList<>();
|
||||
|
||||
IBakedModel containedModel = getModel(crateItem.getContained());
|
||||
IModel customContentModel = getCustomContentModel(crateItem);
|
||||
|
||||
IdentityHashMap<Item, TIntObjectHashMap<ModelResourceLocation>> modelResourceLocations = ObfuscationReflectionHelper.getPrivateValue(ItemModelMesherForge.class, (ItemModelMesherForge) Minecraft.getMinecraft().getRenderItem().getItemModelMesher(), 0);
|
||||
|
||||
@@ -189,6 +210,11 @@ public class ModelCrate extends BlankItemModel {
|
||||
|
||||
models.add(crateModel);
|
||||
|
||||
if(customContentModel != null){
|
||||
containedModel = customContentModel.bake(ModelManager.getInstance().DEFAULT_ITEM, DefaultVertexFormats.ITEM, new DefaultTextureGetter());
|
||||
location = getCustomContentModelLocation(crateItem);
|
||||
}
|
||||
|
||||
if (hasItemModel(location)) {
|
||||
models.add(new TRSRBakedModel(containedModel, -0.0625F, 0, 0.0625F, 0.5F));
|
||||
models.add(new TRSRBakedModel(containedModel, -0.0625F, 0, -0.0625F, 0.5F));
|
||||
|
||||
@@ -56,6 +56,7 @@ public class BlockEngine extends BlockBase<BlockTypeEngine> {
|
||||
|
||||
public BlockEngine(BlockTypeEngine blockType) {
|
||||
super(blockType);
|
||||
setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,5 +15,6 @@ import forestry.core.blocks.BlockBase;
|
||||
public class BlockFactoryPlain extends BlockBase<BlockTypeFactoryPlain> {
|
||||
public BlockFactoryPlain(BlockTypeFactoryPlain type) {
|
||||
super(type);
|
||||
setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
}
|
||||
@@ -15,5 +15,6 @@ import forestry.core.blocks.BlockBase;
|
||||
public class BlockFactoryTESR extends BlockBase<BlockTypeFactoryTesr> {
|
||||
public BlockFactoryTESR(BlockTypeFactoryTesr type) {
|
||||
super(type);
|
||||
setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
******************************************************************************/
|
||||
package forestry.greenhouse;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
@@ -71,23 +72,23 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
@Override
|
||||
public void registerRecipes() {
|
||||
|
||||
ItemStack greenhousePlainBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN);
|
||||
Block greenhousePlainBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN);
|
||||
RecipeUtil.addRecipe(greenhousePlainBlock,
|
||||
"###",
|
||||
"#X#",
|
||||
"###",
|
||||
'X', Blocks.BRICK_BLOCK,
|
||||
'#', PluginCore.items.craftingMaterial.getCamouflagedPaneling());
|
||||
|
||||
ItemStack greenhouseGlassBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.GLASS);
|
||||
|
||||
Block greenhouseGlassBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.GLASS);
|
||||
RecipeUtil.addRecipe(greenhouseGlassBlock,
|
||||
"###",
|
||||
"#X#",
|
||||
"###",
|
||||
'X', "blockGlass",
|
||||
'#', PluginCore.items.craftingMaterial.getCamouflagedPaneling());
|
||||
|
||||
ItemStack greenhouseHatchInputBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.HATCH_INPUT);
|
||||
|
||||
Block greenhouseHatchInputBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.HATCH_INPUT);
|
||||
RecipeUtil.addRecipe(greenhouseHatchInputBlock,
|
||||
"TXT",
|
||||
"#H#",
|
||||
@@ -95,8 +96,8 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
'H', OreDictUtil.TRAPDOOR_WOOD,
|
||||
'#', "gearTin",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.BRONZE, 1));
|
||||
|
||||
ItemStack greenhouseHatchOutputBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.HATCH_OUTPUT);
|
||||
|
||||
Block greenhouseHatchOutputBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.HATCH_OUTPUT);
|
||||
RecipeUtil.addRecipe(greenhouseHatchOutputBlock,
|
||||
"#H#",
|
||||
"TXT",
|
||||
@@ -104,31 +105,31 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
'H', OreDictUtil.TRAPDOOR_WOOD,
|
||||
'#', "gearTin",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.BRONZE, 1));
|
||||
|
||||
ItemStack greenhouseControlBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.CONTROL);
|
||||
|
||||
Block greenhouseControlBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.CONTROL);
|
||||
RecipeUtil.addRecipe(greenhouseControlBlock,
|
||||
" X ",
|
||||
"#T#",
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
|
||||
'#', "dustRedstone",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.GOLD, 1));
|
||||
|
||||
ItemStack greenhouseGearBoxBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.GEARBOX);
|
||||
|
||||
Block greenhouseGearBoxBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.GEARBOX);
|
||||
RecipeUtil.addRecipe(greenhouseGearBoxBlock,
|
||||
" X ",
|
||||
"###",
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
|
||||
'#', "gearTin");
|
||||
|
||||
ItemStack greenhouseValveBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.VALVE);
|
||||
|
||||
Block greenhouseValveBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.VALVE);
|
||||
RecipeUtil.addRecipe(greenhouseValveBlock,
|
||||
" X ",
|
||||
"#G#",
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
|
||||
'#', "blockGlass",
|
||||
'G', "gearTin");
|
||||
|
||||
ItemStack greenhouseHeaterBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.HEATER);
|
||||
|
||||
Block greenhouseHeaterBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.HEATER);
|
||||
RecipeUtil.addRecipe(greenhouseHeaterBlock,
|
||||
"T#T",
|
||||
"#X#",
|
||||
@@ -136,8 +137,8 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
|
||||
'#', "ingotGold",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.GOLD, 1));
|
||||
|
||||
ItemStack greenhouseFanlock = blocks.getGreenhouseBlock(BlockGreenhouseType.FAN);
|
||||
|
||||
Block greenhouseFanlock = blocks.getGreenhouseBlock(BlockGreenhouseType.FAN);
|
||||
RecipeUtil.addRecipe(greenhouseFanlock,
|
||||
"T#T",
|
||||
"#X#",
|
||||
@@ -145,8 +146,8 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
|
||||
'#', "ingotTin",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.TIN, 1));
|
||||
|
||||
ItemStack greenhouseDryerBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.DRYER);
|
||||
|
||||
Block greenhouseDryerBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.DRYER);
|
||||
RecipeUtil.addRecipe(greenhouseDryerBlock,
|
||||
"T#T",
|
||||
"#X#",
|
||||
@@ -154,8 +155,8 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.PLAIN),
|
||||
'#', "ingotBronze",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.BLAZE, 1));
|
||||
|
||||
ItemStack greenhouseSprinklerBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.SPRINKLER);
|
||||
|
||||
Block greenhouseSprinklerBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.SPRINKLER);
|
||||
RecipeUtil.addRecipe(greenhouseSprinklerBlock,
|
||||
"TXT",
|
||||
" I ",
|
||||
@@ -163,14 +164,15 @@ public class PluginGreenhouse extends BlankForestryPlugin {
|
||||
'X', blocks.getGreenhouseBlock(BlockGreenhouseType.GLASS),
|
||||
'I', "ingotIron",
|
||||
'T', PluginCore.items.tubes.get(EnumElectronTube.LAPIS, 1));
|
||||
|
||||
ItemStack greenhouseDoorBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.DOOR);
|
||||
|
||||
Block greenhouseDoorBlock = blocks.getGreenhouseBlock(BlockGreenhouseType.DOOR);
|
||||
RecipeUtil.addRecipe(greenhouseDoorBlock,
|
||||
true,
|
||||
"GG ",
|
||||
"GG ",
|
||||
"GG ",
|
||||
'G', blocks.getGreenhouseBlock(BlockGreenhouseType.GLASS));
|
||||
|
||||
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.FACTORY)) {
|
||||
RecipeManagers.carpenterManager.addRecipe(50, Fluids.BIOMASS.getFluid(500), null, PluginCore.items.craftingMaterial.getCamouflagedPaneling(),
|
||||
" A ", "###", "RPR",
|
||||
|
||||
@@ -140,7 +140,7 @@ public abstract class BlockGreenhouse extends BlockStructure implements ISpriteR
|
||||
@SideOnly(Side.CLIENT)
|
||||
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
|
||||
if (getGreenhouseType() == BlockGreenhouseType.SPRINKLER) {
|
||||
return SPRINKLER_BOUNDS;
|
||||
return SPRINKLER_BOUNDS.offset(pos);
|
||||
}
|
||||
return super.getSelectedBoundingBox(state, worldIn, pos);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package forestry.greenhouse.blocks;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Map;
|
||||
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import forestry.core.blocks.BlockRegistry;
|
||||
import forestry.core.items.ItemBlockForestry;
|
||||
@@ -24,9 +24,8 @@ public class BlockRegistryGreenhouse extends BlockRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getGreenhouseBlock(BlockGreenhouseType type) {
|
||||
BlockGreenhouse greenhouseBlock = greenhouseBlockMap.get(type);
|
||||
return new ItemStack(greenhouseBlock);
|
||||
public BlockGreenhouse getGreenhouseBlock(BlockGreenhouseType type) {
|
||||
return greenhouseBlockMap.get(type);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,9 +34,14 @@ public class ProxyGreenhouseClient extends ProxyGreenhouse {
|
||||
ClientRegistry.bindTileEntitySpecialRenderer(TileGreenhouseSprinkler.class, new AnimationTESR<>());
|
||||
continue;
|
||||
}
|
||||
Proxies.render.registerBlockModel(new BlockModelIndex(new ModelResourceLocation("forestry:greenhouse." + greenhouseType),
|
||||
new ModelResourceLocation("forestry:greenhouse", "inventory"), new ModelGreenhouse(),
|
||||
Block.getBlockFromItem(PluginGreenhouse.blocks.getGreenhouseBlock(greenhouseType).getItem())));
|
||||
|
||||
Block greenhouseBlock = PluginGreenhouse.blocks.getGreenhouseBlock(greenhouseType);
|
||||
if (greenhouseBlock != null) {
|
||||
ModelResourceLocation blockModelLocation = new ModelResourceLocation("forestry:greenhouse." + greenhouseType);
|
||||
ModelResourceLocation itemModelLocation = new ModelResourceLocation("forestry:greenhouse", "inventory");
|
||||
BlockModelIndex blockModelIndex = new BlockModelIndex(blockModelLocation, itemModelLocation, new ModelGreenhouse(), greenhouseBlock);
|
||||
Proxies.render.registerBlockModel(blockModelIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,7 +158,7 @@ public class BlockCocoon extends Block implements ITileEntityProvider, IStateMap
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
|
||||
return BOUNDING_BOX;
|
||||
return BOUNDING_BOX.offset(pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,10 +12,12 @@ package forestry.lepidopterology.blocks;
|
||||
|
||||
import forestry.api.core.Tabs;
|
||||
import forestry.core.blocks.BlockBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
|
||||
public class BlockLepidopterology extends BlockBase<BlockTypeLepidopterologyTesr> {
|
||||
public BlockLepidopterology(BlockTypeLepidopterologyTesr type) {
|
||||
super(type);
|
||||
super(type, Material.WOOD);
|
||||
setCreativeTab(Tabs.tabLepidopterology);
|
||||
setHarvestLevel("axe", 0);
|
||||
}
|
||||
}
|
||||
@@ -15,5 +15,6 @@ import forestry.core.blocks.BlockBase;
|
||||
public class BlockMail extends BlockBase<BlockTypeMail> {
|
||||
public BlockMail(BlockTypeMail blockType) {
|
||||
super(blockType);
|
||||
setHarvestLevel("pickaxe", 0);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,17 @@
|
||||
package forestry.plugins.compat;
|
||||
|
||||
import forestry.core.blocks.BlockBase;
|
||||
import forestry.core.blocks.BlockRegistry;
|
||||
import forestry.energy.blocks.BlockEngine;
|
||||
import forestry.energy.blocks.BlockTypeEngine;
|
||||
import forestry.energy.items.ItemEngine;
|
||||
|
||||
public class BlockRegistryIC2 extends BlockRegistry {
|
||||
public final BlockEngine electricalEngine;
|
||||
public final BlockBase electricalEngine;
|
||||
public final BlockEngine generator;
|
||||
|
||||
public BlockRegistryIC2() {
|
||||
electricalEngine = new BlockEngine(BlockTypeEngine.ELECTRICAL);
|
||||
electricalEngine = new BlockBase(BlockTypeEngine.ELECTRICAL);
|
||||
registerBlock(electricalEngine, new ItemEngine(electricalEngine), "engine_electrical");
|
||||
|
||||
generator = new BlockEngine(BlockTypeEngine.GENERATOR);
|
||||
|
||||
@@ -12,10 +12,10 @@ package forestry.storage;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.awt.*;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import forestry.api.storage.BackpackManager;
|
||||
import forestry.api.storage.IBackpackDefinition;
|
||||
import forestry.api.storage.IBackpackFilter;
|
||||
import forestry.core.utils.Translator;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
@@ -25,13 +25,13 @@ public class BackpackDefinition implements IBackpackDefinition {
|
||||
private final int primaryColor;
|
||||
private final int secondaryColor;
|
||||
@Nonnull
|
||||
private final IBackpackFilter filter;
|
||||
private final Predicate<ItemStack> filter;
|
||||
|
||||
public BackpackDefinition(@Nonnull Color primaryColor, @Nonnull Color secondaryColor) {
|
||||
this(primaryColor, secondaryColor, BackpackManager.backpackInterface.createBackpackFilter());
|
||||
}
|
||||
|
||||
public BackpackDefinition(@Nonnull Color primaryColor, @Nonnull Color secondaryColor, @Nonnull IBackpackFilter filter) {
|
||||
public BackpackDefinition(@Nonnull Color primaryColor, @Nonnull Color secondaryColor, @Nonnull Predicate<ItemStack> filter) {
|
||||
this.primaryColor = primaryColor.getRGB();
|
||||
this.secondaryColor = secondaryColor.getRGB();
|
||||
this.filter = filter;
|
||||
@@ -39,7 +39,7 @@ public class BackpackDefinition implements IBackpackDefinition {
|
||||
|
||||
@Override
|
||||
@Nonnull
|
||||
public IBackpackFilter getFilter() {
|
||||
public Predicate<ItemStack> getFilter() {
|
||||
return filter;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package forestry.storage;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import forestry.api.genetics.AlleleManager;
|
||||
import forestry.api.genetics.ISpeciesRoot;
|
||||
import forestry.api.storage.IBackpackFilter;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public class BackpackFilterNaturalist implements IBackpackFilter {
|
||||
public class BackpackFilterNaturalist implements Predicate<ItemStack> {
|
||||
@Nonnull
|
||||
private final String speciesRootUid;
|
||||
|
||||
|
||||
@@ -14,13 +14,13 @@ import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import forestry.api.genetics.ISpeciesRoot;
|
||||
import forestry.api.storage.EnumBackpackType;
|
||||
import forestry.api.storage.IBackpackDefinition;
|
||||
import forestry.api.storage.IBackpackFilter;
|
||||
import forestry.api.storage.IBackpackFilterConfigurable;
|
||||
import forestry.api.storage.IBackpackInterface;
|
||||
import forestry.core.utils.ItemStackUtil;
|
||||
@@ -116,7 +116,7 @@ public class BackpackInterface implements IBackpackInterface {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBackpackFilter createNaturalistBackpackFilter(String speciesRootUid) {
|
||||
public Predicate<ItemStack> createNaturalistBackpackFilter(String speciesRootUid) {
|
||||
return new BackpackFilterNaturalist(speciesRootUid);
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
@@ -27,7 +28,6 @@ import forestry.api.core.ForestryAPI;
|
||||
import forestry.api.recipes.RecipeManagers;
|
||||
import forestry.api.storage.BackpackManager;
|
||||
import forestry.api.storage.IBackpackDefinition;
|
||||
import forestry.api.storage.IBackpackFilter;
|
||||
import forestry.api.storage.IBackpackFilterConfigurable;
|
||||
import forestry.api.storage.StorageManager;
|
||||
import forestry.apiculture.PluginApiculture;
|
||||
@@ -105,13 +105,13 @@ public class PluginStorage extends BlankForestryPlugin {
|
||||
BackpackDefinition definition;
|
||||
|
||||
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.APICULTURE)) {
|
||||
IBackpackFilter filter = BackpackManager.backpackInterface.createNaturalistBackpackFilter("rootBees");
|
||||
Predicate<ItemStack> filter = BackpackManager.backpackInterface.createNaturalistBackpackFilter("rootBees");
|
||||
definition = new BackpackDefinition(new Color(0xc4923d), Color.WHITE, filter);
|
||||
BackpackManager.backpackInterface.registerBackpackDefinition("apiarist", definition);
|
||||
}
|
||||
|
||||
if (ForestryAPI.enabledPlugins.contains(ForestryPluginUids.LEPIDOPTEROLOGY)) {
|
||||
IBackpackFilter filter = BackpackManager.backpackInterface.createNaturalistBackpackFilter("rootButterflies");
|
||||
Predicate<ItemStack> filter = BackpackManager.backpackInterface.createNaturalistBackpackFilter("rootButterflies");
|
||||
definition = new BackpackDefinition(new Color(0x995b31), Color.WHITE, filter);
|
||||
BackpackManager.backpackInterface.registerBackpackDefinition("lepidopterist", definition);
|
||||
}
|
||||
@@ -420,7 +420,7 @@ public class PluginStorage extends BlankForestryPlugin {
|
||||
return;
|
||||
}
|
||||
|
||||
IBackpackFilter filter = backpackDefinition.getFilter();
|
||||
Predicate<ItemStack> filter = backpackDefinition.getFilter();
|
||||
if (filter instanceof IBackpackFilterConfigurable) {
|
||||
IBackpackFilterConfigurable backpackFilter = (IBackpackFilterConfigurable) filter;
|
||||
backpackFilter.clear();
|
||||
@@ -549,7 +549,7 @@ public class PluginStorage extends BlankForestryPlugin {
|
||||
return true;
|
||||
}
|
||||
List<ItemStack> itemStacks = ItemStackUtil.parseItemStackStrings(tokens[1], 0);
|
||||
IBackpackFilter filter = backpackDefinition.getFilter();
|
||||
Predicate<ItemStack> filter = backpackDefinition.getFilter();
|
||||
if (filter instanceof IBackpackFilterConfigurable) {
|
||||
IBackpackFilterConfigurable backpackFilter = (IBackpackFilterConfigurable) filter;
|
||||
for (ItemStack itemStack : itemStacks) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"textures": {
|
||||
"particle": "forestry:blocks/lepidopterology/cocoons/cocoon_early",
|
||||
"0": "forestry:blocks/lepidopterology/cocoons/cocoon_early"
|
||||
},
|
||||
"elements": [
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"textures": {
|
||||
"particle": "forestry:blocks/lepidopterology/cocoons/cocoon_late",
|
||||
"0": "forestry:blocks/lepidopterology/cocoons/cocoon_late"
|
||||
},
|
||||
"elements": [
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"textures": {
|
||||
"particle": "forestry:blocks/lepidopterology/cocoons/cocoon_middle",
|
||||
"0": "forestry:blocks/lepidopterology/cocoons/cocoon_middle"
|
||||
},
|
||||
"elements": [
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"textures": {
|
||||
"particle": "forestry:blocks/lepidopterology/cocoons/cocoon_silk_late",
|
||||
"0": "forestry:blocks/lepidopterology/cocoons/cocoon_silk_late"
|
||||
},
|
||||
"elements": [
|
||||
|
||||
Reference in new issue
Block a user