Hbm-s-Nuclear-Tech-GIT/src/main/java/com/hbm/crafting/handlers/RBMKFuelCraftingHandler.java
2021-05-23 22:37:13 +02:00

107 lines
2.4 KiB
Java

package com.hbm.crafting.handlers;
import com.hbm.items.machine.ItemRBMKRod;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class RBMKFuelCraftingHandler implements IRecipe {
/**
* The only rules for matching is that the item is fuel (meta and NBT don't matter) and that it's the only stack in the grid
*/
@Override
public boolean matches(InventoryCrafting inventory, World world) {
if(!hasExactlyOneStack(inventory))
return false;
ItemStack stack = getFirstStack(inventory);
return stack.getItem() instanceof ItemRBMKRod && ((ItemRBMKRod)stack.getItem()).pellet != null &&
ItemRBMKRod.getHullHeat(stack) < 50 && ItemRBMKRod.getCoreHeat(stack) < 50;
}
@Override
public int getRecipeSize() {
return 1;
}
@Override
public ItemStack getCraftingResult(InventoryCrafting inventory) {
if(!hasExactlyOneStack(inventory))
return null;
ItemStack stack = getFirstStack(inventory);
if(stack.getItem() instanceof ItemRBMKRod) {
ItemRBMKRod rod = (ItemRBMKRod)stack.getItem();
if(rod.pellet == null)
return null;
if(ItemRBMKRod.getEnrichment(stack) > 0.99D)
return null;
if(ItemRBMKRod.getHullHeat(stack) < 50 && ItemRBMKRod.getCoreHeat(stack) < 50) {
ItemStack result = new ItemStack(rod.pellet, 8);
int enrichment = 4 - MathHelper.clamp_int((int)Math.ceil(ItemRBMKRod.getEnrichment(stack) * 5 - 1), 0, 4);
int meta = enrichment + (ItemRBMKRod.getPoisonLevel(stack) >= 0.5D ? 5 : 0);
result.setItemDamage(meta);
return result;
}
}
return null;
}
@Override
public ItemStack getRecipeOutput() {
return null;
}
private boolean hasExactlyOneStack(InventoryCrafting inventory) {
boolean hasOne = false;
for(int i = 0; i < 3; ++i) {
for(int j = 0; j < 3; ++j) {
ItemStack stack = inventory.getStackInRowAndColumn(j, i);
if(stack != null) {
if(!hasOne)
hasOne = true;
else
return false;
}
}
}
return hasOne;
}
private ItemStack getFirstStack(InventoryCrafting inventory) {
for(int i = 0; i < 3; ++i) {
for(int j = 0; j < 3; ++j) {
ItemStack stack = inventory.getStackInRowAndColumn(j, i);
if(stack != null) {
return stack;
}
}
}
return null;
}
}