generated from tilera/1710mod
110 lines
4.3 KiB
Java
110 lines
4.3 KiB
Java
package dev.tilera.auracore.crafting;
|
|
|
|
import dev.tilera.auracore.api.AuracoreRecipes;
|
|
import dev.tilera.auracore.api.crafting.CrucibleRecipe;
|
|
import dev.tilera.auracore.api.crafting.IInfusionRecipe;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.IInventory;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.world.World;
|
|
import thaumcraft.api.ThaumcraftApi;
|
|
import thaumcraft.api.aspects.Aspect;
|
|
import thaumcraft.api.aspects.AspectList;
|
|
import thaumcraft.api.crafting.IArcaneRecipe;
|
|
import thaumcraft.common.config.ConfigBlocks;
|
|
import thaumcraft.common.lib.research.ResearchManager;
|
|
import thaumcraft.common.tiles.TileCrucible;
|
|
import thaumcraft.common.tiles.TileMagicWorkbench;
|
|
|
|
public class AuracoreCraftingManager {
|
|
|
|
public static IArcaneRecipe findMatchingArcaneRecipe(TileMagicWorkbench awb, EntityPlayer player) {
|
|
for (Object recipe : ThaumcraftApi.getCraftingRecipes()) {
|
|
if (recipe instanceof IArcaneRecipe && ((IArcaneRecipe)recipe).matches(awb, player.worldObj, player)) {
|
|
return (IArcaneRecipe) recipe;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public IInfusionRecipe findMatchingInfusionRecipe(TileMagicWorkbench inv, EntityPlayer pl) {
|
|
for (IInfusionRecipe recipe : AuracoreRecipes.getInfusionRecipes()) {
|
|
if (recipe.matches(inv, pl.worldObj, pl)) {
|
|
return recipe;
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static int getArcaneRecipeVisCost(IArcaneRecipe recipe, TileMagicWorkbench awb) {
|
|
if (recipe == null) return 0;
|
|
int sum = 0;
|
|
AspectList aspects = recipe.getAspects(awb);
|
|
for (Aspect aspect : aspects.getAspects()) {
|
|
if (aspect != null) sum += aspects.getAmount(aspect);
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
public static TileMagicWorkbench createBridgeInventory(IInventory sourceInventory, int firstSlotIndex, int gridSize )
|
|
{
|
|
TileMagicWorkbench workbenchTile = new TileMagicWorkbench();
|
|
for( int i = 0; i < gridSize; i++ )
|
|
{
|
|
workbenchTile.setInventorySlotContentsSoftly( i, sourceInventory.getStackInSlot( i + firstSlotIndex ) );
|
|
}
|
|
return workbenchTile;
|
|
}
|
|
|
|
public static boolean performCrucibleCrafting(EntityPlayer player, TileCrucible tile) {
|
|
AspectList tags = new AspectList();
|
|
for (Aspect tag : tile.aspects.getAspects()) {
|
|
tags.add(tag, tile.aspects.getAmount(tag));
|
|
}
|
|
World world = tile.getWorldObj();
|
|
CrucibleRecipe recipe = AuracoreRecipes.getCrucibleRecipe(tags, tile);
|
|
ItemStack output = AuracoreRecipes.getCrucibleOutput(tags, tile, recipe);
|
|
if (output != null && isCrucibleCreationSuccessful(world, output, player) && !world.isRemote) {
|
|
tile.ejectItem(output);
|
|
world.addBlockEvent(tile.xCoord, tile.yCoord, tile.zCoord, ConfigBlocks.blockMetalDevice, 1, -1);
|
|
}
|
|
if (!world.isRemote) {
|
|
tile.spillRemnants();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static boolean isCrucibleCreationSuccessful(World world, ItemStack item, EntityPlayer player) {
|
|
String key = AuracoreRecipes.getCrucibleRecipe((ItemStack)item).key;
|
|
boolean completed = ResearchManager.isResearchComplete(player.getDisplayName(), key);
|
|
float chance = 0.0f;
|
|
if (completed) {
|
|
return true;
|
|
}
|
|
return false;
|
|
//TODO: research
|
|
/*if (!ResearchManager.doesPlayerHaveRequisites(player.getDisplayName(), key)) {
|
|
return false;
|
|
}
|
|
ItemStack note = ResearchManager.createResearchNoteForPlayer(world, player, key);
|
|
if (note == null) {
|
|
if (!world.isRemote) {
|
|
player.func_70006_a("Your discover something, but you can't record your findings!");
|
|
}
|
|
} else if (ResearchManager.progressExperimentalResearch(world, key, note, Config.resExpChance + (int)Math.sqrt(item.stackSize * 8))) {
|
|
chance = ResearchManager.getData(note).getTotalProgress();
|
|
if (chance == 1.0f) {
|
|
note.setItemDamage(note.getItemDamage() + 64);
|
|
}
|
|
player.inventoryContainer.detectAndSendChanges();
|
|
if (!world.isRemote) {
|
|
player.func_70006_a("You've learned something new!");
|
|
}
|
|
}
|
|
return world.rand.nextFloat() < chance;*/
|
|
}
|
|
|
|
}
|