use of net.minecraft.world.item.crafting.CraftingRecipe in project Cyclic by Lothrazar.
the class CraftingBagContainer method slotsChanged.
@Override
public void slotsChanged(Container inventory) {
Level world = playerInventory.player.level;
if (!world.isClientSide) {
ServerPlayer player = (ServerPlayer) playerInventory.player;
ItemStack itemstack = ItemStack.EMPTY;
Optional<CraftingRecipe> optional = world.getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, craftMatrix, world);
if (optional.isPresent()) {
CraftingRecipe icraftingrecipe = optional.get();
if (craftResult.setRecipeUsed(world, player, icraftingrecipe)) {
itemstack = icraftingrecipe.assemble(craftMatrix);
}
}
craftResult.setItem(0, itemstack);
player.connection.send(new ClientboundContainerSetSlotPacket(containerId, this.getStateId(), 0, itemstack));
}
}
use of net.minecraft.world.item.crafting.CraftingRecipe in project Create by Creators-of-Create.
the class ToolboxColoringRecipeMaker method createRecipes.
// From JEI's ShulkerBoxColoringRecipeMaker
public static Stream<CraftingRecipe> createRecipes() {
String group = "create.toolbox.color";
ItemStack baseShulkerStack = AllBlocks.TOOLBOXES.get(DyeColor.BROWN).asStack();
Ingredient baseShulkerIngredient = Ingredient.of(baseShulkerStack);
return Arrays.stream(DyeColor.values()).filter(dc -> dc != DyeColor.BROWN).map(color -> {
DyeItem dye = DyeItem.byColor(color);
ItemStack dyeStack = new ItemStack(dye);
Tag<Item> colorTag = color.getTag();
Ingredient.Value dyeList = new Ingredient.ItemValue(dyeStack);
Ingredient.Value colorList = new Ingredient.TagValue(colorTag);
Stream<Ingredient.Value> colorIngredientStream = Stream.of(dyeList, colorList);
Ingredient colorIngredient = Ingredient.fromValues(colorIngredientStream);
NonNullList<Ingredient> inputs = NonNullList.of(Ingredient.EMPTY, baseShulkerIngredient, colorIngredient);
Block coloredShulkerBox = AllBlocks.TOOLBOXES.get(color).get();
ItemStack output = new ItemStack(coloredShulkerBox);
ResourceLocation id = Create.asResource(group + "." + output.getDescriptionId());
return new ShapelessRecipe(id, group, output, inputs);
});
}
use of net.minecraft.world.item.crafting.CraftingRecipe in project Create by Creators-of-Create.
the class BlueprintOverlayRenderer method rebuild.
public static void rebuild(BlueprintSection sectionAt, boolean sneak) {
cachedRenderedFilters.clear();
ItemStackHandler items = sectionAt.getItems();
boolean empty = true;
for (int i = 0; i < 9; i++) {
if (!items.getStackInSlot(i).isEmpty()) {
empty = false;
break;
}
}
BlueprintOverlayRenderer.empty = empty;
BlueprintOverlayRenderer.result = ItemStack.EMPTY;
if (empty)
return;
boolean firstPass = true;
boolean success = true;
Minecraft mc = Minecraft.getInstance();
ItemStackHandler playerInv = new ItemStackHandler(mc.player.getInventory().getContainerSize());
for (int i = 0; i < playerInv.getSlots(); i++) playerInv.setStackInSlot(i, mc.player.getInventory().getItem(i).copy());
int amountCrafted = 0;
Optional<CraftingRecipe> recipe = Optional.empty();
Map<Integer, ItemStack> craftingGrid = new HashMap<>();
ingredients.clear();
ItemStackHandler missingItems = new ItemStackHandler(64);
ItemStackHandler availableItems = new ItemStackHandler(64);
List<ItemStack> newlyAdded = new ArrayList<>();
List<ItemStack> newlyMissing = new ArrayList<>();
boolean invalid = false;
do {
craftingGrid.clear();
newlyAdded.clear();
newlyMissing.clear();
Search: for (int i = 0; i < 9; i++) {
ItemStack requestedItem = items.getStackInSlot(i);
if (requestedItem.isEmpty()) {
craftingGrid.put(i, ItemStack.EMPTY);
continue;
}
for (int slot = 0; slot < playerInv.getSlots(); slot++) {
if (!FilterItem.test(mc.level, playerInv.getStackInSlot(slot), requestedItem))
continue;
ItemStack currentItem = playerInv.extractItem(slot, 1, false);
craftingGrid.put(i, currentItem);
newlyAdded.add(currentItem);
continue Search;
}
success = false;
newlyMissing.add(requestedItem);
}
if (success) {
CraftingContainer craftingInventory = new BlueprintCraftingInventory(craftingGrid);
if (!recipe.isPresent())
recipe = mc.level.getRecipeManager().getRecipeFor(RecipeType.CRAFTING, craftingInventory, mc.level);
ItemStack resultFromRecipe = recipe.filter(r -> r.matches(craftingInventory, mc.level)).map(r -> r.assemble(craftingInventory)).orElse(ItemStack.EMPTY);
if (resultFromRecipe.isEmpty()) {
if (!recipe.isPresent())
invalid = true;
success = false;
} else if (resultFromRecipe.getCount() + amountCrafted > 64) {
success = false;
} else {
amountCrafted += resultFromRecipe.getCount();
if (result.isEmpty())
result = resultFromRecipe.copy();
else
result.grow(resultFromRecipe.getCount());
resultCraftable = true;
firstPass = false;
}
}
if (success || firstPass) {
newlyAdded.forEach(s -> ItemHandlerHelper.insertItemStacked(availableItems, s, false));
newlyMissing.forEach(s -> ItemHandlerHelper.insertItemStacked(missingItems, s, false));
}
if (!success) {
if (firstPass) {
result = invalid ? ItemStack.EMPTY : items.getStackInSlot(9);
resultCraftable = false;
}
break;
}
if (!sneak)
break;
} while (success);
for (int i = 0; i < 9; i++) {
ItemStack available = availableItems.getStackInSlot(i);
if (available.isEmpty())
continue;
ingredients.add(Pair.of(available, true));
}
for (int i = 0; i < 9; i++) {
ItemStack missing = missingItems.getStackInSlot(i);
if (missing.isEmpty())
continue;
ingredients.add(Pair.of(missing, false));
}
}
use of net.minecraft.world.item.crafting.CraftingRecipe in project Create by Creators-of-Create.
the class BlueprintContainer method onCraftMatrixChanged.
public void onCraftMatrixChanged() {
if (contentHolder.getBlueprintWorld().isClientSide)
return;
ServerPlayer serverplayerentity = (ServerPlayer) player;
CraftingContainer craftingInventory = new BlueprintCraftingInventory(this, ghostInventory);
Optional<CraftingRecipe> optional = player.getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, craftingInventory, player.getCommandSenderWorld());
if (!optional.isPresent()) {
if (ghostInventory.getStackInSlot(9).isEmpty())
return;
if (!contentHolder.inferredIcon)
return;
ghostInventory.setStackInSlot(9, ItemStack.EMPTY);
serverplayerentity.connection.send(new ClientboundContainerSetSlotPacket(containerId, incrementStateId(), 36 + 9, ItemStack.EMPTY));
contentHolder.inferredIcon = false;
return;
}
CraftingRecipe icraftingrecipe = optional.get();
ItemStack itemstack = icraftingrecipe.assemble(craftingInventory);
ghostInventory.setStackInSlot(9, itemstack);
contentHolder.inferredIcon = true;
ItemStack toSend = itemstack.copy();
toSend.getOrCreateTag().putBoolean("InferredFromRecipe", true);
serverplayerentity.connection.send(new ClientboundContainerSetSlotPacket(containerId, incrementStateId(), 36 + 9, toSend));
}
use of net.minecraft.world.item.crafting.CraftingRecipe in project excavated_variants by lukebemish.
the class ExcavatedVariantsClientPlugin method registerDisplays.
@Override
public void registerDisplays(DisplayRegistry registry) {
if (ExcavatedVariants.getConfig().add_conversion_recipes && ExcavatedVariants.getConfig().jei_rei_compat) {
List<CraftingRecipe> recipes = new ArrayList<>();
OreConversionRecipe.assembleOrNull();
for (Pair<BaseOre, HashSet<BaseStone>> p : ExcavatedVariants.oreStoneList) {
ArrayList<Item> items = new ArrayList<>();
for (BaseStone stone : p.last()) {
ResourceLocation rl = new ResourceLocation(ExcavatedVariants.MOD_ID, stone.id + "_" + p.first().id);
Item item = Services.REGISTRY_UTIL.getItemById(rl);
if (item != null) {
items.add(item);
}
}
Item outItem = Services.REGISTRY_UTIL.getItemById(p.first().block_id.get(0));
if (items.size() > 0 && outItem != null) {
Ingredient input = Ingredient.of(items.stream().map(ItemStack::new));
ItemStack output = new ItemStack(outItem);
NonNullList<Ingredient> inputs = NonNullList.of(Ingredient.EMPTY, input);
String ore_id = p.first().id;
recipes.add(new ShapelessRecipe(new ResourceLocation(ExcavatedVariants.MOD_ID, ore_id + "_conversion"), "excavated_variants.ore_conversion", output, inputs));
}
}
CategoryIdentifier<Display> categoryIdentifier = CategoryIdentifier.of("minecraft", "plugins/crafting");
for (CraftingRecipe recipe : recipes) {
Collection<Display> displays = registry.tryFillDisplay(recipe);
for (Display display : displays) {
if (Objects.equals(display.getCategoryIdentifier(), categoryIdentifier)) {
registry.add(display, recipe);
}
}
}
}
}
Aggregations