Work on a new ritual

This commit is contained in:
WayofTime 2015-04-19 12:02:49 -04:00
parent d423ea5807
commit 89d723b3ee
4 changed files with 244 additions and 9 deletions

View file

@ -1,5 +1,5 @@
#
#Thu Apr 16 11:30:08 EDT 2015
#Thu Apr 16 16:19:02 EDT 2015
mod_name=BloodMagic
forge_version=10.13.2.1232
ccc_version=1.0.4.29
@ -8,5 +8,5 @@ nei_version=1.0.3.64
package_group=com.wayoftime.bloodmagic
mod_version=1.3.2
minetweaker_version=Dev-1.7.10-3.0.9B
build_number=1
mc_version=1.7.10
build_number=2

View file

@ -164,6 +164,7 @@ import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaStalling;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectOmegaTest;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSphereCreator;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectUnbinding;
@ -1393,6 +1394,8 @@ public class AlchemicalWizardry
Rituals.registerRitual("AW034Crafting", 1, 15000, new RitualEffectCrafting(), "Rhythm of the Beating Anvil");
Rituals.registerRitual("AW035", 1, 10000, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands");
Rituals.registerRitual("AW036SphereIsland", 2, 10000, new RitualEffectSphereCreator(), "Birth of the Bastion");
//Rituals.registerRitual(1,100,new RitualEffectApiaryOverclock(),"Apiary Overclock"));
}

View file

@ -154,8 +154,18 @@ public class BlockTeleposer extends BlockContainer
{
return new TETeleposer();
}
public static boolean swapBlocks(Object caller, World worldI, World worldF, int xi, int yi, int zi, int xf, int yf, int zf)
{
return swapBlocks(caller, worldI, worldF, xi, yi, zi, xf, yf, zf, true, 3);
}
public static boolean swapBlocksWithoutSound(Object caller, World worldI, World worldF, int xi, int yi, int zi, int xf, int yf, int zf)
{
return swapBlocks(caller, worldI, worldF, xi, yi, zi, xf, yf, zf, false, 3);
}
public static boolean swapBlocks(Object caller, World worldI, World worldF, int xi, int yi, int zi, int xf, int yf, int zf, boolean doSound, int flag)
{
TileEntity tileEntityI = worldI.getTileEntity(xi, yi, zi);
TileEntity tileEntityF = worldF.getTileEntity(xf, yf, zf);
@ -196,10 +206,11 @@ public class BlockTeleposer extends BlockContainer
if (MinecraftForge.EVENT_BUS.post(evt))
return false;
worldI.playSoundEffect(xi, yi, zi, "mob.endermen.portal", 1.0F, 1.0F);
worldF.playSoundEffect(xf, yf, zf, "mob.endermen.portal", 1.0F, 1.0F);
if(doSound)
{
worldI.playSoundEffect(xi, yi, zi, "mob.endermen.portal", 1.0F, 1.0F);
worldF.playSoundEffect(xf, yf, zf, "mob.endermen.portal", 1.0F, 1.0F);
}
//CLEAR TILES
Block finalBlock = blockF;
@ -221,7 +232,7 @@ public class BlockTeleposer extends BlockContainer
}
//TILES CLEARED
worldF.setBlock(xf, yf, zf, initialBlock, metaI, 3);
worldF.setBlock(xf, yf, zf, initialBlock, metaI, flag);
if (tileEntityI != null)
{
@ -244,7 +255,7 @@ public class BlockTeleposer extends BlockContainer
}
}
worldI.setBlock(xi, yi, zi, finalBlock, metaF, 3);
worldI.setBlock(xi, yi, zi, finalBlock, metaF, flag);
if (tileEntityF != null)
{

View file

@ -0,0 +1,221 @@
package WayofTime.alchemicalWizardry.common.rituals;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import WayofTime.alchemicalWizardry.api.Int3;
import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry;
import WayofTime.alchemicalWizardry.api.rituals.IMasterRitualStone;
import WayofTime.alchemicalWizardry.api.rituals.RitualComponent;
import WayofTime.alchemicalWizardry.api.rituals.RitualEffect;
import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.common.block.BlockTeleposer;
import WayofTime.alchemicalWizardry.common.spell.complex.effect.SpellHelper;
public class RitualEffectSphereCreator extends RitualEffect
{
// private static final int potentiaDrain = 10;
public static int MAX_RADIUS = 32;
private static final int terraeDrain = 1;
@Override
public void performEffect(IMasterRitualStone ritualStone)
{
String owner = ritualStone.getOwner();
int currentEssence = SoulNetworkHandler.getCurrentEssence(owner);
World world = ritualStone.getWorld();
int x = ritualStone.getXCoord();
int y = ritualStone.getYCoord();
int z = ritualStone.getZCoord();
// boolean hasPotentia = this.canDrainReagent(ritualStone, ReagentRegistry.potentiaReagent, potentiaDrain, false);
if (world.getWorldTime() % 1 != 0)
{
return;
}
if (currentEssence < this.getCostPerRefresh())
{
SoulNetworkHandler.causeNauseaToPlayer(owner);
} else
{
TileEntity tile = world.getTileEntity(x, y+1, z);
if(!(tile instanceof IInventory))
{
return;
}
int negYOffset = 0;
int radius = 0;
IInventory inv = (IInventory)tile;
int invSize = inv.getSizeInventory();
if(invSize < 1)
{
return;
}else
{
if(invSize >= 2)
{
ItemStack invStack2 = inv.getStackInSlot(1);
if(invStack2 != null)
{
negYOffset = invStack2.stackSize;
}
}
ItemStack invStack1 = inv.getStackInSlot(0);
if(invStack1 == null)
{
return;
}
radius = invStack1.stackSize;
}
if(radius <= 0)
{
return;
}
radius = Math.min(radius, MAX_RADIUS);
if(negYOffset < radius + 3)
{
negYOffset = radius + 3;
}
Int3 lastPos = this.getLastPosition(ritualStone.getCustomRitualTag(), radius);
int j = -radius;
int i = -radius;
int k = -radius;
if(lastPos != null)
{
j = Math.min(radius, Math.max(-radius, lastPos.yCoord));
i = Math.min(radius, Math.max(-radius, lastPos.xCoord));
k = Math.min(radius, Math.max(-radius, lastPos.zCoord));
}
int yP = y + negYOffset;
int yN = y - negYOffset;
boolean incrementNext = false;
while(i <= radius)
{
while(j <= radius)
{
while(k <= radius)
{
if (i * i + j * j + k * k >= (radius + 0.50f) * (radius + 0.50f))
{
k++;
continue;
}
if(incrementNext)
{
this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k));
return;
}
Block blk = world.getBlock(x + i, yP + j, z + k);
if (world.isAirBlock(x + i, yN + j, z + k) || (!world.isAirBlock(x + i, yP + j, z + k) && !SpellHelper.isBlockFluid(blk)))
{
k++;
continue;
}
if(BlockTeleposer.swapBlocks(this, world, world, x + i, yN + j, z + k, x + i, yP + j, z + k, false, 2))
{
SoulNetworkHandler.syphonFromNetwork(owner, this.getCostPerRefresh());
if(this.canDrainReagent(ritualStone, ReagentRegistry.terraeReagent, terraeDrain, true))
{
world.setBlock(x + i, yN + j, z + k, Blocks.dirt, 0, 2);
}
}
this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k));
incrementNext = true;
k++;
}
k = -radius;
j++;
}
j = -radius;
i++;
this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k));
return;
}
ritualStone.setActive(false);
this.setLastPosition(ritualStone.getCustomRitualTag(), new Int3(i, j, k));
return;
}
}
@Override
public int getCostPerRefresh()
{
return 0;
}
public Int3 getLastPosition(NBTTagCompound tag, int radius)
{
if(tag != null && tag.getBoolean("hasWorked"))
{
return Int3.readFromNBT(tag);
}
return new Int3(-radius, -radius, -radius);
}
public void setLastPosition(NBTTagCompound tag, Int3 pos)
{
if(tag != null)
{
pos.writeToNBT(tag);
tag.setBoolean("hasWorked", true);
}
}
@Override
public List<RitualComponent> getRitualComponentList()
{
ArrayList<RitualComponent> magneticRitual = new ArrayList();
magneticRitual.add(new RitualComponent(1, 0, 1, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(1, 0, -1, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(-1, 0, 1, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(-1, 0, -1, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(2, 1, 0, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(0, 1, 2, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(-2, 1, 0, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(0, 1, -2, RitualComponent.EARTH));
magneticRitual.add(new RitualComponent(2, 1, 2, RitualComponent.AIR));
magneticRitual.add(new RitualComponent(2, 1, -2, RitualComponent.AIR));
magneticRitual.add(new RitualComponent(-2, 1, 2, RitualComponent.AIR));
magneticRitual.add(new RitualComponent(-2, 1, -2, RitualComponent.AIR));
magneticRitual.add(new RitualComponent(2, 2, 0, RitualComponent.FIRE));
magneticRitual.add(new RitualComponent(0, 2, 2, RitualComponent.FIRE));
magneticRitual.add(new RitualComponent(-2, 2, 0, RitualComponent.FIRE));
magneticRitual.add(new RitualComponent(0, 2, -2, RitualComponent.DUSK));
return magneticRitual;
}
}