74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.item.crafting;
 | |
| 
 | |
| import it.unimi.dsi.fastutil.ints.IntArrayList;
 | |
| import it.unimi.dsi.fastutil.ints.IntList;
 | |
| import java.util.ArrayList;
 | |
| import java.util.List;
 | |
| import java.util.Optional;
 | |
| 
 | |
| public class PlacementInfo {
 | |
| 	public static final int EMPTY_SLOT = -1;
 | |
| 	public static final PlacementInfo NOT_PLACEABLE = new PlacementInfo(List.of(), IntList.of());
 | |
| 	private final List<Ingredient> ingredients;
 | |
| 	private final IntList slotsToIngredientIndex;
 | |
| 
 | |
| 	private PlacementInfo(List<Ingredient> ingredients, IntList slotsToIngredientIndex) {
 | |
| 		this.ingredients = ingredients;
 | |
| 		this.slotsToIngredientIndex = slotsToIngredientIndex;
 | |
| 	}
 | |
| 
 | |
| 	public static PlacementInfo create(Ingredient ingredient) {
 | |
| 		return ingredient.isEmpty() ? NOT_PLACEABLE : new PlacementInfo(List.of(ingredient), IntList.of(0));
 | |
| 	}
 | |
| 
 | |
| 	public static PlacementInfo createFromOptionals(List<Optional<Ingredient>> optionals) {
 | |
| 		int i = optionals.size();
 | |
| 		List<Ingredient> list = new ArrayList(i);
 | |
| 		IntList intList = new IntArrayList(i);
 | |
| 		int j = 0;
 | |
| 
 | |
| 		for (Optional<Ingredient> optional : optionals) {
 | |
| 			if (optional.isPresent()) {
 | |
| 				Ingredient ingredient = (Ingredient)optional.get();
 | |
| 				if (ingredient.isEmpty()) {
 | |
| 					return NOT_PLACEABLE;
 | |
| 				}
 | |
| 
 | |
| 				list.add(ingredient);
 | |
| 				intList.add(j++);
 | |
| 			} else {
 | |
| 				intList.add(-1);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return new PlacementInfo(list, intList);
 | |
| 	}
 | |
| 
 | |
| 	public static PlacementInfo create(List<Ingredient> ingredients) {
 | |
| 		int i = ingredients.size();
 | |
| 		IntList intList = new IntArrayList(i);
 | |
| 
 | |
| 		for (int j = 0; j < i; j++) {
 | |
| 			Ingredient ingredient = (Ingredient)ingredients.get(j);
 | |
| 			if (ingredient.isEmpty()) {
 | |
| 				return NOT_PLACEABLE;
 | |
| 			}
 | |
| 
 | |
| 			intList.add(j);
 | |
| 		}
 | |
| 
 | |
| 		return new PlacementInfo(ingredients, intList);
 | |
| 	}
 | |
| 
 | |
| 	public IntList slotsToIngredientIndex() {
 | |
| 		return this.slotsToIngredientIndex;
 | |
| 	}
 | |
| 
 | |
| 	public List<Ingredient> ingredients() {
 | |
| 		return this.ingredients;
 | |
| 	}
 | |
| 
 | |
| 	public boolean isImpossibleToPlace() {
 | |
| 		return this.slotsToIngredientIndex.isEmpty();
 | |
| 	}
 | |
| }
 |