diff --git a/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java b/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java new file mode 100644 index 00000000..0971f4d1 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockWallMushroom.java @@ -0,0 +1,22 @@ +package ru.betterend.blocks.basis; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.Material; +import net.minecraft.sound.BlockSoundGroup; + +public class BlockWallMushroom extends BlockWallPlant { + public BlockWallMushroom(int light) { + super(FabricBlockSettings.of(Material.WOOD) + .breakByTool(FabricToolTags.AXES) + .sounds(BlockSoundGroup.GRASS) + .luminance(light) + .sounds(BlockSoundGroup.WOOD) + .hardness(0.2F) + .breakByHand(true) + .allowsSpawning((state, world, pos, type) -> { return false; }) + .suffocates((state, world, pos) -> { return false; }) + .blockVision((state, world, pos) -> { return false; }) + .noCollision()); + } +} diff --git a/src/main/java/ru/betterend/blocks/basis/BlockWallPlant.java b/src/main/java/ru/betterend/blocks/basis/BlockWallPlant.java new file mode 100644 index 00000000..390591f8 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockWallPlant.java @@ -0,0 +1,130 @@ +package ru.betterend.blocks.basis; + +import java.util.EnumMap; +import java.util.List; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.minecraft.block.AbstractBlock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.block.HorizontalFacingBlock; +import net.minecraft.block.Material; +import net.minecraft.block.ShapeContext; +import net.minecraft.item.ItemPlacementContext; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.DirectionProperty; +import net.minecraft.util.BlockMirror; +import net.minecraft.util.BlockRotation; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; +import ru.betterend.util.BlocksHelper; + +public class BlockWallPlant extends BlockPlant { + private static final EnumMap SHAPES = Maps.newEnumMap(ImmutableMap.of( + Direction.NORTH, Block.createCuboidShape(1, 1, 8, 15, 15, 16), + Direction.SOUTH, Block.createCuboidShape(1, 1, 0, 15, 15, 8), + Direction.WEST, Block.createCuboidShape(8, 1, 1, 16, 15, 15), + Direction.EAST, Block.createCuboidShape(0, 1, 1, 8, 15, 15))); + public static final DirectionProperty FACING = HorizontalFacingBlock.FACING; + + public BlockWallPlant() { + this(0); + } + + public BlockWallPlant(int light) { + this(FabricBlockSettings.of(Material.PLANT) + .breakByTool(FabricToolTags.SHEARS) + .sounds(BlockSoundGroup.GRASS) + .luminance(light) + .breakByHand(true) + .noCollision()); + } + + public BlockWallPlant(Settings settings) { + super(settings); + } + + @Override + protected void appendProperties(StateManager.Builder stateManager) { + stateManager.add(FACING); + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext ePos) { + return SHAPES.get(state.get(FACING)); + } + + @Override + public AbstractBlock.OffsetType getOffsetType() { + return AbstractBlock.OffsetType.NONE; + } + + @Override + public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { + Direction direction = (Direction) state.get(FACING); + BlockPos blockPos = pos.offset(direction.getOpposite()); + BlockState blockState = world.getBlockState(blockPos); + return isSupport(world, blockPos, blockState, direction); + } + + public boolean isSupport(WorldView world, BlockPos pos, BlockState blockState, Direction direction) { + return blockState.getMaterial().isSolid() && blockState.isSideSolidFullSquare(world, pos, direction); + } + + @Override + public BlockState getPlacementState(ItemPlacementContext ctx) { + BlockState blockState = this.getDefaultState(); + WorldView worldView = ctx.getWorld(); + BlockPos blockPos = ctx.getBlockPos(); + Direction[] directions = ctx.getPlacementDirections(); + for (int i = 0; i < directions.length; ++i) { + Direction direction = directions[i]; + if (direction.getAxis().isHorizontal()) { + Direction direction2 = direction.getOpposite(); + blockState = blockState.with(FACING, direction2); + if (blockState.canPlaceAt(worldView, blockPos)) { + return blockState; + } + } + } + return null; + } + + @Override + public BlockState getStateForNeighborUpdate(BlockState state, Direction facing, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { + if (!canPlaceAt(state, world, pos)) { + return Blocks.AIR.getDefaultState(); + } + else { + return state; + } + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + return Lists.newArrayList(new ItemStack(this)); + } + + @Override + public BlockState rotate(BlockState state, BlockRotation rotation) { + return BlocksHelper.rotateHorizontal(state, rotation, FACING); + } + + @Override + public BlockState mirror(BlockState state, BlockMirror mirror) { + return BlocksHelper.mirrorHorizontal(state, mirror, FACING); + } +} diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index c14ed79b..c9507b9d 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -94,6 +94,7 @@ public class CraftingRecipes { GridRecipe.make("lotus_block", EndBlocks.END_LOTUS.log).setShape("##", "##").addMaterial('#', EndBlocks.END_LOTUS_STEM).build(); GridRecipe.make("needlegrass_stick", Items.STICK).setList("#").setOutputCount(2).addMaterial('#', EndBlocks.NEEDLEGRASS).build(); GridRecipe.make("shadow_berry_seeds", EndBlocks.SHADOW_BERRY).setList("#").setOutputCount(4).addMaterial('#', EndItems.SHADOW_BERRY_RAW).build(); + GridRecipe.make("purple_polypore_dye", Items.PURPLE_DYE).setList("#").addMaterial('#', EndBlocks.PURPLE_POLYPORE).build(); } public static void registerPedestal(String name, Block pedestal, Block slab, Block pillar) { diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 89af5d9f..31b7a8e6 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -51,6 +51,7 @@ import ru.betterend.blocks.basis.BlockLeaves; import ru.betterend.blocks.basis.BlockOre; import ru.betterend.blocks.basis.BlockSimpleLeaves; import ru.betterend.blocks.basis.BlockVine; +import ru.betterend.blocks.basis.BlockWallMushroom; import ru.betterend.blocks.complex.StoneMaterial; import ru.betterend.blocks.complex.WoodenMaterial; import ru.betterend.tab.CreativeTab; @@ -132,6 +133,9 @@ public class EndBlocks { public static final Block MURKWEED = registerBlock("murkweed", new BlockMurkweed()); public static final Block NEEDLEGRASS = registerBlock("needlegrass", new BlockNeedlegrass()); + // Wall Plants // + public static final Block PURPLE_POLYPORE = registerBlock("purple_polypore", new BlockWallMushroom(13)); + // Crops // public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new BlockShadowBerry()); diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 3abd910b..af29fc07 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -27,6 +27,7 @@ import ru.betterend.world.features.RoundCaveFeature; import ru.betterend.world.features.SinglePlantFeature; import ru.betterend.world.features.UnderwaterPlantFeature; import ru.betterend.world.features.VineFeature; +import ru.betterend.world.features.WallPlantOnLogFeature; public class EndFeatures { // Trees // @@ -55,6 +56,9 @@ public class EndFeatures { public static final EndFeature DENSE_VINE = new EndFeature("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); public static final EndFeature TWISTED_VINE = new EndFeature("twisted_vine", new VineFeature(EndBlocks.TWISTED_VINE, 24), 3); + // Wall Plants // + public static final EndFeature PURPLE_POLYPORE = new EndFeature("purple_polypore", new WallPlantOnLogFeature(EndBlocks.PURPLE_POLYPORE, 3), 5); + // Water // public static final EndFeature BUBBLE_CORAL = new EndFeature("bubble_coral", new UnderwaterPlantFeature(EndBlocks.BUBBLE_CORAL, 10), 10); public static final EndFeature BUBBLE_CORAL_RARE = new EndFeature("bubble_coral_rare", new UnderwaterPlantFeature(EndBlocks.BUBBLE_CORAL, 3), 4); diff --git a/src/main/java/ru/betterend/world/biome/BiomeChorusForest.java b/src/main/java/ru/betterend/world/biome/BiomeChorusForest.java index dc08f4a7..bc4660fd 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeChorusForest.java +++ b/src/main/java/ru/betterend/world/biome/BiomeChorusForest.java @@ -24,6 +24,7 @@ public class BiomeChorusForest extends EndBiome { .addFeature(EndFeatures.END_LAKE_RARE) .addFeature(EndFeatures.PYTHADENDRON_TREE) .addFeature(EndFeatures.PYTHADENDRON_BUSH) + .addFeature(EndFeatures.PURPLE_POLYPORE) .addFeature(Feature.VEGETAL_DECORATION, ConfiguredFeatures.CHORUS_PLANT) .addFeature(Feature.VEGETAL_DECORATION, ConfiguredFeatures.CHORUS_PLANT) .addFeature(EndFeatures.CHORUS_GRASS) diff --git a/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java b/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java index d1b51a8f..f0e01393 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java +++ b/src/main/java/ru/betterend/world/biome/BiomeShadowForest.java @@ -25,6 +25,7 @@ public class BiomeShadowForest extends EndBiome { .addFeature(EndFeatures.NEEDLEGRASS) .addFeature(EndFeatures.SHADOW_BERRY) .addFeature(EndFeatures.TWISTED_VINE) + .addFeature(EndFeatures.PURPLE_POLYPORE) .addStructureFeature(ConfiguredStructureFeatures.END_CITY) .addMobSpawn(EntityType.ENDERMAN, 80, 1, 4) .addMobSpawn(EntityType.PHANTOM, 1, 1, 2)); diff --git a/src/main/java/ru/betterend/world/features/WallPlantFeature.java b/src/main/java/ru/betterend/world/features/WallPlantFeature.java new file mode 100644 index 00000000..1891d1e8 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/WallPlantFeature.java @@ -0,0 +1,32 @@ +package ru.betterend.world.features; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.StructureWorldAccess; +import ru.betterend.blocks.basis.BlockWallPlant; +import ru.betterend.util.BlocksHelper; + +public class WallPlantFeature extends WallScatterFeature { + private final Block block; + + public WallPlantFeature(Block block, int radius) { + super(radius); + this.block = block; + } + + @Override + public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir) { + BlockPos blockPos = pos.offset(dir.getOpposite()); + BlockState blockState = world.getBlockState(blockPos); + return ((BlockWallPlant) block).isSupport(world, blockPos, blockState, dir); + } + + @Override + public void generate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir) { + BlocksHelper.setWithoutUpdate(world, pos, block.getDefaultState().with(BlockWallPlant.FACING, dir)); + } +} diff --git a/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java b/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java new file mode 100644 index 00000000..c00159f2 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java @@ -0,0 +1,23 @@ +package ru.betterend.world.features; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.tag.BlockTags; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; +import net.minecraft.world.StructureWorldAccess; + +public class WallPlantOnLogFeature extends WallPlantFeature { + public WallPlantOnLogFeature(Block block, int radius) { + super(block, radius); + } + + @Override + public boolean canGenerate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir) { + BlockPos blockPos = pos.offset(dir.getOpposite()); + BlockState blockState = world.getBlockState(blockPos); + return blockState.isIn(BlockTags.LOGS); + } +} diff --git a/src/main/java/ru/betterend/world/features/WallScatterFeature.java b/src/main/java/ru/betterend/world/features/WallScatterFeature.java new file mode 100644 index 00000000..381ecde7 --- /dev/null +++ b/src/main/java/ru/betterend/world/features/WallScatterFeature.java @@ -0,0 +1,64 @@ +package ru.betterend.world.features; + +import java.util.Random; + +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.BlockPos.Mutable; +import net.minecraft.util.math.Direction; +import net.minecraft.world.Heightmap; +import net.minecraft.world.StructureWorldAccess; +import net.minecraft.world.gen.chunk.ChunkGenerator; +import net.minecraft.world.gen.feature.DefaultFeatureConfig; +import ru.betterend.util.BlocksHelper; +import ru.betterend.util.MHelper; + +public abstract class WallScatterFeature extends DefaultFeature { + private static final Direction[] DIR = BlocksHelper.makeHorizontal(); + private final int radius; + + public WallScatterFeature(int radius) { + this.radius = radius; + } + + public abstract boolean canGenerate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir); + + public abstract void generate(StructureWorldAccess world, Random random, BlockPos pos, Direction dir); + + @Override + public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos center, DefaultFeatureConfig featureConfig) { + int maxY = world.getTopY(Heightmap.Type.WORLD_SURFACE, center.getX(), center.getZ()); + int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); + int py = MHelper.randRange(minY, maxY, random); + + Mutable mut = new Mutable(); + for (int x = -radius; x <= radius; x++) { + mut.setX(center.getX() + x); + for (int y = -radius; y <= radius; y++) { + mut.setY(py + y); + for (int z = -radius; z <= radius; z++) { + mut.setZ(center.getZ() + z); + if (random.nextInt(8) == 0) { + shuffle(random); + for (Direction dir: DIR) { + if (canGenerate(world, random, mut, dir)) { + generate(world, random, mut, dir); + break; + } + } + } + } + } + } + + return true; + } + + private void shuffle(Random random) { + for (int i = 0; i < 4; i++) { + int j = random.nextInt(4); + Direction d = DIR[i]; + DIR[i] = DIR[j]; + DIR[j] = d; + } + } +} diff --git a/src/main/resources/assets/betterend/blockstates/purple_polypore.json b/src/main/resources/assets/betterend/blockstates/purple_polypore.json new file mode 100644 index 00000000..770ef936 --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/purple_polypore.json @@ -0,0 +1,24 @@ +{ + "variants": { + "facing=north": [ + { "model": "betterend:block/purple_polypore_01", "y": 180 }, + { "model": "betterend:block/purple_polypore_02", "y": 180 }, + { "model": "betterend:block/purple_polypore_03", "y": 180 } + ], + "facing=south": [ + { "model": "betterend:block/purple_polypore_01" }, + { "model": "betterend:block/purple_polypore_02" }, + { "model": "betterend:block/purple_polypore_03" } + ], + "facing=east": [ + { "model": "betterend:block/purple_polypore_01", "y": 270 }, + { "model": "betterend:block/purple_polypore_02", "y": 270 }, + { "model": "betterend:block/purple_polypore_03", "y": 270 } + ], + "facing=west": [ + { "model": "betterend:block/purple_polypore_01", "y": 90 }, + { "model": "betterend:block/purple_polypore_02", "y": 90 }, + { "model": "betterend:block/purple_polypore_03", "y": 90 } + ] + } +} diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 39ac986a..f568d7c1 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -273,5 +273,6 @@ "block.betterend.shadow_berry": "Shadow Berry Seeds", "item.betterend.shadow_berry_cooked": "Shadow Berry Cooked", - "item.betterend.shadow_berry_raw": "Shadow Berry" + "item.betterend.shadow_berry_raw": "Shadow Berry", + "block.betterend.purple_polypore": "Purple Polypore" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 2f450792..66c3a126 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -275,5 +275,6 @@ "block.betterend.shadow_berry": "Семена теневой ягоды", "item.betterend.shadow_berry_cooked": "Приготовленная теневая ягода", - "item.betterend.shadow_berry_raw": "Теневая ягода" + "item.betterend.shadow_berry_raw": "Теневая ягода", + "block.betterend.purple_polypore": "Пурпурный трутовик" } \ No newline at end of file diff --git a/src/main/resources/assets/betterend/materialmaps/block/purple_polypore.json b/src/main/resources/assets/betterend/materialmaps/block/purple_polypore.json new file mode 100644 index 00000000..2163812f --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/block/purple_polypore.json @@ -0,0 +1,3 @@ +{ + "defaultMaterial": "betterend:glow_inc" +} diff --git a/src/main/resources/assets/betterend/models/block/purple_polypore_01.json b/src/main/resources/assets/betterend/models/block/purple_polypore_01.json new file mode 100644 index 00000000..a257f601 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/purple_polypore_01.json @@ -0,0 +1,100 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/purple_polypore", + "texture": "betterend:block/purple_polypore" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 0, 4, 0 ], + "to": [ 8, 7, 6 ], + "shade": false, + "faces": { + "down": { "uv": [ 8, 10, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 6 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 8, 11 ], "texture": "#texture" }, + "west": { "uv": [ 1, 8, 7, 11 ], "texture": "#texture" }, + "east": { "uv": [ 1, 8, 7, 11 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 7, 11, 0 ], + "to": [ 15, 14, 6 ], + "shade": false, + "faces": { + "down": { "uv": [ 8, 10, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 6 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 8, 11 ], "texture": "#texture" }, + "west": { "uv": [ 1, 8, 7, 11 ], "texture": "#texture" }, + "east": { "uv": [ 1, 8, 7, 11 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 9, 1, 0 ], + "to": [ 15, 3, 6 ], + "shade": false, + "faces": { + "down": { "uv": [ 9, 10, 15, 16 ], "texture": "#texture" }, + "up": { "uv": [ 1, 0, 7, 6 ], "texture": "#texture" }, + "south": { "uv": [ 1, 8, 7, 10 ], "texture": "#texture" }, + "west": { "uv": [ 1, 8, 7, 10 ], "texture": "#texture" }, + "east": { "uv": [ 1, 8, 7, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 3, 8, 0 ], + "to": [ 9, 10, 3 ], + "shade": false, + "faces": { + "down": { "uv": [ 10, 5, 16, 8 ], "texture": "#texture" }, + "up": { "uv": [ 1, 0, 7, 3 ], "texture": "#texture" }, + "south": { "uv": [ 1, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 6, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 6, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 11, 6, 0 ], + "to": [ 15, 8, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 1, 13, 0 ], + "to": [ 5, 15, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 2, 1, 0 ], + "to": [ 6, 3, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/purple_polypore_02.json b/src/main/resources/assets/betterend/models/block/purple_polypore_02.json new file mode 100644 index 00000000..51501f73 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/purple_polypore_02.json @@ -0,0 +1,87 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/purple_polypore", + "texture": "betterend:block/purple_polypore" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 2, 4, 0 ], + "to": [ 10, 7, 6 ], + "shade": false, + "faces": { + "down": { "uv": [ 8, 10, 16, 16 ], "texture": "#texture" }, + "up": { "uv": [ 0, 0, 8, 6 ], "texture": "#texture" }, + "south": { "uv": [ 0, 8, 8, 11 ], "texture": "#texture" }, + "west": { "uv": [ 1, 8, 7, 11 ], "texture": "#texture" }, + "east": { "uv": [ 1, 8, 7, 11 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 8, 11, 0 ], + "to": [ 14, 13, 3 ], + "shade": false, + "faces": { + "down": { "uv": [ 10, 5, 16, 8 ], "texture": "#texture" }, + "up": { "uv": [ 1, 0, 7, 3 ], "texture": "#texture" }, + "south": { "uv": [ 1, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 6, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 6, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 1, 9, 0 ], + "to": [ 5, 11, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 3, 13, 0 ], + "to": [ 7, 15, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 10, 1, 0 ], + "to": [ 14, 3, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 11, 7, 0 ], + "to": [ 15, 9, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/purple_polypore_03.json b/src/main/resources/assets/betterend/models/block/purple_polypore_03.json new file mode 100644 index 00000000..015017e8 --- /dev/null +++ b/src/main/resources/assets/betterend/models/block/purple_polypore_03.json @@ -0,0 +1,74 @@ +{ + "__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio", + "textures": { + "particle": "betterend:block/purple_polypore", + "texture": "betterend:block/purple_polypore" + }, + "elements": [ + { + "__comment": "Box1", + "from": [ 2, 4, 0 ], + "to": [ 8, 6, 3 ], + "shade": false, + "faces": { + "down": { "uv": [ 10, 5, 16, 8 ], "texture": "#texture" }, + "up": { "uv": [ 1, 0, 7, 3 ], "texture": "#texture" }, + "south": { "uv": [ 1, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 6, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 6, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 10, 12, 0 ], + "to": [ 14, 14, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 1, 11, 0 ], + "to": [ 5, 13, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 10, 2, 0 ], + "to": [ 14, 4, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + }, + { + "__comment": "Box1", + "from": [ 7, 8, 0 ], + "to": [ 11, 10, 2 ], + "shade": false, + "faces": { + "down": { "uv": [ 11, 6, 15, 8 ], "texture": "#texture" }, + "up": { "uv": [ 2, 0, 6, 2 ], "texture": "#texture" }, + "south": { "uv": [ 2, 8, 6, 10 ], "texture": "#texture" }, + "west": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" }, + "east": { "uv": [ 3, 8, 5, 10 ], "texture": "#texture" } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/item/purple_polypore.json b/src/main/resources/assets/betterend/models/item/purple_polypore.json new file mode 100644 index 00000000..f5f835c4 --- /dev/null +++ b/src/main/resources/assets/betterend/models/item/purple_polypore.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "betterend:item/purple_polypore" + } +} diff --git a/src/main/resources/assets/betterend/textures/block/purple_polypore.png b/src/main/resources/assets/betterend/textures/block/purple_polypore.png new file mode 100644 index 00000000..7608c63d Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/purple_polypore.png differ diff --git a/src/main/resources/assets/betterend/textures/item/purple_polypore.png b/src/main/resources/assets/betterend/textures/item/purple_polypore.png new file mode 100644 index 00000000..6d5d4120 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/item/purple_polypore.png differ