Tiny slopes !!!!!!
This commit is contained in:
parent
3ad97d652d
commit
ef405062a6
@ -76,6 +76,7 @@ public class Templates implements ModInitializer {
|
|||||||
|
|
||||||
//oddball templates:
|
//oddball templates:
|
||||||
public static final Block SLOPE = Registry.register(Registries.BLOCK, id("slope") , new TemplateSlopeBlock(TemplateInteractionUtil.makeSettings()));
|
public static final Block SLOPE = Registry.register(Registries.BLOCK, id("slope") , new TemplateSlopeBlock(TemplateInteractionUtil.makeSettings()));
|
||||||
|
public static final Block TINY_SLOPE = Registry.register(Registries.BLOCK, id("tiny_slope") , new TemplateSlopeBlock.Tiny(TemplateInteractionUtil.makeSettings()));
|
||||||
//30 degree slope (shallow/deep)
|
//30 degree slope (shallow/deep)
|
||||||
//corner slopes
|
//corner slopes
|
||||||
//quarter slabs????
|
//quarter slabs????
|
||||||
@ -111,7 +112,8 @@ public class Templates implements ModInitializer {
|
|||||||
TRAPDOOR,
|
TRAPDOOR,
|
||||||
VERTICAL_SLAB,
|
VERTICAL_SLAB,
|
||||||
WALL,
|
WALL,
|
||||||
SLOPE
|
SLOPE,
|
||||||
|
TINY_SLOPE
|
||||||
).build(null)
|
).build(null)
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -147,7 +149,9 @@ public class Templates implements ModInitializer {
|
|||||||
Registry.register(Registries.ITEM, id("trapdoor") , new BlockItem(TRAPDOOR, new Item.Settings()));
|
Registry.register(Registries.ITEM, id("trapdoor") , new BlockItem(TRAPDOOR, new Item.Settings()));
|
||||||
Registry.register(Registries.ITEM, id("vertical_slab") , new BlockItem(VERTICAL_SLAB, new Item.Settings()));
|
Registry.register(Registries.ITEM, id("vertical_slab") , new BlockItem(VERTICAL_SLAB, new Item.Settings()));
|
||||||
Registry.register(Registries.ITEM, id("wall") , new BlockItem(WALL, new Item.Settings()));
|
Registry.register(Registries.ITEM, id("wall") , new BlockItem(WALL, new Item.Settings()));
|
||||||
|
|
||||||
Registry.register(Registries.ITEM, id("slope") , new BlockItem(SLOPE, new Item.Settings()));
|
Registry.register(Registries.ITEM, id("slope") , new BlockItem(SLOPE, new Item.Settings()));
|
||||||
|
Registry.register(Registries.ITEM, id("tiny_slope") , new BlockItem(TINY_SLOPE, new Item.Settings()));
|
||||||
|
|
||||||
Registry.register(Registries.ITEM, id("cool_rivulet") , new BlockItem(COOL_RIVULET, new Item.Settings())); //Very good
|
Registry.register(Registries.ITEM, id("cool_rivulet") , new BlockItem(COOL_RIVULET, new Item.Settings())); //Very good
|
||||||
}
|
}
|
||||||
@ -187,6 +191,7 @@ public class Templates implements ModInitializer {
|
|||||||
|
|
||||||
//Oddball that doesn't look anything like vanilla blocks
|
//Oddball that doesn't look anything like vanilla blocks
|
||||||
e.add(SLOPE);
|
e.add(SLOPE);
|
||||||
|
e.add(TINY_SLOPE);
|
||||||
|
|
||||||
//Very good
|
//Very good
|
||||||
e.add(COOL_RIVULET);
|
e.add(COOL_RIVULET);
|
||||||
|
@ -74,7 +74,9 @@ public class TemplatesClient implements ClientModInitializer {
|
|||||||
Templates.TRAPDOOR,
|
Templates.TRAPDOOR,
|
||||||
Templates.VERTICAL_SLAB,
|
Templates.VERTICAL_SLAB,
|
||||||
Templates.WALL,
|
Templates.WALL,
|
||||||
Templates.SLOPE
|
|
||||||
|
Templates.SLOPE,
|
||||||
|
Templates.TINY_SLOPE
|
||||||
);
|
);
|
||||||
|
|
||||||
//vanilla style models (using "auto" method)
|
//vanilla style models (using "auto" method)
|
||||||
@ -128,6 +130,8 @@ public class TemplatesClient implements ClientModInitializer {
|
|||||||
//mesh models
|
//mesh models
|
||||||
provider.addTemplateModel(Templates.id("slope_special") , new UnbakedMeshRetexturedModel(Templates.id("block/slope_base"), SlopeBaseMesh::makeUpright));
|
provider.addTemplateModel(Templates.id("slope_special") , new UnbakedMeshRetexturedModel(Templates.id("block/slope_base"), SlopeBaseMesh::makeUpright));
|
||||||
provider.addTemplateModel(Templates.id("slope_side_special") , new UnbakedMeshRetexturedModel(Templates.id("block/slope_base"), SlopeBaseMesh::makeSide));
|
provider.addTemplateModel(Templates.id("slope_side_special") , new UnbakedMeshRetexturedModel(Templates.id("block/slope_base"), SlopeBaseMesh::makeSide));
|
||||||
|
provider.addTemplateModel(Templates.id("tiny_slope_special") , new UnbakedMeshRetexturedModel(Templates.id("block/tiny_slope_base"), SlopeBaseMesh::makeTinyUpright));
|
||||||
|
provider.addTemplateModel(Templates.id("tiny_slope_side_special") , new UnbakedMeshRetexturedModel(Templates.id("block/tiny_slope_base"), SlopeBaseMesh::makeTinySide));
|
||||||
|
|
||||||
//item only models
|
//item only models
|
||||||
provider.addTemplateModel(Templates.id("button_inventory_special") , new UnbakedAutoRetexturedModel(new Identifier("block/button_inventory")));
|
provider.addTemplateModel(Templates.id("button_inventory_special") , new UnbakedAutoRetexturedModel(new Identifier("block/button_inventory")));
|
||||||
@ -149,6 +153,8 @@ public class TemplatesClient implements ClientModInitializer {
|
|||||||
provider.assignItemModel(Templates.id("trapdoor_bottom_special") , Templates.TRAPDOOR);
|
provider.assignItemModel(Templates.id("trapdoor_bottom_special") , Templates.TRAPDOOR);
|
||||||
provider.assignItemModel(Templates.id("vertical_slab_special") , Templates.VERTICAL_SLAB);
|
provider.assignItemModel(Templates.id("vertical_slab_special") , Templates.VERTICAL_SLAB);
|
||||||
provider.assignItemModel(Templates.id("wall_inventory_special") , Templates.WALL);
|
provider.assignItemModel(Templates.id("wall_inventory_special") , Templates.WALL);
|
||||||
|
|
||||||
provider.assignItemModel(Templates.id("slope_special") , Templates.SLOPE);
|
provider.assignItemModel(Templates.id("slope_special") , Templates.SLOPE);
|
||||||
|
provider.assignItemModel(Templates.id("tiny_slope_special") , Templates.TINY_SLOPE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,16 +19,19 @@ import javax.annotation.Nullable;
|
|||||||
public class TemplateSlopeBlock extends WaterloggableTemplateBlock {
|
public class TemplateSlopeBlock extends WaterloggableTemplateBlock {
|
||||||
public static final EnumProperty<Edge> EDGE = EnumProperty.of("edge", Edge.class);
|
public static final EnumProperty<Edge> EDGE = EnumProperty.of("edge", Edge.class);
|
||||||
|
|
||||||
private static final VoxelShape[] shapes = new VoxelShape[Edge.values().length];
|
protected final VoxelShape[] shapes = new VoxelShape[Edge.values().length];
|
||||||
static {
|
|
||||||
for(Edge edge : Edge.values()) {
|
|
||||||
shapes[edge.ordinal()] = StairShapeMaker.makeStair(edge, 1, 0.125d, 0.125d, 0.125d, 8);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TemplateSlopeBlock(Settings settings) {
|
public TemplateSlopeBlock(Settings settings) {
|
||||||
super(settings);
|
super(settings);
|
||||||
setDefaultState(getDefaultState().with(EDGE, Edge.DOWN_NORTH));
|
setDefaultState(getDefaultState().with(EDGE, Edge.DOWN_NORTH));
|
||||||
|
|
||||||
|
for(Edge edge : Edge.values()) {
|
||||||
|
shapes[edge.ordinal()] = getShape(edge);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected VoxelShape getShape(Edge edge) {
|
||||||
|
return StairShapeMaker.makeStair(edge, 1, 0.125d, 0.125d, 0.125d, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -58,4 +61,15 @@ public class TemplateSlopeBlock extends WaterloggableTemplateBlock {
|
|||||||
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ctx) {
|
public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ctx) {
|
||||||
return shapes[state.get(EDGE).ordinal()];
|
return shapes[state.get(EDGE).ordinal()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class Tiny extends TemplateSlopeBlock {
|
||||||
|
public Tiny(Settings settings) {
|
||||||
|
super(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected VoxelShape getShape(Edge edge) {
|
||||||
|
return StairShapeMaker.makeStair(edge, 0.5, 0.125d, 0.125d, 0.125d, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,10 +21,8 @@ public class SlopeBaseMesh {
|
|||||||
|
|
||||||
public static Mesh makeUpright() {
|
public static Mesh makeUpright() {
|
||||||
Renderer renderer = TemplatesClient.getFabricRenderer();
|
Renderer renderer = TemplatesClient.getFabricRenderer();
|
||||||
|
|
||||||
MeshBuilder builder = renderer.meshBuilder();
|
MeshBuilder builder = renderer.meshBuilder();
|
||||||
QuadEmitter qu = builder.getEmitter();
|
QuadEmitter qu = builder.getEmitter();
|
||||||
|
|
||||||
qu.tag(TAG_SLOPE)
|
qu.tag(TAG_SLOPE)
|
||||||
.pos(0, 0f, 0f, 0f).pos(1, 0f, 1f, 1f).pos(2, 1f, 1f, 1f).pos(3, 1f, 0f, 0f)
|
.pos(0, 0f, 0f, 0f).pos(1, 0f, 1f, 1f).pos(2, 1f, 1f, 1f).pos(3, 1f, 0f, 0f)
|
||||||
.color(-1, -1, -1, -1)
|
.color(-1, -1, -1, -1)
|
||||||
@ -60,7 +58,56 @@ public class SlopeBaseMesh {
|
|||||||
public static Mesh makeSide() {
|
public static Mesh makeSide() {
|
||||||
Matrix4f mat = new Matrix4f();
|
Matrix4f mat = new Matrix4f();
|
||||||
RotationAxis.POSITIVE_Z.rotationDegrees(90).get(mat);
|
RotationAxis.POSITIVE_Z.rotationDegrees(90).get(mat);
|
||||||
|
|
||||||
return MeshTransformUtil.pretransformMesh(makeUpright(), MeshTransformUtil.applyMatrix(mat));
|
return MeshTransformUtil.pretransformMesh(makeUpright(), MeshTransformUtil.applyMatrix(mat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//looks weird since i wrote a janky script to massage a .bbmodel, some manual fixups applied
|
||||||
|
public static Mesh makeTinyUpright() {
|
||||||
|
Renderer renderer = TemplatesClient.getFabricRenderer();
|
||||||
|
MeshBuilder builder = renderer.meshBuilder();
|
||||||
|
QuadEmitter qu = builder.getEmitter();
|
||||||
|
qu.tag(TAG_LEFT)
|
||||||
|
.pos(0, 1f, 0.25f, 0.75f).uv(0, 0.25f, 0.75f)
|
||||||
|
.pos(1, 1f, 0.5f, 1f).uv(1, 0f, 0.5f)
|
||||||
|
.pos(2, 1f, 0f, 1f).uv(2, 0f, 1f)
|
||||||
|
.pos(3, 1f, 0f, 0.5f).uv(3, 0.5f, 1f)
|
||||||
|
.color(-1, -1, -1, -1)
|
||||||
|
.emit()
|
||||||
|
.tag(TAG_RIGHT)
|
||||||
|
.pos(0, 0f, 0f, 1f).uv(0, 1f, 1f)
|
||||||
|
.pos(1, 0f, 0.5f, 1f).uv(1, 1f, 0.5f)
|
||||||
|
.pos(2, 0f, 0.25f, 0.75f).uv(2, 0.75f, 0.75f)
|
||||||
|
.pos(3, 0f, 0f, 0.5f).uv(3, 0.5f, 1f)
|
||||||
|
.color(-1, -1, -1, -1)
|
||||||
|
.emit()
|
||||||
|
.tag(TAG_BOTTOM)
|
||||||
|
.pos(0, 1f, 0f, 0.5f).uv(0, 1f, 0.5f)
|
||||||
|
.pos(1, 1f, 0f, 1f).uv(1, 1f, 0f)
|
||||||
|
.pos(2, 0f, 0f, 1f).uv(2, 0f, 0f)
|
||||||
|
.pos(3, 0f, 0f, 0.5f).uv(3, 0f, 0.5f)
|
||||||
|
.color(-1, -1, -1, -1)
|
||||||
|
.emit()
|
||||||
|
.tag(TAG_BACK)
|
||||||
|
.pos(0, 1f, 0f, 1f).uv(0, 1f, 1f)
|
||||||
|
.pos(1, 1f, 0.5f, 1f).uv(1, 1f, 0.5f)
|
||||||
|
.pos(2, 0f, 0.5f, 1f).uv(2, 0f, 0.5f)
|
||||||
|
.pos(3, 0f, 0f, 1f).uv(3, 0f, 1f)
|
||||||
|
.color(-1, -1, -1, -1)
|
||||||
|
.emit()
|
||||||
|
.tag(TAG_SLOPE)
|
||||||
|
.pos(0, 1f, 0.5f, 1f).uv(2, 0f, 0.5f) //manually permuted uvs
|
||||||
|
.pos(1, 1f, 0f, 0.5f).uv(3, 0f, 1f)
|
||||||
|
.pos(2, 0f, 0f, 0.5f).uv(0, 1f, 1f)
|
||||||
|
.pos(3, 0f, 0.5f, 1f).uv(1, 1f, 0.5f)
|
||||||
|
.color(-1, -1, -1, -1)
|
||||||
|
.emit()
|
||||||
|
;
|
||||||
|
return builder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Mesh makeTinySide() {
|
||||||
|
Matrix4f mat = new Matrix4f();
|
||||||
|
RotationAxis.POSITIVE_Z.rotationDegrees(90).get(mat);
|
||||||
|
return MeshTransformUtil.pretransformMesh(makeTinyUpright(), MeshTransformUtil.applyMatrix(mat));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,67 @@
|
|||||||
|
package io.github.cottonmc.templates.util;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
//i probalby shouldnt ship this in the mod lol
|
||||||
|
public class BbModelepic {
|
||||||
|
static class Model {
|
||||||
|
List<Elem> elements;
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Elem {
|
||||||
|
Map<String, List<Integer>> vertices;
|
||||||
|
Map<String, Face> faces;
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Face {
|
||||||
|
Map<String, List<Integer>> uv;
|
||||||
|
List<String> vertices;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Model m = new Gson().fromJson(model, Model.class);
|
||||||
|
|
||||||
|
Map<String, List<Integer>> verts = m.elements.get(0).vertices;
|
||||||
|
List<Face> faces = m.elements.get(0).faces.values().stream().toList();
|
||||||
|
|
||||||
|
List<String> classifications = List.of("TAG_LEFT", "TAG_RIGHT", "TAG_BOTTOM", "TAG_BACK", "TAG_SLOPE");
|
||||||
|
Iterator<String> asd = classifications.iterator();
|
||||||
|
|
||||||
|
for(Face face : faces) {
|
||||||
|
System.out.printf(".tag(%s)%n", asd.next());
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
String vertId = face.vertices.get(permute(i));
|
||||||
|
List<Integer> coords = verts.get(vertId);
|
||||||
|
System.out.printf(".pos(%s, %sf, %sf, %sf)", i, p(coords.get(0)/16f), p(coords.get(1)/16f), p(coords.get(2)/16f));
|
||||||
|
|
||||||
|
List<Integer> uv = face.uv.get(vertId);
|
||||||
|
System.out.printf(".uv(%s, %sf, %sf)%n", i, p(uv.get(0)/16f), p(uv.get(1)/16f));
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println(".color(-1, -1, -1, -1)\n.emit()");
|
||||||
|
}
|
||||||
|
System.out.println(';');
|
||||||
|
}
|
||||||
|
|
||||||
|
//i don't like "16.0f" i'd rather "16f"
|
||||||
|
private static String p(float f) {
|
||||||
|
if(f == (long) f) return Long.toString((long) f);
|
||||||
|
else return Float.toString(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int permute(int i) {
|
||||||
|
if(i == 0) return 2;
|
||||||
|
if(i == 1) return 0;
|
||||||
|
if(i == 2) return 1;
|
||||||
|
if(i == 3) return 3;
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String model = """
|
||||||
|
{"meta":{"format_version":"4.5","model_format":"free","box_uv":false},"name":"","model_identifier":"","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"cuboid","color":4,"origin":[-8,0,-8],"rotation":[0,0,0],"visibility":true,"locked":false,"vertices":{"Iy48":[16,8,16],"dg4s":[16,4,12],"ezd5":[16,0,16],"txzT":[16,0,8],"ZcIz":[0,8,16],"tgTW":[0,0,16],"Q2eV":[0,0,8],"8xsY":[0,4,12]},"faces":{"JSoJzuHO":{"uv":{"Iy48":[0,8],"ezd5":[0,16],"dg4s":[4,12],"txzT":[8,16]},"vertices":["Iy48","ezd5","dg4s","txzT"]},"0I6IF0zk":{"uv":{"ZcIz":[16,8],"tgTW":[16,16],"Q2eV":[8,16],"8xsY":[12,12]},"vertices":["ZcIz","8xsY","tgTW","Q2eV"]},"d7iH7DqS":{"uv":{"ezd5":[16,0],"tgTW":[0,0],"txzT":[16,8],"Q2eV":[0,8]},"vertices":["ezd5","tgTW","txzT","Q2eV"]},"OQ809wKZ":{"uv":{"Iy48":[16,8],"ZcIz":[0,8],"ezd5":[16,16],"tgTW":[0,16]},"vertices":["Iy48","ZcIz","ezd5","tgTW"]},"TSyHMrco":{"uv":{"txzT":[0,16],"Q2eV":[16,16],"Iy48":[0,8],"ZcIz":[16,8]},"vertices":["txzT","Q2eV","Iy48","ZcIz"]}},"type":"mesh","uuid":"3152a30a-ea8e-4ceb-57eb-58319c89815a"}],"outliner":["3152a30a-ea8e-4ceb-57eb-58319c89815a"],"textures":[]}""";
|
||||||
|
}
|
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"variants": {
|
||||||
|
"edge=down_east": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"edge=down_north": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"edge=down_south": {
|
||||||
|
"model": "templates:tiny_slope_special"
|
||||||
|
},
|
||||||
|
"edge=down_west": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"edge=up_east": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 180,
|
||||||
|
"y": 90
|
||||||
|
},
|
||||||
|
"edge=up_north": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 180
|
||||||
|
},
|
||||||
|
"edge=up_south": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 180,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"edge=up_west": {
|
||||||
|
"model": "templates:tiny_slope_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"x": 180,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"edge=north_east": {
|
||||||
|
"model": "templates:tiny_slope_side_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 270
|
||||||
|
},
|
||||||
|
"edge=north_west": {
|
||||||
|
"model": "templates:tiny_slope_side_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 180
|
||||||
|
},
|
||||||
|
"edge=south_east": {
|
||||||
|
"model": "templates:tiny_slope_side_special",
|
||||||
|
"uvlock": true
|
||||||
|
},
|
||||||
|
"edge=south_west": {
|
||||||
|
"model": "templates:tiny_slope_side_special",
|
||||||
|
"uvlock": true,
|
||||||
|
"y": 90
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,7 @@
|
|||||||
"block.templates.post": "Post Template",
|
"block.templates.post": "Post Template",
|
||||||
"block.templates.pressure_plate": "Pressure Plate Template",
|
"block.templates.pressure_plate": "Pressure Plate Template",
|
||||||
"block.templates.slope": "Slope Template",
|
"block.templates.slope": "Slope Template",
|
||||||
|
"block.templates.tiny_slope": "Tiny Slope Template",
|
||||||
"block.templates.slab": "Slab Template",
|
"block.templates.slab": "Slab Template",
|
||||||
"block.templates.stairs": "Stairs Template",
|
"block.templates.stairs": "Stairs Template",
|
||||||
"block.templates.trapdoor": "Trapdoor Template",
|
"block.templates.trapdoor": "Trapdoor Template",
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"parent": "templates:block/slope_base",
|
||||||
|
"gui_light": "front",
|
||||||
|
"display": {
|
||||||
|
"gui": {
|
||||||
|
"rotation": [ 30, 225, 0 ],
|
||||||
|
"translation": [ 2, 0.5, 0],
|
||||||
|
"scale":[ 0.625, 0.625, 0.625 ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -17,6 +17,7 @@
|
|||||||
"templates:trapdoor",
|
"templates:trapdoor",
|
||||||
"templates:vertical_slab",
|
"templates:vertical_slab",
|
||||||
"templates:wall",
|
"templates:wall",
|
||||||
"templates:slope"
|
"templates:slope",
|
||||||
|
"templates:tiny_slope"
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -20,7 +20,8 @@
|
|||||||
"templates:trapdoor",
|
"templates:trapdoor",
|
||||||
"templates:vertical_slab",
|
"templates:vertical_slab",
|
||||||
"templates:wall",
|
"templates:wall",
|
||||||
"templates:slope"
|
"templates:slope",
|
||||||
|
"templates:tiny_slope"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
|
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:block",
|
||||||
|
"pools": [
|
||||||
|
{
|
||||||
|
"rolls": 1,
|
||||||
|
"entries": [
|
||||||
|
{
|
||||||
|
"type": "minecraft:item",
|
||||||
|
"name": "templates:tiny_slope"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"condition": "minecraft:survives_explosion"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
20
src/main/resources/data/templates/recipes/tiny_slope.json
Normal file
20
src/main/resources/data/templates/recipes/tiny_slope.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"type": "minecraft:crafting_shaped",
|
||||||
|
"pattern": [
|
||||||
|
"I~",
|
||||||
|
"II"
|
||||||
|
],
|
||||||
|
"key": {
|
||||||
|
"I": {
|
||||||
|
"item": "minecraft:bamboo"
|
||||||
|
},
|
||||||
|
"~": {
|
||||||
|
"item": "minecraft:string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"item": "templates:tiny_slope",
|
||||||
|
"count": 8
|
||||||
|
},
|
||||||
|
"group": "templates"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user