12 Commits

Author SHA1 Message Date
Jottyfan
d7c85d04bb upgrade to 1.21.11
Some checks failed
build / build (push) Has been cancelled
2026-01-24 14:32:08 +01:00
Jottyfan
28761d44c0 added armor
Some checks failed
build / build (push) Has been cancelled
2026-01-10 17:14:40 +01:00
Jottyfan
042df08b9b block state added
Some checks failed
build / build (push) Has been cancelled
2025-12-27 14:26:47 +01:00
Jottyfan
d4654623f4 added christmas tree as bush example
Some checks failed
build / build (push) Has been cancelled
2025-11-29 16:02:50 +01:00
Jottyfan
6f059abcce added food
Some checks failed
build / build (push) Has been cancelled
2025-11-25 17:33:07 +01:00
Jottyfan
367a48218f added tool (stick)
Some checks failed
build / build (push) Has been cancelled
2025-11-11 20:28:23 +01:00
Jottyfan
d6ea5ab7e0 additional recipes
Some checks failed
build / build (push) Has been cancelled
2025-10-29 22:56:52 +01:00
Jottyfan
a1d8b2cb58 recipes and loot tables
Some checks failed
build / build (push) Has been cancelled
2025-10-29 11:25:24 +01:00
Jottyfan
bf18dbf49b added ruby ore block
Some checks failed
build / build (push) Has been cancelled
2025-10-29 10:41:40 +01:00
jotty
4712edc42d upgrade to 1.21.9
Some checks failed
build / build (push) Has been cancelled
2025-10-01 14:35:38 +02:00
jotty
8e29bf2177 added ruby block
Some checks failed
build / build (push) Has been cancelled
2025-10-01 11:29:50 +02:00
Jottyfan
340900ac16 added ruby item
Some checks failed
build / build (push) Has been cancelled
2025-09-30 21:30:19 +02:00
68 changed files with 628 additions and 17 deletions

View File

@@ -4,10 +4,10 @@ org.gradle.parallel=true
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/develop # check these on https://fabricmc.net/develop
minecraft_version=1.21.8 minecraft_version=1.21.11
yarn_mappings=1.21.8+build.1 yarn_mappings=1.21.11+build.4
loader_version=0.16.14 loader_version=0.18.4
loom_version=1.11-SNAPSHOT loom_version=1.15-SNAPSHOT
# Mod Properties # Mod Properties
mod_version=1.0.0 mod_version=1.0.0
@@ -15,4 +15,4 @@ maven_group=de.jottyfan.minecraft
archives_base_name=gtamfmd archives_base_name=gtamfmd
# Dependencies # Dependencies
fabric_version=0.129.0+1.21.8 fabric_version=0.141.2+1.21.11

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME

View File

@@ -5,6 +5,7 @@ import net.fabricmc.api.ModInitializer;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import de.jottyfan.minecraft.block.ModBlocks;
import de.jottyfan.minecraft.item.ModItems; import de.jottyfan.minecraft.item.ModItems;
public class Gtamfmd implements ModInitializer { public class Gtamfmd implements ModInitializer {
@@ -14,6 +15,7 @@ public class Gtamfmd implements ModInitializer {
@Override @Override
public void onInitialize() { public void onInitialize() {
ModItems.registerModItems(); ModItems.registerModItems();
ModBlocks.registerModBlocks();
} }
} }

View File

@@ -1,9 +1,13 @@
package de.jottyfan.minecraft; package de.jottyfan.minecraft;
import de.jottyfan.minecraft.block.ModBlocks;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.BlockRenderLayerMap;
import net.minecraft.client.render.BlockRenderLayer;
public class GtamfmdClient implements ClientModInitializer { public class GtamfmdClient implements ClientModInitializer {
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
BlockRenderLayerMap.putBlock(ModBlocks.CHRISTMASTREE, BlockRenderLayer.CUTOUT);
} }
} }

View File

@@ -0,0 +1,49 @@
package de.jottyfan.minecraft.block;
import de.jottyfan.minecraft.item.ModItems;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.SweetBerryBushBlock;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.state.StateManager.Builder;
import net.minecraft.state.property.BooleanProperty;
import net.minecraft.util.ActionResult;
import net.minecraft.util.hit.BlockHitResult;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraft.world.WorldView;
import net.minecraft.world.event.GameEvent;
public class ChristmasTree extends SweetBerryBushBlock {
public static final BooleanProperty ACTIVATED = BooleanProperty.of("activated");
public ChristmasTree(Settings settings) {
super(settings.ticksRandomly().noCollision().luminance(state -> state.get(ACTIVATED) ? 15 : 0));
setDefaultState(getDefaultState().with(ACTIVATED, false));
}
@Override
protected void appendProperties(Builder<Block, BlockState> builder) {
builder.add(ACTIVATED);
super.appendProperties(builder);
}
@Override
protected ItemStack getPickStack(WorldView world, BlockPos pos, BlockState state, boolean includeData) {
return new ItemStack(ModItems.GINGERBREAD);
}
@Override
protected ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) {
if (state.get(AGE) > 1 && state.get(ACTIVATED)) {
dropStack(world, pos, new ItemStack(ModItems.GINGERBREAD));
BlockState blockState = state.with(AGE, 0).cycle(ACTIVATED);
world.setBlockState(pos, blockState, Block.NOTIFY_LISTENERS);
world.emitGameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Emitter.of(player, blockState));
} else if (state.get(AGE) <= 1) {
world.setBlockState(pos, state.cycle(ACTIVATED));
}
return ActionResult.SUCCESS;
}
}

View File

@@ -0,0 +1,50 @@
package de.jottyfan.minecraft.block;
import java.util.function.Function;
import de.jottyfan.minecraft.Gtamfmd;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.block.AbstractBlock;
import net.minecraft.block.AbstractBlock.Settings;
import net.minecraft.block.Block;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroups;
import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier;
public class ModBlocks {
public static final Block RUBY_BLOCK = registerBlock(Identifier.of(Gtamfmd.MOD_ID, "ruby_block"), x -> new Block(x));
public static final Block RUBY_ORE = registerBlock(Identifier.of(Gtamfmd.MOD_ID, "ruby_ore"),
x -> new Block(x.strength(4).requiresTool()));
public static final Block CHRISTMASTREE = registerBlock(Identifier.of(Gtamfmd.MOD_ID, "christmastree"),
x -> new ChristmasTree(x));
private static Block registerBlock(Identifier identifier, Function<Settings, Block> function) {
return registerBlock(identifier, AbstractBlock.Settings.create(), function);
}
// functional interface
private static Block registerBlock(Identifier identifier, Settings settings, Function<Settings, Block> function) {
Block block = function.apply(settings.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)));
registerBlockItem(identifier, block, new Item.Settings());
return Registry.register(Registries.BLOCK, identifier, block);
}
private static void registerBlockItem(Identifier identifier, Block block, Item.Settings settings) {
Registry.register(Registries.ITEM, identifier, new BlockItem(block,
settings.useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier))));
}
public static void registerModBlocks() {
Gtamfmd.LOGGER.info("Registering Mod Blocks for {}", Gtamfmd.MOD_ID);
ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register(entries -> {
entries.add(RUBY_BLOCK);
entries.add(RUBY_ORE);
});
}
}

View File

@@ -0,0 +1,20 @@
package de.jottyfan.minecraft.item;
import net.minecraft.component.type.FoodComponent;
public enum Food {
GINGERBREAD(new FoodComponent.Builder()
.nutrition(1).saturationModifier(0.1f)
.build());
private final FoodComponent component;
private Food(FoodComponent component) {
this.component = component;
}
public FoodComponent get() {
return component;
}
}

View File

@@ -0,0 +1,30 @@
package de.jottyfan.minecraft.item;
import java.util.EnumMap;
import de.jottyfan.minecraft.Gtamfmd;
import net.minecraft.item.equipment.ArmorMaterial;
import net.minecraft.item.equipment.EquipmentAsset;
import net.minecraft.item.equipment.EquipmentType;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
public class ModArmorMaterial {
public static RegistryKey<? extends Registry<EquipmentAsset>> REGISTRY_KEY = RegistryKey
.ofRegistry(Identifier.ofVanilla("equipment_asset"));
public static final RegistryKey<EquipmentAsset> RUBY_KEY = RegistryKey.of(REGISTRY_KEY,
Identifier.of(Gtamfmd.MOD_ID, "ruby"));
public static final ArmorMaterial RUBY_ARMOR_MATERIAL = new ArmorMaterial(500,
Util.make(new EnumMap<>(EquipmentType.class), map -> {
map.put(EquipmentType.BOOTS, 3);
map.put(EquipmentType.LEGGINGS,4);
map.put(EquipmentType.CHESTPLATE, 10);
map.put(EquipmentType.HELMET, 3);
map.put(EquipmentType.BODY, 5);
}), 20, SoundEvents.ITEM_ARMOR_EQUIP_DIAMOND, 0, 0, null, RUBY_KEY);
}

View File

@@ -5,6 +5,7 @@ import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.Item.Settings; import net.minecraft.item.Item.Settings;
import net.minecraft.item.ItemGroups; import net.minecraft.item.ItemGroups;
import net.minecraft.item.equipment.EquipmentType;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.Registry; import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKey;
@@ -13,8 +14,27 @@ import net.minecraft.util.Identifier;
public class ModItems { public class ModItems {
public static final Item STUB = registerItem( public static final Item STUB = registerStubItem(Identifier.of(Gtamfmd.MOD_ID, "stub"), new Item.Settings());
Identifier.of(Gtamfmd.MOD_ID, "stub"), new Item.Settings());
public static final Item RUBY = registerItem(Identifier.of(Gtamfmd.MOD_ID, "ruby"), new Item.Settings());
public static final Item GINGERBREAD = registerItem(Identifier.of(Gtamfmd.MOD_ID, "gingerbread"),
new Item.Settings().food(Food.GINGERBREAD.get()));
public static final Item RUBY_BOOTS = registerArmorItem("ruby_boots", EquipmentType.BOOTS);
public static final Item RUBY_HELMET = registerArmorItem("ruby_helmet", EquipmentType.HELMET);
public static final Item RUBY_CHESTPLATE = registerArmorItem("ruby_chestplate", EquipmentType.CHESTPLATE);
public static final Item RUBY_LEGGINGS = registerArmorItem("ruby_leggings", EquipmentType.LEGGINGS);
private static Item registerArmorItem(String name, EquipmentType type) {
Identifier identifier = Identifier.of(Gtamfmd.MOD_ID, name);
Item.Settings settings = new Item.Settings().maxCount(1).armor(ModArmorMaterial.RUBY_ARMOR_MATERIAL, type);
return registerItem(identifier, settings);
}
private static Item registerStubItem(Identifier identifier, Settings settings) {
return Registry.register(Registries.ITEM, identifier, new StubItem(
settings.useItemPrefixedTranslationKey().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier))));
}
private static Item registerItem(Identifier identifier, Settings settings) { private static Item registerItem(Identifier identifier, Settings settings) {
RegistryKey<Item> registrykey = RegistryKey.of(RegistryKeys.ITEM, identifier); RegistryKey<Item> registrykey = RegistryKey.of(RegistryKeys.ITEM, identifier);
@@ -25,7 +45,14 @@ public class ModItems {
public static void registerModItems() { public static void registerModItems() {
Gtamfmd.LOGGER.info("registering mod items for " + Gtamfmd.MOD_ID); Gtamfmd.LOGGER.info("registering mod items for " + Gtamfmd.MOD_ID);
ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS) ItemGroupEvents.modifyEntriesEvent(ItemGroups.TOOLS).register(entries -> {
.register(entries -> { entries.add(STUB); }); entries.add(STUB);
entries.add(RUBY);
entries.add(GINGERBREAD);
entries.add(RUBY_HELMET);
entries.add(RUBY_CHESTPLATE);
entries.add(RUBY_LEGGINGS);
entries.add(RUBY_BOOTS);
});
} }
} }

View File

@@ -0,0 +1,65 @@
package de.jottyfan.minecraft.item;
import java.util.Map;
import org.joml.Random;
import de.jottyfan.minecraft.block.ModBlocks;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUsageContext;
import net.minecraft.item.Items;
import net.minecraft.sound.SoundCategory;
import net.minecraft.sound.SoundEvents;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class StubItem extends Item {
private static final Map<Block, Item> SLASH_MAP = Map.of(
Blocks.HAY_BLOCK, Items.WHEAT,
Blocks.DRIED_KELP_BLOCK, Items.DRIED_KELP);
public StubItem(Settings settings) {
super(settings);
}
@Override
public ActionResult useOnBlock(ItemUsageContext context) {
World world = context.getWorld();
BlockPos pos = context.getBlockPos();
Block clickedBlock = world.getBlockState(pos).getBlock();
if (SLASH_MAP.containsKey(clickedBlock)) {
if (!world.isClient()) {
world.setBlockState(pos, Blocks.AIR.getDefaultState());
world.playSound(null, pos, SoundEvents.ITEM_HOE_TILL,
SoundCategory.BLOCKS);
for (int i = 0; i < 9; i++) {
ItemStack stack = new ItemStack(SLASH_MAP.get(clickedBlock));
float scatter = new Random().nextFloat();
ItemEntity entity = new ItemEntity(world, pos.getX(),
pos.getY(), pos.getZ(), stack, scatter, scatter, 0.2);
world.spawnEntity(entity);
}
}
} else if (Blocks.DIRT.equals(clickedBlock) && world.getBlockState(pos.up()).isAir()) {
if (!world.isClient()) {
world.setBlockState(pos.up(), ModBlocks.CHRISTMASTREE.getDefaultState());
world.playSound(null, pos, SoundEvents.ITEM_CROP_PLANT,
SoundCategory.BLOCKS);
Hand hand = context.getHand();
PlayerEntity player = context.getPlayer();
ItemStack stack = player.getStackInHand(hand);
stack.increment(-1);
player.setStackInHand(hand, stack);
}
}
return ActionResult.SUCCESS;
}
}

View File

@@ -0,0 +1,9 @@
{
"variants": {
"age=0": { "model": "gtamfmd:block/christmastree0" },
"age=1": { "model": "gtamfmd:block/christmastree1" },
"age=2": { "model": "gtamfmd:block/christmastree2" },
"age=3": { "model": "gtamfmd:block/christmastree3" }
}
}

View File

@@ -0,0 +1,8 @@
{
"variants": {
"": {
"model": "gtamfmd:block/ruby_block"
}
}
}

View File

@@ -0,0 +1,8 @@
{
"variants": {
"": {
"model": "gtamfmd:block/ruby_ore"
}
}
}

View File

@@ -0,0 +1,14 @@
{
"layers": {
"humanoid": [
{
"texture": "gtamfmd:ruby"
}
],
"humanoid_leggings": [
{
"texture": "gtamfmd:ruby"
}
]
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:item/gingerbread"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:item/ruby"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:block/ruby_block"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:item/ruby_boots"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:item/ruby_chestplate"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:item/ruby_helmet"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:item/ruby_leggings"
}
}

View File

@@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "gtamfmd:block/ruby_ore"
}
}

View File

@@ -1,3 +1,12 @@
{ {
"item.gtamfmd.stub": "Stummel" "item.gtamfmd.gingerbread": "Lebkuchen",
"item.gtamfmd.stub": "Stummel",
"item.gtamfmd.ruby": "Rubin",
"item.gtamfmd.ruby_block": "Rubinblock",
"item.gtamfmd.ruby_ore": "Rubinerz",
"item.gtamfmd.christmastree": "Weihnachtsbaum",
"item.gtamfmd.ruby_helmet": "Rubinhelm",
"item.gtamfmd.ruby_chestplate": "Rubinbrustpanzer",
"item.gtamfmd.ruby_leggings": "Rubinhose",
"item.gtamfmd.ruby_boots": "Rubinschuhe"
} }

View File

@@ -1,3 +1,12 @@
{ {
"item.gtamfmd.stub": "Stub" "item.gtamfmd.gingerbread": "Gingerbread",
"item.gtamfmd.stub": "Stub",
"item.gtamfmd.ruby": "Ruby",
"item.gtamfmd.ruby_block": "Ruby block",
"item.gtamfmd.ruby_ore": "Ruby ore",
"item.gtamfmd.christmastree": "Christmas tree",
"item.gtamfmd.ruby_helmet": "ruby helmet",
"item.gtamfmd.ruby_chestplate": "ruby chestplate",
"item.gtamfmd.ruby_leggings": "ruby leggings",
"item.gtamfmd.ruby_boots": "ruby boots"
} }

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cross",
"textures": {
"cross": "gtamfmd:block/christmastree0"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cross",
"textures": {
"cross": "gtamfmd:block/christmastree1"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cross",
"textures": {
"cross": "gtamfmd:block/christmastree2"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cross",
"textures": {
"cross": "gtamfmd:block/christmastree3"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "gtamfmd:block/ruby_block"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "gtamfmd:block/ruby_ore"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "gtamfmd:item/gingerbread"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "gtamfmd:item/ruby"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "gtamfmd:block/ruby_block"
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/coal",
"textures": {
"layer0": "gtamfmd:item/ruby_boots"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/coal",
"textures": {
"layer0": "gtamfmd:item/ruby_chestplate"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/coal",
"textures": {
"layer0": "gtamfmd:item/ruby_helmet"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/coal",
"textures": {
"layer0": "gtamfmd:item/ruby_leggings"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "gtamfmd:block/ruby_ore"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

View File

@@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "gtamfmd:ruby"
}
],
"rolls": 9.0
}
]
}

View File

@@ -0,0 +1,20 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
],
"entries": [
{
"type": "minecraft:item",
"name": "gtamfmd:ruby"
}
],
"rolls": 1.0
}
]
}

View File

@@ -0,0 +1,9 @@
{
"type": "minecraft:blasting",
"ingredient": "gtamfmd:ruby_ore",
"result": {
"id": "gtamfmd:ruby"
},
"experience": 0.1,
"cookingtime": 200
}

View File

@@ -0,0 +1,9 @@
{
"type": "minecraft:campfire_cooking",
"ingredient": "gtamfmd:stub",
"result": {
"id": "minecraft:torch"
},
"experience": 0.1,
"cookingtime": 20
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"# #",
"###",
" # "
],
"key": {
"#": "minecraft:wheat"
},
"result": {
"id": "gtamfmd:gingerbread",
"count": 1
}
}

View File

@@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"t t",
"t t"
],
"key": {
"t": "gtamfmd:ruby"
},
"result": {
"id": "gtamfmd:ruby_boots",
"count": 1
}
}

View File

@@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"t t",
"ttt",
"ttt"
],
"key": {
"t": "gtamfmd:ruby"
},
"result": {
"id": "gtamfmd:ruby_chestplate",
"count": 1
}
}

View File

@@ -0,0 +1,14 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"ttt",
"t t"
],
"key": {
"t": "gtamfmd:ruby"
},
"result": {
"id": "gtamfmd:ruby_helmet",
"count": 1
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"ttt",
"t t",
"t t"
],
"key": {
"t": "gtamfmd:ruby"
},
"result": {
"id": "gtamfmd:ruby_leggings",
"count": 1
}
}

View File

@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"###",
"###",
"###"
],
"key": {
"#": "gtamfmd:ruby"
},
"result": {
"id": "gtamfmd:ruby_block",
"count": 1
}
}

View File

@@ -0,0 +1,10 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
"gtamfmd:ruby_block"
],
"result": {
"id": "gtamfmd:ruby",
"count": 9
}
}

View File

@@ -0,0 +1,10 @@
{
"type": "minecraft:crafting_shapeless",
"ingredients": [
"minecraft:stick"
],
"result": {
"id": "gtamfmd:stub",
"count": 4
}
}

View File

@@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"gtamfmd:ruby_block",
"gtamfmd:ruby_ore"
]
}

View File

@@ -0,0 +1,7 @@
{
"replace": false,
"values": [
"gtamfmd:ruby_block",
"gtamfmd:ruby_ore"
]
}

View File

@@ -26,8 +26,8 @@
"gtamfmd.mixins.json" "gtamfmd.mixins.json"
], ],
"depends": { "depends": {
"fabricloader": ">=0.16.14", "fabricloader": ">=0.18.4",
"minecraft": "~1.21.8", "minecraft": "~1.21.11",
"java": ">=21", "java": ">=21",
"fabric-api": "*" "fabric-api": "*"
}, },