Push some experimental new features

This commit is contained in:
Zontreck 2022-05-30 01:38:58 -07:00
parent 620207a49c
commit 1ce264862e
44 changed files with 720 additions and 2 deletions

View file

@ -16,7 +16,7 @@ plugins {
apply plugin: 'net.minecraftforge.gradle'
version = '1.1.0'
version = '1.1.1'
group = 'dev.zontreck.shapedaionresources' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = 'shapedaionresources'

View file

@ -1,30 +1,65 @@
package dev.zontreck.shapedaionresources;
import java.util.Set;
import java.util.Map.Entry;
import com.mojang.logging.LogUtils;
import net.minecraft.core.Registry;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.event.world.BiomeLoadingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import org.slf4j.Logger;
import dev.zontreck.shapedaionresources.blocks.ModBlocks;
import dev.zontreck.shapedaionresources.configs.SARServerConfig;
import dev.zontreck.shapedaionresources.items.ModItems;
import dev.zontreck.shapedaionresources.ore.OreGenerator;
// The value here should match an entry in the META-INF/mods.toml file
@Mod("shapedaionresources")
public class ShapedAionResources
{
// Directly reference a slf4j logger
public static final Logger LOGGER = LogUtils.getLogger();
public static final String FIRST_JOIN_TAG = "dev.zontreck.shapedaionresources.firstjoin";
public static final String MOD_ID = "shapedaionresources";
public ShapedAionResources()
{
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
// Register the setup method for modloading
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup);
bus.addListener(this::setup);
ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, SARServerConfig.SPEC, "aion-rss-server.toml");
// Register ourselves for server and other game events we are interested in
MinecraftForge.EVENT_BUS.register(this);
ModBlocks.register(bus);
ModItems.register(bus);
}
private void setup(final FMLCommonSetupEvent event)
@ -39,5 +74,49 @@ public class ShapedAionResources
}
@SubscribeEvent
public static void biomeLoadingEvent(final BiomeLoadingEvent ev){
//OreGenerator.generateOres(ev);
}
@SubscribeEvent
public void onSpawn(EntityJoinWorldEvent ev){
Level w = ev.getWorld();
if(w.isClientSide){
return;
}
Entity e = ev.getEntity();
if(!(e instanceof Player))return;
Player p = (Player)e;
if(firstJoin(p)){
// Do first join actions here
/*for (Entry<String,Integer> ent : SARServerConfig.INITIAL_ITEMS_TO_GIVE_ON_FIRST_JOIN.get().entrySet()) {
Inventory i = p.getInventory();
}*/
}
}
public boolean firstJoin(Player p){
Set<String> tags = p.getTags();
if(tags.contains(ShapedAionResources.FIRST_JOIN_TAG)){
return false;
}
//p.addTag(ShapedAionResources.FIRST_JOIN_TAG);
return true;
}
}

View file

@ -0,0 +1,40 @@
package dev.zontreck.shapedaionresources.blocks;
import java.util.function.Supplier;
import dev.zontreck.shapedaionresources.ShapedAionResources;
import dev.zontreck.shapedaionresources.items.ModItems;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
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.OreBlock;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.Material;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, ShapedAionResources.MOD_ID);
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ShapedAionResources.MOD_ID);
public static void register(IEventBus bus){
BLOCKS.register(bus);
ITEMS.register(bus);
ShapedAionResources.LOGGER.info("Registering all blocks...");
}
public static final RegistryObject<Block> AION_ORE_BLOCK = BLOCKS.register("aion_ore_block", () -> new OreBlock(BlockBehaviour.Properties.of(Material.METAL)));
public static final RegistryObject<Item> AION_ORE_BLOCK_I = ITEMS.register("aion_ore_block", () -> new BlockItem(AION_ORE_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_MISC)));
public static final RegistryObject<Block> AION_BLOCK = BLOCKS.register("aion_block", () -> new Block(BlockBehaviour.Properties.of(Material.HEAVY_METAL).explosionResistance(10000).requiresCorrectToolForDrops().strength(9f)));
public static final RegistryObject<Item> AION_BLOCK_I = ITEMS.register("aion_block", () -> new BlockItem(AION_BLOCK.get(), new Item.Properties().tab(CreativeModeTab.TAB_MISC)));
}

View file

@ -0,0 +1,28 @@
package dev.zontreck.shapedaionresources.configs;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.common.ForgeConfigSpec;
public class SARServerConfig {
public static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder();
public static final ForgeConfigSpec SPEC;
public static final ForgeConfigSpec.ConfigValue<List<ItemStack>> INITIAL_ITEMS_TO_GIVE_ON_FIRST_JOIN;
static {
List<ItemStack> defaults = new ArrayList<ItemStack>();
BUILDER.push("Configuration for Shaped Aion Cubes Resources");
INITIAL_ITEMS_TO_GIVE_ON_FIRST_JOIN = BUILDER.comment("What items, identified by modid:item, to give to a brand new user on the server").define("New Player Gear", defaults);
BUILDER.pop();
SPEC=BUILDER.build();
}
}

View file

@ -0,0 +1,26 @@
package dev.zontreck.shapedaionresources.items;
import dev.zontreck.shapedaionresources.ShapedAionResources;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModItems {
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ShapedAionResources.MOD_ID);
public static final RegistryObject<Item> AION_FRAGMENT = ITEMS.register("aion_fragment", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)));
public static final RegistryObject<Item> AION_CRYSTAL = ITEMS.register("aion_crystal", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)));
public static final RegistryObject<Item> AION_RAW_ORE = ITEMS.register("aion_ore", () -> new Item(new Item.Properties().tab(CreativeModeTab.TAB_MISC)));
public static void register(IEventBus bus){
ITEMS.register(bus);
}
}

View file

@ -0,0 +1,24 @@
package dev.zontreck.shapedaionresources.ore;
import java.util.List;
import net.minecraft.world.level.levelgen.placement.BiomeFilter;
import net.minecraft.world.level.levelgen.placement.CountPlacement;
import net.minecraft.world.level.levelgen.placement.InSquarePlacement;
import net.minecraft.world.level.levelgen.placement.PlacementModifier;
import net.minecraft.world.level.levelgen.placement.RarityFilter;
public class ModdedOrePlacement {
public static List<PlacementModifier> orePlacement(PlacementModifier p_195347_, PlacementModifier p_195348_) {
return List.of(p_195347_, InSquarePlacement.spread(), p_195348_, BiomeFilter.biome());
}
public static List<PlacementModifier> commonOrePlacement(int p_195344_, PlacementModifier p_195345_) {
return orePlacement(CountPlacement.of(p_195344_), p_195345_);
}
public static List<PlacementModifier> rareOrePlacement(int p_195350_, PlacementModifier p_195351_) {
return orePlacement(RarityFilter.onAverageOnceEvery(p_195350_), p_195351_);
}
}

View file

@ -0,0 +1,48 @@
package dev.zontreck.shapedaionresources.ore;
import java.util.ArrayList;
import java.util.List;
import dev.zontreck.shapedaionresources.blocks.ModBlocks;
import net.minecraft.core.Holder;
import net.minecraft.data.worldgen.features.FeatureUtils;
import net.minecraft.data.worldgen.features.OreFeatures;
import net.minecraft.data.worldgen.placement.PlacementUtils;
import net.minecraft.data.worldgen.placement.VegetationPlacements;
import net.minecraft.world.level.levelgen.GenerationStep;
import net.minecraft.world.level.levelgen.VerticalAnchor;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.OreFeature;
import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration;
import net.minecraft.world.level.levelgen.placement.HeightRangePlacement;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraftforge.event.world.BiomeLoadingEvent;
public class OreGenerator {
public static final List<ConfiguredFeature<OreConfiguration, OreFeature>> OVERWORLD_ORES = new ArrayList();
public static final List<OreConfiguration.TargetBlockState> OVERWORLD_AION_ORE = List.of(OreConfiguration.target(OreFeatures.STONE_ORE_REPLACEABLES, ModBlocks.AION_ORE_BLOCK.get().defaultBlockState()), OreConfiguration.target(OreFeatures.DEEPSLATE_ORE_REPLACEABLES, ModBlocks.AION_ORE_BLOCK.get().defaultBlockState()));
public static final Holder<ConfiguredFeature<OreConfiguration, ?>> AION_ORE = FeatureUtils.register("aion_ore_block", Feature.ORE, new OreConfiguration(OVERWORLD_AION_ORE, 9));
//public static final Holder<PlacedFeature> EBONY_PLACED = PlacementUtils.register("ebony_placed",
//ModConfiguredFeatures.EBONY_SPAWN, VegetationPlacements.treePlacement(
//PlacementUtils.countExtra(3, 0.1f, 2)));
//public static final Holder<PlacedFeature> PINK_ROSE_PLACED = PlacementUtils.register("pink_rose_placed",
//ModConfiguredFeatures.PINK_ROSE, RarityFilter.onAverageOnceEvery(16),
//InSquarePlacement.spread(), PlacementUtils.HEIGHTMAP, BiomeFilter.biome());
public static final Holder<PlacedFeature> AION_ORE_PLACED = PlacementUtils.register("aion_ore_placed",
AION_ORE, ModdedOrePlacement.commonOrePlacement(6, // VeinsPerChunk
HeightRangePlacement.triangle(VerticalAnchor.aboveBottom(-40), VerticalAnchor.aboveBottom(40))));
public static void generateOres(final BiomeLoadingEvent ev){
List<Holder<PlacedFeature>> base = ev.getGeneration().getFeatures(GenerationStep.Decoration.UNDERGROUND_ORES);
base.add(AION_ORE_PLACED);
}
}

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "shapedaionresources:block/aion_block"
}
}
}

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "shapedaionresources:block/aion_ore_block"
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

View file

@ -0,0 +1,16 @@
{
"itemGroup.refinedfabric.materials": "RefinedFabric Materials",
"itemGroup.refinedfabric.tools": "RefinedFabric Utilities",
"itemGroup.refinedfabric.blocks": "RefinedFabric Blocks",
"item.shapedaionresources.aion_ore": "Raw Aion Ore",
"item.shapedaionresources.aion_crystal": "Aion Crystal",
"item.shapedaionresources.aion_crystal.levels": "Stored XP: ",
"item.shapedaionresources.aion_crystal.empty": "* Crystal Is Empty *",
"item.shapedaionresources.aion_crystal.need_repair": "Aion Crystal must now be repaired",
"item.shapedaionresources.aion_crystal.durability": "Durability: ",
"item.shapedaionresources.aion_fragment": "Fragmented Aion Crystal",
"block.shapedaionresources.aion_ore_block": "Aion Ore",
"block.shapedaionresources.aion_block": "Aion Block"
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "shapedaionresources:block/aion_block"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "block/cube_all",
"textures": {
"all": "shapedaionresources:block/aion_ore_block"
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "shapedaionresources:block/aion_block"
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "shapedaionresources:item/aion_crystal"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "shapedaionresources:item/aion_fragment"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "shapedaionresources:item/aion_ore"
}
}

View file

@ -0,0 +1,3 @@
{
"parent": "shapedaionresources:block/aion_ore_block"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

View file

@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"shapedaionresources:aion_ore_block"
]
}

View file

@ -0,0 +1,6 @@
{
"replace": false,
"values": [
"shapedaionresources:aion_ore_block"
]
}

View file

@ -0,0 +1,7 @@
{
"origins": [
"shapedaionresources:flutterling"
],
"enabled": true,
"allow_random": true
}

View file

@ -0,0 +1,15 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "shapedaionresources:aion_block"
}
]
}
]
}

View file

@ -0,0 +1,50 @@
{
"type": "minecraft:block",
"pools": [
{
"name": "main",
"rolls": 1.0,
"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": "shapedaionresources:aion_ore_block"
},
{
"type": "minecraft:item",
"functions": [
{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "shapedaionresources:aion_ore"
}
]
}
]
}
]
}

View file

@ -0,0 +1,23 @@
{
"name": "Flutterling",
"description": "Flutterlings are tiny, moth-like fae creatures that love living in the hollows of trees. While they are weak and fragile, they can easily climb or fly out of danger when faced with it.",
"powers": [
"flutterling:flutter",
"flutterling:night_vision",
"flutterling:flight",
"flutterling:nocturnal",
"flutterling:soundeffect",
"flutterling:armor_allergy",
"flutterling:armor_weight",
"flutterling:fae_weakness",
"flutterling:soul_lantern_allergy",
"flutterling:tiny_fae",
"extraorigins:nimble",
"extraorigins:small_appetite",
"origins:climbing"
],
"icon": {
"item": "minecraft:feather"
},
"impact": 3
}

View file

@ -0,0 +1,31 @@
{
"name": "Armor allergy",
"description": "You are very small, and struggle to wear armor without being weighed down. Additionally, you are allergic to pure iron armor, and cannot wear it.",
"hidden": true,
"type": "origins:conditioned_restrict_armor",
"head": {
"type": "origins:ingredient",
"ingredient": {
"item": "minecraft:iron_helmet"
}
},
"chest": {
"type": "origins:ingredient",
"ingredient": {
"item": "minecraft:iron_chestplate"
}
},
"legs": {
"type": "origins:ingredient",
"ingredient": {
"item": "minecraft:iron_leggings"
}
},
"feet": {
"type": "origins:ingredient",
"ingredient": {
"item": "minecraft:iron_boots"
}
},
"tick_rate": 80
}

View file

@ -0,0 +1,26 @@
{
"name": "Armor Difficulties",
"description": "You are very small, and struggle to wear armor without being weighed down. Additionally, you are allergic to pure iron armor, and cannot wear it.",
"type": "origins:conditioned_restrict_armor",
"head": {
"type": "origins:armor_value",
"comparison": ">",
"compare_to": 2
},
"chest": {
"type": "origins:armor_value",
"comparison": ">",
"compare_to": 6
},
"legs": {
"type": "origins:armor_value",
"comparison": ">",
"compare_to": 5
},
"feet": {
"type": "origins:armor_value",
"comparison": ">",
"compare_to": 2
},
"tick_rate": 80
}

View file

@ -0,0 +1,27 @@
{
"name": "Fae Weakness",
"description": "Your fae nature means that you are allergic to some variants of iron. The heat of fire within lanterns make you feel weak.",
"condition": {
"type": "origins:block_in_radius",
"block_condition": {
"type": "origins:block",
"block": "minecraft:lantern"
},
"radius": 1,
"shape": "cube",
"comparison": ">=",
"compare_to": 1
},
"type": "origins:action_over_time",
"interval": 3,
"entity_action": {
"type": "origins:apply_effect",
"effect": {
"effect": "minecraft:mining_fatigue",
"duration": 10,
"amplifier": 1,
"show_particles": false,
"show_icon": false
}
}
}

View file

@ -0,0 +1,7 @@
{
"name": "Weak Wings",
"description": "While you can glide like the best of them, you can only fly with some effort, fluttering to slowly gain altitude while gliding.",
"type": "origins:elytra_flight",
"render_elytra": true,
"texture_location": "flutterling:textures/entity/elytra.png"
}

View file

@ -0,0 +1,20 @@
{
"name": "flutter",
"hidden": true,
"type": "origins:active_self",
"entity_action": {
"type": "origins:add_velocity",
"y": 0.3,
"space": "world",
"client": true,
"server": true
},
"cooldown": 10,
"hud_render": {
"should_render": false
},
"key": {
"key": "key.origins.secondary_active",
"continuous": true
}
}

View file

@ -0,0 +1,7 @@
{
"name": "Night Vision",
"description": "Your big eyes have adapted to see within dark spaces.",
"hidden": true,
"type": "origins:night_vision",
"strength": 1
}

View file

@ -0,0 +1,27 @@
{
"name": "Nocturnal",
"description": "You are naturally nocturnal, and find yourself weaker when in the extreme brightness of sunlight. On the other hand, your adaptation to darkness means that you can see clearly even in pitch black.",
"condition": {
"type": "origins:and",
"conditions": [
{
"type": "origins:exposed_to_sun"
}
]
},
"type": "origins:stacking_status_effect",
"min_stacks": 0,
"max_stacks": 2,
"duration_per_stack": 30,
"tick_rate": 10,
"effects": [
{
"effect": "minecraft:weakness",
"duration": 100,
"amplifier": 0,
"is_ambient": true,
"show_particles": false,
"show_icon": true
}
]
}

View file

@ -0,0 +1,28 @@
{
"name": "lantern allergy",
"description": "Your fae nature means that you are allergic to some variants of iron. The heat of fire within lanterns make you feel weak.",
"hidden": true,
"condition": {
"type": "origins:block_in_radius",
"block_condition": {
"type": "origins:block",
"block": "minecraft:soul_lantern"
},
"radius": 1,
"shape": "cube",
"comparison": ">=",
"compare_to": 1
},
"type": "origins:action_over_time",
"interval": 3,
"entity_action": {
"type": "origins:apply_effect",
"effect": {
"effect": "minecraft:mining_fatigue",
"duration": 10,
"amplifier": 1,
"show_particles": false,
"show_icon": false
}
}
}

View file

@ -0,0 +1,18 @@
{
"hidden": true,
"type": "origins:active_self",
"entity_action": {
"type": "origins:play_sound",
"sound": "minecraft:entity.parrot.fly",
"volume": 1,
"pitch": 1
},
"cooldown": 10,
"hud_render": {
"should_render": false
},
"key": {
"key": "key.origins.secondary_active",
"continuous": true
}
}

View file

@ -0,0 +1,53 @@
{
"name": "Tiny Faerie",
"description": "You are tiny due to being a magical moth-like creature. You have only 5 hearts and less reach, and are only half a block tall.",
"type": "origins:multiple",
"modify_size": {
"type": "extraorigins:modify_size",
"scale": 0.25
},
"attribute_modifiers": {
"type": "origins:attribute",
"modifiers": [
{
"name": "Origin modifier",
"attribute": "minecraft:generic.max_health",
"operation": "addition",
"value": -10
},
{
"name": "Origin modifier",
"attribute": "minecraft:generic.attack_speed",
"operation": "addition",
"value": 0.5
},
{
"name": "Origin modifier",
"attribute": "minecraft:generic.movement_speed",
"operation": "addition",
"value": -0.015
},
{
"name": "Origin modifier",
"attribute": "reach-entity-attributes:attack_range",
"operation": "addition",
"value": -0.25
},
{
"name": "Origin modifier",
"attribute": "reach-entity-attributes:reach",
"operation": "addition",
"value": -1
}
]
},
"jump_modifier": {
"type": "origins:modify_jump",
"modifier": {
"name": "Origin modifier",
"operation": "multiply_total",
"value": -0.3333
}
}
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"CCC",
"CNC",
"CCC"
],
"key": {
"C": {
"item": "shapedaionresources:aion_crystal"
},
"N": {
"item": "minecraft:nether_star"
}
},
"result": {
"item": "shapedaionresources:aion_block",
"count": 1
}
}

View file

@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" F ",
"FGF",
" F "
],
"key": {
"F": {
"item": "shapedaionresources:aion_fragment"
},
"G": {
"item": "minecraft:emerald"
}
},
"result": {
"item": "shapedaionresources:aion_crystal",
"count": 1
}
}

View file

@ -0,0 +1,8 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "shapedaionresources:aion_ore_block"
},
"result": "shapedaionresources:aion_fragment",
"experience": 0.5
}

View file

@ -0,0 +1,8 @@
{
"type": "minecraft:smelting",
"ingredient": {
"item": "shapedaionresources:aion_ore"
},
"result": "shapedaionresources:aion_fragment",
"experience": 0.5
}