BloodMagic/src/main/java/WayofTime/bloodmagic/ritual/RitualHarvest.java

115 lines
4.8 KiB
Java
Raw Normal View History

package WayofTime.bloodmagic.ritual;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.apibutnotreally.BlockStack;
import WayofTime.bloodmagic.apibutnotreally.iface.IHarvestHandler;
import WayofTime.bloodmagic.apibutnotreally.registry.HarvestRegistry;
import WayofTime.bloodmagic.apibutnotreally.ritual.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.ArrayList;
/**
2016-03-16 18:41:06 -04:00
* This ritual uses registered {@link IHarvestHandler}'s to harvest blocks.
2017-08-15 21:30:48 -07:00
* <p>
* To register a new Handler for this ritual use
* {@link HarvestRegistry#registerHandler(IHarvestHandler)}
2017-08-15 21:30:48 -07:00
* <p>
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.
*/
2017-08-15 21:30:48 -07:00
public class RitualHarvest extends Ritual {
public static final String HARVEST_RANGE = "harvestRange";
2017-08-15 21:30:48 -07:00
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
2017-08-15 21:30:48 -07:00
public void performRitual(IMasterRitualStone masterRitualStone) {
World world = masterRitualStone.getWorldObj();
BlockPos pos = masterRitualStone.getBlockPos();
2017-08-15 21:30:48 -07:00
if (masterRitualStone.getOwnerNetwork().getCurrentEssence() < getRefreshCost()) {
masterRitualStone.getOwnerNetwork().causeNausea();
return;
}
int harvested = 0;
AreaDescriptor harvestArea = getBlockRange(HARVEST_RANGE);
harvestArea.resetIterator();
2017-08-15 21:30:48 -07:00
while (harvestArea.hasNext()) {
BlockPos nextPos = harvestArea.next().add(pos);
2017-08-15 21:30:48 -07:00
if (harvestBlock(world, nextPos)) {
harvested++;
}
}
masterRitualStone.getOwnerNetwork().syphon(getRefreshCost() * harvested);
}
@Override
2017-08-15 21:30:48 -07:00
public int getRefreshCost() {
return 20;
}
@Override
2017-08-15 21:30:48 -07:00
public int getRefreshTime() {
return 5;
}
@Override
2017-08-15 21:30:48 -07:00
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
2017-08-15 21:30:48 -07:00
public Ritual getNewCopy() {
return new RitualHarvest();
}
2017-08-15 21:30:48 -07:00
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;
}
}