diff options
-rw-r--r-- | src/Java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java | 118 | ||||
-rw-r--r-- | src/Java/vswe/stevescarts/ModuleData/GppModuleData.java | 1 | ||||
-rw-r--r-- | src/resources/assets/stevescarts/lang/en_US.lang | 1 |
3 files changed, 93 insertions, 27 deletions
diff --git a/src/Java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java b/src/Java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java index 0add3fcb9b..617c4ddd8a 100644 --- a/src/Java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java +++ b/src/Java/gtPlusPlus/xmod/sc2/modules/ModuleExoticSeeds.java @@ -2,52 +2,116 @@ 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); - } + public ModuleExoticSeeds(MinecartModular cart) { + super(cart); + } + + private synchronized Block getBlockFromItemSeeds(ItemStack seed) { + try { - private synchronized Block getBlockFromItemSeeds(ItemStack seed) { - try { + Item seedItem = seed.getItem(); + if (!(seedItem instanceof ItemSeeds)) return null; - Item seedItem = seed.getItem(); - if (!(seedItem instanceof ItemSeeds)) return null; + Block cropBlock = (Block) ReflectionUtils.getField(ItemSeeds.class, "field_150925_a").get(seedItem); - Block cropBlock = (Block) ReflectionUtils.getField(ItemSeeds.class, "field_150925_a").get(seedItem); + return cropBlock; + } catch (Throwable t) { - return cropBlock; - } catch (Throwable t) { + } + return null; + } - } - return null; - } + @Override + public boolean isSeedValid(ItemStack seed) { + return getBlockFromItemSeeds(seed) != null; + } - @Override - public boolean isSeedValid(ItemStack seed) { - return getBlockFromItemSeeds(seed) != null; - } + @Override + public Block getCropFromSeed(ItemStack seed) { + return getBlockFromItemSeeds(seed); + } - @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); - @Override - public boolean isReadyToHarvest(int x, int y, int z) { - Block b = getCart().worldObj.getBlock(x, y, z); - int m = getCart().worldObj.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; + } - 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 = Class.forName("forestry.plugins.PluginCore"); + Field blocks = ReflectionUtils.getField(mForestryHumusBlockClass, "blocks"); + if (blocks != null) { + Object blockRegistryCoreObject = blocks.get(null); + mForestryBlockRegistryCoreClass = Class.forName("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 diff --git a/src/Java/vswe/stevescarts/ModuleData/GppModuleData.java b/src/Java/vswe/stevescarts/ModuleData/GppModuleData.java index d7fa1d8161..0b605fb8c1 100644 --- a/src/Java/vswe/stevescarts/ModuleData/GppModuleData.java +++ b/src/Java/vswe/stevescarts/ModuleData/GppModuleData.java @@ -19,6 +19,7 @@ public class GppModuleData extends ModuleData { super(id, name, moduleClass, modularCost); } + @SuppressWarnings("unchecked") public static void loadGpp() { try { HashMap<Byte, ModuleData> moduleList = diff --git a/src/resources/assets/stevescarts/lang/en_US.lang b/src/resources/assets/stevescarts/lang/en_US.lang new file mode 100644 index 0000000000..56dc8390a6 --- /dev/null +++ b/src/resources/assets/stevescarts/lang/en_US.lang @@ -0,0 +1 @@ +item.SC2:crop_exotic_seeds.name=Exotic Seed Module [GT++]
\ No newline at end of file |