From c91249c78f7a0d7c2aac0eb9daa59cd3e7b82990 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Thu, 30 Apr 2015 15:53:51 +0100 Subject: [PATCH] Added the Orechid Ignem. --- .../java/vazkii/botania/api/BotaniaAPI.java | 42 ++++++++++++--- .../common/block/BlockSpecialFlower.java | 1 + .../botania/common/block/ModBlocks.java | 6 ++- .../functional/SubTileOrechidIgnem.java | 48 ++++++++++++++++++ .../subtile/functional/SubtileOrechid.java | 31 ++++++++--- .../common/crafting/ModPetalRecipes.java | 2 + .../botania/common/lexicon/LexiconData.java | 4 ++ .../botania/common/lib/LibBlockNames.java | 1 + .../vazkii/botania/common/lib/LibLexicon.java | 1 + .../resources/assets/botania/lang/en_US.lang | 7 +++ .../textures/blocks/alt/orechidIgnem.png | Bin 0 -> 18040 bytes .../botania/textures/blocks/orechidIgnem.png | Bin 0 -> 18040 bytes 12 files changed, 128 insertions(+), 15 deletions(-) create mode 100644 src/main/java/vazkii/botania/common/block/subtile/functional/SubTileOrechidIgnem.java create mode 100644 src/main/resources/assets/botania/textures/blocks/alt/orechidIgnem.png create mode 100644 src/main/resources/assets/botania/textures/blocks/orechidIgnem.png diff --git a/src/main/java/vazkii/botania/api/BotaniaAPI.java b/src/main/java/vazkii/botania/api/BotaniaAPI.java index c9ed0e144..2206f3d29 100644 --- a/src/main/java/vazkii/botania/api/BotaniaAPI.java +++ b/src/main/java/vazkii/botania/api/BotaniaAPI.java @@ -80,6 +80,7 @@ public final class BotaniaAPI { public static BiMap miniFlowers = HashBiMap. create(); public static Map oreWeights = new HashMap(); + public static Map oreWeightsNether = new HashMap(); public static Map seeds = new HashMap(); public static Set looniumBlacklist = new LinkedHashSet(); @@ -120,18 +121,15 @@ public final class BotaniaAPI { addOreWeight("oreAmber", 2075); // Thaumcraft addOreWeight("oreApatite", 1595); // Forestry addOreWeight("oreBlueTopaz", 3195); // Ars Magica - addOreWeight("oreCassiterite", 1634); // GregTech addOreWeight("oreCertusQuartz", 3975); // Applied Energistics addOreWeight("oreChimerite", 3970); // Ars Magica addOreWeight("oreCinnabar", 2585); // Thaumcraft addOreWeight("oreCoal", 46525); // Vanilla - addOreWeight("oreCooperite", 5); // GregTech addOreWeight("oreCopper", 8325); // IC2, Thermal Expansion, Tinkers' Construct, etc. addOreWeight("oreDark", 1350); // EvilCraft addOreWeight("oreDarkIron", 1700); // Factorization addOreWeight("oreDiamond", 1265); // Vanilla addOreWeight("oreEmerald", 780); // Vanilla - addOreWeight("oreEmery", 415); // GregTech addOreWeight("oreGalena", 1000); // Factorization addOreWeight("oreGold", 2970); // Vanilla addOreWeight("oreInfusedAir", 925); // Thaumcraft @@ -140,7 +138,6 @@ public final class BotaniaAPI { addOreWeight("oreInfusedFire", 925); // Thaumcraft addOreWeight("oreInfusedOrder", 925); // Thaumcraft addOreWeight("oreInfusedWater", 925); // Thaumcraft - addOreWeight("oreIridium", 30); // GregTech addOreWeight("oreIron", 20665); // Vanilla addOreWeight("oreLapis", 1285); // Vanilla addOreWeight("oreLead", 7985); // IC2, Thermal Expansion, Factorization, etc. @@ -151,16 +148,32 @@ public final class BotaniaAPI { addOreWeight("oreRuby", 1100); // Project RED addOreWeight("oreSapphire", 1100); // Project RED addOreWeight("oreSilver", 6300); // Thermal Expansion, Factorization, etc. - addOreWeight("oreSphalerite", 25); // GregTech addOreWeight("oreSulfur", 1105); // Railcraft - addOreWeight("oreTetrahedrite", 4040); // GregTech addOreWeight("oreTin", 9450); // IC2, Thermal Expansion, etc. - addOreWeight("oreTungstate", 20); // GregTech addOreWeight("oreUranium", 1337); // IC2 addOreWeight("oreVinteum", 5925); // Ars Magica addOreWeight("oreYellorite", 3520); // Big Reactors addOreWeight("oreZinc", 6485); // Flaxbeard's Steam Power + addOreWeightNether("oreQuartz", 19600); // Vanilla + addOreWeightNether("oreCobalt", 500); // Tinker's Construct + addOreWeightNether("oreArdite", 500); // Tinker's Construct + addOreWeightNether("oreFirestone", 5); // Railcraft + addOreWeightNether("oreNetherCoal", 17000); // Nether Ores + addOreWeightNether("oreNetherCopper", 4700); // Nether Ores + addOreWeightNether("oreNetherDiamond", 175); // Nether Ores + addOreWeightNether("oreNetherEssence", 2460); // Magical Crops + addOreWeightNether("oreNetherGold", 3635); // Nether Ores + addOreWeightNether("oreNetherIron", 5790); // Nether Ores + addOreWeightNether("oreNetherLapis", 3250); // Nether Ores + addOreWeightNether("oreNetherLead", 2790); // Nether Ores + addOreWeightNether("oreNetherNickel", 1790); // Nether Ores + addOreWeightNether("oreNetherPlatinum", 170); // Nether Ores + addOreWeightNether("oreNetherRedstone", 5600); // Nether Ores + addOreWeightNether("oreNetherSilver", 1550); // Nether Ores + addOreWeightNether("oreNetherSteel", 1690); // Nether Ores + addOreWeightNether("oreNetherTin", 3750); // Nether Ores + addSeed(Items.wheat_seeds, Blocks.wheat); addSeed(Items.potato, Blocks.potatoes); addSeed(Items.carrot, Blocks.carrots); @@ -430,11 +443,26 @@ public final class BotaniaAPI { public static void addOreWeight(String ore, int weight) { oreWeights.put(ore, weight); } + + /** + * Maps an ore (ore dictionary key) to it's weight on the nether world generation. This + * is used for the Orechid Ignem flower. Check the static block in the BotaniaAPI class + * to get the weights for the vanilla blocks.
+ * Alternatively get the values with the OreDetector mod:
+ * https://gist.github.com/Vazkii/9493322 + */ + public static void addOreWeightNether(String ore, int weight) { + oreWeightsNether.put(ore, weight); + } public static int getOreWeight(String ore) { return oreWeights.get(ore); } + public static int getOreWeightNether(String ore) { + return oreWeightsNether.get(ore); + } + /** * Allows an item to be counted as a seed. Any item in this list can be * dispensed by a dispenser, the block is the block to be placed. diff --git a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java index 5de222ab0..d5780ad14 100644 --- a/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/BlockSpecialFlower.java @@ -78,6 +78,7 @@ public class BlockSpecialFlower extends BlockFlower implements ITileEntityProvid LibBlockNames.SUBTILE_TIGERSEYE, LibBlockNames.SUBTILE_MARIMORPHOSIS, LibBlockNames.SUBTILE_ORECHID, + LibBlockNames.SUBTILE_ORECHID_IGNEM, LibBlockNames.SUBTILE_FALLEN_KANADE, LibBlockNames.SUBTILE_EXOFLAME, LibBlockNames.SUBTILE_AGRICARNATION, diff --git a/src/main/java/vazkii/botania/common/block/ModBlocks.java b/src/main/java/vazkii/botania/common/block/ModBlocks.java index bcecedad3..c325bdcfa 100644 --- a/src/main/java/vazkii/botania/common/block/ModBlocks.java +++ b/src/main/java/vazkii/botania/common/block/ModBlocks.java @@ -86,6 +86,8 @@ import vazkii.botania.common.block.subtile.functional.SubTileJiyuulia; import vazkii.botania.common.block.subtile.functional.SubTileLoonuim; import vazkii.botania.common.block.subtile.functional.SubTileMarimorphosis; import vazkii.botania.common.block.subtile.functional.SubTileMedumone; +import vazkii.botania.common.block.subtile.functional.SubTileOrechid; +import vazkii.botania.common.block.subtile.functional.SubTileOrechidIgnem; import vazkii.botania.common.block.subtile.functional.SubTilePollidisiac; import vazkii.botania.common.block.subtile.functional.SubTileRannuncarpus; import vazkii.botania.common.block.subtile.functional.SubTileSolegnolia; @@ -93,7 +95,6 @@ import vazkii.botania.common.block.subtile.functional.SubTileSpectranthemum; import vazkii.botania.common.block.subtile.functional.SubTileTangleberrie; import vazkii.botania.common.block.subtile.functional.SubTileTigerseye; import vazkii.botania.common.block.subtile.functional.SubTileVinculotus; -import vazkii.botania.common.block.subtile.functional.SubtileOrechid; import vazkii.botania.common.block.subtile.generating.SubTileArcaneRose; import vazkii.botania.common.block.subtile.generating.SubTileDaybloom; import vazkii.botania.common.block.subtile.generating.SubTileEndoflame; @@ -397,7 +398,8 @@ public final class ModBlocks { BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_HEISEI_DREAM, SubTileHeiseiDream.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_TIGERSEYE, SubTileTigerseye.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_JADED_AMARANTHUS, SubTileJadedAmaranthus.class); - BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_ORECHID, SubtileOrechid.class); + BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_ORECHID, SubTileOrechid.class); + BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_ORECHID_IGNEM, SubTileOrechidIgnem.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_FALLEN_KANADE, SubTileFallenKanade.class); BotaniaAPI.registerSubTile(LibBlockNames.SUBTILE_EXOFLAME, SubTileExoflame.class); registerSubTileWithMini(LibBlockNames.SUBTILE_AGRICARNATION, SubTileAgricarnation.class); diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileOrechidIgnem.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileOrechidIgnem.java new file mode 100644 index 000000000..c9f4a0880 --- /dev/null +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileOrechidIgnem.java @@ -0,0 +1,48 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Apr 30, 2015, 3:27:20 PM (GMT)] + */ +package vazkii.botania.common.block.subtile.functional; + +import java.util.Map; + +import vazkii.botania.api.BotaniaAPI; +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; + +public class SubTileOrechidIgnem extends SubTileOrechid { + + private static final int COST = 20000; + + @Override + public boolean canOperate() { + return supertile.getWorldObj().provider.isHellWorld; + } + + @Override + public Map getOreMap() { + return BotaniaAPI.oreWeightsNether; + } + + @Override + public Block getSourceBlock() { + return Blocks.netherrack; + } + + @Override + public int getCost() { + return COST; + } + + @Override + public int getColor() { + return 0xAE3030; + } + +} diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java index ea8a548b3..1dcdf282d 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java @@ -13,6 +13,7 @@ package vazkii.botania.common.block.subtile.functional; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import net.minecraft.block.Block; import net.minecraft.init.Blocks; @@ -28,7 +29,7 @@ import vazkii.botania.api.subtile.SubTileFunctional; import vazkii.botania.common.core.handler.ConfigHandler; import vazkii.botania.common.lexicon.LexiconData; -public class SubtileOrechid extends SubTileFunctional { +public class SubTileOrechid extends SubTileFunctional { private static final int COST = 17500; private static final int RANGE = 5; @@ -38,7 +39,7 @@ public class SubtileOrechid extends SubTileFunctional { public void onUpdate() { super.onUpdate(); - if(redstoneSignal > 0) + if(redstoneSignal > 0 || !canOperate()) return; if(!supertile.getWorldObj().isRemote && mana >= COST && ticksExisted % 100 == 0) { @@ -62,8 +63,9 @@ public class SubtileOrechid extends SubTileFunctional { public ItemStack getOreToPut() { Collection values = new ArrayList(); - for(String s : BotaniaAPI.oreWeights.keySet()) - values.add(new StringRandomItem(BotaniaAPI.oreWeights.get(s), s)); + Map map = getOreMap(); + for(String s : map.keySet()) + values.add(new StringRandomItem(map.get(s), s)); String ore = ((StringRandomItem) WeightedRandom.getRandomItem(supertile.getWorldObj().rand, values)).s; @@ -92,6 +94,7 @@ public class SubtileOrechid extends SubTileFunctional { public ChunkCoordinates getCoordsToPut() { List possibleCoords = new ArrayList(); + Block source = getSourceBlock(); for(int i = -RANGE; i < RANGE + 1; i++) for(int j = -RANGE_Y; j < RANGE_Y; j++) for(int k = -RANGE; k < RANGE + 1; k++) { @@ -99,7 +102,7 @@ public class SubtileOrechid extends SubTileFunctional { int y = supertile.yCoord + j; int z = supertile.zCoord + k; Block block = supertile.getWorldObj().getBlock(x, y, z); - if(block != null && block.isReplaceableOreGen(supertile.getWorldObj(), x, y, z, Blocks.stone)) + if(block != null && block.isReplaceableOreGen(supertile.getWorldObj(), x, y, z, source)) possibleCoords.add(new ChunkCoordinates(x, y, z)); } @@ -107,6 +110,22 @@ public class SubtileOrechid extends SubTileFunctional { return null; return possibleCoords.get(supertile.getWorldObj().rand.nextInt(possibleCoords.size())); } + + public boolean canOperate() { + return true; + } + + public Map getOreMap() { + return BotaniaAPI.oreWeights; + } + + public Block getSourceBlock() { + return Blocks.stone; + } + + public int getCost() { + return COST; + } @Override public RadiusDescriptor getRadius() { @@ -125,7 +144,7 @@ public class SubtileOrechid extends SubTileFunctional { @Override public int getMaxMana() { - return COST; + return getCost(); } @Override diff --git a/src/main/java/vazkii/botania/common/crafting/ModPetalRecipes.java b/src/main/java/vazkii/botania/common/crafting/ModPetalRecipes.java index 541df3f0d..151abbaba 100644 --- a/src/main/java/vazkii/botania/common/crafting/ModPetalRecipes.java +++ b/src/main/java/vazkii/botania/common/crafting/ModPetalRecipes.java @@ -52,6 +52,7 @@ public final class ModPetalRecipes { public static RecipePetals heiseiDreamRecipe; public static RecipePetals tigerseyeRecipe; public static RecipePetals orechidRecipe; + public static RecipePetals orechidIgnemRecipe; public static RecipePetals fallenKanadeRecipe; public static RecipePetals exoflameRecipe; public static RecipePetals agricarnationRecipe; @@ -94,6 +95,7 @@ public final class ModPetalRecipes { heiseiDreamRecipe = BotaniaAPI.registerPetalRecipe(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_HEISEI_DREAM), purpleMana, pinkMana, magentaMana, purple, pink, magenta, runeWrath, pixieDust); tigerseyeRecipe = BotaniaAPI.registerPetalRecipe(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_TIGERSEYE), yellow, brownMana, orangeMana, lime, runeAutumn); orechidRecipe = BotaniaAPI.registerPetalRecipe(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_ORECHID), gray, grayMana, lightGray, lightGrayMana, lightBlue, yellow, green, red, runePride, runeSloth, redstoneRoot, pixieDust); + orechidIgnemRecipe = BotaniaAPI.registerPetalRecipe(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_ORECHID_IGNEM), red, redMana, black, blackMana, white, white, blue, yellow, runePride, runeSloth, redstoneRoot, pixieDust); if(ConfigHandler.fallenKanadeEnabled) fallenKanadeRecipe = BotaniaAPI.registerPetalRecipe(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_FALLEN_KANADE), white, whiteMana, whiteMana, yellowMana, orangeMana, brownMana, runeSpring); exoflameRecipe = BotaniaAPI.registerPetalRecipe(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_EXOFLAME), red, redMana, redMana, gray, lightGray, runeFire, runeSummer); diff --git a/src/main/java/vazkii/botania/common/lexicon/LexiconData.java b/src/main/java/vazkii/botania/common/lexicon/LexiconData.java index dc05dce02..beacea6cd 100644 --- a/src/main/java/vazkii/botania/common/lexicon/LexiconData.java +++ b/src/main/java/vazkii/botania/common/lexicon/LexiconData.java @@ -95,6 +95,7 @@ public final class LexiconData { public static LexiconEntry heiseiDream; public static LexiconEntry tigerseye; public static LexiconEntry orechid; + public static LexiconEntry orechidIgnem; public static LexiconEntry fallenKanade; public static LexiconEntry exoflame; public static LexiconEntry agricarnation; @@ -411,6 +412,9 @@ public final class LexiconData { orechid = new ALexiconEntry(LibLexicon.FFLOWER_ORECHID, categoryFunctionalFlowers); orechid.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.orechidRecipe)); + orechidIgnem = new ALexiconEntry(LibLexicon.FFLOWER_ORECHID_IGNEM, categoryFunctionalFlowers); + orechidIgnem.setLexiconPages(new PageText("0"), new PagePetalRecipe("1", ModPetalRecipes.orechidIgnemRecipe)); + if(ConfigHandler.fallenKanadeEnabled) { fallenKanade = new BLexiconEntry(LibLexicon.FFLOWER_FALLEN_KANADE, categoryFunctionalFlowers); fallenKanade.setLexiconPages(new PageText(Botania.bloodMagicLoaded ? "0a" : "0"), new PagePetalRecipe("1", ModPetalRecipes.fallenKanadeRecipe), new PageText("2")); diff --git a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java index a1b905d7e..86a9aef51 100644 --- a/src/main/java/vazkii/botania/common/lib/LibBlockNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibBlockNames.java @@ -123,6 +123,7 @@ public final class LibBlockNames { public static final String SUBTILE_MARIMORPHOSIS = "marimorphosis"; public static final String SUBTILE_BUBBELL = "bubbell"; public static final String SUBTILE_SOLEGNOLIA = "solegnolia"; + public static final String SUBTILE_ORECHID_IGNEM = "orechidIgnem"; public static final String QUARTZ_DARK = "Dark"; public static final String QUARTZ_MANA = "Mana"; diff --git a/src/main/java/vazkii/botania/common/lib/LibLexicon.java b/src/main/java/vazkii/botania/common/lib/LibLexicon.java index e0d55ebea..ae7ebb7d1 100644 --- a/src/main/java/vazkii/botania/common/lib/LibLexicon.java +++ b/src/main/java/vazkii/botania/common/lib/LibLexicon.java @@ -67,6 +67,7 @@ public final class LibLexicon { public static final String FFLOWER_HEISEI_DREAM = "heiseiDream"; public static final String FFLOWER_TIGERSEYE = "tigerseye"; public static final String FFLOWER_ORECHID = "orechid"; + public static final String FFLOWER_ORECHID_IGNEM = "orechidIgnem"; public static final String FFLOWER_FALLEN_KANADE = "fallenKanade"; public static final String FFLOWER_EXOFLAME = "exoflame"; public static final String FFLOWER_AGRICARNATION = "agricarnation"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index 5461c4ddc..76bb5804d 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -965,6 +965,8 @@ tile.botania:flower.jadedAmaranthus.name=Jaded Amaranthus tile.botania:flower.jadedAmaranthus.reference=A couple died for this tile.botania:flower.orechid.name=Orechid tile.botania:flower.orechid.reference=I seed what you did there +tile.botania:flower.orechidIgnem.name=Orechid Ignem +tile.botania:flower.orechidIgnem.reference=Red like roses tile.botania:flower.fallenKanade.name=Fallen Kanade tile.botania:flower.fallenKanade.reference=I'm not an Angel tile.botania:flower.exoflame.name=Exoflame @@ -1679,6 +1681,11 @@ botania.entry.orechid=Orechid botania.page.orechid0=While going mining is all good, a renewable means of getting ore is due. The &1Orechid&0 will use (a massive amount of) &4Mana&0 to generate &4ores&0 in nearby &1Stone&0 blocks.
The ores it generates are random, but seem to be biased towards more common ores rather than rarer ones. botania.page.orechid1=&oNot dragon poop&r. +# -- ORECHID IGNEM +botania.entry.orechidIgnem=Orechid Ignem +botania.page.orechidIgnem0=The &1Orechid&0 is a great flower. The ability to create raw ores with &4Mana&0 can be a great boon to any sedentary botanist's life. It, however, can't create ores from the &4Nether&0. Getting that sorted out is easy, by switching the petals a bit, it'll create &4Nether&0 ores in &1Netherrack&0 instead. The flower must be in the &4Nether&0 to work. +botania.page.orechidIgnem1=&oGetting hot in here&r. + # -- FALLEN KANADE botania.entry.fallenKanade=Fallen Kanade botania.page.fallenKanade0=The &1Fallen Kanade&0 is a flower with angelic properties, it'll use &4Mana&0 from nearby &4Mana Pools&0 in order to apply a regeneration effect to any &4players&0 nearby. diff --git a/src/main/resources/assets/botania/textures/blocks/alt/orechidIgnem.png b/src/main/resources/assets/botania/textures/blocks/alt/orechidIgnem.png new file mode 100644 index 0000000000000000000000000000000000000000..35ce0ab36e30a3bc72e1ff8486052d79d17581de GIT binary patch literal 18040 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