diff --git a/src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java b/src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java new file mode 100644 index 00000000..75bbf5e0 --- /dev/null +++ b/src/main/java/ru/betterend/blocks/basis/BlockBookshelf.java @@ -0,0 +1,61 @@ +package ru.betterend.blocks.basis; + +import java.io.Reader; +import java.util.Collections; +import java.util.List; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.util.Identifier; +import net.minecraft.util.registry.Registry; +import ru.betterend.BetterEnd; +import ru.betterend.interfaces.Patterned; + +public class BlockBookshelf extends BlockBase { + public BlockBookshelf(Block source) { + super(FabricBlockSettings.copyOf(source)); + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.isEffectiveOn(state)) { + int silk = EnchantmentHelper.getLevel(Enchantments.SILK_TOUCH, tool); + if (silk > 0) { + return Collections.singletonList(new ItemStack(this)); + } + } + return Collections.singletonList(new ItemStack(Items.BOOK, 3)); + } + + @Override + public Identifier statePatternId() { + return Patterned.BLOCK_STATES_PATTERN; + } + + @Override + public String getModelPattern(String block) { + Identifier blockId = Registry.BLOCK.getId(this); + String name = getName(blockId); + return Patterned.createJson(Patterned.BOOKSHELF, BetterEnd.makeID(name), blockId.getPath()); + } + + @Override + public String getStatesPattern(Reader data) { + Identifier blockId = Registry.BLOCK.getId(this); + String name = getName(blockId); + return Patterned.createJson(data, BetterEnd.makeID(name), blockId.getPath()); + } + + private String getName(Identifier blockId) { + String name = blockId.getPath(); + return name.replace("_bookshelf", ""); + } +} diff --git a/src/main/java/ru/betterend/blocks/BlockOre.java b/src/main/java/ru/betterend/blocks/basis/BlockOre.java similarity index 95% rename from src/main/java/ru/betterend/blocks/BlockOre.java rename to src/main/java/ru/betterend/blocks/basis/BlockOre.java index 2d5e02fe..5156fec6 100644 --- a/src/main/java/ru/betterend/blocks/BlockOre.java +++ b/src/main/java/ru/betterend/blocks/basis/BlockOre.java @@ -1,58 +1,58 @@ -package ru.betterend.blocks; - -import java.util.List; - -import com.google.common.collect.Lists; - -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.minecraft.block.BlockState; -import net.minecraft.block.Material; -import net.minecraft.block.MaterialColor; -import net.minecraft.block.OreBlock; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.enchantment.Enchantments; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.loot.context.LootContext; -import net.minecraft.loot.context.LootContextParameters; -import net.minecraft.sound.BlockSoundGroup; -import net.minecraft.util.math.MathHelper; -import ru.betterend.util.MHelper; - -public class BlockOre extends OreBlock { - private final Item dropItem; - private final int minCount; - private final int maxCount; - - public BlockOre(Item drop, int minCount, int maxCount) { - super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND) - .hardness(3F) - .resistance(9F) - .requiresTool() - .sounds(BlockSoundGroup.STONE)); - this.dropItem = drop; - this.minCount = minCount; - this.maxCount = maxCount; - } - - @Override - public List getDroppedStacks(BlockState state, LootContext.Builder builder) { - ItemStack tool = builder.get(LootContextParameters.TOOL); - if (tool != null && tool.isEffectiveOn(state)) { - int count = 0; - int fortune = EnchantmentHelper.getLevel(Enchantments.FORTUNE, tool); - if (fortune > 0) { - int min = MathHelper.clamp(minCount + fortune, minCount, maxCount); - int max = maxCount + (fortune / Enchantments.FORTUNE.getMaxLevel()); - if (min == max) { - return Lists.newArrayList(new ItemStack(dropItem, max)); - } - count = MHelper.randRange(min, max, MHelper.RANDOM); - } else { - count = MHelper.randRange(minCount, maxCount, MHelper.RANDOM); - } - return Lists.newArrayList(new ItemStack(dropItem, count)); - } - return Lists.newArrayList(); - } -} +package ru.betterend.blocks.basis; + +import java.util.List; + +import com.google.common.collect.Lists; + +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.minecraft.block.BlockState; +import net.minecraft.block.Material; +import net.minecraft.block.MaterialColor; +import net.minecraft.block.OreBlock; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.enchantment.Enchantments; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.loot.context.LootContext; +import net.minecraft.loot.context.LootContextParameters; +import net.minecraft.sound.BlockSoundGroup; +import net.minecraft.util.math.MathHelper; +import ru.betterend.util.MHelper; + +public class BlockOre extends OreBlock { + private final Item dropItem; + private final int minCount; + private final int maxCount; + + public BlockOre(Item drop, int minCount, int maxCount) { + super(FabricBlockSettings.of(Material.STONE, MaterialColor.SAND) + .hardness(3F) + .resistance(9F) + .requiresTool() + .sounds(BlockSoundGroup.STONE)); + this.dropItem = drop; + this.minCount = minCount; + this.maxCount = maxCount; + } + + @Override + public List getDroppedStacks(BlockState state, LootContext.Builder builder) { + ItemStack tool = builder.get(LootContextParameters.TOOL); + if (tool != null && tool.isEffectiveOn(state)) { + int count = 0; + int fortune = EnchantmentHelper.getLevel(Enchantments.FORTUNE, tool); + if (fortune > 0) { + int min = MathHelper.clamp(minCount + fortune, minCount, maxCount); + int max = maxCount + (fortune / Enchantments.FORTUNE.getMaxLevel()); + if (min == max) { + return Lists.newArrayList(new ItemStack(dropItem, max)); + } + count = MHelper.randRange(min, max, MHelper.RANDOM); + } else { + count = MHelper.randRange(minCount, maxCount, MHelper.RANDOM); + } + return Lists.newArrayList(new ItemStack(dropItem, count)); + } + return Lists.newArrayList(); + } +} diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index e00c0c86..bc56ef92 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -12,6 +12,7 @@ import ru.betterend.blocks.basis.BlockBark; import ru.betterend.blocks.basis.BlockBarkStripable; import ru.betterend.blocks.basis.BlockBarrel; import ru.betterend.blocks.basis.BlockBase; +import ru.betterend.blocks.basis.BlockBookshelf; import ru.betterend.blocks.basis.BlockChest; import ru.betterend.blocks.basis.BlockCraftingTable; import ru.betterend.blocks.basis.BlockDoor; @@ -54,6 +55,7 @@ public class WoodenMaterial { public final Block chest; public final Block barrel; + public final Block shelf; public WoodenMaterial(String name, MaterialColor woodColor, MaterialColor planksColor) { FabricBlockSettings materialPlanks = FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(planksColor); @@ -80,6 +82,7 @@ public class WoodenMaterial { chest = EndBlocks.registerBlock(name + "_chest", new BlockChest(planks)); barrel = EndBlocks.registerBlock(name + "_barrel", new BlockBarrel(planks)); + shelf = EndBlocks.registerBlock(name + "_bookshelf", new BlockBookshelf(planks)); // Recipes // GridRecipe.make(name + "_planks", planks).setOutputCount(4).setList("#").addMaterial('#', log, bark, log_stripped, bark_stripped).setGroup("end_planks").build(); diff --git a/src/main/java/ru/betterend/interfaces/Patterned.java b/src/main/java/ru/betterend/interfaces/Patterned.java index 493e12c3..035343df 100644 --- a/src/main/java/ru/betterend/interfaces/Patterned.java +++ b/src/main/java/ru/betterend/interfaces/Patterned.java @@ -69,6 +69,7 @@ public interface Patterned { public final static Identifier PEDESTAL_MODEL_TOP = BetterEnd.makeID("patterns/block/pattern_pedestal_top.json"); public final static Identifier PEDESTAL_MODEL_BOTTOM = BetterEnd.makeID("patterns/block/pattern_pedestal_bottom.json"); public final static Identifier PEDESTAL_MODEL_PILLAR = BetterEnd.makeID("patterns/block/pattern_pedestal_pillar.json"); + public final static Identifier BOOKSHELF = BetterEnd.makeID("patterns/block/bookshelf.json"); //Models Item public final static Identifier WALL_ITEM_MODEL = BetterEnd.makeID("patterns/item/pattern_wall.json"); diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 93502967..33dcb32f 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -28,7 +28,6 @@ import ru.betterend.blocks.BlockLacugroveSapling; import ru.betterend.blocks.BlockMossyGlowshroomCap; import ru.betterend.blocks.BlockMossyGlowshroomHymenophore; import ru.betterend.blocks.BlockMossyGlowshroomSapling; -import ru.betterend.blocks.BlockOre; import ru.betterend.blocks.BlockPath; import ru.betterend.blocks.BlockPythadendronSapling; import ru.betterend.blocks.BlockShadowGrass; @@ -46,6 +45,7 @@ import ru.betterend.blocks.RunedFlavolite; import ru.betterend.blocks.TerminiteBlock; import ru.betterend.blocks.basis.BlockGlowingFur; 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.complex.StoneMaterial; diff --git a/src/main/resources/assets/betterend/patterns/block/bookshelf.json b/src/main/resources/assets/betterend/patterns/block/bookshelf.json new file mode 100644 index 00000000..2cbd99e7 --- /dev/null +++ b/src/main/resources/assets/betterend/patterns/block/bookshelf.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "betterend:block/%parent%_planks", + "side": "betterend:block/%parent%_bookshelf" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_door_bottom.png b/src/main/resources/assets/betterend/textures/block/lacugrove_door_bottom.png new file mode 100644 index 00000000..8ba5518f Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/lacugrove_door_bottom.png differ diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_door_side.png b/src/main/resources/assets/betterend/textures/block/lacugrove_door_side.png new file mode 100644 index 00000000..94319f9b Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/lacugrove_door_side.png differ diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_door_top.png b/src/main/resources/assets/betterend/textures/block/lacugrove_door_top.png new file mode 100644 index 00000000..4899d559 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/lacugrove_door_top.png differ diff --git a/src/main/resources/assets/betterend/textures/block/lacugrove_trapdoor.png b/src/main/resources/assets/betterend/textures/block/lacugrove_trapdoor.png new file mode 100644 index 00000000..3d9bcfea Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/lacugrove_trapdoor.png differ diff --git a/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_bookshelf.png b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_bookshelf.png new file mode 100644 index 00000000..bf9cbe9c Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/mossy_glowshroom_bookshelf.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest.png b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest.png new file mode 100644 index 00000000..74734496 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_left.png b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_left.png new file mode 100644 index 00000000..44281cb9 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_left.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_right.png b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_right.png new file mode 100644 index 00000000..baae95e4 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/chest/dragon_tree_chest_right.png differ diff --git a/src/main/resources/assets/betterend/textures/item/lacugrove_door.png b/src/main/resources/assets/betterend/textures/item/lacugrove_door.png new file mode 100644 index 00000000..d8d9d42e Binary files /dev/null and b/src/main/resources/assets/betterend/textures/item/lacugrove_door.png differ