Forgot a class (How does THAT happen?)
This commit is contained in:
parent
6560e6ec09
commit
487332ff8d
210
src/main/java/WayofTime/bloodmagic/ritual/RitualMagnetic.java
Normal file
210
src/main/java/WayofTime/bloodmagic/ritual/RitualMagnetic.java
Normal file
|
@ -0,0 +1,210 @@
|
||||||
|
package WayofTime.bloodmagic.ritual;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.BlockOre;
|
||||||
|
import net.minecraft.block.BlockRedstoneOre;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.init.Blocks;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.BlockPos;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.oredict.OreDictionary;
|
||||||
|
import WayofTime.bloodmagic.api.BlockStack;
|
||||||
|
import WayofTime.bloodmagic.api.Constants;
|
||||||
|
import WayofTime.bloodmagic.api.network.SoulNetwork;
|
||||||
|
import WayofTime.bloodmagic.api.ritual.AreaDescriptor;
|
||||||
|
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.tile.TileTeleposer;
|
||||||
|
|
||||||
|
public class RitualMagnetic extends Ritual
|
||||||
|
{
|
||||||
|
private static final Map<BlockStack, Boolean> oreBlockCache = new HashMap<BlockStack, Boolean>();
|
||||||
|
|
||||||
|
public static final String PLACEMENT_RANGE = "placementRange";
|
||||||
|
// public static final String SEARCH_RANGE = "searchRange";
|
||||||
|
|
||||||
|
public BlockPos lastPos; // An offset
|
||||||
|
|
||||||
|
public RitualMagnetic()
|
||||||
|
{
|
||||||
|
super("ritualMagnetic", 0, 10000, "ritual." + Constants.Mod.MODID + ".magneticRitual");
|
||||||
|
addBlockRange(PLACEMENT_RANGE, new AreaDescriptor.Rectangle(new BlockPos(-1, 1, -1), 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isBlockOre(Block block, int meta)
|
||||||
|
{
|
||||||
|
if (block == null || Item.getItemFromBlock(block) == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (block instanceof BlockOre || block instanceof BlockRedstoneOre)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
BlockStack type = new BlockStack(block, meta);
|
||||||
|
Boolean result = oreBlockCache.get(type);
|
||||||
|
if (result == null)
|
||||||
|
{
|
||||||
|
result = computeIsItemOre(type);
|
||||||
|
oreBlockCache.put(type, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean computeIsItemOre(BlockStack type)
|
||||||
|
{
|
||||||
|
ItemStack itemStack = new ItemStack(type.getBlock(), type.getMeta());
|
||||||
|
for (int id : OreDictionary.getOreIDs(itemStack))
|
||||||
|
{
|
||||||
|
String oreName = OreDictionary.getOreName(id);
|
||||||
|
if (oreName.contains("ore"))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void performRitual(IMasterRitualStone masterRitualStone)
|
||||||
|
{
|
||||||
|
World world = masterRitualStone.getWorldObj();
|
||||||
|
SoulNetwork network = NetworkHelper.getSoulNetwork(masterRitualStone.getOwner());
|
||||||
|
int currentEssence = network.getCurrentEssence();
|
||||||
|
|
||||||
|
if (currentEssence < getRefreshCost())
|
||||||
|
{
|
||||||
|
network.causeNauseaToPlayer();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockPos pos = masterRitualStone.getBlockPos();
|
||||||
|
|
||||||
|
AreaDescriptor placementRange = getBlockRange(PLACEMENT_RANGE);
|
||||||
|
|
||||||
|
BlockPos replacement = pos;
|
||||||
|
boolean replace = false;
|
||||||
|
|
||||||
|
for (BlockPos offset : placementRange.getContainedPositions(pos))
|
||||||
|
{
|
||||||
|
if (world.isAirBlock(offset))
|
||||||
|
{
|
||||||
|
replacement = offset;
|
||||||
|
replace = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
IBlockState downState = world.getBlockState(pos.down());
|
||||||
|
Block downBlock = downState.getBlock();
|
||||||
|
|
||||||
|
int radius = getRadius(downBlock);
|
||||||
|
|
||||||
|
if (replace)
|
||||||
|
{
|
||||||
|
int j = -1;
|
||||||
|
int i = -radius;
|
||||||
|
int k = -radius;
|
||||||
|
|
||||||
|
if (lastPos != null)
|
||||||
|
{
|
||||||
|
j = lastPos.getY();
|
||||||
|
i = Math.min(radius, Math.max(-radius, lastPos.getX()));
|
||||||
|
k = Math.min(radius, Math.max(-radius, lastPos.getZ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
while (j + pos.getY() >= 0)
|
||||||
|
{
|
||||||
|
while (i <= radius)
|
||||||
|
{
|
||||||
|
while (k <= radius)
|
||||||
|
{
|
||||||
|
BlockPos newPos = pos.add(i, j, k);
|
||||||
|
IBlockState state = world.getBlockState(newPos);
|
||||||
|
Block block = state.getBlock();
|
||||||
|
int meta = block.getMetaFromState(state);
|
||||||
|
|
||||||
|
if (isBlockOre(block, meta))
|
||||||
|
{
|
||||||
|
TileTeleposer.teleportBlocks(this, world, newPos, world, replacement);
|
||||||
|
network.syphon(getRefreshCost());
|
||||||
|
k++;
|
||||||
|
this.lastPos = new BlockPos(i, j, k);
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
k = -radius;
|
||||||
|
}
|
||||||
|
j--;
|
||||||
|
i = -radius;
|
||||||
|
this.lastPos = new BlockPos(i, j, k);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
j = -1;
|
||||||
|
this.lastPos = new BlockPos(i, j, k);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRadius(Block block)
|
||||||
|
{
|
||||||
|
if (block == Blocks.iron_block)
|
||||||
|
{
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (block == Blocks.gold_block)
|
||||||
|
{
|
||||||
|
return 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (block == Blocks.diamond_block)
|
||||||
|
{
|
||||||
|
return 31;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRefreshTime()
|
||||||
|
{
|
||||||
|
return 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRefreshCost()
|
||||||
|
{
|
||||||
|
return 25;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<RitualComponent> getComponents()
|
||||||
|
{
|
||||||
|
ArrayList<RitualComponent> components = new ArrayList<RitualComponent>();
|
||||||
|
|
||||||
|
this.addCornerRunes(components, 1, 0, EnumRuneType.EARTH);
|
||||||
|
this.addParallelRunes(components, 2, 1, EnumRuneType.EARTH);
|
||||||
|
this.addCornerRunes(components, 2, 1, EnumRuneType.AIR);
|
||||||
|
this.addParallelRunes(components, 2, 2, EnumRuneType.FIRE);
|
||||||
|
|
||||||
|
return components;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Ritual getNewCopy()
|
||||||
|
{
|
||||||
|
return new RitualMagnetic();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue