mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
107 lines
2.4 KiB
Java
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;
|
|
}
|
|
|
|
}
|