Huge commit for the Pull-Request.
Added a lot of things: - Blood Tank - Teleposition Sigil - Transposition Sigil - Cobblestone/Netherrack/Obisidian generation Ritual - Tree Cutter Ritual - Pump Ritual - Altar Builder Ritual - Block Placing Ritual - Portal Ritual - Teleportation System and API Components - Cross pattern Area Descriptor - Two reagents and their textures for the sigils’ crafting Fixed: - Teleposer not teleporting entities correctly And probably other things I forgot!
This commit is contained in:
parent
d947f23696
commit
7e8aec8652
53 changed files with 3031 additions and 372 deletions
|
@ -0,0 +1,325 @@
|
|||
package WayofTime.bloodmagic.ritual;
|
||||
|
||||
import WayofTime.bloodmagic.api.BlockStack;
|
||||
import WayofTime.bloodmagic.api.Constants;
|
||||
import WayofTime.bloodmagic.api.altar.AltarComponent;
|
||||
import WayofTime.bloodmagic.api.altar.EnumAltarComponent;
|
||||
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
|
||||
import WayofTime.bloodmagic.api.network.SoulNetwork;
|
||||
import WayofTime.bloodmagic.api.ritual.EnumRuneType;
|
||||
import WayofTime.bloodmagic.api.ritual.IMasterRitualStone;
|
||||
import WayofTime.bloodmagic.api.ritual.Ritual;
|
||||
import WayofTime.bloodmagic.api.ritual.RitualComponent;
|
||||
import WayofTime.bloodmagic.api.util.helper.NetworkHelper;
|
||||
import WayofTime.bloodmagic.block.BlockBloodRune;
|
||||
import WayofTime.bloodmagic.registry.ModBlocks;
|
||||
import WayofTime.bloodmagic.util.Utils;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.effect.EntityLightningBolt;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.BlockPos;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.IItemHandler;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class RitualAltarBuilder extends Ritual
|
||||
{
|
||||
private Iterator<AltarComponent> altarComponentsIterator = new ArrayList<AltarComponent>(EnumAltarTier.SIX.getAltarComponents()).iterator();
|
||||
private boolean cycleDone = false;
|
||||
|
||||
private AltarComponent currentComponent;
|
||||
private BlockPos currentPos;
|
||||
|
||||
public RitualAltarBuilder()
|
||||
{
|
||||
super("ritualAltarBuilder", 0, 450, "ritual." + Constants.Mod.MODID + ".altarBuilderRitual");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void performRitual(IMasterRitualStone masterRitualStone)
|
||||
{
|
||||
World world = masterRitualStone.getWorldObj();
|
||||
SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
|
||||
TileEntity tileEntity = world.getTileEntity(masterRitualStone.getBlockPos().up());
|
||||
BlockPos altarPos = masterRitualStone.getBlockPos().up(2);
|
||||
|
||||
int currentEssence = network.getCurrentEssence();
|
||||
|
||||
if (currentEssence < getRefreshCost())
|
||||
{
|
||||
network.causeNauseaToPlayer();
|
||||
return;
|
||||
}
|
||||
|
||||
if (cycleDone)
|
||||
{
|
||||
altarComponentsIterator = new ArrayList<AltarComponent>(EnumAltarTier.SIX.getAltarComponents()).iterator();
|
||||
}
|
||||
|
||||
if (world.getBlockState(altarPos).getBlock().isReplaceable(world, altarPos) && hasItem(tileEntity, Item.getItemFromBlock(ModBlocks.altar), 0, true))
|
||||
{
|
||||
world.setBlockState(altarPos, ModBlocks.altar.getDefaultState());
|
||||
lightning(world, altarPos);
|
||||
network.syphon(getRefreshCost());
|
||||
}
|
||||
|
||||
if (altarComponentsIterator.hasNext())
|
||||
{
|
||||
currentComponent = altarComponentsIterator.next();
|
||||
currentPos = altarPos.add(currentComponent.getOffset());
|
||||
|
||||
if (world.getBlockState(currentPos).getBlock().isReplaceable(world, currentPos))
|
||||
{
|
||||
switch (currentComponent.getComponent())
|
||||
{
|
||||
case NOTAIR:
|
||||
{
|
||||
BlockStack blockStack = getMundaneBlock(tileEntity);
|
||||
if (blockStack != null)
|
||||
{
|
||||
world.setBlockState(currentPos, blockStack.getState(), 3);
|
||||
lightning(world, currentPos);
|
||||
network.syphon(getRefreshCost());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case BLOODRUNE:
|
||||
{
|
||||
BlockStack blockStack = getBloodRune(tileEntity);
|
||||
if (blockStack != null)
|
||||
{
|
||||
world.setBlockState(currentPos, blockStack.getState(), 3);
|
||||
lightning(world, currentPos);
|
||||
network.syphon(getRefreshCost());
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
BlockStack blockStack = new BlockStack(Utils.getBlockForComponent(currentComponent.getComponent()), 0);
|
||||
if (hasItem(tileEntity, Item.getItemFromBlock(blockStack.getBlock()), blockStack.getMeta(), true))
|
||||
{
|
||||
world.setBlockState(currentPos, blockStack.getState(), 3);
|
||||
lightning(world, currentPos);
|
||||
network.syphon(getRefreshCost());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
cycleDone = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRefreshCost()
|
||||
{
|
||||
return 75;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRefreshTime()
|
||||
{
|
||||
return 12;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<RitualComponent> getComponents()
|
||||
{
|
||||
ArrayList<RitualComponent> components = new ArrayList<RitualComponent>();
|
||||
|
||||
for (int i = -12; i <= -8; i++)
|
||||
{
|
||||
addRune(components, i, -6, 13, EnumRuneType.AIR);
|
||||
addRune(components, i, -6, -13, EnumRuneType.FIRE);
|
||||
|
||||
addRune(components, 13, -6, i, EnumRuneType.EARTH);
|
||||
addRune(components, -13, -6, i, EnumRuneType.WATER);
|
||||
|
||||
addRune(components, i, 5, 13, EnumRuneType.AIR);
|
||||
addRune(components, i, 5, -13, EnumRuneType.FIRE);
|
||||
|
||||
addRune(components, 13, 5, i, EnumRuneType.EARTH);
|
||||
addRune(components, -13, 5, i, EnumRuneType.WATER);
|
||||
}
|
||||
|
||||
for (int i = 8; i <= 12; i++)
|
||||
{
|
||||
addRune(components, i, -6, 13, EnumRuneType.AIR);
|
||||
addRune(components, i, -6, -13, EnumRuneType.FIRE);
|
||||
|
||||
addRune(components, 13, -6, i, EnumRuneType.EARTH);
|
||||
addRune(components, -13, -6, i, EnumRuneType.WATER);
|
||||
|
||||
addRune(components, i, 5, 13, EnumRuneType.AIR);
|
||||
addRune(components, i, 5, -13, EnumRuneType.FIRE);
|
||||
|
||||
addRune(components, 13, 5, i, EnumRuneType.EARTH);
|
||||
addRune(components, -13, 5, i, EnumRuneType.WATER);
|
||||
}
|
||||
|
||||
for (int i = -6; i <= -4; i++)
|
||||
{
|
||||
addCornerRunes(components, 13, i, EnumRuneType.DUSK);
|
||||
}
|
||||
|
||||
for (int i = 3; i <= 5; i++)
|
||||
{
|
||||
addCornerRunes(components, 13, i, EnumRuneType.DUSK);
|
||||
}
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ritual getNewCopy()
|
||||
{
|
||||
return new RitualAltarBuilder();
|
||||
}
|
||||
|
||||
public void lightning(World world, BlockPos blockPos)
|
||||
{
|
||||
world.addWeatherEffect(new EntityLightningBolt(world, blockPos.getX(), blockPos.getY(), blockPos.getZ()));
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* These methods are utilities for this ritual.
|
||||
* They support both the old forge inventory system, and the new one.
|
||||
*
|
||||
*/
|
||||
public boolean hasItem(TileEntity tileEntity, Item item, int damage, boolean consumeItem)
|
||||
{
|
||||
if (tileEntity != null)
|
||||
{
|
||||
if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN))
|
||||
{
|
||||
IItemHandler iItemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN);
|
||||
|
||||
if (iItemHandler.getSlots() <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < iItemHandler.getSlots(); i++)
|
||||
{
|
||||
if (iItemHandler.getStackInSlot(i) != null && iItemHandler.getStackInSlot(i).stackSize > 0 && iItemHandler.getStackInSlot(i).getItem() == item && iItemHandler.getStackInSlot(i).getItemDamage() == damage && iItemHandler.extractItem(i, 1, !consumeItem) != null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else if (tileEntity instanceof IInventory)
|
||||
{
|
||||
IInventory inv = (IInventory) tileEntity;
|
||||
for (int i = 0; i < inv.getSizeInventory(); i++)
|
||||
{
|
||||
if (inv.getStackInSlot(i) != null && inv.getStackInSlot(i).stackSize > 0 && inv.getStackInSlot(i).getItem() == item && inv.getStackInSlot(i).getItemDamage() == damage)
|
||||
{
|
||||
if (consumeItem)
|
||||
{
|
||||
inv.decrStackSize(i, 1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public BlockStack getBloodRune(TileEntity tileEntity)
|
||||
{
|
||||
if (tileEntity != null)
|
||||
{
|
||||
if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN))
|
||||
{
|
||||
IItemHandler iItemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN);
|
||||
|
||||
if (iItemHandler.getSlots() <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < iItemHandler.getSlots(); i++)
|
||||
{
|
||||
if (iItemHandler.getStackInSlot(i) != null && iItemHandler.getStackInSlot(i).stackSize > 0 && iItemHandler.getStackInSlot(i).getItem() instanceof ItemBlock && Block.getBlockFromItem(iItemHandler.getStackInSlot(i).getItem()) instanceof BlockBloodRune && iItemHandler.extractItem(i, 1, true) != null)
|
||||
{
|
||||
BlockStack blockStack = new BlockStack(Utils.getBlockForComponent(EnumAltarComponent.BLOODRUNE), iItemHandler.getStackInSlot(i).getItemDamage());
|
||||
iItemHandler.extractItem(i, 1, false);
|
||||
return blockStack;
|
||||
}
|
||||
}
|
||||
} else if (tileEntity instanceof IInventory)
|
||||
{
|
||||
IInventory inv = (IInventory) tileEntity;
|
||||
for (int i = 0; i < inv.getSizeInventory(); i++)
|
||||
{
|
||||
if (inv.getStackInSlot(i) != null && inv.getStackInSlot(i).stackSize > 0 && inv.getStackInSlot(i).getItem() instanceof ItemBlock && Block.getBlockFromItem(inv.getStackInSlot(i).getItem()) instanceof BlockBloodRune)
|
||||
{
|
||||
BlockStack blockStack = new BlockStack(Utils.getBlockForComponent(EnumAltarComponent.BLOODRUNE), inv.getStackInSlot(i).getItemDamage());
|
||||
inv.decrStackSize(i, 1);
|
||||
return blockStack;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public BlockStack getMundaneBlock(TileEntity tileEntity)
|
||||
{
|
||||
if (tileEntity != null)
|
||||
{
|
||||
if (tileEntity.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN))
|
||||
{
|
||||
IItemHandler iItemHandler = tileEntity.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, EnumFacing.DOWN);
|
||||
|
||||
if (iItemHandler.getSlots() <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
for (int i = 0; i < iItemHandler.getSlots(); i++)
|
||||
{
|
||||
if (iItemHandler.getStackInSlot(i) != null && iItemHandler.getStackInSlot(i).stackSize > 0 && iItemHandler.getStackInSlot(i).getItem() instanceof ItemBlock && !(Block.getBlockFromItem(iItemHandler.getStackInSlot(i).getItem()) instanceof BlockBloodRune) && iItemHandler.extractItem(i, 1, true) != null)
|
||||
{
|
||||
Block block = Block.getBlockFromItem(iItemHandler.getStackInSlot(i).getItem());
|
||||
if (block != null && block != Blocks.glowstone && block != ModBlocks.bloodStoneBrick && block != ModBlocks.crystal)
|
||||
{
|
||||
BlockStack blockStack = new BlockStack(block, iItemHandler.getStackInSlot(i).getItemDamage());
|
||||
iItemHandler.extractItem(i, 1, false);
|
||||
return blockStack;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (tileEntity instanceof IInventory)
|
||||
{
|
||||
IInventory inv = (IInventory) tileEntity;
|
||||
for (int i = 0; i < inv.getSizeInventory(); i++)
|
||||
{
|
||||
if (inv.getStackInSlot(i) != null && inv.getStackInSlot(i).stackSize > 0 && inv.getStackInSlot(i).getItem() instanceof ItemBlock && !(Block.getBlockFromItem(inv.getStackInSlot(i).getItem()) instanceof BlockBloodRune))
|
||||
{
|
||||
Block block = Block.getBlockFromItem(inv.getStackInSlot(i).getItem());
|
||||
if (block != null && block != Blocks.glowstone && block != ModBlocks.bloodStoneBrick && block != ModBlocks.crystal)
|
||||
{
|
||||
BlockStack blockStack = new BlockStack(block, inv.getStackInSlot(i).getItemDamage());
|
||||
inv.decrStackSize(i, 1);
|
||||
return blockStack;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue