Refactored crafting patterns (#4458)

* Deduplicate crafting patterns internals

This should save a bit memory for duplicate patterns as well as speed up
loading new patterns on reloading chunks.

* Encode recipe id in pattern
* Use the recipe id directly for looking it up
* Slightly refactored how patterns encode whether they are crafting patterns or not.
* Renamed PatternHelper.
* Added APIs to encode patterns. (#4463)
* Removed ICraftingPatternItem.
* Renamed isCrafting to isCraftable

Co-authored-by: shartte <shartte@users.noreply.github.com>
This commit is contained in:
yueh
2020-07-12 16:21:30 +02:00
committed by GitHub
parent 06735f5c39
commit 9bb23bcac8
19 changed files with 551 additions and 243 deletions
@@ -40,7 +40,7 @@ import net.minecraftforge.fml.hooks.BasicEventHooks;
import appeng.api.config.Actionable;
import appeng.api.config.FuzzyMode;
import appeng.api.config.PowerMultiplier;
import appeng.api.implementations.ICraftingPatternItem;
import appeng.api.crafting.ICraftingHelper;
import appeng.api.networking.IGrid;
import appeng.api.networking.IGridHost;
import appeng.api.networking.IGridNode;
@@ -1056,9 +1056,9 @@ public final class CraftingCPUCluster implements IAECluster, ICraftingCPU {
for (int x = 0; x < list.size(); x++) {
final CompoundNBT item = list.getCompound(x);
final IAEItemStack pattern = AEItemStack.fromNBT(item);
if (pattern != null && pattern.getItem() instanceof ICraftingPatternItem) {
final ICraftingPatternItem cpi = (ICraftingPatternItem) pattern.getItem();
final ICraftingPatternDetails details = cpi.getPatternForItem(pattern.createItemStack(),
ICraftingHelper craftingHelper = Api.instance().crafting();
if (craftingHelper.isEncodedPattern(pattern)) {
final ICraftingPatternDetails details = craftingHelper.decodePattern(pattern.createItemStack(),
this.getWorld());
if (details != null) {
final TaskProgress tp = new TaskProgress();