diff options
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod/sc2/modules')
-rw-r--r-- | src/main/java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java b/src/main/java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java new file mode 100644 index 0000000000..dfaec8b703 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java @@ -0,0 +1,117 @@ +package gtPlusPlus.xmod.sc2.modules; + +import gtPlusPlus.core.lib.LoadedMods; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import static net.minecraft.init.Blocks.farmland; + +import java.lang.reflect.Field; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockCrops; +import net.minecraft.item.Item; +import net.minecraft.item.ItemSeeds; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import vswe.stevescarts.Carts.MinecartModular; +import vswe.stevescarts.Modules.ICropModule; +import vswe.stevescarts.Modules.Addons.ModuleAddon; + +public class ModuleExoticSeeds extends ModuleAddon implements ICropModule { + + public ModuleExoticSeeds(MinecartModular cart) { + super(cart); + } + + private synchronized Block getBlockFromItemSeeds(ItemStack seed) { + try { + + Item seedItem = seed.getItem(); + if (!(seedItem instanceof ItemSeeds)) return null; + + Block cropBlock = (Block) ReflectionUtils.getField(ItemSeeds.class, "field_150925_a").get(seedItem); + + return cropBlock; + } catch (Throwable t) { + + } + return null; + } + + @Override + public boolean isSeedValid(ItemStack seed) { + return getBlockFromItemSeeds(seed) != null; + } + + @Override + public Block getCropFromSeed(ItemStack seed) { + return getBlockFromItemSeeds(seed); + } + + @Override + public boolean isReadyToHarvest(int x, int y, int z) { + World world = getCart().worldObj; + Block b = world.getBlock(x, y, z); + int m = world.getBlockMetadata(x, y, z); + + //If Forestry is loaded, let's make this upgrade convert farmland to Humus. + /*if (LoadedMods.Forestry) { + Block mFarmLand = world.getBlock(x, y-1, z); + if (mFarmLand == farmland) { + Block h = tryGetHumus(); + if (h != farmland) { + world.setBlock(x, y-1, z, h); + } + } + }*/ + + + return b instanceof BlockCrops && m == 7; + } + + + + /** + * Static Class & Block References for Forestry content. + * Stops Forestry being a hard requirement for this feature without having to make @Optional annotations. + */ + + private static Class<?> mForestryHumusBlockClass; + private static Class<?> mForestryBlockRegistryCoreClass; + private static Block mForestryHumusBlock; + + private synchronized Block tryGetHumus() { + if (!LoadedMods.Forestry) { + return farmland; + } + else { + if (mForestryHumusBlockClass == null || mForestryHumusBlock == null) { + try { + mForestryHumusBlockClass = ReflectionUtils.getClass("forestry.plugins.PluginCore"); + Field blocks = ReflectionUtils.getField(mForestryHumusBlockClass, "blocks"); + if (blocks != null) { + Object blockRegistryCoreObject = blocks.get(null); + mForestryBlockRegistryCoreClass = ReflectionUtils.getClass("forestry.core.blocks.BlockRegistryCore"); + if (mForestryBlockRegistryCoreClass != null && blockRegistryCoreObject != null) { + Field soil = ReflectionUtils.getField(mForestryBlockRegistryCoreClass, "soil"); + if (soil != null) { + Block testHumus = (Block) soil.get(blockRegistryCoreObject); + if (testHumus != null) { + mForestryHumusBlock = testHumus; + } + } + } + } + } + catch (Throwable t) { + t.printStackTrace(); + } + } + if (mForestryHumusBlock != null) { + return mForestryHumusBlock; + } + } + return farmland; + } + +}
\ No newline at end of file |