59 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.recipebook;
 | |
| 
 | |
| import java.util.Iterator;
 | |
| import net.minecraft.util.Mth;
 | |
| import net.minecraft.world.item.crafting.Recipe;
 | |
| import net.minecraft.world.item.crafting.ShapedRecipe;
 | |
| 
 | |
| public interface PlaceRecipeHelper {
 | |
| 	static <T> void placeRecipe(int width, int height, Recipe<?> recipe, Iterable<T> ingredients, PlaceRecipeHelper.Output<T> output) {
 | |
| 		if (recipe instanceof ShapedRecipe shapedRecipe) {
 | |
| 			placeRecipe(width, height, shapedRecipe.getWidth(), shapedRecipe.getHeight(), ingredients, output);
 | |
| 		} else {
 | |
| 			placeRecipe(width, height, width, height, ingredients, output);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	static <T> void placeRecipe(int gridWidth, int gridHeight, int width, int height, Iterable<T> ingredients, PlaceRecipeHelper.Output<T> output) {
 | |
| 		Iterator<T> iterator = ingredients.iterator();
 | |
| 		int i = 0;
 | |
| 
 | |
| 		for (int j = 0; j < gridHeight; j++) {
 | |
| 			boolean bl = height < gridHeight / 2.0F;
 | |
| 			int k = Mth.floor(gridHeight / 2.0F - height / 2.0F);
 | |
| 			if (bl && k > j) {
 | |
| 				i += gridWidth;
 | |
| 				j++;
 | |
| 			}
 | |
| 
 | |
| 			for (int l = 0; l < gridWidth; l++) {
 | |
| 				if (!iterator.hasNext()) {
 | |
| 					return;
 | |
| 				}
 | |
| 
 | |
| 				bl = width < gridWidth / 2.0F;
 | |
| 				k = Mth.floor(gridWidth / 2.0F - width / 2.0F);
 | |
| 				int m = width;
 | |
| 				boolean bl2 = l < width;
 | |
| 				if (bl) {
 | |
| 					m = k + width;
 | |
| 					bl2 = k <= l && l < k + width;
 | |
| 				}
 | |
| 
 | |
| 				if (bl2) {
 | |
| 					output.addItemToSlot((T)iterator.next(), i, l, j);
 | |
| 				} else if (m == l) {
 | |
| 					i += gridWidth - l;
 | |
| 					break;
 | |
| 				}
 | |
| 
 | |
| 				i++;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@FunctionalInterface
 | |
| 	public interface Output<T> {
 | |
| 		void addItemToSlot(T object, int i, int j, int k);
 | |
| 	}
 | |
| }
 |