Ported RitualDismantler (#1499)
* Ported RitualDismantler Signed-off-by: tobias <angryaeon@icloud.com> * Added Hellfire Forge recipe Destructive Will Crystal, Destructive Will Crystal, Ritual Diviner (default), Weak Blood Shard Requires a minimum of 500 will and consumes 100 will to craft * Changed costs (lazy proposal): - 50 LP per normal Ritual Stone - discount cost of 200 LP for a whole ritual (smallest ritual has 4 ritual stones) - 100 LP for an MRS
This commit is contained in:
parent
5b4e624d44
commit
05446742ef
5 changed files with 111 additions and 78 deletions
|
@ -0,0 +1,78 @@
|
|||
package WayofTime.bloodmagic.item;
|
||||
|
||||
import WayofTime.bloodmagic.BloodMagic;
|
||||
import WayofTime.bloodmagic.block.BlockRitualStone;
|
||||
import WayofTime.bloodmagic.client.IVariantProvider;
|
||||
import WayofTime.bloodmagic.core.RegistrarBloodMagicBlocks;
|
||||
import WayofTime.bloodmagic.core.data.SoulTicket;
|
||||
import WayofTime.bloodmagic.ritual.Ritual;
|
||||
import WayofTime.bloodmagic.ritual.RitualComponent;
|
||||
import WayofTime.bloodmagic.tile.TileMasterRitualStone;
|
||||
import WayofTime.bloodmagic.util.helper.NetworkHelper;
|
||||
import WayofTime.bloodmagic.util.helper.RitualHelper;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumActionResult;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ItemRitualDismantler extends Item implements IVariantProvider {
|
||||
public ItemRitualDismantler() {
|
||||
setUnlocalizedName(BloodMagic.MODID + ".ritualDismantler");
|
||||
setCreativeTab(BloodMagic.TAB_BM);
|
||||
setMaxStackSize(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
|
||||
Block block = world.getBlockState(pos).getBlock();
|
||||
TileEntity tileEntity = world.getTileEntity(pos);
|
||||
ItemStack stack = player.getHeldItem(hand);
|
||||
|
||||
if (tileEntity instanceof TileMasterRitualStone) {
|
||||
TileMasterRitualStone masterRitualStone = (TileMasterRitualStone) tileEntity;
|
||||
EnumFacing direction = masterRitualStone.getDirection();
|
||||
|
||||
String ritualName = RitualHelper.getValidRitual(world, pos);
|
||||
masterRitualStone.setActive(false);
|
||||
|
||||
if (ritualName.equals("")) {
|
||||
world.setBlockToAir(pos);
|
||||
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(RegistrarBloodMagicBlocks.RITUAL_CONTROLLER));
|
||||
NetworkHelper.getSoulNetwork(player).syphon(SoulTicket.item(stack, 100));
|
||||
return EnumActionResult.SUCCESS;
|
||||
}
|
||||
|
||||
Ritual ritual = BloodMagic.RITUAL_MANAGER.getRitual(ritualName);
|
||||
List<RitualComponent> components = Lists.newArrayList();
|
||||
ritual.gatherComponents(components::add);
|
||||
for (RitualComponent component : components) {
|
||||
BlockPos newPos = pos.add(component.getOffset(direction));
|
||||
if (world.getBlockState(newPos).getBlock() instanceof BlockRitualStone) {
|
||||
world.setBlockToAir(newPos);
|
||||
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(RegistrarBloodMagicBlocks.RITUAL_STONE));
|
||||
}
|
||||
}
|
||||
|
||||
NetworkHelper.getSoulNetwork(player).syphon(SoulTicket.item(stack, 200)); // smallest Ritual has 4 stones
|
||||
return EnumActionResult.SUCCESS;
|
||||
|
||||
} else if (player.isSneaking() && block instanceof BlockRitualStone) {
|
||||
block.removedByPlayer(world.getBlockState(pos), world, pos, player, false);
|
||||
ItemHandlerHelper.giveItemToPlayer(player, new ItemStack(RegistrarBloodMagicBlocks.RITUAL_STONE));
|
||||
NetworkHelper.getSoulNetwork(player).syphon(SoulTicket.item(stack, 50));
|
||||
return EnumActionResult.SUCCESS;
|
||||
}
|
||||
|
||||
return EnumActionResult.FAIL;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue