net.minecraft.util.DefaultedList#net.minecraft.inventory.CraftingInventory源码实例Demo

下面列出了net.minecraft.util.DefaultedList#net.minecraft.inventory.CraftingInventory 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: EnderStorage   文件: CreateRecipe.java
@Nonnull
@Override
public ItemStack getCraftingResult(CraftingInventory inv) {
    EnumColour colour = EnumColour.WHITE;
    finish:
    for (int x = 0; x < 3; x++) {
        for (int y = 0; y < 3; y++) {
            ItemStack stack = inv.getStackInSlot(x + y * inv.getWidth());
            if (!stack.isEmpty()) {
                EnumColour c = EnumColour.fromWoolStack(stack);
                if (c != null) {
                    colour = c;
                    break finish;
                }
            }
        }
    }
    Frequency frequency = new Frequency(colour, colour, colour);
    return frequency.writeToStack(super.getCraftingResult(inv));
}
 
源代码2 项目: EnderStorage   文件: RecipeBase.java
@Override
public boolean matches(CraftingInventory inv, World worldIn) {
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            Ingredient ingredient = Ingredient.EMPTY;

            if (i >= 0 && j >= 0 && i < 3 && j < 3) {
                ingredient = this.input.get(i + j * 3);
            }

            if (!ingredient.test(inv.getStackInSlot(i + j * inv.getWidth()))) {
                return false;
            }
        }
    }

    return true;
}
 
源代码3 项目: multiconnect   文件: RecipeBookEmulator.java
public static void setCraftingResultSlot(int syncId, CraftingInventory craftingInv) {
    ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
    assert networkHandler != null;
    ItemStack result = networkHandler.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, craftingInv, MinecraftClient.getInstance().world)
            .map(recipe -> recipe.craft(craftingInv))
            .orElse(ItemStack.EMPTY);
    networkHandler.onScreenHandlerSlotUpdate(new ScreenHandlerSlotUpdateS2CPacket(syncId, 0, result));
}
 
源代码4 项目: multiconnect   文件: AddBannerPatternRecipe.java
@Override
public boolean matches(CraftingInventory inv, World world) {
    boolean foundBanner = false;
    for (int i = 0; i < inv.size(); i++) {
        ItemStack stack = inv.getStack(i);
        if (stack.getItem() instanceof BannerItem) {
            if (foundBanner)
                return false;
            if (BannerBlockEntity.getPatternCount(stack) >= 6)
                return false;
            foundBanner = true;
        }
    }
    return foundBanner && getBannerPattern(inv) != null;
}
 
源代码5 项目: carpet-extra   文件: DropperBlock_craftingMixin.java
@Inject(method = "dispense", at = @At("HEAD"), cancellable = true)
private void tryCraft(World world_1, BlockPos blockPos_1, CallbackInfo ci)
{
    if (!CarpetExtraSettings.autoCraftingDropper) return;
    BlockPos front = blockPos_1.offset(world_1.getBlockState(blockPos_1).get(DispenserBlock.FACING));
    if (world_1.getBlockState(front).getBlock() != Blocks.CRAFTING_TABLE) return;
    DispenserBlockEntity dispenserBlockEntity_1 = (DispenserBlockEntity) world_1.getBlockEntity(blockPos_1);
    if (dispenserBlockEntity_1 == null) return;
    CraftingInventory craftingInventory = new CraftingInventory(new VoidContainer(), 3, 3);
    for (int i=0; i < 9; i++) craftingInventory.setInvStack(i, dispenserBlockEntity_1.getInvStack(i));
    CraftingRecipe recipe = world_1.getRecipeManager().getFirstMatch(RecipeType.CRAFTING, craftingInventory, world_1).orElse(null);
    if (recipe == null) return;
    // crafting it
    Vec3d target = new Vec3d(front).add(0.5, 0.2, 0.5);
    ItemStack result = recipe.craft(craftingInventory);
    spawn(world_1, target.x, target.y, target.z, result);

    // copied from CraftingResultSlot.onTakeItem()
    DefaultedList<ItemStack> defaultedList_1 = world_1.getRecipeManager().getRemainingStacks(RecipeType.CRAFTING, craftingInventory, world_1);
    for(int int_1 = 0; int_1 < defaultedList_1.size(); ++int_1) {
        ItemStack itemStack_2 = dispenserBlockEntity_1.getInvStack(int_1);
        ItemStack itemStack_3 = defaultedList_1.get(int_1);
        if (!itemStack_2.isEmpty()) {
            dispenserBlockEntity_1.takeInvStack(int_1, 1);
            itemStack_2 = dispenserBlockEntity_1.getInvStack(int_1);
        }

        if (!itemStack_3.isEmpty()) {
            if (itemStack_2.isEmpty()) {
                dispenserBlockEntity_1.setInvStack(int_1, itemStack_3);
            } else if (ItemStack.areItemsEqualIgnoreDamage(itemStack_2, itemStack_3) && ItemStack.areTagsEqual(itemStack_2, itemStack_3)) {
                itemStack_3.increment(itemStack_2.getCount());
                dispenserBlockEntity_1.setInvStack(int_1, itemStack_3);
            } else {
                spawn(world_1, target.x, target.y, target.z, itemStack_3);
            }
        }
    }
    Vec3d vec = new Vec3d(blockPos_1).add(0.5, 0.5, 0.5);
    ServerWorld world = (ServerWorld) world_1;
    world.playSound(null, blockPos_1, SoundEvents.ENTITY_VILLAGER_WORK_MASON, SoundCategory.BLOCKS, 0.2f, 2.0f);
    ci.cancel();
}
 
源代码6 项目: EnderStorage   文件: RecipeBase.java
@Override
public ItemStack getCraftingResult(CraftingInventory inv) {
    return output.copy();
}
 
源代码7 项目: Survivalist   文件: DummyRecipe.java
@Override
public boolean matches(CraftingInventory inv, World worldIn)
{
    return false;
}
 
源代码8 项目: Survivalist   文件: DummyRecipe.java
@Override
public ItemStack getCraftingResult(CraftingInventory inv)
{
    return ItemStack.EMPTY;
}