Villager and trades added. Textures updated.

This commit is contained in:
2025-07-23 20:52:12 +03:00
parent f310596ff8
commit 5a715417e9
43 changed files with 585 additions and 20 deletions

View File

@@ -2,6 +2,7 @@ package com.ismailkaygisiz.gamblingplus;
import com.ismailkaygisiz.gamblingplus.block.ModBlocks;
import com.ismailkaygisiz.gamblingplus.util.ModCreativeTabs;
import com.ismailkaygisiz.gamblingplus.villager.ModVillagers;
import com.mojang.logging.LogUtils;
import com.ismailkaygisiz.gamblingplus.item.ModItems;
//import com.ismailkaygisiz.gamblingplus.villager.ModVillagers;
@@ -31,9 +32,8 @@ public final class GamblingPlusMod {
FMLCommonSetupEvent.getBus(modBusGroup).addListener(this::commonSetup);
ModBlocks.register(modBusGroup);
//ModBlocks.registerBlockItems(modBusGroup);
ModItems.register(modBusGroup);
//ModVillagers.register(modBusGroup);
ModVillagers.register(modBusGroup);
ModCreativeTabs.register(modBusGroup);
// Register the item to a creative tab
@@ -55,6 +55,10 @@ public final class GamblingPlusMod {
if(event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS){
event.accept(ModBlocks.RUBY_BLOCK);
event.accept(ModBlocks.RAW_RUBY_BLOCK);
event.accept(ModBlocks.RUBY_ORE);
event.accept(ModBlocks.RAW_DEEPSLATE_ORE);
event.accept(ModItems.CATCHING_EGG);
}
}

View File

@@ -5,11 +5,13 @@ import com.ismailkaygisiz.gamblingplus.item.ModItems;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTabs;
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.minecraft.world.level.material.MapColor;
@@ -23,13 +25,31 @@ import java.util.function.Supplier;
public class ModBlocks {
public static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, GamblingPlusMod.MOD_ID);
public static final RegistryObject<Block> RUBY_BLOCK = registerBlock("ruby_block", ()-> new Block(BlockBehaviour.Properties.of()
public static final RegistryObject<Block> RUBY_BLOCK = registerBlock("ruby_block",
()-> new Block(BlockBehaviour.Properties.of()
.setId((ResourceKey.create(Registries.BLOCK, ResourceLocation.parse(String.format("%s:%s", GamblingPlusMod.MOD_ID, "ruby_block")))))
.strength(.1f).requiresCorrectToolForDrops().sound(SoundType.IRON)));
.strength(.1f)
.requiresCorrectToolForDrops()
.sound(SoundType.IRON)));
public static final RegistryObject<Block> RAW_RUBY_BLOCK = registerBlock("raw_ruby_block", ()-> new Block(BlockBehaviour.Properties.of()
public static final RegistryObject<Block> RAW_RUBY_BLOCK = registerBlock("raw_ruby_block",
()-> new Block(BlockBehaviour.Properties.of()
.setId((ResourceKey.create(Registries.BLOCK, ResourceLocation.parse(String.format("%s:%s", GamblingPlusMod.MOD_ID, "raw_ruby_block")))))
.strength(.1f).requiresCorrectToolForDrops()));
.strength(.1f)
.requiresCorrectToolForDrops()));
public static final RegistryObject<Block> RUBY_ORE = registerBlock("ruby_ore",
()-> new DropExperienceBlock(UniformInt.of(2,4),BlockBehaviour.Properties.of()
.setId((ResourceKey.create(Registries.BLOCK, ResourceLocation.parse(String.format("%s:%s", GamblingPlusMod.MOD_ID, "ruby_ore")))))
.strength(.4f)
.requiresCorrectToolForDrops()));
public static final RegistryObject<Block> RAW_DEEPSLATE_ORE = registerBlock("ruby_deepslate_ore",
()-> new DropExperienceBlock(UniformInt.of(3,6),BlockBehaviour.Properties.of()
.setId((ResourceKey.create(Registries.BLOCK, ResourceLocation.parse(String.format("%s:%s", GamblingPlusMod.MOD_ID, "ruby_deepslate_ore")))))
.strength(.4f)
.requiresCorrectToolForDrops()
.sound(SoundType.DEEPSLATE)));
public static <T extends Block> void registerBlockItem(String name, RegistryObject<T> block){
ModItems.ITEMS.register(name,()-> new BlockItem(block.get(), new Item.Properties()

View File

@@ -0,0 +1,4 @@
package com.ismailkaygisiz.gamblingplus.datagen;
public class DataGenerators {
}

View File

@@ -0,0 +1,4 @@
package com.ismailkaygisiz.gamblingplus.datagen;
public class ModBlockLootTableProvider {
}

View File

@@ -0,0 +1,4 @@
package com.ismailkaygisiz.gamblingplus.datagen;
public class ModBlockStateProvider {
}

View File

@@ -0,0 +1,4 @@
package com.ismailkaygisiz.gamblingplus.datagen;
public class ModBlockTagProvider {
}

View File

@@ -0,0 +1,4 @@
package com.ismailkaygisiz.gamblingplus.datagen;
public class ModItemModelProvider {
}

View File

@@ -0,0 +1,4 @@
package com.ismailkaygisiz.gamblingplus.datagen;
public class ModRecipeProvider {
}

View File

@@ -0,0 +1,142 @@
package com.ismailkaygisiz.gamblingplus.event;
import com.ismailkaygisiz.gamblingplus.GamblingPlusMod;
import com.ismailkaygisiz.gamblingplus.item.ModItems;
import com.ismailkaygisiz.gamblingplus.villager.ModVillagers;
import net.minecraft.core.Holder;
import net.minecraft.world.entity.npc.VillagerTrades;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.alchemy.PotionBrewing;
import net.minecraft.world.item.alchemy.Potions;
import net.minecraft.world.item.enchantment.EnchantedItemInUse;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.enchantment.EnchantmentInstance;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.item.trading.ItemCost;
import net.minecraft.world.item.trading.MerchantOffer;
import net.minecraft.world.level.Level;
import net.minecraftforge.event.village.VillagerTradesEvent;
import net.minecraftforge.event.village.WandererTradesEvent;
import net.minecraftforge.eventbus.api.listener.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.ForgeRegistries;
import java.util.*;
import static net.minecraft.core.component.predicates.DataComponentPredicates.ENCHANTMENTS;
@Mod.EventBusSubscriber(modid = GamblingPlusMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
public class ModEvents {
@SubscribeEvent
public static void addCustomTrades(VillagerTradesEvent event) {
if(event.getType() == ModVillagers.RUBY_WORKER.getKey()) {
var trades = event.getTrades();
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.COPPER_INGOT, pRandom.nextInt(3,6)),
new ItemStack(ModItems.RUBY.get(), 1), 12, 1, 0.05f));
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(ModItems.RUBY.get(), pRandom.nextInt(3,8)),
new ItemStack(Items.EMERALD, 1), 12, 1, 0.05f));
trades.get(2).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, pRandom.nextInt(1,4)),
new ItemStack(Items.AMETHYST_SHARD, 2), 12, 3, 0.05f));
trades.get(3).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, pRandom.nextInt(5,11)),
new ItemStack(Items.BLAZE_POWDER, 1), 6, 5, 0.05f));
trades.get(3).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, pRandom.nextInt(2,5)),
new ItemStack(Items.FIREWORK_ROCKET, pRandom.nextInt(2,5)), 12, 5, 0.05f));
trades.get(4).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, pRandom.nextInt(30,46)),
new ItemStack(Items.SHULKER_BOX, 1), 4, 12, 0.05f));
trades.get(4).add((pTrader, pRandom) -> {
List<Holder<Enchantment>> valuableEnchantments = List.of(
Enchantments.FORTUNE.getOrThrow(pTrader),
Enchantments.EFFICIENCY.getOrThrow(pTrader),
Enchantments.POWER.getOrThrow(pTrader),
Enchantments.SHARPNESS.getOrThrow(pTrader),
Enchantments.UNBREAKING.getOrThrow(pTrader),
Enchantments.MENDING.getOrThrow(pTrader),
Enchantments.LOOTING.getOrThrow(pTrader),
Enchantments.PROTECTION.getOrThrow(pTrader),
Enchantments.THORNS.getOrThrow(pTrader),
Enchantments.RESPIRATION.getOrThrow(pTrader),
Enchantments.FLAME.getOrThrow(pTrader),
Enchantments.SMITE.getOrThrow(pTrader),
Enchantments.INFINITY.getOrThrow(pTrader)
);
Holder<Enchantment> selected = valuableEnchantments.get(pRandom.nextInt(valuableEnchantments.size()));
ItemStack book = Items.BOOK.getDefaultInstance();
book.enchant(selected,
selected.get().getMaxLevel() >= 4 ?
pRandom.nextInt(selected.get().getMaxLevel()-1, selected.get().getMaxLevel()+1):
selected.get().getMaxLevel());
return new MerchantOffer(
new ItemCost(Items.EMERALD, pRandom.nextInt(40, 65)),
Optional.of(new ItemCost(Items.BOOK, 1)),
book,
6, 32, 0.05f
);
});
trades.get(5).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, pRandom.nextInt(45,65)),
Optional.of(new ItemCost(Items.EGG, pRandom.nextInt(5,11))),
new ItemStack(ModItems.CATCHING_EGG.get(), 1), 6, 32, 0.05f));
trades.get(5).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD_BLOCK, pRandom.nextInt(12,21)),
Optional.of(new ItemCost(ModItems.RUBY.get(), 64)),
new ItemStack(Items.ELYTRA),
1, 256, 0.05f
));
}
/*
if(event.getType() == VillagerProfession.TOOLSMITH) {
var trades = event.getTrades();
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, 12),
new ItemStack(ModItems.CHISEL.get(), 1), 6, 4, 0.05f));
trades.get(1).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.DIAMOND, 19),
new ItemStack(ModItems.TOMAHAWK.get(), 1), 6, 4, 0.05f));
trades.get(2).add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, 1),
new ItemStack(ModItems.RADIATION_STAFF.get(), 1), 1, 12, 0.05f));
}*/
}
@SubscribeEvent
public static void addWanderingTrades(WandererTradesEvent event) {
/*
List<VillagerTrades.ItemListing> genericTrades = event.getGenericTrades();
List<VillagerTrades.ItemListing> rareTrades = event.getRareTrades();
genericTrades.add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.EMERALD, 12),
new ItemStack(ModItems.RADIATION_STAFF.get(), 1), 1, 10, 0.2f
));
rareTrades.add((pTrader, pRandom) -> new MerchantOffer(
new ItemCost(Items.NETHERITE_INGOT, 8),
new ItemStack(ModItems.BAR_BRAWL_MUSIC_DISC.get(), 1), 1, 10, 0.2f
));*/
}
}

View File

@@ -2,11 +2,13 @@ package com.ismailkaygisiz.gamblingplus.item;
import com.ismailkaygisiz.gamblingplus.GamblingPlusMod;
//import com.ismailkaygisiz.gamblingplus.item.SpecialEggItem;
import com.ismailkaygisiz.gamblingplus.item.custom.CatchingEggItem;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.item.Item.Properties;
//import net.minecraftforge.event.CreativeModeTabEvent;
@@ -30,6 +32,14 @@ public class ModItems {
String.format("%s:%s", GamblingPlusMod.MOD_ID, "raw_ruby")
)))));
public static final RegistryObject<Item> CATCHING_EGG = ITEMS.register("catching_egg", () ->
new CatchingEggItem(new Item.Properties()
.setId(ResourceKey.create(Registries.ITEM, ResourceLocation.parse(String.format("%s:%s", GamblingPlusMod.MOD_ID, "catching_egg"))))
.stacksTo(16)
.rarity(Rarity.UNCOMMON)));
/*public static final RegistryObject<Item> SPECIAL_EGG = ITEMS.register("special_egg", () -> new SpecialEggItem(new Properties().stacksTo(1)));

View File

@@ -0,0 +1,48 @@
package com.ismailkaygisiz.gamblingplus.item.custom;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.npc.VillagerProfession;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.SpawnEggItem;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
public class CatchingEggItem extends Item {
public CatchingEggItem(Properties pProperties) {
super(pProperties);
}
@Override
public InteractionResult interactLivingEntity(ItemStack pStack, Player pPlayer, LivingEntity pInteractionTarget, InteractionHand pUsedHand) {
if (pPlayer.level().isClientSide) {
return InteractionResult.PASS;
}
EntityType<?> type = pInteractionTarget.getType();
Item spawnEgg = SpawnEggItem.byId(type);
if (spawnEgg != null) {
pPlayer.addItem(new ItemStack(spawnEgg));
pInteractionTarget.discard();
if (!pPlayer.getAbilities().instabuild) {
pStack.shrink(1);
}
return InteractionResult.SUCCESS;
}
return InteractionResult.PASS;
}
}

View File

@@ -1,25 +1,41 @@
/*package com.ismailkaygisiz.gamblingplus.villager;
package com.ismailkaygisiz.gamblingplus.villager;
import com.google.common.collect.ImmutableSet;
import com.ismailkaygisiz.gamblingplus.GamblingPlusMod;
import com.ismailkaygisiz.gamblingplus.block.ModBlocks;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.ai.village.poi.PoiType;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.npc.VillagerProfession;
import net.minecraft.world.entity.npc.VillagerType;
import net.minecraft.world.level.block.SoundType;
import net.minecraftforge.eventbus.api.bus.BusGroup;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModVillagers {
public static final DeferredRegister<VillagerProfession> PROFESSIONS = DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, GamblingPlusMod.MOD_ID);
public static final DeferredRegister<VillagerType> TYPES = DeferredRegister.create(ForgeRegistries.VILLAGER_TYPES, GamblingPlusMod.MOD_ID);
public static final RegistryObject<VillagerProfession> RUBY_WORKER = PROFESSIONS.register("ruby_worker",
() -> new VillagerProfession("ruby_worker", holder -> holder.is(ModBlocks.RUBY_SMITHING_TABLE.get().asItem().builtInRegistryHolder()),
holder -> holder.is(ModBlocks.RUBY_SMITHING_TABLE.get().asItem().builtInRegistryHolder())));
public static final RegistryObject<VillagerProfession> GAMBLER = PROFESSIONS.register("gambler",
() -> new VillagerProfession("gambler", holder -> holder.is(ModBlocks.GAMBLING_TABLE.get().asItem().builtInRegistryHolder()),
holder -> holder.is(ModBlocks.GAMBLING_TABLE.get().asItem().builtInRegistryHolder())));
public static final DeferredRegister<PoiType> POI_TYPES = DeferredRegister.create(ForgeRegistries.POI_TYPES, GamblingPlusMod.MOD_ID);
public static final DeferredRegister<VillagerProfession> VILLAGER_PROFESSIONS
= DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, GamblingPlusMod.MOD_ID);
public static final RegistryObject<PoiType> RUBY_POI = POI_TYPES.register("ruby_poi",
() -> new PoiType(ImmutableSet.copyOf(ModBlocks.RUBY_BLOCK.get().getStateDefinition().getPossibleStates()),1,1));
public static final RegistryObject<VillagerProfession> RUBY_WORKER = VILLAGER_PROFESSIONS.register("ruby_worker",
() -> new VillagerProfession(Component.translatable("profession.ikgamblingplusmod.ruby_worker"),
poiTypeHolder -> poiTypeHolder.value() == RUBY_POI.get(),
poiTypeHolder -> poiTypeHolder.value()==RUBY_POI.get(), ImmutableSet.of(),ImmutableSet.of(),
SoundType.DEEPSLATE.getBreakSound()));
public static void register(BusGroup eventBus) {
PROFESSIONS.register(eventBus);
TYPES.register(eventBus);
POI_TYPES.register(eventBus);
VILLAGER_PROFESSIONS.register(eventBus);
}
} */
}

View File

@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "ikgamblingplusmod:block/ruby_deepslate_ore"
}
}
}

View File

@@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "ikgamblingplusmod:block/ruby_ore"
}
}
}

View File

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

View File

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

View File

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

View File

@@ -3,5 +3,13 @@
"item.ikgamblingplusmod.raw_ruby": "Raw Ruby",
"item.ikgamblingplusmod.ruby_block": "Block of Ruby",
"item.ikgamblingplusmod.raw_ruby_block": "Block of Raw Ruby",
"item.ikgamblingplusmod.ruby_ore": "Ruby Ore",
"item.ikgamblingplusmod.ruby_deepslate_ore": "Ruby Deepslate Ore",
"item.ikgamblingplusmod.catching_egg": "Catching Egg",
"profession.ikgamblingplusmod.ruby_worker": "Ruby Worker",
"creativetab.ikgamblingplusmod.gambling_tab": "Gambling Plus"
}

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,3 @@
{
"parent": "ikgamblingplusmod:block/ruby_deepslate_ore"
}

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 811 B

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 528 B

After

Width:  |  Height:  |  Size: 216 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 B

After

Width:  |  Height:  |  Size: 256 B

View File

@@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"entries": [
{
"type": "minecraft:item",
"name": "ikgamblingplusmod:raw_ruby_block"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
],
"random_sequence": "ikgamblingplusmod:blocks/raw_ruby_block"
}

View File

@@ -0,0 +1,21 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"bonus_rolls": 0,
"entries": [
{
"type": "minecraft:item",
"name": "ikgamblingplusmod:ruby_block"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
],
"random_sequence": "ikgamblingplusmod:blocks/ruby_block"
}

View File

@@ -0,0 +1,61 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"predicates": {
"minecraft:enchantments": [
{
"enchantments": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"name": "ikgamblingplusmod:ruby_deepslate_ore"
},
{
"type": "minecraft:item",
"functions": [
{
"add": false,
"count": {
"type": "minecraft:uniform",
"max": 5.0,
"min": 2.0
},
"function": "minecraft:set_count"
},
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops",
"function": "minecraft:apply_bonus"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "ikgamblingplusmod:raw_ruby"
}
]
}
],
"rolls": 1.0
}
],
"random_sequence": "ikgamblingplusmod:blocks/ruby_deepslate_ore"
}

View File

@@ -0,0 +1,52 @@
{
"type": "minecraft:block",
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"condition": "minecraft:match_tool",
"predicate": {
"predicates": {
"minecraft:enchantments": [
{
"enchantments": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
}
],
"name": "ikgamblingplusmod:ruby_ore"
},
{
"type": "minecraft:item",
"functions": [
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:ore_drops",
"function": "minecraft:apply_bonus"
},
{
"function": "minecraft:explosion_decay"
}
],
"name": "ikgamblingplusmod:raw_ruby"
}
]
}
],
"rolls": 1.0
}
],
"random_sequence": "ikgamblingplusmod:blocks/ruby_ore"
}

View File

@@ -0,0 +1,11 @@
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
"ikgamblingplusmod:ruby_block"
],
"result": {
"id": "ikgamblingplusmod:ruby",
"count": 9
}
}

View File

@@ -0,0 +1,16 @@
{
"type": "minecraft:crafting_shaped",
"category": "mics",
"key": {
"A": "ikgamblingplusmod:ruby"
},
"pattern": [
"AAA",
"AAA",
"AAA"
],
"result": {
"count": 1,
"id": "ikgamblingplusmod:ruby_block"
}
}

View File

@@ -0,0 +1,12 @@
{
"type": "minecraft:blasting",
"category": "misc",
"cookingtime": 100,
"experience": 0.25,
"group": "ruby",
"ingredient": "ikgamblingplusmod:raw_ruby",
"result": {
"id": "ikgamblingplusmod:ruby"
}
}

View File

@@ -0,0 +1,11 @@
{
"type": "minecraft:smelting",
"category": "misc",
"cookingtime": 100,
"experience": 0.25,
"group": "ruby",
"ingredient": "ikgamblingplusmod:raw_ruby",
"result": {
"id": "ikgamblingplusmod:ruby"
}
}

View File

@@ -0,0 +1,9 @@
{
"replace": false,
"values": [
"ikgamblingplusmod:ruby_block",
"ikgamblingplusmod:raw_ruby_block",
"ikgamblingplusmod:ruby_ore",
"ikgamblingplusmod:ruby_deepslate_ore"
]
}

View File

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

View File

@@ -0,0 +1,8 @@
{
"replace": false,
"values": [
"ikgamblingplusmod:ruby_block",
"ikgamblingplusmod:raw_ruby_block",
"ikgamblingplusmod:ruby_ore"
]
}

View File

@@ -0,0 +1,9 @@
{
"replace": false,
"values": [
{
"id": "ikgamblingplusmod:ruby_poi",
"required": false
}
]
}