Pottable crops and fixes

This commit is contained in:
paulevsGitch 2021-07-12 09:18:33 +03:00
parent 7ba38c4b27
commit 868e983282
43 changed files with 536 additions and 53 deletions

View file

@ -5,7 +5,6 @@ import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty;
import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties;
import ru.bclib.blocks.properties.StringProperty;
import ru.betterend.registry.EndPortals; import ru.betterend.registry.EndPortals;
public class EndBlockProperties extends BlockProperties { public class EndBlockProperties extends BlockProperties {
@ -14,8 +13,8 @@ public class EndBlockProperties extends BlockProperties {
public static final EnumProperty<CactusBottom> CACTUS_BOTTOM = EnumProperty.create("bottom", CactusBottom.class); public static final EnumProperty<CactusBottom> CACTUS_BOTTOM = EnumProperty.create("bottom", CactusBottom.class);
public static final IntegerProperty PORTAL = IntegerProperty.create("portal", 0, EndPortals.getCount()); public static final IntegerProperty PORTAL = IntegerProperty.create("portal", 0, EndPortals.getCount());
public static final IntegerProperty PLANT_ID = IntegerProperty.create("plant_id", 0, 127); public static final IntegerProperty PLANT_ID = IntegerProperty.create("plant_id", 0, 63);
public static final IntegerProperty SOIL_ID = IntegerProperty.create("soil_id", 0, 10); public static final IntegerProperty SOIL_ID = IntegerProperty.create("soil_id", 0, 15);
public static final BooleanProperty HAS_ITEM = BooleanProperty.create("has_item"); public static final BooleanProperty HAS_ITEM = BooleanProperty.create("has_item");
public enum PedestalState implements StringRepresentable { public enum PedestalState implements StringRepresentable {

View file

@ -56,4 +56,9 @@ public class FlamaeaBlock extends EndPlantBlock implements ISpetialItem {
public boolean canPlaceOnWater() { public boolean canPlaceOnWater() {
return true; return true;
} }
@Override
public boolean addToPot() {
return false;
}
} }

View file

@ -1,8 +1,6 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.mojang.math.Transformation; import com.mojang.math.Transformation;
@ -18,8 +16,6 @@ import net.minecraft.client.resources.model.UnbakedModel;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.PackResources;
import net.minecraft.server.packs.PackType;
import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
@ -30,7 +26,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.LeavesBlock;
import net.minecraft.world.level.block.SaplingBlock; import net.minecraft.world.level.block.SaplingBlock;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
@ -41,35 +36,25 @@ import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BaseBlockNotFull;
import ru.bclib.client.models.BasePatterns; import ru.bclib.client.models.BasePatterns;
import ru.bclib.client.models.BlockModelProvider;
import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.models.ModelsHelper;
import ru.bclib.client.models.ModelsHelper.MultiPartBuilder; import ru.bclib.client.models.ModelsHelper.MultiPartBuilder;
import ru.bclib.client.models.PatternsHelper; import ru.bclib.client.models.PatternsHelper;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.IPostInit; import ru.bclib.interfaces.IPostInit;
import ru.bclib.interfaces.IRenderTyped; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.interfaces.ISpetialItem;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import ru.bclib.util.JsonFactory; import ru.bclib.util.JsonFactory;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.blocks.basis.EndTerrainBlock;
import ru.betterend.blocks.basis.PottableLeavesBlock; import ru.betterend.blocks.basis.PottableLeavesBlock;
import ru.betterend.client.models.Patterns; import ru.betterend.client.models.Patterns;
import ru.betterend.config.Configs; import ru.betterend.config.Configs;
import ru.betterend.interfaces.PottablePlant; import ru.betterend.interfaces.PottablePlant;
import ru.betterend.interfaces.PottableTerrain;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.SplittableRandom;
import java.util.stream.Stream;
public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IPostInit { public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IPostInit {
private static final IntegerProperty PLANT_ID = EndBlockProperties.PLANT_ID; private static final IntegerProperty PLANT_ID = EndBlockProperties.PLANT_ID;
@ -121,10 +106,10 @@ public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IP
} }
EndBlocks.getModBlocks().forEach(block -> { EndBlocks.getModBlocks().forEach(block -> {
if (block instanceof PottablePlant && canBeAdded(block)) { if (block instanceof PottablePlant && ((PottablePlant) block).addToPot()) {//&& canBeAdded(block)) {
processBlock(plants, block, "flower_pots.plants", reservedPlantsIDs); processBlock(plants, block, "flower_pots.plants", reservedPlantsIDs);
} }
else if (block instanceof EndTerrainBlock) { else if (block instanceof PottableTerrain) {
processBlock(soils, block, "flower_pots.soils", reservedSoilIDs); processBlock(soils, block, "flower_pots.soils", reservedSoilIDs);
} }
}); });
@ -154,22 +139,6 @@ public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IP
return max; return max;
} }
private boolean canBeAdded(Block block) {
if (block instanceof SaplingBlock) {
return true;
}
else if (block instanceof PottableLeavesBlock) {
return true;
}
else if (block instanceof ISpetialItem) {
return !((ISpetialItem) block).canPlaceOnWater();
}
else if (block.getStateDefinition().getProperties().isEmpty()) {
return true;
}
return false;
}
private void processBlock(Block[] target, Block block, String path, Map<String, Integer> idMap) { private void processBlock(Block[] target, Block block, String path, Map<String, Integer> idMap) {
ResourceLocation location = Registry.BLOCK.getKey(block); ResourceLocation location = Registry.BLOCK.getKey(block);
if (idMap.containsKey(location.getPath())) { if (idMap.containsKey(location.getPath())) {
@ -194,7 +163,7 @@ public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IP
} }
ItemStack itemStack = player.getItemInHand(hand); ItemStack itemStack = player.getItemInHand(hand);
int soilID = state.getValue(SOIL_ID); int soilID = state.getValue(SOIL_ID);
if (soilID == 0 || soils[soilID - 1] == null) { if (soilID == 0 || soilID > soils.length || soils[soilID - 1] == null) {
if (!(itemStack.getItem() instanceof BlockItem)) { if (!(itemStack.getItem() instanceof BlockItem)) {
return InteractionResult.PASS; return InteractionResult.PASS;
} }
@ -210,12 +179,12 @@ public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IP
int plantID = state.getValue(PLANT_ID); int plantID = state.getValue(PLANT_ID);
if (itemStack.isEmpty()) { if (itemStack.isEmpty()) {
if (plantID > 0 && plantID <= plants.length) { if (plantID > 0 && plantID <= plants.length && plants[plantID - 1] != null) {
BlocksHelper.setWithUpdate(level, pos, state.setValue(PLANT_ID, 0)); BlocksHelper.setWithUpdate(level, pos, state.setValue(PLANT_ID, 0));
player.addItem(new ItemStack(plants[plantID - 1])); player.addItem(new ItemStack(plants[plantID - 1]));
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} }
if (soilID > 0 && soilID <= soils.length) { if (soilID > 0 && soilID <= soils.length && soils[soilID - 1] != null) {
BlocksHelper.setWithUpdate(level, pos, state.setValue(SOIL_ID, 0)); BlocksHelper.setWithUpdate(level, pos, state.setValue(SOIL_ID, 0));
player.addItem(new ItemStack(soils[soilID - 1])); player.addItem(new ItemStack(soils[soilID - 1]));
} }
@ -295,14 +264,38 @@ public class FlowerPotBlock extends BaseBlockNotFull implements IRenderTyped, IP
objSource = new ResourceLocation(modelPath.getNamespace(), "blockstates/" + modelPath.getPath() + ".json"); objSource = new ResourceLocation(modelPath.getNamespace(), "blockstates/" + modelPath.getPath() + ".json");
JsonObject obj = JsonFactory.getJsonObject(objSource); JsonObject obj = JsonFactory.getJsonObject(objSource);
if (obj != null) { if (obj != null) {
JsonElement variants = obj.get("variants").getAsJsonObject().get(""); JsonElement variants = obj.get("variants");
JsonElement list = null;
String path = null; String path = null;
if (variants == null) {
continue;
}
if (variants.isJsonArray()) { if (variants.isJsonArray()) {
path = variants.getAsJsonArray().get(0).getAsJsonObject().get("model").getAsString(); list = variants.getAsJsonArray().get(0);
}
else if (variants.isJsonObject()) {
list = variants.getAsJsonObject().get(((PottablePlant) plants[i]).getPottedState());
}
if (list == null) {
BetterEnd.LOGGER.warning("Incorrect json for pot plant " + objSource + ", no matching variants");
continue;
}
if (list.isJsonArray()) {
path = list.getAsJsonArray().get(0).getAsJsonObject().get("model").getAsString();
} }
else { else {
path = variants.getAsJsonObject().get("model").getAsString(); path = list.getAsJsonObject().get("model").getAsString();
} }
if (path == null) {
BetterEnd.LOGGER.warning("Incorrect json for pot plant " + objSource + ", no matching variants");
continue;
}
model.part(new ResourceLocation(path)).setTransformation(offset).setCondition(state -> state.getValue(PLANT_ID) == compareID).add(); model.part(new ResourceLocation(path)).setTransformation(offset).setCondition(state -> state.getValue(PLANT_ID) == compareID).add();
} }
else { else {

View file

@ -2,6 +2,8 @@ package ru.betterend.blocks;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
@ -401,4 +403,10 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate
public boolean canPlantOn(Block block) { public boolean canPlantOn(Block block) {
return true; return true;
} }
@Override
@Environment(EnvType.CLIENT)
public String getPottedState() {
return "bottom=moss,shape=top,facing=up";
}
} }

View file

@ -6,11 +6,11 @@ import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.bclib.blocks.BaseCropBlock; import ru.betterend.blocks.basis.PottableCropBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
public class ShadowBerryBlock extends BaseCropBlock { public class ShadowBerryBlock extends PottableCropBlock {
private static final VoxelShape SHAPE = Block.box(1, 0, 1, 15, 8, 15); private static final VoxelShape SHAPE = Block.box(1, 0, 1, 15, 8, 15);
public ShadowBerryBlock() { public ShadowBerryBlock() {

View file

@ -2,6 +2,8 @@ package ru.betterend.blocks;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -103,4 +105,10 @@ public class SmallJellyshroomBlock extends BaseAttachedBlock implements IRenderT
public boolean canPlantOn(Block block) { public boolean canPlantOn(Block block) {
return true; return true;
} }
@Override
@Environment(EnvType.CLIENT)
public String getPottedState() {
return "facing=up";
}
} }

View file

@ -36,4 +36,9 @@ public class EndPlantBlock extends BasePlantBlock implements PottablePlant {
public boolean canPlantOn(Block block) { public boolean canPlantOn(Block block) {
return isTerrain(block.defaultBlockState()); return isTerrain(block.defaultBlockState());
} }
@Override
public boolean addToPot() {
return getStateDefinition().getProperties().isEmpty();
}
} }

View file

@ -3,8 +3,9 @@ package ru.betterend.blocks.basis;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import ru.bclib.blocks.BaseTerrainBlock; import ru.bclib.blocks.BaseTerrainBlock;
import ru.betterend.interfaces.PottableTerrain;
public class EndTerrainBlock extends BaseTerrainBlock { public class EndTerrainBlock extends BaseTerrainBlock implements PottableTerrain {
public EndTerrainBlock(MaterialColor color) { public EndTerrainBlock(MaterialColor color) {
super(Blocks.END_STONE, color); super(Blocks.END_STONE, color);
} }

View file

@ -3,9 +3,9 @@ package ru.betterend.blocks.basis;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import ru.bclib.blocks.TripleTerrainBlock; import ru.bclib.blocks.TripleTerrainBlock;
import ru.betterend.interfaces.PottableTerrain;
public class EndTripleTerrain extends TripleTerrainBlock { public class EndTripleTerrain extends TripleTerrainBlock implements PottableTerrain {
public EndTripleTerrain(MaterialColor color) { public EndTripleTerrain(MaterialColor color) {
super(Blocks.END_STONE, color); super(Blocks.END_STONE, color);
} }

View file

@ -0,0 +1,30 @@
package ru.betterend.blocks.basis;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import ru.bclib.blocks.BaseCropBlock;
import ru.betterend.interfaces.PottablePlant;
public class PottableCropBlock extends BaseCropBlock implements PottablePlant {
private final Block[] terrain;
public PottableCropBlock(Item drop, Block... terrain) {
super(drop, terrain);
this.terrain = terrain;
}
@Override
public boolean canPlantOn(Block block) {
for (Block ter: terrain) {
if (block == ter) {
return true;
}
}
return false;
}
@Override
public String getPottedState() {
return "age=3";
}
}

View file

@ -1,7 +1,18 @@
package ru.betterend.interfaces; package ru.betterend.interfaces;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
public interface PottablePlant { public interface PottablePlant {
boolean canPlantOn(Block block); boolean canPlantOn(Block block);
default boolean addToPot() {
return true;
}
@Environment(EnvType.CLIENT)
default String getPottedState() {
return "";
}
} }

View file

@ -0,0 +1,3 @@
package ru.betterend.interfaces;
public interface PottableTerrain {}

View file

@ -10,7 +10,6 @@ import net.minecraft.world.level.material.MaterialColor;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import ru.bclib.blocks.BaseBarrelBlock; import ru.bclib.blocks.BaseBarrelBlock;
import ru.bclib.blocks.BaseChestBlock; import ru.bclib.blocks.BaseChestBlock;
import ru.bclib.blocks.BaseCropBlock;
import ru.bclib.blocks.BaseFurnaceBlock; import ru.bclib.blocks.BaseFurnaceBlock;
import ru.bclib.blocks.BaseOreBlock; import ru.bclib.blocks.BaseOreBlock;
import ru.bclib.blocks.BasePathBlock; import ru.bclib.blocks.BasePathBlock;
@ -132,6 +131,7 @@ import ru.betterend.blocks.basis.EndUnderwaterWallPlantBlock;
import ru.betterend.blocks.basis.EndWallMushroom; import ru.betterend.blocks.basis.EndWallMushroom;
import ru.betterend.blocks.basis.EndWallPlantBlock; import ru.betterend.blocks.basis.EndWallPlantBlock;
import ru.betterend.blocks.basis.FurBlock; import ru.betterend.blocks.basis.FurBlock;
import ru.betterend.blocks.basis.PottableCropBlock;
import ru.betterend.blocks.basis.PottableLeavesBlock; import ru.betterend.blocks.basis.PottableLeavesBlock;
import ru.betterend.blocks.basis.StoneLanternBlock; import ru.betterend.blocks.basis.StoneLanternBlock;
import ru.betterend.blocks.complex.ColoredMaterial; import ru.betterend.blocks.complex.ColoredMaterial;
@ -321,10 +321,10 @@ public class EndBlocks extends BlocksRegistry {
// Crops // Crops
public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new ShadowBerryBlock()); public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new ShadowBerryBlock());
public static final Block BLOSSOM_BERRY = registerBlock("blossom_berry_seed", new BaseCropBlock(EndItems.BLOSSOM_BERRY, PINK_MOSS)); public static final Block BLOSSOM_BERRY = registerBlock("blossom_berry_seed", new PottableCropBlock(EndItems.BLOSSOM_BERRY, PINK_MOSS));
public static final Block AMBER_ROOT = registerBlock("amber_root_seed", new BaseCropBlock(EndItems.AMBER_ROOT_RAW, AMBER_MOSS)); public static final Block AMBER_ROOT = registerBlock("amber_root_seed", new PottableCropBlock(EndItems.AMBER_ROOT_RAW, AMBER_MOSS));
public static final Block CHORUS_MUSHROOM = registerBlock("chorus_mushroom_seed", new BaseCropBlock(EndItems.CHORUS_MUSHROOM_RAW, CHORUS_NYLIUM)); public static final Block CHORUS_MUSHROOM = registerBlock("chorus_mushroom_seed", new PottableCropBlock(EndItems.CHORUS_MUSHROOM_RAW, CHORUS_NYLIUM));
//public static final Block PEARLBERRY = registerBlock("pearlberry_seed", new EndCropBlock(EndItems.BLOSSOM_BERRY, END_MOSS, END_MYCELIUM)); //public static final Block PEARLBERRY = registerBlock("pearlberry_seed", new PottableCropBlock(EndItems.BLOSSOM_BERRY, END_MOSS, END_MYCELIUM));
public static final Block CAVE_PUMPKIN_SEED = registerBlock("cave_pumpkin_seed", new CavePumpkinVineBlock()); public static final Block CAVE_PUMPKIN_SEED = registerBlock("cave_pumpkin_seed", new CavePumpkinVineBlock());
public static final Block CAVE_PUMPKIN = registerBlock("cave_pumpkin", new CavePumpkinBlock()); public static final Block CAVE_PUMPKIN = registerBlock("cave_pumpkin", new CavePumpkinBlock());

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/amber_grass_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/amber_root_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/blooming_cooksonia_potted"
}
}

View file

@ -0,0 +1,45 @@
{
"__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio",
"textures": {
"particle": "betterend:block/bolux_mushroom",
"texture": "betterend:block/bolux_mushroom"
},
"elements": [
{
"__comment": "Box1",
"from": [ 4, 3, 4 ],
"to": [ 12, 7, 12 ],
"faces": {
"down": { "uv": [ 0, 8, 8, 16 ], "texture": "#texture" },
"up": { "uv": [ 8, 0, 16, 8 ], "texture": "#texture" },
"north": { "uv": [ 8, 12, 16, 16 ], "texture": "#texture" },
"south": { "uv": [ 8, 12, 16, 16 ], "texture": "#texture" },
"west": { "uv": [ 8, 12, 16, 16 ], "texture": "#texture" },
"east": { "uv": [ 8, 12, 16, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 5, 7, 5 ],
"to": [ 11, 8, 11 ],
"faces": {
"up": { "uv": [ 9, 1, 15, 7 ], "texture": "#texture" },
"north": { "uv": [ 9, 11, 15, 12 ], "texture": "#texture" },
"south": { "uv": [ 9, 11, 15, 12 ], "texture": "#texture" },
"west": { "uv": [ 9, 11, 15, 12 ], "texture": "#texture" },
"east": { "uv": [ 9, 11, 15, 12 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 7, 0, 7 ],
"to": [ 9, 3, 9 ],
"faces": {
"north": { "uv": [ 0, 0, 2, 3 ], "texture": "#texture" },
"south": { "uv": [ 0, 0, 2, 3 ], "texture": "#texture" },
"west": { "uv": [ 2, 0, 0, 3 ], "texture": "#texture" },
"east": { "uv": [ 2, 0, 0, 3 ], "texture": "#texture" }
}
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/bushy_grass_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/chorus_mushroom_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/clawfern_potted"
}
}

View file

@ -0,0 +1,95 @@
{
"__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio",
"textures": {
"particle": "betterend:block/crystal_grass_2",
"texture": "betterend:block/crystal_grass_2"
},
"elements": [
{
"__comment": "PlaneX1",
"from": [ 5, 0, 4.5 ],
"to": [ 5.001, 9, 9.5 ],
"rotation": { "origin": [ 5, 0, 4.5 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" },
"east": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX1",
"from": [ 8.5, 0, 4.5 ],
"to": [ 8.501, 9, 9.5 ],
"rotation": { "origin": [ 8.5, 0, 4.5 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" },
"east": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneY4",
"from": [ 4, 8.5, 4 ],
"to": [ 9, 8.501, 9 ],
"shade": false,
"faces": {
"down": { "uv": [ 0, 0, 5, 5 ], "texture": "#texture" },
"up": { "uv": [ 0, 0, 5, 5 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX1",
"from": [ 8.5, -3, 7 ],
"to": [ 8.501, 6, 12 ],
"rotation": { "origin": [ 8.5, -3, 7 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" },
"east": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX1",
"from": [ 12, -3, 7 ],
"to": [ 12.001, 6, 12 ],
"rotation": { "origin": [ 12, -3, 7 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" },
"east": { "uv": [ 6, 7, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneY4",
"from": [ 8, 5.5, 6 ],
"to": [ 13, 5.501, 11 ],
"shade": false,
"faces": {
"down": { "uv": [ 0, 0, 5, 5 ], "texture": "#texture" },
"up": { "uv": [ 0, 0, 5, 5 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX1",
"from": [ 5, -3, 9 ],
"to": [ 5.001, 5, 14 ],
"rotation": { "origin": [ 5, -3, 9 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 6, 8, 11, 16 ], "texture": "#texture" },
"east": { "uv": [ 6, 8, 11, 16 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX1",
"from": [ 8, -3, 9.5 ],
"to": [ 8.001, 5, 14.5 ],
"rotation": { "origin": [ 8, -3, 9.5 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 6, 8, 11, 16 ], "texture": "#texture" },
"east": { "uv": [ 6, 8, 11, 16 ], "texture": "#texture" }
}
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/fracturn_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/globulagus_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/jungle_grass_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/lamellarium_potted"
}
}

View file

@ -0,0 +1,163 @@
{
"__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio",
"parent": "block/block",
"textures": {
"particle": "betterend:block/murkweed",
"texture": "betterend:block/murkweed"
},
"elements": [
{
"__comment": "Box1",
"from": [ 5, 11, 3 ],
"to": [ 9, 15, 7 ],
"faces": {
"down": { "uv": [ 4, 12, 8, 16 ], "texture": "#texture" },
"up": { "uv": [ 0, 8, 4, 12 ], "texture": "#texture" },
"north": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"south": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"west": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"east": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 6, 15, 4 ],
"to": [ 8, 15.5, 6 ],
"faces": {
"north": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" },
"south": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" },
"west": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" },
"east": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 5.5, 15.5, 3.5 ],
"to": [ 8.5, 16, 6.5 ],
"faces": {
"down": { "uv": [ 0, 4, 3, 7 ], "texture": "#texture" },
"up": { "uv": [ 0, 4, 3, 7 ], "texture": "#texture" },
"north": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" },
"south": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" },
"west": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" },
"east": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX4",
"from": [ 5, 0, 2.5 ],
"to": [ 5.001, 11, 8.5 ],
"rotation": { "origin": [ 5, 0, 2.5 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 10, 0, 16, 16 ], "texture": "#texture" },
"east": { "uv": [ 10, 0, 16, 16 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX4",
"from": [ 9, 0, 2.5 ],
"to": [ 9.000999, 11, 8.5 ],
"rotation": { "origin": [ 9, 0, 2.5 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 10, 0, 16, 12 ], "texture": "#texture" },
"east": { "uv": [ 10, 0, 16, 12 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX4",
"from": [ 9, 0, 6.5 ],
"to": [ 9.000999, 9, 12.5 ],
"rotation": { "origin": [ 9, 0, 6.5 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 10, 4, 16, 13 ], "texture": "#texture" },
"east": { "uv": [ 10, 4, 16, 13 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX4",
"from": [ 13, 0, 6.5 ],
"to": [ 13.001, 9, 12.5 ],
"rotation": { "origin": [ 13, 0, 6.5 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 10, 4, 16, 13 ], "texture": "#texture" },
"east": { "uv": [ 10, 4, 16, 13 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX4",
"from": [ 4.5, 0, 7.5 ],
"to": [ 4.501, 5, 13.5 ],
"rotation": { "origin": [ 4.5, 0, 7.5 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 10, 8, 16, 13 ], "texture": "#texture" },
"east": { "uv": [ 10, 8, 16, 13 ], "texture": "#texture" }
}
},
{
"__comment": "PlaneX4",
"from": [ 8.5, 0, 7.5 ],
"to": [ 8.500999, 5, 13.5 ],
"rotation": { "origin": [ 8.5, 0, 7.5 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 10, 8, 16, 13 ], "texture": "#texture" },
"east": { "uv": [ 10, 8, 16, 13 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 9, 9, 7 ],
"to": [ 13, 13, 11 ],
"faces": {
"down": { "uv": [ 4, 12, 8, 16 ], "texture": "#texture" },
"up": { "uv": [ 0, 8, 4, 12 ], "texture": "#texture" },
"north": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"south": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"west": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"east": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 10, 13, 9 ],
"to": [ 12, 13.5, 11 ],
"faces": {
"north": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" },
"south": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" },
"west": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" },
"east": { "uv": [ 1, 7.5, 3, 8 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 9.5, 13.5, 7.5 ],
"to": [ 12.5, 14, 10.5 ],
"faces": {
"down": { "uv": [ 0, 4, 3, 7 ], "texture": "#texture" },
"up": { "uv": [ 0, 4, 3, 7 ], "texture": "#texture" },
"north": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" },
"south": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" },
"west": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" },
"east": { "uv": [ 0, 6.5, 3, 7 ], "texture": "#texture" }
}
},
{
"__comment": "Box1",
"from": [ 5, 5, 8 ],
"to": [ 8, 9, 11 ],
"faces": {
"down": { "uv": [ 4, 12, 7, 15 ], "texture": "#texture" },
"up": { "uv": [ 0, 8, 3, 11 ], "texture": "#texture" },
"north": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"south": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"west": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" },
"east": { "uv": [ 0, 12, 4, 16 ], "texture": "#texture" }
}
}
]
}

View file

@ -0,0 +1,45 @@
{
"__comment": "Designed by Paulevs with Cubik Studio - https://cubik.studio",
"textures": {
"particle": "betterend:block/neon_cactus_small_side",
"side": "betterend:block/neon_cactus_small_side_moss",
"top": "betterend:block/neon_cactus_small_top"
},
"elements": [
{
"__comment": "Box1",
"from": [ 6, 0, 6 ],
"to": [ 10, 8, 10 ],
"shade": false,
"faces": {
"up": { "uv": [ 6, 6, 10, 10 ], "texture": "#top" },
"north": { "uv": [ 7, 6, 11, 14 ], "texture": "#side" },
"south": { "uv": [ 7, 6, 11, 14 ], "texture": "#side" },
"west": { "uv": [ 5, 6, 9, 14 ], "texture": "#side" },
"east": { "uv": [ 5, 6, 9, 14 ], "texture": "#side" }
}
},
{
"__comment": "PlaneX2",
"from": [ 4, 0, 4 ],
"to": [ 4.001, 8, 15.5 ],
"rotation": { "origin": [ 4, 0, 4 ], "axis": "y", "angle": 45 },
"shade": false,
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" },
"east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }
}
},
{
"__comment": "PlaneX2",
"from": [ 12, 0, 4 ],
"to": [ 12.001, 8, 15.5 ],
"rotation": { "origin": [ 12, 0, 4 ], "axis": "y", "angle": -45 },
"shade": false,
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" },
"east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side" }
}
}
]
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/shadow_plant_potted"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cross",
"textures": {
"cross": "betterend:block/vaiolush_fern_potted"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B