From c6ae5977f5ad75ca621063e8bbc722a6107eebf7 Mon Sep 17 00:00:00 2001 From: Sollace Date: Tue, 25 Sep 2018 23:30:21 +0200 Subject: [PATCH] Added alfalfa --- .../com/minelittlepony/unicopia/UBlocks.java | 6 +- .../com/minelittlepony/unicopia/UItems.java | 10 +- .../unicopia/block/BlockAlfalfa.java | 269 ++++++++++++++++++ .../player/PlayerGravityDelegate.java | 8 +- .../assets/unicopia/blockstates/alfalfa.json | 18 ++ .../unicopia/models/block/alfalfa/shaft.json | 6 + .../unicopia/models/block/alfalfa/stage0.json | 6 + .../unicopia/models/block/alfalfa/stage1.json | 6 + .../unicopia/models/block/alfalfa/stage2.json | 6 + .../unicopia/models/block/alfalfa/stage3.json | 6 + .../unicopia/models/block/alfalfa/stage4.json | 6 + .../unicopia/models/block/alfalfa/stage5.json | 6 + .../unicopia/models/item/alfalfa_seeds.json | 6 + .../textures/blocks/alfalfa/shaft.png | Bin 0 -> 638 bytes .../textures/blocks/alfalfa/stage_0.png | Bin 0 -> 474 bytes .../textures/blocks/alfalfa/stage_1.png | Bin 0 -> 165 bytes .../textures/blocks/alfalfa/stage_2.png | Bin 0 -> 495 bytes .../textures/blocks/alfalfa/stage_3.png | Bin 0 -> 376 bytes .../textures/blocks/alfalfa/stage_4.png | Bin 0 -> 486 bytes .../textures/blocks/alfalfa/stage_5.png | Bin 0 -> 689 bytes .../unicopia/textures/items/alfalfa_seeds.png | Bin 0 -> 241 bytes 21 files changed, 356 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java create mode 100644 src/main/resources/assets/unicopia/blockstates/alfalfa.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/shaft.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/stage0.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/stage1.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/stage2.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/stage3.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/stage4.json create mode 100644 src/main/resources/assets/unicopia/models/block/alfalfa/stage5.json create mode 100644 src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/shaft.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_0.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_1.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_2.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_3.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_4.png create mode 100644 src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_5.png create mode 100644 src/main/resources/assets/unicopia/textures/items/alfalfa_seeds.png diff --git a/src/main/java/com/minelittlepony/unicopia/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/UBlocks.java index e150d89a..0121dce5 100644 --- a/src/main/java/com/minelittlepony/unicopia/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/UBlocks.java @@ -1,5 +1,6 @@ package com.minelittlepony.unicopia; +import com.minelittlepony.unicopia.block.BlockAlfalfa; import com.minelittlepony.unicopia.block.BlockCloud; import com.minelittlepony.unicopia.block.BlockCloudAnvil; import com.minelittlepony.unicopia.block.BlockCloudSlab; @@ -21,7 +22,10 @@ public class UBlocks { public static final BlockCloudAnvil anvil = new BlockCloudAnvil(Unicopia.MODID, "anvil"); + public static final BlockAlfalfa alfalfa = new BlockAlfalfa(Unicopia.MODID, "alfalfa"); + static void registerBlocks(IForgeRegistry registry) { - registry.registerAll(cloud, stairsCloud, cloud_double_slab, cloud_slab, mist_door, anvil); + registry.registerAll(cloud, stairsCloud, cloud_double_slab, cloud_slab, mist_door, anvil, + alfalfa); } } diff --git a/src/main/java/com/minelittlepony/unicopia/UItems.java b/src/main/java/com/minelittlepony/unicopia/UItems.java index f287556b..0f8e26e2 100644 --- a/src/main/java/com/minelittlepony/unicopia/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/UItems.java @@ -15,10 +15,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.color.ItemColors; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; import net.minecraft.init.Enchantments; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemDoor; +import net.minecraft.item.ItemSeeds; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.item.crafting.IRecipe; @@ -75,6 +77,10 @@ public class UItems { public static final ItemOfHolding bag_of_holding = new ItemOfHolding(Unicopia.MODID, "bag_of_holding"); + public static final Item alfalfa_seeds = new ItemSeeds(UBlocks.alfalfa, Blocks.FARMLAND) + .setTranslationKey("alfalfa_seeds") + .setRegistryName(Unicopia.MODID, "alfalfa_seeds"); + static void registerItems(IForgeRegistry registry) { RegistryLockSpinner.unlock(Item.REGISTRY); @@ -84,7 +90,8 @@ public class UItems { registry.registerAll(cloud_spawner, dew_drop, cloud_matter, cloud_block, cloud_stairs, cloud_slab, mist_door, anvil, - bag_of_holding, spell, curse); + bag_of_holding, spell, curse, + alfalfa_seeds); if (UClient.isClientSide()) { registerAllVariants(apple, apple.getVariants()); @@ -99,6 +106,7 @@ public class UItems { registerAllVariants(bag_of_holding, "bag_of_holding"); registerAllVariants(spell, "gem"); registerAllVariants(curse, "corrupted_gem"); + registerAllVariants(alfalfa_seeds, "alfalfa_seeds"); } registerFuels(); diff --git a/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java b/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java new file mode 100644 index 00000000..b4051754 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/BlockAlfalfa.java @@ -0,0 +1,269 @@ +package com.minelittlepony.unicopia.block; + +import java.util.Random; + +import com.minelittlepony.unicopia.UItems; + +import net.minecraft.block.BlockCrops; +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; + +public class BlockAlfalfa extends BlockCrops { + + public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 5); + public static final PropertyEnum HALF = PropertyEnum.create("half", Half.class); + + private static final AxisAlignedBB[] BOUNDS = new AxisAlignedBB[] { + new AxisAlignedBB(0, 0, 0, 1, 0.1, 1), + new AxisAlignedBB(0, 0, 0, 1, 0.2, 1), + new AxisAlignedBB(0, 0, 0, 1, 0.4, 1), + new AxisAlignedBB(0, 0, 0, 1, 0.6, 1), + new AxisAlignedBB(0, 0, 0, 1, 0.8, 1), + new AxisAlignedBB(0, 0, 0, 1, 1, 1), + new AxisAlignedBB(0, 0, 0, 1, 1.2, 1), + new AxisAlignedBB(0, 0, 0, 1, 1.4, 1), + new AxisAlignedBB(0, 0, 0, 1, 1.6, 1), + new AxisAlignedBB(0, 0, 0, 1, 1.8, 1), + new AxisAlignedBB(0, 0, 0, 1, 2, 1), + new AxisAlignedBB(0, 0, 0, 1, 2.2, 1), + new AxisAlignedBB(0, 0, 0, 1, 2.4, 1), + new AxisAlignedBB(0, 0, 0, 1, 2.6, 1), + new AxisAlignedBB(0, 0, 0, 1, 2.8, 1), + new AxisAlignedBB(0, 0, 0, 1, 3, 1) + }; + + public BlockAlfalfa(String domain, String name) { + setRegistryName(domain, name); + setTranslationKey(name); + + setDefaultState(getDefaultState().withProperty(HALF, Half.BOTTOM)); + } + + @Override + public EnumOffsetType getOffsetType() { + return EnumOffsetType.XZ; + } + + @Override + protected PropertyInteger getAgeProperty() { + return AGE; + } + + @Override + public int getMaxAge() { + return 5; + } + + @Override + protected Item getSeed() { + return UItems.alfalfa_seeds; + } + + @Override + protected Item getCrop() { + return UItems.alfalfa_seeds; + } + + @Override + public void updateTick(World world, BlockPos pos, IBlockState state, Random rand) { + checkAndDropBlock(world, pos, state); + if (rand.nextInt(10) != 0) { + + if (world.isAreaLoaded(pos, 1) && world.getLightFromNeighbors(pos.up()) >= 9) { + if (canGrow(world, pos, state, false)) { + float f = getGrowthChance(this, world, pos); + + if(ForgeHooks.onCropsGrowPre(world, pos, state, rand.nextInt((int)(25 / f) + 1) == 0)) { + growUpwards(world, pos, state, 1); + ForgeHooks.onCropsGrowPost(world, pos, state, world.getBlockState(pos)); + } + } + } + } + } + + protected void growUpwards(World world, BlockPos pos, IBlockState state, int increase) { + boolean hasDown = world.getBlockState(pos.down()).getBlock() == this; + boolean hasTrunk = world.getBlockState(pos.down(2)).getBlock() == this; + boolean hasRoot = world.getBlockState(pos.down(3)).getBlock() == this; + + if (state.getBlock().isAir(state, world, pos)) { + if (!(hasDown && hasTrunk && hasRoot)) { + world.setBlockState(pos, withAge(increase).withProperty(HALF, Half.TOP)); + } + return; + } + + int age = getAge(state) + increase; + int max = getMaxAge(); + + if (age > max) { + growUpwards(world, pos.up(), world.getBlockState(pos.up()), age - max); + age = max; + } + + + boolean hasUp = world.getBlockState(pos.up()).getBlock() == this; + + if (hasDown && hasUp) { + world.setBlockState(pos, this.withAge(age).withProperty(HALF, Half.MIDDLE)); + } else if (hasUp) { + world.setBlockState(pos, this.withAge(age).withProperty(HALF, Half.BOTTOM)); + } else { + world.setBlockState(pos, this.withAge(age).withProperty(HALF, Half.TOP)); + } + } + + @Override + public Item getItemDropped(IBlockState state, Random rand, int fortune) { + if (state.getValue(HALF) != Half.BOTTOM) { + return Items.AIR; + } + + return super.getItemDropped(state, rand, fortune); + } + + @Override + public boolean canBlockStay(World world, BlockPos pos, IBlockState state) { + return getHalf(state) != Half.BOTTOM || super.canBlockStay(world, pos, state); + } + + @Override + public void onBlockHarvested(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player) { + breakConnectedBlocks(worldIn, pos, player); + } + + protected void breakConnectedBlocks(World worldIn, BlockPos pos, EntityPlayer player) { + IBlockState state = worldIn.getBlockState(pos); + + if (state.getBlock() != this) { + return; + } + + if (player.capabilities.isCreativeMode) { + worldIn.setBlockToAir(pos); + } else { + if (worldIn.isRemote) { + worldIn.setBlockToAir(pos); + } else { + worldIn.destroyBlock(pos, true); + } + } + + Half half = getHalf(state); + + if (half.checkDown()) { + breakConnectedBlocks(worldIn, pos.down(), player); + } + if (half.checkUp()) { + breakConnectedBlocks(worldIn, pos.up(), player); + } + } + + @Override + protected int getBonemealAgeIncrease(World world) { + return super.getBonemealAgeIncrease(world) / 2; + } + + @Override + protected BlockStateContainer createBlockState() { + return new BlockStateContainer(this, HALF, AGE); + } + + @Override + public boolean canCollideCheck(IBlockState state, boolean hitIfLiquid) { + return getHalf(state) != Half.MIDDLE; + } + + @Override + public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { + return BOUNDS[Math.min(BOUNDS.length - 1, getFullAge(source, pos))]; + } + + @Override + public boolean canGrow(World world, BlockPos pos, IBlockState state, boolean isClient) { + + + Half half = getHalf(state); + + if (half == Half.MIDDLE || (half == Half.TOP && world.getBlockState(pos.down()).getBlock() == this)) { + return false; + } + + IBlockState above = world.getBlockState(pos.up(1)); + IBlockState higher = world.getBlockState(pos.up(2)); + + boolean iCanGrow = !isMaxAge(state); + boolean aboveCanGrow = above.getBlock() != this || !isMaxAge(above); + boolean higherCanGrow = higher.getBlock() != this || !isMaxAge(higher); + + return iCanGrow || aboveCanGrow || higherCanGrow; + } + + @Override + public void grow(World world, BlockPos pos, IBlockState state) { + growUpwards(world, pos, state, getBonemealAgeIncrease(world)); + } + + protected BlockPos getTip(World world, BlockPos pos) { + BlockPos above = pos.up(); + IBlockState state = world.getBlockState(above); + + if (state.getBlock() == this) { + return getTip(world, above); + } + + return pos; + } + + protected int getFullAge(IBlockAccess world, BlockPos pos) { + IBlockState state = world.getBlockState(pos); + + int age = 0; + + if (state.getBlock() == this) { + age += state.getValue(getAgeProperty()); + + age += getFullAge(world, pos.up()); + } + + return age; + } + + protected Half getHalf(IBlockState state) { + return (Half)state.getValue(HALF); + } + + public static enum Half implements IStringSerializable { + TOP, + MIDDLE, + BOTTOM; + + boolean checkUp() { + return this != TOP; + } + + boolean checkDown() { + return this != BOTTOM; + } + + public String toString() { + return getName(); + } + + public String getName() { + return this == TOP ? "top" : this == MIDDLE ? "middle" : "bottom"; + } + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/player/PlayerGravityDelegate.java b/src/main/java/com/minelittlepony/unicopia/player/PlayerGravityDelegate.java index e69aa40a..c441a56c 100644 --- a/src/main/java/com/minelittlepony/unicopia/player/PlayerGravityDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/player/PlayerGravityDelegate.java @@ -7,6 +7,7 @@ import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.MobEffects; import net.minecraft.init.SoundEvents; @@ -63,7 +64,7 @@ class PlayerGravityDelegate implements IUpdatable, IGravity, InbtS float forward = 0.00015F * flightExperience; entity.motionX += - forward * MathHelper.sin(entity.rotationYaw * 0.017453292F); - entity.motionY -= 0.05F - ((entity.motionX * entity.motionX) + (entity.motionZ + entity.motionZ)) / 100; + entity.motionY -= 0.05F - getHorizontalMotion(entity) / 100; entity.motionZ += forward * MathHelper.cos(entity.rotationYaw * 0.017453292F); if (ticksInAir > 0 && ticksInAir % 12 == 0) { @@ -111,6 +112,11 @@ class PlayerGravityDelegate implements IUpdatable, IGravity, InbtS } } + protected double getHorizontalMotion(Entity e) { + return (e.motionX * e.motionX) + + (e.motionZ * e.motionZ); + } + protected SoundEvent getFallSound(int distance) { return distance > 4 ? SoundEvents.ENTITY_PLAYER_BIG_FALL : SoundEvents.ENTITY_PLAYER_SMALL_FALL; } diff --git a/src/main/resources/assets/unicopia/blockstates/alfalfa.json b/src/main/resources/assets/unicopia/blockstates/alfalfa.json new file mode 100644 index 00000000..d9cda7b3 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/alfalfa.json @@ -0,0 +1,18 @@ +{ + "variants": { + "age=0,half=top": { "model": "unicopia:alfalfa/stage0" }, + "age=1,half=top": { "model": "unicopia:alfalfa/stage1" }, + "age=2,half=top": { "model": "unicopia:alfalfa/stage2" }, + "age=3,half=top": { "model": "unicopia:alfalfa/stage3" }, + "age=4,half=top": { "model": "unicopia:alfalfa/stage4" }, + "age=5,half=top": { "model": "unicopia:alfalfa/stage5" }, + "age=0,half=bottom": { "model": "unicopia:alfalfa/stage0" }, + "age=1,half=bottom": { "model": "unicopia:alfalfa/stage1" }, + "age=2,half=bottom": { "model": "unicopia:alfalfa/stage2" }, + "age=3,half=bottom": { "model": "unicopia:alfalfa/stage3" }, + "age=4,half=bottom": { "model": "unicopia:alfalfa/stage4" }, + "age=5,half=bottom": { "model": "unicopia:alfalfa/stage5" }, + "age=5,half=bottom": { "model": "unicopia:alfalfa/shaft" }, + "age=5,half=middle": { "model": "unicopia:alfalfa/shaft" } + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/shaft.json b/src/main/resources/assets/unicopia/models/block/alfalfa/shaft.json new file mode 100644 index 00000000..fff5865a --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/shaft.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/shaft" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/stage0.json b/src/main/resources/assets/unicopia/models/block/alfalfa/stage0.json new file mode 100644 index 00000000..6b5849d9 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/stage_0" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/stage1.json b/src/main/resources/assets/unicopia/models/block/alfalfa/stage1.json new file mode 100644 index 00000000..bf8b82df --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/stage_1" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/stage2.json b/src/main/resources/assets/unicopia/models/block/alfalfa/stage2.json new file mode 100644 index 00000000..4b66d294 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/stage_2" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/stage3.json b/src/main/resources/assets/unicopia/models/block/alfalfa/stage3.json new file mode 100644 index 00000000..2998e970 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/stage_3" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/stage4.json b/src/main/resources/assets/unicopia/models/block/alfalfa/stage4.json new file mode 100644 index 00000000..a53a783c --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/stage4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/stage_4" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/alfalfa/stage5.json b/src/main/resources/assets/unicopia/models/block/alfalfa/stage5.json new file mode 100644 index 00000000..f3966197 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/alfalfa/stage5.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:blocks/alfalfa/stage_5" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json b/src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json new file mode 100644 index 00000000..dee78568 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/alfalfa_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:items/alfalfa_seeds" + } +} diff --git a/src/main/resources/assets/unicopia/textures/blocks/alfalfa/shaft.png b/src/main/resources/assets/unicopia/textures/blocks/alfalfa/shaft.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9c0633db353bdf8693c3676a86f73b25d0a0f8 GIT binary patch literal 638 zcmV-^0)hRBP)kn=iYlhvA*%Ze%x(QH>=|MgOyK9cEcR-1`_Fj*0vB>YinlaK&Dm`15sb_%l>7!GRD+ZpZCkAcwDQc0CYQ|xbq{!{4_|_ zS4fpIRIw~hUgUpe&UDaq1gqab&RrVk=2RVkM5%M1MoVX0{nPX9`SENAIR`+&!C|Wh zP;ijfazq?@%G#REcZ5i%3VW6U`K zaB~iVwkSB*`5hImTY;t;WD0qV-EMN8gT_Q!aNuSLV3RD$=oo^-(-;%oXRV!$Q*iL7 zDG{!q*-Z-fBsC~)Q76uMj1mVw%EaBAgKIYoN+}wyECj4c*;gs zp@G7}fH5|7Y`neO-I<*kin-mpW3jOFU%i?4f4_NeW&n73Jrgz##q~#MYKZ2 z&B`qRDnUS;C518R_|&TP62MqE3q#&)d`AQUwBlc`9jm$FkN1qmkg8S*&}evEXzOZ} z@~Bp8E~7ODSs2?%N~mlJkSM|2sJl0jrV6W5H(Of($$J3x{&Y_)j8(;%Ud7`_l=X~8Bd-}j;4|I*3qr;cAx*af$yi17I?#sm zZmwUQwjB6O|Ea!yduBg=dTRf<{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_1.png b/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_1.png new file mode 100644 index 0000000000000000000000000000000000000000..332d94095b71d2e4bc54911de23901bee4c4fbdd GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar_~T6C_v{Cj>NK+Pdq1 zXW(%cUgv_Q&Cd`06Mo86!*wyXaox1e#>U2jH!?((4Y$p;75{c0#N4#-gTah~r(Di2 zqwfAc!REW8s1>NHQL${|wR$!-wl>l4>x~V7poBd>tz{)6!v}rM?|zLZ+JW{mc)I$z JtaD0e0swpMK79ZH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_2.png b/src/main/resources/assets/unicopia/textures/blocks/alfalfa/stage_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a74bec8c7a698ad556a98452fe97aaf16f536d50 GIT binary patch literal 495 zcmVCKtTEwD4 z)kUJX2}N^|yX5Y@d-ohJy(GO@^4%W4?|t6)_wLL7*9MQat^lz2ag|Yh`n<~8<^o6c z?(J=w+gAaQT~AXk%mPp-mBx%=&%rI8%mES$KRho5luFR;|4I+m@Z`;np)pB_bT4bPwdB%FB?Uy0#+nEKKafB;W^Q+M4&eJS!UQS6 zSlIVs0F;X9gAi|tRQhH2Ps^tzCx;GkU(*& zAcqM|!tcRsRJ}mqJAz}i)VyGsLh^rub0-|`JiRy-guM^-iN>w%n|7)M&Gr|nk7shj z+0!m-n+x_hs0652=Qy~ga;BqIe)ythSC%(KV}0I^0a^!b7GJu&dVR|_*5~cY@`l*m zxofj357HgB@7eutBKL@;Gf7sQd##$iy!c!kR(YvxajuiKZ)}AJt(vV@=Q#h@WW|vq l|GwSPoc#&7WbGSW;U6VE(ktafV!8kT002ovPDHLkV1k$0=gI9EYDvuU9BYQLA5}pa_by_zCJHZv7a3mO42&3hp}ivI^o0#mN^C5nQAPy=(81 zOX84n^|&I%(QL{8$&=qd3H;x2cG|YHaN@V(cDH5!EI9mlo;~i><*uEzjl26jTT1Yd zy-yW;eud7_N@2ss`mwivvX-xj-eboad;o54i}s~vz~*vL61NvybkDaefEa{|y59uA z4~lRytWc}Yl?2AZYZ$r&K>&l%o10k8!NpFV!WcuU1|>nG;nCL)6H0kht2I~A8iUNi zI7tar`F;~6Se;&3EFU$atGGmy8IcPII^>s2e z;`+;pg|R9>)AK!^qHF>hjhxbgph7)%av?_&A@P)4e-7>1vjz1!2|jw6YMC?1$bLJ-7=jfG8`#KJTZu8lv!pJ8bsu~X10g{C>uDn?K+ zf<;Im*rbsx-tO)0%+8L*oV!^!(fhic@7-s<_nQ~asSoe_mI+G!t2qgzab9EaZHpb# zW1<@DJhYQe@a6L(`(F!NFYXqi`_FDvey~!ozPVs402QkmA#k-P|P`b7%Ja7R1jc7J>*CHkMW*iXVsw7GkA{DFh4u0xyMFsgN|CWk0JJ+xGk0|-x*vE0<4DS&ntX-S>@8jI|5*KW{A&m z#%Se^=-riP%RrNj8+QxgTW;OhZV#N9KsMuROm7HC=LGFcFte$T_O=`Vxo*q)UXOe( zBTY=@cnBqelEv+nh-Zr0FpV6d{-aSl>$B89xTklSeR}! z93Yp2=KKd5H4kYsdb|?hx^5RVhPG~E4NSdBD25t8&cyff31?fpdn{B~Povo`fe(26CHpyOdbt5HQX;3OKAAX_kycmxZUzM5A^Wmr}Or4*qr33{Lo*vv4a4E`5`Q4j>qU@lg)Ja_&L X@`Y5FjB!G&00000NkvXXu0mjfuB11% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/items/alfalfa_seeds.png b/src/main/resources/assets/unicopia/textures/items/alfalfa_seeds.png new file mode 100644 index 0000000000000000000000000000000000000000..468216098c306845d1e5d0ca0d8adb5e2096ad71 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`J3L(+Lo7}wCrGf~IJmIwKg-R4 z11-Lr-+gV4ID2((oxouMwVYY+^{g7Nx|WO2O}MbPZh~X^vd8sv);-_!%w^)0xi5dj zn?=61-()l0RJ}`Lm2bP01PB~Td-c!#TEiNi-DxWrH=T^);c1sLFnP%BA+o$EvUpJy zv#!{g$*G0xk8VqUm)s}&_uPlKFUs9^EaVP9$jiBV-?WFHdd+8SbI$$e?{UW_Qf&A2 p4V