mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-27 23:27:59 +01:00
Datagen plundervine blockstates
This commit is contained in:
parent
16b68d43ba
commit
e859c71e4f
14 changed files with 173 additions and 300 deletions
|
@ -32,9 +32,9 @@ public class ThornBlock extends ConnectingBlock implements EarthPonyGrowAbility.
|
||||||
static final Collection<BooleanProperty> PROPERTIES = FACING_PROPERTIES.values();
|
static final Collection<BooleanProperty> PROPERTIES = FACING_PROPERTIES.values();
|
||||||
static final DirectionProperty FACING = Properties.FACING;
|
static final DirectionProperty FACING = Properties.FACING;
|
||||||
static final int MAX_DISTANCE = 25;
|
static final int MAX_DISTANCE = 25;
|
||||||
static final int MAX_AGE = 4;
|
static final int MAX_AGE = Properties.AGE_4_MAX;
|
||||||
static final IntProperty DISTANCE = IntProperty.of("distance", 0, MAX_DISTANCE);
|
static final IntProperty DISTANCE = IntProperty.of("distance", 0, MAX_DISTANCE);
|
||||||
static final IntProperty AGE = IntProperty.of("age", 0, MAX_AGE);
|
static final IntProperty AGE = Properties.AGE_4;
|
||||||
|
|
||||||
private final Supplier<Block> bud;
|
private final Supplier<Block> bud;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import net.minecraft.block.ShapeContext;
|
||||||
import net.minecraft.item.ItemPlacementContext;
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
import net.minecraft.state.StateManager;
|
import net.minecraft.state.StateManager;
|
||||||
import net.minecraft.state.property.BooleanProperty;
|
import net.minecraft.state.property.BooleanProperty;
|
||||||
|
import net.minecraft.state.property.Properties;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
import net.minecraft.util.shape.VoxelShape;
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
|
@ -20,8 +21,8 @@ import net.minecraft.world.BlockView;
|
||||||
import net.minecraft.world.WorldAccess;
|
import net.minecraft.world.WorldAccess;
|
||||||
|
|
||||||
public class CloudPillarBlock extends CloudBlock {
|
public class CloudPillarBlock extends CloudBlock {
|
||||||
private static final BooleanProperty NORTH = BooleanProperty.of("north");
|
private static final BooleanProperty NORTH = Properties.NORTH;
|
||||||
private static final BooleanProperty SOUTH = BooleanProperty.of("south");
|
private static final BooleanProperty SOUTH = Properties.SOUTH;
|
||||||
private static final Map<Direction, BooleanProperty> DIRECTION_PROPERTIES = Map.of(
|
private static final Map<Direction, BooleanProperty> DIRECTION_PROPERTIES = Map.of(
|
||||||
Direction.UP, NORTH,
|
Direction.UP, NORTH,
|
||||||
Direction.DOWN, SOUTH
|
Direction.DOWN, SOUTH
|
||||||
|
|
|
@ -32,6 +32,8 @@ public interface BlockModels {
|
||||||
Model OUTER_STAIRS = block("outer_seethrough_stairs", "_outer", TextureKey.BOTTOM, TextureKey.TOP, TextureKey.SIDE, STEP);
|
Model OUTER_STAIRS = block("outer_seethrough_stairs", "_outer", TextureKey.BOTTOM, TextureKey.TOP, TextureKey.SIDE, STEP);
|
||||||
Model DOOR_LEFT = block("door_left", TextureKey.BOTTOM, TextureKey.TOP);
|
Model DOOR_LEFT = block("door_left", TextureKey.BOTTOM, TextureKey.TOP);
|
||||||
Model DOOR_RIGHT = block("door_right", TextureKey.BOTTOM, TextureKey.TOP);
|
Model DOOR_RIGHT = block("door_right", TextureKey.BOTTOM, TextureKey.TOP);
|
||||||
|
Model TEMPLATE_PILLAR = block("template_pillar", TextureKey.SIDE);
|
||||||
|
Model TEMPLATE_PILLAR_END = block("template_pillar_end", "_end", TextureKey.BOTTOM, TextureKey.TOP, TextureKey.END);
|
||||||
|
|
||||||
Factory CROP = Factory.of(TextureMap::crop, Models.CROP);
|
Factory CROP = Factory.of(TextureMap::crop, Models.CROP);
|
||||||
Factory CUBE_ALL = Factory.of(TextureMap::all, Models.CUBE_ALL);
|
Factory CUBE_ALL = Factory.of(TextureMap::all, Models.CUBE_ALL);
|
||||||
|
|
|
@ -24,6 +24,7 @@ interface ItemModels {
|
||||||
Model TEMPLATE_EYEWEAR = item("template_eyewear", TextureKey.LAYER0);
|
Model TEMPLATE_EYEWEAR = item("template_eyewear", TextureKey.LAYER0);
|
||||||
Model TEMPLATE_SPAWN_EGG = item(new Identifier("template_spawn_egg"));
|
Model TEMPLATE_SPAWN_EGG = item(new Identifier("template_spawn_egg"));
|
||||||
Model TEMPLATE_MUG = item("template_mug", TextureKey.LAYER0);
|
Model TEMPLATE_MUG = item("template_mug", TextureKey.LAYER0);
|
||||||
|
Model TEMPLATE_PILLAR = item("template_pillar", TextureKey.TOP, TextureKey.BOTTOM, TextureKey.SIDE, TextureKey.END);
|
||||||
Model HANDHELD_STAFF = item("handheld_staff", TextureKey.LAYER0);
|
Model HANDHELD_STAFF = item("handheld_staff", TextureKey.LAYER0);
|
||||||
Model TRIDENT_THROWING = item(new Identifier("trident_throwing"), TextureKey.LAYER0);
|
Model TRIDENT_THROWING = item(new Identifier("trident_throwing"), TextureKey.LAYER0);
|
||||||
Model TRIDENT_IN_HAND = item(new Identifier("trident_in_hand"), TextureKey.LAYER0);
|
Model TRIDENT_IN_HAND = item(new Identifier("trident_in_hand"), TextureKey.LAYER0);
|
||||||
|
|
|
@ -18,6 +18,7 @@ import com.minelittlepony.unicopia.server.world.Tree;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.Blocks;
|
import net.minecraft.block.Blocks;
|
||||||
|
import net.minecraft.block.ConnectingBlock;
|
||||||
import net.minecraft.block.enums.DoorHinge;
|
import net.minecraft.block.enums.DoorHinge;
|
||||||
import net.minecraft.block.enums.DoubleBlockHalf;
|
import net.minecraft.block.enums.DoubleBlockHalf;
|
||||||
import net.minecraft.data.client.BlockStateModelGenerator;
|
import net.minecraft.data.client.BlockStateModelGenerator;
|
||||||
|
@ -27,10 +28,8 @@ import net.minecraft.data.client.Model;
|
||||||
import net.minecraft.data.client.ModelIds;
|
import net.minecraft.data.client.ModelIds;
|
||||||
import net.minecraft.data.client.Models;
|
import net.minecraft.data.client.Models;
|
||||||
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
import net.minecraft.data.client.MultipartBlockStateSupplier;
|
||||||
import net.minecraft.data.client.TextureKey;
|
|
||||||
import net.minecraft.data.client.TextureMap;
|
import net.minecraft.data.client.TextureMap;
|
||||||
import net.minecraft.data.client.TexturedModel;
|
import net.minecraft.data.client.TexturedModel;
|
||||||
import net.minecraft.data.client.VariantSettings;
|
|
||||||
import net.minecraft.data.client.VariantsBlockStateSupplier;
|
import net.minecraft.data.client.VariantsBlockStateSupplier;
|
||||||
import net.minecraft.data.client.When;
|
import net.minecraft.data.client.When;
|
||||||
import net.minecraft.data.family.BlockFamily;
|
import net.minecraft.data.family.BlockFamily;
|
||||||
|
@ -47,6 +46,10 @@ import net.minecraft.util.Pair;
|
||||||
import net.minecraft.util.StringIdentifiable;
|
import net.minecraft.util.StringIdentifiable;
|
||||||
import net.minecraft.util.math.Direction;
|
import net.minecraft.util.math.Direction;
|
||||||
|
|
||||||
|
import static net.minecraft.data.client.TextureKey.*;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.*;
|
||||||
|
import static net.minecraft.data.client.VariantSettings.Rotation.*;
|
||||||
|
|
||||||
public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
static final Identifier AIR_BLOCK_ID = new Identifier("block/air");
|
static final Identifier AIR_BLOCK_ID = new Identifier("block/air");
|
||||||
static final Identifier AIR_ITEM_ID = new Identifier("item/air");
|
static final Identifier AIR_ITEM_ID = new Identifier("item/air");
|
||||||
|
@ -85,8 +88,9 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
createCustomTexturePool(UBlocks.DENSE_CLOUD, TexturedModel.CUBE_ALL).slab(UBlocks.DENSE_CLOUD_SLAB).stairs(UBlocks.DENSE_CLOUD_STAIRS);
|
createCustomTexturePool(UBlocks.DENSE_CLOUD, TexturedModel.CUBE_ALL).slab(UBlocks.DENSE_CLOUD_SLAB).stairs(UBlocks.DENSE_CLOUD_STAIRS);
|
||||||
createCustomTexturePool(UBlocks.CLOUD_PLANKS, TexturedModel.CUBE_ALL).slab(UBlocks.CLOUD_PLANK_SLAB).stairs(UBlocks.CLOUD_PLANK_STAIRS);
|
createCustomTexturePool(UBlocks.CLOUD_PLANKS, TexturedModel.CUBE_ALL).slab(UBlocks.CLOUD_PLANK_SLAB).stairs(UBlocks.CLOUD_PLANK_STAIRS);
|
||||||
createCustomTexturePool(UBlocks.CLOUD_BRICKS, TexturedModel.CUBE_ALL).slab(UBlocks.CLOUD_BRICK_SLAB).stairs(UBlocks.CLOUD_BRICK_STAIRS);
|
createCustomTexturePool(UBlocks.CLOUD_BRICKS, TexturedModel.CUBE_ALL).slab(UBlocks.CLOUD_BRICK_SLAB).stairs(UBlocks.CLOUD_BRICK_STAIRS);
|
||||||
createTwoStepTexturePool(UBlocks.SOGGY_CLOUD, TexturedModel.CUBE_BOTTOM_TOP.andThen(textures -> textures.put(TextureKey.BOTTOM, ModelIds.getBlockModelId(UBlocks.CLOUD)))).slab(UBlocks.SOGGY_CLOUD_SLAB).stairs(UBlocks.SOGGY_CLOUD_STAIRS);
|
createTwoStepTexturePool(UBlocks.SOGGY_CLOUD, TexturedModel.CUBE_BOTTOM_TOP.andThen(textures -> textures.put(BOTTOM, ModelIds.getBlockModelId(UBlocks.CLOUD)))).slab(UBlocks.SOGGY_CLOUD_SLAB).stairs(UBlocks.SOGGY_CLOUD_STAIRS);
|
||||||
registerRotated(UBlocks.CARVED_CLOUD, TexturedModel.CUBE_COLUMN);
|
registerRotated(UBlocks.CARVED_CLOUD, TexturedModel.CUBE_COLUMN);
|
||||||
|
registerPillar(UBlocks.CLOUD_PILLAR);
|
||||||
|
|
||||||
registerAll(UBlockStateModelGenerator::registerCompactedBlock, UBlocks.COMPACTED_CLOUD, UBlocks.COMPACTED_CLOUD_BRICKS, UBlocks.COMPACTED_CLOUD_PLANKS, UBlocks.COMPACTED_DENSE_CLOUD, UBlocks.COMPACTED_ETCHED_CLOUD);
|
registerAll(UBlockStateModelGenerator::registerCompactedBlock, UBlocks.COMPACTED_CLOUD, UBlocks.COMPACTED_CLOUD_BRICKS, UBlocks.COMPACTED_CLOUD_PLANKS, UBlocks.COMPACTED_DENSE_CLOUD, UBlocks.COMPACTED_ETCHED_CLOUD);
|
||||||
registerChest(UBlocks.CLOUD_CHEST, UBlocks.CLOUD);
|
registerChest(UBlocks.CLOUD_CHEST, UBlocks.CLOUD);
|
||||||
|
@ -103,7 +107,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
registerParentedItemModel(UBlocks.SLIME_PUSTULE, ModelIds.getBlockSubModelId(UBlocks.SLIME_PUSTULE, "_pod"));
|
registerParentedItemModel(UBlocks.SLIME_PUSTULE, ModelIds.getBlockSubModelId(UBlocks.SLIME_PUSTULE, "_pod"));
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(UBlocks.SLIME_PUSTULE)
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(UBlocks.SLIME_PUSTULE)
|
||||||
.coordinate(BlockStateVariantMap.create(SlimePustuleBlock.SHAPE)
|
.coordinate(BlockStateVariantMap.create(SlimePustuleBlock.SHAPE)
|
||||||
.register(state -> BlockStateVariant.create().put(VariantSettings.MODEL, ModelIds.getBlockSubModelId(UBlocks.SLIME_PUSTULE, "_" + state.asString())))));
|
.register(state -> BlockStateVariant.create().put(MODEL, ModelIds.getBlockSubModelId(UBlocks.SLIME_PUSTULE, "_" + state.asString())))));
|
||||||
registerPie(UBlocks.APPLE_PIE);
|
registerPie(UBlocks.APPLE_PIE);
|
||||||
|
|
||||||
// palm wood
|
// palm wood
|
||||||
|
@ -153,7 +157,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
new int[] { 0, 1, 2, 3, 4, 5, 5, 6 },
|
new int[] { 0, 1, 2, 3, 4, 5, 5, 6 },
|
||||||
new int[] { 0, 0, 1, 2, 3, 4, 5, 6 }
|
new int[] { 0, 0, 1, 2, 3, 4, 5, 6 }
|
||||||
);
|
);
|
||||||
registerParentedItemModel(UBlocks.PLUNDER_VINE_BUD, ModelIds.getBlockModelId(UBlocks.PLUNDER_VINE_BUD));
|
registerPlunderVine(UBlocks.PLUNDER_VINE, UBlocks.PLUNDER_VINE_BUD);
|
||||||
|
|
||||||
// leaves
|
// leaves
|
||||||
registerAll(UBlockStateModelGenerator::registerFloweringLeaves, UBlocks.GREEN_APPLE_LEAVES, UBlocks.SOUR_APPLE_LEAVES, UBlocks.SWEET_APPLE_LEAVES);
|
registerAll(UBlockStateModelGenerator::registerFloweringLeaves, UBlocks.GREEN_APPLE_LEAVES, UBlocks.SOUR_APPLE_LEAVES, UBlocks.SWEET_APPLE_LEAVES);
|
||||||
|
@ -210,7 +214,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
return (new BlockTexturePool(textures) {
|
return (new BlockTexturePool(textures) {
|
||||||
@Override
|
@Override
|
||||||
public BlockTexturePool stairs(Block block) {
|
public BlockTexturePool stairs(Block block) {
|
||||||
TextureMap textMap = textures.copyAndAdd(BlockModels.STEP, textures.getTexture(TextureKey.SIDE));
|
TextureMap textMap = textures.copyAndAdd(BlockModels.STEP, textures.getTexture(SIDE));
|
||||||
Identifier inner = BlockModels.INNER_STAIRS.upload(block, textMap, modelCollector);
|
Identifier inner = BlockModels.INNER_STAIRS.upload(block, textMap, modelCollector);
|
||||||
Identifier straight = BlockModels.STRAIGHT_STAIRS.upload(block, textMap, modelCollector);
|
Identifier straight = BlockModels.STRAIGHT_STAIRS.upload(block, textMap, modelCollector);
|
||||||
Identifier outer = BlockModels.OUTER_STAIRS.upload(block, textMap, modelCollector);
|
Identifier outer = BlockModels.OUTER_STAIRS.upload(block, textMap, modelCollector);
|
||||||
|
@ -240,7 +244,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockTexturePool slab(Block block) {
|
public BlockTexturePool slab(Block block) {
|
||||||
TextureMap textMap = textures.copyAndAdd(TextureKey.SIDE, twoStepTexture);
|
TextureMap textMap = textures.copyAndAdd(SIDE, twoStepTexture);
|
||||||
Identifier lower = Models.SLAB.upload(block, textMap, modelCollector);
|
Identifier lower = Models.SLAB.upload(block, textMap, modelCollector);
|
||||||
Identifier upper = Models.SLAB_TOP.upload(block, textMap, modelCollector);
|
Identifier upper = Models.SLAB_TOP.upload(block, textMap, modelCollector);
|
||||||
blockStateCollector.accept(BlockStateModelGenerator.createSlabBlockState(block, lower, upper, baseModelId));
|
blockStateCollector.accept(BlockStateModelGenerator.createSlabBlockState(block, lower, upper, baseModelId));
|
||||||
|
@ -254,8 +258,8 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
TexturedModel model = TexturedModel.CUBE_BOTTOM_TOP.get(dirt);
|
TexturedModel model = TexturedModel.CUBE_BOTTOM_TOP.get(dirt);
|
||||||
registerTopSoil(block,
|
registerTopSoil(block,
|
||||||
model.upload(block, modelCollector),
|
model.upload(block, modelCollector),
|
||||||
BlockStateVariant.create().put(VariantSettings.MODEL, Models.CUBE_BOTTOM_TOP.upload(dirt, "_snow", model.getTextures()
|
BlockStateVariant.create().put(MODEL, Models.CUBE_BOTTOM_TOP.upload(dirt, "_snow", model.getTextures()
|
||||||
.copyAndAdd(TextureKey.SIDE, ModelIds.getBlockSubModelId(dirt, "_side_snow_covered")
|
.copyAndAdd(SIDE, ModelIds.getBlockSubModelId(dirt, "_side_snow_covered")
|
||||||
), modelCollector))
|
), modelCollector))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -264,18 +268,47 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
Identifier outside = ModelIds.getBlockModelId(UBlocks.CHITIN);
|
Identifier outside = ModelIds.getBlockModelId(UBlocks.CHITIN);
|
||||||
Identifier inside = ModelIds.getBlockSubModelId(UBlocks.CHITIN, "_bottom");
|
Identifier inside = ModelIds.getBlockSubModelId(UBlocks.CHITIN, "_bottom");
|
||||||
registerSingleton(UBlocks.CHITIN, new TextureMap()
|
registerSingleton(UBlocks.CHITIN, new TextureMap()
|
||||||
.put(TextureKey.SIDE, outside)
|
.put(SIDE, outside)
|
||||||
.put(TextureKey.TOP, outside)
|
.put(TOP, outside)
|
||||||
.put(TextureKey.BOTTOM, inside), Models.CUBE_BOTTOM_TOP);
|
.put(BOTTOM, inside), Models.CUBE_BOTTOM_TOP);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerRotated(Block block, TexturedModel.Factory modelFactory) {
|
public void registerRotated(Block block, TexturedModel.Factory modelFactory) {
|
||||||
Identifier modelId = modelFactory.get(block).upload(block, modelCollector);
|
Identifier modelId = modelFactory.get(block).upload(block, modelCollector);
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(block, BlockStateVariant.create()
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(block, BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, modelId))
|
.put(MODEL, modelId))
|
||||||
.coordinate(createUpDefaultFacingVariantMap()));
|
.coordinate(createUpDefaultFacingVariantMap()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerPlunderVine(Block plant, Block bud) {
|
||||||
|
var rotationVariants = BlockStateVariantMap.create(Properties.FACING);
|
||||||
|
createDownDefaultFacingVariantMap(rotationVariants::register);
|
||||||
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(bud, BlockStateVariant.create()
|
||||||
|
.put(MODEL, ModelIds.getBlockModelId(bud)))
|
||||||
|
.coordinate(rotationVariants));
|
||||||
|
|
||||||
|
var supplier = MultipartBlockStateSupplier.create(plant);
|
||||||
|
String[] stages = { "", "_2", "_3", "_4", "_4"};
|
||||||
|
Properties.AGE_4.getValues().forEach(age -> {
|
||||||
|
Identifier modelId = ModelIds.getBlockSubModelId(plant, "_branch" + stages[age]);
|
||||||
|
createDownDefaultFacingVariantMap((direction, variant) -> {
|
||||||
|
supplier.with(When.create().set(Properties.AGE_4, age).set(ConnectingBlock.FACING_PROPERTIES.get(direction), true), variant.put(MODEL, modelId));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
blockStateCollector.accept(supplier);
|
||||||
|
registerParentedItemModel(bud, ModelIds.getBlockModelId(bud));
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void createDownDefaultFacingVariantMap(BiConsumer<Direction, BlockStateVariant> builder) {
|
||||||
|
builder.accept(Direction.DOWN, BlockStateVariant.create());
|
||||||
|
builder.accept(Direction.UP, BlockStateVariant.create().put(X, R180));
|
||||||
|
builder.accept(Direction.SOUTH, BlockStateVariant.create().put(X, R90));
|
||||||
|
builder.accept(Direction.NORTH, BlockStateVariant.create().put(X, R90).put(Y, R180));
|
||||||
|
builder.accept(Direction.EAST, BlockStateVariant.create().put(X, R90).put(Y, R270));
|
||||||
|
builder.accept(Direction.WEST, BlockStateVariant.create().put(X, R90).put(Y, R90));
|
||||||
|
}
|
||||||
|
|
||||||
public void registerCompactedBlock(Block block) {
|
public void registerCompactedBlock(Block block) {
|
||||||
for (Model model : BlockModels.FLATTENED_MODELS) {
|
for (Model model : BlockModels.FLATTENED_MODELS) {
|
||||||
model.upload(block, TextureMap.all(ModelIds.getBlockModelId(block).withPath(p -> p.replace("compacted_", ""))), modelCollector);
|
model.upload(block, TextureMap.all(ModelIds.getBlockModelId(block).withPath(p -> p.replace("compacted_", ""))), modelCollector);
|
||||||
|
@ -285,18 +318,18 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
final BooleanProperty yAxis = (i & 0b100) == 0 ? Properties.DOWN : Properties.UP;
|
final BooleanProperty yAxis = (i & 0b100) == 0 ? Properties.DOWN : Properties.UP;
|
||||||
final BooleanProperty xAxis = (i & 0b010) == 0 ? Properties.NORTH: Properties.SOUTH;
|
final BooleanProperty xAxis = (i & 0b010) == 0 ? Properties.NORTH: Properties.SOUTH;
|
||||||
final BooleanProperty zAxis = (i & 0b001) == 0 ? Properties.EAST : Properties.WEST;
|
final BooleanProperty zAxis = (i & 0b001) == 0 ? Properties.EAST : Properties.WEST;
|
||||||
final VariantSettings.Rotation xRot = yAxis == Properties.DOWN ? VariantSettings.Rotation.R0 : VariantSettings.Rotation.R180;
|
final Rotation xRot = yAxis == Properties.DOWN ? R0 : R180;
|
||||||
final VariantSettings.Rotation yRot = BlockModels.FLATTENED_MODEL_ROTATIONS[i];
|
final Rotation yRot = BlockModels.FLATTENED_MODEL_ROTATIONS[i];
|
||||||
final String[] suffexes = yRot.ordinal() % 2 == 0 ? BlockModels.FLATTENED_MODEL_SUFFEXES : BlockModels.FLATTENED_MODEL_SUFFEXES_ROT;
|
final String[] suffexes = yRot.ordinal() % 2 == 0 ? BlockModels.FLATTENED_MODEL_SUFFEXES : BlockModels.FLATTENED_MODEL_SUFFEXES_ROT;
|
||||||
for (byte v = 0; v < suffexes.length; v++) {
|
for (byte v = 0; v < suffexes.length; v++) {
|
||||||
supplier.with(When.create()
|
supplier.with(When.create()
|
||||||
.set(yAxis, (v & 0b100) != 0)
|
.set(yAxis, (v & 0b100) != 0)
|
||||||
.set(xAxis, (v & 0b010) != 0)
|
.set(xAxis, (v & 0b010) != 0)
|
||||||
.set(zAxis, (v & 0b001) != 0), BlockStateVariant.create()
|
.set(zAxis, (v & 0b001) != 0), BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, ModelIds.getBlockSubModelId(block, "_corner_" + suffexes[v]))
|
.put(MODEL, ModelIds.getBlockSubModelId(block, "_corner_" + suffexes[v]))
|
||||||
.put(VariantSettings.UVLOCK, true)
|
.put(UVLOCK, true)
|
||||||
.put(VariantSettings.X, xRot)
|
.put(X, xRot)
|
||||||
.put(VariantSettings.Y, yRot)
|
.put(Y, yRot)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -315,7 +348,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
|
|
||||||
public void registerStableDoor(Block door) {
|
public void registerStableDoor(Block door) {
|
||||||
TextureMap topTextures = TextureMap.topBottom(door);
|
TextureMap topTextures = TextureMap.topBottom(door);
|
||||||
TextureMap bottomTextures = topTextures.copyAndAdd(TextureKey.TOP, topTextures.getTexture(TextureKey.BOTTOM));
|
TextureMap bottomTextures = topTextures.copyAndAdd(TOP, topTextures.getTexture(BOTTOM));
|
||||||
registerItemModel(door.asItem());
|
registerItemModel(door.asItem());
|
||||||
var variants = BlockStateVariantMap.create(Properties.HORIZONTAL_FACING, Properties.DOUBLE_BLOCK_HALF, Properties.DOOR_HINGE, Properties.OPEN);
|
var variants = BlockStateVariantMap.create(Properties.HORIZONTAL_FACING, Properties.DOUBLE_BLOCK_HALF, Properties.DOOR_HINGE, Properties.OPEN);
|
||||||
fillStableDoorVariantMap(variants, DoubleBlockHalf.LOWER,
|
fillStableDoorVariantMap(variants, DoubleBlockHalf.LOWER,
|
||||||
|
@ -332,45 +365,61 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
public static void fillStableDoorVariantMap(
|
public static void fillStableDoorVariantMap(
|
||||||
BlockStateVariantMap.QuadrupleProperty<Direction, DoubleBlockHalf, DoorHinge, Boolean> variantMap,
|
BlockStateVariantMap.QuadrupleProperty<Direction, DoubleBlockHalf, DoorHinge, Boolean> variantMap,
|
||||||
DoubleBlockHalf targetHalf, Identifier leftModelId, Identifier rightModelId) {
|
DoubleBlockHalf targetHalf, Identifier leftModelId, Identifier rightModelId) {
|
||||||
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, false, VariantSettings.Rotation.R0, leftModelId);
|
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, false, R0, leftModelId);
|
||||||
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, false, VariantSettings.Rotation.R0, rightModelId);
|
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, false, R0, rightModelId);
|
||||||
|
|
||||||
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, true, VariantSettings.Rotation.R90, rightModelId);
|
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.LEFT, true, R90, rightModelId);
|
||||||
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, true, VariantSettings.Rotation.R270, leftModelId);
|
fillStableDoorVariantMap(variantMap, targetHalf, DoorHinge.RIGHT, true, R270, leftModelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void fillStableDoorVariantMap(
|
public static void fillStableDoorVariantMap(
|
||||||
BlockStateVariantMap.QuadrupleProperty<Direction, DoubleBlockHalf, DoorHinge, Boolean> variantMap,
|
BlockStateVariantMap.QuadrupleProperty<Direction, DoubleBlockHalf, DoorHinge, Boolean> variantMap,
|
||||||
DoubleBlockHalf targetHalf,
|
DoubleBlockHalf targetHalf,
|
||||||
DoorHinge hinge, boolean open, VariantSettings.Rotation rotation,
|
DoorHinge hinge, boolean open, Rotation rotation,
|
||||||
Identifier modelId) {
|
Identifier modelId) {
|
||||||
|
|
||||||
for (int i = 0; i < BlockRotation.DIRECTIONS.length; i++) {
|
for (int i = 0; i < BlockRotation.DIRECTIONS.length; i++) {
|
||||||
variantMap.register(BlockRotation.DIRECTIONS[i], targetHalf, hinge, open, BlockStateVariant.create()
|
variantMap.register(BlockRotation.DIRECTIONS[i], targetHalf, hinge, open, BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, modelId)
|
.put(MODEL, modelId)
|
||||||
.put(VariantSettings.Y, BlockRotation.cycle(rotation, i))
|
.put(Y, BlockRotation.cycle(rotation, i))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void registerPillar(Block pillar) {
|
||||||
|
TextureMap textures = new TextureMap()
|
||||||
|
.put(SIDE, ModelIds.getBlockSubModelId(pillar, "_side"))
|
||||||
|
.put(TOP, ModelIds.getBlockSubModelId(pillar, "_lip"))
|
||||||
|
.put(BOTTOM, ModelIds.getBlockSubModelId(pillar, "_end"))
|
||||||
|
.put(END, ModelIds.getBlockSubModelId(pillar, "_side_end"));
|
||||||
|
Identifier middle = BlockModels.TEMPLATE_PILLAR.upload(pillar, textures, modelCollector);
|
||||||
|
Identifier end = BlockModels.TEMPLATE_PILLAR_END.upload(pillar, textures, modelCollector);
|
||||||
|
blockStateCollector.accept(MultipartBlockStateSupplier.create(pillar)
|
||||||
|
.with(BlockStateVariant.create().put(MODEL, middle))
|
||||||
|
.with(When.create().set(Properties.NORTH, false), BlockStateVariant.create().put(MODEL, end).put(UVLOCK, true).put(X, R180))
|
||||||
|
.with(When.create().set(Properties.SOUTH, false), BlockStateVariant.create().put(MODEL, end))
|
||||||
|
);
|
||||||
|
ItemModels.TEMPLATE_PILLAR.upload(ModelIds.getItemModelId(pillar.asItem()), textures, modelCollector);
|
||||||
|
}
|
||||||
|
|
||||||
public void registerHiveBlock(Block hive) {
|
public void registerHiveBlock(Block hive) {
|
||||||
Identifier core = ModelIds.getBlockSubModelId(hive, "_core");
|
Identifier core = ModelIds.getBlockSubModelId(hive, "_core");
|
||||||
Identifier side = ModelIds.getBlockSubModelId(hive, "_side");
|
Identifier side = ModelIds.getBlockSubModelId(hive, "_side");
|
||||||
blockStateCollector.accept(MultipartBlockStateSupplier.create(hive)
|
blockStateCollector.accept(MultipartBlockStateSupplier.create(hive)
|
||||||
.with(BlockStateVariant.create().put(VariantSettings.MODEL, core))
|
.with(BlockStateVariant.create().put(MODEL, core))
|
||||||
.with(When.create().set(Properties.NORTH, true), BlockStateVariant.create().put(VariantSettings.MODEL, side).put(VariantSettings.UVLOCK, true))
|
.with(When.create().set(Properties.NORTH, true), BlockStateVariant.create().put(MODEL, side).put(UVLOCK, true))
|
||||||
.with(When.create().set(Properties.EAST, true), BlockStateVariant.create().put(VariantSettings.MODEL, side).put(VariantSettings.UVLOCK, true).put(VariantSettings.Y, VariantSettings.Rotation.R90))
|
.with(When.create().set(Properties.EAST, true), BlockStateVariant.create().put(MODEL, side).put(UVLOCK, true).put(Y, R90))
|
||||||
.with(When.create().set(Properties.SOUTH, true), BlockStateVariant.create().put(VariantSettings.MODEL, side).put(VariantSettings.UVLOCK, true).put(VariantSettings.Y, VariantSettings.Rotation.R180))
|
.with(When.create().set(Properties.SOUTH, true), BlockStateVariant.create().put(MODEL, side).put(UVLOCK, true).put(Y, R180))
|
||||||
.with(When.create().set(Properties.WEST, true), BlockStateVariant.create().put(VariantSettings.MODEL, side).put(VariantSettings.UVLOCK, true).put(VariantSettings.Y, VariantSettings.Rotation.R270))
|
.with(When.create().set(Properties.WEST, true), BlockStateVariant.create().put(MODEL, side).put(UVLOCK, true).put(Y, R270))
|
||||||
.with(When.create().set(Properties.DOWN, true), BlockStateVariant.create().put(VariantSettings.MODEL, side).put(VariantSettings.UVLOCK, true).put(VariantSettings.X, VariantSettings.Rotation.R90))
|
.with(When.create().set(Properties.DOWN, true), BlockStateVariant.create().put(MODEL, side).put(UVLOCK, true).put(X, R90))
|
||||||
.with(When.create().set(Properties.UP, true), BlockStateVariant.create().put(VariantSettings.MODEL, side).put(VariantSettings.UVLOCK, true).put(VariantSettings.X, VariantSettings.Rotation.R270)));
|
.with(When.create().set(Properties.UP, true), BlockStateVariant.create().put(MODEL, side).put(UVLOCK, true).put(X, R270)));
|
||||||
Models.CUBE_ALL.upload(ModelIds.getItemModelId(hive.asItem()), TextureMap.all(ModelIds.getBlockSubModelId(hive, "_side")), modelCollector);
|
Models.CUBE_ALL.upload(ModelIds.getItemModelId(hive.asItem()), TextureMap.all(ModelIds.getBlockSubModelId(hive, "_side")), modelCollector);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerBale(Identifier blockId, Identifier baseBlockId, String endSuffex) {
|
public void registerBale(Identifier blockId, Identifier baseBlockId, String endSuffex) {
|
||||||
Identifier top = baseBlockId.withPath(p -> "block/" + p + endSuffex);
|
Identifier top = baseBlockId.withPath(p -> "block/" + p + endSuffex);
|
||||||
Identifier side = baseBlockId.withPath(p -> "block/" + p + "_side");
|
Identifier side = baseBlockId.withPath(p -> "block/" + p + "_side");
|
||||||
TextureMap textures = new TextureMap().put(TextureKey.TOP, top).put(TextureKey.SIDE, side);
|
TextureMap textures = new TextureMap().put(TOP, top).put(SIDE, side);
|
||||||
|
|
||||||
MultipartBlockStateSupplier supplier = MultipartBlockStateSupplier.create(Registries.BLOCK.getOrEmpty(blockId).orElseGet(() -> {
|
MultipartBlockStateSupplier supplier = MultipartBlockStateSupplier.create(Registries.BLOCK.getOrEmpty(blockId).orElseGet(() -> {
|
||||||
return Registry.register(Registries.BLOCK, blockId, new EdibleBlock(blockId, blockId, false));
|
return Registry.register(Registries.BLOCK, blockId, new EdibleBlock(blockId, blockId, false));
|
||||||
|
@ -382,11 +431,11 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
BooleanProperty segment = EdibleBlock.SEGMENTS[i];
|
BooleanProperty segment = EdibleBlock.SEGMENTS[i];
|
||||||
segment.getName();
|
segment.getName();
|
||||||
supplier.with(When.create().set(EdibleBlock.AXIS, axis).set(segment, true), BlockStateVariant.create()
|
supplier.with(When.create().set(EdibleBlock.AXIS, axis).set(segment, true), BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, uploadedModels.computeIfAbsent(i, ii -> {
|
.put(MODEL, uploadedModels.computeIfAbsent(i, ii -> {
|
||||||
return BlockModels.BALE_MODELS[ii].getLeft().upload(blockId.withPath(p -> "block/" + p + BlockModels.BALE_MODELS[ii].getRight()), textures, modelCollector);
|
return BlockModels.BALE_MODELS[ii].getLeft().upload(blockId.withPath(p -> "block/" + p + BlockModels.BALE_MODELS[ii].getRight()), textures, modelCollector);
|
||||||
}))
|
}))
|
||||||
.put(VariantSettings.X, axis == Direction.Axis.Y ? VariantSettings.Rotation.R0 : VariantSettings.Rotation.R90)
|
.put(X, axis == Direction.Axis.Y ? R0 : R90)
|
||||||
.put(VariantSettings.Y, axis == Direction.Axis.X ? VariantSettings.Rotation.R90 : VariantSettings.Rotation.R0)
|
.put(Y, axis == Direction.Axis.X ? R90 : R0)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -402,7 +451,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
Int2ObjectOpenHashMap<Identifier> uploadedModels = new Int2ObjectOpenHashMap<>();
|
Int2ObjectOpenHashMap<Identifier> uploadedModels = new Int2ObjectOpenHashMap<>();
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(crop)
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(crop)
|
||||||
.coordinate(BlockStateVariantMap.create(ageProperty)
|
.coordinate(BlockStateVariantMap.create(ageProperty)
|
||||||
.register(age -> BlockStateVariant.create().put(VariantSettings.MODEL, uploadedModels.computeIfAbsent(stages[age - offset], stage -> {
|
.register(age -> BlockStateVariant.create().put(MODEL, uploadedModels.computeIfAbsent(stages[age - offset], stage -> {
|
||||||
return modelFactory.upload(crop, "_stage" + stage, modelCollector);
|
return modelFactory.upload(crop, "_stage" + stage, modelCollector);
|
||||||
})))));
|
})))));
|
||||||
}
|
}
|
||||||
|
@ -414,7 +463,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
int offset = ageProperty.getValues().iterator().next();
|
int offset = ageProperty.getValues().iterator().next();
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(crop)
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(crop)
|
||||||
.coordinate(BlockStateVariantMap.create(ageProperty)
|
.coordinate(BlockStateVariantMap.create(ageProperty)
|
||||||
.register(age -> BlockStateVariant.create().put(VariantSettings.MODEL, ModelIds.getBlockSubModelId(crop, "_stage" + stages[age - offset])))));
|
.register(age -> BlockStateVariant.create().put(MODEL, ModelIds.getBlockSubModelId(crop, "_stage" + stages[age - offset])))));
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends Enum<T> & StringIdentifiable> void registerTallCrop(Block crop,
|
public <T extends Enum<T> & StringIdentifiable> void registerTallCrop(Block crop,
|
||||||
|
@ -425,28 +474,28 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(crop).coordinate(BlockStateVariantMap.create(partProperty, ageProperty).register((part, age) -> {
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(crop).coordinate(BlockStateVariantMap.create(partProperty, ageProperty).register((part, age) -> {
|
||||||
int i = ageTextureIndices[part.ordinal()][age];
|
int i = ageTextureIndices[part.ordinal()][age];
|
||||||
Identifier identifier = uploadedModels.computeIfAbsent("_" + part.asString() + "_stage" + i, variant -> createSubModel(crop, variant, Models.CROSS, TextureMap::cross));
|
Identifier identifier = uploadedModels.computeIfAbsent("_" + part.asString() + "_stage" + i, variant -> createSubModel(crop, variant, Models.CROSS, TextureMap::cross));
|
||||||
return BlockStateVariant.create().put(VariantSettings.MODEL, identifier);
|
return BlockStateVariant.create().put(MODEL, identifier);
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerPie(Block pie) {
|
public void registerPie(Block pie) {
|
||||||
TextureMap textures = new TextureMap()
|
TextureMap textures = new TextureMap()
|
||||||
.put(TextureKey.TOP, ModelIds.getBlockSubModelId(pie, "_top"))
|
.put(TOP, ModelIds.getBlockSubModelId(pie, "_top"))
|
||||||
.put(TextureKey.BOTTOM, ModelIds.getBlockSubModelId(pie, "_bottom"))
|
.put(BOTTOM, ModelIds.getBlockSubModelId(pie, "_bottom"))
|
||||||
.put(TextureKey.SIDE, ModelIds.getBlockSubModelId(pie, "_side"))
|
.put(SIDE, ModelIds.getBlockSubModelId(pie, "_side"))
|
||||||
.put(TextureKey.INSIDE, ModelIds.getBlockSubModelId(pie, "_inside"));
|
.put(INSIDE, ModelIds.getBlockSubModelId(pie, "_inside"));
|
||||||
TextureMap stompedTextures = textures.copyAndAdd(TextureKey.TOP, ModelIds.getBlockSubModelId(pie, "_top_stomped"));
|
TextureMap stompedTextures = textures.copyAndAdd(TOP, ModelIds.getBlockSubModelId(pie, "_top_stomped"));
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(pie).coordinate(BlockStateVariantMap.create(PieBlock.BITES, PieBlock.STOMPED).register((bites, stomped) -> {
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(pie).coordinate(BlockStateVariantMap.create(PieBlock.BITES, PieBlock.STOMPED).register((bites, stomped) -> {
|
||||||
return BlockStateVariant.create().put(VariantSettings.MODEL, BlockModels.PIE_MODELS[bites].upload(pie, (stomped ? "_stomped" : ""), stomped ? stompedTextures : textures, modelCollector));
|
return BlockStateVariant.create().put(MODEL, BlockModels.PIE_MODELS[bites].upload(pie, (stomped ? "_stomped" : ""), stomped ? stompedTextures : textures, modelCollector));
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerFloweringLeaves(Block block) {
|
public void registerFloweringLeaves(Block block) {
|
||||||
Identifier baseModel = TexturedModel.LEAVES.upload(block, modelCollector);
|
Identifier baseModel = TexturedModel.LEAVES.upload(block, modelCollector);
|
||||||
Identifier floweringModel = Models.CUBE_ALL.upload(block, "_flowering", TextureMap.of(TextureKey.ALL, ModelIds.getBlockSubModelId(block, "_flowering")), modelCollector);
|
Identifier floweringModel = Models.CUBE_ALL.upload(block, "_flowering", TextureMap.of(ALL, ModelIds.getBlockSubModelId(block, "_flowering")), modelCollector);
|
||||||
blockStateCollector.accept(MultipartBlockStateSupplier.create(block)
|
blockStateCollector.accept(MultipartBlockStateSupplier.create(block)
|
||||||
.with(BlockStateVariant.create().put(VariantSettings.MODEL, baseModel))
|
.with(BlockStateVariant.create().put(MODEL, baseModel))
|
||||||
.with(When.create().set(FruitBearingBlock.STAGE, FruitBearingBlock.Stage.FLOWERING), BlockStateVariant.create().put(VariantSettings.MODEL, floweringModel)));
|
.with(When.create().set(FruitBearingBlock.STAGE, FruitBearingBlock.Stage.FLOWERING), BlockStateVariant.create().put(MODEL, floweringModel)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerZapLeaves(Block block) {
|
public void registerZapLeaves(Block block) {
|
||||||
|
@ -456,7 +505,7 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(block)
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(block)
|
||||||
.coordinate(BlockStateVariantMap.create(ZapAppleLeavesBlock.STAGE)
|
.coordinate(BlockStateVariantMap.create(ZapAppleLeavesBlock.STAGE)
|
||||||
.register(stage -> BlockStateVariant.create()
|
.register(stage -> BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, switch (stage) {
|
.put(MODEL, switch (stage) {
|
||||||
case HIBERNATING -> airModel;
|
case HIBERNATING -> airModel;
|
||||||
case FLOWERING -> floweringModel;
|
case FLOWERING -> floweringModel;
|
||||||
default -> baseModel;
|
default -> baseModel;
|
||||||
|
@ -467,23 +516,23 @@ public class UBlockStateModelGenerator extends BlockStateModelGenerator {
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(sprout)
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(sprout)
|
||||||
.coordinate(BlockStateVariantMap.create(Properties.AGE_7)
|
.coordinate(BlockStateVariantMap.create(Properties.AGE_7)
|
||||||
.register(age -> BlockStateVariant.create()
|
.register(age -> BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, Unicopia.id("block/apple_sprout_stage" + age)))));
|
.put(MODEL, Unicopia.id("block/apple_sprout_stage" + age)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerShell(Block shell) {
|
public void registerShell(Block shell) {
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(shell)
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(shell)
|
||||||
.coordinate(BlockStateVariantMap.create(ShellsBlock.COUNT)
|
.coordinate(BlockStateVariantMap.create(ShellsBlock.COUNT)
|
||||||
.register(count -> BlockStateVariant.create()
|
.register(count -> BlockStateVariant.create()
|
||||||
.put(VariantSettings.MODEL, BlockModels.SHELL_MODELS[count - 1].upload(shell, TextureMap.of(BlockModels.SHELL, Registries.BLOCK.getId(shell).withPrefixedPath("item/")), modelCollector)))));
|
.put(MODEL, BlockModels.SHELL_MODELS[count - 1].upload(shell, TextureMap.of(BlockModels.SHELL, Registries.BLOCK.getId(shell).withPrefixedPath("item/")), modelCollector)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerHull(Block block, Block core, Block shell) {
|
public void registerHull(Block block, Block core, Block shell) {
|
||||||
blockStateCollector.accept(VariantsBlockStateSupplier.create(
|
blockStateCollector.accept(VariantsBlockStateSupplier.create(
|
||||||
block,
|
block,
|
||||||
BlockStateVariant.create().put(VariantSettings.MODEL, Models.CUBE_BOTTOM_TOP.upload(block, new TextureMap()
|
BlockStateVariant.create().put(MODEL, Models.CUBE_BOTTOM_TOP.upload(block, new TextureMap()
|
||||||
.put(TextureKey.BOTTOM, ModelIds.getBlockModelId(core))
|
.put(BOTTOM, ModelIds.getBlockModelId(core))
|
||||||
.put(TextureKey.TOP, ModelIds.getBlockModelId(shell))
|
.put(TOP, ModelIds.getBlockModelId(shell))
|
||||||
.put(TextureKey.SIDE, ModelIds.getBlockSubModelId(shell, "_half")), modelCollector))
|
.put(SIDE, ModelIds.getBlockSubModelId(shell, "_half")), modelCollector))
|
||||||
).coordinate(createUpDefaultFacingVariantMap()));
|
).coordinate(createUpDefaultFacingVariantMap()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"multipart": [
|
|
||||||
{
|
|
||||||
"apply": {
|
|
||||||
"model": "unicopia:block/cloud_pillar_middle"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": {
|
|
||||||
"model": "unicopia:block/cloud_pillar_end",
|
|
||||||
"uvlock": true,
|
|
||||||
"x": 180
|
|
||||||
},
|
|
||||||
"when": {
|
|
||||||
"north": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": {
|
|
||||||
"model": "unicopia:block/cloud_pillar_end",
|
|
||||||
"uvlock": true
|
|
||||||
},
|
|
||||||
"when": {
|
|
||||||
"south": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,128 +0,0 @@
|
||||||
{
|
|
||||||
"multipart": [
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch" },
|
|
||||||
"when": { "age": 0, "down": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch", "x": 180 },
|
|
||||||
"when": { "age": 0, "up": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90 },
|
|
||||||
"when": { "age": 0, "south": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90, "y": 90 },
|
|
||||||
"when": { "age": 0, "west": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90, "y": 180 },
|
|
||||||
"when": { "age": 0, "north": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch", "x": 90, "y": 270 },
|
|
||||||
"when": { "age": 0, "east": true }
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_2" },
|
|
||||||
"when": { "age": 1, "down": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 180 },
|
|
||||||
"when": { "age": 1, "up": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90 },
|
|
||||||
"when": { "age": 1, "south": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90, "y": 90 },
|
|
||||||
"when": { "age": 1, "west": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90, "y": 180 },
|
|
||||||
"when": { "age": 1, "north": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_2", "x": 90, "y": 270 },
|
|
||||||
"when": { "age": 1, "east": true }
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_3" },
|
|
||||||
"when": { "age": 2, "down": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 180 },
|
|
||||||
"when": { "age": 2, "up": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90 },
|
|
||||||
"when": { "age": 2, "south": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90, "y": 90 },
|
|
||||||
"when": { "age": 2, "west": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90, "y": 180 },
|
|
||||||
"when": { "age": 2, "north": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_3", "x": 90, "y": 270 },
|
|
||||||
"when": { "age": 2, "east": true }
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4" },
|
|
||||||
"when": { "age": 3, "down": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 180 },
|
|
||||||
"when": { "age": 3, "up": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90 },
|
|
||||||
"when": { "age": 3, "south": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 90 },
|
|
||||||
"when": { "age": 3, "west": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 180 },
|
|
||||||
"when": { "age": 3, "north": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 270 },
|
|
||||||
"when": { "age": 3, "east": true }
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4" },
|
|
||||||
"when": { "age": 4, "down": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 180 },
|
|
||||||
"when": { "age": 4, "up": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90 },
|
|
||||||
"when": { "age": 4, "south": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 90 },
|
|
||||||
"when": { "age": 4, "west": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 180 },
|
|
||||||
"when": { "age": 4, "north": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"apply": { "model": "unicopia:block/plunder_vine_branch_4", "x": 90, "y": 270 },
|
|
||||||
"when": { "age": 4, "east": true }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
"variants": {
|
|
||||||
"facing=down": { "model": "unicopia:block/plunder_vine_bud" },
|
|
||||||
"facing=up": { "model": "unicopia:block/plunder_vine_bud", "x": 180 },
|
|
||||||
"facing=south": { "model": "unicopia:block/plunder_vine_bud", "x": 90 },
|
|
||||||
"facing=west": { "model": "unicopia:block/plunder_vine_bud", "x": 90, "y": 90 },
|
|
||||||
"facing=north": { "model": "unicopia:block/plunder_vine_bud", "x": 90, "y": 180 },
|
|
||||||
"facing=east": { "model": "unicopia:block/plunder_vine_bud", "x": 90, "y": 270 }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
"parent": "minecraft:block/cube_bottom_top",
|
|
||||||
"textures": {
|
|
||||||
"top": "unicopia:block/cloud_pillar_lip",
|
|
||||||
"bottom": "unicopia:block/cloud_pillar_top",
|
|
||||||
"side": "unicopia:block/cloud_pillar_side_end"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"from": [0, 0, 0],
|
|
||||||
"to": [16, 5, 16],
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [0, 11, 16, 16], "texture": "#side", "cullface": "north"},
|
|
||||||
"east": {"uv": [0, 11, 16, 16], "texture": "#side", "cullface": "east"},
|
|
||||||
"south": {"uv": [0, 11, 16, 16], "texture": "#side", "cullface": "south"},
|
|
||||||
"west": {"uv": [0, 11, 16, 16], "texture": "#side", "cullface": "west"},
|
|
||||||
"up": {"uv": [0, 0, 16, 16], "texture": "#top"},
|
|
||||||
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,9 +1,5 @@
|
||||||
{
|
{
|
||||||
"parent": "minecraft:block/cube_bottom_top",
|
"parent": "minecraft:block/cube_bottom_top",
|
||||||
"textures": {
|
|
||||||
"top": "unicopia:block/cloud_pillar_top",
|
|
||||||
"side": "unicopia:block/cloud_pillar_side"
|
|
||||||
},
|
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"from": [1, 0, 1],
|
"from": [1, 0, 1],
|
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_bottom_top",
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 5, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 11, 16, 16], "texture": "#end", "cullface": "north"},
|
||||||
|
"east": {"uv": [0, 11, 16, 16], "texture": "#end", "cullface": "east"},
|
||||||
|
"south": {"uv": [0, 11, 16, 16], "texture": "#end", "cullface": "south"},
|
||||||
|
"west": {"uv": [0, 11, 16, 16], "texture": "#end", "cullface": "west"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "texture": "#top"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom", "cullface": "down"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,47 +0,0 @@
|
||||||
{
|
|
||||||
"parent": "minecraft:block/cube_bottom_top",
|
|
||||||
"textures": {
|
|
||||||
"top": "unicopia:block/cloud_pillar_top",
|
|
||||||
"side": "unicopia:block/cloud_pillar_side",
|
|
||||||
"side_end": "unicopia:block/cloud_pillar_side_end",
|
|
||||||
"particle": "#side"
|
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"from": [2, 1, 2],
|
|
||||||
"to": [14, 15, 14],
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
|
||||||
"east": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
|
||||||
"south": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
|
||||||
"west": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
|
||||||
"up": {"uv": [1, 1, 15, 15], "texture": "#top"},
|
|
||||||
"down": {"uv": [1, 1, 15, 15], "texture": "#top"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"from": [0, 0, 0],
|
|
||||||
"to": [16, 5, 16],
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"east": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"south": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"west": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"up": {"uv": [0, 0, 16, 16], "texture": "#top"},
|
|
||||||
"down": {"uv": [0, 0, 16, 16], "texture": "#top"}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"from": [0, 11, 0],
|
|
||||||
"to": [16, 16, 16],
|
|
||||||
"faces": {
|
|
||||||
"north": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"east": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"south": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"west": {"uv": [0, 11, 16, 16], "texture": "#side_end"},
|
|
||||||
"up": {"uv": [0, 0, 16, 16], "texture": "#top"},
|
|
||||||
"down": {"uv": [0, 0, 16, 16], "texture": "#top"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
{
|
||||||
|
"parent": "minecraft:block/cube_bottom_top",
|
||||||
|
"textures": {
|
||||||
|
"particle": "#side"
|
||||||
|
},
|
||||||
|
"elements": [
|
||||||
|
{
|
||||||
|
"from": [2, 1, 2],
|
||||||
|
"to": [14, 15, 14],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
||||||
|
"east": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
||||||
|
"south": {"uv": [1, 0, 15, 16], "texture": "#side"},
|
||||||
|
"west": {"uv": [1, 0, 15, 16], "texture": "#side"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 0, 0],
|
||||||
|
"to": [16, 5, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"east": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"south": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"west": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "texture": "#top"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom"}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [0, 11, 0],
|
||||||
|
"to": [16, 16, 16],
|
||||||
|
"faces": {
|
||||||
|
"north": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"east": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"south": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"west": {"uv": [0, 11, 16, 16], "texture": "#end"},
|
||||||
|
"up": {"uv": [0, 0, 16, 16], "texture": "#bottom"},
|
||||||
|
"down": {"uv": [0, 0, 16, 16], "texture": "#top"}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
Loading…
Reference in a new issue