mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-31 13:42:59 +00:00 
			
		
		
		
	Several recipe improvements
- Some performance improvements to JEI recipe resolver
   - Use a shared map for upgrade items, meaning we only need one map
     lookup.
   - Cache the basic upgrade recipes.
 - Use the MC version within project rather than version name.
			
			
This commit is contained in:
		
							
								
								
									
										52
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								build.gradle
									
									
									
									
									
								
							| @@ -25,39 +25,37 @@ apply plugin: 'org.ajoberstar.grgit' | |||||||
| apply plugin: 'maven-publish' | apply plugin: 'maven-publish' | ||||||
| apply plugin: 'maven' | apply plugin: 'maven' | ||||||
|  |  | ||||||
| def mc_version = "1.12.2" | version = mod_version | ||||||
| def main_version = "1.81.1" |  | ||||||
| version = "${mc_version}-${main_version}" |  | ||||||
|  |  | ||||||
| group = "org.squiddev" | group = "org.squiddev" | ||||||
| archivesBaseName = "cc-tweaked" | archivesBaseName = "cc-tweaked-${mc_version}" | ||||||
|  |  | ||||||
| minecraft { | minecraft { | ||||||
|     version = "${mc_version}-14.23.4.2749" |     version = "${mc_version}-${forge_version}" | ||||||
|     runDir = "run" |     runDir = "run" | ||||||
|     replace '${version}', main_version |     replace '${version}', mod_version | ||||||
|  |  | ||||||
|     // the mappings can be changed at any time, and must be in the following format. |     mappings = mappings_version | ||||||
|     // snapshot_YYYYMMDD   snapshot are built nightly. |     makeObfSourceJar = false | ||||||
|     // stable_#            stables are built at the discretion of the MCP team. |  | ||||||
|     // Use non-default mappings at your own risk. they may not allways work. |  | ||||||
|     // simply re-run your setup task after changing the mappings to update your workspace. |  | ||||||
|     mappings = "snapshot_20180724" |  | ||||||
|     // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. |  | ||||||
| } | } | ||||||
|  |  | ||||||
| repositories { | repositories { | ||||||
|     maven { |     maven { | ||||||
|         name = "JEI" |         name "JEI" | ||||||
|         url  = "http://dvs1.progwml6.com/files/maven" |         url "http://dvs1.progwml6.com/files/maven" | ||||||
|     } |     } | ||||||
|     maven { |     maven { | ||||||
|         name = "squiddev" |         name "SquidDev" | ||||||
|         url = "https://squiddev.cc/maven" |         url "https://squiddev.cc/maven" | ||||||
|  |     } | ||||||
|  |     ivy { | ||||||
|  |         name "Charset" | ||||||
|  |         artifactPattern "https://asie.pl/files/mods/Charset/LibOnly/[module]-[revision](-[classifier]).[ext]" | ||||||
|  |     } | ||||||
|  |     maven { | ||||||
|  |         name "Amadornes" | ||||||
|  |         url "http://maven.amadornes.com/" | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ivy { artifactPattern "https://asie.pl/files/mods/Charset/LibOnly/[module]-[revision](-[classifier]).[ext]" } |  | ||||||
|     maven { url "http://maven.amadornes.com/" } |  | ||||||
| } | } | ||||||
|  |  | ||||||
| configurations { | configurations { | ||||||
| @@ -152,7 +150,7 @@ task proguardMove(dependsOn: proguard) { | |||||||
| reobfJar.dependsOn proguardMove | reobfJar.dependsOn proguardMove | ||||||
|  |  | ||||||
| processResources { | processResources { | ||||||
|     inputs.property "version", main_version |     inputs.property "version", mod_version | ||||||
|     inputs.property "mcversion", mc_version |     inputs.property "mcversion", mc_version | ||||||
|  |  | ||||||
|     def hash = 'none' |     def hash = 'none' | ||||||
| @@ -174,7 +172,7 @@ processResources { | |||||||
|         include 'mcmod.info' |         include 'mcmod.info' | ||||||
|         include 'assets/computercraft/lua/rom/help/credits.txt' |         include 'assets/computercraft/lua/rom/help/credits.txt' | ||||||
|  |  | ||||||
|         expand 'version': main_version, |         expand 'version': mod_version, | ||||||
|                'mcversion': mc_version, |                'mcversion': mc_version, | ||||||
|                'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n') |                'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n') | ||||||
|     } |     } | ||||||
| @@ -260,22 +258,22 @@ uploadArchives { | |||||||
|                 pom.project { |                 pom.project { | ||||||
|                     name 'CC: Tweaked' |                     name 'CC: Tweaked' | ||||||
|                     packaging 'jar' |                     packaging 'jar' | ||||||
|                     description 'A fork of ComputerCraft which aims to provide earlier access to the more experimental and in-development features of the mod.' |                     description 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.' | ||||||
|                     url 'https://github.com/SquidDev-CC/CC-Tweaked' |                     url 'https://github.com/SquidDev-CC/CC-Tweaked' | ||||||
|  |  | ||||||
|                     scm { |                     scm { | ||||||
|                         url 'https://github.com/dan200/ComputerCraft.git' |                         url 'https://github.com/SquidDev-CC/CC-Tweaked.git' | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     issueManagement { |                     issueManagement { | ||||||
|                         system 'github' |                         system 'github' | ||||||
|                         url 'https://github.com/dan200/ComputerCraft/issues' |                         url 'https://github.com/SquidDev-CC/CC-Tweaked/issues' | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     licenses { |                     licenses { | ||||||
|                         license { |                         license { | ||||||
|                             name 'ComputerCraft Public License, Version 1.0' |                             name 'ComputerCraft Public License, Version 1.0' | ||||||
|                             url 'https://github.com/dan200/ComputerCraft/blob/master/LICENSE' |                             url 'https://github.com/SquidDev-CC/CC-Tweaked/blob/master/LICENSE' | ||||||
|                             distribution 'repo' |                             distribution 'repo' | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| @@ -298,7 +296,7 @@ test { | |||||||
|  |  | ||||||
| gradle.projectsEvaluated { | gradle.projectsEvaluated { | ||||||
|     tasks.withType(JavaCompile) { |     tasks.withType(JavaCompile) { | ||||||
|         options.compilerArgs << "-Xlint" |         options.compilerArgs << "-Xlint" << "-Xlint:-processing" << "-Werror" | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								gradle.properties
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | # Mod properties | ||||||
|  | mod_version=1.81.1 | ||||||
|  |  | ||||||
|  | # Minecraft properties | ||||||
|  | mc_version=1.12.2 | ||||||
|  | forge_version=14.23.4.2749 | ||||||
|  | mappings_version=snapshot_20180724 | ||||||
| @@ -1 +1 @@ | |||||||
| rootProject.name = 'cc-tweaked' | rootProject.name = "cc-tweaked-${mc_version}" | ||||||
|   | |||||||
| @@ -25,7 +25,6 @@ import net.minecraft.item.Item; | |||||||
| import net.minecraft.item.ItemStack; | import net.minecraft.item.ItemStack; | ||||||
|  |  | ||||||
| import javax.annotation.Nonnull; | import javax.annotation.Nonnull; | ||||||
| import javax.annotation.Nullable; |  | ||||||
| import java.util.*; | import java.util.*; | ||||||
|  |  | ||||||
| import static java.util.Arrays.asList; | import static java.util.Arrays.asList; | ||||||
| @@ -34,8 +33,9 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
| { | { | ||||||
|     static final ComputerFamily[] MAIN_FAMILIES = new ComputerFamily[] { ComputerFamily.Normal, ComputerFamily.Advanced }; |     static final ComputerFamily[] MAIN_FAMILIES = new ComputerFamily[] { ComputerFamily.Normal, ComputerFamily.Advanced }; | ||||||
|  |  | ||||||
|     private final Map<Item, List<ITurtleUpgrade>> turtleUpgrades = new HashMap<>(); |     private final Map<Item, List<UpgradeInfo>> upgradeItemLookup = new HashMap<>(); | ||||||
|     private final Map<Item, List<IPocketUpgrade>> pocketUpgrades = new HashMap<>(); |     private final List<UpgradeInfo> pocketUpgrades = new ArrayList<>(); | ||||||
|  |     private final List<UpgradeInfo> turtleUpgrades = new ArrayList<>(); | ||||||
|     private boolean initialised = false; |     private boolean initialised = false; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -50,51 +50,38 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|         { |         { | ||||||
|             ItemStack stack = upgrade.getCraftingItem(); |             ItemStack stack = upgrade.getCraftingItem(); | ||||||
|             if( stack.isEmpty() ) continue; |             if( stack.isEmpty() ) continue; | ||||||
|             turtleUpgrades.computeIfAbsent( stack.getItem(), k -> new ArrayList<>( 1 ) ).add( upgrade ); |  | ||||||
|  |             UpgradeInfo info = new UpgradeInfo( stack, upgrade ); | ||||||
|  |             upgradeItemLookup.computeIfAbsent( stack.getItem(), k -> new ArrayList<>( 1 ) ).add( info ); | ||||||
|  |             turtleUpgrades.add( info ); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         for( IPocketUpgrade upgrade : PocketUpgrades.getUpgrades() ) |         for( IPocketUpgrade upgrade : PocketUpgrades.getUpgrades() ) | ||||||
|         { |         { | ||||||
|             ItemStack stack = upgrade.getCraftingItem(); |             ItemStack stack = upgrade.getCraftingItem(); | ||||||
|             if( stack.isEmpty() ) continue; |             if( stack.isEmpty() ) continue; | ||||||
|             pocketUpgrades.computeIfAbsent( stack.getItem(), k -> new ArrayList<>( 1 ) ).add( upgrade ); |  | ||||||
|  |             UpgradeInfo info = new UpgradeInfo( stack, upgrade ); | ||||||
|  |             upgradeItemLookup.computeIfAbsent( stack.getItem(), k -> new ArrayList<>( 1 ) ).add( info ); | ||||||
|  |             pocketUpgrades.add( info ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Nullable |     private boolean hasUpgrade( @Nonnull ItemStack stack ) | ||||||
|     private ITurtleUpgrade getTurtleUpgrade( @Nonnull ItemStack stack ) |  | ||||||
|     { |     { | ||||||
|         if( stack.isEmpty() ) return null; |         if( stack.isEmpty() ) return false; | ||||||
|  |  | ||||||
|         setupCache(); |         setupCache(); | ||||||
|         List<ITurtleUpgrade> upgrades = turtleUpgrades.get( stack.getItem() ); |         List<UpgradeInfo> upgrades = upgradeItemLookup.get( stack.getItem() ); | ||||||
|         if( upgrades == null ) return null; |         if( upgrades == null ) return false; | ||||||
|  |  | ||||||
|         for( ITurtleUpgrade upgrade : upgrades ) |         for( UpgradeInfo upgrade : upgrades ) | ||||||
|         { |         { | ||||||
|             ItemStack craftingStack = upgrade.getCraftingItem(); |             ItemStack craftingStack = upgrade.stack; | ||||||
|             if( !craftingStack.isEmpty() && InventoryUtil.areItemsSimilar( stack, craftingStack ) ) return upgrade; |             if( !craftingStack.isEmpty() && InventoryUtil.areItemsSimilar( stack, craftingStack ) ) return true; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return null; |         return false; | ||||||
|     } |  | ||||||
|  |  | ||||||
|     @Nullable |  | ||||||
|     private IPocketUpgrade getPocketUpgrade( @Nonnull ItemStack stack ) |  | ||||||
|     { |  | ||||||
|         if( stack.isEmpty() ) return null; |  | ||||||
|  |  | ||||||
|         setupCache(); |  | ||||||
|         List<IPocketUpgrade> upgrades = pocketUpgrades.get( stack.getItem() ); |  | ||||||
|         if( upgrades == null ) return null; |  | ||||||
|  |  | ||||||
|         for( IPocketUpgrade upgrade : upgrades ) |  | ||||||
|         { |  | ||||||
|             ItemStack craftingStack = upgrade.getCraftingItem(); |  | ||||||
|             if( !craftingStack.isEmpty() && InventoryUtil.areItemsSimilar( stack, craftingStack ) ) return upgrade; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         return null; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Nonnull |     @Nonnull | ||||||
| @@ -109,7 +96,7 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|         { |         { | ||||||
|             case INPUT: |             case INPUT: | ||||||
|                 return stack.getItem() instanceof ITurtleItem || stack.getItem() instanceof ItemPocketComputer || |                 return stack.getItem() instanceof ITurtleItem || stack.getItem() instanceof ItemPocketComputer || | ||||||
|                     getTurtleUpgrade( stack ) != null || getPocketUpgrade( stack ) != null |                     hasUpgrade( stack ) | ||||||
|                     ? Collections.singletonList( VanillaRecipeCategoryUid.CRAFTING ) |                     ? Collections.singletonList( VanillaRecipeCategoryUid.CRAFTING ) | ||||||
|                     : Collections.emptyList(); |                     : Collections.emptyList(); | ||||||
|             case OUTPUT: |             case OUTPUT: | ||||||
| @@ -152,6 +139,8 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|     @Nonnull |     @Nonnull | ||||||
|     private List<Shaped> findRecipesWithInput( @Nonnull ItemStack stack ) |     private List<Shaped> findRecipesWithInput( @Nonnull ItemStack stack ) | ||||||
|     { |     { | ||||||
|  |         setupCache(); | ||||||
|  |  | ||||||
|         if( stack.getItem() instanceof ITurtleItem ) |         if( stack.getItem() instanceof ITurtleItem ) | ||||||
|         { |         { | ||||||
|             // Suggest possible upgrades which can be applied to this turtle |             // Suggest possible upgrades which can be applied to this turtle | ||||||
| @@ -161,16 +150,17 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|             if( left != null && right != null ) return Collections.emptyList(); |             if( left != null && right != null ) return Collections.emptyList(); | ||||||
|  |  | ||||||
|             List<Shaped> recipes = new ArrayList<>(); |             List<Shaped> recipes = new ArrayList<>(); | ||||||
|             for( ITurtleUpgrade upgrade : TurtleUpgrades.getUpgrades() ) |             for( UpgradeInfo upgrade : turtleUpgrades ) | ||||||
|             { |             { | ||||||
|  |                 // The turtle is facing towards us, so upgrades on the left are actually crafted on the right. | ||||||
|                 if( left == null ) |                 if( left == null ) | ||||||
|                 { |                 { | ||||||
|                     recipes.add( horizontal( asList( stack, upgrade.getCraftingItem() ), turtleWith( stack, upgrade, right ) ) ); |                     recipes.add( horizontal( asList( stack, upgrade.stack ), turtleWith( stack, upgrade.turtle, right ) ) ); | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 if( right == null ) |                 if( right == null ) | ||||||
|                 { |                 { | ||||||
|                     recipes.add( horizontal( asList( stack, upgrade.getCraftingItem() ), turtleWith( stack, left, upgrade ) ) ); |                     recipes.add( horizontal( asList( upgrade.stack, stack ), turtleWith( stack, left, upgrade.turtle ) ) ); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
| @@ -184,40 +174,44 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|             if( back != null ) return Collections.emptyList(); |             if( back != null ) return Collections.emptyList(); | ||||||
|  |  | ||||||
|             List<Shaped> recipes = new ArrayList<>(); |             List<Shaped> recipes = new ArrayList<>(); | ||||||
|             for( IPocketUpgrade upgrade : PocketUpgrades.getUpgrades() ) |             for( UpgradeInfo upgrade : pocketUpgrades ) | ||||||
|             { |             { | ||||||
|                 recipes.add( vertical( asList( stack, upgrade.getCraftingItem() ), pocketWith( stack, upgrade ) ) ); |                 recipes.add( vertical( asList( stack, upgrade.stack ), pocketWith( stack, upgrade.pocket ) ) ); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return recipes; |             return recipes; | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             // Find places this may be used as an upgrade. |             List<UpgradeInfo> upgrades = upgradeItemLookup.get( stack.getItem() ); | ||||||
|             ITurtleUpgrade turtle = getTurtleUpgrade( stack ); |             if( upgrades == null ) return Collections.emptyList(); | ||||||
|             IPocketUpgrade pocket = getPocketUpgrade( stack ); |  | ||||||
|             if( turtle == null && pocket == null ) return Collections.emptyList(); |  | ||||||
|  |  | ||||||
|             List<Shaped> recipes = new ArrayList<>( 1 ); |             List<Shaped> recipes = null; | ||||||
|             for( ComputerFamily family : MAIN_FAMILIES ) |             boolean multiple = false; | ||||||
|  |             for( UpgradeInfo upgrade : upgrades ) | ||||||
|             { |             { | ||||||
|                 if( turtle != null && TurtleUpgrades.suitableForFamily( family, turtle ) ) |                 ItemStack craftingStack = upgrade.stack; | ||||||
|  |                 if( craftingStack.isEmpty() || !InventoryUtil.areItemsSimilar( stack, craftingStack ) ) | ||||||
|                 { |                 { | ||||||
|                     recipes.add( horizontal( |                     continue; | ||||||
|                         asList( stack, TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ) ), |  | ||||||
|                         TurtleItemFactory.create( -1, null, -1, family, turtle, null, 0, null ) |  | ||||||
|                     ) ); |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 if( pocket != null ) |                 if( recipes == null ) | ||||||
|                 { |                 { | ||||||
|                     recipes.add( vertical( |                     recipes = upgrade.getRecipes(); | ||||||
|                         asList( stack, PocketComputerItemFactory.create( -1, null, -1, family, null ) ), |                 } | ||||||
|                         PocketComputerItemFactory.create( -1, null, -1, family, pocket ) |                 else | ||||||
|                     ) ); |                 { | ||||||
|  |                     if( !multiple ) | ||||||
|  |                     { | ||||||
|  |                         multiple = true; | ||||||
|  |                         recipes = new ArrayList<>( recipes ); | ||||||
|  |                     } | ||||||
|  |                     recipes.addAll( upgrade.getRecipes() ); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             return recipes; |  | ||||||
|  |             return recipes == null ? Collections.emptyList() : recipes; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -233,14 +227,15 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|             ITurtleUpgrade left = item.getUpgrade( stack, TurtleSide.Left ); |             ITurtleUpgrade left = item.getUpgrade( stack, TurtleSide.Left ); | ||||||
|             ITurtleUpgrade right = item.getUpgrade( stack, TurtleSide.Right ); |             ITurtleUpgrade right = item.getUpgrade( stack, TurtleSide.Right ); | ||||||
|  |  | ||||||
|  |             // The turtle is facing towards us, so upgrades on the left are actually crafted on the right. | ||||||
|             if( left != null ) |             if( left != null ) | ||||||
|             { |             { | ||||||
|                 recipes.add( horizontal( asList( left.getCraftingItem(), turtleWith( stack, null, right ) ), stack ) ); |                 recipes.add( horizontal( asList( turtleWith( stack, null, right ), left.getCraftingItem() ), stack ) ); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if( right != null ) |             if( right != null ) | ||||||
|             { |             { | ||||||
|                 recipes.add( horizontal( asList( turtleWith( stack, left, null ), right.getCraftingItem() ), stack ) ); |                 recipes.add( horizontal( asList( right.getCraftingItem(), turtleWith( stack, left, null ) ), stack ) ); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return cast( recipes ); |             return cast( recipes ); | ||||||
| @@ -298,7 +293,7 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|         return new Shaped( input.size(), 1, input, result ); |         return new Shaped( input.size(), 1, input, result ); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     static class Shaped implements IShapedCraftingRecipeWrapper |     private static class Shaped implements IShapedCraftingRecipeWrapper | ||||||
|     { |     { | ||||||
|         private final int width; |         private final int width; | ||||||
|         private final int height; |         private final int height; | ||||||
| @@ -332,4 +327,55 @@ class RecipeResolver implements IRecipeRegistryPlugin | |||||||
|             ingredients.setOutput( VanillaTypes.ITEM, output ); |             ingredients.setOutput( VanillaTypes.ITEM, output ); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private static class UpgradeInfo | ||||||
|  |     { | ||||||
|  |         final ItemStack stack; | ||||||
|  |         final ITurtleUpgrade turtle; | ||||||
|  |         final IPocketUpgrade pocket; | ||||||
|  |         ArrayList<Shaped> recipes; | ||||||
|  |  | ||||||
|  |         UpgradeInfo( ItemStack stack, ITurtleUpgrade turtle ) | ||||||
|  |         { | ||||||
|  |             this.stack = stack; | ||||||
|  |             this.turtle = turtle; | ||||||
|  |             this.pocket = null; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         UpgradeInfo( ItemStack stack, IPocketUpgrade pocket ) | ||||||
|  |         { | ||||||
|  |             this.stack = stack; | ||||||
|  |             this.turtle = null; | ||||||
|  |             this.pocket = pocket; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         List<Shaped> getRecipes() | ||||||
|  |         { | ||||||
|  |             ArrayList<Shaped> recipes = this.recipes; | ||||||
|  |             if( recipes != null ) return recipes; | ||||||
|  |  | ||||||
|  |             recipes = this.recipes = new ArrayList<>( 4 ); | ||||||
|  |             for( ComputerFamily family : MAIN_FAMILIES ) | ||||||
|  |             { | ||||||
|  |                 if( turtle != null && TurtleUpgrades.suitableForFamily( family, turtle ) ) | ||||||
|  |                 { | ||||||
|  |                     recipes.add( horizontal( | ||||||
|  |                         asList( stack, TurtleItemFactory.create( -1, null, -1, family, null, null, 0, null ) ), | ||||||
|  |                         TurtleItemFactory.create( -1, null, -1, family, null, turtle, 0, null ) | ||||||
|  |                     ) ); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 if( pocket != null ) | ||||||
|  |                 { | ||||||
|  |                     recipes.add( vertical( | ||||||
|  |                         asList( stack, PocketComputerItemFactory.create( -1, null, -1, family, null ) ), | ||||||
|  |                         PocketComputerItemFactory.create( -1, null, -1, family, pocket ) | ||||||
|  |                     ) ); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             recipes.trimToSize(); | ||||||
|  |             return recipes; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -42,6 +42,7 @@ public class PocketServerComputer extends ServerComputer implements IPocketAcces | |||||||
|  |  | ||||||
|     @Nullable |     @Nullable | ||||||
|     @Override |     @Override | ||||||
|  |     @Deprecated | ||||||
|     public Entity getEntity() |     public Entity getEntity() | ||||||
|     { |     { | ||||||
|         return m_entity; |         return m_entity; | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "computercraft:advanced_modem" }, |         "#": { "item": "computercraft:advanced_modem" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "computercraft:peripheral", "data": 5 }, |         "#": { "item": "computercraft:peripheral", "data": 5 }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "computercraft:peripheral", "data": 1 }, |         "#": { "item": "computercraft:peripheral", "data": 1 }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:crafting_table" }, |         "#": { "item": "minecraft:crafting_table" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_axe" }, |         "#": { "item": "minecraft:diamond_axe" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_hoe" }, |         "#": { "item": "minecraft:diamond_hoe" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_pickaxe" }, |         "#": { "item": "minecraft:diamond_pickaxe" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_shovel" }, |         "#": { "item": "minecraft:diamond_shovel" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_advanced", |     "group": "computercraft:upgrade_turtle_advanced", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_sword" }, |         "#": { "item": "minecraft:diamond_sword" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "computercraft:advanced_modem" }, |         "#": { "item": "computercraft:advanced_modem" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "computercraft:peripheral", "data": 5 }, |         "#": { "item": "computercraft:peripheral", "data": 5 }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "computercraft:peripheral", "data": 1 }, |         "#": { "item": "computercraft:peripheral", "data": 1 }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:crafting_table" }, |         "#": { "item": "minecraft:crafting_table" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_axe" }, |         "#": { "item": "minecraft:diamond_axe" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_hoe" }, |         "#": { "item": "minecraft:diamond_hoe" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_pickaxe" }, |         "#": { "item": "minecraft:diamond_pickaxe" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_shovel" }, |         "#": { "item": "minecraft:diamond_shovel" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_normal", |     "group": "computercraft:upgrade_turtle_normal", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": "minecraft:diamond_sword" }, |         "#": { "item": "minecraft:diamond_sword" }, | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
|     "type": "computercraft:impostor_shaped", |     "type": "computercraft:impostor_shaped", | ||||||
|     "group": "computercraft:upgrade_turtle_${turtle_family}", |     "group": "computercraft:upgrade_turtle_${turtle_family}", | ||||||
|     "pattern": [ |     "pattern": [ | ||||||
|         "T#" |         "#T" | ||||||
|     ], |     ], | ||||||
|     "key": { |     "key": { | ||||||
|         "#": { "item": ${upgrade_item} }, |         "#": { "item": ${upgrade_item} }, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 SquidDev
					SquidDev