2016-01-08 00:32:03 -08:00
|
|
|
package WayofTime.bloodmagic.ritual;
|
|
|
|
|
|
|
|
import WayofTime.bloodmagic.api.BlockStack;
|
|
|
|
import WayofTime.bloodmagic.api.Constants;
|
|
|
|
import WayofTime.bloodmagic.api.iface.IHarvestHandler;
|
2016-06-12 13:41:02 -07:00
|
|
|
import WayofTime.bloodmagic.api.saving.SoulNetwork;
|
2016-01-08 00:32:03 -08:00
|
|
|
import WayofTime.bloodmagic.api.registry.HarvestRegistry;
|
2016-03-17 13:00:44 -07:00
|
|
|
import WayofTime.bloodmagic.api.ritual.*;
|
2016-01-08 00:32:03 -08:00
|
|
|
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
|
2016-03-17 13:00:44 -07:00
|
|
|
import net.minecraft.util.math.BlockPos;
|
|
|
|
import net.minecraft.world.World;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
2016-01-08 00:32:03 -08:00
|
|
|
|
2016-01-09 01:54:25 -08:00
|
|
|
/**
|
2016-03-16 18:41:06 -04:00
|
|
|
* This ritual uses registered {@link IHarvestHandler}'s to harvest blocks.
|
|
|
|
*
|
2016-01-09 01:54:25 -08:00
|
|
|
* To register a new Handler for this ritual use
|
|
|
|
* {@link HarvestRegistry#registerHandler(IHarvestHandler)}
|
2016-03-16 18:41:06 -04:00
|
|
|
*
|
|
|
|
* This ritual includes a way to change the range based on what block is above
|
|
|
|
* the MasterRitualStone. You can use
|
|
|
|
* {@link HarvestRegistry#registerRangeAmplifier(BlockStack, int)} to register a
|
|
|
|
* new amplifier.
|
2016-01-09 01:54:25 -08:00
|
|
|
*/
|
2016-01-08 00:32:03 -08:00
|
|
|
public class RitualHarvest extends Ritual
|
|
|
|
{
|
|
|
|
public static final String HARVEST_RANGE = "harvestRange";
|
|
|
|
|
|
|
|
public RitualHarvest()
|
|
|
|
{
|
|
|
|
super("ritualHarvest", 0, 20000, "ritual." + Constants.Mod.MODID + ".harvestRitual");
|
2016-04-11 15:36:27 -04:00
|
|
|
addBlockRange(HARVEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-4, 1, -4), 9, 5, 9));
|
|
|
|
setMaximumVolumeAndDistanceOfRange(HARVEST_RANGE, 81, 15, 15);
|
2016-01-08 00:32:03 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void performRitual(IMasterRitualStone masterRitualStone)
|
|
|
|
{
|
|
|
|
SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
|
|
|
|
World world = masterRitualStone.getWorldObj();
|
2016-04-11 15:36:27 -04:00
|
|
|
BlockPos pos = masterRitualStone.getBlockPos();
|
2016-01-08 00:32:03 -08:00
|
|
|
|
|
|
|
if (network.getCurrentEssence() < getRefreshCost())
|
|
|
|
{
|
2016-06-12 13:41:02 -07:00
|
|
|
network.causeNausea();
|
2016-01-08 00:32:03 -08:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
int harvested = 0;
|
|
|
|
|
2016-04-11 15:36:27 -04:00
|
|
|
AreaDescriptor harvestArea = getBlockRange(HARVEST_RANGE);
|
|
|
|
|
|
|
|
harvestArea.resetIterator();
|
|
|
|
while (harvestArea.hasNext())
|
|
|
|
{
|
|
|
|
BlockPos nextPos = harvestArea.next().add(pos);
|
|
|
|
if (harvestBlock(world, nextPos))
|
|
|
|
{
|
2016-01-08 00:32:03 -08:00
|
|
|
harvested++;
|
2016-04-11 15:36:27 -04:00
|
|
|
}
|
|
|
|
}
|
2016-01-08 00:32:03 -08:00
|
|
|
|
2016-04-11 15:36:27 -04:00
|
|
|
network.syphon(getRefreshCost() * harvested);
|
2016-01-08 00:32:03 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getRefreshCost()
|
|
|
|
{
|
|
|
|
return 20;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getRefreshTime()
|
|
|
|
{
|
|
|
|
return 5;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ArrayList<RitualComponent> getComponents()
|
|
|
|
{
|
|
|
|
ArrayList<RitualComponent> components = new ArrayList<RitualComponent>();
|
|
|
|
|
|
|
|
components.add(new RitualComponent(new BlockPos(1, 0, 1), EnumRuneType.DUSK));
|
|
|
|
components.add(new RitualComponent(new BlockPos(1, 0, -1), EnumRuneType.DUSK));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-1, 0, -1), EnumRuneType.DUSK));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-1, 0, 1), EnumRuneType.DUSK));
|
|
|
|
components.add(new RitualComponent(new BlockPos(2, 0, 0), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-2, 0, 0), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(0, 0, 2), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(0, 0, -2), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(3, 0, 1), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(3, 0, -1), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-3, 0, 1), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-3, 0, -1), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(1, 0, 3), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-1, 0, 3), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(1, 0, -3), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-1, 0, -3), EnumRuneType.EARTH));
|
|
|
|
components.add(new RitualComponent(new BlockPos(2, 0, 3), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(3, 0, 2), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(2, 0, -3), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-3, 0, 2), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-2, 0, 3), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(3, 0, -2), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-2, 0, -3), EnumRuneType.WATER));
|
|
|
|
components.add(new RitualComponent(new BlockPos(-3, 0, -2), EnumRuneType.WATER));
|
|
|
|
|
|
|
|
return components;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Ritual getNewCopy()
|
|
|
|
{
|
|
|
|
return new RitualHarvest();
|
|
|
|
}
|
|
|
|
|
2016-03-16 18:41:06 -04:00
|
|
|
public static boolean harvestBlock(World world, BlockPos pos)
|
|
|
|
{
|
2016-01-08 00:32:03 -08:00
|
|
|
BlockStack harvestStack = BlockStack.getStackFromPos(world, pos);
|
|
|
|
|
|
|
|
for (IHarvestHandler handler : HarvestRegistry.getHandlerList())
|
|
|
|
if (handler.harvestAndPlant(world, pos, harvestStack))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|