package WayofTime.bloodmagic.ritual; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.util.BlockStack; import WayofTime.bloodmagic.iface.IHarvestHandler; import WayofTime.bloodmagic.core.registry.HarvestRegistry; import WayofTime.bloodmagic.ritual.data.*; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import java.util.ArrayList; /** * This ritual uses registered {@link IHarvestHandler}'s to harvest blocks. *
* To register a new Handler for this ritual use * {@link HarvestRegistry#registerHandler(IHarvestHandler)} *
* 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.
*/
public class RitualHarvest extends Ritual {
public static final String HARVEST_RANGE = "harvestRange";
public RitualHarvest() {
super("ritualHarvest", 0, 20000, "ritual." + BloodMagic.MODID + ".harvestRitual");
addBlockRange(HARVEST_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-4, 1, -4), 9, 5, 9));
setMaximumVolumeAndDistanceOfRange(HARVEST_RANGE, 0, 15, 15);
}
@Override
public void performRitual(IMasterRitualStone masterRitualStone) {
World world = masterRitualStone.getWorldObj();
BlockPos pos = masterRitualStone.getBlockPos();
if (masterRitualStone.getOwnerNetwork().getCurrentEssence() < getRefreshCost()) {
masterRitualStone.getOwnerNetwork().causeNausea();
return;
}
int harvested = 0;
AreaDescriptor harvestArea = getBlockRange(HARVEST_RANGE);
harvestArea.resetIterator();
while (harvestArea.hasNext()) {
BlockPos nextPos = harvestArea.next().add(pos);
if (harvestBlock(world, nextPos)) {
harvested++;
}
}
masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * harvested);
}
@Override
public int getRefreshCost() {
return 20;
}
@Override
public int getRefreshTime() {
return 5;
}
@Override
public ArrayList