/**
* 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 @ [Jan 28, 2014, 9:09:39 PM (GMT)]
*/
package vazkii.botania.common.block.subtile;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.math.BlockPos;
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.core.handler.ConfigHandler;
import vazkii.botania.common.lexicon.LexiconData;
public class SubTilePureDaisy extends SubTileEntity {
private static final String TAG_POSITION = "position";
private static final String TAG_TICKS_REMAINING = "ticksRemaining";
private static final BlockPos[] POSITIONS = {
new BlockPos(-1, 0, -1 ),
new BlockPos(-1, 0, 0 ),
new BlockPos(-1, 0, 1 ),
new BlockPos(0, 0, 1 ),
new BlockPos(1, 0, 1 ),
new BlockPos(1, 0, 0 ),
new BlockPos(1, 0, -1 ),
new BlockPos(0, 0, -1 ),
};
int positionAt = 0;
final int[] ticksRemaining = { -1, -1, -1, -1, -1, -1, -1, -1};
@Override
public void onUpdate() {
super.onUpdate();
positionAt++;
if(positionAt == POSITIONS.length)
positionAt = 0;
BlockPos acoords = POSITIONS[positionAt];
BlockPos coords = supertile.getPos().add(acoords);
World world = supertile.getWorld();
if(!world.isAirBlock(coords)) {
IBlockState state = world.getBlockState(coords);
RecipePureDaisy recipe = null;
for(RecipePureDaisy recipe_ : BotaniaAPI.pureDaisyRecipes)
if(recipe_.matches(world, coords, this, state)) {
recipe = recipe_;
break;
}
if(recipe != null) {
if (ticksRemaining[positionAt] == -1)
ticksRemaining[positionAt] = recipe.getTime();
ticksRemaining[positionAt]--;
Botania.proxy.sparkleFX(coords.getX() + Math.random(), coords.getY() + Math.random(), coords.getZ() + Math.random(), 1F, 1F, 1F, (float) Math.random(), 5);
if(ticksRemaining[positionAt] <= 0) {
ticksRemaining[positionAt] = -1;
if(recipe.set(world,coords, this)) {
for(int i = 0; i < 25; i++) {
double x = coords.getX() + Math.random();
double y = coords.getY() + Math.random() + 0.5;
double z = coords.getZ() + Math.random();
Botania.proxy.wispFX(x, y, z, 1F, 1F, 1F, (float) Math.random() / 2F);
}
if(ConfigHandler.blockBreakParticles)
supertile.getWorld().playEvent(2001, coords, Block.getStateId(recipe.getOutputState()));
}
}
} else ticksRemaining[positionAt] = -1;
}
}
@Override
public RadiusDescriptor getRadius() {
return new RadiusDescriptor.Square(toBlockPos(), 1);
}
@Override
public void readFromPacketNBT(NBTTagCompound cmp) {
positionAt = cmp.getInteger(TAG_POSITION);
if(supertile.getWorld() != null && !supertile.getWorld().isRemote)
for(int i = 0; i < ticksRemaining.length; i++)
ticksRemaining[i] = cmp.getInteger(TAG_TICKS_REMAINING + i);
}
@Override
public void writeToPacketNBT(NBTTagCompound cmp) {
cmp.setInteger(TAG_POSITION, positionAt);
for(int i = 0; i < ticksRemaining.length; i++)
cmp.setInteger(TAG_TICKS_REMAINING + i, ticksRemaining[i]);
}
@Override
public LexiconEntry getEntry() {
return LexiconData.pureDaisy;
}
}