WIP: patterns
This commit is contained in:
parent
bd5d7e3937
commit
7e1d018140
48 changed files with 787 additions and 10 deletions
|
@ -4,19 +4,36 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
|
||||
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.SlabBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.loot.context.LootContext;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public class BlockSlab extends SlabBlock {
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
|
||||
public class BlockSlab extends SlabBlock implements Patterned {
|
||||
public BlockSlab(Block source) {
|
||||
super(FabricBlockSettings.copyOf(source).nonOpaque());
|
||||
super(FabricBlockSettings.copyOf(source));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ItemStack> getDroppedStacks(BlockState state, LootContext.Builder builder) {
|
||||
return Collections.singletonList(new ItemStack(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String blockStatePattern(String name) {
|
||||
Identifier patternId = BetterEnd.makeID("patterns/blockstate/pattern_slab.json");
|
||||
return Patterned.createJson(patternId, name.replace("_slab", ""));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String modelPattern(String name) {
|
||||
Identifier patternId = BetterEnd.makeID("patterns/block/pattern_slab.json");
|
||||
return Patterned.createJson(patternId, name.replace("_slab", ""));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ public class EndModelProvider implements ModelResourceProvider {
|
|||
|
||||
public static final UnbakedModel FLAVOLITE_BLOCK = new BaseBlockModel("block/flavolite");
|
||||
public static final UnbakedModel FLAVOLITE_SLAB = new SlabModel("block/flavolite");
|
||||
public static final UnbakedModel FLAVOLITE_SLAB_TOP = new SlabTopModel("block/flavolite");
|
||||
|
||||
public static void registerModel(String path, UnbakedModel model) {
|
||||
MODELS.put(BetterEnd.makeID(path), model);
|
||||
|
@ -39,7 +38,5 @@ public class EndModelProvider implements ModelResourceProvider {
|
|||
registerModel("item/flavolite", FLAVOLITE_BLOCK);
|
||||
registerModel("block/flavolite", FLAVOLITE_BLOCK);
|
||||
registerModel("item/flavolite_slab", FLAVOLITE_SLAB);
|
||||
registerModel("block/flavolite_slab", FLAVOLITE_SLAB);
|
||||
registerModel("block/flavolite_slab_top", FLAVOLITE_SLAB_TOP);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package ru.betterend.interfaces;
|
||||
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public interface IdentifiedContext {
|
||||
public Identifier getContextId();
|
||||
public void setContextId(Identifier id);
|
||||
}
|
32
src/main/java/ru/betterend/interfaces/Patterned.java
Normal file
32
src/main/java/ru/betterend/interfaces/Patterned.java
Normal file
|
@ -0,0 +1,32 @@
|
|||
package ru.betterend.interfaces;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
public interface Patterned {
|
||||
default String blockStatePattern(String name) {
|
||||
return null;
|
||||
}
|
||||
default String modelPattern(String name) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String createJson(Identifier patternId, String name) {
|
||||
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("%name%", name);
|
||||
|
||||
} catch (Exception ex) {}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package ru.betterend.mixin.client;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
import net.minecraft.client.render.model.json.ModelVariantMap.DeserializationContext;
|
||||
import net.minecraft.util.Identifier;
|
||||
import ru.betterend.interfaces.IdentifiedContext;
|
||||
|
||||
@Mixin(DeserializationContext.class)
|
||||
public class DeserializationContextMixin implements IdentifiedContext {
|
||||
|
||||
private Identifier contextId;
|
||||
|
||||
@Override
|
||||
public Identifier getContextId() {
|
||||
return this.contextId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setContextId(Identifier id) {
|
||||
this.contextId = id;
|
||||
}
|
||||
}
|
|
@ -1,23 +1,55 @@
|
|||
package ru.betterend.mixin.client;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
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.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.render.model.ModelLoader;
|
||||
import net.minecraft.client.render.model.json.JsonUnbakedModel;
|
||||
import net.minecraft.client.render.model.json.ModelVariantMap.DeserializationContext;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.interfaces.IdentifiedContext;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
|
||||
@Mixin(ModelLoader.class)
|
||||
public class ModelLoaderMixin {
|
||||
|
||||
@Shadow
|
||||
private DeserializationContext variantMapDeserializationContext;
|
||||
|
||||
@Inject(method = "loadModelFromJson", at = @At("HEAD"), cancellable = true)
|
||||
private void loadModelFromJson(Identifier id, CallbackInfoReturnable<JsonUnbakedModel> info) {
|
||||
if (id.getNamespace().equals(BetterEnd.MOD_ID) && id.getPath().contains("pattern")) {
|
||||
System.out.println(id.getPath());
|
||||
info.cancel();
|
||||
String data[] = id.getPath().split("/");
|
||||
Identifier blockId = new Identifier(id.getNamespace(), data[1]);
|
||||
Block block = Registry.BLOCK.get(blockId);
|
||||
if (block instanceof Patterned) {
|
||||
String pattern = ((Patterned) block).modelPattern(data[1]);
|
||||
info.setReturnValue(JsonUnbakedModel.deserialize(pattern));
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "loadModel", at = @At(
|
||||
value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/render/model/json/ModelVariantMap$DeserializationContext;setStateFactory(Lnet/minecraft/state/StateManager;)V",
|
||||
shift = Shift.AFTER))
|
||||
private void loadModel(Identifier id, CallbackInfo info) {
|
||||
IdentifiedContext context = IdentifiedContext.class.cast(variantMapDeserializationContext);
|
||||
if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
|
||||
Identifier blockstateId = new Identifier(id.getNamespace(), "pattern/" + id.getPath());
|
||||
context.setContextId(blockstateId);
|
||||
} else {
|
||||
context.setContextId(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
package ru.betterend.mixin.client;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.render.model.json.ModelVariantMap;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
|
||||
import ru.betterend.interfaces.IdentifiedContext;
|
||||
import ru.betterend.interfaces.Patterned;
|
||||
|
||||
@Mixin(ModelVariantMap.class)
|
||||
public abstract class ModelVariantMapMixin {
|
||||
|
||||
@Shadow
|
||||
static ModelVariantMap deserialize(ModelVariantMap.DeserializationContext context, Reader reader) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Inject(method = "deserialize", at = @At("HEAD"), cancellable = true)
|
||||
private static void deserializeBlockState(ModelVariantMap.DeserializationContext context, Reader reader, CallbackInfoReturnable<ModelVariantMap> info) {
|
||||
IdentifiedContext idContext = IdentifiedContext.class.cast(context);
|
||||
Identifier id = idContext.getContextId();
|
||||
if (id != null && id.getPath().contains("pattern")) {
|
||||
String[] data = id.getPath().split("/");
|
||||
Identifier blockId = new Identifier(id.getNamespace(), data[1]);
|
||||
Block block = Registry.BLOCK.get(blockId);
|
||||
if (block instanceof Patterned) {
|
||||
String pattern = ((Patterned) block).blockStatePattern(data[1]);
|
||||
idContext.setContextId(null);
|
||||
info.setReturnValue(deserialize(context, new StringReader(pattern)));
|
||||
info.cancel();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,13 +1,15 @@
|
|||
{
|
||||
"variants": {
|
||||
"type=bottom": {
|
||||
"model": "betterend:pattern/slab/flavolite"
|
||||
"model": "betterend:block/flavolite_slab"
|
||||
},
|
||||
"type=double": {
|
||||
"model": "betterend:block/flavolite"
|
||||
},
|
||||
"type=top": {
|
||||
"model": "betterend:pattern/slab_top/flavolite"
|
||||
}
|
||||
"model": "betterend:block/flavolite_slab",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/button",
|
||||
"textures": {
|
||||
"texture": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/button_inventory",
|
||||
"textures": {
|
||||
"texture": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/button_pressed",
|
||||
"textures": {
|
||||
"texture": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "block/inner_stairs",
|
||||
"textures": {
|
||||
"bottom": "betterend:block/%name%",
|
||||
"side": "betterend:block/%name%",
|
||||
"top": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "block/outer_stairs",
|
||||
"textures": {
|
||||
"bottom": "betterend:block/%name%",
|
||||
"side": "betterend:block/%name%",
|
||||
"top": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_column",
|
||||
"textures": {
|
||||
"end": "betterend:block/%name%_pillar_top",
|
||||
"side": "betterend:block/%name%_pillar_side"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/pressure_plate_down",
|
||||
"textures": {
|
||||
"texture": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/pressure_plate_up",
|
||||
"textures": {
|
||||
"texture": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "minecraft:block/slab",
|
||||
"textures": {
|
||||
"bottom": "betterend:block/%name%",
|
||||
"side": "betterend:block/%name%",
|
||||
"top": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "betterend:block/%name%_small_tiles"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"parent": "block/stairs",
|
||||
"textures": {
|
||||
"bottom": "betterend:block/%name%",
|
||||
"side": "betterend:block/%name%",
|
||||
"top": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "block/cube_all",
|
||||
"textures": {
|
||||
"all": "betterend:block/%name%_tile"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:block/wall_inventory",
|
||||
"textures": {
|
||||
"wall": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:block/template_wall_post",
|
||||
"textures": {
|
||||
"wall": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:block/template_wall_side",
|
||||
"textures": {
|
||||
"wall": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "minecraft:block/template_wall_side_tall",
|
||||
"textures": {
|
||||
"wall": "betterend:block/%name%"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "betterend:block/%name%"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
{
|
||||
"variants": {
|
||||
"face=ceiling,facing=east,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=east,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"face=ceiling,facing=north,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=north,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=south,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"x": 180
|
||||
},
|
||||
"face=ceiling,facing=west,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=ceiling,facing=west,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=east,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"y": 90
|
||||
},
|
||||
"face=floor,facing=north,powered=false": {
|
||||
"model": "betterend:block/%name%_button"
|
||||
},
|
||||
"face=floor,facing=north,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed"
|
||||
},
|
||||
"face=floor,facing=south,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=south,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"y": 180
|
||||
},
|
||||
"face=floor,facing=west,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"y": 270
|
||||
},
|
||||
"face=floor,facing=west,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=east,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=east,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"uvlock": true,
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=north,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90
|
||||
},
|
||||
"face=wall,facing=south,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=south,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"face=wall,facing=west,powered=false": {
|
||||
"model": "betterend:block/%name%_button",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"face=wall,facing=west,powered=true": {
|
||||
"model": "betterend:block/%name%_button_pressed",
|
||||
"uvlock": true,
|
||||
"x": 90,
|
||||
"y": 270
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"variants": {
|
||||
"axis=x": { "model": "betterend:block/%name%_pillar", "x": 90, "y": 90 },
|
||||
"axis=y": { "model": "betterend:block/%name%_pillar" },
|
||||
"axis=z": { "model": "betterend:block/%name%_pillar", "x": 90 }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"variants": {
|
||||
"powered=false": {
|
||||
"model": "betterend:block/%name%_pressure_plate_up"
|
||||
},
|
||||
"powered=true": {
|
||||
"model": "betterend:block/%name%_pressure_plate_down"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"variants": {
|
||||
"type=bottom": {
|
||||
"model": "betterend:pattern/%name%_slab"
|
||||
},
|
||||
"type=double": {
|
||||
"model": "betterend:block/%name%"
|
||||
},
|
||||
"type=top": {
|
||||
"model": "betterend:pattern/%name%_slab",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "betterend:block/%name%_small_tiles"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"variants": {
|
||||
"facing=east,half=bottom,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs"
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,half=bottom,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs"
|
||||
},
|
||||
"facing=east,half=bottom,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs"
|
||||
},
|
||||
"facing=east,half=top,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=east,half=top,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=east,half=top,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=north,half=bottom,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=bottom,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=north,half=top,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180
|
||||
},
|
||||
"facing=north,half=top,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs"
|
||||
},
|
||||
"facing=south,half=bottom,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs"
|
||||
},
|
||||
"facing=south,half=bottom,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=bottom,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=south,half=top,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=south,half=top,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"y": 90
|
||||
},
|
||||
"facing=west,half=bottom,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=bottom,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_left": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=inner_right": {
|
||||
"model": "betterend:block/%name%_inner_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=outer_left": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,half=top,shape=outer_right": {
|
||||
"model": "betterend:block/%name%_outer_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 270
|
||||
},
|
||||
"facing=west,half=top,shape=straight": {
|
||||
"model": "betterend:block/%name%_stairs",
|
||||
"uvlock": true,
|
||||
"x": 180,
|
||||
"y": 180
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "betterend:block/%name%_tile"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
{
|
||||
"multipart": [
|
||||
{
|
||||
"when": {
|
||||
"up": "true"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_post"
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"north": "low"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side",
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "low"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side",
|
||||
"y": 90,
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"south": "low"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side",
|
||||
"y": 180,
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"west": "low"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side",
|
||||
"y": 270,
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"north": "tall"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side_tall",
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"east": "tall"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side_tall",
|
||||
"y": 90,
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"south": "tall"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side_tall",
|
||||
"y": 180,
|
||||
"uvlock": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"when": {
|
||||
"west": "tall"
|
||||
},
|
||||
"apply": {
|
||||
"model": "betterend:block/%name%_wall_side_tall",
|
||||
"y": 270,
|
||||
"uvlock": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_brick_slab"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_brick_stairs"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_brick_wall_inventory"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_bricks"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_button_inventory"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_pillar"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_pressure_plate_up"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_slab"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_small_tiles"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_stairs"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_tile"
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"parent": "betterend:block/%name%_wall_inventory"
|
||||
}
|
|
@ -8,6 +8,8 @@
|
|||
"BackgroundRendererMixin",
|
||||
"ClientRecipeBookMixin",
|
||||
"ModelLoaderMixin",
|
||||
"ModelVariantMapMixin",
|
||||
"DeserializationContextMixin",
|
||||
"ClientPlayNetworkHandlerMixin",
|
||||
"MinecraftClientMixin"
|
||||
],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue