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"
},
"effects": {
"minecraft:post_attack": [
"minecraft:projectile_spawned": [
{
"affected": "victim",
"effect": {
"type": "acesbs:lighting_strike"
},
"enchanted": "attacker"
}
}
]
},
@@ -23,10 +21,9 @@
"base": 5,
"per_level_above_first": 7
},
"primary_items": "#minecraft:enchantable/bow",
"slots": [
"mainhand"
],
"supported_items": "#minecraft:enchantable/weapon",
"supported_items": "#minecraft:enchantable/bow",
"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.PlayerBlockBreakEvents;
import net.fabricmc.fabric.api.registry.CompostingChanceRegistry;
import net.fabricmc.fabric.api.registry.FabricBrewingRecipeRegistryBuilder;
import net.fabricmc.fabric.api.renderer.v1.Renderer;
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, 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)
- Hyper Stimulants (Hyper Sugar)
- Narcan (Stimulants + Entropic Eviscerator)
- Tobacco
Crop
- Tobacco
@@ -4,9 +4,11 @@ import com.acethewildfire.acesbs.AcesBS;
import com.acethewildfire.acesbs.block.custom.EntropyBlock;
import com.acethewildfire.acesbs.block.custom.EvilBlock;
import com.acethewildfire.acesbs.block.custom.StableEntropyBlock;
import com.acethewildfire.acesbs.block.custom.TobaccoCrop;
import com.acethewildfire.acesbs.sounds.ModSounds;
import net.minecraft.block.*;
import net.minecraft.block.enums.NoteBlockInstrument;
import net.minecraft.block.piston.PistonBehavior;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
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){
registerBlockItem(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.block.ModBlocks;
import com.acethewildfire.acesbs.block.custom.TobaccoCrop;
import com.acethewildfire.acesbs.item.ModItems;
import com.acethewildfire.acesbs.util.ModTags;
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.loot.LootPool;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.condition.BlockStatePropertyLootCondition;
import net.minecraft.loot.condition.InvertedLootCondition;
import net.minecraft.loot.condition.LootCondition;
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.UniformLootNumberProvider;
import net.minecraft.predicate.NumberRange;
import net.minecraft.predicate.StatePredicate;
import net.minecraft.predicate.item.EnchantmentPredicate;
import net.minecraft.predicate.item.EnchantmentsPredicate;
import net.minecraft.predicate.item.ItemPredicate;
@@ -67,6 +70,10 @@ public class ModLootTableProvider extends FabricBlockLootTableProvider {
addDrop(ModBlocks.LEMONWOOD_TRAPDOOR);
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) {
@@ -2,6 +2,7 @@ package com.acethewildfire.acesbs.datagen;
import com.acethewildfire.acesbs.block.ModBlocks;
import com.acethewildfire.acesbs.block.custom.EvilBlock;
import com.acethewildfire.acesbs.block.custom.TobaccoCrop;
import com.acethewildfire.acesbs.item.ModItems;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
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)
.coordinate(BlockStateModelGenerator.createBooleanModelMap(EvilBlock.CLICKED, lampOnIdentifier, lampOffIdentifier)));
blockStateModelGenerator.registerCrop(ModBlocks.TOBACCO_CROP, TobaccoCrop.AGE, 0,1,2,3,4,5,6);
}
@Override
@@ -27,6 +27,7 @@ public class ModItemGroups {
entries.add(ModItems.PRISMA_STEEL);
entries.add(ModItems.PRISMA_SMITHING_TEMPLATE);
entries.add(ModItems.CRAB_RAVE_MUSIC_DISC);
entries.add(ModItems.TOBACCO_SEEDS);
})
.build());
@@ -1,6 +1,7 @@
package com.acethewildfire.acesbs.item;
import com.acethewildfire.acesbs.AcesBS;
import com.acethewildfire.acesbs.block.ModBlocks;
import com.acethewildfire.acesbs.item.custom.HammerItem;
import com.acethewildfire.acesbs.item.custom.ModArmorItem;
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){
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.desc": "Noisestorm - Crab Rave [Monstercat Release]",
"item.acesbs.tobacco_seeds": "Tobacco Seeds",
"painting.acesbs.herald.title": "Herald's Banner",
"painting.acesbs.herald.author": "AceTheWildfire",
@@ -74,6 +76,8 @@
"block.acesbs.evil_block": "Evil Block",
"block.acesbs.tobacco_crop": "Tobacco Crop",
"itemgroup.acesbs.items": "Ace's BS Items",
"itemgroup.acesbs.blocks": "Ace's BS Blocks",
"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