Compare commits
6 Commits
74a290fd16
...
c3e0ab16b7
Author | SHA1 | Date | |
---|---|---|---|
c3e0ab16b7 | |||
d8e4153754 | |||
572182e9f0 | |||
6f394bbe6f | |||
b05c0ebd42 | |||
4309310c02 |
@ -9,7 +9,7 @@ loader_version=0.15.6
|
|||||||
|
|
||||||
# Mod Properties
|
# Mod Properties
|
||||||
modrinth_id = jCpoCBpn
|
modrinth_id = jCpoCBpn
|
||||||
mod_version = 1.5.6
|
mod_version = 1.5.7
|
||||||
maven_group = fr.adrien1106
|
maven_group = fr.adrien1106
|
||||||
archives_base_name = ReFramed
|
archives_base_name = ReFramed
|
||||||
mod_id = reframed
|
mod_id = reframed
|
||||||
|
@ -32,12 +32,13 @@ import static fr.adrien1106.reframed.util.blocks.BlockProperties.LIGHT;
|
|||||||
* TODO add minecraft models like wall fence etc -> for v1.6
|
* TODO add minecraft models like wall fence etc -> for v1.6
|
||||||
* TODO better connected textures -> maybe v1.6 ?
|
* TODO better connected textures -> maybe v1.6 ?
|
||||||
* TODO support continuity overlays -> not scheduled
|
* TODO support continuity overlays -> not scheduled
|
||||||
|
* TODO better state caching per models (e.g. wall only has 3 max per model) -> not scheduled
|
||||||
*/
|
*/
|
||||||
public class ReFramed implements ModInitializer {
|
public class ReFramed implements ModInitializer {
|
||||||
public static final String MODID = "reframed";
|
public static final String MODID = "reframed";
|
||||||
|
|
||||||
public static final ArrayList<Block> BLOCKS = new ArrayList<>();
|
public static final ArrayList<Block> BLOCKS = new ArrayList<>();
|
||||||
public static Block CUBE, SMALL_CUBE, SMALL_CUBES_STEP, STAIR, HALF_STAIR, STAIRS_CUBE, HALF_STAIRS_SLAB, HALF_STAIRS_STAIR, SLAB, SLABS_CUBE, STEP, STEPS_SLAB, LAYER, PILLAR;
|
public static Block CUBE, SMALL_CUBE, SMALL_CUBES_STEP, STAIR, HALF_STAIR, STAIRS_CUBE, HALF_STAIRS_SLAB, HALF_STAIRS_STAIR, SLAB, SLABS_CUBE, STEP, STEPS_SLAB, LAYER, PILLAR, WALL;
|
||||||
|
|
||||||
public static final ArrayList<Item> ITEMS = new ArrayList<>();
|
public static final ArrayList<Item> ITEMS = new ArrayList<>();
|
||||||
public static Item HAMMER, SCREWDRIVER, BLUEPRINT, BLUEPRINT_WRITTEN;
|
public static Item HAMMER, SCREWDRIVER, BLUEPRINT, BLUEPRINT_WRITTEN;
|
||||||
@ -65,6 +66,7 @@ public class ReFramed implements ModInitializer {
|
|||||||
STEP = registerBlock("step" , new ReFramedStepBlock(cp(Blocks.OAK_SLAB)));
|
STEP = registerBlock("step" , new ReFramedStepBlock(cp(Blocks.OAK_SLAB)));
|
||||||
STEPS_SLAB = registerBlock("steps_slab" , new ReFramedStepsSlabBlock(cp(Blocks.OAK_SLAB)));
|
STEPS_SLAB = registerBlock("steps_slab" , new ReFramedStepsSlabBlock(cp(Blocks.OAK_SLAB)));
|
||||||
PILLAR = registerBlock("pillar" , new ReFramedPillarBlock(cp(Blocks.OAK_FENCE)));
|
PILLAR = registerBlock("pillar" , new ReFramedPillarBlock(cp(Blocks.OAK_FENCE)));
|
||||||
|
WALL = registerBlock("wall" , new ReframedWallBlock(cp(Blocks.OAK_FENCE)));
|
||||||
|
|
||||||
HAMMER = registerItem("hammer" , new ReFramedHammerItem(new Item.Settings().maxCount(1)));
|
HAMMER = registerItem("hammer" , new ReFramedHammerItem(new Item.Settings().maxCount(1)));
|
||||||
SCREWDRIVER = registerItem("screwdriver" , new ReFramedScrewdriverItem(new Item.Settings().maxCount(1)));
|
SCREWDRIVER = registerItem("screwdriver" , new ReFramedScrewdriverItem(new Item.Settings().maxCount(1)));
|
||||||
|
@ -1,13 +1,9 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.generator.RecipeSetter;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.*;
|
import net.minecraft.block.*;
|
||||||
import net.minecraft.block.entity.BlockEntity;
|
import net.minecraft.block.entity.BlockEntity;
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
@ -16,7 +12,6 @@ import net.minecraft.item.ItemStack;
|
|||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.nbt.NbtCompound;
|
import net.minecraft.nbt.NbtCompound;
|
||||||
import net.minecraft.nbt.NbtHelper;
|
import net.minecraft.nbt.NbtHelper;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.registry.Registries;
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
@ -41,7 +36,7 @@ import java.util.stream.IntStream;
|
|||||||
import static fr.adrien1106.reframed.block.ReFramedEntity.BLOCKSTATE_KEY;
|
import static fr.adrien1106.reframed.block.ReFramedEntity.BLOCKSTATE_KEY;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.LIGHT;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.LIGHT;
|
||||||
|
|
||||||
public class ReFramedBlock extends Block implements BlockEntityProvider, RecipeSetter {
|
public class ReFramedBlock extends Block implements BlockEntityProvider {
|
||||||
|
|
||||||
public ReFramedBlock(Settings settings) {
|
public ReFramedBlock(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
@ -225,18 +220,4 @@ public class ReFramedBlock extends Block implements BlockEntityProvider, RecipeS
|
|||||||
public Map<Integer, Integer> getThemeMap(BlockState state, BlockState new_state) {
|
public Map<Integer, Integer> getThemeMap(BlockState state, BlockState new_state) {
|
||||||
return Map.of();
|
return Map.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.pattern("III")
|
|
||||||
.pattern("I~I")
|
|
||||||
.pattern("III")
|
|
||||||
.input('I', Items.BAMBOO)
|
|
||||||
.input('~', Items.STRING)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(Items.BAMBOO), FabricRecipeProvider.conditionsFromItem(Items.BAMBOO))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,15 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.VoxelHelper;
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Corner;
|
import fr.adrien1106.reframed.util.blocks.Corner;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.function.BooleanBiFunction;
|
import net.minecraft.util.function.BooleanBiFunction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
@ -33,10 +23,9 @@ import java.util.Map;
|
|||||||
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.*;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.*;
|
||||||
import static fr.adrien1106.reframed.util.blocks.Corner.*;
|
import static fr.adrien1106.reframed.util.blocks.Corner.*;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.WATERLOGGED;
|
import static net.minecraft.state.property.Properties.WATERLOGGED;
|
||||||
|
|
||||||
public class ReFramedHalfStairBlock extends WaterloggableReFramedBlock implements BlockStateProvider {
|
public class ReFramedHalfStairBlock extends WaterloggableReFramedBlock {
|
||||||
|
|
||||||
public static final VoxelShape[] HALF_STAIR_VOXELS;
|
public static final VoxelShape[] HALF_STAIR_VOXELS;
|
||||||
|
|
||||||
@ -137,87 +126,6 @@ public class ReFramedHalfStairBlock extends WaterloggableReFramedBlock implement
|
|||||||
return super.getThemeMap(state, new_state);
|
return super.getThemeMap(state, new_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
return getHalfStairMultipart(
|
|
||||||
this,
|
|
||||||
ReFramed.id("half_stair_down_special"),
|
|
||||||
ReFramed.id("half_stair_side_special")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static BlockStateSupplier getHalfStairMultipart(Block block, Identifier model_down, Identifier model_side) {
|
|
||||||
return MultipartBlockStateSupplier.create(block)
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R90, R270))
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R0, R0))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R0, R90))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R0, R180))
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R0, R180))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R90, R180))
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R0, R270))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R270, R90))
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R180, R0))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R180, R90))
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R270, R180))
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R180, R90))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_UP, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_UP, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R270, R270))
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_UP, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R180, R180))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_UP, CORNER_FACE, 0),
|
|
||||||
GBlockstate.variant(model_side, true, R180, R270))
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_UP, CORNER_FACE, 1),
|
|
||||||
GBlockstate.variant(model_side, true, R270, R0))
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_UP, CORNER_FACE, 2),
|
|
||||||
GBlockstate.variant(model_down, true, R180, R270));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 2);
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this, 4)
|
|
||||||
.pattern("I ")
|
|
||||||
.pattern("II ")
|
|
||||||
.input('I', ReFramed.CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final VoxelShape HALF_STAIR = VoxelShapes.combineAndSimplify(
|
final VoxelShape HALF_STAIR = VoxelShapes.combineAndSimplify(
|
||||||
createCuboidShape(8, 0, 0, 16, 16, 8),
|
createCuboidShape(8, 0, 0, 16, 16, 8),
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Corner;
|
import fr.adrien1106.reframed.util.blocks.Corner;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
@ -21,7 +13,6 @@ import net.minecraft.world.BlockView;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static fr.adrien1106.reframed.block.ReFramedHalfStairBlock.HALF_STAIR_VOXELS;
|
import static fr.adrien1106.reframed.block.ReFramedHalfStairBlock.HALF_STAIR_VOXELS;
|
||||||
import static fr.adrien1106.reframed.block.ReFramedHalfStairBlock.getHalfStairMultipart;
|
|
||||||
import static fr.adrien1106.reframed.block.ReFramedSlabBlock.getSlabShape;
|
import static fr.adrien1106.reframed.block.ReFramedSlabBlock.getSlabShape;
|
||||||
import static fr.adrien1106.reframed.block.ReFramedSmallCubeBlock.SMALL_CUBE_VOXELS;
|
import static fr.adrien1106.reframed.block.ReFramedSmallCubeBlock.SMALL_CUBE_VOXELS;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.CORNER;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.CORNER;
|
||||||
@ -29,7 +20,7 @@ import static fr.adrien1106.reframed.util.blocks.BlockProperties.CORNER_FACE;
|
|||||||
import static fr.adrien1106.reframed.util.blocks.Corner.NORTH_EAST_DOWN;
|
import static fr.adrien1106.reframed.util.blocks.Corner.NORTH_EAST_DOWN;
|
||||||
import static net.minecraft.util.shape.VoxelShapes.empty;
|
import static net.minecraft.util.shape.VoxelShapes.empty;
|
||||||
|
|
||||||
public class ReFramedHalfStairsSlabBlock extends WaterloggableReFramedDoubleBlock implements BlockStateProvider {
|
public class ReFramedHalfStairsSlabBlock extends WaterloggableReFramedDoubleBlock {
|
||||||
|
|
||||||
private record ModelCacheKey(Corner corner, int face) {}
|
private record ModelCacheKey(Corner corner, int face) {}
|
||||||
|
|
||||||
@ -79,25 +70,4 @@ public class ReFramedHalfStairsSlabBlock extends WaterloggableReFramedDoubleBloc
|
|||||||
? SMALL_CUBE_VOXELS[corner.getOpposite(face).getID()]
|
? SMALL_CUBE_VOXELS[corner.getOpposite(face).getID()]
|
||||||
: HALF_STAIR_VOXELS[face + corner.getID() * 3];
|
: HALF_STAIR_VOXELS[face + corner.getID() * 3];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
return getHalfStairMultipart(
|
|
||||||
this,
|
|
||||||
ReFramed.id("half_stairs_slab_down_special"),
|
|
||||||
ReFramed.id("half_stairs_slab_side_special")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 2);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.input(ReFramed.HALF_STAIR)
|
|
||||||
.input(ReFramed.SMALL_CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,14 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Corner;
|
import fr.adrien1106.reframed.util.blocks.Corner;
|
||||||
import fr.adrien1106.reframed.util.blocks.Edge;
|
import fr.adrien1106.reframed.util.blocks.Edge;
|
||||||
import fr.adrien1106.reframed.util.blocks.StairShape;
|
import fr.adrien1106.reframed.util.blocks.StairShape;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
@ -30,10 +19,9 @@ import static fr.adrien1106.reframed.block.ReFramedHalfStairBlock.HALF_STAIR_VOX
|
|||||||
import static fr.adrien1106.reframed.block.ReFramedStairBlock.getStairShape;
|
import static fr.adrien1106.reframed.block.ReFramedStairBlock.getStairShape;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.util.shape.VoxelShapes.empty;
|
import static net.minecraft.util.shape.VoxelShapes.empty;
|
||||||
|
|
||||||
public class ReFramedHalfStairsStairBlock extends WaterloggableReFramedDoubleBlock implements BlockStateProvider {
|
public class ReFramedHalfStairsStairBlock extends WaterloggableReFramedDoubleBlock {
|
||||||
public ReFramedHalfStairsStairBlock(Settings settings) {
|
public ReFramedHalfStairsStairBlock(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
setDefaultState(getDefaultState().with(EDGE, NORTH_DOWN));
|
setDefaultState(getDefaultState().with(EDGE, NORTH_DOWN));
|
||||||
@ -89,50 +77,4 @@ public class ReFramedHalfStairsStairBlock extends WaterloggableReFramedDoubleBlo
|
|||||||
public int getTopThemeIndex(BlockState state) {
|
public int getTopThemeIndex(BlockState state) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
Identifier model_id = ReFramed.id("half_stairs_stair_down_special");
|
|
||||||
Identifier side_model_id = ReFramed.id("half_stairs_stair_side_special");
|
|
||||||
Identifier reverse_model_id = ReFramed.id("half_stairs_stair_reverse_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
/* X AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_DOWN),
|
|
||||||
GBlockstate.variant(side_model_id, true, R90, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_SOUTH),
|
|
||||||
GBlockstate.variant(side_model_id, true, R0, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_UP),
|
|
||||||
GBlockstate.variant(side_model_id, true, R270, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_NORTH),
|
|
||||||
GBlockstate.variant(side_model_id, true, R180, R180))
|
|
||||||
/* Y AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_EAST),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_SOUTH),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_WEST),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_NORTH),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R270))
|
|
||||||
/* Z AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_EAST),
|
|
||||||
GBlockstate.variant(reverse_model_id, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_UP),
|
|
||||||
GBlockstate.variant(side_model_id, true, R180, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_WEST),
|
|
||||||
GBlockstate.variant(reverse_model_id, true, R180, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_DOWN),
|
|
||||||
GBlockstate.variant(side_model_id, true, R0, R270));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 2);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.input(ReFramed.HALF_STAIR, 2)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.VoxelHelper;
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
@ -18,7 +14,6 @@ import net.minecraft.world.BlockView;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.FACING;
|
import static net.minecraft.state.property.Properties.FACING;
|
||||||
import static net.minecraft.state.property.Properties.LAYERS;
|
import static net.minecraft.state.property.Properties.LAYERS;
|
||||||
|
|
||||||
@ -68,29 +63,6 @@ public class ReFramedLayerBlock extends ReFramedSlabBlock {
|
|||||||
return previous.with(LAYERS, previous.get(LAYERS) + 1);
|
return previous.with(LAYERS, previous.get(LAYERS) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartBlockStateSupplier getMultipart() {
|
|
||||||
String model_pattern = "layer_x_special";
|
|
||||||
MultipartBlockStateSupplier supplier = MultipartBlockStateSupplier.create(this);
|
|
||||||
for (int i = 1; i <= 8; i++) {
|
|
||||||
Identifier model = ReFramed.id(model_pattern.replace("x", i + ""));
|
|
||||||
supplier
|
|
||||||
.with(GBlockstate.when(FACING, Direction.DOWN, LAYERS, i),
|
|
||||||
GBlockstate.variant(model, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.SOUTH, LAYERS, i),
|
|
||||||
GBlockstate.variant(model, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.UP, LAYERS, i),
|
|
||||||
GBlockstate.variant(model, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.NORTH, LAYERS, i),
|
|
||||||
GBlockstate.variant(model, true, R270, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.WEST, LAYERS, i),
|
|
||||||
GBlockstate.variant(model, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.EAST, LAYERS, i),
|
|
||||||
GBlockstate.variant(model, true, R90, R270));
|
|
||||||
}
|
|
||||||
return supplier;
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
VoxelListBuilder builder = VoxelListBuilder.create(createCuboidShape(0, 0, 0, 16, 2, 16), 48)
|
VoxelListBuilder builder = VoxelListBuilder.create(createCuboidShape(0, 0, 0, 16, 2, 16), 48)
|
||||||
.add(createCuboidShape(0, 0, 0, 16, 4, 16))
|
.add(createCuboidShape(0, 0, 0, 16, 4, 16))
|
||||||
|
@ -1,18 +1,12 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.VoxelHelper;
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
@ -21,10 +15,9 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.AXIS;
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
|
|
||||||
public class ReFramedPillarBlock extends WaterloggableReFramedBlock implements BlockStateProvider {
|
public class ReFramedPillarBlock extends WaterloggableReFramedBlock {
|
||||||
|
|
||||||
public static final VoxelShape[] PILLAR_VOXELS;
|
public static final VoxelShape[] PILLAR_VOXELS;
|
||||||
|
|
||||||
@ -80,18 +73,6 @@ public class ReFramedPillarBlock extends WaterloggableReFramedBlock implements B
|
|||||||
return super.getThemeMap(state, new_state);
|
return super.getThemeMap(state, new_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
Identifier model_id = ReFramed.id("pillar_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
.with(GBlockstate.when(AXIS, Direction.Axis.X),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(AXIS, Direction.Axis.Y),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(AXIS, Direction.Axis.Z),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R0));
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final VoxelShape PILLAR = createCuboidShape(0, 4, 4, 16, 12, 12);
|
final VoxelShape PILLAR = createCuboidShape(0, 4, 4, 16, 12, 12);
|
||||||
PILLAR_VOXELS = VoxelHelper.VoxelListBuilder.create(PILLAR, 3)
|
PILLAR_VOXELS = VoxelHelper.VoxelListBuilder.create(PILLAR, 3)
|
||||||
|
@ -1,21 +1,12 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
@ -25,11 +16,10 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.AXIS;
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
import static net.minecraft.state.property.Properties.FACING;
|
import static net.minecraft.state.property.Properties.FACING;
|
||||||
|
|
||||||
public class ReFramedSlabBlock extends WaterloggableReFramedBlock implements BlockStateProvider {
|
public class ReFramedSlabBlock extends WaterloggableReFramedBlock {
|
||||||
|
|
||||||
protected static final VoxelShape DOWN = VoxelShapes.cuboid(0f, 0f, 0f, 1f, 0.5f, 1f);
|
protected static final VoxelShape DOWN = VoxelShapes.cuboid(0f, 0f, 0f, 1f, 0.5f, 1f);
|
||||||
protected static final VoxelShape UP = VoxelShapes.cuboid(0f, 0.5f, 0f, 1f, 1f, 1f);
|
protected static final VoxelShape UP = VoxelShapes.cuboid(0f, 0.5f, 0f, 1f, 1f, 1f);
|
||||||
@ -108,34 +98,4 @@ public class ReFramedSlabBlock extends WaterloggableReFramedBlock implements Blo
|
|||||||
if (new_state.isOf(ReFramed.SLABS_CUBE)) return Map.of(1, state.get(FACING).getDirection() == Direction.AxisDirection.POSITIVE ? 2 : 1);
|
if (new_state.isOf(ReFramed.SLABS_CUBE)) return Map.of(1, state.get(FACING).getDirection() == Direction.AxisDirection.POSITIVE ? 2 : 1);
|
||||||
return super.getThemeMap(state, new_state);
|
return super.getThemeMap(state, new_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartBlockStateSupplier getMultipart() {
|
|
||||||
Identifier model_id = ReFramed.id("slab_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
.with(GBlockstate.when(FACING, Direction.DOWN),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.SOUTH),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.UP),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.NORTH),
|
|
||||||
GBlockstate.variant(model_id, true, R270, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.WEST),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.EAST),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R270));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 2);
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this, 6)
|
|
||||||
.pattern("III")
|
|
||||||
.input('I', ReFramed.CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,28 +1,17 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import static fr.adrien1106.reframed.block.ReFramedSlabBlock.*;
|
import static fr.adrien1106.reframed.block.ReFramedSlabBlock.*;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.AXIS;
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
|
|
||||||
public class ReFramedSlabsCubeBlock extends ReFramedDoubleBlock implements BlockStateProvider {
|
public class ReFramedSlabsCubeBlock extends ReFramedDoubleBlock {
|
||||||
|
|
||||||
public ReFramedSlabsCubeBlock(Settings settings) {
|
public ReFramedSlabsCubeBlock(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
@ -63,27 +52,4 @@ public class ReFramedSlabsCubeBlock extends ReFramedDoubleBlock implements Block
|
|||||||
public int getTopThemeIndex(BlockState state) {
|
public int getTopThemeIndex(BlockState state) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartBlockStateSupplier getMultipart() {
|
|
||||||
Identifier model_id = ReFramed.id("double_slab_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
.with(GBlockstate.when(AXIS, Direction.Axis.Y),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(AXIS, Direction.Axis.Z),
|
|
||||||
GBlockstate.variant(model_id, true, R270, R0))
|
|
||||||
.with(GBlockstate.when(AXIS, Direction.Axis.X),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R90));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.input(ReFramed.SLAB, 2)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,15 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.VoxelHelper;
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Corner;
|
import fr.adrien1106.reframed.util.blocks.Corner;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
@ -33,10 +23,9 @@ import java.util.Map;
|
|||||||
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.*;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.*;
|
||||||
import static fr.adrien1106.reframed.util.blocks.Corner.*;
|
import static fr.adrien1106.reframed.util.blocks.Corner.*;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.WATERLOGGED;
|
import static net.minecraft.state.property.Properties.WATERLOGGED;
|
||||||
|
|
||||||
public class ReFramedSmallCubeBlock extends WaterloggableReFramedBlock implements BlockStateProvider {
|
public class ReFramedSmallCubeBlock extends WaterloggableReFramedBlock {
|
||||||
|
|
||||||
public static final VoxelShape[] SMALL_CUBE_VOXELS;
|
public static final VoxelShape[] SMALL_CUBE_VOXELS;
|
||||||
|
|
||||||
@ -159,39 +148,6 @@ public class ReFramedSmallCubeBlock extends WaterloggableReFramedBlock implement
|
|||||||
return super.getThemeMap(state, new_state);
|
return super.getThemeMap(state, new_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
Identifier small_cube_id = ReFramed.id("small_cube_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R0, R180))
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R180, R90))
|
|
||||||
.with(GBlockstate.when(CORNER, WEST_NORTH_UP),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(CORNER, NORTH_EAST_UP),
|
|
||||||
GBlockstate.variant(small_cube_id, true, R180, R270));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 8);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this, 8)
|
|
||||||
.input(ReFramed.CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final VoxelShape SMALL_CUBE = VoxelShapes.cuboid(.5f, 0f, 0f, 1f, .5f, .5f);
|
final VoxelShape SMALL_CUBE = VoxelShapes.cuboid(.5f, 0f, 0f, 1f, .5f, .5f);
|
||||||
|
|
||||||
|
@ -1,24 +1,13 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Corner;
|
import fr.adrien1106.reframed.util.blocks.Corner;
|
||||||
import fr.adrien1106.reframed.util.blocks.Edge;
|
import fr.adrien1106.reframed.util.blocks.Edge;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
import net.minecraft.world.BlockView;
|
import net.minecraft.world.BlockView;
|
||||||
@ -27,11 +16,9 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import static fr.adrien1106.reframed.block.ReFramedSmallCubeBlock.SMALL_CUBE_VOXELS;
|
import static fr.adrien1106.reframed.block.ReFramedSmallCubeBlock.SMALL_CUBE_VOXELS;
|
||||||
import static fr.adrien1106.reframed.block.ReFramedStepBlock.getStepShape;
|
import static fr.adrien1106.reframed.block.ReFramedStepBlock.getStepShape;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.util.shape.VoxelShapes.empty;
|
import static net.minecraft.util.shape.VoxelShapes.empty;
|
||||||
|
|
||||||
public class ReFramedSmallCubesStepBlock extends WaterloggableReFramedDoubleBlock implements BlockStateProvider {
|
public class ReFramedSmallCubesStepBlock extends WaterloggableReFramedDoubleBlock {
|
||||||
|
|
||||||
public ReFramedSmallCubesStepBlock(Settings settings) {
|
public ReFramedSmallCubesStepBlock(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
@ -85,49 +72,4 @@ public class ReFramedSmallCubesStepBlock extends WaterloggableReFramedDoubleBloc
|
|||||||
public int getTopThemeIndex(BlockState state) {
|
public int getTopThemeIndex(BlockState state) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
Identifier model_id = ReFramed.id("small_cubes_step_special");
|
|
||||||
Identifier reverse_model_id = ReFramed.id("small_cubes_step_reverse_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
/* X AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_EAST),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_UP),
|
|
||||||
GBlockstate.variant(reverse_model_id, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_WEST),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_DOWN),
|
|
||||||
GBlockstate.variant(reverse_model_id, true, R0, R180))
|
|
||||||
/* Y AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_SOUTH),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_WEST),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_NORTH),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_EAST),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R270))
|
|
||||||
/* Z AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_SOUTH),
|
|
||||||
GBlockstate.variant(reverse_model_id, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_DOWN),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_NORTH),
|
|
||||||
GBlockstate.variant(reverse_model_id, true, R180, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_UP),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R90));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 4);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.input(ReFramed.SMALL_CUBE, 2)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,16 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.VoxelHelper;
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Edge;
|
import fr.adrien1106.reframed.util.blocks.Edge;
|
||||||
import fr.adrien1106.reframed.util.blocks.StairShape;
|
import fr.adrien1106.reframed.util.blocks.StairShape;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.When;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.function.BooleanBiFunction;
|
import net.minecraft.util.function.BooleanBiFunction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
@ -37,11 +27,9 @@ import java.util.stream.Stream;
|
|||||||
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
|
||||||
import static fr.adrien1106.reframed.util.blocks.StairShape.*;
|
import static fr.adrien1106.reframed.util.blocks.StairShape.*;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
|
|
||||||
public class ReFramedStairBlock extends WaterloggableReFramedBlock implements BlockStateProvider {
|
public class ReFramedStairBlock extends WaterloggableReFramedBlock {
|
||||||
public static final VoxelShape[] STAIR_VOXELS;
|
public static final VoxelShape[] STAIR_VOXELS;
|
||||||
private record ModelCacheKey(Edge edge, StairShape shape) {}
|
private record ModelCacheKey(Edge edge, StairShape shape) {}
|
||||||
|
|
||||||
@ -128,248 +116,6 @@ public class ReFramedStairBlock extends WaterloggableReFramedBlock implements Bl
|
|||||||
return super.getThemeMap(state, new_state);
|
return super.getThemeMap(state, new_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartBlockStateSupplier getMultipart() {
|
|
||||||
return getStairMultipart(this, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static MultipartBlockStateSupplier getStairMultipart(Block block, boolean is_double) {
|
|
||||||
String infix = is_double ? "s_cube" : "";
|
|
||||||
Identifier straight_id = ReFramed.id("stair" + infix + "_special");
|
|
||||||
Identifier double_outer_id = ReFramed.id("outers_stair" + infix + "_special");
|
|
||||||
Identifier inner_id = ReFramed.id("inner_stair" + infix + "_special");
|
|
||||||
Identifier outer_id = ReFramed.id("outer_stair" + infix + "_special");
|
|
||||||
Identifier outer_side_id = ReFramed.id("outer_side_stair" + infix + "_special");
|
|
||||||
return MultipartBlockStateSupplier.create(block)
|
|
||||||
/* STRAIGHT X AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R0, R180))
|
|
||||||
/* STRAIGHT Y AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R90, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R90, R270))
|
|
||||||
/* STRAIGHT Z AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R180, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, STRAIGHT),
|
|
||||||
GBlockstate.variant(straight_id, true, R180, R90))
|
|
||||||
/* INNER BOTTOM */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, INNER_RIGHT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R0, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, INNER_RIGHT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R0, R270))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, INNER_LEFT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R0, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, INNER_LEFT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R0, R90))
|
|
||||||
/* INNER TOP */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, INNER_LEFT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R180, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, INNER_LEFT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R180, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, INNER_LEFT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R180, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, INNER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, INNER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, INNER_RIGHT)),
|
|
||||||
GBlockstate.variant(inner_id, true, R180, R270))
|
|
||||||
/* OUTER BOTTOM */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R0, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R0, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R0, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R0, R270))
|
|
||||||
/* OUTER TOP */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R180, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R180, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R180, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_id, true, R180, R270))
|
|
||||||
/* OUTER EAST */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R0, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R90, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R180, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R270, R0))
|
|
||||||
/* OUTER SOUTH */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R0, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R90, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R180, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R270, R90))
|
|
||||||
/* OUTER WEST */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R0, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R90, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R180, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R270, R180))
|
|
||||||
/* OUTER NORTH */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R0, R270))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R90, R270))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R180, R270))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(outer_side_id, true, R270, R270))
|
|
||||||
/* OUTER BOTTOM */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R0, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R0, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R0, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, OUTER_RIGHT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R0, R270))
|
|
||||||
/* OUTER TOP */
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R180, R0))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R180, R90))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, OUTER_LEFT),
|
|
||||||
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R180, R180))
|
|
||||||
.with(When.anyOf(
|
|
||||||
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, OUTER_RIGHT),
|
|
||||||
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, OUTER_LEFT)),
|
|
||||||
GBlockstate.variant(double_outer_id, true, R180, R270));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE);
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this, 4)
|
|
||||||
.pattern("I ")
|
|
||||||
.pattern("II ")
|
|
||||||
.pattern("III")
|
|
||||||
.input('I', ReFramed.CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final VoxelShape STRAIGHT = VoxelShapes.combineAndSimplify(
|
final VoxelShape STRAIGHT = VoxelShapes.combineAndSimplify(
|
||||||
createCuboidShape(0, 8, 0, 16, 16, 8),
|
createCuboidShape(0, 8, 0, 16, 16, 8),
|
||||||
|
@ -1,19 +1,11 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Edge;
|
import fr.adrien1106.reframed.util.blocks.Edge;
|
||||||
import fr.adrien1106.reframed.util.blocks.StairShape;
|
import fr.adrien1106.reframed.util.blocks.StairShape;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
@ -27,7 +19,7 @@ import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
|||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
||||||
|
|
||||||
public class ReFramedStairsCubeBlock extends ReFramedDoubleBlock implements BlockStateProvider {
|
public class ReFramedStairsCubeBlock extends ReFramedDoubleBlock {
|
||||||
|
|
||||||
private static final VoxelShape[] STAIRS_CUBE_VOXELS = VoxelListBuilder.buildFrom(STAIR_VOXELS);
|
private static final VoxelShape[] STAIRS_CUBE_VOXELS = VoxelListBuilder.buildFrom(STAIR_VOXELS);
|
||||||
private record ModelCacheKey(Edge edge, StairShape shape) {}
|
private record ModelCacheKey(Edge edge, StairShape shape) {}
|
||||||
@ -80,21 +72,4 @@ public class ReFramedStairsCubeBlock extends ReFramedDoubleBlock implements Bloc
|
|||||||
StairShape shape = state.get(STAIR_SHAPE);
|
StairShape shape = state.get(STAIR_SHAPE);
|
||||||
return i == 2 ? STAIRS_CUBE_VOXELS[edge.getID() * 9 + shape.getID()] : getStairShape(edge, shape);
|
return i == 2 ? STAIRS_CUBE_VOXELS[edge.getID() * 9 + shape.getID()] : getStairShape(edge, shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartBlockStateSupplier getMultipart() {
|
|
||||||
return getStairMultipart(this, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.input(ReFramed.STAIR)
|
|
||||||
.input(ReFramed.STEP)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,25 +1,15 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.VoxelHelper;
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Edge;
|
import fr.adrien1106.reframed.util.blocks.Edge;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
@ -32,12 +22,10 @@ import java.util.Map;
|
|||||||
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
import static fr.adrien1106.reframed.util.VoxelHelper.VoxelListBuilder;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
||||||
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.*;
|
import static net.minecraft.state.property.Properties.*;
|
||||||
import static net.minecraft.state.property.Properties.WATERLOGGED;
|
import static net.minecraft.state.property.Properties.WATERLOGGED;
|
||||||
|
|
||||||
public class ReFramedStepBlock extends WaterloggableReFramedBlock implements BlockStateProvider {
|
public class ReFramedStepBlock extends WaterloggableReFramedBlock {
|
||||||
|
|
||||||
public static final VoxelShape[] STEP_VOXELS;
|
public static final VoxelShape[] STEP_VOXELS;
|
||||||
|
|
||||||
@ -164,51 +152,6 @@ public class ReFramedStepBlock extends WaterloggableReFramedBlock implements Blo
|
|||||||
return super.getThemeMap(state, new_state);
|
return super.getThemeMap(state, new_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockStateSupplier getMultipart() {
|
|
||||||
Identifier model_id = ReFramed.id("step_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
/* X AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_EAST),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_UP),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_WEST),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_DOWN),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R180))
|
|
||||||
/* Y AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, EAST_SOUTH),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_WEST),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, WEST_NORTH),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R180))
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_EAST),
|
|
||||||
GBlockstate.variant(model_id, true, R90, R270))
|
|
||||||
/* Z AXIS */
|
|
||||||
.with(GBlockstate.when(EDGE, DOWN_SOUTH),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R90))
|
|
||||||
.with(GBlockstate.when(EDGE, NORTH_DOWN),
|
|
||||||
GBlockstate.variant(model_id, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, UP_NORTH),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R270))
|
|
||||||
.with(GBlockstate.when(EDGE, SOUTH_UP),
|
|
||||||
GBlockstate.variant(model_id, true, R180, R90));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 4);
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this, 8)
|
|
||||||
.pattern("II")
|
|
||||||
.input('I', ReFramed.CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
final VoxelShape STEP = createCuboidShape(0, 0, 0, 16, 8, 8);
|
final VoxelShape STEP = createCuboidShape(0, 0, 0, 16, 8, 8);
|
||||||
|
|
||||||
|
@ -1,22 +1,12 @@
|
|||||||
package fr.adrien1106.reframed.block;
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
|
||||||
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
|
||||||
import fr.adrien1106.reframed.generator.GBlockstate;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
import fr.adrien1106.reframed.util.blocks.BlockHelper;
|
||||||
import fr.adrien1106.reframed.util.blocks.Edge;
|
import fr.adrien1106.reframed.util.blocks.Edge;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ShapeContext;
|
import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.RecipeProvider;
|
|
||||||
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.util.Identifier;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.math.Direction.Axis;
|
import net.minecraft.util.math.Direction.Axis;
|
||||||
@ -27,12 +17,11 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
|
|
||||||
import static fr.adrien1106.reframed.block.ReFramedSlabBlock.getSlabShape;
|
import static fr.adrien1106.reframed.block.ReFramedSlabBlock.getSlabShape;
|
||||||
import static fr.adrien1106.reframed.block.ReFramedStepBlock.getStepShape;
|
import static fr.adrien1106.reframed.block.ReFramedStepBlock.getStepShape;
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
|
||||||
import static net.minecraft.state.property.Properties.AXIS;
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
import static net.minecraft.state.property.Properties.FACING;
|
import static net.minecraft.state.property.Properties.FACING;
|
||||||
import static net.minecraft.util.shape.VoxelShapes.empty;
|
import static net.minecraft.util.shape.VoxelShapes.empty;
|
||||||
|
|
||||||
public class ReFramedStepsSlabBlock extends WaterloggableReFramedDoubleBlock implements BlockStateProvider {
|
public class ReFramedStepsSlabBlock extends WaterloggableReFramedDoubleBlock {
|
||||||
private record ModelCacheKey(Direction facing, Axis axis) {}
|
private record ModelCacheKey(Direction facing, Axis axis) {}
|
||||||
|
|
||||||
public ReFramedStepsSlabBlock(Settings settings) {
|
public ReFramedStepsSlabBlock(Settings settings) {
|
||||||
@ -90,47 +79,4 @@ public class ReFramedStepsSlabBlock extends WaterloggableReFramedDoubleBlock imp
|
|||||||
public int getTopThemeIndex(BlockState state) {
|
public int getTopThemeIndex(BlockState state) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public MultipartBlockStateSupplier getMultipart() {
|
|
||||||
Identifier step_id = ReFramed.id("steps_slab_special");
|
|
||||||
Identifier step_side_id = ReFramed.id("steps_slab_side_special");
|
|
||||||
return MultipartBlockStateSupplier.create(this)
|
|
||||||
.with(GBlockstate.when(FACING, Direction.DOWN, AXIS, Axis.X),
|
|
||||||
GBlockstate.variant(step_id, true, R0, R180))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.DOWN, AXIS, Axis.Z),
|
|
||||||
GBlockstate.variant(step_id, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.UP, AXIS, Axis.X),
|
|
||||||
GBlockstate.variant(step_id, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.UP, AXIS, Axis.Z),
|
|
||||||
GBlockstate.variant(step_id, true, R180, R270))
|
|
||||||
|
|
||||||
.with(GBlockstate.when(FACING, Direction.EAST, AXIS, Axis.Z),
|
|
||||||
GBlockstate.variant(step_side_id, true, R0, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.EAST, AXIS, Axis.Y),
|
|
||||||
GBlockstate.variant(step_side_id, true, R90, R0))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.SOUTH, AXIS, Axis.X),
|
|
||||||
GBlockstate.variant(step_side_id, true, R180, R90))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.SOUTH, AXIS, Axis.Y),
|
|
||||||
GBlockstate.variant(step_side_id, true, R90, R90))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.WEST, AXIS, Axis.Z),
|
|
||||||
GBlockstate.variant(step_side_id, true, R180, R180))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.WEST, AXIS, Axis.Y),
|
|
||||||
GBlockstate.variant(step_side_id, true, R90, R180))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.NORTH, AXIS, Axis.X),
|
|
||||||
GBlockstate.variant(step_side_id, true, R0, R270))
|
|
||||||
.with(GBlockstate.when(FACING, Direction.NORTH, AXIS, Axis.Y),
|
|
||||||
GBlockstate.variant(step_side_id, true, R90, R270));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, this, ReFramed.CUBE, 2);
|
|
||||||
ShapelessRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.BUILDING_BLOCKS, this)
|
|
||||||
.input(ReFramed.STEP, 2)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,217 @@
|
|||||||
|
package fr.adrien1106.reframed.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.util.VoxelHelper;
|
||||||
|
import net.minecraft.block.*;
|
||||||
|
import net.minecraft.block.enums.WallShape;
|
||||||
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
|
import net.minecraft.registry.tag.BlockTags;
|
||||||
|
import net.minecraft.state.StateManager;
|
||||||
|
import net.minecraft.state.property.Property;
|
||||||
|
import net.minecraft.util.function.BooleanBiFunction;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
|
import net.minecraft.util.shape.VoxelShapes;
|
||||||
|
import net.minecraft.world.BlockView;
|
||||||
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraft.world.WorldAccess;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static net.minecraft.state.property.Properties.*;
|
||||||
|
|
||||||
|
public class ReframedWallBlock extends WaterloggableReFramedBlock {
|
||||||
|
|
||||||
|
public static final VoxelShape[] WALL_VOXELS;
|
||||||
|
|
||||||
|
private record ModelCacheKey(boolean up, WallShape east, WallShape north, WallShape west, WallShape south) {}
|
||||||
|
|
||||||
|
public ReframedWallBlock(Settings settings) {
|
||||||
|
super(settings);
|
||||||
|
setDefaultState(getDefaultState()
|
||||||
|
.with(UP, true)
|
||||||
|
.with(EAST_WALL_SHAPE, WallShape.NONE)
|
||||||
|
.with(NORTH_WALL_SHAPE, WallShape.NONE)
|
||||||
|
.with(WEST_WALL_SHAPE, WallShape.NONE)
|
||||||
|
.with(SOUTH_WALL_SHAPE, WallShape.NONE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getModelCacheKey(BlockState state) {
|
||||||
|
return new ModelCacheKey(
|
||||||
|
state.get(UP),
|
||||||
|
state.get(EAST_WALL_SHAPE),
|
||||||
|
state.get(NORTH_WALL_SHAPE),
|
||||||
|
state.get(WEST_WALL_SHAPE),
|
||||||
|
state.get(SOUTH_WALL_SHAPE)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getModelStateCount() {
|
||||||
|
return 162;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
|
||||||
|
super.appendProperties(builder.add(UP, EAST_WALL_SHAPE, NORTH_WALL_SHAPE, SOUTH_WALL_SHAPE, WEST_WALL_SHAPE));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockState getStateForNeighborUpdate(BlockState state, Direction dir, BlockState other_state, WorldAccess world, BlockPos pos, BlockPos moved) {
|
||||||
|
BlockState new_state = super.getStateForNeighborUpdate(state, dir, other_state, world, pos, moved);
|
||||||
|
if (dir == Direction.DOWN) return new_state;
|
||||||
|
BlockState top_state = dir == Direction.UP? other_state: world.getBlockState(pos.up());
|
||||||
|
boolean fs = top_state.isSideSolidFullSquare(world, pos.up(), Direction.DOWN);
|
||||||
|
VoxelShape top_shape = fs ? null : top_state.getCollisionShape(world, pos.up()).getFace(Direction.DOWN);
|
||||||
|
if (dir == Direction.UP) {
|
||||||
|
for (Direction d : Direction.Type.HORIZONTAL) {
|
||||||
|
Property<WallShape> wall_shape = getWallShape(d);
|
||||||
|
if (state.get(wall_shape) == WallShape.NONE) continue;
|
||||||
|
new_state = new_state.with(
|
||||||
|
wall_shape,
|
||||||
|
fs
|
||||||
|
|| (top_state.contains(wall_shape) && top_state.get(wall_shape) != WallShape.NONE)
|
||||||
|
|| shouldUseTall(WALL_VOXELS[dir.ordinal() + 3], top_shape)
|
||||||
|
? WallShape.TALL
|
||||||
|
: WallShape.LOW
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return new_state.with(UP, shouldHavePost(new_state, top_state, top_shape));
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean side_full = other_state.isSideSolidFullSquare(world, moved, dir.getOpposite());
|
||||||
|
if (shouldConnectTo(other_state, side_full, dir.getOpposite())) {
|
||||||
|
new_state = new_state.with(
|
||||||
|
getWallShape(dir),
|
||||||
|
fs || shouldUseTall(WALL_VOXELS[dir.ordinal() + 3], top_shape)
|
||||||
|
? WallShape.TALL
|
||||||
|
: WallShape.LOW
|
||||||
|
);
|
||||||
|
} else new_state = new_state.with(getWallShape(dir), WallShape.NONE);
|
||||||
|
return new_state.with(UP, shouldHavePost(new_state, top_state, top_shape));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||||
|
BlockState state = super.getPlacementState(ctx);
|
||||||
|
World world = ctx.getWorld();
|
||||||
|
BlockPos pos = ctx.getBlockPos();
|
||||||
|
BlockState top_state = world.getBlockState(pos.up());
|
||||||
|
boolean fs = top_state.isSideSolidFullSquare(world, pos.up(), Direction.DOWN);
|
||||||
|
VoxelShape top_shape = fs ? null : top_state.getCollisionShape(world, pos.up()).getFace(Direction.DOWN);
|
||||||
|
for (Direction dir : Direction.Type.HORIZONTAL) {
|
||||||
|
BlockPos offset = pos.offset(dir);
|
||||||
|
BlockState neighbor = world.getBlockState(offset);
|
||||||
|
boolean side_full = neighbor.isSideSolidFullSquare(world, offset, dir.getOpposite());
|
||||||
|
if (shouldConnectTo(neighbor, side_full, dir.getOpposite())) {
|
||||||
|
state = state.with(
|
||||||
|
getWallShape(dir),
|
||||||
|
fs || shouldUseTall(WALL_VOXELS[dir.ordinal() + 3], top_shape)
|
||||||
|
? WallShape.TALL
|
||||||
|
: WallShape.LOW
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return state.with(UP, shouldHavePost(state, top_state, top_shape));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStateReplaced(BlockState state, World world, BlockPos pos, BlockState new_state, boolean moved) {
|
||||||
|
super.onStateReplaced(state, world, pos, new_state, moved);
|
||||||
|
|
||||||
|
if(!state.isOf(new_state.getBlock())) world.removeBlockEntity(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
|
||||||
|
VoxelShape shape = state.get(UP) ? WALL_VOXELS[0]: VoxelShapes.empty();
|
||||||
|
for (Direction dir : Direction.Type.HORIZONTAL) {
|
||||||
|
WallShape wall_shape = state.get(getWallShape(dir));
|
||||||
|
if (wall_shape != WallShape.NONE)
|
||||||
|
shape = VoxelShapes.union(shape, WALL_VOXELS[1 + (wall_shape.ordinal()-1) * 4 + (dir.ordinal() - 2)]);
|
||||||
|
}
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ctx) {
|
||||||
|
VoxelShape shape = state.get(UP) ? WALL_VOXELS[9]: VoxelShapes.empty();
|
||||||
|
for (Direction dir : Direction.Type.HORIZONTAL) {
|
||||||
|
if (state.get(getWallShape(dir)) != WallShape.NONE)
|
||||||
|
shape = VoxelShapes.union(shape, WALL_VOXELS[8 + dir.ordinal()]);
|
||||||
|
}
|
||||||
|
return shape;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean shouldHavePost(BlockState state, BlockState top_state, VoxelShape top_shape) {
|
||||||
|
// above has post
|
||||||
|
if (top_state.contains(NORTH_WALL_SHAPE) && top_state.get(UP)) return true;
|
||||||
|
|
||||||
|
if (Stream.of(Direction.SOUTH, Direction.EAST) // Opposites are different
|
||||||
|
.anyMatch(dir -> state.get(getWallShape(dir)) != state.get(getWallShape(dir.getOpposite())))
|
||||||
|
) return true;
|
||||||
|
|
||||||
|
// no sides
|
||||||
|
if (Direction.Type.HORIZONTAL.stream().allMatch(dir -> state.get(getWallShape(dir)) == WallShape.NONE))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// tall Matching sides
|
||||||
|
if (Stream.of(Direction.SOUTH, Direction.EAST)
|
||||||
|
.anyMatch(dir ->
|
||||||
|
state.get(getWallShape(dir)) == WallShape.TALL
|
||||||
|
&& state.get(getWallShape(dir.getOpposite())) == WallShape.TALL
|
||||||
|
)) return false;
|
||||||
|
|
||||||
|
return top_state.isIn(BlockTags.WALL_POST_OVERRIDE) || top_shape == null || shouldUseTall(WALL_VOXELS[0], top_shape);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean shouldConnectTo(BlockState state, boolean side_full, Direction side) {
|
||||||
|
Block block = state.getBlock();
|
||||||
|
boolean bl = block instanceof FenceGateBlock && FenceGateBlock.canWallConnect(state, side);
|
||||||
|
return state.isIn(BlockTags.WALLS) || !WallBlock.cannotConnect(state) && side_full || block instanceof PaneBlock || bl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean shouldUseTall(VoxelShape self_shape, VoxelShape other_shape) {
|
||||||
|
return !VoxelShapes.matchesAnywhere(
|
||||||
|
self_shape,
|
||||||
|
other_shape,
|
||||||
|
BooleanBiFunction.ONLY_FIRST
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Property<WallShape> getWallShape(Direction dir) {
|
||||||
|
return switch (dir) {
|
||||||
|
case EAST -> EAST_WALL_SHAPE;
|
||||||
|
case NORTH -> NORTH_WALL_SHAPE;
|
||||||
|
case WEST -> WEST_WALL_SHAPE;
|
||||||
|
case SOUTH -> SOUTH_WALL_SHAPE;
|
||||||
|
default -> null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
VoxelShape POST = createCuboidShape(4, 0, 4, 12, 16, 12);
|
||||||
|
VoxelShape POST_COLLISION = createCuboidShape(4, 0, 4, 12, 24, 12);
|
||||||
|
VoxelShape LOW = createCuboidShape(5, 0, 0, 11, 14, 8);
|
||||||
|
VoxelShape TALL = createCuboidShape(5, 0, 0, 11, 16, 8);
|
||||||
|
VoxelShape SIDE_COLLISION = createCuboidShape(5, 0, 0, 11, 24, 8);
|
||||||
|
WALL_VOXELS = VoxelHelper.VoxelListBuilder.create(POST, 14)
|
||||||
|
.add(LOW)
|
||||||
|
.add(VoxelHelper::mirrorZ)
|
||||||
|
.add(VoxelHelper::rotateY)
|
||||||
|
.add(VoxelHelper::mirrorX)
|
||||||
|
.add(TALL)
|
||||||
|
.add(VoxelHelper::mirrorZ)
|
||||||
|
.add(VoxelHelper::rotateY)
|
||||||
|
.add(VoxelHelper::mirrorX)
|
||||||
|
.add(POST_COLLISION)
|
||||||
|
.add(SIDE_COLLISION)
|
||||||
|
.add(VoxelHelper::mirrorZ)
|
||||||
|
.add(VoxelHelper::rotateY)
|
||||||
|
.add(VoxelHelper::mirrorX)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
@ -27,70 +27,110 @@ public class ReFramedClient implements ClientModInitializer {
|
|||||||
BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), ReFramed.BLOCKS.toArray(new Block[0]));
|
BlockRenderLayerMap.INSTANCE.putBlocks(RenderLayer.getCutout(), ReFramed.BLOCKS.toArray(new Block[0]));
|
||||||
|
|
||||||
// CUBE
|
// CUBE
|
||||||
HELPER.addReFramedModel("cube_special" , HELPER.auto(new Identifier("block/cube")));
|
HELPER.addReFramedModel("cube" , HELPER.auto(new Identifier("block/cube")));
|
||||||
// SMALL_CUBE
|
// SMALL_CUBE
|
||||||
HELPER.addReFramedModel("small_cube_special" , HELPER.auto(ReFramed.id("block/small_cube/base")));
|
HELPER.addReFramedModel("small_cube" , HELPER.auto(ReFramed.id("block/small_cube/base")));
|
||||||
// SMALL_CUBES_STEP
|
// SMALL_CUBES_STEP
|
||||||
HELPER.addReFramedModel("small_cubes_step_special" , HELPER.autoDouble(ReFramed.id("block/small_cube/base"), ReFramed.id("block/small_cube/step/base")));
|
HELPER.addReFramedModel("small_cubes_step" , HELPER.autoDouble(ReFramed.id("block/small_cube/base"), ReFramed.id("block/small_cube/step/base")));
|
||||||
HELPER.addReFramedModel("small_cubes_step_reverse_special" , HELPER.autoDouble(ReFramed.id("block/small_cube/step/base"), ReFramed.id("block/small_cube/base")));
|
HELPER.addReFramedModel("small_cubes_step_reverse" , HELPER.autoDouble(ReFramed.id("block/small_cube/step/base"), ReFramed.id("block/small_cube/base")));
|
||||||
// SLAB
|
// SLAB
|
||||||
HELPER.addReFramedModel("slab_special" , HELPER.auto(new Identifier("block/slab")));
|
HELPER.addReFramedModel("slab" , HELPER.auto(new Identifier("block/slab")));
|
||||||
// SLAB_CUBE
|
// SLAB_CUBE
|
||||||
HELPER.addReFramedModel("double_slab_special" , HELPER.autoDouble(new Identifier("block/slab"), new Identifier("block/slab_top")));
|
HELPER.addReFramedModel("double_slab" , HELPER.autoDouble(new Identifier("block/slab"), new Identifier("block/slab_top")));
|
||||||
// STAIR
|
// STAIR
|
||||||
HELPER.addReFramedModel("stair_special" , HELPER.auto(ReFramed.id("block/stair/straight")));
|
HELPER.addReFramedModel("stair" , HELPER.auto(ReFramed.id("block/stair/straight")));
|
||||||
HELPER.addReFramedModel("outers_stair_special" , HELPER.auto(ReFramed.id("block/stair/double_outer")));
|
HELPER.addReFramedModel("outers_stair" , HELPER.auto(ReFramed.id("block/stair/double_outer")));
|
||||||
HELPER.addReFramedModel("inner_stair_special" , HELPER.auto(ReFramed.id("block/stair/inner")));
|
HELPER.addReFramedModel("inner_stair" , HELPER.auto(ReFramed.id("block/stair/inner")));
|
||||||
HELPER.addReFramedModel("outer_stair_special" , HELPER.auto(ReFramed.id("block/stair/outer")));
|
HELPER.addReFramedModel("outer_stair" , HELPER.auto(ReFramed.id("block/stair/outer")));
|
||||||
HELPER.addReFramedModel("outer_side_stair_special" , HELPER.auto(ReFramed.id("block/stair/outer_side")));
|
HELPER.addReFramedModel("outer_side_stair" , HELPER.auto(ReFramed.id("block/stair/outer_side")));
|
||||||
// STAIRS_CUBE
|
// STAIRS_CUBE
|
||||||
HELPER.addReFramedModel("stairs_cube_special" , HELPER.autoDouble(ReFramed.id("block/stair/straight"), ReFramed.id("block/stair/cube/straight")));
|
HELPER.addReFramedModel("stairs_cube" , HELPER.autoDouble(ReFramed.id("block/stair/straight"), ReFramed.id("block/stair/cube/straight")));
|
||||||
HELPER.addReFramedModel("outers_stairs_cube_special" , HELPER.autoDouble(ReFramed.id("block/stair/double_outer"), ReFramed.id("block/stair/cube/double_outer")));
|
HELPER.addReFramedModel("outers_stairs_cube" , HELPER.autoDouble(ReFramed.id("block/stair/double_outer"), ReFramed.id("block/stair/cube/double_outer")));
|
||||||
HELPER.addReFramedModel("inner_stairs_cube_special" , HELPER.autoDouble(ReFramed.id("block/stair/inner"), ReFramed.id("block/stair/cube/inner")));
|
HELPER.addReFramedModel("inner_stairs_cube" , HELPER.autoDouble(ReFramed.id("block/stair/inner"), ReFramed.id("block/stair/cube/inner")));
|
||||||
HELPER.addReFramedModel("outer_stairs_cube_special" , HELPER.autoDouble(ReFramed.id("block/stair/outer"), ReFramed.id("block/stair/cube/outer")));
|
HELPER.addReFramedModel("outer_stairs_cube" , HELPER.autoDouble(ReFramed.id("block/stair/outer"), ReFramed.id("block/stair/cube/outer")));
|
||||||
HELPER.addReFramedModel("outer_side_stairs_cube_special" , HELPER.autoDouble(ReFramed.id("block/stair/outer_side"), ReFramed.id("block/stair/cube/outer_side")));
|
HELPER.addReFramedModel("outer_side_stairs_cube" , HELPER.autoDouble(ReFramed.id("block/stair/outer_side"), ReFramed.id("block/stair/cube/outer_side")));
|
||||||
// HALF_STAIR
|
// HALF_STAIR
|
||||||
HELPER.addReFramedModel("half_stair_down_special" , HELPER.auto(ReFramed.id("block/half_stair/down")));
|
HELPER.addReFramedModel("half_stair_down" , HELPER.auto(ReFramed.id("block/half_stair/down")));
|
||||||
HELPER.addReFramedModel("half_stair_side_special" , HELPER.auto(ReFramed.id("block/half_stair/side")));
|
HELPER.addReFramedModel("half_stair_side" , HELPER.auto(ReFramed.id("block/half_stair/side")));
|
||||||
// HALF_STAIRS_SLAB
|
// HALF_STAIRS_SLAB
|
||||||
HELPER.addReFramedModel("half_stairs_slab_down_special" , HELPER.autoDouble(ReFramed.id("block/half_stair/down"), ReFramed.id("block/half_stair/slab/down")));
|
HELPER.addReFramedModel("half_stairs_slab_down" , HELPER.autoDouble(ReFramed.id("block/half_stair/down"), ReFramed.id("block/half_stair/slab/down")));
|
||||||
HELPER.addReFramedModel("half_stairs_slab_side_special" , HELPER.autoDouble(ReFramed.id("block/half_stair/side"), ReFramed.id("block/half_stair/slab/side")));
|
HELPER.addReFramedModel("half_stairs_slab_side" , HELPER.autoDouble(ReFramed.id("block/half_stair/side"), ReFramed.id("block/half_stair/slab/side")));
|
||||||
// HALF_STAIRS_STAIR
|
// HALF_STAIRS_STAIR
|
||||||
HELPER.addReFramedModel("half_stairs_stair_down_special" , HELPER.autoDouble(ReFramed.id("block/half_stair/down"), ReFramed.id("block/half_stair/stair/down")));
|
HELPER.addReFramedModel("half_stairs_stair_down" , HELPER.autoDouble(ReFramed.id("block/half_stair/down"), ReFramed.id("block/half_stair/stair/down")));
|
||||||
HELPER.addReFramedModel("half_stairs_stair_side_special" , HELPER.autoDouble(ReFramed.id("block/half_stair/side"), ReFramed.id("block/half_stair/stair/side")));
|
HELPER.addReFramedModel("half_stairs_stair_side" , HELPER.autoDouble(ReFramed.id("block/half_stair/side"), ReFramed.id("block/half_stair/stair/side")));
|
||||||
HELPER.addReFramedModel("half_stairs_stair_reverse_special" , HELPER.autoDouble(ReFramed.id("block/half_stair/stair/side"), ReFramed.id("block/half_stair/side")));
|
HELPER.addReFramedModel("half_stairs_stair_reverse" , HELPER.autoDouble(ReFramed.id("block/half_stair/stair/side"), ReFramed.id("block/half_stair/side")));
|
||||||
// STEP
|
// STEP
|
||||||
HELPER.addReFramedModel("step_special" , HELPER.auto(ReFramed.id("block/step/down")));
|
HELPER.addReFramedModel("step" , HELPER.auto(ReFramed.id("block/step/down")));
|
||||||
// STEPS_SLAB
|
// STEPS_SLAB
|
||||||
HELPER.addReFramedModel("steps_slab_special" , HELPER.autoDouble(ReFramed.id("block/step/down"), ReFramed.id("block/step/slab/down")));
|
HELPER.addReFramedModel("steps_slab" , HELPER.autoDouble(ReFramed.id("block/step/down"), ReFramed.id("block/step/slab/down")));
|
||||||
HELPER.addReFramedModel("steps_slab_side_special" , HELPER.autoDouble(ReFramed.id("block/step/side"), ReFramed.id("block/step/slab/side")));
|
HELPER.addReFramedModel("steps_slab_side" , HELPER.autoDouble(ReFramed.id("block/step/side"), ReFramed.id("block/step/slab/side")));
|
||||||
// LAYER
|
// LAYER
|
||||||
HELPER.addReFramedModel("layer_1_special" , HELPER.auto(new Identifier("block/snow_height2")));
|
HELPER.addReFramedModel("layer_1" , HELPER.auto(new Identifier("block/snow_height2")));
|
||||||
HELPER.addReFramedModel("layer_2_special" , HELPER.auto(new Identifier("block/snow_height4")));
|
HELPER.addReFramedModel("layer_2" , HELPER.auto(new Identifier("block/snow_height4")));
|
||||||
HELPER.addReFramedModel("layer_3_special" , HELPER.auto(new Identifier("block/snow_height6")));
|
HELPER.addReFramedModel("layer_3" , HELPER.auto(new Identifier("block/snow_height6")));
|
||||||
HELPER.addReFramedModel("layer_4_special" , HELPER.auto(new Identifier("block/snow_height8")));
|
HELPER.addReFramedModel("layer_4" , HELPER.auto(new Identifier("block/snow_height8")));
|
||||||
HELPER.addReFramedModel("layer_5_special" , HELPER.auto(new Identifier("block/snow_height10")));
|
HELPER.addReFramedModel("layer_5" , HELPER.auto(new Identifier("block/snow_height10")));
|
||||||
HELPER.addReFramedModel("layer_6_special" , HELPER.auto(new Identifier("block/snow_height12")));
|
HELPER.addReFramedModel("layer_6" , HELPER.auto(new Identifier("block/snow_height12")));
|
||||||
HELPER.addReFramedModel("layer_7_special" , HELPER.auto(new Identifier("block/snow_height14")));
|
HELPER.addReFramedModel("layer_7" , HELPER.auto(new Identifier("block/snow_height14")));
|
||||||
HELPER.addReFramedModel("layer_8_special" , HELPER.auto(new Identifier("block/cube")));
|
HELPER.addReFramedModel("layer_8" , HELPER.auto(new Identifier("block/cube")));
|
||||||
// PILLAR
|
// PILLAR
|
||||||
HELPER.addReFramedModel("pillar_special" , HELPER.auto(ReFramed.id("block/pillar")));
|
HELPER.addReFramedModel("pillar" , HELPER.auto(ReFramed.id("block/pillar")));
|
||||||
|
// WALL
|
||||||
|
HELPER.addReFramedModel("wall_inventory" , HELPER.auto(ReFramed.id("block/wall/inventory/default")));
|
||||||
|
// --------------------- pillar
|
||||||
|
HELPER.addReFramedModel("wall_core" , HELPER.auto(ReFramed.id("block/wall/pillar/core")));
|
||||||
|
HELPER.addReFramedModel("wall_pillar_low" , HELPER.auto(ReFramed.id("block/wall/pillar/low")));
|
||||||
|
HELPER.addReFramedModel("wall_pillar_tall" , HELPER.auto(ReFramed.id("block/wall/pillar/tall")));
|
||||||
|
HELPER.addReFramedModel("wall_pillar_none" , HELPER.auto(ReFramed.id("block/wall/pillar/none")));
|
||||||
|
// --------------------- side
|
||||||
|
HELPER.addReFramedModel("wall_side_low" , HELPER.auto(ReFramed.id("block/wall/side/low")));
|
||||||
|
HELPER.addReFramedModel("wall_side_tall" , HELPER.auto(ReFramed.id("block/wall/side/tall")));
|
||||||
|
// --------------------- junction
|
||||||
|
HELPER.addReFramedModel("wall_low_e" , HELPER.auto(ReFramed.id("block/wall/junction/low")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_e" , HELPER.auto(ReFramed.id("block/wall/junction/tall")));
|
||||||
|
// --------------------- junction_i
|
||||||
|
HELPER.addReFramedModel("wall_low_i" , HELPER.auto(ReFramed.id("block/wall/junction/low_i")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_i" , HELPER.auto(ReFramed.id("block/wall/junction/tall_i")));
|
||||||
|
HELPER.addReFramedModel("wall_low_tall_i" , HELPER.auto(ReFramed.id("block/wall/junction/low_tall_i")));
|
||||||
|
// --------------------- junction_c
|
||||||
|
HELPER.addReFramedModel("wall_low_c" , HELPER.auto(ReFramed.id("block/wall/junction/low_c")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_c" , HELPER.auto(ReFramed.id("block/wall/junction/tall_c")));
|
||||||
|
HELPER.addReFramedModel("wall_low_tall_c" , HELPER.auto(ReFramed.id("block/wall/junction/low_tall_c")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_low_c" , HELPER.auto(ReFramed.id("block/wall/junction/tall_low_c")));
|
||||||
|
// --------------------- junction_t
|
||||||
|
HELPER.addReFramedModel("wall_low_t" , HELPER.auto(ReFramed.id("block/wall/junction/low_t")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_t" , HELPER.auto(ReFramed.id("block/wall/junction/tall_t")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_low_c_t" , HELPER.auto(ReFramed.id("block/wall/junction/tall_low_c_t")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_i_low_t" , HELPER.auto(ReFramed.id("block/wall/junction/tall_i_low_t")));
|
||||||
|
HELPER.addReFramedModel("wall_low_i_tall_t" , HELPER.auto(ReFramed.id("block/wall/junction/low_i_tall_t")));
|
||||||
|
HELPER.addReFramedModel("wall_low_tall_c_t" , HELPER.auto(ReFramed.id("block/wall/junction/low_tall_c_t")));
|
||||||
|
HELPER.addReFramedModel("wall_low_c_tall_t" , HELPER.auto(ReFramed.id("block/wall/junction/low_c_tall_t")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_c_low_t" , HELPER.auto(ReFramed.id("block/wall/junction/tall_c_low_t")));
|
||||||
|
// --------------------- junction_x
|
||||||
|
HELPER.addReFramedModel("wall_low_x" , HELPER.auto(ReFramed.id("block/wall/junction/low_x")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_x" , HELPER.auto(ReFramed.id("block/wall/junction/tall_x")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_i_low_i_x" , HELPER.auto(ReFramed.id("block/wall/junction/tall_i_low_i_x")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_low_t_x" , HELPER.auto(ReFramed.id("block/wall/junction/tall_low_t_x")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_c_low_c_x" , HELPER.auto(ReFramed.id("block/wall/junction/tall_c_low_c_x")));
|
||||||
|
HELPER.addReFramedModel("wall_tall_t_low_x" , HELPER.auto(ReFramed.id("block/wall/junction/tall_t_low_x")));
|
||||||
|
|
||||||
|
|
||||||
//item model assignments (in lieu of models/item/___.json)
|
//item model assignments (in lieu of models/item/___.json)
|
||||||
HELPER.assignItemModel("cube_special" , ReFramed.CUBE);
|
HELPER.assignItemModel("cube" , ReFramed.CUBE);
|
||||||
HELPER.assignItemModel("small_cube_special" , ReFramed.SMALL_CUBE);
|
HELPER.assignItemModel("small_cube" , ReFramed.SMALL_CUBE);
|
||||||
HELPER.assignItemModel("small_cubes_step_special" , ReFramed.SMALL_CUBES_STEP);
|
HELPER.assignItemModel("small_cubes_step" , ReFramed.SMALL_CUBES_STEP);
|
||||||
HELPER.assignItemModel("slab_special" , ReFramed.SLAB);
|
HELPER.assignItemModel("slab" , ReFramed.SLAB);
|
||||||
HELPER.assignItemModel("double_slab_special" , ReFramed.SLABS_CUBE);
|
HELPER.assignItemModel("double_slab" , ReFramed.SLABS_CUBE);
|
||||||
HELPER.assignItemModel("stair_special" , ReFramed.STAIR);
|
HELPER.assignItemModel("stair" , ReFramed.STAIR);
|
||||||
HELPER.assignItemModel("stairs_cube_special" , ReFramed.STAIRS_CUBE);
|
HELPER.assignItemModel("stairs_cube" , ReFramed.STAIRS_CUBE);
|
||||||
HELPER.assignItemModel("half_stair_down_special" , ReFramed.HALF_STAIR);
|
HELPER.assignItemModel("half_stair_down" , ReFramed.HALF_STAIR);
|
||||||
HELPER.assignItemModel("half_stairs_slab_down_special" , ReFramed.HALF_STAIRS_SLAB);
|
HELPER.assignItemModel("half_stairs_slab_down" , ReFramed.HALF_STAIRS_SLAB);
|
||||||
HELPER.assignItemModel("half_stairs_stair_down_special", ReFramed.HALF_STAIRS_STAIR);
|
HELPER.assignItemModel("half_stairs_stair_down", ReFramed.HALF_STAIRS_STAIR);
|
||||||
HELPER.assignItemModel("step_special" , ReFramed.STEP);
|
HELPER.assignItemModel("step" , ReFramed.STEP);
|
||||||
HELPER.assignItemModel("steps_slab_special" , ReFramed.STEPS_SLAB);
|
HELPER.assignItemModel("steps_slab" , ReFramed.STEPS_SLAB);
|
||||||
HELPER.assignItemModel("layer_1_special" , ReFramed.LAYER);
|
HELPER.assignItemModel("layer_1" , ReFramed.LAYER);
|
||||||
HELPER.assignItemModel("pillar_special" , ReFramed.PILLAR);
|
HELPER.assignItemModel("pillar" , ReFramed.PILLAR);
|
||||||
|
HELPER.assignItemModel("wall_inventory" , ReFramed.WALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void privateInit() {
|
private void privateInit() {
|
||||||
|
@ -40,15 +40,15 @@ public class ReFramedClientHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addReFramedModel(String id, UnbakedModel unbaked) {
|
public void addReFramedModel(String id, UnbakedModel unbaked) {
|
||||||
prov.addReFramedModel(ReFramed.id(id), unbaked);
|
prov.addReFramedModel(ReFramed.id(id + "_special"), unbaked);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void assignItemModel(String id, ItemConvertible... item_convertibles) {
|
public void assignItemModel(String id, ItemConvertible... item_convertibles) {
|
||||||
prov.assignItemModel(ReFramed.id(id), item_convertibles);
|
prov.assignItemModel(ReFramed.id(id + "_special"), item_convertibles);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CamoAppearanceManager getCamoApperanceManager(Function<SpriteIdentifier, Sprite> spriteLookup) {
|
public CamoAppearanceManager getCamoAppearanceManager(Function<SpriteIdentifier, Sprite> spriteLookup) {
|
||||||
return prov.getCamoApperanceManager(spriteLookup);
|
return prov.getCamoAppearanceManager(spriteLookup);
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull Renderer getFabricRenderer() {
|
public @NotNull Renderer getFabricRenderer() {
|
||||||
|
@ -44,7 +44,7 @@ public class ReFramedModelProvider implements ModelResourceProvider, ModelVarian
|
|||||||
|
|
||||||
/// camo appearance manager cache
|
/// camo appearance manager cache
|
||||||
|
|
||||||
public CamoAppearanceManager getCamoApperanceManager(Function<SpriteIdentifier, Sprite> spriteLookup) {
|
public CamoAppearanceManager getCamoAppearanceManager(Function<SpriteIdentifier, Sprite> spriteLookup) {
|
||||||
//This is kind of needlessly sketchy using the "volatile double checked locking" pattern.
|
//This is kind of needlessly sketchy using the "volatile double checked locking" pattern.
|
||||||
//I'd like all frame models to use the same CamoApperanceManager, despite the model
|
//I'd like all frame models to use the same CamoApperanceManager, despite the model
|
||||||
//baking process happening concurrently on several threads, but I also don't want to
|
//baking process happening concurrently on several threads, but I also don't want to
|
||||||
|
@ -114,7 +114,9 @@ public abstract class RetexturingBakedModel extends ForwardingBakedModel {
|
|||||||
if (camo instanceof WeightedComputedAppearance wca) model_id = wca.getAppearanceIndex(seed);
|
if (camo instanceof WeightedComputedAppearance wca) model_id = wca.getAppearanceIndex(seed);
|
||||||
|
|
||||||
int tint = 0xFF000000 | MinecraftClient.getInstance().getBlockColors().getColor(theme, world, pos, 0);
|
int tint = 0xFF000000 | MinecraftClient.getInstance().getBlockColors().getColor(theme, world, pos, 0);
|
||||||
Mesh untintedMesh = getRetexturedMesh(new MeshCacheKey(frame_block.getModelCacheKey(state), camo, model_id), state);
|
MeshCacheKey key = new MeshCacheKey(frame_block.getModelCacheKey(state), camo, model_id);
|
||||||
|
// do not clutter the cache with single-use meshes
|
||||||
|
Mesh untintedMesh = camo.hashCode() == -1 ? transformMesh(key, state) : getRetexturedMesh(key, state);
|
||||||
|
|
||||||
//The specific tint might vary a lot; imagine grass color smoothly changing. Trying to bake the tint into
|
//The specific tint might vary a lot; imagine grass color smoothly changing. Trying to bake the tint into
|
||||||
//the cached mesh will pollute it with a ton of single-use meshes with only slightly different colors.
|
//the cached mesh will pollute it with a ton of single-use meshes with only slightly different colors.
|
||||||
|
@ -33,7 +33,7 @@ public class UnbakedAutoRetexturedModel extends UnbakedRetexturedModel {
|
|||||||
public BakedModel bake(Baker baker, Function<SpriteIdentifier, Sprite> texture_getter, ModelBakeSettings bake_settings, Identifier identifier) {
|
public BakedModel bake(Baker baker, Function<SpriteIdentifier, Sprite> texture_getter, ModelBakeSettings bake_settings, Identifier identifier) {
|
||||||
return new RetexturingBakedModel(
|
return new RetexturingBakedModel(
|
||||||
baker.bake(parent, bake_settings),
|
baker.bake(parent, bake_settings),
|
||||||
ReFramedClient.HELPER.getCamoApperanceManager(texture_getter),
|
ReFramedClient.HELPER.getCamoAppearanceManager(texture_getter),
|
||||||
theme_index,
|
theme_index,
|
||||||
bake_settings,
|
bake_settings,
|
||||||
item_state,
|
item_state,
|
||||||
|
@ -41,7 +41,7 @@ public class UnbakedJsonRetexturedModel extends UnbakedRetexturedModel {
|
|||||||
|
|
||||||
return new RetexturingBakedModel(
|
return new RetexturingBakedModel(
|
||||||
baker.bake(parent, bake_settings),
|
baker.bake(parent, bake_settings),
|
||||||
ReFramedClient.HELPER.getCamoApperanceManager(spriteLookup),
|
ReFramedClient.HELPER.getCamoAppearanceManager(spriteLookup),
|
||||||
theme_index,
|
theme_index,
|
||||||
bake_settings,
|
bake_settings,
|
||||||
item_state,
|
item_state,
|
||||||
|
@ -20,8 +20,9 @@ public abstract class UnbakedRetexturedModel implements UnbakedModel {
|
|||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setThemeIndex(int theme_index) {
|
public UnbakedRetexturedModel setThemeIndex(int theme_index) {
|
||||||
this.theme_index = theme_index;
|
this.theme_index = theme_index;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -95,7 +95,7 @@ public class CamoAppearanceManager {
|
|||||||
model = dynamic_model.computeQuads(world, state, pos, theme_index);
|
model = dynamic_model.computeQuads(world, state, pos, theme_index);
|
||||||
// if model isn't rebaked its just wrapped (i.e. not dynamic and may be cached)
|
// if model isn't rebaked its just wrapped (i.e. not dynamic and may be cached)
|
||||||
if (model instanceof RebakedModel) {
|
if (model instanceof RebakedModel) {
|
||||||
CamoAppearance appearance = computeAppearance(model, state);
|
CamoAppearance appearance = computeAppearance(model, state, !item);
|
||||||
if (item) APPEARANCE_CACHE.put(state, appearance);
|
if (item) APPEARANCE_CACHE.put(state, appearance);
|
||||||
return appearance;
|
return appearance;
|
||||||
}
|
}
|
||||||
@ -104,7 +104,7 @@ public class CamoAppearanceManager {
|
|||||||
// refresh cache
|
// refresh cache
|
||||||
if (APPEARANCE_CACHE.asMap().containsKey(state)) return APPEARANCE_CACHE.getIfPresent(state);
|
if (APPEARANCE_CACHE.asMap().containsKey(state)) return APPEARANCE_CACHE.getIfPresent(state);
|
||||||
|
|
||||||
CamoAppearance appearance = computeAppearance(model, state);
|
CamoAppearance appearance = computeAppearance(model, state, false);
|
||||||
APPEARANCE_CACHE.put(state, appearance);
|
APPEARANCE_CACHE.put(state, appearance);
|
||||||
return appearance;
|
return appearance;
|
||||||
}
|
}
|
||||||
@ -118,7 +118,7 @@ public class CamoAppearanceManager {
|
|||||||
// The computeIfAbsent map update will work without corrupting the map, but there will be some "wasted effort" computing the value twice.
|
// The computeIfAbsent map update will work without corrupting the map, but there will be some "wasted effort" computing the value twice.
|
||||||
// The results are going to be the same, apart from their serialNumbers differing (= their equals & hashCode differing).
|
// The results are going to be the same, apart from their serialNumbers differing (= their equals & hashCode differing).
|
||||||
// Tiny amount of wasted space in some caches if CamoAppearances are used as a map key, then. IMO it's not a critical issue.
|
// Tiny amount of wasted space in some caches if CamoAppearances are used as a map key, then. IMO it's not a critical issue.
|
||||||
private CamoAppearance computeAppearance(BakedModel model, BlockState state) {
|
private CamoAppearance computeAppearance(BakedModel model, BlockState state, boolean is_dynamic) {
|
||||||
if(state.getBlock() == Blocks.BARRIER) return barrierItemAppearance;
|
if(state.getBlock() == Blocks.BARRIER) return barrierItemAppearance;
|
||||||
|
|
||||||
if (!(model instanceof WeightedBakedModelAccessor weighted_model)) {
|
if (!(model instanceof WeightedBakedModelAccessor weighted_model)) {
|
||||||
@ -126,7 +126,7 @@ public class CamoAppearanceManager {
|
|||||||
getAppearance(model),
|
getAppearance(model),
|
||||||
getCachedMaterial(state, true),
|
getCachedMaterial(state, true),
|
||||||
getCachedMaterial(state, false),
|
getCachedMaterial(state, false),
|
||||||
serial_number.getAndIncrement()
|
is_dynamic ? -1 : serial_number.getAndIncrement()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
List<Weighted.Present<Appearance>> appearances = weighted_model.getModels().stream()
|
List<Weighted.Present<Appearance>> appearances = weighted_model.getModels().stream()
|
||||||
@ -137,7 +137,7 @@ public class CamoAppearanceManager {
|
|||||||
appearances,
|
appearances,
|
||||||
getCachedMaterial(state, true),
|
getCachedMaterial(state, true),
|
||||||
getCachedMaterial(state, false),
|
getCachedMaterial(state, false),
|
||||||
serial_number.getAndIncrement()
|
is_dynamic ? -1 : serial_number.getAndIncrement()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package fr.adrien1106.reframed.generator;
|
package fr.adrien1106.reframed.generator;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.data.client.BlockStateSupplier;
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
|
||||||
public interface BlockStateProvider {
|
public interface BlockStateProvider {
|
||||||
BlockStateSupplier getMultipart();
|
BlockStateSupplier getMultipart(Block block);
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,23 @@
|
|||||||
package fr.adrien1106.reframed.generator;
|
package fr.adrien1106.reframed.generator;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.block.*;
|
||||||
|
import fr.adrien1106.reframed.generator.block.*;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider.BlockTagProvider;
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider.BlockTagProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.registry.RegistryWrapper.WrapperLookup;
|
import net.minecraft.registry.RegistryWrapper.WrapperLookup;
|
||||||
import net.minecraft.registry.tag.BlockTags;
|
import net.minecraft.registry.tag.BlockTags;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class GBlockTag extends BlockTagProvider {
|
public class GBlockTag extends BlockTagProvider {
|
||||||
|
private static final Map<Class<? extends Block>, TagGetter> providers = new HashMap<>();
|
||||||
|
static {
|
||||||
|
providers.put(ReframedWallBlock.class, new Wall());
|
||||||
|
}
|
||||||
|
|
||||||
public GBlockTag(FabricDataOutput output, CompletableFuture<WrapperLookup> registries) {
|
public GBlockTag(FabricDataOutput output, CompletableFuture<WrapperLookup> registries) {
|
||||||
super(output, registries);
|
super(output, registries);
|
||||||
@ -17,6 +26,10 @@ public class GBlockTag extends BlockTagProvider {
|
|||||||
@Override
|
@Override
|
||||||
protected void configure(WrapperLookup arg) {
|
protected void configure(WrapperLookup arg) {
|
||||||
FabricTagBuilder builder = getOrCreateTagBuilder(BlockTags.AXE_MINEABLE);
|
FabricTagBuilder builder = getOrCreateTagBuilder(BlockTags.AXE_MINEABLE);
|
||||||
ReFramed.BLOCKS.forEach(builder::add);
|
ReFramed.BLOCKS.forEach((block) -> {
|
||||||
|
if (providers.containsKey(block.getClass()))
|
||||||
|
providers.get(block.getClass()).getTags().forEach((tag) -> getOrCreateTagBuilder(tag).add(block));
|
||||||
|
builder.add(block);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,39 @@
|
|||||||
package fr.adrien1106.reframed.generator;
|
package fr.adrien1106.reframed.generator;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.block.*;
|
||||||
|
import fr.adrien1106.reframed.generator.block.*;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.data.client.*;
|
import net.minecraft.data.client.*;
|
||||||
import net.minecraft.state.property.Property;
|
import net.minecraft.state.property.Property;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static net.minecraft.data.client.VariantSettings.Rotation.R0;
|
import static net.minecraft.data.client.VariantSettings.Rotation.R0;
|
||||||
|
|
||||||
public class GBlockstate extends FabricModelProvider {
|
public class GBlockstate extends FabricModelProvider {
|
||||||
|
private static final Map<Class<? extends Block>, BlockStateProvider> providers = new HashMap<>();
|
||||||
|
static {
|
||||||
|
providers.put(ReFramedHalfStairBlock.class, new HalfStair());
|
||||||
|
providers.put(ReFramedHalfStairsSlabBlock.class, new HalfStairsSlab());
|
||||||
|
providers.put(ReFramedHalfStairsStairBlock.class, new HalfStairsStair());
|
||||||
|
providers.put(ReFramedLayerBlock.class, new Layer());
|
||||||
|
providers.put(ReFramedPillarBlock.class, new Pillar());
|
||||||
|
providers.put(ReFramedSlabBlock.class, new Slab());
|
||||||
|
providers.put(ReFramedSlabsCubeBlock.class, new SlabsCube());
|
||||||
|
providers.put(ReFramedSmallCubeBlock.class, new SmallCube());
|
||||||
|
providers.put(ReFramedSmallCubesStepBlock.class, new SmallCubesStep());
|
||||||
|
providers.put(ReFramedStairBlock.class, new Stair());
|
||||||
|
providers.put(ReFramedStairsCubeBlock.class, new StairsCube());
|
||||||
|
providers.put(ReFramedStepBlock.class, new Step());
|
||||||
|
providers.put(ReFramedStepsSlabBlock.class, new StepsSlab());
|
||||||
|
providers.put(ReframedWallBlock.class, new Wall());
|
||||||
|
}
|
||||||
|
|
||||||
public GBlockstate(FabricDataOutput output) {
|
public GBlockstate(FabricDataOutput output) {
|
||||||
super(output);
|
super(output);
|
||||||
@ -23,7 +45,7 @@ public class GBlockstate extends FabricModelProvider {
|
|||||||
.forEach(model_generator::excludeFromSimpleItemModelGeneration);
|
.forEach(model_generator::excludeFromSimpleItemModelGeneration);
|
||||||
ReFramed.BLOCKS.stream()
|
ReFramed.BLOCKS.stream()
|
||||||
.map(block -> {
|
.map(block -> {
|
||||||
if (block instanceof BlockStateProvider multipart_block) return multipart_block.getMultipart();
|
if (providers.containsKey(block.getClass())) return providers.get(block.getClass()).getMultipart(block);
|
||||||
return VariantsBlockStateSupplier.create(
|
return VariantsBlockStateSupplier.create(
|
||||||
block,
|
block,
|
||||||
GBlockstate.variant(
|
GBlockstate.variant(
|
||||||
@ -54,11 +76,57 @@ public class GBlockstate extends FabricModelProvider {
|
|||||||
return When.create().set(property_1, value_1);
|
return When.create().set(property_1, value_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Comparable<T>, U extends Comparable<U>> When when(Property<T> property_1, T value_1, Property<U> property_2, U value_2) {
|
public static <T extends Comparable<T>,
|
||||||
return When.allOf(when(property_1, value_1), when(property_2, value_2));
|
U extends Comparable<U>> When when(Property<T> property_1, T value_1,
|
||||||
|
Property<U> property_2, U value_2) {
|
||||||
|
return When.allOf(
|
||||||
|
when(property_1, value_1),
|
||||||
|
when(property_2, value_2)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T extends Comparable<T>, U extends Comparable<U>, V extends Comparable<V>> When when(Property<T> property_1, T value_1, Property<U> property_2, U value_2, Property<V> property_3, V value_3) {
|
public static <T extends Comparable<T>,
|
||||||
return When.allOf(when(property_1, value_1), when(property_2, value_2), when(property_3, value_3));
|
U extends Comparable<U>,
|
||||||
|
V extends Comparable<V>> When when(Property<T> property_1, T value_1,
|
||||||
|
Property<U> property_2, U value_2,
|
||||||
|
Property<V> property_3, V value_3) {
|
||||||
|
return When.allOf(
|
||||||
|
when(property_1, value_1),
|
||||||
|
when(property_2, value_2),
|
||||||
|
when(property_3, value_3)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Comparable<T>,
|
||||||
|
U extends Comparable<U>,
|
||||||
|
V extends Comparable<V>,
|
||||||
|
W extends Comparable<W>> When when(Property<T> property_1, T value_1,
|
||||||
|
Property<U> property_2, U value_2,
|
||||||
|
Property<V> property_3, V value_3,
|
||||||
|
Property<W> property_4, W value_4) {
|
||||||
|
return When.allOf(
|
||||||
|
when(property_1, value_1),
|
||||||
|
when(property_2, value_2),
|
||||||
|
when(property_3, value_3),
|
||||||
|
when(property_4, value_4)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T extends Comparable<T>,
|
||||||
|
U extends Comparable<U>,
|
||||||
|
V extends Comparable<V>,
|
||||||
|
W extends Comparable<W>,
|
||||||
|
X extends Comparable<X>> When when(Property<T> property_1, T value_1,
|
||||||
|
Property<U> property_2, U value_2,
|
||||||
|
Property<V> property_3, V value_3,
|
||||||
|
Property<W> property_4, W value_4,
|
||||||
|
Property<X> property_5, X value_5) {
|
||||||
|
return When.allOf(
|
||||||
|
when(property_1, value_1),
|
||||||
|
when(property_2, value_2),
|
||||||
|
when(property_3, value_3),
|
||||||
|
when(property_4, value_4),
|
||||||
|
when(property_5, value_5)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,45 @@
|
|||||||
package fr.adrien1106.reframed.generator;
|
package fr.adrien1106.reframed.generator;
|
||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.block.*;
|
||||||
|
import fr.adrien1106.reframed.generator.block.*;
|
||||||
|
import fr.adrien1106.reframed.generator.item.Blueprint;
|
||||||
|
import fr.adrien1106.reframed.generator.item.Hammer;
|
||||||
|
import fr.adrien1106.reframed.generator.item.Screwdriver;
|
||||||
|
import fr.adrien1106.reframed.item.ReFramedBlueprintItem;
|
||||||
|
import fr.adrien1106.reframed.item.ReFramedHammerItem;
|
||||||
|
import fr.adrien1106.reframed.item.ReFramedScrewdriverItem;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class GRecipe extends FabricRecipeProvider {
|
public class GRecipe extends FabricRecipeProvider {
|
||||||
|
private static final Map<Class<? extends ItemConvertible>, RecipeSetter> providers = new HashMap<>();
|
||||||
|
static {
|
||||||
|
providers.put(ReFramedBlock.class, new Cube());
|
||||||
|
providers.put(ReFramedHalfStairBlock.class, new HalfStair());
|
||||||
|
providers.put(ReFramedHalfStairsSlabBlock.class, new HalfStairsSlab());
|
||||||
|
providers.put(ReFramedHalfStairsStairBlock.class, new HalfStairsStair());
|
||||||
|
providers.put(ReFramedLayerBlock.class, new Layer());
|
||||||
|
providers.put(ReFramedPillarBlock.class, new Pillar());
|
||||||
|
providers.put(ReFramedSlabBlock.class, new Slab());
|
||||||
|
providers.put(ReFramedSlabsCubeBlock.class, new SlabsCube());
|
||||||
|
providers.put(ReFramedSmallCubeBlock.class, new SmallCube());
|
||||||
|
providers.put(ReFramedSmallCubesStepBlock.class, new SmallCubesStep());
|
||||||
|
providers.put(ReFramedStairBlock.class, new Stair());
|
||||||
|
providers.put(ReFramedStairsCubeBlock.class, new StairsCube());
|
||||||
|
providers.put(ReFramedStepBlock.class, new Step());
|
||||||
|
providers.put(ReFramedStepsSlabBlock.class, new StepsSlab());
|
||||||
|
providers.put(ReframedWallBlock.class, new Wall());
|
||||||
|
providers.put(ReFramedBlueprintItem.class, new Blueprint());
|
||||||
|
providers.put(ReFramedHammerItem.class, new Hammer());
|
||||||
|
providers.put(ReFramedScrewdriverItem.class, new Screwdriver());
|
||||||
|
}
|
||||||
|
|
||||||
public GRecipe(FabricDataOutput output) {
|
public GRecipe(FabricDataOutput output) {
|
||||||
super(output);
|
super(output);
|
||||||
}
|
}
|
||||||
@ -13,10 +47,10 @@ public class GRecipe extends FabricRecipeProvider {
|
|||||||
@Override
|
@Override
|
||||||
public void generate(RecipeExporter exporter) {
|
public void generate(RecipeExporter exporter) {
|
||||||
ReFramed.BLOCKS.forEach(block -> {
|
ReFramed.BLOCKS.forEach(block -> {
|
||||||
if (block instanceof RecipeSetter provider) provider.setRecipe(exporter);
|
if (providers.containsKey(block.getClass())) providers.get(block.getClass()).setRecipe(exporter, block);
|
||||||
});
|
});
|
||||||
ReFramed.ITEMS.forEach(item -> {
|
ReFramed.ITEMS.forEach(item -> {
|
||||||
if (item instanceof RecipeSetter provider) provider.setRecipe(exporter);
|
if (providers.containsKey(item.getClass())) providers.get(item.getClass()).setRecipe(exporter, item);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package fr.adrien1106.reframed.generator;
|
package fr.adrien1106.reframed.generator;
|
||||||
|
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
|
||||||
public interface RecipeSetter {
|
public interface RecipeSetter {
|
||||||
|
|
||||||
void setRecipe(RecipeExporter exporter);
|
void setRecipe(RecipeExporter exporter, ItemConvertible convertible);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
package fr.adrien1106.reframed.generator;
|
||||||
|
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.registry.tag.TagKey;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface TagGetter {
|
||||||
|
|
||||||
|
List<TagKey<Block>> getTags();
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
|
||||||
|
public class Cube implements RecipeSetter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.pattern("III")
|
||||||
|
.pattern("I~I")
|
||||||
|
.pattern("III")
|
||||||
|
.input('I', Items.BAMBOO)
|
||||||
|
.input('~', Items.STRING)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(Items.BAMBOO), FabricRecipeProvider.conditionsFromItem(Items.BAMBOO))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,106 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.CORNER;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.CORNER_FACE;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Corner.*;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Corner.NORTH_EAST_UP;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
|
public class HalfStair implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 4)
|
||||||
|
.pattern("I ")
|
||||||
|
.pattern("II")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
return getMultipart(
|
||||||
|
block,
|
||||||
|
ReFramed.id("half_stair_down_special"),
|
||||||
|
ReFramed.id("half_stair_side_special")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BlockStateSupplier getMultipart(Block block, Identifier model_down, Identifier model_side) {
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R90, R270))
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R0, R0))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R0, R90))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R0, R180))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R90, R180))
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R0, R270))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R270, R90))
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R180, R0))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R180, R90))
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R270, R180))
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R180, R90))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_UP, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_UP, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R270, R270))
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_UP, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R180, R180))
|
||||||
|
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_UP, CORNER_FACE, 0),
|
||||||
|
GBlockstate.variant(model_side, true, R180, R270))
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_UP, CORNER_FACE, 1),
|
||||||
|
GBlockstate.variant(model_side, true, R270, R0))
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_UP, CORNER_FACE, 2),
|
||||||
|
GBlockstate.variant(model_down, true, R180, R270));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
|
||||||
|
public class HalfStairsSlab implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.input(ReFramed.HALF_STAIR)
|
||||||
|
.input(ReFramed.SMALL_CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
return HalfStair.getMultipart(
|
||||||
|
block,
|
||||||
|
ReFramed.id("half_stairs_slab_down_special"),
|
||||||
|
ReFramed.id("half_stairs_slab_side_special")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.WEST_DOWN;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
|
public class HalfStairsStair implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.input(ReFramed.HALF_STAIR, 2)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier model_id = ReFramed.id("half_stairs_stair_down_special");
|
||||||
|
Identifier side_model_id = ReFramed.id("half_stairs_stair_side_special");
|
||||||
|
Identifier reverse_model_id = ReFramed.id("half_stairs_stair_reverse_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
/* X AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_DOWN),
|
||||||
|
GBlockstate.variant(side_model_id, true, R90, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_SOUTH),
|
||||||
|
GBlockstate.variant(side_model_id, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_UP),
|
||||||
|
GBlockstate.variant(side_model_id, true, R270, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_NORTH),
|
||||||
|
GBlockstate.variant(side_model_id, true, R180, R180))
|
||||||
|
/* Y AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_EAST),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_SOUTH),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_WEST),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_NORTH),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R270))
|
||||||
|
/* Z AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_EAST),
|
||||||
|
GBlockstate.variant(reverse_model_id, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_UP),
|
||||||
|
GBlockstate.variant(side_model_id, true, R180, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_WEST),
|
||||||
|
GBlockstate.variant(reverse_model_id, true, R180, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_DOWN),
|
||||||
|
GBlockstate.variant(side_model_id, true, R0, R270));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,58 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
import static net.minecraft.state.property.Properties.FACING;
|
||||||
|
import static net.minecraft.state.property.Properties.LAYERS;
|
||||||
|
|
||||||
|
public class Layer implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 8);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 16)
|
||||||
|
.pattern("II")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MultipartBlockStateSupplier getMultipart(Block block) {
|
||||||
|
String model_pattern = "layer_x_special";
|
||||||
|
MultipartBlockStateSupplier supplier = MultipartBlockStateSupplier.create(block);
|
||||||
|
for (int i = 1; i <= 8; i++) {
|
||||||
|
Identifier model = ReFramed.id(model_pattern.replace("x", i + ""));
|
||||||
|
supplier
|
||||||
|
.with(GBlockstate.when(FACING, Direction.DOWN, LAYERS, i),
|
||||||
|
GBlockstate.variant(model, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.SOUTH, LAYERS, i),
|
||||||
|
GBlockstate.variant(model, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.UP, LAYERS, i),
|
||||||
|
GBlockstate.variant(model, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.NORTH, LAYERS, i),
|
||||||
|
GBlockstate.variant(model, true, R270, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.WEST, LAYERS, i),
|
||||||
|
GBlockstate.variant(model, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.EAST, LAYERS, i),
|
||||||
|
GBlockstate.variant(model, true, R90, R270));
|
||||||
|
}
|
||||||
|
return supplier;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.R0;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.R90;
|
||||||
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
|
|
||||||
|
public class Pillar implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 4);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 8)
|
||||||
|
.pattern("I")
|
||||||
|
.pattern("I")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier model_id = ReFramed.id("pillar_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
.with(GBlockstate.when(AXIS, Direction.Axis.X),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(AXIS, Direction.Axis.Y),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(AXIS, Direction.Axis.Z),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R0));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
import static net.minecraft.state.property.Properties.FACING;
|
||||||
|
|
||||||
|
public class Slab implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 6)
|
||||||
|
.pattern("III")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MultipartBlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier model_id = ReFramed.id("slab_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
.with(GBlockstate.when(FACING, Direction.DOWN),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.SOUTH),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.UP),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.NORTH),
|
||||||
|
GBlockstate.variant(model_id, true, R270, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.WEST),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.EAST),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R270));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.R90;
|
||||||
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
|
|
||||||
|
public class SlabsCube implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.input(ReFramed.SLAB, 2)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MultipartBlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier model_id = ReFramed.id("double_slab_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
.with(GBlockstate.when(AXIS, Direction.Axis.Y),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(AXIS, Direction.Axis.Z),
|
||||||
|
GBlockstate.variant(model_id, true, R270, R0))
|
||||||
|
.with(GBlockstate.when(AXIS, Direction.Axis.X),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R90));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.CORNER;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Corner.*;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Corner.NORTH_EAST_UP;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
|
public class SmallCube implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 8);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 8)
|
||||||
|
.input(ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier small_cube_id = ReFramed.id("small_cube_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_DOWN),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_DOWN),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_DOWN),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_DOWN),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(CORNER, EAST_SOUTH_UP),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(CORNER, SOUTH_WEST_UP),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R180, R90))
|
||||||
|
.with(GBlockstate.when(CORNER, WEST_NORTH_UP),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(CORNER, NORTH_EAST_UP),
|
||||||
|
GBlockstate.variant(small_cube_id, true, R180, R270));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.SOUTH_UP;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
|
public class SmallCubesStep implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 4);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.input(ReFramed.SMALL_CUBE, 2)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier model_id = ReFramed.id("small_cubes_step_special");
|
||||||
|
Identifier reverse_model_id = ReFramed.id("small_cubes_step_reverse_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
/* X AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_EAST),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_UP),
|
||||||
|
GBlockstate.variant(reverse_model_id, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_WEST),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_DOWN),
|
||||||
|
GBlockstate.variant(reverse_model_id, true, R0, R180))
|
||||||
|
/* Y AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_SOUTH),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_WEST),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_NORTH),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_EAST),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R270))
|
||||||
|
/* Z AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_SOUTH),
|
||||||
|
GBlockstate.variant(reverse_model_id, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_DOWN),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_NORTH),
|
||||||
|
GBlockstate.variant(reverse_model_id, true, R180, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_UP),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R90));
|
||||||
|
}
|
||||||
|
}
|
267
src/main/java/fr/adrien1106/reframed/generator/block/Stair.java
Normal file
267
src/main/java/fr/adrien1106/reframed/generator/block/Stair.java
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.When;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.STAIR_SHAPE;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.StairShape.*;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
|
public class Stair implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 4)
|
||||||
|
.pattern("I ")
|
||||||
|
.pattern("II ")
|
||||||
|
.pattern("III")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MultipartBlockStateSupplier getMultipart(Block block) {
|
||||||
|
return getMultipart(block, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MultipartBlockStateSupplier getMultipart(Block block, boolean is_double) {
|
||||||
|
String infix = is_double ? "s_cube" : "";
|
||||||
|
Identifier straight_id = ReFramed.id("stair" + infix + "_special");
|
||||||
|
Identifier double_outer_id = ReFramed.id("outers_stair" + infix + "_special");
|
||||||
|
Identifier inner_id = ReFramed.id("inner_stair" + infix + "_special");
|
||||||
|
Identifier outer_id = ReFramed.id("outer_stair" + infix + "_special");
|
||||||
|
Identifier outer_side_id = ReFramed.id("outer_side_stair" + infix + "_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
/* STRAIGHT X AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R0, R180))
|
||||||
|
/* STRAIGHT Y AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R90, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R90, R270))
|
||||||
|
/* STRAIGHT Z AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R180, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, STRAIGHT),
|
||||||
|
GBlockstate.variant(straight_id, true, R180, R90))
|
||||||
|
/* INNER BOTTOM */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, INNER_RIGHT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R0, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, INNER_RIGHT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R0, R270))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, INNER_LEFT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R0, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, INNER_LEFT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R0, R90))
|
||||||
|
/* INNER TOP */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, INNER_LEFT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R180, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, INNER_LEFT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R180, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, INNER_LEFT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R180, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, INNER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, INNER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, INNER_RIGHT)),
|
||||||
|
GBlockstate.variant(inner_id, true, R180, R270))
|
||||||
|
/* OUTER BOTTOM */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R0, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R0, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R0, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R0, R270))
|
||||||
|
/* OUTER TOP */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R180, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R180, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R180, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_id, true, R180, R270))
|
||||||
|
/* OUTER EAST */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R0, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R90, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R180, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R270, R0))
|
||||||
|
/* OUTER SOUTH */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R0, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R90, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R180, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R270, R90))
|
||||||
|
/* OUTER WEST */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R0, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R90, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R180, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R270, R180))
|
||||||
|
/* OUTER NORTH */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, SECOND_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, SECOND_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R0, R270))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, SECOND_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, FIRST_OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R90, R270))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, FIRST_OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, FIRST_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R180, R270))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, FIRST_OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, SECOND_OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(outer_side_id, true, R270, R270))
|
||||||
|
/* OUTER BOTTOM */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R0, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, DOWN_SOUTH, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R0, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_DOWN, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R0, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, NORTH_DOWN, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, DOWN_EAST, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, OUTER_RIGHT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R0, R270))
|
||||||
|
/* OUTER TOP */
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, NORTH_EAST, STAIR_SHAPE, OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R180, R0))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_UP, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, EAST_SOUTH, STAIR_SHAPE, OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R180, R90))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, SOUTH_UP, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, OUTER_LEFT),
|
||||||
|
GBlockstate.when(EDGE, SOUTH_WEST, STAIR_SHAPE, OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R180, R180))
|
||||||
|
.with(When.anyOf(
|
||||||
|
GBlockstate.when(EDGE, UP_NORTH, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, UP_WEST, STAIR_SHAPE, OUTER_RIGHT),
|
||||||
|
GBlockstate.when(EDGE, WEST_NORTH, STAIR_SHAPE, OUTER_LEFT)),
|
||||||
|
GBlockstate.variant(double_outer_id, true, R180, R270));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,33 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
|
||||||
|
public class StairsCube implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.input(ReFramed.STAIR)
|
||||||
|
.input(ReFramed.STEP)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MultipartBlockStateSupplier getMultipart(Block block) {
|
||||||
|
return Stair.getMultipart(block, true);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,69 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.EDGE;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.*;
|
||||||
|
import static fr.adrien1106.reframed.util.blocks.Edge.SOUTH_UP;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
|
public class Step implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 4);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 8)
|
||||||
|
.pattern("II")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier model_id = ReFramed.id("step_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
/* X AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_EAST),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_UP),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_WEST),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_DOWN),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R180))
|
||||||
|
/* Y AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, EAST_SOUTH),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_WEST),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, WEST_NORTH),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R180))
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_EAST),
|
||||||
|
GBlockstate.variant(model_id, true, R90, R270))
|
||||||
|
/* Z AXIS */
|
||||||
|
.with(GBlockstate.when(EDGE, DOWN_SOUTH),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(EDGE, NORTH_DOWN),
|
||||||
|
GBlockstate.variant(model_id, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, UP_NORTH),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R270))
|
||||||
|
.with(GBlockstate.when(EDGE, SOUTH_UP),
|
||||||
|
GBlockstate.variant(model_id, true, R180, R90));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapelessRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.R270;
|
||||||
|
import static net.minecraft.state.property.Properties.AXIS;
|
||||||
|
import static net.minecraft.state.property.Properties.FACING;
|
||||||
|
|
||||||
|
public class StepsSlab implements RecipeSetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 2);
|
||||||
|
ShapelessRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible)
|
||||||
|
.input(ReFramed.STEP, 2)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MultipartBlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier step_id = ReFramed.id("steps_slab_special");
|
||||||
|
Identifier step_side_id = ReFramed.id("steps_slab_side_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
.with(GBlockstate.when(FACING, Direction.DOWN, AXIS, Direction.Axis.X),
|
||||||
|
GBlockstate.variant(step_id, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.DOWN, AXIS, Direction.Axis.Z),
|
||||||
|
GBlockstate.variant(step_id, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.UP, AXIS, Direction.Axis.X),
|
||||||
|
GBlockstate.variant(step_id, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.UP, AXIS, Direction.Axis.Z),
|
||||||
|
GBlockstate.variant(step_id, true, R180, R270))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.EAST, AXIS, Direction.Axis.Z),
|
||||||
|
GBlockstate.variant(step_side_id, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.EAST, AXIS, Direction.Axis.Y),
|
||||||
|
GBlockstate.variant(step_side_id, true, R90, R0))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.SOUTH, AXIS, Direction.Axis.X),
|
||||||
|
GBlockstate.variant(step_side_id, true, R180, R90))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.SOUTH, AXIS, Direction.Axis.Y),
|
||||||
|
GBlockstate.variant(step_side_id, true, R90, R90))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.WEST, AXIS, Direction.Axis.Z),
|
||||||
|
GBlockstate.variant(step_side_id, true, R180, R180))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.WEST, AXIS, Direction.Axis.Y),
|
||||||
|
GBlockstate.variant(step_side_id, true, R90, R180))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.NORTH, AXIS, Direction.Axis.X),
|
||||||
|
GBlockstate.variant(step_side_id, true, R0, R270))
|
||||||
|
.with(GBlockstate.when(FACING, Direction.NORTH, AXIS, Direction.Axis.Y),
|
||||||
|
GBlockstate.variant(step_side_id, true, R90, R270));
|
||||||
|
}
|
||||||
|
}
|
788
src/main/java/fr/adrien1106/reframed/generator/block/Wall.java
Normal file
788
src/main/java/fr/adrien1106/reframed/generator/block/Wall.java
Normal file
@ -0,0 +1,788 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.block;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.BlockStateProvider;
|
||||||
|
import fr.adrien1106.reframed.generator.GBlockstate;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import fr.adrien1106.reframed.generator.TagGetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.data.client.BlockStateSupplier;
|
||||||
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
import net.minecraft.registry.tag.BlockTags;
|
||||||
|
import net.minecraft.registry.tag.TagKey;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static net.minecraft.block.enums.WallShape.*;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
import static net.minecraft.state.property.Properties.*;
|
||||||
|
|
||||||
|
public class Wall implements RecipeSetter, TagGetter, BlockStateProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
RecipeProvider.offerStonecuttingRecipe(exporter, RecipeCategory.BUILDING_BLOCKS, convertible, ReFramed.CUBE, 1);
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.BUILDING_BLOCKS, convertible, 4)
|
||||||
|
.pattern("III")
|
||||||
|
.pattern("III")
|
||||||
|
.input('I', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TagKey<Block>> getTags() {
|
||||||
|
return List.of(BlockTags.WALLS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BlockStateSupplier getMultipart(Block block) {
|
||||||
|
Identifier
|
||||||
|
side_low = ReFramed.id("wall_side_low_special"),
|
||||||
|
side_tall = ReFramed.id("wall_side_tall_special"),
|
||||||
|
pillar_low = ReFramed.id("wall_pillar_low_special"),
|
||||||
|
pillar_tall = ReFramed.id("wall_pillar_tall_special"),
|
||||||
|
pillar_none = ReFramed.id("wall_pillar_none_special"),
|
||||||
|
low_e = ReFramed.id("wall_low_e_special"),
|
||||||
|
tall_e = ReFramed.id("wall_tall_e_special"),
|
||||||
|
low_i = ReFramed.id("wall_low_i_special"),
|
||||||
|
tall_i = ReFramed.id("wall_tall_i_special"),
|
||||||
|
low_tall_i = ReFramed.id("wall_low_tall_i_special"),
|
||||||
|
low_c = ReFramed.id("wall_low_c_special"),
|
||||||
|
tall_c = ReFramed.id("wall_tall_c_special"),
|
||||||
|
low_tall_c = ReFramed.id("wall_low_tall_c_special"),
|
||||||
|
tall_low_c = ReFramed.id("wall_tall_low_c_special"),
|
||||||
|
low_t = ReFramed.id("wall_low_t_special"),
|
||||||
|
tall_t = ReFramed.id("wall_tall_t_special"),
|
||||||
|
tall_low_c_t = ReFramed.id("wall_tall_low_c_t_special"),
|
||||||
|
tall_i_low_t = ReFramed.id("wall_tall_i_low_t_special"),
|
||||||
|
low_i_tall_t = ReFramed.id("wall_low_i_tall_t_special"),
|
||||||
|
low_tall_c_t = ReFramed.id("wall_low_tall_c_t_special"),
|
||||||
|
low_c_tall_t = ReFramed.id("wall_low_c_tall_t_special"),
|
||||||
|
tall_c_low_t = ReFramed.id("wall_tall_c_low_t_special"),
|
||||||
|
tall_i_low_i_x = ReFramed.id("wall_tall_i_low_i_x_special"),
|
||||||
|
tall_low_t_x = ReFramed.id("wall_tall_low_t_x_special"),
|
||||||
|
tall_c_low_c_x = ReFramed.id("wall_tall_c_low_c_x_special"),
|
||||||
|
tall_t_low_x = ReFramed.id("wall_tall_t_low_x_special");
|
||||||
|
return MultipartBlockStateSupplier.create(block)
|
||||||
|
// PILLAR CORE
|
||||||
|
.with(GBlockstate.when(UP, true),
|
||||||
|
GBlockstate.variant(ReFramed.id("wall_core_special"), true, R0, R0))
|
||||||
|
// LOW
|
||||||
|
.with(GBlockstate.when(NORTH_WALL_SHAPE, LOW),
|
||||||
|
GBlockstate.variant(side_low, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EAST_WALL_SHAPE, LOW),
|
||||||
|
GBlockstate.variant(side_low, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(SOUTH_WALL_SHAPE, LOW),
|
||||||
|
GBlockstate.variant(side_low, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(WEST_WALL_SHAPE, LOW),
|
||||||
|
GBlockstate.variant(side_low, true, R0, R270))
|
||||||
|
// TALL
|
||||||
|
.with(GBlockstate.when(NORTH_WALL_SHAPE, TALL),
|
||||||
|
GBlockstate.variant(side_tall, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EAST_WALL_SHAPE, TALL),
|
||||||
|
GBlockstate.variant(side_tall, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(SOUTH_WALL_SHAPE, TALL),
|
||||||
|
GBlockstate.variant(side_tall, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(WEST_WALL_SHAPE, TALL),
|
||||||
|
GBlockstate.variant(side_tall, true, R0, R270))
|
||||||
|
// PILLAR LOW
|
||||||
|
.with(GBlockstate.when(NORTH_WALL_SHAPE, LOW, UP, true),
|
||||||
|
GBlockstate.variant(pillar_low, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EAST_WALL_SHAPE, LOW, UP, true),
|
||||||
|
GBlockstate.variant(pillar_low, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(SOUTH_WALL_SHAPE, LOW, UP, true),
|
||||||
|
GBlockstate.variant(pillar_low, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(WEST_WALL_SHAPE, LOW, UP, true),
|
||||||
|
GBlockstate.variant(pillar_low, true, R0, R270))
|
||||||
|
// PILLAR TALL
|
||||||
|
.with(GBlockstate.when(NORTH_WALL_SHAPE, TALL, UP, true),
|
||||||
|
GBlockstate.variant(pillar_tall, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EAST_WALL_SHAPE, TALL, UP, true),
|
||||||
|
GBlockstate.variant(pillar_tall, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(SOUTH_WALL_SHAPE, TALL, UP, true),
|
||||||
|
GBlockstate.variant(pillar_tall, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(WEST_WALL_SHAPE, TALL, UP, true),
|
||||||
|
GBlockstate.variant(pillar_tall, true, R0, R270))
|
||||||
|
// PILLAR NONE
|
||||||
|
.with(GBlockstate.when(NORTH_WALL_SHAPE, NONE, UP, true),
|
||||||
|
GBlockstate.variant(pillar_none, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(EAST_WALL_SHAPE, NONE, UP, true),
|
||||||
|
GBlockstate.variant(pillar_none, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(SOUTH_WALL_SHAPE, NONE, UP, true),
|
||||||
|
GBlockstate.variant(pillar_none, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(WEST_WALL_SHAPE, NONE, UP, true),
|
||||||
|
GBlockstate.variant(pillar_none, true, R0, R270))
|
||||||
|
// JUNCTION LOW
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_e, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_e, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_e, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_e, true, R0, R270))
|
||||||
|
// JUNCTION TALL
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_e, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_e, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_e, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_e, true, R0, R270))
|
||||||
|
// JUNCTION LOW I
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_i, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_i, true, R0, R90))
|
||||||
|
// JUNCTION TALL I
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i, true, R0, R90))
|
||||||
|
// JUNCTION LOW TALL I
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_i, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_i, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_i, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_i, true, R0, R270))
|
||||||
|
// JUNCTION LOW C
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c, true, R0, R270))
|
||||||
|
// JUNCTION TALL C
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c, true, R0, R270))
|
||||||
|
// JUNCTION LOW TALL C
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c, true, R0, R270))
|
||||||
|
// JUNCTION TALL LOW C
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c, true, R0, R270))
|
||||||
|
// JUNCTION LOW T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_t, true, R0, R270))
|
||||||
|
// JUNCTION TALL T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t, true, R0, R270))
|
||||||
|
// JUNCTION TALL LOW C T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_c_t, true, R0, R270))
|
||||||
|
// JUNCTION TALL I LOW T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i_low_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i_low_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i_low_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i_low_t, true, R0, R270))
|
||||||
|
// JUNCTION LOW I TALL T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_i_tall_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_i_tall_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_i_tall_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_i_tall_t, true, R0, R270))
|
||||||
|
// JUNCTION LOW TALL C T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_tall_c_t, true, R0, R270))
|
||||||
|
// JUNCTION LOW C TALL T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c_tall_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c_tall_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c_tall_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(low_c_tall_t, true, R0, R270))
|
||||||
|
// JUNCTION TALL C LOW T
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, NONE,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_t, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, NONE,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_t, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, NONE,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_t, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, NONE,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_t, true, R0, R270))
|
||||||
|
// JUNCTION X
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(ReFramed.id("wall_low_x_special"), true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(ReFramed.id("wall_tall_x_special"), true, R0, R0))
|
||||||
|
// JUNCTION I X
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i_low_i_x, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_i_low_i_x, true, R0, R90))
|
||||||
|
// JUNCTION TALL LOW T X
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_t_x, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_t_x, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_t_x, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_low_t_x, true, R0, R270))
|
||||||
|
// JUNCTION TALL C LOW C X
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_c_x, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_c_x, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_c_x, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_c_low_c_x, true, R0, R270))
|
||||||
|
// JUNCTION TALL C LOW C X
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, LOW,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t_low_x, true, R0, R0))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, LOW,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t_low_x, true, R0, R90))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, LOW,
|
||||||
|
EAST_WALL_SHAPE, TALL,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t_low_x, true, R0, R180))
|
||||||
|
.with(GBlockstate.when(
|
||||||
|
NORTH_WALL_SHAPE, TALL,
|
||||||
|
EAST_WALL_SHAPE, LOW,
|
||||||
|
SOUTH_WALL_SHAPE, TALL,
|
||||||
|
WEST_WALL_SHAPE, TALL,
|
||||||
|
UP, false
|
||||||
|
),
|
||||||
|
GBlockstate.variant(tall_t_low_x, true, R0, R270));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.item;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
|
||||||
|
public class Blueprint implements RecipeSetter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.TOOLS, convertible, 3)
|
||||||
|
.pattern("PI")
|
||||||
|
.pattern("PP")
|
||||||
|
.input('P', Items.PAPER)
|
||||||
|
.input('I', Items.INK_SAC)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(Items.PAPER), FabricRecipeProvider.conditionsFromItem(Items.PAPER))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.item;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
|
||||||
|
public class Hammer implements RecipeSetter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.TOOLS, convertible)
|
||||||
|
.pattern(" CI")
|
||||||
|
.pattern(" ~C")
|
||||||
|
.pattern("~ ")
|
||||||
|
.input('I', Items.IRON_INGOT)
|
||||||
|
.input('C', ReFramed.CUBE)
|
||||||
|
.input('~', Items.STICK)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package fr.adrien1106.reframed.generator.item;
|
||||||
|
|
||||||
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
|
import fr.adrien1106.reframed.generator.RecipeSetter;
|
||||||
|
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
||||||
|
import net.minecraft.data.server.recipe.RecipeExporter;
|
||||||
|
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
||||||
|
import net.minecraft.item.ItemConvertible;
|
||||||
|
import net.minecraft.item.Items;
|
||||||
|
import net.minecraft.recipe.book.RecipeCategory;
|
||||||
|
|
||||||
|
public class Screwdriver implements RecipeSetter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRecipe(RecipeExporter exporter, ItemConvertible convertible) {
|
||||||
|
ShapedRecipeJsonBuilder
|
||||||
|
.create(RecipeCategory.TOOLS, convertible)
|
||||||
|
.pattern(" I")
|
||||||
|
.pattern(" I ")
|
||||||
|
.pattern("C ")
|
||||||
|
.input('I', Items.IRON_INGOT)
|
||||||
|
.input('C', ReFramed.CUBE)
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
||||||
|
.criterion(FabricRecipeProvider.hasItem(convertible), FabricRecipeProvider.conditionsFromItem(convertible))
|
||||||
|
.offerTo(exporter);
|
||||||
|
}
|
||||||
|
}
|
@ -2,23 +2,17 @@ package fr.adrien1106.reframed.item;
|
|||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.block.ReFramedEntity;
|
import fr.adrien1106.reframed.block.ReFramedEntity;
|
||||||
import fr.adrien1106.reframed.generator.RecipeSetter;
|
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.ItemUsageContext;
|
import net.minecraft.item.ItemUsageContext;
|
||||||
import net.minecraft.item.Items;
|
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.sound.SoundEvents;
|
import net.minecraft.sound.SoundEvents;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class ReFramedBlueprintItem extends Item implements RecipeSetter {
|
public class ReFramedBlueprintItem extends Item {
|
||||||
public ReFramedBlueprintItem(Settings settings) {
|
public ReFramedBlueprintItem(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
}
|
}
|
||||||
@ -39,17 +33,4 @@ public class ReFramedBlueprintItem extends Item implements RecipeSetter {
|
|||||||
|
|
||||||
return ActionResult.SUCCESS;
|
return ActionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.TOOLS, this, 3)
|
|
||||||
.pattern("PI")
|
|
||||||
.pattern("PP")
|
|
||||||
.input('P', Items.PAPER)
|
|
||||||
.input('I', Items.INK_SAC)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(Items.PAPER), FabricRecipeProvider.conditionsFromItem(Items.PAPER))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,26 +2,20 @@ package fr.adrien1106.reframed.item;
|
|||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.block.ReFramedDoubleBlock;
|
import fr.adrien1106.reframed.block.ReFramedDoubleBlock;
|
||||||
import fr.adrien1106.reframed.generator.RecipeSetter;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity;
|
import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.ItemUsageContext;
|
import net.minecraft.item.ItemUsageContext;
|
||||||
import net.minecraft.item.Items;
|
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.sound.SoundEvents;
|
import net.minecraft.sound.SoundEvents;
|
||||||
import net.minecraft.util.ActionResult;
|
import net.minecraft.util.ActionResult;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class ReFramedHammerItem extends Item implements RecipeSetter {
|
public class ReFramedHammerItem extends Item {
|
||||||
public ReFramedHammerItem(Settings settings) {
|
public ReFramedHammerItem(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
}
|
}
|
||||||
@ -52,19 +46,4 @@ public class ReFramedHammerItem extends Item implements RecipeSetter {
|
|||||||
ReFramed.chunkRerenderProxy.accept(world, pos);
|
ReFramed.chunkRerenderProxy.accept(world, pos);
|
||||||
return ActionResult.SUCCESS;
|
return ActionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.TOOLS, this)
|
|
||||||
.pattern(" CI")
|
|
||||||
.pattern(" ~C")
|
|
||||||
.pattern("~ ")
|
|
||||||
.input('I', Items.IRON_INGOT)
|
|
||||||
.input('C', ReFramed.CUBE)
|
|
||||||
.input('~', Items.STICK)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,11 @@ package fr.adrien1106.reframed.item;
|
|||||||
|
|
||||||
import fr.adrien1106.reframed.ReFramed;
|
import fr.adrien1106.reframed.ReFramed;
|
||||||
import fr.adrien1106.reframed.block.ReFramedDoubleBlock;
|
import fr.adrien1106.reframed.block.ReFramedDoubleBlock;
|
||||||
import fr.adrien1106.reframed.generator.RecipeSetter;
|
|
||||||
import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity;
|
import fr.adrien1106.reframed.util.blocks.ThemeableBlockEntity;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.data.server.recipe.RecipeExporter;
|
|
||||||
import net.minecraft.data.server.recipe.ShapedRecipeJsonBuilder;
|
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemUsageContext;
|
import net.minecraft.item.ItemUsageContext;
|
||||||
import net.minecraft.item.Items;
|
|
||||||
import net.minecraft.recipe.book.RecipeCategory;
|
|
||||||
import net.minecraft.sound.BlockSoundGroup;
|
import net.minecraft.sound.BlockSoundGroup;
|
||||||
import net.minecraft.sound.SoundCategory;
|
import net.minecraft.sound.SoundCategory;
|
||||||
import net.minecraft.state.property.Properties;
|
import net.minecraft.state.property.Properties;
|
||||||
@ -21,7 +15,7 @@ import net.minecraft.util.math.BlockPos;
|
|||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class ReFramedScrewdriverItem extends Item implements RecipeSetter {
|
public class ReFramedScrewdriverItem extends Item {
|
||||||
|
|
||||||
public ReFramedScrewdriverItem(Settings settings) {
|
public ReFramedScrewdriverItem(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
@ -61,18 +55,4 @@ public class ReFramedScrewdriverItem extends Item implements RecipeSetter {
|
|||||||
ReFramed.chunkRerenderProxy.accept(world, pos);
|
ReFramed.chunkRerenderProxy.accept(world, pos);
|
||||||
return ActionResult.SUCCESS;
|
return ActionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setRecipe(RecipeExporter exporter) {
|
|
||||||
ShapedRecipeJsonBuilder
|
|
||||||
.create(RecipeCategory.TOOLS, this)
|
|
||||||
.pattern(" I")
|
|
||||||
.pattern(" I ")
|
|
||||||
.pattern("C ")
|
|
||||||
.input('I', Items.IRON_INGOT)
|
|
||||||
.input('C', ReFramed.CUBE)
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(ReFramed.CUBE), FabricRecipeProvider.conditionsFromItem(ReFramed.CUBE))
|
|
||||||
.criterion(FabricRecipeProvider.hasItem(this), FabricRecipeProvider.conditionsFromItem(this))
|
|
||||||
.offerTo(exporter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [4, 0, 4],
|
||||||
|
"to": [5, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 2, 11, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 14, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 12, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 12, 5], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [4, 0, 4],
|
||||||
|
"to": [5, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 4, 5, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 0],
|
||||||
|
"to": [11, 14, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"},
|
||||||
|
"east": {"uv": [12, 2, 16, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 2, 11, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [0, 2, 4, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 0, 11, 4], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 0],
|
||||||
|
"to": [11, 16, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 16], "texture": "#side", "cullface": "north"},
|
||||||
|
"east": {"uv": [12, 0, 16, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 11, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [0, 0, 4, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 0, 11, 4], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 0],
|
||||||
|
"to": [11, 14, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"},
|
||||||
|
"east": {"uv": [12, 2, 16, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [0, 2, 4, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 0, 11, 4], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 12, 11, 16], "texture": "#bottom"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 12],
|
||||||
|
"to": [11, 14, 16],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [0, 2, 4, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "south"},
|
||||||
|
"west": {"uv": [12, 2, 16, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 12, 11, 16], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 0, 11, 4], "texture": "#bottom"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 4],
|
||||||
|
"to": [12, 16, 12],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 12, 16], "texture": "#side"},
|
||||||
|
"east": {"uv": [4, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 12, 16], "texture": "#side", "cullface": "south"},
|
||||||
|
"west": {"uv": [4, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 4, 12, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 4, 12, 12], "texture": "#bottom"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 2, 11, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 8], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 8, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top"},
|
||||||
|
"down": {"uv": [8, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 8, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [8, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [8, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"east": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 8, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [5, 5, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 4, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 11, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 11, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 11, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top"},
|
||||||
|
"down": {"uv": [8, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [8, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"east": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 0, 8, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 8, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 8],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 8, 11, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [8, 5, 11, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 5],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 8],
|
||||||
|
"to": [8, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [8, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 8], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 8, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 8],
|
||||||
|
"to": [11, 16, 12],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"east": {"uv": [4, 0, 8, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [8, 0, 12, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 11, 12], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 8, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [8, 2, 12, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [5, 4, 11, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 11],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 11, 11, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 11, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 8], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 8, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 0, 11, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 0, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [8, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 0, 8, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 8, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 11],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 11, 11, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 8],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 8, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 5],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [8, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [8, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 8, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [8, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 8],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 8, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 5],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 8],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [8, 5, 11, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 12], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 4, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 11],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 11, 11, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 11, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 8],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 8, 8, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 8, 8], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [8, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 8, 8], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 16, 8],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [8, 0, 11, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 0, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 8], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [8, 8, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 8],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 8, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 2, 8, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 8, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [8, 2, 11, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [8, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 11],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 11, 11, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [8, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 8, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 5, 8, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 14, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 8, 2], "texture": "#side"},
|
||||||
|
"south": {"uv": [8, 0, 11, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [8, 5, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [8, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [8, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 0, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 11],
|
||||||
|
"to": [11, 14, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 11, 11, 12], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 14, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"south": {"uv": [5, 0, 11, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 14, 11],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 11],
|
||||||
|
"to": [11, 16, 12],
|
||||||
|
"faces": {
|
||||||
|
"east": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 11, 11, 12], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 4, 11, 5], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 0, 5],
|
||||||
|
"to": [5, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 5, 5, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 5, 5, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [11, 0, 5],
|
||||||
|
"to": [12, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [11, 5, 12, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [11, 5, 12, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 5],
|
||||||
|
"to": [11, 16, 11],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 5, 11, 11], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 5, 11, 11], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [4, 0, 4],
|
||||||
|
"to": [5, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 2, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 2, 5, 16], "texture": "#side"},
|
||||||
|
"down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 14, 5],
|
||||||
|
"faces": {
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [4, 14, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 12, 2], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 2], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 12, 5], "texture": "#top", "cullface": "up"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [4, 0, 4],
|
||||||
|
"to": [5, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 4, 5, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [4, 0, 4],
|
||||||
|
"to": [5, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [11, 0, 12, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [4, 0, 5, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [4, 4, 5, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [4, 11, 5, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [5, 0, 4],
|
||||||
|
"to": [11, 16, 5],
|
||||||
|
"faces": {
|
||||||
|
"up": {"uv": [5, 4, 11, 5], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 11, 11, 12], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 0],
|
||||||
|
"to": [11, 14, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 2, 11, 16], "texture": "#side", "cullface": "north"},
|
||||||
|
"east": {"uv": [12, 2, 16, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [0, 2, 4, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 0, 11, 4], "texture": "#top"},
|
||||||
|
"down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"credit": "Made with Blockbench",
|
||||||
|
"parent": "block/block",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [5, 0, 0],
|
||||||
|
"to": [11, 16, 4],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [5, 0, 11, 16], "texture": "#side", "cullface": "north"},
|
||||||
|
"east": {"uv": [12, 0, 16, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [0, 0, 4, 16], "texture": "#side"},
|
||||||
|
"up": {"uv": [5, 0, 11, 4], "texture": "#top", "cullface": "up"},
|
||||||
|
"down": {"uv": [5, 12, 11, 16], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user