Work on a new ritual
This commit is contained in:
parent
d423ea5807
commit
89d723b3ee
|
@ -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
|
||||
|
|
|
@ -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"));
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue