Tobacco Crop (no fruit)

This commit is contained in:
Vos
2025-11-11 15:59:03 -06:00
parent 734ff0e7d9
commit 6cf60c7d6b
28 changed files with 220 additions and 7 deletions
@@ -0,0 +1,25 @@
{
"variants": {
"age=0": {
"model": "acesbs:block/tobacco_crop_stage0"
},
"age=1": {
"model": "acesbs:block/tobacco_crop_stage1"
},
"age=2": {
"model": "acesbs:block/tobacco_crop_stage2"
},
"age=3": {
"model": "acesbs:block/tobacco_crop_stage3"
},
"age=4": {
"model": "acesbs:block/tobacco_crop_stage4"
},
"age=5": {
"model": "acesbs:block/tobacco_crop_stage5"
},
"age=6": {
"model": "acesbs:block/tobacco_crop_stage6"
}
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage0"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage1"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage2"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage3"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage4"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage5"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:block/crop",
"textures": {
"crop": "acesbs:block/tobacco_crop_stage6"
}
}
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "acesbs:item/tobacco_seeds"
}
}
@@ -4,13 +4,11 @@
"translate": "enchantment.acesbs.lightning_strike" "translate": "enchantment.acesbs.lightning_strike"
}, },
"effects": { "effects": {
"minecraft:post_attack": [ "minecraft:projectile_spawned": [
{ {
"affected": "victim",
"effect": { "effect": {
"type": "acesbs:lighting_strike" "type": "acesbs:lighting_strike"
}, }
"enchanted": "attacker"
} }
] ]
}, },
@@ -23,10 +21,9 @@
"base": 5, "base": 5,
"per_level_above_first": 7 "per_level_above_first": 7
}, },
"primary_items": "#minecraft:enchantable/bow",
"slots": [ "slots": [
"mainhand" "mainhand"
], ],
"supported_items": "#minecraft:enchantable/weapon", "supported_items": "#minecraft:enchantable/bow",
"weight": 5 "weight": 5
} }
@@ -0,0 +1,68 @@
{
"type": "minecraft:block",
"functions": [
{
"function": "minecraft:explosion_decay"
}
],
"pools": [
{
"bonus_rolls": 0.0,
"entries": [
{
"type": "minecraft:alternatives",
"children": [
{
"type": "minecraft:item",
"conditions": [
{
"block": "acesbs:tobacco_crop",
"condition": "minecraft:block_state_property",
"properties": {
"age": "6"
}
}
],
"name": "acesbs:lemon"
},
{
"type": "minecraft:item",
"name": "acesbs:tobacco_seeds"
}
]
}
],
"rolls": 1.0
},
{
"bonus_rolls": 0.0,
"conditions": [
{
"block": "acesbs:tobacco_crop",
"condition": "minecraft:block_state_property",
"properties": {
"age": "6"
}
}
],
"entries": [
{
"type": "minecraft:item",
"functions": [
{
"enchantment": "minecraft:fortune",
"formula": "minecraft:binomial_with_bonus_count",
"function": "minecraft:apply_bonus",
"parameters": {
"extra": 3,
"probability": 0.5714286
}
}
],
"name": "acesbs:tobacco_seeds"
}
],
"rolls": 1.0
}
]
}
@@ -15,6 +15,7 @@ import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.event.player.AttackEntityCallback; import net.fabricmc.fabric.api.event.player.AttackEntityCallback;
import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents;
import net.fabricmc.fabric.api.registry.CompostingChanceRegistry;
import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder; import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder;
import net.fabricmc.fabric.api.renderer.v1.Renderer; import net.fabricmc.fabric.api.renderer.v1.Renderer;
import net.minecraft.item.Items; import net.minecraft.item.Items;
@@ -56,5 +57,8 @@ public class AcesBS implements ModInitializer {
builder.registerPotionRecipe(Potions.AWKWARD, ModItems.LEMON, ModPotions.LEMON); builder.registerPotionRecipe(Potions.AWKWARD, ModItems.LEMON, ModPotions.LEMON);
builder.registerPotionRecipe(Potions.AWKWARD, Items.SAND, ModPotions.BLINDNESS); builder.registerPotionRecipe(Potions.AWKWARD, Items.SAND, ModPotions.BLINDNESS);
}); });
// CompostingChanceRegistry.INSTANCE.add(ModItems.TOBACCO);
CompostingChanceRegistry.INSTANCE.add(ModItems.TOBACCO_SEEDS, 0.5f);
} }
} }
@@ -19,6 +19,7 @@ Food
- Infernal Beef (Mob/Ashes + Cooked Beef) - Infernal Beef (Mob/Ashes + Cooked Beef)
- Hyper Stimulants (Hyper Sugar) - Hyper Stimulants (Hyper Sugar)
- Narcan (Stimulants + Entropic Eviscerator) - Narcan (Stimulants + Entropic Eviscerator)
- Tobacco
Crop Crop
- Tobacco - Tobacco
@@ -4,9 +4,11 @@ import com.acethewildfire.acesbs.AcesBS;
import com.acethewildfire.acesbs.block.custom.EntropyBlock; import com.acethewildfire.acesbs.block.custom.EntropyBlock;
import com.acethewildfire.acesbs.block.custom.EvilBlock; import com.acethewildfire.acesbs.block.custom.EvilBlock;
import com.acethewildfire.acesbs.block.custom.StableEntropyBlock; import com.acethewildfire.acesbs.block.custom.StableEntropyBlock;
import com.acethewildfire.acesbs.block.custom.TobaccoCrop;
import com.acethewildfire.acesbs.sounds.ModSounds; import com.acethewildfire.acesbs.sounds.ModSounds;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.enums.NoteBlockInstrument; import net.minecraft.block.enums.NoteBlockInstrument;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@@ -194,6 +196,20 @@ public class ModBlocks {
) )
); );
public static final Block TOBACCO_CROP = registerBlockWithoutItem("tobacco_crop", new TobaccoCrop(
AbstractBlock.Settings.create()
.mapColor(MapColor.DARK_GREEN)
.noCollision()
.ticksRandomly()
.breakInstantly()
.sounds(BlockSoundGroup.CROP)
.pistonBehavior(PistonBehavior.DESTROY)
));
private static Block registerBlockWithoutItem(String name, Block block){
return Registry.register(Registries.BLOCK, Identifier.of(AcesBS.MOD_ID, name), block);
}
private static Block registerBlock(String name, Block block){ private static Block registerBlock(String name, Block block){
registerBlockItem(name, block); registerBlockItem(name, block);
return Registry.register(Registries.BLOCK, Identifier.of(AcesBS.MOD_ID, name), block); return Registry.register(Registries.BLOCK, Identifier.of(AcesBS.MOD_ID, name), block);
@@ -0,0 +1,39 @@
package com.acethewildfire.acesbs.block.custom;
import com.acethewildfire.acesbs.item.ModItems;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.CropBlock;
import net.minecraft.item.ItemConvertible;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.IntProperty;
public class TobaccoCrop extends CropBlock {
public static final int MAX_AGE = 6;
public static final IntProperty AGE = IntProperty.of("age", 0, 6);
public TobaccoCrop(Settings settings) {
super(settings);
}
@Override
protected ItemConvertible getSeedsItem() {
return ModItems.TOBACCO_SEEDS;
}
@Override
public IntProperty getAgeProperty() {
return AGE;
}
@Override
public int getMaxAge() {
return MAX_AGE;
}
@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(AGE);
}
}
@@ -2,6 +2,7 @@ package com.acethewildfire.acesbs.datagen;
import com.acethewildfire.acesbs.AcesBS; import com.acethewildfire.acesbs.AcesBS;
import com.acethewildfire.acesbs.block.ModBlocks; import com.acethewildfire.acesbs.block.ModBlocks;
import com.acethewildfire.acesbs.block.custom.TobaccoCrop;
import com.acethewildfire.acesbs.item.ModItems; import com.acethewildfire.acesbs.item.ModItems;
import com.acethewildfire.acesbs.util.ModTags; import com.acethewildfire.acesbs.util.ModTags;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
@@ -17,6 +18,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.loot.LootPool; import net.minecraft.loot.LootPool;
import net.minecraft.loot.LootTable; import net.minecraft.loot.LootTable;
import net.minecraft.loot.condition.BlockStatePropertyLootCondition;
import net.minecraft.loot.condition.InvertedLootCondition; import net.minecraft.loot.condition.InvertedLootCondition;
import net.minecraft.loot.condition.LootCondition; import net.minecraft.loot.condition.LootCondition;
import net.minecraft.loot.condition.MatchToolLootCondition; import net.minecraft.loot.condition.MatchToolLootCondition;
@@ -28,6 +30,7 @@ import net.minecraft.loot.function.SetCountLootFunction;
import net.minecraft.loot.provider.number.ConstantLootNumberProvider; import net.minecraft.loot.provider.number.ConstantLootNumberProvider;
import net.minecraft.loot.provider.number.UniformLootNumberProvider; import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.predicate.NumberRange; import net.minecraft.predicate.NumberRange;
import net.minecraft.predicate.StatePredicate;
import net.minecraft.predicate.item.EnchantmentPredicate; import net.minecraft.predicate.item.EnchantmentPredicate;
import net.minecraft.predicate.item.EnchantmentsPredicate; import net.minecraft.predicate.item.EnchantmentsPredicate;
import net.minecraft.predicate.item.ItemPredicate; import net.minecraft.predicate.item.ItemPredicate;
@@ -67,6 +70,10 @@ public class ModLootTableProvider extends FabricBlockLootTableProvider {
addDrop(ModBlocks.LEMONWOOD_TRAPDOOR); addDrop(ModBlocks.LEMONWOOD_TRAPDOOR);
addDrop(ModBlocks.ENTROPY_ORE, prismaSteelOreDrops(ModBlocks.ENTROPY_ORE, ModItems.RAW_ENTROPY, 1, 3)); addDrop(ModBlocks.ENTROPY_ORE, prismaSteelOreDrops(ModBlocks.ENTROPY_ORE, ModItems.RAW_ENTROPY, 1, 3));
BlockStatePropertyLootCondition.Builder builder2 = BlockStatePropertyLootCondition.builder(ModBlocks.TOBACCO_CROP)
.properties(StatePredicate.Builder.create().exactMatch(TobaccoCrop.AGE, TobaccoCrop.MAX_AGE));
this.addDrop(ModBlocks.TOBACCO_CROP, this.cropDrops(ModBlocks.TOBACCO_CROP, ModItems.LEMON, ModItems.TOBACCO_SEEDS, builder2));
} }
public LootTable.Builder multipleOreDrops(Block drop, Item item, float minDrops, float maxDrops) { public LootTable.Builder multipleOreDrops(Block drop, Item item, float minDrops, float maxDrops) {
@@ -2,6 +2,7 @@ package com.acethewildfire.acesbs.datagen;
import com.acethewildfire.acesbs.block.ModBlocks; import com.acethewildfire.acesbs.block.ModBlocks;
import com.acethewildfire.acesbs.block.custom.EvilBlock; import com.acethewildfire.acesbs.block.custom.EvilBlock;
import com.acethewildfire.acesbs.block.custom.TobaccoCrop;
import com.acethewildfire.acesbs.item.ModItems; import com.acethewildfire.acesbs.item.ModItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider;
@@ -47,6 +48,7 @@ public class ModModelProvider extends FabricModelProvider {
blockStateModelGenerator.blockStateCollector.accept(VariantsBlockStateSupplier.create(ModBlocks.EVIL_BLOCK) blockStateModelGenerator.blockStateCollector.accept(VariantsBlockStateSupplier.create(ModBlocks.EVIL_BLOCK)
.coordinate(BlockStateModelGenerator.createBooleanModelMap(EvilBlock.CLICKED, lampOnIdentifier, lampOffIdentifier))); .coordinate(BlockStateModelGenerator.createBooleanModelMap(EvilBlock.CLICKED, lampOnIdentifier, lampOffIdentifier)));
blockStateModelGenerator.registerCrop(ModBlocks.TOBACCO_CROP, TobaccoCrop.AGE, 0,1,2,3,4,5,6);
} }
@Override @Override
@@ -27,6 +27,7 @@ public class ModItemGroups {
entries.add(ModItems.PRISMA_STEEL); entries.add(ModItems.PRISMA_STEEL);
entries.add(ModItems.PRISMA_SMITHING_TEMPLATE); entries.add(ModItems.PRISMA_SMITHING_TEMPLATE);
entries.add(ModItems.CRAB_RAVE_MUSIC_DISC); entries.add(ModItems.CRAB_RAVE_MUSIC_DISC);
entries.add(ModItems.TOBACCO_SEEDS);
}) })
.build()); .build());
@@ -1,6 +1,7 @@
package com.acethewildfire.acesbs.item; package com.acethewildfire.acesbs.item;
import com.acethewildfire.acesbs.AcesBS; import com.acethewildfire.acesbs.AcesBS;
import com.acethewildfire.acesbs.block.ModBlocks;
import com.acethewildfire.acesbs.item.custom.HammerItem; import com.acethewildfire.acesbs.item.custom.HammerItem;
import com.acethewildfire.acesbs.item.custom.ModArmorItem; import com.acethewildfire.acesbs.item.custom.ModArmorItem;
import com.acethewildfire.acesbs.item.custom.OracleLemon; import com.acethewildfire.acesbs.item.custom.OracleLemon;
@@ -144,7 +145,7 @@ public class ModItems {
} }
); );
public static final Item TOBACCO_SEEDS = registerItem("tobacco_seeds", new AliasedBlockItem(ModBlocks.TOBACCO_CROP, new Item.Settings()));
private static Item registerItem(String name, Item item){ private static Item registerItem(String name, Item item){
return Registry.register(Registries.ITEM, Identifier.of(AcesBS.MOD_ID, name), item); return Registry.register(Registries.ITEM, Identifier.of(AcesBS.MOD_ID, name), item);
@@ -40,6 +40,8 @@
"item.acesbs.crab_rave_music_disc": "Crab Rave Music Disc", "item.acesbs.crab_rave_music_disc": "Crab Rave Music Disc",
"item.acesbs.crab_rave_music_disc.desc": "Noisestorm - Crab Rave [Monstercat Release]", "item.acesbs.crab_rave_music_disc.desc": "Noisestorm - Crab Rave [Monstercat Release]",
"item.acesbs.tobacco_seeds": "Tobacco Seeds",
"painting.acesbs.herald.title": "Herald's Banner", "painting.acesbs.herald.title": "Herald's Banner",
"painting.acesbs.herald.author": "AceTheWildfire", "painting.acesbs.herald.author": "AceTheWildfire",
@@ -74,6 +76,8 @@
"block.acesbs.evil_block": "Evil Block", "block.acesbs.evil_block": "Evil Block",
"block.acesbs.tobacco_crop": "Tobacco Crop",
"itemgroup.acesbs.items": "Ace's BS Items", "itemgroup.acesbs.items": "Ace's BS Items",
"itemgroup.acesbs.blocks": "Ace's BS Blocks", "itemgroup.acesbs.blocks": "Ace's BS Blocks",
"itemgroup.acesbs.combat": "Ace's BS Combat", "itemgroup.acesbs.combat": "Ace's BS Combat",
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB