mirror of
https://github.com/GTNewHorizons/Botania.git
synced 2026-11-13 00:37:57 +00:00
Added a proper Pure Daisy recipe list.
This commit is contained in:
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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user