mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Carbon copy
- Written Filters, Clipboards and Schedules can now be copied onto unwritten ones in the crafting table
This commit is contained in:
parent
688a07b314
commit
8003bfac36
8 changed files with 120 additions and 5 deletions
|
@ -1,4 +1,4 @@
|
|||
// 1.20.1 2025-02-07T11:08:37.2861078 Create's Standard Recipes
|
||||
// 1.20.1 2025-02-07T11:36:36.6037564 Create's Standard Recipes
|
||||
a8cc4af26f6c7c45a9eef12e92af1452fe042454 data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank.json
|
||||
2c2639c7b307ee7c7a4e97e5efebf496788998ad data/create/advancements/recipes/combat/crafting/appliances/netherite_backtank_from_netherite.json
|
||||
81dcf0cb1aa99e39bc7d1a386e07cad4cee7d8b9 data/create/advancements/recipes/combat/crafting/appliances/netherite_diving_boots.json
|
||||
|
@ -336,6 +336,7 @@ bbf63119e3ee54afd49fe2ccfe2c06baaa9f6f41 data/create/recipes/crafting/appliances
|
|||
d0bad974476c54315e4b656c67dbf6165d183bbc data/create/recipes/crafting/appliances/tree_fertilizer.json
|
||||
5b499ce4eee741d17813f96274333abfa2de99a9 data/create/recipes/crafting/curiosities/brown_toolbox.json
|
||||
05eb422734dcdd4c499437ae564e73af5c2e4673 data/create/recipes/crafting/curiosities/cake.json
|
||||
b961ce60986ebfed1b0cc0f7053d6e558de13e86 data/create/recipes/crafting/curiosities/item_copying.json
|
||||
c3444000827e1f9553818dedec6d3dba4af9dfcd data/create/recipes/crafting/curiosities/minecart_coupling.json
|
||||
1323b7c6d30d4e343e010902b7ebbfa2590a4cf5 data/create/recipes/crafting/curiosities/peculiar_bell.json
|
||||
e54646485af774e490409e9912a3799f7ac44e01 data/create/recipes/crafting/curiosities/toolbox_dyeing.json
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"type": "create:item_copying",
|
||||
"category": "misc"
|
||||
}
|
|
@ -27,6 +27,7 @@ import com.simibubi.create.content.processing.recipe.ProcessingRecipeBuilder.Pro
|
|||
import com.simibubi.create.content.processing.recipe.ProcessingRecipeSerializer;
|
||||
import com.simibubi.create.content.processing.sequenced.SequencedAssemblyRecipeSerializer;
|
||||
import com.simibubi.create.foundation.recipe.IRecipeTypeInfo;
|
||||
import com.simibubi.create.foundation.recipe.ItemCopyingRecipe;
|
||||
|
||||
import net.createmod.catnip.lang.Lang;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
|
@ -64,7 +65,8 @@ public enum AllRecipeTypes implements IRecipeTypeInfo {
|
|||
MECHANICAL_CRAFTING(MechanicalCraftingRecipe.Serializer::new),
|
||||
SEQUENCED_ASSEMBLY(SequencedAssemblyRecipeSerializer::new),
|
||||
|
||||
TOOLBOX_DYEING(() -> new SimpleCraftingRecipeSerializer<>(ToolboxDyeingRecipe::new), () -> RecipeType.CRAFTING, false);
|
||||
TOOLBOX_DYEING(() -> new SimpleCraftingRecipeSerializer<>(ToolboxDyeingRecipe::new), () -> RecipeType.CRAFTING, false),
|
||||
ITEM_COPYING(() -> new SimpleCraftingRecipeSerializer<>(ItemCopyingRecipe::new), () -> RecipeType.CRAFTING, false);
|
||||
|
||||
public static final Predicate<? super Recipe<?>> CAN_BE_AUTOMATED = r -> !r.getId()
|
||||
.getPath()
|
||||
|
|
|
@ -2,6 +2,8 @@ package com.simibubi.create.content.equipment.clipboard;
|
|||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.simibubi.create.foundation.recipe.ItemCopyingRecipe.SupportsItemCopying;
|
||||
|
||||
import net.createmod.catnip.gui.ScreenOpener;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
@ -21,7 +23,7 @@ import net.minecraftforge.api.distmarker.OnlyIn;
|
|||
import net.minecraftforge.fml.DistExecutor;
|
||||
import net.minecraftforge.items.ItemHandlerHelper;
|
||||
|
||||
public class ClipboardBlockItem extends BlockItem {
|
||||
public class ClipboardBlockItem extends BlockItem implements SupportsItemCopying {
|
||||
|
||||
public ClipboardBlockItem(Block pBlock, Properties pProperties) {
|
||||
super(pBlock, pProperties);
|
||||
|
|
|
@ -15,6 +15,7 @@ import com.simibubi.create.content.logistics.box.PackageItem;
|
|||
import com.simibubi.create.content.logistics.filter.AttributeFilterMenu.WhitelistMode;
|
||||
import com.simibubi.create.content.logistics.item.filter.attribute.ItemAttribute;
|
||||
import com.simibubi.create.foundation.item.ItemHelper;
|
||||
import com.simibubi.create.foundation.recipe.ItemCopyingRecipe.SupportsItemCopying;
|
||||
import com.simibubi.create.foundation.utility.CreateLang;
|
||||
|
||||
import net.minecraft.ChatFormatting;
|
||||
|
@ -43,7 +44,7 @@ import net.minecraftforge.items.ItemHandlerHelper;
|
|||
import net.minecraftforge.items.ItemStackHandler;
|
||||
import net.minecraftforge.network.NetworkHooks;
|
||||
|
||||
public class FilterItem extends Item implements MenuProvider {
|
||||
public class FilterItem extends Item implements MenuProvider, SupportsItemCopying {
|
||||
|
||||
private FilterType type;
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import com.simibubi.create.content.trains.entity.CarriageContraptionEntity;
|
|||
import com.simibubi.create.content.trains.entity.Train;
|
||||
import com.simibubi.create.content.trains.schedule.destination.DestinationInstruction;
|
||||
import com.simibubi.create.foundation.advancement.AllAdvancements;
|
||||
import com.simibubi.create.foundation.recipe.ItemCopyingRecipe.SupportsItemCopying;
|
||||
import com.simibubi.create.foundation.utility.CreateLang;
|
||||
|
||||
import net.createmod.catnip.data.Couple;
|
||||
|
@ -36,7 +37,7 @@ import net.minecraftforge.api.distmarker.Dist;
|
|||
import net.minecraftforge.api.distmarker.OnlyIn;
|
||||
import net.minecraftforge.network.NetworkHooks;
|
||||
|
||||
public class ScheduleItem extends Item implements MenuProvider {
|
||||
public class ScheduleItem extends Item implements MenuProvider, SupportsItemCopying {
|
||||
|
||||
public ScheduleItem(Properties pProperties) {
|
||||
super(pProperties);
|
||||
|
|
|
@ -202,6 +202,7 @@ public class StandardRecipeGen extends CreateRecipeProvider {
|
|||
.pattern(" L ")),
|
||||
|
||||
TOOLBOX_DYEING = createSpecial(AllRecipeTypes.TOOLBOX_DYEING::getSerializer, "crafting", "toolbox_dyeing"),
|
||||
ITEM_COPYING = createSpecial(AllRecipeTypes.ITEM_COPYING::getSerializer, "crafting", "item_copying"),
|
||||
|
||||
MINECART_COUPLING = create(AllItems.MINECART_COUPLING).unlockedBy(I::andesiteAlloy)
|
||||
.viaShaped(b -> b.define('E', I.andesiteAlloy())
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
package com.simibubi.create.foundation.recipe;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.simibubi.create.AllRecipeTypes;
|
||||
|
||||
import net.createmod.catnip.data.IntAttached;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.core.RegistryAccess;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.inventory.CraftingContainer;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.CraftingBookCategory;
|
||||
import net.minecraft.world.item.crafting.CustomRecipe;
|
||||
import net.minecraft.world.item.crafting.RecipeSerializer;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
public class ItemCopyingRecipe extends CustomRecipe {
|
||||
|
||||
public static interface SupportsItemCopying {
|
||||
|
||||
public default ItemStack createCopy(ItemStack original, int count) {
|
||||
ItemStack copyWithCount = original.copyWithCount(count);
|
||||
copyWithCount.removeTagKey("Enchantments");
|
||||
return copyWithCount;
|
||||
}
|
||||
|
||||
public default boolean canCopyFromItem(ItemStack item) {
|
||||
return item.hasTag();
|
||||
}
|
||||
|
||||
public default boolean canCopyToItem(ItemStack item) {
|
||||
return !item.hasTag();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ItemCopyingRecipe(ResourceLocation id, CraftingBookCategory category) {
|
||||
super(id, category);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(CraftingContainer inv, Level level) {
|
||||
return copyCheck(inv) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack assemble(CraftingContainer container, RegistryAccess registryAccess) {
|
||||
IntAttached<ItemStack> copyCheck = copyCheck(container);
|
||||
if (copyCheck == null)
|
||||
return ItemStack.EMPTY;
|
||||
|
||||
ItemStack itemToCopy = copyCheck.getValue();
|
||||
if (!(itemToCopy.getItem() instanceof SupportsItemCopying sic))
|
||||
return ItemStack.EMPTY;
|
||||
|
||||
return sic.createCopy(itemToCopy, copyCheck.getFirst() + 1);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private IntAttached<ItemStack> copyCheck(CraftingContainer inv) {
|
||||
ItemStack itemToCopy = ItemStack.EMPTY;
|
||||
int copyTargets = 0;
|
||||
|
||||
for (int j = 0; j < inv.getContainerSize(); ++j) {
|
||||
ItemStack itemInSlot = inv.getItem(j);
|
||||
if (itemInSlot.isEmpty())
|
||||
continue;
|
||||
if (!itemToCopy.isEmpty() && itemToCopy.getItem() != itemInSlot.getItem())
|
||||
return null;
|
||||
if (!(itemInSlot.getItem() instanceof SupportsItemCopying sic))
|
||||
continue;
|
||||
|
||||
if (sic.canCopyFromItem(itemInSlot)) {
|
||||
if (!itemToCopy.isEmpty())
|
||||
return null;
|
||||
itemToCopy = itemInSlot;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sic.canCopyToItem(itemInSlot))
|
||||
copyTargets++;
|
||||
}
|
||||
|
||||
if (itemToCopy.isEmpty() || copyTargets == 0)
|
||||
return null;
|
||||
|
||||
return IntAttached.with(copyTargets, itemToCopy);
|
||||
}
|
||||
|
||||
public NonNullList<ItemStack> getRemainingItems(CraftingContainer inv) {
|
||||
NonNullList<ItemStack> nonnulllist = NonNullList.withSize(inv.getContainerSize(), ItemStack.EMPTY);
|
||||
return nonnulllist;
|
||||
}
|
||||
|
||||
public RecipeSerializer<?> getSerializer() {
|
||||
return AllRecipeTypes.ITEM_COPYING.getSerializer();
|
||||
}
|
||||
|
||||
public boolean canCraftInDimensions(int width, int height) {
|
||||
return width >= 2 && height >= 2;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue