This commit is contained in:
Aleksey 2020-10-13 17:54:18 +03:00
parent 0d5e6d544c
commit f862bc8792
57 changed files with 493 additions and 225 deletions

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -7,8 +8,11 @@ import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockBase extends Block { public class BlockBase extends Block implements Patterned {
public BlockBase(Settings settings) { public BlockBase(Settings settings) {
super(settings); super(settings);
} }
@ -17,4 +21,20 @@ public class BlockBase extends Block {
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier blockId = Registry.BLOCK.getId(this);
return Patterned.createJson(data, blockId, block);
}
@Override
public String getModelPattern(String block) {
Identifier blockId = Registry.BLOCK.getId(this);
return Patterned.createJson(Patterned.BASE_BLOCK_MODEL, blockId, block);
}
public Identifier statePatternId() {
return Patterned.BLOCK_STATES_PATTERN;
}
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -7,8 +8,11 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.PillarBlock; import net.minecraft.block.PillarBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockPillar extends PillarBlock { public class BlockPillar extends PillarBlock implements Patterned {
public BlockPillar(Settings settings) { public BlockPillar(Settings settings) {
super(settings); super(settings);
} }
@ -17,4 +21,20 @@ public class BlockPillar extends PillarBlock {
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier blockId = Registry.BLOCK.getId(this);
return Patterned.createJson(data, blockId, block);
}
@Override
public String getModelPattern(String block) {
Identifier blockId = Registry.BLOCK.getId(this);
return Patterned.createJson(Patterned.PILLAR_BLOCK_MODEL, blockId, block);
}
public Identifier statePatternId() {
return Patterned.PILLAR_STATES_PATTERN;
}
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -9,14 +10,40 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.PressurePlateBlock; import net.minecraft.block.PressurePlateBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockPressurePlate extends PressurePlateBlock { public class BlockPressurePlate extends PressurePlateBlock implements Patterned {
private final Block parent;
public BlockPressurePlate(Block source) { public BlockPressurePlate(Block source) {
super(ActivationRule.EVERYTHING, FabricBlockSettings.copyOf(source).nonOpaque()); super(ActivationRule.EVERYTHING, FabricBlockSettings.copyOf(source).nonOpaque());
this.parent = source;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(data, parentId, block);
}
@Override
public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
if (block.contains("down")) {
return Patterned.createJson(Patterned.PLATE_MODEL_DOWN, parentId, block);
}
return Patterned.createJson(Patterned.PLATE_MODEL_UP, parentId, block);
}
public Identifier statePatternId() {
return Patterned.PLATE_STATES_PATTERN;
}
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -11,14 +12,10 @@ import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import ru.betterend.BetterEnd;
import ru.betterend.interfaces.Patterned; import ru.betterend.interfaces.Patterned;
public class BlockSlab extends SlabBlock implements Patterned { public class BlockSlab extends SlabBlock implements Patterned {
private final static Identifier STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_slab.json");
private final static Identifier MODEL_PATTERN = BetterEnd.makeID("patterns/block/pattern_slab.json");
private final Block parent; private final Block parent;
public BlockSlab(Block source) { public BlockSlab(Block source) {
@ -32,18 +29,18 @@ public class BlockSlab extends SlabBlock implements Patterned {
} }
@Override @Override
public String blockStatePattern(String name) { public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent); Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(STATES_PATTERN, parentId.getPath()); return Patterned.createJson(data, parentId, block);
} }
@Override @Override
public String modelPattern(String name) { public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent); Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(MODEL_PATTERN, parentId.getPath()); return Patterned.createJson(Patterned.SLAB_BLOCK_MODEL, parentId, block);
} }
public Identifier statePatternId() { public Identifier statePatternId() {
return STATES_PATTERN; return Patterned.SLAB_STATES_PATTERN;
} }
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -9,14 +10,43 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.StairsBlock; import net.minecraft.block.StairsBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockStairs extends StairsBlock { public class BlockStairs extends StairsBlock implements Patterned {
private final Block parent;
public BlockStairs(Block source) { public BlockStairs(Block source) {
super(source.getDefaultState(), FabricBlockSettings.copyOf(source)); super(source.getDefaultState(), FabricBlockSettings.copyOf(source));
this.parent = source;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(data, parentId, block);
}
@Override
public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
if (block.contains("inner")) {
return Patterned.createJson(Patterned.STAIRS_MODEL_INNER, parentId, block);
}
if (block.contains("outer")) {
return Patterned.createJson(Patterned.STAIRS_MODEL_OUTER, parentId, block);
}
return Patterned.createJson(Patterned.STAIRS_MODEL, parentId, block);
}
public Identifier statePatternId() {
return Patterned.STAIRS_STATES_PATTERN;
}
} }

View file

@ -1,22 +1,55 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.StoneButtonBlock; import net.minecraft.block.StoneButtonBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class BlockStoneButton extends StoneButtonBlock { import ru.betterend.interfaces.Patterned;
public class BlockStoneButton extends StoneButtonBlock implements Patterned {
private final Block parent;
public BlockStoneButton(Block source) { public BlockStoneButton(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque()); super(FabricBlockSettings.copyOf(source).nonOpaque());
this.parent = source;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(data, parentId, block);
}
@Override
public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
if (block.contains("item")) {
return Patterned.createJson(Patterned.BUTTON_ITEM_MODEL, parentId, block);
}
if (block.contains("pressed")) {
return Patterned.createJson(Patterned.BUTTON_PRESSED_MODEL, parentId, block);
}
return Patterned.createJson(Patterned.BUTTON_BLOCK_MODEL, parentId, block);
}
@Override
public Identifier statePatternId() {
return Patterned.BUTTON_STATES_PATTERN;
}
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -9,14 +10,40 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.PressurePlateBlock; import net.minecraft.block.PressurePlateBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockStonePressurePlate extends PressurePlateBlock { public class BlockStonePressurePlate extends PressurePlateBlock implements Patterned {
private final Block parent;
public BlockStonePressurePlate(Block source) { public BlockStonePressurePlate(Block source) {
super(ActivationRule.MOBS, FabricBlockSettings.copyOf(source).nonOpaque()); super(ActivationRule.MOBS, FabricBlockSettings.copyOf(source).nonOpaque());
this.parent = source;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(data, parentId, block);
}
@Override
public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
if (block.contains("down")) {
return Patterned.createJson(Patterned.PLATE_MODEL_DOWN, parentId, block);
}
return Patterned.createJson(Patterned.PLATE_MODEL_UP, parentId, block);
}
public Identifier statePatternId() {
return Patterned.PLATE_STATES_PATTERN;
}
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -9,14 +10,46 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.WallBlock; import net.minecraft.block.WallBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockWall extends WallBlock { public class BlockWall extends WallBlock implements Patterned {
private final Block parent;
public BlockWall(Block source) { public BlockWall(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque()); super(FabricBlockSettings.copyOf(source).nonOpaque());
this.parent = source;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(data, parentId, block);
}
@Override
public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
if (block.contains("item")) {
return Patterned.createJson(Patterned.WALL_ITEM_MODEL, parentId, block);
}
if (block.contains("side_tall")) {
return Patterned.createJson(Patterned.WALL_SIDE_TALL_MODEL, parentId, block);
}
if (block.contains("side")) {
return Patterned.createJson(Patterned.WALL_SIDE_MODEL, parentId, block);
}
return Patterned.createJson(Patterned.WALL_POST_MODEL, parentId, block);
}
public Identifier statePatternId() {
return Patterned.WALL_STATES_PATTERN;
}
} }

View file

@ -1,5 +1,6 @@
package ru.betterend.blocks.basis; package ru.betterend.blocks.basis;
import java.io.Reader;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -9,14 +10,44 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.WoodenButtonBlock; import net.minecraft.block.WoodenButtonBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.loot.context.LootContext; import net.minecraft.loot.context.LootContext;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
import ru.betterend.interfaces.Patterned;
public class BlockWoodenButton extends WoodenButtonBlock { public class BlockWoodenButton extends WoodenButtonBlock implements Patterned {
private final Block parent;
public BlockWoodenButton(Block source) { public BlockWoodenButton(Block source) {
super(FabricBlockSettings.copyOf(source).nonOpaque()); super(FabricBlockSettings.copyOf(source).nonOpaque());
this.parent = source;
} }
@Override @Override
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Override
public String getStatesPattern(Reader data, String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
return Patterned.createJson(data, parentId, block);
}
@Override
public String getModelPattern(String block) {
Identifier parentId = Registry.BLOCK.getId(parent);
if (block.contains("item")) {
return Patterned.createJson(Patterned.BUTTON_ITEM_MODEL, parentId, block);
}
if (block.contains("pressed")) {
return Patterned.createJson(Patterned.BUTTON_PRESSED_MODEL, parentId, block);
}
return Patterned.createJson(Patterned.BUTTON_BLOCK_MODEL, parentId, block);
}
@Override
public Identifier statePatternId() {
return Patterned.BUTTON_STATES_PATTERN;
}
} }

View file

@ -38,8 +38,8 @@ public class StoneMaterial {
FabricBlockSettings material = FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color); FabricBlockSettings material = FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color);
stone = BlockRegistry.registerBlock(name, new BlockBase(material)); stone = BlockRegistry.registerBlock(name, new BlockBase(material));
tile = BlockRegistry.registerBlock(name + "_tile", new BlockBase(material)); tile = BlockRegistry.registerBlock(name + "_polished", new BlockBase(material));
small_tiles = BlockRegistry.registerBlock(name + "_small_tiles", new BlockBase(material)); small_tiles = BlockRegistry.registerBlock(name + "_tiles", new BlockBase(material));
pillar = BlockRegistry.registerBlock(name + "_pillar", new BlockPillar(material)); pillar = BlockRegistry.registerBlock(name + "_pillar", new BlockPillar(material));
stairs = BlockRegistry.registerBlock(name + "_stairs", new BlockStairs(stone)); stairs = BlockRegistry.registerBlock(name + "_stairs", new BlockStairs(stone));
slab = BlockRegistry.registerBlock(name + "_slab", new BlockSlab(stone)); slab = BlockRegistry.registerBlock(name + "_slab", new BlockSlab(stone));
@ -48,23 +48,23 @@ public class StoneMaterial {
pressure_plate = BlockRegistry.registerBlock(name + "_plate", new BlockStonePressurePlate(stone)); pressure_plate = BlockRegistry.registerBlock(name + "_plate", new BlockStonePressurePlate(stone));
bricks = BlockRegistry.registerBlock(name + "_bricks", new BlockBase(material)); bricks = BlockRegistry.registerBlock(name + "_bricks", new BlockBase(material));
brick_stairs = BlockRegistry.registerBlock(name + "_brick_stairs", new BlockStairs(bricks)); brick_stairs = BlockRegistry.registerBlock(name + "_bricks_stairs", new BlockStairs(bricks));
brick_slab = BlockRegistry.registerBlock(name + "_brick_slab", new BlockSlab(bricks)); brick_slab = BlockRegistry.registerBlock(name + "_bricks_slab", new BlockSlab(bricks));
brick_wall = BlockRegistry.registerBlock(name + "_brick_wall", new BlockWall(bricks)); brick_wall = BlockRegistry.registerBlock(name + "_bricks_wall", new BlockWall(bricks));
// Recipes // // Recipes //
RecipeBuilder.make(name + "_bricks", bricks).setOutputCount(4).setShape("##", "##").addMaterial('#', stone).setGroup("end_bricks").build(); RecipeBuilder.make(name + "_bricks", bricks).setOutputCount(4).setShape("##", "##").addMaterial('#', stone).setGroup("end_bricks").build();
RecipeBuilder.make(name + "_tile", tile).setOutputCount(4).setShape("##", "##").addMaterial('#', bricks).setGroup("end_tile").build(); RecipeBuilder.make(name + "_polished", tile).setOutputCount(4).setShape("##", "##").addMaterial('#', bricks).setGroup("end_tile").build();
RecipeBuilder.make(name + "_small_tiles", small_tiles).setOutputCount(4).setShape("##", "##").addMaterial('#', tile).setGroup("end_small_tile").build(); RecipeBuilder.make(name + "_tiles", small_tiles).setOutputCount(4).setShape("##", "##").addMaterial('#', tile).setGroup("end_small_tile").build();
RecipeBuilder.make(name + "_pillar", pillar).setShape("#", "#").addMaterial('#', slab).setGroup("end_pillar").build(); RecipeBuilder.make(name + "_pillar", pillar).setShape("#", "#").addMaterial('#', slab).setGroup("end_pillar").build();
RecipeBuilder.make(name + "_stairs", stairs).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', stone).setGroup("end_stone_stairs").build(); RecipeBuilder.make(name + "_stairs", stairs).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', stone).setGroup("end_stone_stairs").build();
RecipeBuilder.make(name + "_slab", slab).setOutputCount(6).setShape("###").addMaterial('#', stone).setGroup("end_stone_slabs").build(); RecipeBuilder.make(name + "_slab", slab).setOutputCount(6).setShape("###").addMaterial('#', stone).setGroup("end_stone_slabs").build();
RecipeBuilder.make(name + "_brick_stairs", brick_stairs).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', bricks).setGroup("end_stone_stairs").build(); RecipeBuilder.make(name + "_bricks_stairs", brick_stairs).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', bricks).setGroup("end_stone_stairs").build();
RecipeBuilder.make(name + "_brick_slab", brick_slab).setOutputCount(6).setShape("###").addMaterial('#', bricks).setGroup("end_stone_slabs").build(); RecipeBuilder.make(name + "_bricks_slab", brick_slab).setOutputCount(6).setShape("###").addMaterial('#', bricks).setGroup("end_stone_slabs").build();
RecipeBuilder.make(name + "_wall", wall).setOutputCount(6).setShape("###", "###").addMaterial('#', stone).setGroup("end_wall").build(); RecipeBuilder.make(name + "_wall", wall).setOutputCount(6).setShape("###", "###").addMaterial('#', stone).setGroup("end_wall").build();
RecipeBuilder.make(name + "_brick_wall", brick_wall).setOutputCount(6).setShape("###", "###").addMaterial('#', bricks).setGroup("end_wall").build(); RecipeBuilder.make(name + "_bricks_wall", brick_wall).setOutputCount(6).setShape("###", "###").addMaterial('#', bricks).setGroup("end_wall").build();
RecipeBuilder.make(name + "_button", button).setList("#").addMaterial('#', stone).setGroup("end_stone_buttons").build(); RecipeBuilder.make(name + "_button", button).setList("#").addMaterial('#', stone).setGroup("end_stone_buttons").build();
RecipeBuilder.make(name + "_pressure_plate", pressure_plate).setShape("##").addMaterial('#', stone).setGroup("end_stone_plates").build(); RecipeBuilder.make(name + "_pressure_plate", pressure_plate).setShape("##").addMaterial('#', stone).setGroup("end_stone_plates").build();

View file

@ -18,6 +18,7 @@ import net.fabricmc.fabric.api.renderer.v1.mesh.MutableQuadView;
import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter; import net.fabricmc.fabric.api.renderer.v1.mesh.QuadEmitter;
import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel; import net.fabricmc.fabric.api.renderer.v1.model.FabricBakedModel;
import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; import net.fabricmc.fabric.api.renderer.v1.render.RenderContext;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BakedQuad;
@ -35,6 +36,7 @@ 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.world.BlockRenderView; import net.minecraft.world.BlockRenderView;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
public class SlabModel implements UnbakedModel, BakedModel, FabricBakedModel { public class SlabModel implements UnbakedModel, BakedModel, FabricBakedModel {

View file

@ -3,19 +3,48 @@ package ru.betterend.interfaces;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Map.Entry;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.resource.ResourceManager; import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import ru.betterend.BetterEnd;
public interface Patterned { public interface Patterned {
default String blockStatePattern(String name) { //Blockstates
public final static Identifier BLOCK_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_block.json");
public final static Identifier SLAB_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_slab.json");
public final static Identifier STAIRS_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_stairs.json");
public final static Identifier WALL_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_wall.json");
public final static Identifier BUTTON_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_button.json");
public final static Identifier PILLAR_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_pillar.json");
public final static Identifier PLATE_STATES_PATTERN = BetterEnd.makeID("patterns/blockstate/pattern_pressure_plate.json");
//Models
public final static Identifier BASE_BLOCK_MODEL = BetterEnd.makeID("patterns/blockstate/pattern_block.json");
public final static Identifier SLAB_BLOCK_MODEL = BetterEnd.makeID("patterns/block/pattern_slab.json");
public final static Identifier STAIRS_MODEL = BetterEnd.makeID("patterns/block/pattern_stairs.json");
public final static Identifier STAIRS_MODEL_INNER = BetterEnd.makeID("patterns/block/pattern_inner_stairs.json");
public final static Identifier STAIRS_MODEL_OUTER = BetterEnd.makeID("patterns/block/pattern_outer_stairs.json");
public final static Identifier WALL_POST_MODEL = BetterEnd.makeID("patterns/block/pattern_wall_post.json");
public final static Identifier WALL_SIDE_MODEL = BetterEnd.makeID("patterns/block/pattern_wall_side.json");
public final static Identifier WALL_SIDE_TALL_MODEL = BetterEnd.makeID("patterns/block/pattern_wall_side_tall.json");
public final static Identifier WALL_ITEM_MODEL = BetterEnd.makeID("patterns/item/pattern_wall.json");
public final static Identifier BUTTON_BLOCK_MODEL = BetterEnd.makeID("patterns/block/pattern_button.json");
public final static Identifier BUTTON_PRESSED_MODEL = BetterEnd.makeID("patterns/block/pattern_button_pressed.json");
public final static Identifier BUTTON_ITEM_MODEL = BetterEnd.makeID("patterns/item/pattern_button.json");
public final static Identifier PILLAR_BLOCK_MODEL = BetterEnd.makeID("patterns/block/pattern_pillar.json");
public final static Identifier PLATE_MODEL_UP = BetterEnd.makeID("patterns/block/pattern_pressure_plate_up.json");
public final static Identifier PLATE_MODEL_DOWN = BetterEnd.makeID("patterns/block/pattern_pressure_plate_down.json");
default String getStatesPattern(Reader data, String name) {
return null; return null;
} }
default String modelPattern(String name) { default String getModelPattern(String name) {
return null; return null;
} }
@ -27,15 +56,52 @@ public interface Patterned {
return null; return null;
} }
public static String createJson(Identifier patternId, String name) { public static String createJson(Reader data, Identifier parent, String block) {
try (BufferedReader buffer = new BufferedReader(data)) {
return buffer.lines().collect(Collectors.joining())
.replace("%parent%", parent.getPath())
.replace("%block%", block);
} catch (Exception ex) {
return null;
}
}
public static String createJson(Identifier patternId, Identifier parent, String block) {
ResourceManager resourceManager = MinecraftClient.getInstance().getResourceManager(); ResourceManager resourceManager = MinecraftClient.getInstance().getResourceManager();
try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { try (InputStream input = resourceManager.getResource(patternId).getInputStream()) {
return new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8)) return new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))
.lines() .lines().collect(Collectors.joining())
.collect(Collectors.joining()).replace("%name%", name); .replace("%parent%", parent.getPath())
.replace("%block%", block);
} catch (Exception ex) {} } catch (Exception ex) {
return null;
return null; }
}
public static String createJson(Identifier patternId, String texture, String block) {
ResourceManager resourceManager = MinecraftClient.getInstance().getResourceManager();
try (InputStream input = resourceManager.getResource(patternId).getInputStream()) {
return new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))
.lines().collect(Collectors.joining())
.replace("%texture%", texture)
.replace("%block%", block);
} catch (Exception ex) {
return null;
}
}
public static String createJson(Identifier patternId, String block, Map<String, String> textures) {
ResourceManager resourceManager = MinecraftClient.getInstance().getResourceManager();
try (InputStream input = resourceManager.getResource(patternId).getInputStream()) {
String json = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8))
.lines().collect(Collectors.joining())
.replace("%block%", block);
for (Entry<String, String> texture : textures.entrySet()) {
json = json.replace(texture.getKey(), texture.getValue());
}
return json;
} catch (Exception ex) {
return null;
}
} }
} }

View file

@ -1,5 +1,10 @@
package ru.betterend.mixin.client; package ru.betterend.mixin.client;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
@ -12,8 +17,11 @@ import net.minecraft.block.Block;
import net.minecraft.client.render.model.ModelLoader; import net.minecraft.client.render.model.ModelLoader;
import net.minecraft.client.render.model.json.JsonUnbakedModel; import net.minecraft.client.render.model.json.JsonUnbakedModel;
import net.minecraft.client.render.model.json.ModelVariantMap.DeserializationContext; import net.minecraft.client.render.model.json.ModelVariantMap.DeserializationContext;
import net.minecraft.resource.Resource;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry; import net.minecraft.util.registry.Registry;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.interfaces.IdentifiedContext; import ru.betterend.interfaces.IdentifiedContext;
import ru.betterend.interfaces.Patterned; import ru.betterend.interfaces.Patterned;
@ -21,19 +29,50 @@ import ru.betterend.interfaces.Patterned;
@Mixin(ModelLoader.class) @Mixin(ModelLoader.class)
public class ModelLoaderMixin { public class ModelLoaderMixin {
@Final
@Shadow @Shadow
private DeserializationContext variantMapDeserializationContext; private DeserializationContext variantMapDeserializationContext;
@Inject(method = "loadModelFromJson", at = @At("HEAD"), cancellable = true) @Final
private void loadModelFromJson(Identifier id, CallbackInfoReturnable<JsonUnbakedModel> info) { @Shadow
if (id.getNamespace().equals(BetterEnd.MOD_ID) && id.getPath().contains("pattern")) { private ResourceManager resourceManager;
String data[] = id.getPath().split("/");
Identifier blockId = new Identifier(id.getNamespace(), data[1]); @Inject(method = "loadModelFromJson", cancellable = true, at = @At(
Block block = Registry.BLOCK.get(blockId); value = "NEW",
if (block instanceof Patterned) { target = "net/minecraft/util/Identifier",
String pattern = ((Patterned) block).modelPattern(data[1]); shift = Shift.BEFORE))
info.setReturnValue(JsonUnbakedModel.deserialize(pattern)); private void loadModelPattern(Identifier id, CallbackInfoReturnable<JsonUnbakedModel> info) {
if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
Identifier modelId = new Identifier(id.getNamespace(), "models/" + id.getPath() + ".json");
JsonUnbakedModel model;
try (Resource resource = this.resourceManager.getResource(modelId)) {
Reader reader = new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8);
model = JsonUnbakedModel.deserialize(reader);
model.id = id.toString();
info.setReturnValue(model);
info.cancel(); info.cancel();
} catch (Exception ex) {
String data[] = id.getPath().split("/");
if (data.length > 1) {
Identifier blockId = new Identifier(id.getNamespace(), data[1]);
Block block = Registry.BLOCK.get(blockId);
if (block instanceof Patterned) {
String pattern;
if (id.getPath().contains("item")) {
pattern = ((Patterned) block).getModelPattern(id.getPath());
} else {
if (data.length > 2) {
pattern = ((Patterned) block).getModelPattern(data[2]);
} else {
pattern = ((Patterned) block).getModelPattern(data[1]);
}
}
model = JsonUnbakedModel.deserialize(pattern);
model.id = id.toString();
info.setReturnValue(model);
info.cancel();
}
}
} }
} }
} }
@ -42,7 +81,7 @@ public class ModelLoaderMixin {
value = "INVOKE", value = "INVOKE",
target = "Lnet/minecraft/client/render/model/json/ModelVariantMap$DeserializationContext;setStateFactory(Lnet/minecraft/state/StateManager;)V", target = "Lnet/minecraft/client/render/model/json/ModelVariantMap$DeserializationContext;setStateFactory(Lnet/minecraft/state/StateManager;)V",
shift = Shift.AFTER)) shift = Shift.AFTER))
private void loadModel(Identifier id, CallbackInfo info) { private void appendContextID(Identifier id, CallbackInfo info) {
IdentifiedContext context = IdentifiedContext.class.cast(variantMapDeserializationContext); IdentifiedContext context = IdentifiedContext.class.cast(variantMapDeserializationContext);
if (id.getNamespace().equals(BetterEnd.MOD_ID)) { if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
context.setContextId(BetterEnd.makeID("pattern/" + id.getPath())); context.setContextId(BetterEnd.makeID("pattern/" + id.getPath()));

View file

@ -34,7 +34,7 @@ public abstract class ModelVariantMapMixin {
Block block = Registry.BLOCK.get(blockId); Block block = Registry.BLOCK.get(blockId);
idContext.removeId(); idContext.removeId();
if (block instanceof Patterned) { if (block instanceof Patterned) {
String pattern = ((Patterned) block).blockStatePattern(data[1]); String pattern = ((Patterned) block).getStatesPattern(reader, data[1]);
info.setReturnValue(deserialize(context, new StringReader(pattern))); info.setReturnValue(deserialize(context, new StringReader(pattern)));
info.cancel(); info.cancel();
} }

View file

@ -5,6 +5,7 @@ import java.util.List;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.At.Shift;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@ -24,8 +25,11 @@ public abstract class NamespaceResourceManagerMixin {
@Shadow @Shadow
public abstract Resource getResource(Identifier id); public abstract Resource getResource(Identifier id);
@Inject(method = "getAllResources", at = @At("HEAD"), cancellable = true) @Inject(method = "getAllResources", cancellable = true, at = @At(
public void getAllResources(Identifier id, CallbackInfoReturnable<List<Resource>> info) { value = "NEW",
target = "java/io/FileNotFoundException",
shift = Shift.BEFORE))
public void getStatesPattern(Identifier id, CallbackInfoReturnable<List<Resource>> info) {
if (id.getNamespace().contains(BetterEnd.MOD_ID)) { if (id.getNamespace().contains(BetterEnd.MOD_ID)) {
String[] data = id.getPath().split("/"); String[] data = id.getPath().split("/");
if (data.length > 1) { if (data.length > 1) {

View file

@ -22,7 +22,6 @@ import ru.betterend.blocks.BlockMossyGlowshroomHymenophore;
import ru.betterend.blocks.BlockMossyGlowshroomSapling; import ru.betterend.blocks.BlockMossyGlowshroomSapling;
import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockOre;
import ru.betterend.blocks.BlockPath; import ru.betterend.blocks.BlockPath;
import ru.betterend.blocks.BlockStone;
import ru.betterend.blocks.BlockTerrain; import ru.betterend.blocks.BlockTerrain;
import ru.betterend.blocks.BlockUmbrellaMoss; import ru.betterend.blocks.BlockUmbrellaMoss;
import ru.betterend.blocks.BlockUmbrellaMossTall; import ru.betterend.blocks.BlockUmbrellaMossTall;
@ -30,10 +29,10 @@ import ru.betterend.blocks.EndStoneSmelter;
import ru.betterend.blocks.EnderBlock; import ru.betterend.blocks.EnderBlock;
import ru.betterend.blocks.TerminiteBlock; import ru.betterend.blocks.TerminiteBlock;
import ru.betterend.blocks.basis.BlockGlowingFur; import ru.betterend.blocks.basis.BlockGlowingFur;
import ru.betterend.blocks.basis.BlockSlab;
import ru.betterend.blocks.basis.BlockVine; import ru.betterend.blocks.basis.BlockVine;
import ru.betterend.blocks.complex.StoneMaterial; import ru.betterend.blocks.complex.StoneMaterial;
import ru.betterend.blocks.complex.WoodenMaterial; import ru.betterend.blocks.complex.WoodenMaterial;
import ru.betterend.tab.CreativeTab; import ru.betterend.tab.CreativeTab;
public class BlockRegistry { public class BlockRegistry {
@ -49,8 +48,7 @@ public class BlockRegistry {
public static final Block CHORUS_NYLIUM_PATH = registerBlock("chorus_nylium_path", new BlockPath(CHORUS_NYLIUM)); public static final Block CHORUS_NYLIUM_PATH = registerBlock("chorus_nylium_path", new BlockPath(CHORUS_NYLIUM));
// Rocks // // Rocks //
public static final Block FLAVOLITE = registerBlock("flavolite", new BlockStone(MaterialColor.SAND)); public static final StoneMaterial FLAVOLITE = new StoneMaterial("flavolite", MaterialColor.SAND);
public static final Block FLAVOLITE_SLAB = registerBlock("flavolite_slab", new BlockSlab(FLAVOLITE));
public static final StoneMaterial VIOLECITE = new StoneMaterial("violecite", MaterialColor.PURPLE); public static final StoneMaterial VIOLECITE = new StoneMaterial("violecite", MaterialColor.PURPLE);
// Wooden Materials // // Wooden Materials //

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/cube_all", "parent": "block/cube_all",
"textures": { "textures": {
"all": "betterend:block/%name%" "all": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/button", "parent": "block/button",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +0,0 @@
{
"parent": "block/button_inventory",
"textures": {
"texture": "betterend:block/%name%"
}
}

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/button_pressed", "parent": "block/button_pressed",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%parent%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/inner_stairs", "parent": "block/inner_stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%parent%",
"side": "betterend:block/%name%", "side": "betterend:block/%parent%",
"top": "betterend:block/%name%" "top": "betterend:block/%parent%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/outer_stairs", "parent": "block/outer_stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%parent%",
"side": "betterend:block/%name%", "side": "betterend:block/%parent%",
"top": "betterend:block/%name%" "top": "betterend:block/%parent%"
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"parent": "minecraft:block/cube_column", "parent": "minecraft:block/cube_column",
"textures": { "textures": {
"end": "betterend:block/%name%_pillar_top", "end": "betterend:block/%parent%_top",
"side": "betterend:block/%name%_pillar_side" "side": "betterend:block/%parent%_side"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/pressure_plate_down", "parent": "block/pressure_plate_down",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/pressure_plate_up", "parent": "block/pressure_plate_up",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%parent%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "minecraft:block/slab", "parent": "minecraft:block/slab",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%parent%",
"side": "betterend:block/%name%", "side": "betterend:block/%parent%",
"top": "betterend:block/%name%" "top": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"all": "betterend:block/%name%_small_tiles"
}
}

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/stairs", "parent": "block/stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%parent%",
"side": "betterend:block/%name%", "side": "betterend:block/%parent%",
"top": "betterend:block/%name%" "top": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +0,0 @@
{
"parent": "block/cube_all",
"textures": {
"all": "betterend:block/%name%_tile"
}
}

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/wall_inventory", "parent": "minecraft:block/wall_inventory",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_post", "parent": "minecraft:block/template_wall_post",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_side", "parent": "minecraft:block/template_wall_side",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%parent%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_side_tall", "parent": "minecraft:block/template_wall_side_tall",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%parent%"
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"": { "": {
"model": "betterend:block/%name%" "model": "betterend:pattern/%block%"
} }
} }
} }

View file

@ -1,115 +1,115 @@
{ {
"variants": { "variants": {
"face=ceiling,facing=east,powered=false": { "face=ceiling,facing=east,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"face=ceiling,facing=east,powered=true": { "face=ceiling,facing=east,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"face=ceiling,facing=north,powered=false": { "face=ceiling,facing=north,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"face=ceiling,facing=north,powered=true": { "face=ceiling,facing=north,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"face=ceiling,facing=south,powered=false": { "face=ceiling,facing=south,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"x": 180 "x": 180
}, },
"face=ceiling,facing=south,powered=true": { "face=ceiling,facing=south,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"x": 180 "x": 180
}, },
"face=ceiling,facing=west,powered=false": { "face=ceiling,facing=west,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"face=ceiling,facing=west,powered=true": { "face=ceiling,facing=west,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"face=floor,facing=east,powered=false": { "face=floor,facing=east,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"y": 90 "y": 90
}, },
"face=floor,facing=east,powered=true": { "face=floor,facing=east,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"y": 90 "y": 90
}, },
"face=floor,facing=north,powered=false": { "face=floor,facing=north,powered=false": {
"model": "betterend:block/%name%_button" "model": "betterend:pattern/%block%"
}, },
"face=floor,facing=north,powered=true": { "face=floor,facing=north,powered=true": {
"model": "betterend:block/%name%_button_pressed" "model": "betterend:pattern/%block%/%block%_pressed"
}, },
"face=floor,facing=south,powered=false": { "face=floor,facing=south,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"y": 180 "y": 180
}, },
"face=floor,facing=south,powered=true": { "face=floor,facing=south,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"y": 180 "y": 180
}, },
"face=floor,facing=west,powered=false": { "face=floor,facing=west,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"y": 270 "y": 270
}, },
"face=floor,facing=west,powered=true": { "face=floor,facing=west,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"y": 270 "y": 270
}, },
"face=wall,facing=east,powered=false": { "face=wall,facing=east,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 90 "y": 90
}, },
"face=wall,facing=east,powered=true": { "face=wall,facing=east,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 90 "y": 90
}, },
"face=wall,facing=north,powered=false": { "face=wall,facing=north,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 90 "x": 90
}, },
"face=wall,facing=north,powered=true": { "face=wall,facing=north,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"uvlock": true, "uvlock": true,
"x": 90 "x": 90
}, },
"face=wall,facing=south,powered=false": { "face=wall,facing=south,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 180 "y": 180
}, },
"face=wall,facing=south,powered=true": { "face=wall,facing=south,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 180 "y": 180
}, },
"face=wall,facing=west,powered=false": { "face=wall,facing=west,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 270 "y": 270
}, },
"face=wall,facing=west,powered=true": { "face=wall,facing=west,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:pattern/%block%/%block%_pressed",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 270 "y": 270

View file

@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"axis=x": { "model": "betterend:block/%name%_pillar", "x": 90, "y": 90 }, "axis=x": { "model": "betterend:pattern/%block%", "x": 90, "y": 90 },
"axis=y": { "model": "betterend:block/%name%_pillar" }, "axis=y": { "model": "betterend:pattern/%block%" },
"axis=z": { "model": "betterend:block/%name%_pillar", "x": 90 } "axis=z": { "model": "betterend:pattern/%block%", "x": 90 }
} }
} }

View file

@ -1,10 +1,10 @@
{ {
"variants": { "variants": {
"powered=false": { "powered=false": {
"model": "betterend:block/%name%_pressure_plate_up" "model": "betterend:pattern/%block%/%block%_up"
}, },
"powered=true": { "powered=true": {
"model": "betterend:block/%name%_pressure_plate_down" "model": "betterend:pattern/%block%/%block%_down"
} }
} }
} }

View file

@ -1,13 +1,13 @@
{ {
"variants": { "variants": {
"type=bottom": { "type=bottom": {
"model": "betterend:pattern/%name%_slab" "model": "betterend:pattern/%block%"
}, },
"type=double": { "type=double": {
"model": "betterend:block/%name%" "model": "betterend:block/%parent%"
}, },
"type=top": { "type=top": {
"model": "betterend:pattern/%name%_slab", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
} }

View file

@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "betterend:block/%name%_small_tiles"
}
}
}

View file

@ -1,206 +1,206 @@
{ {
"variants": { "variants": {
"facing=east,half=bottom,shape=inner_left": { "facing=east,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=east,half=bottom,shape=inner_right": { "facing=east,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs" "model": "betterend:pattern/%block%/%block%_inner"
}, },
"facing=east,half=bottom,shape=outer_left": { "facing=east,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=east,half=bottom,shape=outer_right": { "facing=east,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs" "model": "betterend:pattern/%block%/%block%_outer"
}, },
"facing=east,half=bottom,shape=straight": { "facing=east,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs" "model": "betterend:pattern/%block%"
}, },
"facing=east,half=top,shape=inner_left": { "facing=east,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=east,half=top,shape=inner_right": { "facing=east,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=east,half=top,shape=outer_left": { "facing=east,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=east,half=top,shape=outer_right": { "facing=east,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=east,half=top,shape=straight": { "facing=east,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=bottom,shape=inner_left": { "facing=north,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=north,half=bottom,shape=inner_right": { "facing=north,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=bottom,shape=outer_left": { "facing=north,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=north,half=bottom,shape=outer_right": { "facing=north,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=bottom,shape=straight": { "facing=north,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=inner_left": { "facing=north,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=inner_right": { "facing=north,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=top,shape=outer_left": { "facing=north,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=outer_right": { "facing=north,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=top,shape=straight": { "facing=north,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=south,half=bottom,shape=inner_left": { "facing=south,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs" "model": "betterend:pattern/%block%/%block%_inner"
}, },
"facing=south,half=bottom,shape=inner_right": { "facing=south,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=bottom,shape=outer_left": { "facing=south,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs" "model": "betterend:pattern/%block%/%block%_outer"
}, },
"facing=south,half=bottom,shape=outer_right": { "facing=south,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=bottom,shape=straight": { "facing=south,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=inner_left": { "facing=south,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=inner_right": { "facing=south,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=south,half=top,shape=outer_left": { "facing=south,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=outer_right": { "facing=south,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=south,half=top,shape=straight": { "facing=south,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=inner_left": { "facing=west,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=inner_right": { "facing=west,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=bottom,shape=outer_left": { "facing=west,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=outer_right": { "facing=west,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=bottom,shape=straight": { "facing=west,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=inner_left": { "facing=west,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=inner_right": { "facing=west,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:pattern/%block%/%block%_inner",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=west,half=top,shape=outer_left": { "facing=west,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=outer_right": { "facing=west,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:pattern/%block%/%block%_outer",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=west,half=top,shape=straight": { "facing=west,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:pattern/%block%",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180

View file

@ -1,7 +0,0 @@
{
"variants": {
"": {
"model": "betterend:block/%name%_tile"
}
}
}

View file

@ -5,7 +5,7 @@
"up": "true" "up": "true"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_post" "model": "betterend:pattern/%block%/%block%_post"
} }
}, },
{ {
@ -13,7 +13,7 @@
"north": "low" "north": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:pattern/%block%/%block%_side",
"uvlock": true "uvlock": true
} }
}, },
@ -22,7 +22,7 @@
"east": "low" "east": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:pattern/%block%/%block%_side",
"y": 90, "y": 90,
"uvlock": true "uvlock": true
} }
@ -32,7 +32,7 @@
"south": "low" "south": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:pattern/%block%/%block%_side",
"y": 180, "y": 180,
"uvlock": true "uvlock": true
} }
@ -42,7 +42,7 @@
"west": "low" "west": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:pattern/%block%/%block%_side",
"y": 270, "y": 270,
"uvlock": true "uvlock": true
} }
@ -52,7 +52,7 @@
"north": "tall" "north": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:pattern/%block%/%block%_side_tall",
"uvlock": true "uvlock": true
} }
}, },
@ -61,7 +61,7 @@
"east": "tall" "east": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:pattern/%block%/%block%_side_tall",
"y": 90, "y": 90,
"uvlock": true "uvlock": true
} }
@ -71,7 +71,7 @@
"south": "tall" "south": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:pattern/%block%/%block%_side_tall",
"y": 180, "y": 180,
"uvlock": true "uvlock": true
} }
@ -81,7 +81,7 @@
"west": "tall" "west": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:pattern/%block%/%block%_side_tall",
"y": 270, "y": 270,
"uvlock": true "uvlock": true
} }

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_brick_slab"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_brick_stairs"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_brick_wall_inventory"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_bricks"
}

View file

@ -1,3 +1,6 @@
{ {
"parent": "betterend:block/%name%_button_inventory" "parent": "block/button_inventory",
"textures": {
"texture": "betterend:block/%parent%"
}
} }

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_pillar"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_pressure_plate_up"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_slab"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_small_tiles"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_stairs"
}

View file

@ -1,3 +0,0 @@
{
"parent": "betterend:block/%name%_tile"
}

View file

@ -1,3 +1,6 @@
{ {
"parent": "betterend:block/%name%_wall_inventory" "parent": "minecraft:block/wall_inventory",
"textures": {
"wall": "betterend:block/%parent%"
}
} }