Skip to content

Commit

Permalink
Merge pull request #1052 from ZhuRuoLing/refactor/multiblock_crafting
Browse files Browse the repository at this point in the history
重构大铁砧多方块合成
  • Loading branch information
ZhuRuoLing authored Jul 18, 2024
2 parents bb3e0a8 + 9d0d0ad commit 59d52e2
Show file tree
Hide file tree
Showing 61 changed files with 1,171 additions and 4,014 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import dev.dubhe.anvilcraft.data.generator.AnvilCraftDatagen;
import dev.dubhe.anvilcraft.data.recipe.anvil.AnvilRecipe;
import dev.dubhe.anvilcraft.data.recipe.anvil.AnvilRecipeType;
import dev.dubhe.anvilcraft.data.recipe.anvil.predicate.HasBlock;
import dev.dubhe.anvilcraft.data.recipe.anvil.predicate.block.HasBlock;
import dev.dubhe.anvilcraft.init.ModItems;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.recipes.RecipeCategory;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package dev.dubhe.anvilcraft.data.generator.recipe;

import com.tterrag.registrate.providers.RegistrateRecipeProvider;
import dev.dubhe.anvilcraft.AnvilCraft;
import dev.dubhe.anvilcraft.block.HeavyIronBeamBlock;
import dev.dubhe.anvilcraft.data.generator.AnvilCraftDatagen;
import dev.dubhe.anvilcraft.data.recipe.RecipeItem;
import dev.dubhe.anvilcraft.data.recipe.anvil.AnvilRecipe;
import dev.dubhe.anvilcraft.data.recipe.anvil.AnvilRecipeType;
import dev.dubhe.anvilcraft.data.recipe.anvil.predicate.multiblock.HasMultiBlock;
import dev.dubhe.anvilcraft.init.ModBlocks;
import net.minecraft.core.Direction;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.data.recipes.FinishedRecipe;
import net.minecraft.data.recipes.RecipeCategory;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SlabBlock;
import net.minecraft.world.level.block.StairBlock;
import net.minecraft.world.level.block.state.properties.Half;
import net.minecraft.world.level.block.state.properties.SlabType;
import net.minecraft.world.phys.Vec3;

import java.util.Map;
import java.util.function.Consumer;

public class MultiblockCraftingHandler {

/**
* 初始化多方块合成配方
*
* @param provider 提供器
*/
public static void init(RegistrateRecipeProvider provider) {
HasMultiBlock giantAnvil1 = HasMultiBlock.builder()
.layer(
"AAA",
"AAA",
"AAA"
)
.layer(
"CCC",
"CBC",
"CCC"
)
.layer(
"DDD",
"DDD",
"DDD"
)
.define('A', ModBlocks.POLISHED_HEAVY_IRON_BLOCK.get())
.define('B', ModBlocks.HEAVY_IRON_COLUMN.get())
.define('C', ModBlocks.HEAVY_IRON_PLATE.get())
.define('D', ModBlocks.CUT_HEAVY_IRON_BLOCK.get())
.build();

multiblock(giantAnvil1, ModBlocks.GIANT_ANVIL.asItem(), "1", provider);
HasMultiBlock giantAnvil2 = HasMultiBlock.builder()
.layer(
"ACA",
"BAB",
"ACA"
)
.layer(
"EEE",
"EDE",
"EEE"
)
.layer(
"JGJ",
"HDI",
"JFJ"
)
.define('A', ModBlocks.POLISHED_HEAVY_IRON_BLOCK.get())
.define('B', ModBlocks.HEAVY_IRON_BEAM.get(), Map.entry(HeavyIronBeamBlock.AXIS, Direction.Axis.Z))
.define('C', ModBlocks.HEAVY_IRON_BEAM.get(), Map.entry(HeavyIronBeamBlock.AXIS, Direction.Axis.X))
.define('D', ModBlocks.HEAVY_IRON_COLUMN.get())
.define('E', ModBlocks.HEAVY_IRON_PLATE.get())
.define('F', ModBlocks.CUT_HEAVY_IRON_STAIRS.get(),
Map.entry(StairBlock.FACING, Direction.SOUTH),
Map.entry(StairBlock.HALF, Half.BOTTOM))
.define('G', ModBlocks.CUT_HEAVY_IRON_STAIRS.get(),
Map.entry(StairBlock.FACING, Direction.NORTH),
Map.entry(StairBlock.HALF, Half.BOTTOM))
.define('H', ModBlocks.CUT_HEAVY_IRON_STAIRS.get(),
Map.entry(StairBlock.FACING, Direction.EAST),
Map.entry(StairBlock.HALF, Half.BOTTOM))
.define('I', ModBlocks.CUT_HEAVY_IRON_STAIRS.get(),
Map.entry(StairBlock.FACING, Direction.WEST),
Map.entry(StairBlock.HALF, Half.BOTTOM))
.define('J', ModBlocks.CUT_HEAVY_IRON_SLAB.get(), Map.entry(SlabBlock.TYPE, SlabType.BOTTOM))
.build();

multiblock(giantAnvil2, ModBlocks.GIANT_ANVIL.asItem(), "2", provider);
HasMultiBlock mengerSponge = HasMultiBlock.builder()
.layer(
"AAA",
"A A",
"AAA"
)
.layer(
"A A",
" B ",
"A A"
)
.layer(
"AAA",
"A A",
"AAA"
)
.define('A', Blocks.SPONGE)
.define('B', ModBlocks.VOID_MATTER_BLOCK.get())
.define(' ', Blocks.AIR)
.build();
multiblock(mengerSponge, ModBlocks.MENGER_SPONGE.asItem(), "", provider);
}

private static void multiblock(HasMultiBlock pred, Item output, String postfix, Consumer<FinishedRecipe> cons) {
AnvilRecipe.Builder.create(RecipeCategory.MISC)
.type(AnvilRecipeType.MULTIBLOCK_CRAFTING)
.icon(output)
.addPredicates(pred)
.spawnItem(new Vec3(0.0, -2.0, 0.0), RecipeItem.of(output))
.unlockedBy(
AnvilCraftDatagen.hasItem(ModBlocks.GIANT_ANVIL),
AnvilCraftDatagen.has(ModBlocks.GIANT_ANVIL)
)
.save(cons, AnvilCraft.of("multiblock_crafting/"
+ BuiltInRegistries.ITEM.getKey(output).getPath() + postfix
));

}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ public static void init(RegistrateRecipeProvider provider) {
SmithingRecipesLoader.init(provider);
MobTransformRecipesLoader.init(provider);
BulgingLikeRecipesLoader.init(provider);
MultiblockCraftingRecipeLoader.init(provider);
MultiblockCraftingHandler.init(provider);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.dubhe.anvilcraft.data.recipe;

import com.tterrag.registrate.util.entry.BlockEntry;
import dev.dubhe.anvilcraft.data.recipe.anvil.predicate.block.HasBlock;
import lombok.Getter;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.tags.TagKey;
Expand Down Expand Up @@ -61,7 +62,7 @@ public static RecipeBlock of(BlockEntry<Block> blockBlockEntry) {
}

/**
* 判断是否有状态检测, 一般用于{@link dev.dubhe.anvilcraft.data.recipe.anvil.predicate.HasBlock hasBlock}
* 判断是否有状态检测, 一般用于{@link HasBlock hasBlock}
*/
public boolean isHasStates() {
return this.stateEntries != null;
Expand Down
Loading

0 comments on commit 59d52e2

Please sign in to comment.