BloodMagic/src/main/java/WayofTime/bloodmagic/ritual/RitualHarvest.java
Nicholas Ignoffo 2fecb427fd Merge apibutnotreally with the main packages
Do not consider anything outside of the true API safe to use. And even then,
I'm changing things. Just wait. Please I beg you.
2018-02-15 18:49:07 -08:00

114 lines
4.8 KiB
Java

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.
* <p>
* To register a new Handler for this ritual use
* {@link HarvestRegistry#registerHandler(IHarvestHandler)}
* <p>
* 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<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();
}
public static boolean harvestBlock(World world, BlockPos pos) {
BlockStack harvestStack = BlockStack.getStackFromPos(world, pos);
for (IHarvestHandler handler : HarvestRegistry.getHandlerList())
if (handler.harvestAndPlant(world, pos, harvestStack))
return true;
return false;
}
}