Skip to content

Commit

Permalink
Refactor crucible logic
Browse files Browse the repository at this point in the history
  • Loading branch information
ACGaming committed Jun 5, 2024
1 parent 6d83223 commit 21b5794
Show file tree
Hide file tree
Showing 2 changed files with 161 additions and 86 deletions.
85 changes: 84 additions & 1 deletion src/main/java/mod/emt/harkenscythe/blocks/HSBloodCrucible.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package mod.emt.harkenscythe.blocks;

import java.util.Random;
import mod.emt.harkenscythe.init.HSItems;
import mod.emt.harkenscythe.items.HSEssenceKeeper;
import net.minecraft.block.BlockCauldron;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;

Expand All @@ -28,7 +33,25 @@ public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, En
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
return false;
if (world.isRemote) return false;

ItemStack stack = player.getHeldItem(hand);
if (stack.isEmpty()) return false;

Item item = stack.getItem();
if (!(item instanceof HSEssenceKeeper)) return false;

int level = state.getValue(LEVEL);
if (level < 3 && !player.isSneaking() && (item == HSItems.essence_keeper_blood || item == HSItems.essence_vessel_blood))
{
fillCrucible(world, pos, state, player, hand, stack, item, level);
}
else if (level > 0 && player.isSneaking())
{
emptyCrucible(world, pos, state, player, hand, stack, item, level);
}

return true;
}

@Override
Expand All @@ -48,4 +71,64 @@ public ItemStack getItem(World world, BlockPos pos, IBlockState state)
{
return new ItemStack(Item.getItemFromBlock(this));
}

private void fillCrucible(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, Item item, int level)
{
if (!player.capabilities.isCreativeMode)
{
if (stack.getItemDamage() + 20 < stack.getMaxDamage())
{
stack.setItemDamage(stack.getItemDamage() + 20);
}
else
{
stack.shrink(1);
if (item == HSItems.essence_keeper_blood)
{
player.setHeldItem(hand, new ItemStack(HSItems.essence_keeper));
}
else if (item == HSItems.essence_vessel_blood)
{
player.setHeldItem(hand, new ItemStack(HSItems.essence_vessel));
}
}
}
world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F);
setWaterLevel(world, pos, state, level + 1);
player.addStat(StatList.getObjectUseStats(item));
}

private void emptyCrucible(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, Item item, int level)
{
if (!player.capabilities.isCreativeMode)
{
if (item == HSItems.essence_keeper || item == HSItems.essence_vessel)
{
stack.shrink(1);
ItemStack newStack = item == HSItems.essence_keeper ? new ItemStack(HSItems.essence_keeper_blood) : new ItemStack(HSItems.essence_vessel_blood);
if (item == HSItems.essence_vessel)
{
newStack.setItemDamage(newStack.getMaxDamage() - 20);
}
player.setHeldItem(hand, newStack);
}
else if (item == HSItems.essence_keeper_blood || item == HSItems.essence_vessel_blood)
{
if (stack.getItemDamage() == 0) return;
if (stack.getItemDamage() > 0)
{
stack.setItemDamage(stack.getItemDamage() - 20);
}
if (stack.getItemDamage() <= 0)
{
stack.shrink(1);
ItemStack newStack = item == HSItems.essence_keeper_blood ? new ItemStack(HSItems.essence_keeper_blood) : new ItemStack(HSItems.essence_vessel_blood);
player.setHeldItem(hand, newStack);
}
}
}
world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F);
setWaterLevel(world, pos, state, level - 1);
player.addStat(StatList.getObjectUseStats(item));
}
}
162 changes: 77 additions & 85 deletions src/main/java/mod/emt/harkenscythe/blocks/HSSoulCrucible.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import java.util.Random;
import mod.emt.harkenscythe.init.HSItems;
import mod.emt.harkenscythe.items.HSEssenceKeeper;
import net.minecraft.block.BlockCauldron;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
Expand All @@ -28,98 +30,28 @@ public void onEntityCollision(World worldIn, BlockPos pos, IBlockState state, En

}

// TODO: Works, but needs refactoring
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
if (world.isRemote)
{
return false;
}
if (world.isRemote) return false;

ItemStack stack = player.getHeldItem(hand);
if (!stack.isEmpty())
{
int level = state.getValue(LEVEL);
Item item = stack.getItem();
if (stack.isEmpty()) return false;

if (item == HSItems.essence_keeper || item == HSItems.essence_vessel || item == HSItems.essence_keeper_soul || item == HSItems.essence_vessel_soul)
{
// Filling the crucible
if (level < 3 && !player.isSneaking())
{
if (item == HSItems.essence_keeper_soul || item == HSItems.essence_vessel_soul)
{
if (!player.capabilities.isCreativeMode)
{
if (stack.getItemDamage() + 20 < stack.getMaxDamage())
{
stack.setItemDamage(stack.getItemDamage() + 20);
}
else if (item == HSItems.essence_keeper_soul)
{
stack.shrink(1);
player.setHeldItem(hand, new ItemStack(HSItems.essence_keeper));
}
else if (item == HSItems.essence_vessel_soul)
{
stack.shrink(1);
player.setHeldItem(hand, new ItemStack(HSItems.essence_vessel));
}
}
Item item = stack.getItem();
if (!(item instanceof HSEssenceKeeper)) return false;

world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F);
this.setWaterLevel(world, pos, state, level + 1);
}
}
// Emptying the crucible
else if (level > 0 && player.isSneaking())
{
if (!player.capabilities.isCreativeMode)
{
if (item == HSItems.essence_keeper || item == HSItems.essence_vessel)
{
stack.shrink(1);
if (item == HSItems.essence_keeper)
{
ItemStack newEssenceKeeperSoul = new ItemStack(HSItems.essence_keeper_soul);
player.setHeldItem(hand, newEssenceKeeperSoul);
}
else if (item == HSItems.essence_vessel)
{
ItemStack newEssenceVesselSoul = new ItemStack(HSItems.essence_vessel_soul);
newEssenceVesselSoul.setItemDamage(newEssenceVesselSoul.getItemDamage() + 20);
player.setHeldItem(hand, newEssenceVesselSoul);
}
}
else if (item == HSItems.essence_keeper_soul || item == HSItems.essence_vessel_soul)
{
if (stack.getItemDamage() <= 0)
{
return false;
}
else if (stack.getItemDamage() - 20 < 0)
{
stack.setItemDamage(stack.getItemDamage() - 20);
}
else if (item == HSItems.essence_keeper_soul)
{
stack.shrink(1);
player.setHeldItem(hand, new ItemStack(HSItems.essence_keeper_soul));
}
else if (item == HSItems.essence_vessel_soul)
{
stack.shrink(1);
player.setHeldItem(hand, new ItemStack(HSItems.essence_vessel_soul));
}
}
}
world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F);
this.setWaterLevel(world, pos, state, level - 1);
}
return true;
}
int level = state.getValue(LEVEL);
if (level < 3 && !player.isSneaking() && (item == HSItems.essence_keeper_soul || item == HSItems.essence_vessel_soul))
{
fillCrucible(world, pos, state, player, hand, stack, item, level);
}
return false;
else if (level > 0 && player.isSneaking())
{
emptyCrucible(world, pos, state, player, hand, stack, item, level);
}

return true;
}

@Override
Expand All @@ -139,4 +71,64 @@ public ItemStack getItem(World world, BlockPos pos, IBlockState state)
{
return new ItemStack(Item.getItemFromBlock(this));
}

private void fillCrucible(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, Item item, int level)
{
if (!player.capabilities.isCreativeMode)
{
if (stack.getItemDamage() + 20 < stack.getMaxDamage())
{
stack.setItemDamage(stack.getItemDamage() + 20);
}
else
{
stack.shrink(1);
if (item == HSItems.essence_keeper_soul)
{
player.setHeldItem(hand, new ItemStack(HSItems.essence_keeper));
}
else if (item == HSItems.essence_vessel_soul)
{
player.setHeldItem(hand, new ItemStack(HSItems.essence_vessel));
}
}
}
world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_EMPTY, SoundCategory.BLOCKS, 1.0F, 1.0F);
setWaterLevel(world, pos, state, level + 1);
player.addStat(StatList.getObjectUseStats(item));
}

private void emptyCrucible(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack stack, Item item, int level)
{
if (!player.capabilities.isCreativeMode)
{
if (item == HSItems.essence_keeper || item == HSItems.essence_vessel)
{
stack.shrink(1);
ItemStack newStack = item == HSItems.essence_keeper ? new ItemStack(HSItems.essence_keeper_soul) : new ItemStack(HSItems.essence_vessel_soul);
if (item == HSItems.essence_vessel)
{
newStack.setItemDamage(newStack.getMaxDamage() - 20);
}
player.setHeldItem(hand, newStack);
}
else if (item == HSItems.essence_keeper_soul || item == HSItems.essence_vessel_soul)
{
if (stack.getItemDamage() == 0) return;
if (stack.getItemDamage() > 0)
{
stack.setItemDamage(stack.getItemDamage() - 20);
}
if (stack.getItemDamage() <= 0)
{
stack.shrink(1);
ItemStack newStack = item == HSItems.essence_keeper_soul ? new ItemStack(HSItems.essence_keeper_soul) : new ItemStack(HSItems.essence_vessel_soul);
player.setHeldItem(hand, newStack);
}
}
}
world.playSound(null, pos, SoundEvents.ITEM_BOTTLE_FILL, SoundCategory.BLOCKS, 1.0F, 1.0F);
setWaterLevel(world, pos, state, level - 1);
player.addStat(StatList.getObjectUseStats(item));
}
}

0 comments on commit 21b5794

Please sign in to comment.