diff --git a/.vscode/java-formatter.xml b/.vscode/java-formatter.xml
index 7b2d48b..c0370f9 100644
--- a/.vscode/java-formatter.xml
+++ b/.vscode/java-formatter.xml
@@ -83,7 +83,7 @@
-
+
diff --git a/src/main/java/cc/toph/tutorialmod/block/ModBlocks.java b/src/main/java/cc/toph/tutorialmod/block/ModBlocks.java
index 0e6d0ef..5ee0d51 100644
--- a/src/main/java/cc/toph/tutorialmod/block/ModBlocks.java
+++ b/src/main/java/cc/toph/tutorialmod/block/ModBlocks.java
@@ -4,10 +4,12 @@ import java.util.function.Supplier;
import cc.toph.tutorialmod.TutorialMod;
import cc.toph.tutorialmod.item.ModItems;
+import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.DropExperienceBlock;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraftforge.eventbus.api.IEventBus;
@@ -22,12 +24,52 @@ public class ModBlocks {
TutorialMod.MODID);
// Blocks //
- public static final RegistryObject SAPPHIRE_BLOCK = registerBlock("sapphire_block",
- () -> new Block(BlockBehaviour.Properties.copy(Blocks.IRON_BLOCK).sound(SoundType.AMETHYST)));
+ // @formatter:off
+ public static final RegistryObject SAPPHIRE_BLOCK =
+ registerBlock("sapphire_block",
+ () -> new Block(
+ BlockBehaviour.Properties.copy(Blocks.IRON_BLOCK)
+ .sound(SoundType.AMETHYST)));
- public static final RegistryObject RAW_SAPPHIRE_BLOCK = registerBlock("raw_sapphire_block",
- () -> new Block(BlockBehaviour.Properties.copy(Blocks.RAW_IRON_BLOCK).sound(SoundType.AMETHYST)));
+ public static final RegistryObject RAW_SAPPHIRE_BLOCK =
+ registerBlock("raw_sapphire_block",
+ () -> new Block(
+ BlockBehaviour.Properties.copy(Blocks.RAW_IRON_BLOCK)
+ .sound(SoundType.AMETHYST)));
+ public static final RegistryObject SAPPHIRE_ORE =
+ registerBlock("sapphire_ore",
+ () -> new DropExperienceBlock(
+ BlockBehaviour.Properties.copy(Blocks.STONE)
+ .strength(2f)
+ .sound(SoundType.AMETHYST_CLUSTER)
+ .requiresCorrectToolForDrops(), UniformInt.of(3, 6)));
+
+ public static final RegistryObject DEEPSLATE_SAPPHIRE_ORE =
+ registerBlock("deepslate_sapphire_ore",
+ () -> new DropExperienceBlock(
+ BlockBehaviour.Properties.copy(Blocks.DEEPSLATE_DIAMOND_ORE)
+ .strength(3f)
+ .sound(SoundType.DEEPSLATE)
+ .requiresCorrectToolForDrops(), UniformInt.of(4, 6)));
+
+ public static final RegistryObject NETHER_SAPPHIRE_ORE =
+ registerBlock("nether_sapphire_ore",
+ () -> new DropExperienceBlock(
+ BlockBehaviour.Properties.copy(Blocks.NETHER_GOLD_ORE)
+ .strength(1f)
+ .sound(SoundType.NETHER_ORE)
+ .requiresCorrectToolForDrops(), UniformInt.of(2, 5)));
+
+ public static final RegistryObject END_STONE_SAPPHIRE_ORE =
+ registerBlock("end_stone_sapphire_ore",
+ () -> new DropExperienceBlock(
+ BlockBehaviour.Properties.copy(Blocks.END_STONE)
+ .strength(2f)
+ .sound(SoundType.NETHER_ORE)
+ .requiresCorrectToolForDrops(), UniformInt.of(10, 30)));
+
+ // @formatter:on
// Methods //
public static void register(IEventBus eventBus) {
BLOCKS.register(eventBus);
diff --git a/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java b/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java
index 03251d4..2e131e5 100644
--- a/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java
+++ b/src/main/java/cc/toph/tutorialmod/item/ModCreativeTabs.java
@@ -25,5 +25,9 @@ public class ModCreativeTabs {
pOut.accept(ModItems.RAW_SAPPHIRE.get());
pOut.accept(ModBlocks.SAPPHIRE_BLOCK.get());
pOut.accept(ModBlocks.RAW_SAPPHIRE_BLOCK.get());
+ pOut.accept(ModBlocks.SAPPHIRE_ORE.get());
+ pOut.accept(ModBlocks.DEEPSLATE_SAPPHIRE_ORE.get());
+ pOut.accept(ModBlocks.END_STONE_SAPPHIRE_ORE.get());
+ pOut.accept(ModBlocks.NETHER_SAPPHIRE_ORE.get());
}).build());
}
diff --git a/src/main/resources/assets/tutorialmod/blockstates/deepslate_sapphire_ore.json b/src/main/resources/assets/tutorialmod/blockstates/deepslate_sapphire_ore.json
new file mode 100644
index 0000000..d3cbc84
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/blockstates/deepslate_sapphire_ore.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "tutorialmod:block/deepslate_sapphire_ore"
+ }
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/blockstates/end_stone_sapphire_ore.json b/src/main/resources/assets/tutorialmod/blockstates/end_stone_sapphire_ore.json
new file mode 100644
index 0000000..91c23bf
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/blockstates/end_stone_sapphire_ore.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "tutorialmod:block/end_stone_sapphire_ore"
+ }
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/blockstates/nether_sapphire_ore.json b/src/main/resources/assets/tutorialmod/blockstates/nether_sapphire_ore.json
new file mode 100644
index 0000000..2bcef3a
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/blockstates/nether_sapphire_ore.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "tutorialmod:block/nether_sapphire_ore"
+ }
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/blockstates/sapphire_ore.json b/src/main/resources/assets/tutorialmod/blockstates/sapphire_ore.json
new file mode 100644
index 0000000..ee65eb1
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/blockstates/sapphire_ore.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "tutorialmod:block/sapphire_ore"
+ }
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/lang/en_us.json b/src/main/resources/assets/tutorialmod/lang/en_us.json
index c5aa50c..9000c7f 100644
--- a/src/main/resources/assets/tutorialmod/lang/en_us.json
+++ b/src/main/resources/assets/tutorialmod/lang/en_us.json
@@ -4,6 +4,10 @@
"block.tutorialmod.sapphire_block": "Block of Sapphire",
"block.tutorialmod.raw_sapphire_block": "Block of Raw Sapphire",
+ "block.tutorialmod.sapphire_ore": "Sapphire Ore",
+ "block.tutorialmod.deepslate_sapphire_ore": "Deepslate Sapphire Ore",
+ "block.tutorialmod.nether_sapphire_ore": "Netherack Sapphire Ore",
+ "block.tutorialmod.end_stone_sapphire_ore": "End Stone Sapphire Ore",
"creativetab.tutorial_tab": "Sapphire Tab"
}
diff --git a/src/main/resources/assets/tutorialmod/models/block/deepslate_sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/block/deepslate_sapphire_ore.json
new file mode 100644
index 0000000..5e209e2
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/block/deepslate_sapphire_ore.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cube_all",
+ "textures": {
+ "all": "tutorialmod:block/deepslate_sapphire_ore"
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/models/block/end_stone_sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/block/end_stone_sapphire_ore.json
new file mode 100644
index 0000000..3cd10ea
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/block/end_stone_sapphire_ore.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cube_all",
+ "textures": {
+ "all": "tutorialmod:block/end_stone_sapphire_ore"
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/models/block/nether_sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/block/nether_sapphire_ore.json
new file mode 100644
index 0000000..9ddcd1a
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/block/nether_sapphire_ore.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cube_all",
+ "textures": {
+ "all": "tutorialmod:block/nether_sapphire_ore"
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/models/block/sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/block/sapphire_ore.json
new file mode 100644
index 0000000..8ebbe77
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/block/sapphire_ore.json
@@ -0,0 +1,6 @@
+{
+ "parent": "minecraft:block/cube_all",
+ "textures": {
+ "all": "tutorialmod:block/sapphire_ore"
+ }
+}
diff --git a/src/main/resources/assets/tutorialmod/models/item/deepslate_sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/item/deepslate_sapphire_ore.json
new file mode 100644
index 0000000..5044cbd
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/item/deepslate_sapphire_ore.json
@@ -0,0 +1,3 @@
+{
+ "parent": "tutorialmod:block/deepslate_sapphire_ore"
+}
diff --git a/src/main/resources/assets/tutorialmod/models/item/end_stone_sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/item/end_stone_sapphire_ore.json
new file mode 100644
index 0000000..e6e65d1
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/item/end_stone_sapphire_ore.json
@@ -0,0 +1,3 @@
+{
+ "parent": "tutorialmod:block/end_stone_sapphire_ore"
+}
diff --git a/src/main/resources/assets/tutorialmod/models/item/nether_sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/item/nether_sapphire_ore.json
new file mode 100644
index 0000000..1c3c9f4
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/item/nether_sapphire_ore.json
@@ -0,0 +1,3 @@
+{
+ "parent": "tutorialmod:block/nether_sapphire_ore"
+}
diff --git a/src/main/resources/assets/tutorialmod/models/item/sapphire_ore.json b/src/main/resources/assets/tutorialmod/models/item/sapphire_ore.json
new file mode 100644
index 0000000..915046e
--- /dev/null
+++ b/src/main/resources/assets/tutorialmod/models/item/sapphire_ore.json
@@ -0,0 +1,3 @@
+{
+ "parent": "tutorialmod:block/sapphire_ore"
+}
diff --git a/src/main/resources/assets/tutorialmod/textures/block/deepslate_sapphire_ore.png b/src/main/resources/assets/tutorialmod/textures/block/deepslate_sapphire_ore.png
new file mode 100644
index 0000000..4b782c6
Binary files /dev/null and b/src/main/resources/assets/tutorialmod/textures/block/deepslate_sapphire_ore.png differ
diff --git a/src/main/resources/assets/tutorialmod/textures/block/end_stone_sapphire_ore.png b/src/main/resources/assets/tutorialmod/textures/block/end_stone_sapphire_ore.png
new file mode 100644
index 0000000..e110a6d
Binary files /dev/null and b/src/main/resources/assets/tutorialmod/textures/block/end_stone_sapphire_ore.png differ
diff --git a/src/main/resources/assets/tutorialmod/textures/block/nether_sapphire_ore.png b/src/main/resources/assets/tutorialmod/textures/block/nether_sapphire_ore.png
new file mode 100644
index 0000000..ca2b8a1
Binary files /dev/null and b/src/main/resources/assets/tutorialmod/textures/block/nether_sapphire_ore.png differ
diff --git a/src/main/resources/assets/tutorialmod/textures/block/sapphire_ore.png b/src/main/resources/assets/tutorialmod/textures/block/sapphire_ore.png
new file mode 100644
index 0000000..767602a
Binary files /dev/null and b/src/main/resources/assets/tutorialmod/textures/block/sapphire_ore.png differ
diff --git a/src/main/resources/data/forge/tags/blocks/needs_netherite_tool.json b/src/main/resources/data/forge/tags/blocks/needs_netherite_tool.json
new file mode 100644
index 0000000..8252388
--- /dev/null
+++ b/src/main/resources/data/forge/tags/blocks/needs_netherite_tool.json
@@ -0,0 +1,3 @@
+{
+ "values": []
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json
new file mode 100644
index 0000000..8252388
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json
@@ -0,0 +1,3 @@
+{
+ "values": []
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json
new file mode 100644
index 0000000..8252388
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json
@@ -0,0 +1,3 @@
+{
+ "values": []
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json
new file mode 100644
index 0000000..fe363c3
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json
@@ -0,0 +1,10 @@
+{
+ "values": [
+ "tutorialmod:sapphire_block",
+ "tutorialmod:raw_sapphire_block",
+ "tutorialmod:sapphire_ore",
+ "tutorialmod:deepslate_sapphire_ore",
+ "tutorialmod:end_stone_sapphire_ore",
+ "tutorialmod:nether_sapphire_ore"
+ ]
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json b/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json
new file mode 100644
index 0000000..8252388
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json
@@ -0,0 +1,3 @@
+{
+ "values": []
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json
new file mode 100644
index 0000000..fe363c3
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/needs_diamond_tool.json
@@ -0,0 +1,10 @@
+{
+ "values": [
+ "tutorialmod:sapphire_block",
+ "tutorialmod:raw_sapphire_block",
+ "tutorialmod:sapphire_ore",
+ "tutorialmod:deepslate_sapphire_ore",
+ "tutorialmod:end_stone_sapphire_ore",
+ "tutorialmod:nether_sapphire_ore"
+ ]
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json
new file mode 100644
index 0000000..8252388
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/needs_iron_tool.json
@@ -0,0 +1,3 @@
+{
+ "values": []
+}
diff --git a/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json
new file mode 100644
index 0000000..8252388
--- /dev/null
+++ b/src/main/resources/data/minecraft/tags/blocks/needs_stone_tool.json
@@ -0,0 +1,3 @@
+{
+ "values": []
+}
diff --git a/src/main/resources/data/tutorialmod/loot_tables/blocks/deepslate_sapphire_ore.json b/src/main/resources/data/tutorialmod/loot_tables/blocks/deepslate_sapphire_ore.json
new file mode 100644
index 0000000..cbeccb7
--- /dev/null
+++ b/src/main/resources/data/tutorialmod/loot_tables/blocks/deepslate_sapphire_ore.json
@@ -0,0 +1,59 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "tutorialmod:deepslate_sapphire_ore"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "add": false,
+ "count": {
+ "type": "minecraft:uniform",
+ "max": 40.0,
+ "min": 2.0
+ },
+ "function": "minecraft:set_count"
+ },
+ {
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops",
+ "function": "minecraft:apply_bonus"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "tutorialmod:raw_sapphire"
+ }
+ ]
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "tutorialmod:blocks/deepslate_sapphire_ore"
+}
diff --git a/src/main/resources/data/tutorialmod/loot_tables/blocks/end_stone_sapphire_ore.json b/src/main/resources/data/tutorialmod/loot_tables/blocks/end_stone_sapphire_ore.json
new file mode 100644
index 0000000..5cea2f0
--- /dev/null
+++ b/src/main/resources/data/tutorialmod/loot_tables/blocks/end_stone_sapphire_ore.json
@@ -0,0 +1,59 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "tutorialmod:end_stone_sapphire_ore"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "add": false,
+ "count": {
+ "type": "minecraft:uniform",
+ "max": 40.0,
+ "min": 2.0
+ },
+ "function": "minecraft:set_count"
+ },
+ {
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops",
+ "function": "minecraft:apply_bonus"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "tutorialmod:raw_sapphire"
+ }
+ ]
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "tutorialmod:blocks/end_stone_sapphire_ore"
+}
diff --git a/src/main/resources/data/tutorialmod/loot_tables/blocks/nether_sapphire_ore.json b/src/main/resources/data/tutorialmod/loot_tables/blocks/nether_sapphire_ore.json
new file mode 100644
index 0000000..7bd4ba4
--- /dev/null
+++ b/src/main/resources/data/tutorialmod/loot_tables/blocks/nether_sapphire_ore.json
@@ -0,0 +1,59 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "tutorialmod:nether_sapphire_ore"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "add": false,
+ "count": {
+ "type": "minecraft:uniform",
+ "max": 40.0,
+ "min": 2.0
+ },
+ "function": "minecraft:set_count"
+ },
+ {
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops",
+ "function": "minecraft:apply_bonus"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "tutorialmod:raw_sapphire"
+ }
+ ]
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "tutorialmod:blocks/nether_sapphire_ore"
+}
diff --git a/src/main/resources/data/tutorialmod/loot_tables/blocks/raw_sapphire_block.json b/src/main/resources/data/tutorialmod/loot_tables/blocks/raw_sapphire_block.json
new file mode 100644
index 0000000..7f42a5f
--- /dev/null
+++ b/src/main/resources/data/tutorialmod/loot_tables/blocks/raw_sapphire_block.json
@@ -0,0 +1,21 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ],
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "tutorialmod:raw_sapphire_block"
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "tutorialmod:blocks/sapphire_block"
+}
diff --git a/src/main/resources/data/tutorialmod/loot_tables/blocks/sapphire_block.json b/src/main/resources/data/tutorialmod/loot_tables/blocks/sapphire_block.json
new file mode 100644
index 0000000..3e02649
--- /dev/null
+++ b/src/main/resources/data/tutorialmod/loot_tables/blocks/sapphire_block.json
@@ -0,0 +1,21 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ],
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "tutorialmod:sapphire_block"
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "tutorialmod:blocks/sapphire_block"
+}
diff --git a/src/main/resources/data/tutorialmod/loot_tables/blocks/sapphire_ore.json b/src/main/resources/data/tutorialmod/loot_tables/blocks/sapphire_ore.json
new file mode 100644
index 0000000..63c0bf2
--- /dev/null
+++ b/src/main/resources/data/tutorialmod/loot_tables/blocks/sapphire_ore.json
@@ -0,0 +1,59 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "entries": [
+ {
+ "type": "minecraft:alternatives",
+ "children": [
+ {
+ "type": "minecraft:item",
+ "conditions": [
+ {
+ "condition": "minecraft:match_tool",
+ "predicate": {
+ "enchantments": [
+ {
+ "enchantment": "minecraft:silk_touch",
+ "levels": {
+ "min": 1
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "name": "tutorialmod:sapphire_ore"
+ },
+ {
+ "type": "minecraft:item",
+ "functions": [
+ {
+ "add": false,
+ "count": {
+ "type": "minecraft:uniform",
+ "max": 40.0,
+ "min": 2.0
+ },
+ "function": "minecraft:set_count"
+ },
+ {
+ "enchantment": "minecraft:fortune",
+ "formula": "minecraft:ore_drops",
+ "function": "minecraft:apply_bonus"
+ },
+ {
+ "function": "minecraft:explosion_decay"
+ }
+ ],
+ "name": "tutorialmod:raw_sapphire"
+ }
+ ]
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "tutorialmod:blocks/sapphire_ore"
+}