Merge branch 'master' of https://github.com/paulevsGitch/BetterEnd
This commit is contained in:
commit
1e4b7377f2
32 changed files with 319 additions and 290 deletions
|
@ -4,7 +4,6 @@ import net.minecraft.block.BlockState;
|
|||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import ru.betterend.rituals.InfusionRitual;
|
||||
|
||||
public class InfusionPedestalEntity extends PedestalBlockEntity {
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Random;
|
|||
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.ItemEntity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.SpawnReason;
|
||||
import net.minecraft.entity.attribute.DefaultAttributeContainer;
|
||||
|
@ -15,7 +16,6 @@ import net.minecraft.entity.data.TrackedData;
|
|||
import net.minecraft.entity.data.TrackedDataHandlerRegistry;
|
||||
import net.minecraft.entity.passive.SchoolingFishEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.Items;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.particle.ParticleTypes;
|
||||
import net.minecraft.sound.SoundEvent;
|
||||
|
@ -24,6 +24,7 @@ import net.minecraft.util.math.BlockPos;
|
|||
import net.minecraft.util.math.Box;
|
||||
import net.minecraft.world.ServerWorldAccess;
|
||||
import net.minecraft.world.World;
|
||||
import ru.betterend.registry.EndItems;
|
||||
|
||||
public class EntityEndFish extends SchoolingFishEntity {
|
||||
public static final int VARIANTS = 5;
|
||||
|
@ -61,7 +62,7 @@ public class EntityEndFish extends SchoolingFishEntity {
|
|||
|
||||
@Override
|
||||
protected ItemStack getFishBucketItem() {
|
||||
return new ItemStack(Items.WATER_BUCKET);
|
||||
return new ItemStack(EndItems.BUCKET_END_FISH);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -115,4 +116,10 @@ public class EntityEndFish extends SchoolingFishEntity {
|
|||
List<EntityEndFish> list = world.getEntitiesByClass(EntityEndFish.class, box, (entity) -> { return true; });
|
||||
return list.size() < 9;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dropLoot(DamageSource source, boolean causedByPlayer) {
|
||||
ItemEntity drop = new ItemEntity(world, getX(), getY(), getZ(), new ItemStack(EndItems.END_FISH_RAW));
|
||||
this.world.spawnEntity(drop);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ import org.spongepowered.asm.mixin.Shadow;
|
|||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.recipe.Ingredient;
|
||||
|
||||
import ru.betterend.interfaces.CompoundSerializer;
|
||||
|
||||
@Mixin(Ingredient.class)
|
||||
|
|
|
@ -9,6 +9,7 @@ public class FurnaceRecipes {
|
|||
public static void register() {
|
||||
FurnaceRecipe.make("end_lily_leaf_dried", EndItems.END_LILY_LEAF, EndItems.END_LILY_LEAF_DRIED).build();
|
||||
FurnaceRecipe.make("end_glass", EndBlocks.ENDSTONE_DUST, Blocks.GLASS).build();
|
||||
FurnaceRecipe.make("end_glass", EndItems.SHADOW_BERRY_RAW, EndItems.SHADOW_BERRY_COOKED).build();
|
||||
FurnaceRecipe.make("end_berry", EndItems.SHADOW_BERRY_RAW, EndItems.SHADOW_BERRY_COOKED).build();
|
||||
FurnaceRecipe.make("end_fish", EndItems.END_FISH_RAW, EndItems.END_FISH_COOKED).build();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ import net.minecraft.util.Identifier;
|
|||
import net.minecraft.util.JsonHelper;
|
||||
import net.minecraft.util.registry.Registry;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.interfaces.CompoundSerializer;
|
||||
import ru.betterend.recipe.EndRecipeManager;
|
||||
|
|
|
@ -139,7 +139,7 @@ public class EndBlocks {
|
|||
// Wall Plants //
|
||||
public static final Block PURPLE_POLYPORE = registerBlock("purple_polypore", new BlockWallMushroom(13));
|
||||
public static final Block TAIL_MOSS = registerBlock("tail_moss", new BlockWallPlant());
|
||||
public static final Block CYAN_MOSS = registerBlock("cyan_moss", new BlockWallPlant(13));
|
||||
public static final Block CYAN_MOSS = registerBlock("cyan_moss", new BlockWallPlant());
|
||||
|
||||
// Crops //
|
||||
public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new BlockShadowBerry());
|
||||
|
|
|
@ -22,8 +22,7 @@ import ru.betterend.world.features.UnderwaterPlantFeature;
|
|||
import ru.betterend.world.features.VineFeature;
|
||||
import ru.betterend.world.features.WallPlantFeature;
|
||||
import ru.betterend.world.features.WallPlantOnLogFeature;
|
||||
import ru.betterend.world.features.bushes.DragonTreeBushFeature;
|
||||
import ru.betterend.world.features.bushes.PythadendronBushFeature;
|
||||
import ru.betterend.world.features.bushes.BushFeature;
|
||||
import ru.betterend.world.features.terrain.EndLakeFeature;
|
||||
import ru.betterend.world.features.terrain.RoundCaveFeature;
|
||||
import ru.betterend.world.features.trees.DragonTreeFeature;
|
||||
|
@ -39,8 +38,8 @@ public class EndFeatures {
|
|||
public static final EndFeature DRAGON_TREE = new EndFeature("dragon_tree", new DragonTreeFeature(), 3);
|
||||
|
||||
// Bushes //
|
||||
public static final EndFeature PYTHADENDRON_BUSH = new EndFeature("pythadendron_bush", new PythadendronBushFeature(), 4);
|
||||
public static final EndFeature DRAGON_TREE_BUSH = new EndFeature("dragon_tree_bush", new DragonTreeBushFeature(), 15);
|
||||
public static final EndFeature PYTHADENDRON_BUSH = new EndFeature("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.bark), 4);
|
||||
public static final EndFeature DRAGON_TREE_BUSH = new EndFeature("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.bark), 15);
|
||||
|
||||
// Plants //
|
||||
public static final EndFeature UMBRELLA_MOSS = new EndFeature("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 5);
|
||||
|
|
|
@ -10,9 +10,12 @@ import net.minecraft.block.dispenser.ItemDispenserBehavior;
|
|||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.EquipmentSlot;
|
||||
import net.minecraft.entity.SpawnReason;
|
||||
import net.minecraft.fluid.Fluids;
|
||||
import net.minecraft.item.ArmorItem;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.FishBucketItem;
|
||||
import net.minecraft.item.FoodComponent;
|
||||
import net.minecraft.item.FoodComponents;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.Item.Settings;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
@ -43,12 +46,12 @@ public class EndItems {
|
|||
private static final List<Item> MOD_ITEMS = Lists.newArrayList();
|
||||
|
||||
// Materials //
|
||||
public final static Item ENDER_DUST = registerItem("ender_dust", new Item(makeSettings()));
|
||||
public final static Item TERMINITE_INGOT = registerItem("terminite_ingot", new Item(makeSettings()));
|
||||
public final static Item AETERNIUM_INGOT = registerItem("aeternium_ingot", new Item(makeSettings()));
|
||||
public final static Item END_LILY_LEAF = registerItem("end_lily_leaf", new Item(makeSettings()));
|
||||
public final static Item END_LILY_LEAF_DRIED = registerItem("end_lily_leaf_dried", new Item(makeSettings()));
|
||||
public final static Item CRYSTAL_SHARDS = registerItem("crystal_shards", new Item(makeSettings()));
|
||||
public final static Item ENDER_DUST = registerItem("ender_dust");
|
||||
public final static Item TERMINITE_INGOT = registerItem("terminite_ingot");
|
||||
public final static Item AETERNIUM_INGOT = registerItem("aeternium_ingot");
|
||||
public final static Item END_LILY_LEAF = registerItem("end_lily_leaf");
|
||||
public final static Item END_LILY_LEAF_DRIED = registerItem("end_lily_leaf_dried");
|
||||
public final static Item CRYSTAL_SHARDS = registerItem("crystal_shards");
|
||||
|
||||
// Armor //
|
||||
public static final Item TERMINITE_HELMET = registerItem("terminite_helmet", new ArmorItem(EndArmorMaterial.TERMINITE, EquipmentSlot.HEAD, makeSettings()));
|
||||
|
@ -81,10 +84,17 @@ public class EndItems {
|
|||
// Food //
|
||||
public final static Item SHADOW_BERRY_RAW = registerFood("shadow_berry_raw", 4, 0.5F);
|
||||
public final static Item SHADOW_BERRY_COOKED = registerFood("shadow_berry_cooked", 6, 0.7F);
|
||||
public final static Item END_FISH_RAW = registerFood("end_fish_raw", FoodComponents.SALMON);
|
||||
public final static Item END_FISH_COOKED = registerFood("end_fish_cooked", FoodComponents.COOKED_SALMON);
|
||||
public final static Item BUCKET_END_FISH = registerItem("bucket_end_fish", new FishBucketItem(EndEntities.END_FISH, Fluids.WATER, makeSettings()));
|
||||
|
||||
// Other //
|
||||
public static final Item ETERNAL_CRYSTAL = registerItem("eternal_crystal", new EternalCrystal());
|
||||
|
||||
protected static Item registerItem(String name) {
|
||||
return registerItem(BetterEnd.makeID(name), new Item(makeSettings()));
|
||||
}
|
||||
|
||||
protected static Item registerItem(String name, Item item) {
|
||||
return registerItem(BetterEnd.makeID(name), item);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,6 @@ import net.minecraft.nbt.CompoundTag;
|
|||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import ru.betterend.blocks.entities.InfusionPedestalEntity;
|
||||
import ru.betterend.blocks.entities.PedestalBlockEntity;
|
||||
import ru.betterend.recipe.builders.InfusionRecipe;
|
||||
|
|
|
@ -24,6 +24,7 @@ import net.minecraft.world.WorldAccess;
|
|||
import ru.betterend.blocks.BlockBlueVine;
|
||||
import ru.betterend.blocks.basis.BlockDoublePlant;
|
||||
import ru.betterend.blocks.basis.BlockGlowingFur;
|
||||
import ru.betterend.blocks.basis.BlockVine;
|
||||
import ru.betterend.registry.EndBlocks;
|
||||
import ru.betterend.registry.EndTags;
|
||||
|
||||
|
@ -147,117 +148,127 @@ public class BlocksHelper {
|
|||
doubleCheck.add(POS.toImmutable());
|
||||
}
|
||||
|
||||
// Chorus
|
||||
if (state.isOf(Blocks.CHORUS_PLANT)) {
|
||||
Set<BlockPos> ends = Sets.newHashSet();
|
||||
Set<BlockPos> add = Sets.newHashSet();
|
||||
ends.add(POS.toImmutable());
|
||||
if (!state.canPlaceAt(world, POS)) {
|
||||
|
||||
for (int i = 0; i < 64 && !ends.isEmpty(); i++) {
|
||||
ends.forEach((pos) -> {
|
||||
setWithoutUpdate(world, pos, AIR);
|
||||
for (Direction dir: HORIZONTAL) {
|
||||
BlockPos p = pos.offset(dir);
|
||||
// Chorus
|
||||
if (state.isOf(Blocks.CHORUS_PLANT)) {
|
||||
Set<BlockPos> ends = Sets.newHashSet();
|
||||
Set<BlockPos> add = Sets.newHashSet();
|
||||
ends.add(POS.toImmutable());
|
||||
|
||||
for (int i = 0; i < 64 && !ends.isEmpty(); i++) {
|
||||
ends.forEach((pos) -> {
|
||||
setWithoutUpdate(world, pos, AIR);
|
||||
for (Direction dir : HORIZONTAL) {
|
||||
BlockPos p = pos.offset(dir);
|
||||
BlockState st = world.getBlockState(p);
|
||||
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
||||
add.add(p);
|
||||
}
|
||||
}
|
||||
BlockPos p = pos.up();
|
||||
BlockState st = world.getBlockState(p);
|
||||
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
||||
add.add(p);
|
||||
}
|
||||
}
|
||||
BlockPos p = pos.up();
|
||||
BlockState st = world.getBlockState(p);
|
||||
if ((st.isOf(Blocks.CHORUS_PLANT) || st.isOf(Blocks.CHORUS_FLOWER)) && !st.canPlaceAt(world, p)) {
|
||||
add.add(p);
|
||||
}
|
||||
});
|
||||
ends.clear();
|
||||
ends.addAll(add);
|
||||
add.clear();
|
||||
});
|
||||
ends.clear();
|
||||
ends.addAll(add);
|
||||
add.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Liquids
|
||||
else if (!state.getFluidState().isEmpty()) {
|
||||
POS.setY(y - 1);
|
||||
if (world.isAir(POS)) {
|
||||
POS.setY(y);
|
||||
while (!world.getFluidState(POS).isEmpty()) {
|
||||
// Vines
|
||||
else if (state.getBlock() instanceof BlockVine) {
|
||||
while (world.getBlockState(POS).getBlock() instanceof BlockVine) {
|
||||
setWithoutUpdate(world, POS, AIR);
|
||||
POS.setY(POS.getY() + 1);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
BlockState st;
|
||||
for (Direction dir: HORIZONTAL) {
|
||||
if ((st = world.getBlockState(POS.offset(dir))).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
||||
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((st = world.getBlockState(POS.up())).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
||||
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
||||
}
|
||||
}
|
||||
// Falling blocks
|
||||
else if (state.getBlock() instanceof FallingBlock) {
|
||||
BlockState falling = state;
|
||||
|
||||
POS.setY(POS.getY() - 1);
|
||||
state = world.getBlockState(POS);
|
||||
|
||||
int ray = downRayRep(world, POS.toImmutable(), 64);
|
||||
if (ray > 32) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
||||
if (world.getRandom().nextBoolean()) {
|
||||
POS.setY(POS.getY() - 1);
|
||||
state = world.getBlockState(POS);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
||||
}
|
||||
}
|
||||
else {
|
||||
POS.setY(y);
|
||||
boolean place = true;
|
||||
for (Direction dir: HORIZONTAL) {
|
||||
state = world.getBlockState(POS.offset(dir));
|
||||
if (!state.getFluidState().isEmpty()) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, state);
|
||||
place = false;
|
||||
// Liquids
|
||||
else if (!state.getFluidState().isEmpty()) {
|
||||
POS.setY(y - 1);
|
||||
if (world.isAir(POS)) {
|
||||
POS.setY(y);
|
||||
while (!world.getFluidState(POS).isEmpty()) {
|
||||
setWithoutUpdate(world, POS, AIR);
|
||||
POS.setY(POS.getY() + 1);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
BlockState st;
|
||||
for (Direction dir : HORIZONTAL) {
|
||||
if ((st = world.getBlockState(POS.offset(dir))).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
||||
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (place) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
if ((st = world.getBlockState(POS.up())).getMaterial().isReplaceable() && st.getFluidState().isEmpty()) {
|
||||
world.getFluidTickScheduler().schedule(POS, state.getFluidState().getFluid(), 0);
|
||||
}
|
||||
}
|
||||
// Falling blocks
|
||||
else if (state.getBlock() instanceof FallingBlock) {
|
||||
BlockState falling = state;
|
||||
|
||||
POS.setY(y - ray);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, falling);
|
||||
}
|
||||
}
|
||||
// Blocks without support
|
||||
else if (!state.canPlaceAt(world, POS)) {
|
||||
// Blue Vine
|
||||
if (state.getBlock() instanceof BlockBlueVine) {
|
||||
while (state.isOf(EndBlocks.BLUE_VINE) || state.isOf(EndBlocks.BLUE_VINE_LANTERN) || state.isOf(EndBlocks.BLUE_VINE_FUR)) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
for (Direction dir : HORIZONTAL) {
|
||||
BlockPos p = POS.offset(dir);
|
||||
state = world.getBlockState(p);
|
||||
if (state.getBlock() instanceof BlockGlowingFur) {
|
||||
BlocksHelper.setWithoutUpdate(world, p, AIR);
|
||||
}
|
||||
world.getBlockTickScheduler().schedule(p, world.getBlockState(p).getBlock(), 0);
|
||||
POS.setY(POS.getY() - 1);
|
||||
state = world.getBlockState(POS);
|
||||
|
||||
int ray = downRayRep(world, POS.toImmutable(), 64);
|
||||
if (ray > 32) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
||||
if (world.getRandom().nextBoolean()) {
|
||||
POS.setY(POS.getY() - 1);
|
||||
state = world.getBlockState(POS);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.getDefaultState());
|
||||
}
|
||||
POS.setY(POS.getY() + 1);
|
||||
state = world.getBlockState(POS);
|
||||
}
|
||||
else {
|
||||
POS.setY(y);
|
||||
boolean place = true;
|
||||
for (Direction dir : HORIZONTAL) {
|
||||
state = world.getBlockState(POS.offset(dir));
|
||||
if (!state.getFluidState().isEmpty()) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, state);
|
||||
place = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (place) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
}
|
||||
|
||||
POS.setY(y - ray);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, falling);
|
||||
}
|
||||
}
|
||||
// Double plants
|
||||
if (state.getBlock() instanceof BlockDoublePlant) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
POS.setY(POS.getY() + 1);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
}
|
||||
// Other blocks
|
||||
// Blocks without support
|
||||
else {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
// Blue Vine
|
||||
if (state.getBlock() instanceof BlockBlueVine) {
|
||||
while (state.isOf(EndBlocks.BLUE_VINE) || state.isOf(EndBlocks.BLUE_VINE_LANTERN) || state.isOf(EndBlocks.BLUE_VINE_FUR)) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
for (Direction dir : HORIZONTAL) {
|
||||
BlockPos p = POS.offset(dir);
|
||||
state = world.getBlockState(p);
|
||||
if (state.getBlock() instanceof BlockGlowingFur) {
|
||||
BlocksHelper.setWithoutUpdate(world, p, AIR);
|
||||
}
|
||||
world.getBlockTickScheduler().schedule(p, world.getBlockState(p).getBlock(), 0);
|
||||
}
|
||||
POS.setY(POS.getY() + 1);
|
||||
state = world.getBlockState(POS);
|
||||
}
|
||||
}
|
||||
// Double plants
|
||||
if (state.getBlock() instanceof BlockDoublePlant) {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
POS.setY(POS.getY() + 1);
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
}
|
||||
// Other blocks
|
||||
else {
|
||||
BlocksHelper.setWithoutUpdate(world, POS, AIR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,12 +95,12 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
|||
structure.place(world, center, placementData, random);
|
||||
|
||||
TerrainMerge merge = getTerrainMerge(world, center, random);
|
||||
int x1 = center.getX();
|
||||
int z1 = center.getZ();
|
||||
int x2 = x1 + offset.getX();
|
||||
int z2 = z1 + offset.getZ();
|
||||
if (merge != TerrainMerge.NONE) {
|
||||
Mutable mut = new Mutable();
|
||||
int x1 = center.getX();
|
||||
int z1 = center.getZ();
|
||||
int x2 = x1 + offset.getX();
|
||||
int z2 = z1 + offset.getZ();
|
||||
|
||||
if (x2 < x1) {
|
||||
int a = x1;
|
||||
|
@ -119,10 +119,10 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
|||
mut.setX(x);
|
||||
for (int z = z1; z <= z2; z++) {
|
||||
mut.setZ(z);
|
||||
mut.setY(posY);
|
||||
mut.setY(surfMax);
|
||||
BlockState state = world.getBlockState(mut);
|
||||
if (!state.isIn(EndTags.GEN_TERRAIN) && state.isSideSolidFullSquare(world, mut, Direction.DOWN)) {
|
||||
for (int i = 0; i < 10; i--) {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
mut.setY(mut.getY() - 1);
|
||||
BlockState stateSt = world.getBlockState(mut);
|
||||
if (!stateSt.isIn(EndTags.GEN_TERRAIN)) {
|
||||
|
@ -153,6 +153,7 @@ public abstract class NBTStructureFeature extends DefaultFeature {
|
|||
}
|
||||
}
|
||||
}
|
||||
BlocksHelper.fixBlocks(world, new BlockPos(x1, center.getY(), z1), new BlockPos(x2, center.getY() + offset.getY(), z2));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package ru.betterend.world.features.bushes;
|
|||
import java.util.Random;
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.LeavesBlock;
|
||||
import net.minecraft.block.Material;
|
||||
|
@ -12,7 +13,7 @@ import net.minecraft.world.StructureWorldAccess;
|
|||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
||||
import ru.betterend.noise.OpenSimplexNoise;
|
||||
import ru.betterend.registry.EndBlocks;
|
||||
import ru.betterend.registry.EndTags;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
import ru.betterend.util.MHelper;
|
||||
import ru.betterend.util.sdf.SDF;
|
||||
|
@ -23,28 +24,46 @@ import ru.betterend.util.sdf.operator.SDFTranslate;
|
|||
import ru.betterend.util.sdf.primitive.SDFSphere;
|
||||
import ru.betterend.world.features.DefaultFeature;
|
||||
|
||||
public class DragonTreeBushFeature extends DefaultFeature {
|
||||
public class BushFeature extends DefaultFeature {
|
||||
private static final Function<BlockState, Boolean> REPLACE;
|
||||
private final Block leaves;
|
||||
private final Block stem;
|
||||
|
||||
public BushFeature(Block leaves, Block stem) {
|
||||
this.leaves = leaves;
|
||||
this.stem = stem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
||||
if (world.getBlockState(pos.down()).getBlock() != EndBlocks.SHADOW_GRASS) return false;
|
||||
if (!world.getBlockState(pos.down()).getBlock().isIn(EndTags.END_GROUND)) return false;
|
||||
|
||||
BlockState leaves = EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1);
|
||||
float radius = MHelper.randRange(1.8F, 4.5F, random);
|
||||
float radius = MHelper.randRange(1.8F, 3.5F, random);
|
||||
OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt());
|
||||
SDF sphere = new SDFSphere().setRadius(radius).setBlock(EndBlocks.DRAGON_TREE_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1));
|
||||
SDF sphere = new SDFSphere().setRadius(radius).setBlock(this.leaves);
|
||||
sphere = new SDFScale3D().setScale(1, 0.5F, 1).setSource(sphere);
|
||||
sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere);
|
||||
sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere);
|
||||
sphere = new SDFDisplacement().setFunction((vec) -> { return MHelper.randRange(-2F, 2F, random); }).setSource(sphere);
|
||||
sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere));
|
||||
sphere.setReplaceFunction(REPLACE);
|
||||
sphere.setPostProcess((info) -> {
|
||||
if (info.getState().getBlock() instanceof LeavesBlock) {
|
||||
int distance = info.getPos().getManhattanDistance(pos);
|
||||
if (distance < 7) {
|
||||
return info.getState().with(LeavesBlock.DISTANCE, distance);
|
||||
}
|
||||
else {
|
||||
return AIR;
|
||||
}
|
||||
}
|
||||
return info.getState();
|
||||
});
|
||||
sphere.fillRecursive(world, pos);
|
||||
BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.DRAGON_TREE.bark);
|
||||
BlocksHelper.setWithoutUpdate(world, pos, stem);
|
||||
for (Direction d: Direction.values()) {
|
||||
BlockPos p = pos.offset(d);
|
||||
if (world.isAir(p)) {
|
||||
BlocksHelper.setWithoutUpdate(world, p, leaves);
|
||||
BlocksHelper.setWithoutUpdate(world, p, leaves.getDefaultState().with(LeavesBlock.DISTANCE, 1));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,54 +0,0 @@
|
|||
package ru.betterend.world.features.bushes;
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.LeavesBlock;
|
||||
import net.minecraft.block.Material;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.StructureWorldAccess;
|
||||
import net.minecraft.world.gen.chunk.ChunkGenerator;
|
||||
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
|
||||
import ru.betterend.noise.OpenSimplexNoise;
|
||||
import ru.betterend.registry.EndBlocks;
|
||||
import ru.betterend.util.BlocksHelper;
|
||||
import ru.betterend.util.MHelper;
|
||||
import ru.betterend.util.sdf.SDF;
|
||||
import ru.betterend.util.sdf.operator.SDFDisplacement;
|
||||
import ru.betterend.util.sdf.operator.SDFScale3D;
|
||||
import ru.betterend.util.sdf.operator.SDFSubtraction;
|
||||
import ru.betterend.util.sdf.operator.SDFTranslate;
|
||||
import ru.betterend.util.sdf.primitive.SDFSphere;
|
||||
import ru.betterend.world.features.DefaultFeature;
|
||||
|
||||
public class PythadendronBushFeature extends DefaultFeature {
|
||||
private static final Function<BlockState, Boolean> REPLACE;
|
||||
|
||||
@Override
|
||||
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, DefaultFeatureConfig config) {
|
||||
if (world.getBlockState(pos.down()).getBlock() != EndBlocks.CHORUS_NYLIUM) return false;
|
||||
|
||||
float radius = MHelper.randRange(1.8F, 4.5F, random);
|
||||
OpenSimplexNoise noise = new OpenSimplexNoise(random.nextInt());
|
||||
SDF sphere = new SDFSphere().setRadius(radius).setBlock(EndBlocks.PYTHADENDRON_LEAVES.getDefaultState().with(LeavesBlock.DISTANCE, 1));
|
||||
sphere = new SDFScale3D().setScale(1, 0.5F, 1).setSource(sphere);
|
||||
sphere = new SDFDisplacement().setFunction((vec) -> { return (float) noise.eval(vec.getX() * 0.2, vec.getY() * 0.2, vec.getZ() * 0.2) * 3; }).setSource(sphere);
|
||||
sphere = new SDFDisplacement().setFunction((vec) -> { return random.nextFloat() * 3F - 1.5F; }).setSource(sphere);
|
||||
sphere = new SDFSubtraction().setSourceA(sphere).setSourceB(new SDFTranslate().setTranslate(0, -radius, 0).setSource(sphere));
|
||||
sphere.setReplaceFunction(REPLACE);
|
||||
sphere.fillRecursive(world, pos);
|
||||
BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.PYTHADENDRON.bark);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static {
|
||||
REPLACE = (state) -> {
|
||||
if (state.getMaterial().equals(Material.PLANT)) {
|
||||
return true;
|
||||
}
|
||||
return state.getMaterial().isReplaceable();
|
||||
};
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
"biome.betterend.dust_wastelands": "Dust Wastelands",
|
||||
"biome.betterend.chorus_forest": "Chorus Forest",
|
||||
"biome.betterend.megalake": "Megalake",
|
||||
"biome.betterend.crystal_mountains": "Crystal Mountains",
|
||||
"biome.betterend.crystal_mountains": "Crystal Mountains",
|
||||
|
||||
"entity.betterend.dragonfly": "Dragonfly",
|
||||
"item.betterend.spawn_egg_dragonfly": "Dragonfly Spawn Egg",
|
||||
|
@ -198,79 +198,79 @@
|
|||
"block.betterend.cave_grass": "Cave Grass",
|
||||
"block.betterend.cave_bush": "Cave Bush",
|
||||
|
||||
"block.betterend.cave_moss_path": "Cave Moss Path",
|
||||
"block.betterend.crystal_moss": "Crystal Moss",
|
||||
"block.betterend.crystal_moss_path": "Crystal Moss Path",
|
||||
"block.betterend.pythadendron_leaves": "Pythadendron Leaves",
|
||||
"item.betterend.spawn_egg_end_fish": "End Fish Spawn Egg",
|
||||
"block.betterend.cave_moss_path": "Cave Moss Path",
|
||||
"block.betterend.crystal_moss": "Crystal Moss",
|
||||
"block.betterend.crystal_moss_path": "Crystal Moss Path",
|
||||
"block.betterend.pythadendron_leaves": "Pythadendron Leaves",
|
||||
"item.betterend.spawn_egg_end_fish": "End Fish Spawn Egg",
|
||||
"block.betterend.crystal_grass": "Crystal Grass",
|
||||
|
||||
"block.betterend.flavolite_runed": "Runed Flavolite",
|
||||
"block.betterend.end_portal_block": "End Portal",
|
||||
"block.betterend.eternal_pedestal": "Eternal Pedestal",
|
||||
"block.betterend.eternal_pedestal": "Eternal Pedestal",
|
||||
"block.betterend.flavolite_runed_eternal": "Eternal Runed Flavolite",
|
||||
"item.betterend.eternal_crystal": "Eternal Crystal",
|
||||
"item.betterend.eternal_crystal": "Eternal Crystal",
|
||||
|
||||
"block.betterend.lacugrove_bark": "Lacugrove Bark",
|
||||
"block.betterend.lacugrove_barrel": "Lacugrove Barrel",
|
||||
"block.betterend.lacugrove_button": "Lacugrove Button",
|
||||
"block.betterend.lacugrove_chest": "Lacugrove Chest",
|
||||
"block.betterend.lacugrove_crafting_table": "Lacugrove Crafting Table",
|
||||
"block.betterend.lacugrove_door": "Lacugrove Door",
|
||||
"block.betterend.lacugrove_fence": "Lacugrove Fence",
|
||||
"block.betterend.lacugrove_gate": "Lacugrove Gate",
|
||||
"block.betterend.lacugrove_ladder": "Lacugrove Ladder",
|
||||
"block.betterend.lacugrove_log": "Lacugrove Log",
|
||||
"block.betterend.lacugrove_planks": "Lacugrove Planks",
|
||||
"block.betterend.lacugrove_plate": "Lacugrove Plate",
|
||||
"block.betterend.lacugrove_sign": "Lacugrove Sign",
|
||||
"block.betterend.lacugrove_slab": "Lacugrove Slab",
|
||||
"block.betterend.lacugrove_stairs": "Lacugrove Stairs",
|
||||
"block.betterend.lacugrove_stripped_bark": "Lacugrove Stripped Bark",
|
||||
"block.betterend.lacugrove_stripped_log": "Lacugrove Stripped Log",
|
||||
"block.betterend.lacugrove_trapdoor": "Lacugrove Trapdoor",
|
||||
"block.betterend.lacugrove_bark": "Lacugrove Bark",
|
||||
"block.betterend.lacugrove_barrel": "Lacugrove Barrel",
|
||||
"block.betterend.lacugrove_button": "Lacugrove Button",
|
||||
"block.betterend.lacugrove_chest": "Lacugrove Chest",
|
||||
"block.betterend.lacugrove_crafting_table": "Lacugrove Crafting Table",
|
||||
"block.betterend.lacugrove_door": "Lacugrove Door",
|
||||
"block.betterend.lacugrove_fence": "Lacugrove Fence",
|
||||
"block.betterend.lacugrove_gate": "Lacugrove Gate",
|
||||
"block.betterend.lacugrove_ladder": "Lacugrove Ladder",
|
||||
"block.betterend.lacugrove_log": "Lacugrove Log",
|
||||
"block.betterend.lacugrove_planks": "Lacugrove Planks",
|
||||
"block.betterend.lacugrove_plate": "Lacugrove Plate",
|
||||
"block.betterend.lacugrove_sign": "Lacugrove Sign",
|
||||
"block.betterend.lacugrove_slab": "Lacugrove Slab",
|
||||
"block.betterend.lacugrove_stairs": "Lacugrove Stairs",
|
||||
"block.betterend.lacugrove_stripped_bark": "Lacugrove Stripped Bark",
|
||||
"block.betterend.lacugrove_stripped_log": "Lacugrove Stripped Log",
|
||||
"block.betterend.lacugrove_trapdoor": "Lacugrove Trapdoor",
|
||||
|
||||
"block.betterend.lacugrove_leaves": "Lacugrove Leaves",
|
||||
"block.betterend.lacugrove_sapling": "Lacugrove Sapling",
|
||||
"block.betterend.lacugrove_leaves": "Lacugrove Leaves",
|
||||
"block.betterend.lacugrove_sapling": "Lacugrove Sapling",
|
||||
|
||||
"biome.betterend.megalake_grove": "Megalake Grove",
|
||||
"biome.betterend.painted_mountains": "Painted Mountains",
|
||||
"biome.betterend.megalake_grove": "Megalake Grove",
|
||||
"biome.betterend.painted_mountains": "Painted Mountains",
|
||||
|
||||
"block.betterend.dragon_tree_bark": "Dragon Tree Bark",
|
||||
"block.betterend.dragon_tree_barrel": "Dragon Tree Barrel",
|
||||
"block.betterend.dragon_tree_button": "Dragon Tree Button",
|
||||
"block.betterend.dragon_tree_chest": "Dragon Tree Chest",
|
||||
"block.betterend.dragon_tree_crafting_table": "Dragon Tree Crafting Table",
|
||||
"block.betterend.dragon_tree_door": "Dragon Tree Door",
|
||||
"block.betterend.dragon_tree_fence": "Dragon Tree Fence",
|
||||
"block.betterend.dragon_tree_gate": "Dragon Tree Gate",
|
||||
"block.betterend.dragon_tree_ladder": "Dragon Tree Ladder",
|
||||
"block.betterend.dragon_tree_log": "Dragon Tree Log",
|
||||
"block.betterend.dragon_tree_planks": "Dragon Tree Planks",
|
||||
"block.betterend.dragon_tree_plate": "Dragon Tree Plate",
|
||||
"block.betterend.dragon_tree_sign": "Dragon Tree Sign",
|
||||
"block.betterend.dragon_tree_slab": "Dragon Tree Slab",
|
||||
"block.betterend.dragon_tree_stairs": "Dragon Tree Stairs",
|
||||
"block.betterend.dragon_tree_stripped_bark": "Dragon Tree Stripped Bark",
|
||||
"block.betterend.dragon_tree_stripped_log": "Dragon Tree Stripped Log",
|
||||
"block.betterend.dragon_tree_trapdoor": "Dragon Tree Trapdoor",
|
||||
"block.betterend.dragon_tree_bark": "Dragon Tree Bark",
|
||||
"block.betterend.dragon_tree_barrel": "Dragon Tree Barrel",
|
||||
"block.betterend.dragon_tree_button": "Dragon Tree Button",
|
||||
"block.betterend.dragon_tree_chest": "Dragon Tree Chest",
|
||||
"block.betterend.dragon_tree_crafting_table": "Dragon Tree Crafting Table",
|
||||
"block.betterend.dragon_tree_door": "Dragon Tree Door",
|
||||
"block.betterend.dragon_tree_fence": "Dragon Tree Fence",
|
||||
"block.betterend.dragon_tree_gate": "Dragon Tree Gate",
|
||||
"block.betterend.dragon_tree_ladder": "Dragon Tree Ladder",
|
||||
"block.betterend.dragon_tree_log": "Dragon Tree Log",
|
||||
"block.betterend.dragon_tree_planks": "Dragon Tree Planks",
|
||||
"block.betterend.dragon_tree_plate": "Dragon Tree Plate",
|
||||
"block.betterend.dragon_tree_sign": "Dragon Tree Sign",
|
||||
"block.betterend.dragon_tree_slab": "Dragon Tree Slab",
|
||||
"block.betterend.dragon_tree_stairs": "Dragon Tree Stairs",
|
||||
"block.betterend.dragon_tree_stripped_bark": "Dragon Tree Stripped Bark",
|
||||
"block.betterend.dragon_tree_stripped_log": "Dragon Tree Stripped Log",
|
||||
"block.betterend.dragon_tree_trapdoor": "Dragon Tree Trapdoor",
|
||||
|
||||
"biome.betterend.shadow_forest": "Shadow Forest",
|
||||
"block.betterend.dragon_tree_leaves": "Dragon Tree Leaves",
|
||||
"block.betterend.dragon_tree_sapling": "Dragon Tree Sapling",
|
||||
"block.betterend.shadow_grass": "Shadow Grass",
|
||||
"block.betterend.shadow_grass_path": "Shadow Grass Path",
|
||||
"block.betterend.shadow_plant": "Shadow Plant",
|
||||
"block.betterend.dragon_tree_leaves": "Dragon Tree Leaves",
|
||||
"block.betterend.dragon_tree_sapling": "Dragon Tree Sapling",
|
||||
"block.betterend.shadow_grass": "Shadow Grass",
|
||||
"block.betterend.shadow_grass_path": "Shadow Grass Path",
|
||||
"block.betterend.shadow_plant": "Shadow Plant",
|
||||
|
||||
"block.betterend.dragon_tree_bookshelf": "Dragon Tree Bookshelf",
|
||||
"block.betterend.end_lotus_bookshelf": "End Lotus Bookshelf",
|
||||
"block.betterend.lacugrove_bookshelf": "Lacugrove Bookshelf",
|
||||
"block.betterend.mossy_glowshroom_bookshelf": "Mossy Glowshroom Bookshelf",
|
||||
"block.betterend.pythadendron_bookshelf": "Pythadendron Bookshelf",
|
||||
"block.betterend.dragon_tree_bookshelf": "Dragon Tree Bookshelf",
|
||||
"block.betterend.end_lotus_bookshelf": "End Lotus Bookshelf",
|
||||
"block.betterend.lacugrove_bookshelf": "Lacugrove Bookshelf",
|
||||
"block.betterend.mossy_glowshroom_bookshelf": "Mossy Glowshroom Bookshelf",
|
||||
"block.betterend.pythadendron_bookshelf": "Pythadendron Bookshelf",
|
||||
|
||||
"block.betterend.murkweed": "Murkweed",
|
||||
"block.betterend.needlegrass": "Needlegrass",
|
||||
"block.betterend.twisted_vine": "Twisted Vine",
|
||||
"block.betterend.murkweed": "Murkweed",
|
||||
"block.betterend.needlegrass": "Needlegrass",
|
||||
"block.betterend.twisted_vine": "Twisted Vine",
|
||||
|
||||
"block.betterend.shadow_berry": "Shadow Berry Seeds",
|
||||
"item.betterend.shadow_berry_cooked": "Shadow Berry Cooked",
|
||||
|
@ -278,22 +278,26 @@
|
|||
"block.betterend.purple_polypore": "Purple Polypore",
|
||||
|
||||
"block.betterend.cyan_moss": "Cyan Moss",
|
||||
"block.betterend.tail_moss": "Tail Moss",
|
||||
"block.betterend.tail_moss": "Tail Moss",
|
||||
|
||||
"block.betterend.flavolite_lantern": "Flavolite Lantern",
|
||||
"block.betterend.end_stone_lantern": "End Stone Lantern",
|
||||
"block.betterend.violecite_lantern": "Violecite Lantern",
|
||||
"block.betterend.flavolite_lantern": "Flavolite Lantern",
|
||||
"block.betterend.end_stone_lantern": "End Stone Lantern",
|
||||
"block.betterend.violecite_lantern": "Violecite Lantern",
|
||||
|
||||
"biome.betterend.dragonfly": "Dragonfly",
|
||||
"biome.betterend.end_fish": "End Fish",
|
||||
"biome.betterend.end_slime": "End Slime",
|
||||
"biome.betterend.shadow_walker": "Shadow Walker",
|
||||
"item.betterend.spawn_egg_shadow_walker": "Shadow Walker Spawn Egg",
|
||||
"biome.betterend.dragonfly": "Dragonfly",
|
||||
"biome.betterend.end_fish": "End Fish",
|
||||
"biome.betterend.end_slime": "End Slime",
|
||||
"biome.betterend.shadow_walker": "Shadow Walker",
|
||||
"item.betterend.spawn_egg_shadow_walker": "Shadow Walker Spawn Egg",
|
||||
|
||||
"block.betterend.andesite_lantern": "Andesite Lantern",
|
||||
"block.betterend.blackstone_lantern": "Blackstone Lantern",
|
||||
"block.betterend.diorite_lantern": "Diorite Lantern",
|
||||
"block.betterend.granite_lantern": "Granite Lantern",
|
||||
"block.betterend.purpur_lantern": "Purpur Lantern",
|
||||
"block.betterend.quartz_lantern": "Quartz Lantern"
|
||||
"block.betterend.andesite_lantern": "Andesite Lantern",
|
||||
"block.betterend.blackstone_lantern": "Blackstone Lantern",
|
||||
"block.betterend.diorite_lantern": "Diorite Lantern",
|
||||
"block.betterend.granite_lantern": "Granite Lantern",
|
||||
"block.betterend.purpur_lantern": "Purpur Lantern",
|
||||
"block.betterend.quartz_lantern": "Quartz Lantern",
|
||||
|
||||
"item.betterend.bucket_end_fish": "End Fish Bucket",
|
||||
"item.betterend.end_fish_cooked": "Cooked End Fish",
|
||||
"item.betterend.end_fish_raw": "End Fish"
|
||||
}
|
|
@ -10,15 +10,15 @@
|
|||
"entity.betterend.dragonfly": "Стрекоза",
|
||||
"item.betterend.spawn_egg_dragonfly": "Яйцо призыва стрекозы",
|
||||
|
||||
"entity.betterend.end_slime": "Слизень края",
|
||||
"item.betterend.spawn_egg_end_slime": "Яйцо призыва слизня края",
|
||||
"entity.betterend.end_slime": "Слизень Края",
|
||||
"item.betterend.spawn_egg_end_slime": "Яйцо призыва слизня Края",
|
||||
|
||||
"block.betterend.end_mycelium": "Мицелий края",
|
||||
"block.betterend.end_moss": "Мох края",
|
||||
"block.betterend.end_mycelium": "Мицелий Края",
|
||||
"block.betterend.end_moss": "Мох Края",
|
||||
"block.betterend.endstone_dust": "Эндерняковая пыль",
|
||||
|
||||
"block.betterend.end_mycelium_path": "Тропа из мицелия края",
|
||||
"block.betterend.end_moss_path": "Тропа из мха края",
|
||||
"block.betterend.end_mycelium_path": "Тропа из мицелия Края",
|
||||
"block.betterend.end_moss_path": "Тропа из мха Края",
|
||||
|
||||
"block.betterend.ender_ore": "Руда Края",
|
||||
"block.betterend.terminite_block": "Блок Терминита",
|
||||
|
@ -170,29 +170,29 @@
|
|||
"block.betterend.quartz_pedestal": "Пьедестал из кварца",
|
||||
"block.betterend.infusion_pedestal": "Пьедестал Наполнения",
|
||||
|
||||
"block.betterend.end_lotus_seed": "Семя лотоса края",
|
||||
"block.betterend.end_lotus_stem": "Стебель лотоса края",
|
||||
"block.betterend.end_lotus_leaf": "Лист лотоса края",
|
||||
"block.betterend.end_lotus_flower": "Цветок лотоса края",
|
||||
"block.betterend.end_lotus_seed": "Семя лотоса Края",
|
||||
"block.betterend.end_lotus_stem": "Стебель лотоса Края",
|
||||
"block.betterend.end_lotus_leaf": "Лист лотоса Края",
|
||||
"block.betterend.end_lotus_flower": "Цветок лотоса Края",
|
||||
|
||||
"block.betterend.end_lotus_bark": "Кора лотоса края",
|
||||
"block.betterend.end_lotus_barrel": "Бочка из лотоса края",
|
||||
"block.betterend.end_lotus_button": "Кнопка из лотоса края",
|
||||
"block.betterend.end_lotus_chest": "Сундук из лотоса края",
|
||||
"block.betterend.end_lotus_crafting_table": "Верстак из лотоса края",
|
||||
"block.betterend.end_lotus_door": "Дверь из лотоса края",
|
||||
"block.betterend.end_lotus_fence": "Забор из лотоса края",
|
||||
"block.betterend.end_lotus_gate": "Калитка из лотоса края",
|
||||
"block.betterend.end_lotus_ladder": "Лестница из лотоса края",
|
||||
"block.betterend.end_lotus_log": "Бревно лотоса края",
|
||||
"block.betterend.end_lotus_planks": "Доски лотоса края",
|
||||
"block.betterend.end_lotus_plate": "Нажимная плита из лотоса края",
|
||||
"block.betterend.end_lotus_sign": "Ьабличка из лотоса края",
|
||||
"block.betterend.end_lotus_slab": "Плита из лотоса края",
|
||||
"block.betterend.end_lotus_stairs": "Ступени из лотоса края",
|
||||
"block.betterend.end_lotus_stripped_bark": "Обтёсанная кора лотоса края",
|
||||
"block.betterend.end_lotus_stripped_log": "Обтёсанное бревно лотоса края",
|
||||
"block.betterend.end_lotus_trapdoor": "Люк из лотоса края",
|
||||
"block.betterend.end_lotus_bark": "Кора лотоса Края",
|
||||
"block.betterend.end_lotus_barrel": "Бочка из лотоса Края",
|
||||
"block.betterend.end_lotus_button": "Кнопка из лотоса Края",
|
||||
"block.betterend.end_lotus_chest": "Сундук из лотоса Края",
|
||||
"block.betterend.end_lotus_crafting_table": "Верстак из лотоса Края",
|
||||
"block.betterend.end_lotus_door": "Дверь из лотоса Края",
|
||||
"block.betterend.end_lotus_fence": "Забор из лотоса Края",
|
||||
"block.betterend.end_lotus_gate": "Калитка из лотоса Края",
|
||||
"block.betterend.end_lotus_ladder": "Лестница из лотоса Края",
|
||||
"block.betterend.end_lotus_log": "Бревно лотоса Края",
|
||||
"block.betterend.end_lotus_planks": "Доски лотоса Края",
|
||||
"block.betterend.end_lotus_plate": "Нажимная плита из лотоса Края",
|
||||
"block.betterend.end_lotus_sign": "Ьабличка из лотоса Края",
|
||||
"block.betterend.end_lotus_slab": "Плита из лотоса Края",
|
||||
"block.betterend.end_lotus_stairs": "Ступени из лотоса Края",
|
||||
"block.betterend.end_lotus_stripped_bark": "Обтёсанная кора лотоса Края",
|
||||
"block.betterend.end_lotus_stripped_log": "Обтёсанное бревно лотоса Края",
|
||||
"block.betterend.end_lotus_trapdoor": "Люк из лотоса Края",
|
||||
|
||||
"block.betterend.cave_moss": "Пещерный мох",
|
||||
"block.betterend.cave_grass": "Пещерная трава",
|
||||
|
@ -265,7 +265,7 @@
|
|||
"block.betterend.shadow_plant": "Теневое растение",
|
||||
|
||||
"block.betterend.dragon_tree_bookshelf": "Книжные полки из драконова древа",
|
||||
"block.betterend.end_lotus_bookshelf": "Книжные полки из лотоса края",
|
||||
"block.betterend.end_lotus_bookshelf": "Книжные полки из лотоса Края",
|
||||
"block.betterend.lacugrove_bookshelf": "Книжные полки из оземангра",
|
||||
"block.betterend.mossy_glowshroom_bookshelf": "Книжные полки из мшистого светогриба",
|
||||
"block.betterend.pythadendron_bookshelf": "Книжные полки из пифадендрона",
|
||||
|
@ -283,12 +283,12 @@
|
|||
"block.betterend.tail_moss": "Хвостовидный мох",
|
||||
|
||||
"block.betterend.flavolite_lantern": "Флаволитовый фонарь",
|
||||
"block.betterend.end_stone_lantern": "Фонарь из камня края",
|
||||
"block.betterend.end_stone_lantern": "Фонарь из камня Края",
|
||||
"block.betterend.violecite_lantern": "Виолецитовый фонарь",
|
||||
|
||||
"biome.betterend.dragonfly": "Стрекоза",
|
||||
"biome.betterend.end_fish": "Рыба края",
|
||||
"biome.betterend.end_slime": "Слизень края",
|
||||
"biome.betterend.end_fish": "Рыба Края",
|
||||
"biome.betterend.end_slime": "Слизень Края",
|
||||
"biome.betterend.shadow_walker": "Теневой ходок",
|
||||
"item.betterend.spawn_egg_shadow_walker": "Яйцо призыва теневого ходока",
|
||||
|
||||
|
@ -297,5 +297,9 @@
|
|||
"block.betterend.diorite_lantern": "Диоритовый фонарь",
|
||||
"block.betterend.granite_lantern": "Гранитный фонарь",
|
||||
"block.betterend.purpur_lantern": "Пурпуровый фонарь",
|
||||
"block.betterend.quartz_lantern": "Кварцевый фонарь"
|
||||
"block.betterend.quartz_lantern": "Кварцевый фонарь",
|
||||
|
||||
"item.betterend.bucket_end_fish": "Ведро с рыбой Края",
|
||||
"item.betterend.end_fish_cooked": "Приготовленная рыба Края",
|
||||
"item.betterend.end_fish_raw": "Рыба Края"
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"defaultMaterial": "betterend:waving_wall_glow_inc"
|
||||
"defaultMaterial": "betterend:waving_wall"
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "betterend:item/bucket_end_fish"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "betterend:item/end_fish_cooked"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "item/generated",
|
||||
"textures": {
|
||||
"layer0": "betterend:item/end_fish"
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
src/main/resources/assets/betterend/textures/item/end_fish.png
Normal file
BIN
src/main/resources/assets/betterend/textures/item/end_fish.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"structures": [
|
||||
{ "nbt": "fallen_tree_1", "offsetY": 0, "terrainMerge": "object" },
|
||||
{ "nbt": "fallen_tree_2", "offsetY": 0, "terrainMerge": "object" },
|
||||
{ "nbt": "stump_1", "offsetY": 0, "terrainMerge": "object" },
|
||||
{ "nbt": "stump_2", "offsetY": 0, "terrainMerge": "object" },
|
||||
{ "nbt": "library", "offsetY": 0, "terrainMerge": "surface" },
|
||||
{ "nbt": "ruins_1", "offsetY": 0, "terrainMerge": "surface" },
|
||||
{ "nbt": "ruins_2", "offsetY": 0, "terrainMerge": "surface" },
|
||||
{ "nbt": "ruins_3", "offsetY": 0, "terrainMerge": "surface" },
|
||||
{ "nbt": "tree_house", "offsetY": 0, "terrainMerge": "surface" }
|
||||
]
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue