mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-12-12 19:20:29 +00:00
Merge pull request #528 from SquidDev-CC/ComputerCraft/feature/computer-upgrade
Add recipes to upgrade computers
This commit is contained in:
commit
7c218361d9
@ -16,4 +16,5 @@ public interface IComputerItem
|
|||||||
int getComputerID( @Nonnull ItemStack stack );
|
int getComputerID( @Nonnull ItemStack stack );
|
||||||
String getLabel( @Nonnull ItemStack stack );
|
String getLabel( @Nonnull ItemStack stack );
|
||||||
ComputerFamily getFamily( @Nonnull ItemStack stack );
|
ComputerFamily getFamily( @Nonnull ItemStack stack );
|
||||||
|
ItemStack withFamily(@Nonnull ItemStack stack, @Nonnull ComputerFamily family);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ import javax.annotation.Nullable;
|
|||||||
public class ItemComputer extends ItemComputerBase
|
public class ItemComputer extends ItemComputerBase
|
||||||
{
|
{
|
||||||
public static int HIGHEST_DAMAGE_VALUE_ID = 16382;
|
public static int HIGHEST_DAMAGE_VALUE_ID = 16382;
|
||||||
|
|
||||||
public ItemComputer( Block block )
|
public ItemComputer( Block block )
|
||||||
{
|
{
|
||||||
super( block );
|
super( block );
|
||||||
@ -87,7 +87,7 @@ public class ItemComputer extends ItemComputerBase
|
|||||||
TileEntity tile = world.getTileEntity( pos );
|
TileEntity tile = world.getTileEntity( pos );
|
||||||
if( tile != null && tile instanceof IComputerTile )
|
if( tile != null && tile instanceof IComputerTile )
|
||||||
{
|
{
|
||||||
IComputerTile computer = (IComputerTile)tile;
|
IComputerTile computer = (IComputerTile) tile;
|
||||||
setupComputerAfterPlacement( stack, computer );
|
setupComputerAfterPlacement( stack, computer );
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -146,10 +146,16 @@ public class ItemComputer extends ItemComputerBase
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
int damage = stack.getItemDamage() & 0x3fff;
|
int damage = stack.getItemDamage() & 0x3fff;
|
||||||
return ( damage - 1 );
|
return (damage - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack withFamily( @Nonnull ItemStack stack, @Nonnull ComputerFamily family )
|
||||||
|
{
|
||||||
|
return ComputerItemFactory.create( getComputerID( stack ), getLabel( stack ), family );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ComputerFamily getFamily( int damage )
|
public ComputerFamily getFamily( int damage )
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
package dan200.computercraft.shared.computer.recipe;
|
||||||
|
|
||||||
|
import dan200.computercraft.shared.computer.items.IComputerItem;
|
||||||
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
import net.minecraft.item.crafting.ShapedRecipes;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a recipe which converts a computer from one form into another.
|
||||||
|
*/
|
||||||
|
public abstract class ComputerConvertRecipe extends ShapedRecipes
|
||||||
|
{
|
||||||
|
public ComputerConvertRecipe( String group, @Nonnull CraftingHelper.ShapedPrimer primer, @Nonnull ItemStack result )
|
||||||
|
{
|
||||||
|
super( group, primer.width, primer.height, primer.input, result );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
protected abstract ItemStack convert( @Nonnull ItemStack stack );
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean matches( @Nonnull InventoryCrafting inventory, @Nonnull World world )
|
||||||
|
{
|
||||||
|
// See if we match the recipe, and extract the input computercraft ID
|
||||||
|
ItemStack computerStack = null;
|
||||||
|
for( int y = 0; y < 3; ++y )
|
||||||
|
{
|
||||||
|
for( int x = 0; x < 3; ++x )
|
||||||
|
{
|
||||||
|
ItemStack stack = inventory.getStackInRowAndColumn( x, y );
|
||||||
|
Ingredient target = getIngredients().get( x + y * 3 );
|
||||||
|
|
||||||
|
// First verify we match the ingredient
|
||||||
|
if( !target.apply( stack ) ) return false;
|
||||||
|
|
||||||
|
// We want to ensure we have a computer item somewhere in the recipe
|
||||||
|
if( stack.getItem() instanceof IComputerItem ) computerStack = stack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return computerStack != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public ItemStack getCraftingResult( @Nonnull InventoryCrafting inventory )
|
||||||
|
{
|
||||||
|
for( int y = 0; y < 3; ++y )
|
||||||
|
{
|
||||||
|
for( int x = 0; x < 3; ++x )
|
||||||
|
{
|
||||||
|
ItemStack item = inventory.getStackInRowAndColumn( x, y );
|
||||||
|
|
||||||
|
// If we're a computer, convert!
|
||||||
|
if( item.getItem() instanceof IComputerItem ) return convert( item );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package dan200.computercraft.shared.computer.recipe;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
|
import dan200.computercraft.shared.computer.items.IComputerItem;
|
||||||
|
import dan200.computercraft.shared.util.RecipeUtil;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
|
import net.minecraft.util.JsonUtils;
|
||||||
|
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||||
|
import net.minecraftforge.common.crafting.IRecipeFactory;
|
||||||
|
import net.minecraftforge.common.crafting.JsonContext;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
public class ComputerFamilyRecipe extends ComputerConvertRecipe
|
||||||
|
{
|
||||||
|
private final ComputerFamily family;
|
||||||
|
|
||||||
|
public ComputerFamilyRecipe( String group, @Nonnull CraftingHelper.ShapedPrimer primer, @Nonnull ItemStack result, ComputerFamily family )
|
||||||
|
{
|
||||||
|
super( group, primer, result );
|
||||||
|
this.family = family;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
protected ItemStack convert( @Nonnull ItemStack stack )
|
||||||
|
{
|
||||||
|
return ((IComputerItem) stack.getItem()).withFamily( stack, family );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Factory implements IRecipeFactory
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public IRecipe parse( JsonContext context, JsonObject json )
|
||||||
|
{
|
||||||
|
String group = JsonUtils.getString( json, "group", "" );
|
||||||
|
ComputerFamily family = RecipeUtil.getFamily( json, "family" );
|
||||||
|
|
||||||
|
CraftingHelper.ShapedPrimer primer = RecipeUtil.getPrimer( context, json );
|
||||||
|
ItemStack result = deserializeItem( JsonUtils.getJsonObject( json, "result" ), false );
|
||||||
|
|
||||||
|
return new ComputerFamilyRecipe( group, primer, result, family );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
package dan200.computercraft.shared.computer.recipe;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
|
import dan200.computercraft.shared.computer.items.IComputerItem;
|
||||||
|
import dan200.computercraft.shared.util.RecipeUtil;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
|
import net.minecraft.util.JsonUtils;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraftforge.common.crafting.IIngredientFactory;
|
||||||
|
import net.minecraftforge.common.crafting.JsonContext;
|
||||||
|
import net.minecraftforge.fml.common.registry.ForgeRegistries;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an ingredient which requires an item to have a specific
|
||||||
|
* computer family. This allows us to have operations which only work
|
||||||
|
* on normal or
|
||||||
|
*/
|
||||||
|
public class ComputerIngredient extends Ingredient
|
||||||
|
{
|
||||||
|
private final IComputerItem item;
|
||||||
|
private final ComputerFamily family;
|
||||||
|
|
||||||
|
public <T extends Item & IComputerItem> ComputerIngredient( T item, int data, ComputerFamily family )
|
||||||
|
{
|
||||||
|
super( new ItemStack( item, 1, data ) );
|
||||||
|
|
||||||
|
this.item = item;
|
||||||
|
this.family = family;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean apply( @Nullable ItemStack stack )
|
||||||
|
{
|
||||||
|
return stack != null && stack.getItem() == item && item.getFamily( stack ) == family;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Factory implements IIngredientFactory
|
||||||
|
{
|
||||||
|
@Nonnull
|
||||||
|
@Override
|
||||||
|
public Ingredient parse( JsonContext context, JsonObject json )
|
||||||
|
{
|
||||||
|
String itemName = context.appendModId( JsonUtils.getString( json, "item" ) );
|
||||||
|
int data = JsonUtils.getInt( json, "data", 0 );
|
||||||
|
ComputerFamily family = RecipeUtil.getFamily( json, "family" );
|
||||||
|
|
||||||
|
Item item = ForgeRegistries.ITEMS.getValue( new ResourceLocation( itemName ) );
|
||||||
|
|
||||||
|
if( item == null ) throw new JsonSyntaxException( "Unknown item '" + itemName + "'" );
|
||||||
|
if( !(item instanceof IComputerItem) )
|
||||||
|
{
|
||||||
|
throw new JsonSyntaxException( "Item '" + itemName + "' is not a computer item" );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return new ComputerIngredient( (Item & IComputerItem) item, data, family );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -371,6 +371,15 @@ public class ItemPocketComputer extends Item implements IComputerItem, IMedia, I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack withFamily( @Nonnull ItemStack stack, @Nonnull ComputerFamily family )
|
||||||
|
{
|
||||||
|
return PocketComputerItemFactory.create(
|
||||||
|
getComputerID( stack ), getLabel( stack ), getColour( stack ),
|
||||||
|
family, getUpgrade( stack )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// IMedia
|
// IMedia
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -170,6 +170,17 @@ public abstract class ItemTurtleBase extends ItemComputerBase implements ITurtle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack withFamily( @Nonnull ItemStack stack, @Nonnull ComputerFamily family )
|
||||||
|
{
|
||||||
|
return TurtleItemFactory.create(
|
||||||
|
getComputerID( stack ), getLabel( stack ),
|
||||||
|
getColour( stack ), family,
|
||||||
|
getUpgrade( stack, TurtleSide.Left ), getUpgrade( stack, TurtleSide.Right ),
|
||||||
|
getFuelLevel( stack ), getOverlay( stack )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack setColour( ItemStack stack, int colour )
|
public ItemStack setColour( ItemStack stack, int colour )
|
||||||
{
|
{
|
||||||
|
@ -7,82 +7,41 @@
|
|||||||
package dan200.computercraft.shared.turtle.recipes;
|
package dan200.computercraft.shared.turtle.recipes;
|
||||||
|
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.google.gson.JsonSyntaxException;
|
|
||||||
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import dan200.computercraft.shared.computer.items.IComputerItem;
|
import dan200.computercraft.shared.computer.items.IComputerItem;
|
||||||
|
import dan200.computercraft.shared.computer.recipe.ComputerConvertRecipe;
|
||||||
import dan200.computercraft.shared.turtle.items.TurtleItemFactory;
|
import dan200.computercraft.shared.turtle.items.TurtleItemFactory;
|
||||||
import dan200.computercraft.shared.util.RecipeUtil;
|
import dan200.computercraft.shared.util.RecipeUtil;
|
||||||
import net.minecraft.inventory.InventoryCrafting;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.crafting.IRecipe;
|
import net.minecraft.item.crafting.IRecipe;
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
|
||||||
import net.minecraft.item.crafting.ShapedRecipes;
|
|
||||||
import net.minecraft.util.JsonUtils;
|
import net.minecraft.util.JsonUtils;
|
||||||
import net.minecraft.util.NonNullList;
|
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.common.crafting.CraftingHelper;
|
import net.minecraftforge.common.crafting.CraftingHelper;
|
||||||
import net.minecraftforge.common.crafting.IRecipeFactory;
|
import net.minecraftforge.common.crafting.IRecipeFactory;
|
||||||
import net.minecraftforge.common.crafting.JsonContext;
|
import net.minecraftforge.common.crafting.JsonContext;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
public class TurtleRecipe extends ShapedRecipes
|
public class TurtleRecipe extends ComputerConvertRecipe
|
||||||
{
|
{
|
||||||
private final NonNullList<Ingredient> m_recipe;
|
private final ComputerFamily family;
|
||||||
private final ComputerFamily m_family;
|
|
||||||
|
|
||||||
public TurtleRecipe( String group, int width, int height, NonNullList<Ingredient> recipe, ComputerFamily family )
|
public TurtleRecipe( String group, @Nonnull CraftingHelper.ShapedPrimer primer, ComputerFamily family )
|
||||||
{
|
{
|
||||||
super( group, width, height, recipe, TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ) );
|
super( group, primer, TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ) );
|
||||||
m_recipe = recipe;
|
this.family = family;
|
||||||
m_family = family;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches( @Nonnull InventoryCrafting _inventory, @Nonnull World world )
|
|
||||||
{
|
|
||||||
return !getCraftingResult( _inventory ).isEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getCraftingResult( @Nonnull InventoryCrafting inventory )
|
protected ItemStack convert( @Nonnull ItemStack stack )
|
||||||
{
|
{
|
||||||
// See if we match the recipe, and extract the input computercraft ID
|
IComputerItem item = (IComputerItem) stack.getItem();
|
||||||
int computerID = -1;
|
int computerID = item.getComputerID( stack );
|
||||||
String label = null;
|
String label = item.getLabel( stack );
|
||||||
for( int y = 0; y < 3; ++y )
|
|
||||||
{
|
|
||||||
for( int x = 0; x < 3; ++x )
|
|
||||||
{
|
|
||||||
ItemStack item = inventory.getStackInRowAndColumn( x, y );
|
|
||||||
Ingredient target = m_recipe.get( x + y * 3 );
|
|
||||||
|
|
||||||
if( item.getItem() instanceof IComputerItem )
|
if( family == ComputerFamily.Beginners ) computerID = -1;
|
||||||
{
|
|
||||||
IComputerItem itemComputer = (IComputerItem) item.getItem();
|
|
||||||
if( itemComputer.getFamily( item ) != m_family ) return ItemStack.EMPTY;
|
|
||||||
|
|
||||||
computerID = itemComputer.getComputerID( item );
|
return TurtleItemFactory.create( computerID, label, -1, family, null, null, 0, null );
|
||||||
label = itemComputer.getLabel( item );
|
|
||||||
}
|
|
||||||
else if( !target.apply( item ) )
|
|
||||||
{
|
|
||||||
return ItemStack.EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build a turtle with the same ID the computer had
|
|
||||||
// Construct the new stack
|
|
||||||
if( m_family != ComputerFamily.Beginners )
|
|
||||||
{
|
|
||||||
return TurtleItemFactory.create( computerID, label, -1, m_family, null, null, 0, null );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return TurtleItemFactory.create( -1, label, -1, m_family, null, null, 0, null );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Factory implements IRecipeFactory
|
public static class Factory implements IRecipeFactory
|
||||||
@ -91,20 +50,10 @@ public class TurtleRecipe extends ShapedRecipes
|
|||||||
public IRecipe parse( JsonContext context, JsonObject json )
|
public IRecipe parse( JsonContext context, JsonObject json )
|
||||||
{
|
{
|
||||||
String group = JsonUtils.getString( json, "group", "" );
|
String group = JsonUtils.getString( json, "group", "" );
|
||||||
|
ComputerFamily family = RecipeUtil.getFamily( json, "family" );
|
||||||
String familyName = JsonUtils.getString( json, "family" );
|
|
||||||
ComputerFamily family;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
family = ComputerFamily.valueOf( familyName );
|
|
||||||
}
|
|
||||||
catch( IllegalArgumentException e )
|
|
||||||
{
|
|
||||||
throw new JsonSyntaxException( "Unknown computer family '" + familyName + "'" );
|
|
||||||
}
|
|
||||||
|
|
||||||
CraftingHelper.ShapedPrimer primer = RecipeUtil.getPrimer( context, json );
|
CraftingHelper.ShapedPrimer primer = RecipeUtil.getPrimer( context, json );
|
||||||
return new TurtleRecipe( group, primer.width, primer.height, primer.input, family );
|
|
||||||
|
return new TurtleRecipe( group, primer, family );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ package dan200.computercraft.shared.util;
|
|||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.gson.*;
|
import com.google.gson.*;
|
||||||
|
import dan200.computercraft.shared.computer.core.ComputerFamily;
|
||||||
import net.minecraft.item.crafting.Ingredient;
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
import net.minecraft.util.JsonUtils;
|
import net.minecraft.util.JsonUtils;
|
||||||
import net.minecraft.util.NonNullList;
|
import net.minecraft.util.NonNullList;
|
||||||
@ -102,4 +103,17 @@ public class RecipeUtil
|
|||||||
|
|
||||||
return ings;
|
return ings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ComputerFamily getFamily( JsonObject json, String name )
|
||||||
|
{
|
||||||
|
String familyName = JsonUtils.getString( json, name );
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return ComputerFamily.valueOf( familyName );
|
||||||
|
}
|
||||||
|
catch( IllegalArgumentException e )
|
||||||
|
{
|
||||||
|
throw new JsonSyntaxException( "Unknown computer family '" + familyName + "' for field " + name );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
"recipes" : {
|
"recipes" : {
|
||||||
"impostor_shaped" : "dan200.computercraft.shared.util.ImpostorRecipe$Factory",
|
"impostor_shaped" : "dan200.computercraft.shared.util.ImpostorRecipe$Factory",
|
||||||
"impostor_shapeless" : "dan200.computercraft.shared.util.ImpostorShapelessRecipe$Factory",
|
"impostor_shapeless" : "dan200.computercraft.shared.util.ImpostorShapelessRecipe$Factory",
|
||||||
"turtle" : "dan200.computercraft.shared.turtle.recipes.TurtleRecipe$Factory"
|
"turtle" : "dan200.computercraft.shared.turtle.recipes.TurtleRecipe$Factory",
|
||||||
|
"computer_upgrade" : "dan200.computercraft.shared.computer.recipe.ComputerFamilyRecipe$Factory"
|
||||||
|
},
|
||||||
|
"ingredients": {
|
||||||
|
"computer": "dan200.computercraft.shared.computer.recipe.ComputerIngredient$Factory"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"type": "computercraft:computer_upgrade",
|
||||||
|
"pattern": [
|
||||||
|
"###",
|
||||||
|
"#C#",
|
||||||
|
"# #"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"#": { "type": "forge:ore_dict", "ore": "ingotGold" },
|
||||||
|
"C": { "type": "computercraft:computer", "item": "computercraft:computer", "family": "Normal" }
|
||||||
|
},
|
||||||
|
"family": "Advanced",
|
||||||
|
"result": { "item": "computercraft:computer", "data": 16384 }
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"type": "computercraft:computer_upgrade",
|
||||||
|
"pattern": [
|
||||||
|
"###",
|
||||||
|
"#C#",
|
||||||
|
"# #"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"#": { "type": "forge:ore_dict", "ore": "ingotGold" },
|
||||||
|
"C": { "item": "computercraft:pocket_computer", "data": 0 }
|
||||||
|
},
|
||||||
|
"family": "Advanced",
|
||||||
|
"result": { "item": "computercraft:pocket_computer", "data": 1 }
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"key": {
|
"key": {
|
||||||
"#": { "type": "forge:ore_dict", "ore": "ingotGold" },
|
"#": { "type": "forge:ore_dict", "ore": "ingotGold" },
|
||||||
"C": { "item": "computercraft:computer", "data": 16384 },
|
"C": { "type": "computercraft:computer", "item": "computercraft:computer", "data": 16384, "family": "Advanced" },
|
||||||
"I": { "type": "forge:ore_dict", "ore": "chestWood" }
|
"I": { "type": "forge:ore_dict", "ore": "chestWood" }
|
||||||
},
|
},
|
||||||
"family": "Advanced"
|
"family": "Advanced"
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"type": "computercraft:computer_upgrade",
|
||||||
|
"pattern": [
|
||||||
|
"###",
|
||||||
|
"#C#",
|
||||||
|
" B "
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"#": { "type": "forge:ore_dict", "ore": "ingotGold" },
|
||||||
|
"B": { "type": "forge:ore_dict", "ore": "blockGold" },
|
||||||
|
"C": [
|
||||||
|
{ "type": "computercraft:computer", "item": "computercraft:turtle", "family": "Normal" },
|
||||||
|
{ "item": "computercraft:turtle_expanded", "data": 0 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"family": "Advanced",
|
||||||
|
"result": { "item": "computercraft:turtle_advanced", "data": 0 }
|
||||||
|
}
|
@ -7,7 +7,7 @@
|
|||||||
],
|
],
|
||||||
"key": {
|
"key": {
|
||||||
"#": { "type": "forge:ore_dict", "ore": "ingotIron" },
|
"#": { "type": "forge:ore_dict", "ore": "ingotIron" },
|
||||||
"C": { "item": "computercraft:computer", "data": 0 },
|
"C": { "type": "computercraft:computer", "item": "computercraft:computer", "family": "Normal" },
|
||||||
"I": { "type": "forge:ore_dict", "ore": "chestWood" }
|
"I": { "type": "forge:ore_dict", "ore": "chestWood" }
|
||||||
},
|
},
|
||||||
"family": "Normal"
|
"family": "Normal"
|
||||||
|
Loading…
Reference in New Issue
Block a user