minecraft-src/net/minecraft/world/item/crafting/MapExtendingRecipe.java
2025-07-04 03:15:13 +03:00

69 lines
1.9 KiB
Java

package net.minecraft.world.item.crafting;
import java.util.Map;
import net.minecraft.core.HolderLookup.Provider;
import net.minecraft.core.component.DataComponents;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.MapItem;
import net.minecraft.world.item.component.MapPostProcessing;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.saveddata.maps.MapItemSavedData;
public class MapExtendingRecipe extends ShapedRecipe {
public MapExtendingRecipe(CraftingBookCategory category) {
super(
"",
category,
ShapedRecipePattern.of(Map.of('#', Ingredient.of(Items.PAPER), 'x', Ingredient.of(Items.FILLED_MAP)), "###", "#x#", "###"),
new ItemStack(Items.MAP)
);
}
@Override
public boolean matches(CraftingInput craftingInput, Level level) {
if (!super.matches(craftingInput, level)) {
return false;
} else {
ItemStack itemStack = findFilledMap(craftingInput);
if (itemStack.isEmpty()) {
return false;
} else {
MapItemSavedData mapItemSavedData = MapItem.getSavedData(itemStack, level);
if (mapItemSavedData == null) {
return false;
} else {
return mapItemSavedData.isExplorationMap() ? false : mapItemSavedData.scale < 4;
}
}
}
}
@Override
public ItemStack assemble(CraftingInput craftingInput, Provider provider) {
ItemStack itemStack = findFilledMap(craftingInput).copyWithCount(1);
itemStack.set(DataComponents.MAP_POST_PROCESSING, MapPostProcessing.SCALE);
return itemStack;
}
private static ItemStack findFilledMap(CraftingInput input) {
for (int i = 0; i < input.size(); i++) {
ItemStack itemStack = input.getItem(i);
if (itemStack.has(DataComponents.MAP_ID)) {
return itemStack;
}
}
return ItemStack.EMPTY;
}
@Override
public boolean isSpecial() {
return true;
}
@Override
public RecipeSerializer<MapExtendingRecipe> getSerializer() {
return RecipeSerializer.MAP_EXTENDING;
}
}