Added a proper Pure Daisy recipe list.

This commit is contained in:
Lizbeth Rika committed 2015-04-17 17:25:36 +01:00
1 parent 442301946c
commit 00cebd4d2f
5 files changed
+138 -34

No files matched your search

@@ -41,6 +41,7 @@ import vazkii.botania.api.recipe.RecipeBrew;
import vazkii.botania.api.recipe.RecipeElvenTrade;
import vazkii.botania.api.recipe.RecipeManaInfusion;
import vazkii.botania.api.recipe.RecipePetals;
import vazkii.botania.api.recipe.RecipePureDaisy;
import vazkii.botania.api.recipe.RecipeRuneAltar;
import vazkii.botania.api.subtile.SubTileEntity;
import vazkii.botania.api.subtile.signature.BasicSignature;
@@ -62,8 +63,9 @@ public final class BotaniaAPI {
public static Map<String, Brew> brewMap = new LinkedHashMap<String, Brew>();
public static List<RecipePetals> petalRecipes = new ArrayList<RecipePetals>();
public static List<RecipeRuneAltar> runeAltarRecipes = new ArrayList<RecipeRuneAltar>();
public static List<RecipePureDaisy> pureDaisyRecipes = new ArrayList<RecipePureDaisy>();
public static List<RecipeManaInfusion> manaInfusionRecipes = new ArrayList<RecipeManaInfusion>();
public static List<RecipeRuneAltar> runeAltarRecipes = new ArrayList<RecipeRuneAltar>();
public static List<RecipeElvenTrade> elvenTradeRecipes = new ArrayList<RecipeElvenTrade>();
public static List<RecipeBrew> brewRecipes = new ArrayList<RecipeBrew>();
@@ -237,6 +239,12 @@ public final class BotaniaAPI {
petalRecipes.add(recipe);
return recipe;
}
public static RecipePureDaisy registerPureDaisyRecipe(Object input, Block output, int outputMeta) {
RecipePureDaisy recipe = new RecipePureDaisy(input, output, outputMeta);
pureDaisyRecipes.add(recipe);
return recipe;
}
/**
* Registers a Rune Altar
@@ -0,0 +1,81 @@
/**
* This class was created by <Vazkii>. 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 17, 2015, 5:07:25 PM (GMT)]
*/
package vazkii.botania.api.recipe;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import vazkii.botania.api.subtile.SubTileEntity;
public class RecipePureDaisy {
Object input;
Block output;
int outputMeta;
public RecipePureDaisy(Object input, Block output, int outputMeta) {
this.input = input;
this.output = output;
this.outputMeta = outputMeta;
if(input != null && !(input instanceof String || input instanceof Block))
throw new IllegalArgumentException("input must be an oredict String or a Block.");
}
public boolean matches(World world, int x, int y, int z, SubTileEntity pureDaisy) {
Block block = world.getBlock(x, y, z);
int meta = world.getBlockMetadata(x, y, z);
if(input instanceof Block && block == input)
return true;
ItemStack stack = new ItemStack(block, 1, world.getBlockMetadata(x, y, z));
String oredict = (String) input;
return isOreDict(stack, oredict);
}
private boolean isOreDict(ItemStack stack, String entry) {
for(ItemStack ostack : OreDictionary.getOres(entry)) {
ItemStack cstack = ostack.copy();
if(cstack.getItemDamage() == Short.MAX_VALUE)
cstack.setItemDamage(stack.getItemDamage());
if(stack.isItemEqual(cstack))
return true;
}
return false;
}
/**
* Returns true if the block was placed (and if the Pure Daisy should do particles and stuffs).
* Should only place the block if world.isRemote, but should return true if it would've placed
* it otherwise. You may return false to cancel the normal particles and do your own.
*/
public boolean set(World world, int x, int y, int z, SubTileEntity pureDaisy) {
if(world.isRemote)
world.setBlock(x, y, z, output, outputMeta, 1 | 2);
return true;
}
public Object getInput() {
return input;
}
public Block getOutput() {
return output;
}
public int getOutputMeta() {
return outputMeta;
}
}
@@ -12,16 +12,15 @@ package vazkii.botania.common.block.subtile;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChunkCoordinates;
import net.minecraftforge.oredict.OreDictionary;
import net.minecraft.world.World;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.lexicon.LexiconEntry;
import vazkii.botania.api.recipe.RecipePureDaisy;
import vazkii.botania.api.subtile.RadiusDescriptor;
import vazkii.botania.api.subtile.SubTileEntity;
import vazkii.botania.common.Botania;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.lexicon.LexiconData;
@@ -54,22 +53,25 @@ public class SubTilePureDaisy extends SubTileEntity {
int[] acoords = POSITIONS[positionAt];
ChunkCoordinates coords = new ChunkCoordinates(supertile.xCoord + acoords[0], supertile.yCoord + acoords[1], supertile.zCoord + acoords[2]);
Block block = supertile.getWorldObj().getBlock(coords.posX, coords.posY, coords.posZ);
if(block != Blocks.air) {
Item item = Item.getItemFromBlock(block);
if(item != null) {
ItemStack stack = new ItemStack(item, 1, supertile.getWorldObj().getBlockMetadata(coords.posX, coords.posY, coords.posZ));
Block output = isOreDict(stack, "stone") ? ModBlocks.livingrock : isOreDict(stack, "logWood") ? ModBlocks.livingwood : null;
if(output != null) {
ticksRemaining[positionAt] = ticksRemaining[positionAt] - 1;
World world = supertile.getWorldObj();
if(!world.isAirBlock(coords.posX, coords.posY, coords.posZ)) {
RecipePureDaisy recipe = null;
for(RecipePureDaisy recipe_ : BotaniaAPI.pureDaisyRecipes)
if(recipe_.matches(world, coords.posX, coords.posY, coords.posZ, this)) {
recipe = recipe_;
break;
}
Botania.proxy.sparkleFX(supertile.getWorldObj(), coords.posX + Math.random(), coords.posY + Math.random(), coords.posZ + Math.random(), 1F, 1F, 1F, (float) Math.random(), 5);
if(ticksRemaining[positionAt] <= 0) {
if(!supertile.getWorldObj().isRemote)
supertile.getWorldObj().setBlock(coords.posX, coords.posY, coords.posZ, output);
ticksRemaining[positionAt] = 200;
if(recipe != null) {
ticksRemaining[positionAt] = ticksRemaining[positionAt] - 1;
Botania.proxy.sparkleFX(supertile.getWorldObj(), coords.posX + Math.random(), coords.posY + Math.random(), coords.posZ + Math.random(), 1F, 1F, 1F, (float) Math.random(), 5);
if(ticksRemaining[positionAt] <= 0) {
ticksRemaining[positionAt] = 200;
if(recipe.set(world,coords.posX, coords.posY, coords.posZ, this)) {
for(int i = 0; i < 25; i++) {
double x = coords.posX + Math.random();
double y = coords.posY + Math.random() + 0.5;
@@ -78,26 +80,13 @@ public class SubTilePureDaisy extends SubTileEntity {
Botania.proxy.wispFX(supertile.getWorldObj(), x, y, z, 1F, 1F, 1F, (float) Math.random() / 2F);
}
if(ConfigHandler.blockBreakParticles)
supertile.getWorldObj().playAuxSFX(2001, coords.posX, coords.posY, coords.posZ, Block.getIdFromBlock(block) + (supertile.getWorldObj().getBlockMetadata(coords.posX, coords.posY, coords.posZ) << 12));
supertile.getWorldObj().playAuxSFX(2001, coords.posX, coords.posY, coords.posZ, Block.getIdFromBlock(recipe.getOutput()) + (recipe.getOutputMeta() << 12));
}
} else ticksRemaining[positionAt] = 200;
}
}
} else ticksRemaining[positionAt] = 200;
}
}
private boolean isOreDict(ItemStack stack, String entry) {
for(ItemStack ostack : OreDictionary.getOres(entry)) {
ItemStack cstack = ostack.copy();
if(cstack.getItemDamage() == Short.MAX_VALUE)
cstack.setItemDamage(stack.getItemDamage());
if(stack.isItemEqual(cstack))
return true;
}
return false;
}
@Override
public RadiusDescriptor getRadius() {
return new RadiusDescriptor.Square(toChunkCoordinates(), 1);
@@ -54,6 +54,7 @@ import vazkii.botania.common.crafting.ModManaAlchemyRecipes;
import vazkii.botania.common.crafting.ModManaConjurationRecipes;
import vazkii.botania.common.crafting.ModManaInfusionRecipes;
import vazkii.botania.common.crafting.ModPetalRecipes;
import vazkii.botania.common.crafting.ModPureDaisyRecipes;
import vazkii.botania.common.crafting.ModRuneRecipes;
import vazkii.botania.common.entity.EntityManaBurst;
import vazkii.botania.common.entity.ModEntities;
@@ -85,6 +86,7 @@ public class CommonProxy {
ModCraftingRecipes.init();
ModPetalRecipes.init();
ModPureDaisyRecipes.init();
ModRuneRecipes.init();
ModManaAlchemyRecipes.init();
ModManaConjurationRecipes.init();
@@ -0,0 +1,24 @@
/**
* This class was created by <Vazkii>. 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 17, 2015, 5:18:06 PM (GMT)]
*/
package vazkii.botania.common.crafting;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.api.BotaniaAPI;
public final class ModPureDaisyRecipes {
public static void init() {
BotaniaAPI.registerPureDaisyRecipe("stone", ModBlocks.livingrock, 0);
BotaniaAPI.registerPureDaisyRecipe("logWood", ModBlocks.livingwood, 0);
}
}