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 mod_name=BloodMagic
forge_version=10.13.2.1232 forge_version=10.13.2.1232
ccc_version=1.0.4.29 ccc_version=1.0.4.29
@ -8,5 +8,5 @@ nei_version=1.0.3.64
package_group=com.wayoftime.bloodmagic package_group=com.wayoftime.bloodmagic
mod_version=1.3.2 mod_version=1.3.2
minetweaker_version=Dev-1.7.10-3.0.9B minetweaker_version=Dev-1.7.10-3.0.9B
build_number=1
mc_version=1.7.10 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.RitualEffectOmegaTest;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSoulBound;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSpawnWard;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSphereCreator;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSummonMeteor;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression; import WayofTime.alchemicalWizardry.common.rituals.RitualEffectSupression;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectUnbinding; 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("AW034Crafting", 1, 15000, new RitualEffectCrafting(), "Rhythm of the Beating Anvil");
Rituals.registerRitual("AW035", 1, 10000, new RitualEffectItemRouting(), "Orchestra of the Phantom Hands"); 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")); //Rituals.registerRitual(1,100,new RitualEffectApiaryOverclock(),"Apiary Overclock"));
} }

View file

@ -154,8 +154,18 @@ public class BlockTeleposer extends BlockContainer
{ {
return new TETeleposer(); 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) 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 tileEntityI = worldI.getTileEntity(xi, yi, zi);
TileEntity tileEntityF = worldF.getTileEntity(xf, yf, zf); TileEntity tileEntityF = worldF.getTileEntity(xf, yf, zf);
@ -196,10 +206,11 @@ public class BlockTeleposer extends BlockContainer
if (MinecraftForge.EVENT_BUS.post(evt)) if (MinecraftForge.EVENT_BUS.post(evt))
return false; return false;
worldI.playSoundEffect(xi, yi, zi, "mob.endermen.portal", 1.0F, 1.0F); if(doSound)
worldF.playSoundEffect(xf, yf, zf, "mob.endermen.portal", 1.0F, 1.0F); {
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 //CLEAR TILES
Block finalBlock = blockF; Block finalBlock = blockF;
@ -221,7 +232,7 @@ public class BlockTeleposer extends BlockContainer
} }
//TILES CLEARED //TILES CLEARED
worldF.setBlock(xf, yf, zf, initialBlock, metaI, 3); worldF.setBlock(xf, yf, zf, initialBlock, metaI, flag);
if (tileEntityI != null) 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) 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;
}
}