This commit is contained in:
Glitchlabs
2026-05-09 13:17:29 +02:00
parent 9616bb4993
commit ee23e1357c
24 changed files with 344 additions and 38 deletions
+1 -1
View File
@@ -29,7 +29,7 @@ mod_name=Processed obsidian
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=All Rights Reserved mod_license=All Rights Reserved
# The mod version. See https://semver.org/ # The mod version. See https://semver.org/
mod_version=1.0.0 mod_version=2.1.0
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources. # This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html # See https://maven.apache.org/guides/mini/guide-naming-conventions.html
@@ -1,2 +1,8 @@
// 1.21.1 2026-04-27T21:59:02.410668709 Item Models: processed_obsidian // 1.21.1 2026-05-01T11:36:16.667550553 Item Models: processed_obsidian
dfd6d5e102d95ae2258ca88062d06edf16e8fab1 assets/processed_obsidian/models/item/obsidian_alloy.json
6ea8b1deedf52e165d8cc060cc318097f7b58cbb assets/processed_obsidian/models/item/obsidian_boots.json
f9e772c69f1ec06dfbd7711b2112c575368b06e3 assets/processed_obsidian/models/item/obsidian_chestplate.json
e4b0a25a058313fe86e228b769ea1106b6f5bb56 assets/processed_obsidian/models/item/obsidian_dust.json e4b0a25a058313fe86e228b769ea1106b6f5bb56 assets/processed_obsidian/models/item/obsidian_dust.json
eb06b02520ce67b07b617e1f79ae3f4f887b53f6 assets/processed_obsidian/models/item/obsidian_helmet.json
073a780f29b98409d8b869c0b34a628e61c261ba assets/processed_obsidian/models/item/obsidian_leggings.json
d422c6c102931fbed51a0d87698413a63d5760f2 assets/processed_obsidian/models/item/obsidian_upgrade_smithing_template.json
@@ -71,6 +71,14 @@ public class Processed_obsidian {
} }
if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) { if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
event.accept(ModItems.OBSIDIAN_DUST.get()); event.accept(ModItems.OBSIDIAN_DUST.get());
event.accept(ModItems.OBSIDIAN_ALLOY.get());
event.accept(ModItems.OBSIDIAN_UPGRADE_SMITHING_TEMPLATE.get());
}
if (event.getTabKey() == CreativeModeTabs.COMBAT) {
event.accept(ModItems.OBSIDIAN_HELMET.get());
event.accept(ModItems.OBSIDIAN_CHESTPLATE.get());
event.accept(ModItems.OBSIDIAN_LEGGINGS.get());
event.accept(ModItems.OBSIDIAN_BOOTS.get());
} }
} }
@@ -1,14 +1,10 @@
package ovh.glitchlabs.processed_obsidian.blocks; package ovh.glitchlabs.processed_obsidian.blocks;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.DropExperienceBlock; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
import net.minecraft.world.level.material.MapColor;
import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.registries.DeferredBlock; import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.DeferredRegister;
@@ -17,53 +13,28 @@ import ovh.glitchlabs.processed_obsidian.items.ModItems;
import java.util.function.Supplier; import java.util.function.Supplier;
public class ModBlocks { public class ModBlocks {
public static final DeferredRegister.Blocks BLOCKS = public static final DeferredRegister.Blocks BLOCKS =
DeferredRegister.createBlocks(Processed_obsidian.MODID); DeferredRegister.createBlocks(Processed_obsidian.MODID);
public static final DeferredBlock<Block> OBSIDIAN_BRICKS = registerBlock("obsidian_bricks", public static final DeferredBlock<Block> OBSIDIAN_BRICKS = registerBlock("obsidian_bricks",
() -> new Block(BlockBehaviour.Properties.of() () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OBSIDIAN)
.strength(50.0F)
.requiresCorrectToolForDrops()
.explosionResistance(1200.0F)
.instrument(NoteBlockInstrument.BASEDRUM)
.mapColor(MapColor.COLOR_BLACK)
)); ));
public static final DeferredBlock<Block> CRACKED_OBSIDIAN_BRICKS = registerBlock("cracked_obsidian_bricks", public static final DeferredBlock<Block> CRACKED_OBSIDIAN_BRICKS = registerBlock("cracked_obsidian_bricks",
() -> new Block(BlockBehaviour.Properties.of() () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OBSIDIAN)
.strength(50.0F)
.requiresCorrectToolForDrops()
.explosionResistance(1200.0F)
.instrument(NoteBlockInstrument.BASEDRUM)
.mapColor(MapColor.COLOR_BLACK)
)); ));
public static final DeferredBlock<Block> OBSIDIAN_TILES = registerBlock("obsidian_tiles", public static final DeferredBlock<Block> OBSIDIAN_TILES = registerBlock("obsidian_tiles",
() -> new Block(BlockBehaviour.Properties.of() () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OBSIDIAN)
.strength(50.0F)
.requiresCorrectToolForDrops()
.explosionResistance(1200.0F)
.instrument(NoteBlockInstrument.BASEDRUM)
.mapColor(MapColor.COLOR_BLACK)
)); ));
public static final DeferredBlock<Block> CRACKED_OBSIDIAN_TILES = registerBlock("cracked_obsidian_tiles", public static final DeferredBlock<Block> CRACKED_OBSIDIAN_TILES = registerBlock("cracked_obsidian_tiles",
() -> new Block(BlockBehaviour.Properties.of() () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OBSIDIAN)
.strength(50.0F)
.requiresCorrectToolForDrops()
.explosionResistance(1200.0F)
.instrument(NoteBlockInstrument.BASEDRUM)
.mapColor(MapColor.COLOR_BLACK)
)); ));
public static final DeferredBlock<Block> POLISHED_OBSIDIAN = registerBlock("polished_obsidian", public static final DeferredBlock<Block> POLISHED_OBSIDIAN = registerBlock("polished_obsidian",
() -> new Block(BlockBehaviour.Properties.of() () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.OBSIDIAN)
.strength(50.0F)
.requiresCorrectToolForDrops()
.explosionResistance(1200.0F)
.instrument(NoteBlockInstrument.BASEDRUM)
.mapColor(MapColor.COLOR_BLACK)
)); ));
private static <T extends Block> DeferredBlock<T> registerBlock(String name, Supplier<T> block) { private static <T extends Block> DeferredBlock<T> registerBlock(String name, Supplier<T> block) {
@@ -33,6 +33,8 @@ public class DataGenerators {
BlockTagsProvider blockTagsProvider = new ModBlockTagProvider(packOutput, lookupProvider, existingFileHelper); BlockTagsProvider blockTagsProvider = new ModBlockTagProvider(packOutput, lookupProvider, existingFileHelper);
generator.addProvider(event.includeServer(), blockTagsProvider); generator.addProvider(event.includeServer(), blockTagsProvider);
generator.addProvider(event.includeServer(), new ModItemTagProvider(packOutput, lookupProvider, blockTagsProvider.contentsGetter(), existingFileHelper));
generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper)); generator.addProvider(event.includeClient(), new ModItemModelProvider(packOutput, existingFileHelper));
generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper)); generator.addProvider(event.includeClient(), new ModBlockStateProvider(packOutput, existingFileHelper));
} }
@@ -14,5 +14,12 @@ public class ModItemModelProvider extends ItemModelProvider {
@Override @Override
protected void registerModels() { protected void registerModels() {
basicItem(ModItems.OBSIDIAN_DUST.get()); basicItem(ModItems.OBSIDIAN_DUST.get());
basicItem(ModItems.OBSIDIAN_UPGRADE_SMITHING_TEMPLATE.get());
basicItem(ModItems.OBSIDIAN_ALLOY.get());
basicItem(ModItems.OBSIDIAN_HELMET.get());
basicItem(ModItems.OBSIDIAN_CHESTPLATE.get());
basicItem(ModItems.OBSIDIAN_LEGGINGS.get());
basicItem(ModItems.OBSIDIAN_BOOTS.get());
} }
} }
@@ -0,0 +1,85 @@
package ovh.glitchlabs.processed_obsidian.datagen;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.data.tags.ItemTagsProvider;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import org.jetbrains.annotations.Nullable;
import ovh.glitchlabs.processed_obsidian.Processed_obsidian;
import ovh.glitchlabs.processed_obsidian.items.ModItems;
import java.util.concurrent.CompletableFuture;
public class ModItemTagProvider extends ItemTagsProvider {
public ModItemTagProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> lookupProvider,
CompletableFuture<TagLookup<Block>> blockTags, @Nullable ExistingFileHelper existingFileHelper) {
super(output, lookupProvider, blockTags, Processed_obsidian.MODID, existingFileHelper);
}
@Override
protected void addTags(HolderLookup.Provider provider) {
this.tag(ItemTags.TRIMMABLE_ARMOR)
.add(ModItems.OBSIDIAN_HELMET.get())
.add(ModItems.OBSIDIAN_CHESTPLATE.get())
.add(ModItems.OBSIDIAN_LEGGINGS.get())
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.ARMOR_ENCHANTABLE)
.add(ModItems.OBSIDIAN_HELMET.get())
.add(ModItems.OBSIDIAN_CHESTPLATE.get())
.add(ModItems.OBSIDIAN_LEGGINGS.get())
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.VANISHING_ENCHANTABLE)
.add(ModItems.OBSIDIAN_HELMET.get())
.add(ModItems.OBSIDIAN_CHESTPLATE.get())
.add(ModItems.OBSIDIAN_LEGGINGS.get())
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.DURABILITY_ENCHANTABLE)
.add(ModItems.OBSIDIAN_HELMET.get())
.add(ModItems.OBSIDIAN_CHESTPLATE.get())
.add(ModItems.OBSIDIAN_LEGGINGS.get())
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.EQUIPPABLE_ENCHANTABLE)
.add(ModItems.OBSIDIAN_HELMET.get())
.add(ModItems.OBSIDIAN_CHESTPLATE.get())
.add(ModItems.OBSIDIAN_LEGGINGS.get())
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.ARMOR_ENCHANTABLE)
.add(ModItems.OBSIDIAN_HELMET.get())
.add(ModItems.OBSIDIAN_CHESTPLATE.get())
.add(ModItems.OBSIDIAN_LEGGINGS.get())
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.CHEST_ARMOR_ENCHANTABLE)
.add(ModItems.OBSIDIAN_CHESTPLATE.get());
this.tag(ItemTags.FOOT_ARMOR_ENCHANTABLE)
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.LEG_ARMOR_ENCHANTABLE)
.add(ModItems.OBSIDIAN_LEGGINGS.get());
this.tag(ItemTags.HEAD_ARMOR_ENCHANTABLE)
.add(ModItems.OBSIDIAN_HELMET.get());
this.tag(ItemTags.CHEST_ARMOR)
.add(ModItems.OBSIDIAN_CHESTPLATE.get());
this.tag(ItemTags.FOOT_ARMOR)
.add(ModItems.OBSIDIAN_BOOTS.get());
this.tag(ItemTags.LEG_ARMOR)
.add(ModItems.OBSIDIAN_LEGGINGS.get());
this.tag(ItemTags.HEAD_ARMOR)
.add(ModItems.OBSIDIAN_HELMET.get());
}
}
@@ -0,0 +1,47 @@
package ovh.glitchlabs.processed_obsidian.items;
import net.minecraft.Util;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.crafting.Ingredient;
import ovh.glitchlabs.processed_obsidian.Processed_obsidian;
import java.util.EnumMap;
import java.util.List;
import java.util.function.Supplier;
public class ModArmorMaterials {
public static final Holder<ArmorMaterial> OBSIDIAN_ARMOR_MATERIAL = register("obsidian",
Util.make(new EnumMap<>(ArmorItem.Type.class), attribute -> {
attribute.put(ArmorItem.Type.BOOTS, 5);
attribute.put(ArmorItem.Type.LEGGINGS, 7);
attribute.put(ArmorItem.Type.CHESTPLATE, 9);
attribute.put(ArmorItem.Type.HELMET, 5);
attribute.put(ArmorItem.Type.BODY, 12);
}), 16, 2f, 0.1f, () -> ModItems.OBSIDIAN_ALLOY.get());
private static Holder<ArmorMaterial> register(String name, EnumMap<ArmorItem.Type, Integer> typeProtection,
int enchantability, float toughness, float knockbackResistance,
Supplier<Item> ingredientItem) {
ResourceLocation location = ResourceLocation.fromNamespaceAndPath(Processed_obsidian.MODID, name);
Holder<SoundEvent> equipSound = SoundEvents.ARMOR_EQUIP_NETHERITE;
Supplier<Ingredient> ingredient = () -> Ingredient.of(ingredientItem.get());
List<ArmorMaterial.Layer> layers = List.of(new ArmorMaterial.Layer(location));
EnumMap<ArmorItem.Type, Integer> typeMap = new EnumMap<>(ArmorItem.Type.class);
for (ArmorItem.Type type : ArmorItem.Type.values()) {
typeMap.put(type, typeProtection.get(type));
}
return Registry.registerForHolder(BuiltInRegistries.ARMOR_MATERIAL, location,
new ArmorMaterial(typeProtection, enchantability, equipSound, ingredient, layers, toughness, knockbackResistance));
}
}
@@ -1,5 +1,6 @@
package ovh.glitchlabs.processed_obsidian.items; package ovh.glitchlabs.processed_obsidian.items;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity; import net.minecraft.world.item.Rarity;
import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.IEventBus;
@@ -16,6 +17,32 @@ public class ModItems {
.rarity(Rarity.RARE) .rarity(Rarity.RARE)
)); ));
public static final DeferredItem<ObsidianUpgradeSmithingTemplateItem> OBSIDIAN_UPGRADE_SMITHING_TEMPLATE = ITEMS.register("obsidian_upgrade_smithing_template",
() -> new ObsidianUpgradeSmithingTemplateItem(new Item.Properties()
.rarity(Rarity.EPIC)
));
public static final DeferredItem<ObsidianUpgradeSmithingTemplateItem> OBSIDIAN_ALLOY = ITEMS.register("obsidian_alloy",
() -> new ObsidianUpgradeSmithingTemplateItem(new Item.Properties()
.rarity(Rarity.RARE)
.fireResistant()
));
public static final DeferredItem<ArmorItem> OBSIDIAN_HELMET = ITEMS.register("obsidian_helmet",
() -> new ArmorItem(ModArmorMaterials.OBSIDIAN_ARMOR_MATERIAL, ArmorItem.Type.HELMET,
new Item.Properties().durability(ArmorItem.Type.HELMET.getDurability(19))));
public static final DeferredItem<ArmorItem> OBSIDIAN_CHESTPLATE = ITEMS.register("obsidian_chestplate",
() -> new ArmorItem(ModArmorMaterials.OBSIDIAN_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE,
new Item.Properties().durability(ArmorItem.Type.CHESTPLATE.getDurability(19))));
public static final DeferredItem<ArmorItem> OBSIDIAN_LEGGINGS = ITEMS.register("obsidian_leggings",
() -> new ArmorItem(ModArmorMaterials.OBSIDIAN_ARMOR_MATERIAL, ArmorItem.Type.LEGGINGS,
new Item.Properties().durability(ArmorItem.Type.LEGGINGS.getDurability(19))));
public static final DeferredItem<ArmorItem> OBSIDIAN_BOOTS = ITEMS.register("obsidian_boots",
() -> new ArmorItem(ModArmorMaterials.OBSIDIAN_ARMOR_MATERIAL, ArmorItem.Type.BOOTS,
new Item.Properties().durability(ArmorItem.Type.BOOTS.getDurability(19))));
public static void register(IEventBus eventBus) { public static void register(IEventBus eventBus) {
ITEMS.register(eventBus); ITEMS.register(eventBus);
} }
@@ -0,0 +1,27 @@
package ovh.glitchlabs.processed_obsidian.items;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import java.util.List;
public class ObsidianUpgradeSmithingTemplateItem extends Item {
public ObsidianUpgradeSmithingTemplateItem(Properties properties) {
super(properties);
}
@Override
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
super.appendHoverText(stack, context, tooltipComponents, tooltipFlag);
tooltipComponents.add(Component.translatable("upgrade.processed_obsidian.obsidian_upgrade").withStyle(ChatFormatting.GRAY));
tooltipComponents.add(Component.empty());
tooltipComponents.add(Component.translatable("item.minecraft.smithing_template.applies_to").withStyle(ChatFormatting.GRAY));
tooltipComponents.add(Component.translatable("item.processed_obsidian.smithing_template.Obsidian_upgrade.applies_to").withStyle(ChatFormatting.BLUE));
tooltipComponents.add(Component.translatable("item.minecraft.smithing_template.ingredients").withStyle(ChatFormatting.GRAY));
tooltipComponents.add(Component.translatable("item.processed_obsidian.smithing_template.obsidian_upgrade.ingredients").withStyle(ChatFormatting.BLUE));
}
}
@@ -4,6 +4,17 @@
"block.processed_obsidian.polished_obsidian": "Polished Obsidian Tiles", "block.processed_obsidian.polished_obsidian": "Polished Obsidian Tiles",
"block.processed_obsidian.obsidian_bricks": "Obsidian Bricks", "block.processed_obsidian.obsidian_bricks": "Obsidian Bricks",
"block.processed_obsidian.cracked_obsidian_bricks": "Cracked Obsidian Bricks", "block.processed_obsidian.cracked_obsidian_bricks": "Cracked Obsidian Bricks",
"upgrade.processed_obsidian.obsidian_upgrade" : "Obsidian Upgrade",
"item.processed_obsidian.obsidian_alloy" : "Obsidian Alloy",
"item.processed_obsidian.smithing_template.Obsidian_upgrade.applies_to" : "Obsidian Equipment",
"item.processed_obsidian.smithing_template.obsidian_upgrade.ingredients" : "Obsidian Alloy",
"item.processed_obsidian.obsidian_upgrade_smithing_template" : "Smithing Template",
"item.processed_obsidian.obsidian_helmet" : "Obsidian Helmet",
"item.processed_obsidian.obsidian_chestplate" : "Obsidian Chestplate",
"item.processed_obsidian.obsidian_leggings" : "Obsidian Leggings",
"item.processed_obsidian.obsidian_boots" : "Obsidian Boots",
"item.processed_obsidian.obsidian_dust": "Obsidian Dust" "item.processed_obsidian.obsidian_dust": "Obsidian Dust"
} }
Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

@@ -0,0 +1,22 @@
{
"type": "minecraft:crafting_shaped",
"group": "processed_obsidian",
"category": "building",
"pattern": [
"OOO",
"ONO",
"OOO"
],
"key": {
"O": {
"item": "processed_obsidian:obsidian_dust"
},
"N": {
"item": "minecraft:netherite_ingot"
}
},
"result": {
"id": "processed_obsidian:obsidian_alloy",
"count": 1
}
}
@@ -0,0 +1,17 @@
{
"type": "minecraft:smithing_transform",
"group": "processed_obsidian",
"addition": {
"item": "processed_obsidian:obsidian_alloy"
},
"base": {
"item": "minecraft:netherite_boots"
},
"result": {
"count": 1,
"id": "processed_obsidian:obsidian_boots"
},
"template": {
"item": "processed_obsidian:obsidian_upgrade_smithing_template"
}
}
@@ -0,0 +1,17 @@
{
"type": "minecraft:smithing_transform",
"group": "processed_obsidian",
"addition": {
"item": "processed_obsidian:obsidian_alloy"
},
"base": {
"item": "minecraft:netherite_chestplate"
},
"result": {
"count": 1,
"id": "processed_obsidian:obsidian_chestplate"
},
"template": {
"item": "processed_obsidian:obsidian_upgrade_smithing_template"
}
}
@@ -0,0 +1,17 @@
{
"type": "minecraft:smithing_transform",
"group": "processed_obsidian",
"addition": {
"item": "processed_obsidian:obsidian_alloy"
},
"base": {
"item": "minecraft:netherite_helmet"
},
"result": {
"count": 1,
"id": "processed_obsidian:obsidian_helmet"
},
"template": {
"item": "processed_obsidian:obsidian_upgrade_smithing_template"
}
}
@@ -0,0 +1,17 @@
{
"type": "minecraft:smithing_transform",
"group": "processed_obsidian",
"addition": {
"item": "processed_obsidian:obsidian_alloy"
},
"base": {
"item": "minecraft:netherite_leggings"
},
"result": {
"count": 1,
"id": "processed_obsidian:obsidian_leggings"
},
"template": {
"item": "processed_obsidian:obsidian_upgrade_smithing_template"
}
}
@@ -0,0 +1,25 @@
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "boat",
"key": {
"#": {
"item": "processed_obsidian:obsidian_dust"
},
"A": {
"item": "processed_obsidian:obsidian_alloy"
},
"U": {
"item": "minecraft:netherite_upgrade_smithing_template"
}
},
"pattern": [
"#A#",
"AUA",
"#A#"
],
"result": {
"count": 1,
"id": "processed_obsidian:obsidian_upgrade_smithing_template"
}
}