From f468cbe4cdbbac86ed22fbc67ee68d275191a1ba Mon Sep 17 00:00:00 2001 From: Jottyfan Date: Wed, 24 Dec 2025 10:26:55 +0100 Subject: [PATCH] mostly done, but still null for some references --- .../java/de/jottyfan/minecraft/Quickly.java | 32 +++++++++ .../de/jottyfan/minecraft/QuicklyClient.java | 4 +- .../jottyfan/minecraft/block/BlockPlant.java | 64 ++++++++++++++++++ .../minecraft/block/QuicklyBlocks.java | 4 ++ .../de/jottyfan/minecraft/item/Plant.java | 41 +++++++++++ .../jottyfan/minecraft/item/QuicklyItems.java | 5 ++ .../quickly/blockstates/blockcottonplant.json | 12 ++++ .../assets/quickly/items/cotton.json | 6 ++ .../assets/quickly/items/cottonplant.json | 6 ++ .../assets/quickly/items/cottonseed.json | 6 ++ .../resources/assets/quickly/lang/de_de.json | 3 + .../resources/assets/quickly/lang/en_us.json | 3 + .../quickly/models/block/cottonplant0.json | 6 ++ .../quickly/models/block/cottonplant1.json | 6 ++ .../quickly/models/block/cottonplant2.json | 6 ++ .../quickly/models/block/cottonplant3.json | 6 ++ .../quickly/models/block/cottonplant4.json | 6 ++ .../quickly/models/block/cottonplant5.json | 6 ++ .../quickly/models/block/cottonplant6.json | 6 ++ .../quickly/models/block/cottonplant7.json | 6 ++ .../assets/quickly/models/item/cotton.json | 6 ++ .../quickly/models/item/cottonplant.json | 6 ++ .../quickly/models/item/cottonseed.json | 6 ++ .../quickly/textures/block/cottonplant0.png | Bin 0 -> 1429 bytes .../quickly/textures/block/cottonplant1.png | Bin 0 -> 1246 bytes .../quickly/textures/block/cottonplant2.png | Bin 0 -> 1395 bytes .../quickly/textures/block/cottonplant3.png | Bin 0 -> 5505 bytes .../quickly/textures/block/cottonplant4.png | Bin 0 -> 5775 bytes .../quickly/textures/block/cottonplant5.png | Bin 0 -> 5806 bytes .../quickly/textures/block/cottonplant6.png | Bin 0 -> 6320 bytes .../quickly/textures/block/cottonplant7.png | Bin 0 -> 2118 bytes .../assets/quickly/textures/item/cotton.png | Bin 0 -> 2304 bytes .../quickly/textures/item/cottonseed.png | Bin 0 -> 1700 bytes .../recipe/shaped_string_from_cotton.json | 15 ++++ 34 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 src/main/java/de/jottyfan/minecraft/block/BlockPlant.java create mode 100644 src/main/java/de/jottyfan/minecraft/item/Plant.java create mode 100644 src/main/resources/assets/quickly/blockstates/blockcottonplant.json create mode 100644 src/main/resources/assets/quickly/items/cotton.json create mode 100644 src/main/resources/assets/quickly/items/cottonplant.json create mode 100644 src/main/resources/assets/quickly/items/cottonseed.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant0.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant1.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant2.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant3.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant4.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant5.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant6.json create mode 100644 src/main/resources/assets/quickly/models/block/cottonplant7.json create mode 100644 src/main/resources/assets/quickly/models/item/cotton.json create mode 100644 src/main/resources/assets/quickly/models/item/cottonplant.json create mode 100644 src/main/resources/assets/quickly/models/item/cottonseed.json create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant0.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant1.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant2.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant3.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant4.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant5.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant6.png create mode 100644 src/main/resources/assets/quickly/textures/block/cottonplant7.png create mode 100644 src/main/resources/assets/quickly/textures/item/cotton.png create mode 100644 src/main/resources/assets/quickly/textures/item/cottonseed.png create mode 100644 src/main/resources/data/quickly/recipe/shaped_string_from_cotton.json diff --git a/src/main/java/de/jottyfan/minecraft/Quickly.java b/src/main/java/de/jottyfan/minecraft/Quickly.java index eded03c..aeaa367 100644 --- a/src/main/java/de/jottyfan/minecraft/Quickly.java +++ b/src/main/java/de/jottyfan/minecraft/Quickly.java @@ -7,6 +7,14 @@ import de.jottyfan.minecraft.block.QuicklyBlocks; import de.jottyfan.minecraft.feature.QuicklyFeatures; import de.jottyfan.minecraft.item.QuicklyItems; import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.loot.v3.LootTableEvents; +import net.fabricmc.fabric.api.registry.CompostingChanceRegistry; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; + /** * @@ -18,6 +26,27 @@ public class Quickly implements ModInitializer { public static final Logger LOGGER = LogManager.getLogger(MOD_ID); + private void registerComposterItems() { + CompostingChanceRegistry.INSTANCE.add(QuicklyItems.COTTONSEED, 0.5f); + CompostingChanceRegistry.INSTANCE.add(QuicklyItems.COTTON, 0.75f); + } + + private void registerLootTableChanges() { + LootTableEvents.MODIFY.register((key, tableBuilder, source, registries) -> { + if (source.isBuiltin()) { + if (Blocks.SHORT_GRASS.getLootTable().equals(key)) { + LootPool.Builder poolBuilder = LootPool.lootPool() + .setRolls(ConstantValue.exactly(1f)) + .add(LootItem.lootTableItem(Items.AIR).setWeight(4)) + .add(LootItem.lootTableItem(QuicklyItems.COTTONSEED).setWeight(1)); + tableBuilder.withPool(poolBuilder); + } else if (Blocks.TALL_GRASS.getLootTable().equals(key)) { + // for the canola loot table block later + } + } + }); + } + @Override public void onInitialize() { LOGGER.info("loading {}", MOD_ID); @@ -25,5 +54,8 @@ public class Quickly implements ModInitializer { QuicklyItems.registerModItems(); QuicklyBlocks.registerModBlocks(); QuicklyFeatures.registerFeatures(); + registerComposterItems(); + registerLootTableChanges(); + } } \ No newline at end of file diff --git a/src/main/java/de/jottyfan/minecraft/QuicklyClient.java b/src/main/java/de/jottyfan/minecraft/QuicklyClient.java index dcf5c47..466de95 100644 --- a/src/main/java/de/jottyfan/minecraft/QuicklyClient.java +++ b/src/main/java/de/jottyfan/minecraft/QuicklyClient.java @@ -1,8 +1,9 @@ package de.jottyfan.minecraft; import de.jottyfan.minecraft.block.QuicklyBlocks; -import de.jottyfan.minecraft.item.QuicklyItems; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.rendering.v1.BlockRenderLayerMap; +import net.minecraft.client.renderer.chunk.ChunkSectionLayer; /** * @@ -13,5 +14,6 @@ public class QuicklyClient implements ClientModInitializer { @Override public void onInitializeClient() { + BlockRenderLayerMap.putBlock(QuicklyBlocks.COTTONPLANT, ChunkSectionLayer.CUTOUT); } } diff --git a/src/main/java/de/jottyfan/minecraft/block/BlockPlant.java b/src/main/java/de/jottyfan/minecraft/block/BlockPlant.java new file mode 100644 index 0000000..f0d4f50 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/block/BlockPlant.java @@ -0,0 +1,64 @@ +package de.jottyfan.minecraft.block; + +import java.util.List; +import java.util.Random; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.Containers; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.CropBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.storage.loot.LootParams.Builder; +import net.minecraft.world.phys.BlockHitResult; + +/** + * + * @author jotty + * + */ +public class BlockPlant extends CropBlock { + + private Identifier seed; + private Identifier fruit; + + public BlockPlant(Properties properties, Identifier seed, Identifier fruit) { + super(properties); + this.seed = seed; + this.fruit = fruit; + } + + @Override + protected List getDrops(BlockState state, Builder builder) { + List list = List.of(new ItemStack(getSeed())); + if (isMaxAge(state)) { + list.add(new ItemStack(getSeed(), new Random().nextInt(2))); + list.add(new ItemStack(getFruit(), new Random().nextFloat() > 0.9f ? 2 : 1)); + } + return list; + } + + private Item getFruit() { + return BuiltInRegistries.ITEM.getValue(fruit); + } + + public Item getSeed() { + return BuiltInRegistries.ITEM.getValue(seed); + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, + BlockHitResult hitResult) { + if (!level.isClientSide() && isMaxAge(state)) { + Containers.dropItemStack(level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(getSeed())); + level.setBlock(pos, state.setValue(AGE, 0), 2); + return InteractionResult.SUCCESS; + } + return InteractionResult.PASS; + } +} diff --git a/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java b/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java index 25a7444..79cc794 100644 --- a/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java +++ b/src/main/java/de/jottyfan/minecraft/block/QuicklyBlocks.java @@ -13,6 +13,7 @@ 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.SoundType; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; @@ -28,6 +29,8 @@ public class QuicklyBlocks { public static final Block ORETURQUOISE = registerBlock("oreturquoise", p -> new BlockOreTurquoise(p)); public static final Block OREDEEPSLATETURQUOISE = registerBlock("oredeepslateturquoise", p -> new BlockOreDeepslateTurquoise(p)); + public static final Block COTTONPLANT = registerBlock("blockcottonplant", Properties.ofFullCopy(Blocks.WHEAT), + p -> new BlockPlant(p, Identifier.fromNamespaceAndPath(Quickly.MOD_ID, "cottonseed"), Identifier.fromNamespaceAndPath(Quickly.MOD_ID, "cotton"))); private static final Block registerBlock(String name, Properties properties) { return QuicklyBlocks.registerBlock(name, properties, p -> new Block(p)); @@ -53,6 +56,7 @@ public class QuicklyBlocks { block.accept(TURQUOISEBLOCK); block.accept(ORETURQUOISE); block.accept(OREDEEPSLATETURQUOISE); + block.accept(COTTONPLANT); }); } } diff --git a/src/main/java/de/jottyfan/minecraft/item/Plant.java b/src/main/java/de/jottyfan/minecraft/item/Plant.java new file mode 100644 index 0000000..d851769 --- /dev/null +++ b/src/main/java/de/jottyfan/minecraft/item/Plant.java @@ -0,0 +1,41 @@ +package de.jottyfan.minecraft.item; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; + +/** + * + * @author jotty + * + */ +public class Plant extends Item { + + private Identifier identifier; + + public Plant(Properties properties, Identifier identifier) { + super(properties); + this.identifier = identifier; + } + + @Override + public InteractionResult useOn(UseOnContext context) { + BlockPos pos = context.getClickedPos(); + if (this.asItem().equals(context.getItemInHand().getItem())) { + BlockState state = context.getLevel().getBlockState(pos); + if (Blocks.FARMLAND.equals(state.getBlock()) && context.getLevel().getBlockState(pos.above()).isAir()) { + Block plantBlock = BuiltInRegistries.BLOCK.getValue(identifier); + context.getLevel().setBlock(pos.above(), plantBlock.defaultBlockState(), 2); + context.getItemInHand().shrink(1); + } + } + return super.useOn(context); + } + +} diff --git a/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java b/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java index 30ef740..1234c39 100644 --- a/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java +++ b/src/main/java/de/jottyfan/minecraft/item/QuicklyItems.java @@ -22,6 +22,9 @@ public class QuicklyItems { public static final Item STUB = registerItem("stub", properties -> new Stub(properties)); public static final Item RAWTURQUOISE = registerItem("rawturquoise"); public static final Item TURQUOISEINGOT = registerItem("turquoiseingot"); + public static final Item COTTON = registerItem("cotton"); + public static final Item COTTONPLANT = registerItem("cottonplant"); + public static final Item COTTONSEED = registerItem("cottonseed", properties -> new Plant(properties, Identifier.fromNamespaceAndPath(Quickly.MOD_ID, "cottonplant"))); private static final Item registerItem(String name) { return QuicklyItems.registerItem(name, new Item.Properties()); @@ -47,6 +50,8 @@ public class QuicklyItems { item.accept(STUB); item.accept(RAWTURQUOISE); item.accept(TURQUOISEINGOT); + item.accept(COTTON); + item.accept(COTTONSEED); }); } } diff --git a/src/main/resources/assets/quickly/blockstates/blockcottonplant.json b/src/main/resources/assets/quickly/blockstates/blockcottonplant.json new file mode 100644 index 0000000..6343654 --- /dev/null +++ b/src/main/resources/assets/quickly/blockstates/blockcottonplant.json @@ -0,0 +1,12 @@ +{ + "variants": { + "age=0": { "model": "quickly:block/cottonplant0" }, + "age=1": { "model": "quickly:block/cottonplant1" }, + "age=2": { "model": "quickly:block/cottonplant2" }, + "age=3": { "model": "quickly:block/cottonplant3" }, + "age=4": { "model": "quickly:block/cottonplant4" }, + "age=5": { "model": "quickly:block/cottonplant5" }, + "age=6": { "model": "quickly:block/cottonplant6" }, + "age=7": { "model": "quickly:block/cottonplant7" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/items/cotton.json b/src/main/resources/assets/quickly/items/cotton.json new file mode 100644 index 0000000..87eed29 --- /dev/null +++ b/src/main/resources/assets/quickly/items/cotton.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "quickly:item/cotton" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/items/cottonplant.json b/src/main/resources/assets/quickly/items/cottonplant.json new file mode 100644 index 0000000..e63d88f --- /dev/null +++ b/src/main/resources/assets/quickly/items/cottonplant.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "quickly:item/cottonseed" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/items/cottonseed.json b/src/main/resources/assets/quickly/items/cottonseed.json new file mode 100644 index 0000000..e63d88f --- /dev/null +++ b/src/main/resources/assets/quickly/items/cottonseed.json @@ -0,0 +1,6 @@ +{ + "model": { + "type": "minecraft:model", + "model": "quickly:item/cottonseed" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/lang/de_de.json b/src/main/resources/assets/quickly/lang/de_de.json index c9427d2..ba7abfd 100644 --- a/src/main/resources/assets/quickly/lang/de_de.json +++ b/src/main/resources/assets/quickly/lang/de_de.json @@ -1,5 +1,8 @@ { + "item.quickly.blockcottonplant": "Baumwollpflanze", "item.quickly.blockturquoise": "Türkisblock", + "item.quickly.cotton": "Baumwolle", + "item.quickly.cottonseed": "Baumwollsaat", "item.quickly.kelpbundle": "Seegrassbündel", "item.quickly.oredeepslateturquoise": "Türkistiefenerz", "item.quickly.oreturquoise": "Türkiserz", diff --git a/src/main/resources/assets/quickly/lang/en_us.json b/src/main/resources/assets/quickly/lang/en_us.json index 8fdb089..ec2ee68 100644 --- a/src/main/resources/assets/quickly/lang/en_us.json +++ b/src/main/resources/assets/quickly/lang/en_us.json @@ -1,5 +1,8 @@ { + "item.quickly.blockcottonplant": "cotton plant", "item.quickly.blockturquoise": "block of turquoise", + "item.quickly.cotton": "cotton", + "item.quickly.cottonseed": "cotton seed", "item.quickly.kelpbundle": "kelp bundle", "item.quickly.oredeepslateturquoise": "turquoise deepslate ore", "item.quickly.oreturquoise": "turquoise ore", diff --git a/src/main/resources/assets/quickly/models/block/cottonplant0.json b/src/main/resources/assets/quickly/models/block/cottonplant0.json new file mode 100644 index 0000000..2093253 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant0.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant1.json b/src/main/resources/assets/quickly/models/block/cottonplant1.json new file mode 100644 index 0000000..07240d7 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant1.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant2.json b/src/main/resources/assets/quickly/models/block/cottonplant2.json new file mode 100644 index 0000000..8619c48 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant2.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant3.json b/src/main/resources/assets/quickly/models/block/cottonplant3.json new file mode 100644 index 0000000..2105027 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant3.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant4.json b/src/main/resources/assets/quickly/models/block/cottonplant4.json new file mode 100644 index 0000000..c5ddea6 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant4.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant5.json b/src/main/resources/assets/quickly/models/block/cottonplant5.json new file mode 100644 index 0000000..a949f54 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant5.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant5" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant6.json b/src/main/resources/assets/quickly/models/block/cottonplant6.json new file mode 100644 index 0000000..58e1c39 --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant6.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant6" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/block/cottonplant7.json b/src/main/resources/assets/quickly/models/block/cottonplant7.json new file mode 100644 index 0000000..ccb57aa --- /dev/null +++ b/src/main/resources/assets/quickly/models/block/cottonplant7.json @@ -0,0 +1,6 @@ +{ + "parent":"block/cross", + "textures":{ + "cross":"quickly:block/cottonplant7" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/item/cotton.json b/src/main/resources/assets/quickly/models/item/cotton.json new file mode 100644 index 0000000..f6a1b73 --- /dev/null +++ b/src/main/resources/assets/quickly/models/item/cotton.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "quickly:item/cotton" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/item/cottonplant.json b/src/main/resources/assets/quickly/models/item/cottonplant.json new file mode 100644 index 0000000..2730ec5 --- /dev/null +++ b/src/main/resources/assets/quickly/models/item/cottonplant.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "quickly:item/cottonplant" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/models/item/cottonseed.json b/src/main/resources/assets/quickly/models/item/cottonseed.json new file mode 100644 index 0000000..eb10b55 --- /dev/null +++ b/src/main/resources/assets/quickly/models/item/cottonseed.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "quickly:item/cottonseed" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/quickly/textures/block/cottonplant0.png b/src/main/resources/assets/quickly/textures/block/cottonplant0.png new file mode 100644 index 0000000000000000000000000000000000000000..afcb1cef275c2d677a90894d71d3630e9190f7f7 GIT binary patch literal 1429 zcmV;G1#0? zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|avLq)A{O1%t0z!bqaabdK10UbXQq{}6_h$2t zBc|wXK!7AN1*JCqpTCFs3y&kO#s|@uVzhXC^2ud1)b3~3Wc~U*9eXui8#8CX*=iZ>QQ@?zxTZW zj257eopGIsEq--c;r-21hF@lylTb4He#za(*qOWe2HxFz!_MX-=T|6a_fD;i^lE|Jw6EBNJR)WD6&-2BBX5JKZ%8Wz5* zn5Ve0PsB193=3w(2D2?&MG5qXEnYk`<^}7G-A99@9R+|0wga3Y1_L${2a06HIUxd$ z3Vt#?ckEpO0~CU5WCplljvz0db>BmeUAp$v^FXW( z9)5%ohYTHQMLvX#@yGe(P3>e=GQ!Vum-WnrGn;l5+-M0%y|OiG8sTXyUCeV z^4?A6CTBJ|9E#w;8ih$tqsbT;^qpK7baVG$?n~ZG@IS?y`;0j=srxUOGn2Z*+_$`a zz*@`ejlzqdc?u_{mIp32Oz4`O=J`(g<=XtNfDEc2L8kzTL86`5#8J9MDuHbMD zUs+GL;ds~K)9!We2hy69*V2fKA^AY~;E+0GglAP!3R^o~+c=o*n9{&~=l*8 z)ZzE0OIE2W!={Yux_Lb4>@XuFL~hZ5LUJFrWM=-LC1#5r44eewIuNW|}zk zj^_MuHPdmsrb0KY4!L9A8v>#a3^Z&o4PX`ZQtY*&O3qUG+cjU;<|Cl{c(-@V<#w6t zQXJlF4{DK(NXci|12wJJwwW7VV%N6ua_znjd!nr;KjQBn+EMa}*Ob6yrHsf%HzPl$ za^l7j;wBzH5{B^F-m4RCGvE>Nv6ALh3z@`M=_cwJ(Ci{8*HH6eKoX&Dk)sgQPH&Z7bp*O6T!7px z9~A^A*g(Cg0000qNkleVX-vJGfyY59Nc+BNbG jShsE+!=FEY=oel9+5Zm~x*Gdq00000NkvXXu0mjfZFQ|Y literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/quickly/textures/block/cottonplant1.png b/src/main/resources/assets/quickly/textures/block/cottonplant1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5a64e24dd48e79b958673be9c1dcca67ac63de GIT binary patch literal 1246 zcmV<41R?v0P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KHlH@21MgLjFECERf!E$&;%noMxeQ{z})}yPl zt1_ZLrcESZS(bzjvYl@H_wRK7;9wuT3u-Cm7(I@VL*{}>^0%WLJwb2v`^2AA~&JbBvegSMpRZ7Z*8q;+wOlImc~vB}6Pa?nRwTIcCtSD_h515zX*Z zpH{M0%V-HD(SWmKlU1}vnHb0>1?p62(m2LO4Iu^|Y#5mvP&Nl)0*uTJkV(R7G}$Ce zmjuKO+d&}ZD;7H3=EGg11jn6{!|ov%qqQr()7&FUbFP9S^6API;^MU(5yc`$1$>XG2Hy*(CJ0YN>|oUp*+>#_j+Rq17O$pKoRs2Fc`MAo+fqzDlxf*}C`A4!xV zd1H1)ghVC)DhQn=a0M1p<&GdZh(y3a6~H&{F*;OP`6kAL5Fk{d69bzp1+YR;>>mpW zd#I>rP}QiWNwbzHaaCB17S|KCm{>5iXlBW>6_+H1q$ws#Ddki$XTcL!GwLy?oO3B~ zT41^0?gE8UDp#qYYK_%us=1cNu1O0`TWr=+%dK?o(ox4fcI&ClC3#s{gTXcsj|%}x`v9w)k(ffxq@a9adO9P?u4 z6NSKw++yZ4qbigUq%Js}7BLVEgIFhB>|V&JllUBN4j}j$`~R4=H$+JjQi_15{t=pI%4Yv`|`|AnD=jCjA3^kahe+A3#GC^y^J{8vWzfFk95 z#_=MOEz-84V0?|p6;U5I8NQ8we{_#1O44g~$+|xS7=5JTjwx@^H^$Em4Y|D5Q&000JJOGiWi`~a{3 zFqZ(xp8x;=32;bRa{vGf6951U69E94oEQKA00(qQO+^Rf3Lg{=7FnKb>;M1&8FWQh zbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0G~-jK~y-)?UFGL!ypg@mnalS zmMGj`!Mk_{@9Smt{dp3Bxdeh(JW=6O7}C)*8I`kWzw(#H9oPgi?x~bC6Pst{WI* zewq&fF-F!}i|!UuO8qs~S~-N!518i}+qRtsytQDh6<0p-1w2tSPst4tmH+?%07*qo IM6N<$g04z4VgLXD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/quickly/textures/block/cottonplant2.png b/src/main/resources/assets/quickly/textures/block/cottonplant2.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c57c52d377efd7c7e0142fb381ad758f694fd4 GIT binary patch literal 1395 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/quickly/textures/block/cottonplant4.png b/src/main/resources/assets/quickly/textures/block/cottonplant4.png new file mode 100644 index 0000000000000000000000000000000000000000..81cd078a91df1955d15ba472a87c04c8e776cd07 GIT binary patch literal 5775 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