use of com.eerussianguy.firmalife.recipe.CrackingRecipe in project firmalife by eerussianguy.
the class CTCracking method addRecipe.
@ZenMethod
public static void addRecipe(String recipe_name, IIngredient input, IItemStack output, float chance) {
CrackingRecipe recipe = new CrackingRecipe(CTHelper.getInternalIngredient(input), InputHelper.toStack(output), chance).setRegistryName(recipe_name);
CraftTweakerAPI.apply(new IAction() {
@Override
public void apply() {
RegistriesFL.CRACKING.register(recipe);
}
@Override
public String describe() {
return "Adding Cracking recipe " + recipe.getRegistryName().toString();
}
});
}
use of com.eerussianguy.firmalife.recipe.CrackingRecipe in project firmalife by eerussianguy.
the class ItemMetalMallet method onItemUse.
@Override
@Nonnull
@SuppressWarnings("deprecation")
public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
if (!worldIn.isRemote && hand == EnumHand.MAIN_HAND) {
Block block = worldIn.getBlockState(pos).getBlock();
if (block instanceof BlockPlacedItemFlat) {
TEPlacedItemFlat tile = (TEPlacedItemFlat) worldIn.getTileEntity(pos);
if (tile == null)
return EnumActionResult.FAIL;
CrackingRecipe entry = CrackingRecipe.get(tile.getStack());
if (entry == null)
return EnumActionResult.FAIL;
if (Constants.RNG.nextInt(100) < entry.getChance()) {
InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), entry.getOutputItem(tile.getStack()));
worldIn.playSound(null, pos, SoundEvents.BLOCK_WOOD_PLACE, SoundCategory.BLOCKS, 2.0F, 1.0F);
} else
worldIn.playSound(null, pos, SoundEvents.BLOCK_WOOD_FALL, SoundCategory.BLOCKS, 2.0F, 1.0F);
tile.setStack(ItemStack.EMPTY);
worldIn.setBlockToAir(pos);
player.getHeldItem(hand).damageItem(1, player);
return EnumActionResult.SUCCESS;
} else if (block == BlocksFL.MELON_FRUIT) {
List<ItemStack> drops = block.getDrops(worldIn, pos, worldIn.getBlockState(pos), 0);
ItemStack stack = drops.get(0);
if (stack.getItem() == Item.getItemFromBlock(block)) {
IFood cap = stack.getCapability(CapabilityFood.CAPABILITY, null);
if (cap != null) {
if (!cap.isRotten()) {
for (int i = 0; i < 2 + RNG.nextInt(4); i++) Helpers.spawnItemStack(worldIn, pos, new ItemStack(ItemsFL.getFood(FoodFL.MELON)));
}
}
}
worldIn.destroyBlock(pos, false);
worldIn.playSound(null, pos, SoundEvents.BLOCK_GRASS_BREAK, SoundCategory.BLOCKS, 1.0f, 1.0f);
return EnumActionResult.SUCCESS;
}
BlockPos offsetPos;
BlockPos logPos = pos;
IBlockState logState = worldIn.getBlockState(pos);
Block logBlock = logState.getBlock();
// grabbing the registry to verify you're clicking a nut tree
NutRecipe entry = NutRecipe.get(logBlock);
if (entry == null)
return EnumActionResult.FAIL;
int leafCount = 0;
for (int i = 1; i < 14; i++) {
logPos = pos.up(i);
logState = worldIn.getBlockState(logPos);
if (// we already verified that logBlock is correct
logState.getBlock() != logBlock)
break;
for (// this is a crappy leaf counting algorithm
EnumFacing d : // this is a crappy leaf counting algorithm
EnumFacing.HORIZONTALS) {
IBlockState leafState;
for (int j = 1; j < 5; j++) {
offsetPos = logPos.offset(d, j);
leafState = worldIn.getBlockState(offsetPos);
if (// offset the thing if the trunk seems to curve
j == 1 && leafState.getBlock() == logBlock)
pos = pos.offset(d, j);
if (worldIn.isAirBlock(offsetPos))
continue;
if (leafState.getBlock() == entry.getLeaves())
leafCount++;
}
}
}
if (leafCount > 0) {
Month month = CalendarTFC.CALENDAR_TIME.getMonthOfYear();
if (!(month == Month.OCTOBER || month == Month.NOVEMBER)) {
player.sendStatusMessage(new TextComponentTranslation("tooltip.firmalife.not_fall"), true);
return EnumActionResult.PASS;
}
IPlayerDataFL playerData = player.getCapability(CapPlayerDataFL.CAPABILITY, null);
if (playerData != null) {
boolean timePassed = (int) CalendarTFC.CALENDAR_TIME.getTicks() - playerData.getNuttedTime() > ConfigFL.General.BALANCE.nutTime;
boolean distanced = playerData.getNutDistance(pos) > ConfigFL.General.BALANCE.nutDistance;
if (distanced && timePassed) {
playerData.setNuttedTime();
playerData.setNutPosition(pos);
leafCount = (int) Math.ceil(leafCount * 0.66);
while (// batches drops a few times
leafCount > 0) {
int dropCount = Math.min(Constants.RNG.nextInt(4) + 1, leafCount);
BlockPos dropPos = logPos.offset(EnumFacing.random(Constants.RNG), Constants.RNG.nextInt(3) + 1);
// should be querying nut
Helpers.spawnItemStack(worldIn, dropPos, new ItemStack(entry.getNut().getItem(), Constants.RNG.nextInt(dropCount)));
TFCParticles.LEAF1.sendToAllNear(worldIn, dropPos.getX() + RNG.nextFloat() / 10, dropPos.getY() - RNG.nextFloat() / 10, dropPos.getZ() + RNG.nextFloat() / 10, (RNG.nextFloat() - 0.5) / 10, -0.15D + RNG.nextFloat() / 10, (RNG.nextFloat() - 0.5) / 10, 90);
leafCount -= dropCount;
}
worldIn.playSound(null, pos, SoundEvents.BLOCK_WOOD_PLACE, SoundCategory.BLOCKS, 3.0F, 1.0F);
player.getHeldItem(hand).damageItem(1, player);
player.addPotionEffect(new PotionEffect(MobEffects.HUNGER, 200, 1));
} else {
if (!timePassed) {
player.sendStatusMessage(new TextComponentTranslation("tooltip.firmalife.refractory"), true);
} else {
player.sendStatusMessage(new TextComponentTranslation("tooltip.firmalife.distance"), true);
}
player.addPotionEffect(new PotionEffect(MobEffects.MINING_FATIGUE, 200, 1));
player.addPotionEffect(new PotionEffect(PotionEffectsTFC.THIRST, 200, 0));
}
return EnumActionResult.SUCCESS;
}
}
}
return EnumActionResult.FAIL;
}
use of com.eerussianguy.firmalife.recipe.CrackingRecipe in project firmalife by eerussianguy.
the class CTCracking method removeRecipe.
@ZenMethod
public static void removeRecipe(IItemStack output) {
if (output == null)
throw new IllegalArgumentException("Output not allowed to be empty");
ArrayList<CrackingRecipe> removeList = new ArrayList<>();
RegistriesFL.CRACKING.getValuesCollection().stream().filter(x -> x.getOutputItem(ItemStack.EMPTY).isItemEqual(InputHelper.toStack(output))).forEach(removeList::add);
for (CrackingRecipe recipe : removeList) {
CraftTweakerAPI.apply(new IAction() {
@Override
public void apply() {
IForgeRegistryModifiable<CrackingRecipe> CRACKING = (IForgeRegistryModifiable<CrackingRecipe>) RegistriesFL.CRACKING;
CRACKING.remove(recipe.getRegistryName());
}
@Override
public String describe() {
return "Removing Cracking recipe for output " + output.getDisplayName();
}
});
}
}
Aggregations