From 9a614313b8b35ca25b3a6315db45464225bb60e2 Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 28 Sep 2022 22:43:45 +0200 Subject: [PATCH] Added oats, fancy imported oats, and oatmeal --- oats_guide.png | Bin 0 -> 6893 bytes .../unicopia/advancement/UCriteria.java | 2 + .../unicopia/block/SegmentedBlock.java | 63 +++++++ .../unicopia/block/SegmentedCropBlock.java | 170 ++++++++++++++++++ .../unicopia/block/UBlocks.java | 6 +- .../block/data/DragonBreathStore.java | 11 ++ .../client/render/GlassesFeatureRenderer.java | 2 - .../unicopia/entity/Living.java | 5 + .../unicopia/item/DragonBreathScrollItem.java | 4 + .../unicopia/item/OatmealItem.java | 21 +++ .../minelittlepony/unicopia/item/UItems.java | 16 +- .../unicopia/item/toxin/UFoodComponents.java | 30 ++-- .../assets/unicopia/blockstates/oats.json | 16 ++ .../unicopia/blockstates/oats_crown.json | 6 + .../unicopia/blockstates/oats_stem.json | 11 ++ .../resources/assets/unicopia/lang/en_us.json | 10 ++ .../unicopia/models/block/oats_stage0.json | 6 + .../unicopia/models/block/oats_stage1.json | 6 + .../models/block/oats_stage10_lower.json | 6 + .../models/block/oats_stage10_upper.json | 6 + .../models/block/oats_stage11_lower.json | 6 + .../models/block/oats_stage11_upper.json | 6 + .../unicopia/models/block/oats_stage2.json | 6 + .../unicopia/models/block/oats_stage3.json | 6 + .../unicopia/models/block/oats_stage4.json | 6 + .../models/block/oats_stage5_lower.json | 6 + .../models/block/oats_stage5_upper.json | 6 + .../models/block/oats_stage6_lower.json | 6 + .../models/block/oats_stage6_upper.json | 6 + .../models/block/oats_stage7_lower.json | 6 + .../models/block/oats_stage7_upper.json | 6 + .../models/block/oats_stage8_lower.json | 6 + .../models/block/oats_stage8_upper.json | 6 + .../models/block/oats_stage9_lower.json | 6 + .../models/block/oats_stage9_upper.json | 6 + .../unicopia/models/item/imported_oats.json | 6 + .../unicopia/models/item/oat_seeds.json | 6 + .../assets/unicopia/models/item/oatmeal.json | 6 + .../assets/unicopia/models/item/oats.json | 6 + .../unicopia/textures/block/oats_stage0.png | Bin 0 -> 880 bytes .../unicopia/textures/block/oats_stage1.png | Bin 0 -> 1025 bytes .../textures/block/oats_stage10_lower.png | Bin 0 -> 2489 bytes .../textures/block/oats_stage10_upper.png | Bin 0 -> 1027 bytes .../textures/block/oats_stage11_upper.png | Bin 0 -> 1850 bytes .../unicopia/textures/block/oats_stage2.png | Bin 0 -> 1208 bytes .../unicopia/textures/block/oats_stage3.png | Bin 0 -> 1581 bytes .../unicopia/textures/block/oats_stage4.png | Bin 0 -> 1813 bytes .../textures/block/oats_stage5_lower.png | Bin 0 -> 2450 bytes .../textures/block/oats_stage5_upper.png | Bin 0 -> 946 bytes .../textures/block/oats_stage6_lower.png | Bin 0 -> 2408 bytes .../textures/block/oats_stage6_upper.png | Bin 0 -> 1427 bytes .../textures/block/oats_stage7_lower.png | Bin 0 -> 2363 bytes .../textures/block/oats_stage7_upper.png | Bin 0 -> 1746 bytes .../textures/block/oats_stage8_lower.png | Bin 0 -> 2242 bytes .../textures/block/oats_stage8_upper.png | Bin 0 -> 1746 bytes .../textures/block/oats_stage9_lower.png | Bin 0 -> 2161 bytes .../textures/block/oats_stage9_upper.png | Bin 0 -> 2295 bytes .../unicopia/textures/item/imported_oats.png | Bin 0 -> 1935 bytes .../unicopia/textures/item/oat_seeds.png | Bin 0 -> 1607 bytes .../assets/unicopia/textures/item/oatmeal.png | Bin 0 -> 1358 bytes .../assets/unicopia/textures/item/oats.png | Bin 0 -> 2346 bytes .../advancements/recipes/food/oatmeal.json | 30 ++++ .../unicopia/loot_tables/blocks/oats.json | 68 +++++++ .../loot_tables/blocks/oats_crown.json | 68 +++++++ .../loot_tables/blocks/oats_stem.json | 64 +++++++ .../data/unicopia/recipes/oatmeal.json | 11 ++ .../unicopiamc/loot_tables/blocks/grass.json | 37 ++++ 67 files changed, 765 insertions(+), 24 deletions(-) create mode 100644 oats_guide.png create mode 100644 src/main/java/com/minelittlepony/unicopia/block/SegmentedBlock.java create mode 100644 src/main/java/com/minelittlepony/unicopia/block/SegmentedCropBlock.java create mode 100644 src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java create mode 100644 src/main/resources/assets/unicopia/blockstates/oats.json create mode 100644 src/main/resources/assets/unicopia/blockstates/oats_crown.json create mode 100644 src/main/resources/assets/unicopia/blockstates/oats_stem.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage0.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage1.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage10_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage10_upper.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage11_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage11_upper.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage2.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage3.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage4.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage5_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage5_upper.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage6_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage6_upper.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage7_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage7_upper.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage8_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage8_upper.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage9_lower.json create mode 100644 src/main/resources/assets/unicopia/models/block/oats_stage9_upper.json create mode 100644 src/main/resources/assets/unicopia/models/item/imported_oats.json create mode 100644 src/main/resources/assets/unicopia/models/item/oat_seeds.json create mode 100644 src/main/resources/assets/unicopia/models/item/oatmeal.json create mode 100644 src/main/resources/assets/unicopia/models/item/oats.json create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage0.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage1.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage10_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage10_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage11_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage2.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage3.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage4.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage5_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage5_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage6_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage6_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage7_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage7_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage8_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage8_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage9_lower.png create mode 100644 src/main/resources/assets/unicopia/textures/block/oats_stage9_upper.png create mode 100644 src/main/resources/assets/unicopia/textures/item/imported_oats.png create mode 100644 src/main/resources/assets/unicopia/textures/item/oat_seeds.png create mode 100644 src/main/resources/assets/unicopia/textures/item/oatmeal.png create mode 100644 src/main/resources/assets/unicopia/textures/item/oats.png create mode 100644 src/main/resources/data/unicopia/advancements/recipes/food/oatmeal.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/oats.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/oats_crown.json create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/oats_stem.json create mode 100644 src/main/resources/data/unicopia/recipes/oatmeal.json create mode 100644 src/main/resources/data/unicopiamc/loot_tables/blocks/grass.json diff --git a/oats_guide.png b/oats_guide.png new file mode 100644 index 0000000000000000000000000000000000000000..45305cbc60d72dfec13b2d035db2b7a9a830fd21 GIT binary patch literal 6893 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 n*~Boq62fQ<=?<00000NkvXXu0mjf{q-Da literal 0 HcmV?d00001 diff --git a/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java b/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java index 47aeffce..45794fd4 100644 --- a/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java +++ b/src/main/java/com/minelittlepony/unicopia/advancement/UCriteria.java @@ -17,6 +17,8 @@ public interface UCriteria { CustomEventCriterion.Trigger SCREECH_TWENTY_MOBS = CUSTOM_EVENT.createTrigger("screech_twenty_mobs"); CustomEventCriterion.Trigger SHED_FEATHER = CUSTOM_EVENT.createTrigger("shed_feather"); CustomEventCriterion.Trigger THROW_MUFFIN = CUSTOM_EVENT.createTrigger("throw_muffin"); + CustomEventCriterion.Trigger SEND_OATS = CUSTOM_EVENT.createTrigger("send_oats"); + CustomEventCriterion.Trigger RECEIVE_OATS = CUSTOM_EVENT.createTrigger("receive_oats"); private static > T register(T obj) { return MixinCriteria.register(obj); diff --git a/src/main/java/com/minelittlepony/unicopia/block/SegmentedBlock.java b/src/main/java/com/minelittlepony/unicopia/block/SegmentedBlock.java new file mode 100644 index 00000000..441e9882 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/SegmentedBlock.java @@ -0,0 +1,63 @@ +package com.minelittlepony.unicopia.block; + +import java.util.Arrays; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.util.shape.VoxelShapes; +import net.minecraft.world.BlockView; + +public interface SegmentedBlock { + double[] STAGE_SIZES = new double[] {3.2, 6.4, 9.6, 12.8, 16}; + VoxelShape[] STAGE_SHAPES = Arrays.stream(STAGE_SIZES).mapToObj(height -> { + return Block.createCuboidShape(0, 0, 0, 16, height, 16); + }).toArray(VoxelShape[]::new); + + static VoxelShape getShape(int age) { + if (age < 0 || age >= STAGE_SHAPES.length) { + return VoxelShapes.fullCube(); + } + return STAGE_SHAPES[age]; + } + + static double getHeight(int age) { + if (age < 0 || age >= STAGE_SHAPES.length) { + return 16; + } + return STAGE_SIZES[age]; + } + + static VoxelShape[] computeShapes(int maxHeight) { + VoxelShape[] shapes = new VoxelShape[STAGE_SIZES.length * maxHeight]; + + for (int i = 0; i < maxHeight; i++) { + for (int j = 0; j < STAGE_SIZES.length; j++) { + shapes[j + (i * STAGE_SIZES.length)] = Block.createCuboidShape(0, 0, 0, 16, STAGE_SIZES[j] + (i * 16), 16); + } + } + + return shapes; + } + + boolean isBase(BlockState state); + + boolean isNext(BlockState state); + + default BlockPos getTip(BlockView world, BlockPos startingPos) { + while (isNext(world.getBlockState(startingPos.up())) && !world.isOutOfHeightLimit(startingPos)) { + startingPos = startingPos.up(); + } + + return startingPos; + } + + default BlockPos getRoot(BlockView world, BlockPos startingPos) { + while (isBase(world.getBlockState(startingPos.down())) && !world.isOutOfHeightLimit(startingPos)) { + startingPos = startingPos.down(); + } + + return startingPos; + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/SegmentedCropBlock.java b/src/main/java/com/minelittlepony/unicopia/block/SegmentedCropBlock.java new file mode 100644 index 00000000..a71ba5bb --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/block/SegmentedCropBlock.java @@ -0,0 +1,170 @@ +package com.minelittlepony.unicopia.block; + +import java.util.function.Supplier; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.block.*; +import net.minecraft.item.ItemConvertible; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.state.StateManager; +import net.minecraft.state.property.IntProperty; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.random.Random; +import net.minecraft.util.shape.VoxelShape; +import net.minecraft.world.*; + +public class SegmentedCropBlock extends CropBlock implements SegmentedBlock { + + private final ItemConvertible seeds; + + @Nullable + private final Supplier prevSegmentSupplier; + @Nullable + private Supplier nextSegmentSupplier; + + private final int progressionAge; + + public static SegmentedCropBlock create(final int maxAge, int progressionAge, Block.Settings settings, + ItemConvertible seeds, + @Nullable Supplier prevSegmentSupplier, + @Nullable Supplier nextSegmentSupplier) { + + final IntProperty age = IntProperty.of("age", 0, maxAge); + return new SegmentedCropBlock(progressionAge, settings, seeds, prevSegmentSupplier, nextSegmentSupplier) { + @Override + public IntProperty getAgeProperty() { + return age; + } + + @Override + public int getMaxAge() { + return maxAge; + } + + @Override + protected void appendProperties(StateManager.Builder builder) { + builder.add(age); + } + }; + } + + protected SegmentedCropBlock(int progressionAge, Block.Settings settings, + ItemConvertible seeds, + @Nullable Supplier prevSegmentSupplier, + @Nullable Supplier nextSegmentSupplier) { + super(settings); + this.seeds = seeds; + this.prevSegmentSupplier = prevSegmentSupplier; + this.nextSegmentSupplier = nextSegmentSupplier; + this.progressionAge = progressionAge; + } + + public SegmentedCropBlock createNext(int progressionAge) { + SegmentedCropBlock next = create(getMaxAge() - this.progressionAge, progressionAge, Settings.copy(this), seeds, () -> this, null); + nextSegmentSupplier = () -> next; + return next; + } + + @Override + public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { + BlockPos tip = getTip(world, pos); + BlockPos root = getRoot(world, pos); + + int height = (tip.getY() - root.getY()); + + BlockState tipState = world.getBlockState(tip); + double tipHeight = SegmentedBlock.getHeight(((SegmentedCropBlock)tipState.getBlock()).getAge(tipState)); + + double offset = (root.getY() - pos.getY()) * 16; + + return Block.createCuboidShape(0, offset, 0, 16, height * 16 + tipHeight + offset, 16); + } + + @Override + public ItemConvertible getSeedsItem() { + return seeds; + } + + @Override + protected boolean canPlantOnTop(BlockState state, BlockView view, BlockPos pos) { + return (state.getBlock() instanceof SegmentedCropBlock o && o.canSupportBlock(this, state, view, pos)) || super.canPlantOnTop(state, view, pos); + } + + protected boolean canSupportBlock(Block other, BlockState state, BlockView view, BlockPos pos) { + return (nextSegmentSupplier != null && nextSegmentSupplier.get() == other); + } + + @Override + public void applyGrowth(World world, BlockPos pos, BlockState state) { + super.applyGrowth(world, pos, state); + propagateGrowth(world, pos, state); + } + + @Override + public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { + super.randomTick(state, world, pos, random); + propagateGrowth(world, pos, state); + } + + private void propagateGrowth(World world, BlockPos pos, BlockState state) { + int oldAge = getAge(state); + state = world.getBlockState(pos); + int ageChange = getAge(state) - oldAge; + + if (ageChange <= 0) { + return; + } + + onGrown(world, pos, state, ageChange); + + BlockPos root = getRoot(world, pos); + BlockPos tip = getTip(world, pos); + for (BlockPos p : BlockPos.iterate(root, tip)) { + if (p.getY() == pos.getY()) { + continue; + } + + BlockState s = world.getBlockState(p); + if (s.getBlock() instanceof SegmentedCropBlock segment) { + int segAge = Math.min(segment.getAge(s) + ageChange, segment.getMaxAge()); + world.setBlockState(p, s.with(segment.getAgeProperty(), segAge)); + segment.onGrown(world, p, s, ageChange); + } + } + } + + private void onGrown(World world, BlockPos pos, BlockState state, int ageChange) { + if (nextSegmentSupplier != null && getAge(state) >= progressionAge && world.isAir(pos.up())) { + SegmentedCropBlock nxt = nextSegmentSupplier.get(); + + world.setBlockState(pos.up(), nxt.withAge(Math.min(ageChange, nxt.getMaxAge())), Block.NOTIFY_LISTENERS); + } + } + + @Override + public boolean hasRandomTicks(BlockState state) { + return super.hasRandomTicks(state) || nextSegmentSupplier != null; + } + + @Override + public boolean isFertilizable(BlockView world, BlockPos pos, BlockState state, boolean isClient) { + return super.isFertilizable(world, pos, state, isClient) || (nextSegmentSupplier != null && isNext(world.getBlockState(pos.up()))); + } + + @Override + protected int getGrowthAmount(World world) { + return super.getGrowthAmount(world) / 2; + } + + @Override + public boolean isBase(BlockState state) { + return state.getBlock() == this || (prevSegmentSupplier != null && prevSegmentSupplier.get().isBase(state)); + } + + @Override + public boolean isNext(BlockState state) { + return state.getBlock() == this || (nextSegmentSupplier != null && nextSegmentSupplier.get().isNext(state)); + } + +} diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java index b67faef5..de44e001 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java +++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java @@ -66,6 +66,10 @@ public interface UBlocks { Block SOUR_APPLE = register("sour_apple", new FruitBlock(FabricBlockSettings.of(Material.GOURD, MapColor.GREEN).sounds(BlockSoundGroup.WOOD), Direction.DOWN, SOUR_APPLE_LEAVES, FruitBlock.DEFAULT_SHAPE)); Block SOUR_APPLE_SPROUT = register("sour_apple_sprout", new SproutBlock(0xE5FFCC88, () -> UItems.SOUR_APPLE_SEEDS, () -> UTreeGen.SOUR_APPLE_TREE.sapling().map(Block::getDefaultState).get())); + SegmentedCropBlock OATS = register("oats", SegmentedCropBlock.create(11, 5, AbstractBlock.Settings.copy(Blocks.WHEAT), () -> UItems.OAT_SEEDS, null, () -> UBlocks.OATS_STEM)); + SegmentedCropBlock OATS_STEM = register("oats_stem", OATS.createNext(5)); + SegmentedCropBlock OATS_CROWN = register("oats_crown", OATS_STEM.createNext(5)); + static T register(String name, T item) { return register(Unicopia.id(name), item); } @@ -83,7 +87,7 @@ public interface UBlocks { if (block instanceof TintedBlock) { TintedBlock.REGISTRY.add(block); } - if (block instanceof SaplingBlock || block instanceof SproutBlock || block instanceof FruitBlock) { + if (block instanceof SaplingBlock || block instanceof SproutBlock || block instanceof FruitBlock || block instanceof CropBlock) { TRANSLUCENT_BLOCKS.add(block); } return Registry.register(Registry.BLOCK, id, block); diff --git a/src/main/java/com/minelittlepony/unicopia/block/data/DragonBreathStore.java b/src/main/java/com/minelittlepony/unicopia/block/data/DragonBreathStore.java index 9c4b9369..2e0f8e0b 100644 --- a/src/main/java/com/minelittlepony/unicopia/block/data/DragonBreathStore.java +++ b/src/main/java/com/minelittlepony/unicopia/block/data/DragonBreathStore.java @@ -3,6 +3,8 @@ package com.minelittlepony.unicopia.block.data; import java.util.*; import com.minelittlepony.unicopia.Unicopia; +import com.minelittlepony.unicopia.item.UItems; + import net.minecraft.item.ItemStack; import net.minecraft.nbt.*; import net.minecraft.util.Identifier; @@ -79,6 +81,15 @@ public class DragonBreathStore extends PersistentState { } public void put(String recipient, ItemStack payload) { + + if (payload.getItem() == UItems.OATS) { + ItemStack oats = UItems.IMPORTED_OATS.getDefaultStack(); + oats.setNbt(payload.getNbt()); + oats.setCount(payload.getCount()); + put(recipient, oats); + return; + } + synchronized (locker) { doPurge(); if (peekEntries(recipient).stream().noneMatch(i -> { diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/GlassesFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/GlassesFeatureRenderer.java index 385832ab..7b0536b8 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/GlassesFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/GlassesFeatureRenderer.java @@ -70,8 +70,6 @@ public class GlassesFeatureRenderer implements Accessory public void setAngles(LivingEntity entity, BipedEntityModel biped) { root.getChild(EntityModelPartNames.HEAD).copyTransform(biped.head); root.getChild(EntityModelPartNames.HAT).copyTransform(biped.hat); - - root.getChild(EntityModelPartNames.HAT).resetTransform(); } @Override diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Living.java b/src/main/java/com/minelittlepony/unicopia/entity/Living.java index 880c77af..45cb9179 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Living.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Living.java @@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.ability.magic.SpellContainer; import com.minelittlepony.unicopia.ability.magic.SpellPredicate; import com.minelittlepony.unicopia.ability.magic.SpellContainer.Operation; import com.minelittlepony.unicopia.ability.magic.spell.Situation; +import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.block.data.DragonBreathStore; import com.minelittlepony.unicopia.item.GlassesItem; import com.minelittlepony.unicopia.item.UItems; @@ -143,6 +144,10 @@ public abstract class Living implements Equine, Caste item.setPosition(randomPos); item.world.spawnEntity(item); entity.world.playSoundFromEntity(null, entity, SoundEvents.ITEM_FIRECHARGE_USE, entity.getSoundCategory(), 1, 1); + + if (stack.payload().getItem() == UItems.OATS && entity instanceof PlayerEntity player) { + UCriteria.RECEIVE_OATS.trigger(player); + } }); } } diff --git a/src/main/java/com/minelittlepony/unicopia/item/DragonBreathScrollItem.java b/src/main/java/com/minelittlepony/unicopia/item/DragonBreathScrollItem.java index 064d6ef6..402111aa 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/DragonBreathScrollItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/DragonBreathScrollItem.java @@ -2,6 +2,7 @@ package com.minelittlepony.unicopia.item; import java.util.UUID; +import com.minelittlepony.unicopia.advancement.UCriteria; import com.minelittlepony.unicopia.block.data.DragonBreathStore; import net.minecraft.entity.player.PlayerEntity; @@ -29,6 +30,9 @@ public class DragonBreathScrollItem extends Item { stack.split(1); if (!world.isClient) { + if (payload.getItem() == UItems.OATS) { + UCriteria.SEND_OATS.trigger(player); + } DragonBreathStore.get(world).put(stack.getName().getString(), payload.split(1)); } player.playSound(SoundEvents.ITEM_FIRECHARGE_USE, 1, 1); diff --git a/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java b/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java new file mode 100644 index 00000000..32ee0276 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java @@ -0,0 +1,21 @@ +package com.minelittlepony.unicopia.item; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.StewItem; +import net.minecraft.world.World; + +public class OatmealItem extends StewItem { + + public OatmealItem(Settings settings) { + super(settings); + } + + @Override + public ItemStack finishUsing(ItemStack stack, World world, LivingEntity user) { + if (!world.isClient) { + user.clearStatusEffects(); + } + return super.finishUsing(stack, world, user); + } +} diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index caf902a9..52c74c7e 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -9,8 +9,6 @@ import com.minelittlepony.unicopia.entity.UEntities; import com.minelittlepony.unicopia.item.enchantment.UEnchantments; import com.minelittlepony.unicopia.item.toxin.UFoodComponents; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; import net.minecraft.item.*; import net.minecraft.item.Item.Settings; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; @@ -29,14 +27,7 @@ public interface UItems { Item SOUR_APPLE = register("sour_apple", AppleItem.registerTickCallback(new Item(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE)))); ZapAppleItem ZAP_APPLE = register("zap_apple", AppleItem.registerTickCallback(new ZapAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_APPLE)))); - Item ZAP_BULB = register("zap_bulb", new Item(new Item.Settings().group(ItemGroup.FOOD).food(new FoodComponent.Builder() - .hunger(-2) - .saturationModifier(-0.8f) - .alwaysEdible() - .statusEffect(new StatusEffectInstance(StatusEffects.POISON, 100, 0), 0.6F) - .statusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 100, 0), 0.6F) - .statusEffect(new StatusEffectInstance(StatusEffects.BAD_OMEN, 100, 0), 0.6F) - .build()))); + Item ZAP_BULB = register("zap_bulb", new Item(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.ZAP_BULB))); Item ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); Item COOKED_ZAP_APPLE = register("cooked_zap_apple", new Item(new Item.Settings().group(ItemGroup.FOOD).food(FoodComponents.APPLE))); @@ -68,6 +59,11 @@ public interface UItems { Item PEGASUS_FEATHER = register("pegasus_feather", new Item(new Item.Settings().group(ItemGroup.MATERIALS))); Item GRYPHON_FEATHER = register("gryphon_feather", new Item(new Item.Settings().group(ItemGroup.MATERIALS))); + Item OAT_SEEDS = register("oat_seeds", new AliasedBlockItem(UBlocks.OATS, new Item.Settings().group(ItemGroup.MATERIALS))); + Item OATS = register("oats", new Item(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.OATS))); + Item IMPORTED_OATS = register("imported_oats", new Item(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.IMPORTED_OATS))); + Item OATMEAL = register("oatmeal", new OatmealItem(new Item.Settings().recipeRemainder(Items.BOWL).maxCount(1).group(ItemGroup.FOOD).food(UFoodComponents.OATMEAL))); + Item DAFFODIL_DAISY_SANDWICH = register("daffodil_daisy_sandwich", new Item(new Item.Settings().group(ItemGroup.FOOD).food(UFoodComponents.DAFODIL_DAISY_SANDWICH))); Item HAY_BURGER = register("hay_burger", new Item(new Item.Settings().group(ItemGroup.FOOD).maxCount(1).food(UFoodComponents.HAY_BURGER))); Item HAY_FRIES = register("hay_fries", new Item(new Item.Settings().group(ItemGroup.FOOD).maxCount(16).food(UFoodComponents.HAY_FRIES))); diff --git a/src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java b/src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java index 393911e2..98cbf1d8 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java +++ b/src/main/java/com/minelittlepony/unicopia/item/toxin/UFoodComponents.java @@ -1,20 +1,22 @@ package com.minelittlepony.unicopia.item.toxin; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.entity.effect.StatusEffects; import net.minecraft.item.FoodComponent; public interface UFoodComponents { - - FoodComponent BAD_TOMATO = builder(3, 14).build(); - FoodComponent TOMATO = builder(4, 13).build(); - FoodComponent GOOD_TOMATO = builder(6, 14).build(); - - FoodComponent ALFALFA_SEEDS = builder(1, 4).build(); - FoodComponent ALFALFA_LEAVES = builder(1, 3).build(); + FoodComponent OATS = builder(1, 0.7F).build(); + FoodComponent IMPORTED_OATS = builder(3, 1.3F).build(); + FoodComponent OATMEAL = builder(0, 1.3F) + .statusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 1200, 1), 1) + .statusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 1200, 1), 0.3F) + .statusEffect(new StatusEffectInstance(StatusEffects.SPEED, 1200, 1), 0.2F) + .build(); FoodComponent DAFODIL_DAISY_SANDWICH = builder(3, 2).build(); - FoodComponent HAY_BURGER = builder(3, 4).build(); - FoodComponent HAY_FRIES = builder(1, 5).build(); - FoodComponent SALAD = builder(4, 2).build(); - FoodComponent CIDER = builder(4, 2).alwaysEdible().build(); + FoodComponent HAY_BURGER = builder(7, 1.4F).build(); + FoodComponent HAY_FRIES = builder(4, 2).build(); + FoodComponent SALAD = builder(3, 1).build(); + FoodComponent CIDER = builder(2, 1.7F).alwaysEdible().build(); FoodComponent JUICE = builder(2, 2).alwaysEdible().build(); FoodComponent BURNED_JUICE = builder(3, 1).build(); @@ -26,6 +28,12 @@ public interface UFoodComponents { FoodComponent SUGAR = builder(20, -2).build(); FoodComponent ZAP_APPLE = builder(4, 0.3F).alwaysEdible().snack().build(); + FoodComponent ZAP_BULB = builder(-2, -0.8f) + .alwaysEdible() + .statusEffect(new StatusEffectInstance(StatusEffects.POISON, 100, 0), 0.6F) + .statusEffect(new StatusEffectInstance(StatusEffects.BLINDNESS, 100, 0), 0.6F) + .statusEffect(new StatusEffectInstance(StatusEffects.BAD_OMEN, 100, 0), 0.6F) + .build(); static FoodComponent.Builder builder(int hunger, float saturation) { return new FoodComponent.Builder() diff --git a/src/main/resources/assets/unicopia/blockstates/oats.json b/src/main/resources/assets/unicopia/blockstates/oats.json new file mode 100644 index 00000000..cdba5a4a --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/oats.json @@ -0,0 +1,16 @@ +{ + "variants": { + "age=0": { "model": "unicopia:block/oats_stage0" }, + "age=1": { "model": "unicopia:block/oats_stage1" }, + "age=2": { "model": "unicopia:block/oats_stage2" }, + "age=3": { "model": "unicopia:block/oats_stage3" }, + "age=4": { "model": "unicopia:block/oats_stage4" }, + "age=5": { "model": "unicopia:block/oats_stage5_lower" }, + "age=6": { "model": "unicopia:block/oats_stage6_lower" }, + "age=7": { "model": "unicopia:block/oats_stage7_lower" }, + "age=8": { "model": "unicopia:block/oats_stage8_lower" }, + "age=9": { "model": "unicopia:block/oats_stage9_lower" }, + "age=10": { "model": "unicopia:block/oats_stage9_lower" }, + "age=11": { "model": "unicopia:block/oats_stage9_lower" } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/oats_crown.json b/src/main/resources/assets/unicopia/blockstates/oats_crown.json new file mode 100644 index 00000000..1f75a155 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/oats_crown.json @@ -0,0 +1,6 @@ +{ + "variants": { + "age=0": { "model": "unicopia:block/oats_stage10_upper" }, + "age=1": { "model": "unicopia:block/oats_stage11_upper" } + } +} diff --git a/src/main/resources/assets/unicopia/blockstates/oats_stem.json b/src/main/resources/assets/unicopia/blockstates/oats_stem.json new file mode 100644 index 00000000..9182a177 --- /dev/null +++ b/src/main/resources/assets/unicopia/blockstates/oats_stem.json @@ -0,0 +1,11 @@ +{ + "variants": { + "age=0": { "model": "unicopia:block/oats_stage5_upper" }, + "age=1": { "model": "unicopia:block/oats_stage6_upper" }, + "age=2": { "model": "unicopia:block/oats_stage7_upper" }, + "age=3": { "model": "unicopia:block/oats_stage8_upper" }, + "age=4": { "model": "unicopia:block/oats_stage9_upper" }, + "age=5": { "model": "unicopia:block/oats_stage10_lower" }, + "age=6": { "model": "unicopia:block/oats_stage9_lower" } + } +} diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index c5c9e78e..5695e416 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -62,7 +62,12 @@ "item.unicopia.rock_stew": "Rock Stew", "item.unicopia.green_apple_seeds": "Granny Smith Apple Seeds", "item.unicopia.sweet_apple_seeds": "Sweet Apple Seeds", + "item.unicopia.sour_apple_seeds": "Sour Apple Seeds", + "item.unicopia.oats": "Oats", + "item.unicopia.imported_oats": "Fancy Imported Oats", + "item.unicopia.oatmeal": "Oatmeal", + "item.unicopia.oat_seeds": "Oat Seeds", "item.unicopia.daffodil_daisy_sandwich": "Daffodil Daisy Sandwich", "item.unicopia.hay_burger": "Hay Burger", "item.unicopia.hay_fries": "Hay Fries", @@ -108,6 +113,11 @@ "block.unicopia.sweet_apple_leaves": "Sweet Apple Leaves", "block.unicopia.sweet_apple_sapling": "Sweet Apple Sapling", "block.unicopia.sweet_apple_sprout": "Sweet Apple Sprout", + "block.unicopia.sour_apple_leaves": "Sour Apple Leaves", + "block.unicopia.sour_apple_sapling": "Sour Apple Sapling", + "block.unicopia.sour_apple_sprout": "Sour Apple Sprout", + + "block.unicopia.oats": "Oats", "entity.unicopia.butterfly": "Butterfly", "entity.unicopia.twittermite": "Twittermite", diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage0.json b/src/main/resources/assets/unicopia/models/block/oats_stage0.json new file mode 100644 index 00000000..0eb3069a --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage0.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage0" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage1.json b/src/main/resources/assets/unicopia/models/block/oats_stage1.json new file mode 100644 index 00000000..5bcf45ed --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage1.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage1" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage10_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage10_lower.json new file mode 100644 index 00000000..126b394e --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage10_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage10_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage10_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage10_upper.json new file mode 100644 index 00000000..e3551738 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage10_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage10_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage11_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage11_lower.json new file mode 100644 index 00000000..f8e678ab --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage11_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage11_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage11_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage11_upper.json new file mode 100644 index 00000000..fc0fd0cd --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage11_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage11_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage2.json b/src/main/resources/assets/unicopia/models/block/oats_stage2.json new file mode 100644 index 00000000..e6e4d396 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage2.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage2" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage3.json b/src/main/resources/assets/unicopia/models/block/oats_stage3.json new file mode 100644 index 00000000..0fa98fc6 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage3.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage3" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage4.json b/src/main/resources/assets/unicopia/models/block/oats_stage4.json new file mode 100644 index 00000000..a3c5b132 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage4.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage4" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage5_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage5_lower.json new file mode 100644 index 00000000..8ba06faa --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage5_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage5_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage5_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage5_upper.json new file mode 100644 index 00000000..a6b268e9 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage5_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage5_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage6_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage6_lower.json new file mode 100644 index 00000000..8d26e73c --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage6_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage6_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage6_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage6_upper.json new file mode 100644 index 00000000..e1040e8d --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage6_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage6_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage7_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage7_lower.json new file mode 100644 index 00000000..1fd6ad91 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage7_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage7_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage7_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage7_upper.json new file mode 100644 index 00000000..979716e3 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage7_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage7_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage8_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage8_lower.json new file mode 100644 index 00000000..b3a03e8b --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage8_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage8_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage8_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage8_upper.json new file mode 100644 index 00000000..02950f05 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage8_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage8_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage9_lower.json b/src/main/resources/assets/unicopia/models/block/oats_stage9_lower.json new file mode 100644 index 00000000..9e46c3f5 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage9_lower.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage9_lower" + } +} diff --git a/src/main/resources/assets/unicopia/models/block/oats_stage9_upper.json b/src/main/resources/assets/unicopia/models/block/oats_stage9_upper.json new file mode 100644 index 00000000..a45d5194 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/block/oats_stage9_upper.json @@ -0,0 +1,6 @@ +{ + "parent": "block/crop", + "textures": { + "crop": "unicopia:block/oats_stage9_upper" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/imported_oats.json b/src/main/resources/assets/unicopia/models/item/imported_oats.json new file mode 100644 index 00000000..554311e8 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/imported_oats.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/imported_oats" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/oat_seeds.json b/src/main/resources/assets/unicopia/models/item/oat_seeds.json new file mode 100644 index 00000000..653d2e0f --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/oat_seeds.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/oat_seeds" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/oatmeal.json b/src/main/resources/assets/unicopia/models/item/oatmeal.json new file mode 100644 index 00000000..1975a5aa --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/oatmeal.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/oatmeal" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/oats.json b/src/main/resources/assets/unicopia/models/item/oats.json new file mode 100644 index 00000000..b2928654 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/oats.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/oats" + } +} diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage0.png b/src/main/resources/assets/unicopia/textures/block/oats_stage0.png new file mode 100644 index 0000000000000000000000000000000000000000..f82a89a8f391878068888ebebddc78a962a74ec6 GIT binary patch literal 880 zcmV-$1CRWPP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KHmfR=|hTmC5mVj-V(D306E_M=pk$SwConn&(=L+MnBN%AD6L5(KuN8PC-MCF|w zHFIY(tvuyo!xQXaGe4J4*+K-h!J`mC7q4`Tb>Hd z*;k4Pvp;i%xR@6PT3M9!7hV8D^IS)EB={^JFMx%J!fT~DFu|6$o5W`HSX+_~&;mz8 zt+&oT?gB^=#x?{)0s^^^7!}IS>_o_8fKNl@EJ=9-0y5))C|N}c-~_L+(Z}iVW#gL} zTL>Ubia5|zX<(&lT9Ud3)=)DsHM3%FVbxlZqQy!nUe;c0F0O7~+&#Q{3keO25*`sX zTB=+Hd(~>GUZd998U}4pZs^^j!Lacrn{Kw1&9~U<);g9?*KWOZ@6l^-Y4DJt!$uiC zV${)g+Od>&-EA+s@3GgtO)Rx3Q>V=`ea5V_UDOV$=^eArMqnV{AC} zosM?SzTWYNxmOzS>Nxq|+)918{jPQ#7Va{QwmL-z;lqz?;_&jNUQaruD^x#2tw*Tm zgbMvUQlB`H;L9@o0Dbsu@3}Mt7ytkOK1oDDR5;6HU>F6XU=+|6tX}2%pJGF{Z1()W zVZA%tpj9hfFbrjaF%~U!#E^XV?k7V);7&#u|L zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KFk{l@vhTl2G904sLaU9l&xq**AKUtYoy_7rL zWBaX=$c9o1N$6wiFn|2J!asP(je{ohTylBBx)sE@YwWprDb?>FuFnGw&kwzXi ze3VfqO-!Y!GtE40`Yf|9OtmFTS6X@5@>N#7Q#+`Jcg#MM`6VVzU}Tf1*CKie^w^aJkLu{rB<|-sK_Z zlZ)W0AvY>RL1>%_Lbx#=zCFrVr?fQ5fo}1|XwGNY>Y3@3UbPLnHLZ7QWl0;S^2~=) zc&q)h+S=7kDy|-`mq*2gsr7ME6W<@@`j{W#d}ZLHvtVsr%6Ti(lkt5S(Zclx|E7lj z04#@oPaD$S2><{9b4f%&R5;6HU>F6XVEBWL8{GdBQp1E#l8ud-VeJ}Mf`%}xUWKV> z<_z2abLZF-=Yr6%-Hc0@IRBqA*#@rR{rjH`FJ62@Q9OB)^?#gRxPAL0Lr(4y#->J- v{|pQa3>B597=QmpRsZG7Z#cW59-Ko#<#_00000NkvXXu0mjfq;&1j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage10_lower.png b/src/main/resources/assets/unicopia/textures/block/oats_stage10_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..60f2d4661068e5f1c0565a1485046eb47ff94ae5 GIT binary patch literal 2489 zcmV;q2}bsbP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1eyvgIZW{AU$e0z%@o9L%FCJIM0Wfbg-;+{#oX zIj%dlc?hI#weXn!*Pp}ufuCb>Mtn>mhhXuOEZG%2B>VYwy=QC3d=~tXw$VL`%&X%( z5w4%w9qx=f@5XyQo`(1_A>4QRsh#{+JKxK=*N)OL>g7zIFR93J@<;B$Td04$6MM$IrMI9TkpOl0tDo}YuKd|<^XV#n`>iE zq&3!gx0{hd0K#+N2xu}FU?t)u7>Sa=q2k$#_dfXOlh3{c4ibC_A%>ZYC32MLV~8=P zm}5ztB>5ClOey75Om>-(t3HPubILiFf<+4~7tAiHpy6^CUvl{?T=7a*zDfmss#IS? zjWyL=i)pTLljd7!v89$<>C{1`F5UOgV^2NzGC;M#Lxvw=#F0iG~8k%88$t0Wl{8#N$K&gmx1%n@Ge><{7xhCrINgfwJAn*&P~2Yi zPE~fNxqGYIoz;SNG46RWgRrc#CN&202~>J5V3rMf+PFS8zL&N-tv0$S>|lZOC-#Q1k)j5z-;XrlPSTg5!9XEpip!}ARCg-xos#oy9VVM z<#wWs=6D_MOtOT$Uc^$<=4L^CJA*NgH5LSFZ3m-ukSh;=(?&KU=VTqy69QD_g@9}3 z2?4^jV~L#19|9~HTSM^cQE3Yf4)C2w=D?kLXDRnyJbLuX<2{DKzU!nRN}{68)Bjk0bHrNQE+J2;7~* z2*Dsl$Y37;<%Q<8nHKQTvPYE_DtE6imCQf7mQEqfjKb5YO_gtHf8Lvn^GdwzOiXeL+WZJ;HXdt8+Pk7D^Pumf;g>s) zrR@SKskWWc8K>_Z87RRvQEj=-KCZoCH+_k(1EwWCLoUg{!Two^U!o8by`o%CUkX)r z5X}5P29=DHwkR6KYpT_D*C#qu<)zN?Xd@87@m&jKbaKU07WKoSOfhn=WVhjwVf|+D zE|8;T^EW;oqM0TVGmiiO0)9zEK~y-)Ws}K|Oi>hvzjNz#S64SBrmm#;A8KO=(m^yU z?1Zoo3ko~hY=OiS5@HC-)MDyRNF;_tqHVOGMMSMw*{P7w)za#zuJ_(O7WdUNoz2TV z_uTUv&Up|=rCiefzHYsJt6MAOk^NNxM_)Q;Iugupk zU;N}@vu5C3|6gYVaIJTN0<7QgOpYI$tz%;mqoV=ow8y{Ud4_zUD9t7&Unt7(aGm~v zYXDfQY}!01D;BOLoi`@cr_2Cq8?M~}?XRo&|laTm>RzEG4!g_YzBMHv~X zCl6Pzc`E16b!imoZwdKAQB++*6^vz4 z90dqNrF5Z7J=DhLNsQ*)z4^EoYb_7%FV$tsABr2X0kQG4gjy}cgkjS>%lUKjG?Q`K zT3ZF*5Bc+OLW!iinVa&^gQ*v6q!tljhmiJt>$Eo zjVV1nFXdvXOQ%iGI_CaQN2#UNux0BD@%@mm-|Bq+?9*iDd4|iE7OJ)GyrDQK-$&e! zX4=w@k{@qYON&8(gNNQG%aY5D$M+j_bhIRFCEod8u?;Orzjz8u00000NkvXXu0mjf D{eZzX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage10_upper.png b/src/main/resources/assets/unicopia/textures/block/oats_stage10_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..9cfef8cd2dd1703a4bee934e71cfbbbccf3f24cf GIT binary patch literal 1027 zcmV+e1pNDnP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KFlItoAhTpY{vjj8%VmX+h>g?by|NPia(nESk zci*=*l|YmqA?X8`P2<16lm6i1;zAa)r;<{@WyOkA3_RSfarPyIxyFVMpEka#n4bM{ z88O;DyP#L}dKj2jn`CZuc6_v{>B*!8-MJd4OLjs)$AT{-0N^zz$h&h8UA(^6Zt zg!-g2sY@#R2*M48(S2G%%lJf$^WF-YhZ-8Og&tbi&>9yO)-c()bLGin?;AISXfhR3d+7ZF9fDkrOt9NM=SI9egSx7bTMo2slRRh*C^70glUB8*?)6T8VO) zafAROYSIieMJrgDMN4Ga9DArnjTU1}F-MOj)}+Z&Oey8G&SK4)EytX4&YnxIu5KPZ zd3N{Wm5LO_S&b!?T)dQ0D;BNrTrs0J2Qjm zLJj7eFD`i9PU2z)Vqy&9c@e;dmc=YMo5>yBoPz z+z99XtK8%%Ia=s`f*dV$cgVfwc86MD_xHBWVZe=T9m7@Bpg4XI46ou)$YVV{I^oyR zucKc_|FfgHwPV<4!@6wxfr_ z!52MJ(D&A(PcHajl;l5@8$B@VT@igLfIDLPxH6y1nH~xMv0{I*T=Y%q*GV+-tZ=AG z#4EvwY>^`#b4KDrKejM(*vEK@IeQ)b{JSY0E~e9Vy2)Y4o2q-F7h?LH`Zf!XI!Bxq z1|F~X9|ezL)NLh`s%Q^KB~XT>-p-H)-YK4BX}2t&$4#FL{QbC>h~88o3%O+B!?n(n z6<#CmkfU$y!rQ)@)bScl{{YJn;mMC`Zb|?E0Axu-K~y-)V_+BsBLRH<@c2L3nx9>q zNl-HrrLJNk#Wt8aZUI?FoKD5XCTIyZjra_JvEg2j(obiE2}KYNzle}dk@=Dc-l-TxEv8UR}`UBpj~F9QGo002ovPDHLkV1ly;@$mov literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage11_upper.png b/src/main/resources/assets/unicopia/textures/block/oats_stage11_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..5cc4253ed6fb318dd3de92dd02b011c660ac6543 GIT binary patch literal 1850 zcmV-A2gUe_P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O=0%lH)cE{pTri1Y+TK9IjQlL5`nCk+LPXyJxy5 z5zFQVVtW7unf}k;!~BJZS=6Wt(I@XM9!;7!V-W50>AO$XjyYERXs^+Oip*`}91+^P zbw)4fWi3AB$z&v#1OCy|yLECe>+%r8H;v-Sh|w>#B^nFjTvuT-I;a_4}axw0H< zQ35BfVugU3s3;8%lB7u#mdafOtNhS~4!P+NS1CepBTzDd8R5jy%sKee_Lk8Yb-IXP z{pl;{#XS8^(~C0yK?Oi)oN?q12cPZr0kB}Apqg%uFfiM)SQJOk*b;L9Eg*F0bsY|E zGk}XA+d&x;AYeU-BTqIk2O{_}0-p@cS&VW41mqkyXvr$#0Z!y88)pI?wCs2-BZUBj z6E6YKB+0-^)u}fcG$Mww6Q|BO?}Cdix$MQOci#KpXD;R-L4ylEgb+gtIZD*%qK_fQ zm|`}GlOR`J@+qX4Qpy=ZGdO3Q&M{-5aFL?L6<3ZfG= zEQfHipn09Ri5U=MB_JLq0tjfHnAu3GJdraKGn*J$;TT%F2~MMl7!cG>>;^rsdm{G% zH-o(YDQNiEj;BbMgpI^0z-KiA>jn_tU%E9wKK`7_Ua?d)Ic^@hUy$>A%7 z`7S!2F*l!)AZ3r?NDlW!3wxH8-ybl)7XN#SnV%kh?aj!^ZyT&+8`lxkFTs&IayiD~ z?Ofy1V+Bu`eayVbT1Sbb83enCTd)t!*D`UQ!&Kw%fcG>E10yrK1#k#^HQF zEcY|qKT_yBhMJ^L1Ks=t@=<4!jvzml*1VyBOT1mgmo70_dt3dpioX9 z;e$^QSJ$jyV!pEKo+UR)o&3{J-N!Q^^9P*RUqZL>wplA2Dm$ucMRh-;`ndd8RDW@; zg?@6Z(;8W`Y+D_&CkYNV10~DO06(?-JS`u7$|q+q!ySA~tfAD?O3~1iP-N{%ib1J6 zw`LZV-;nHffX~XbQQ85Hsw;IATAK?>q)=(G@f8JM8T*`g)MTg>4?28GcwQSNae(P- z-87+?`aqGj`L|T4*L}>*i7Q)4I9_-B*s0*oK!uTD)K}6#X?t8r58{4Ptb zqR4KG1HOq%-2zdAhv@dinxvs@?tR?0uoLNY1Nev1uik&zGriq5-DR`!X{{k~ic-7003}v-NQt@!{zgM zeLeJ~ o^G~9vD8SInqYxrMz;$c*0#k7ruGd6##{d8T07*qoM6N<$g29P;N&o-= literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage2.png b/src/main/resources/assets/unicopia/textures/block/oats_stage2.png new file mode 100644 index 0000000000000000000000000000000000000000..11e6d25f7337f87806937509becc15bd24b1e001 GIT binary patch literal 1208 zcmV;p1V{UcP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|cmgFW3{bvguiaiJ1I61oCp*Z=u@xWDjF7Ihku#T=u@qggW-5au6GzxwR`n6%=hi$}KI@NK z^*dJZi+RF8Gm0{QAq7Ba>^ur9z`K2X04$U!q-K~63oQOPRUCmHxg~A^Ef5Uo^_-mA zr2rvotuvbHlIc3W^mja^&nhRzZD_|Ua$e~9#;*kzJ@=+?%r)mu~)>N(LT3q8MO{&_k%o;t%8lAW)xE>)8M)6+III`?P%@x$R@zx?p+5Ew|<2s+@eASoYUgy5GYHWxxdyifx*-Tm0NEKD_e2 zEcv^ajzVCPM@QsqIl~qUOHcV4$hflgVP>abmX(n^K}-FGjC8k})GzI^HnUS@@lt6g zI6fStwQZ}RuBm&07;|*5p!F?Orx0x+5qe&&9ecI4)dNeN@axRuxDyQ@N$DupKdGo| zEL^}UqnP@^nEPz-dF%|d_a9~2nUD}NR7=KtFrvo$qF3%qmIsO}d?dSn0pN?GUM>Js zwEzGB%1J~)R5;7+kiSmCP!xy1%PVzdaG)fN8bp{N_!61`K7_)id&|E>H%p?c57KlZ zA!!q<_x2tJ(&_?qV&b=*{JwlA=fFAVoFemCT@Lk?L*?6RLyWPM68zt^T-3$)YGRB< zgmQv3HO!{209;5Se4D@m*#a)z*-Aom=vJzxw2P~B%1a52Y`o> zBLLmrhl*oefUTQAO~zGudA<;U;b6yAh66|L?!T1QyJuPZSLXNUa}<5kzx`DC46p^p W*j%1SU~}*Q0000 zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|ak|ZY#{pS=u0+Lw7aabdK10Uayt(NJI?it&E zo+PRuL1=rDAWi@4&td++!d2$^S4f4>A0vkzPiO_A>9CjrR4?=WmRr12&sU?XnB- zPdG+hQ`QKC1&)!mEucmGJjQXggr+vzYRK7Ut1W1i5;2J#lYKXjobH!X3M6oMOpk_pTRJ61Dy@Ne6vjK-+b zMFi`wub>z6gn_0PW&VQ-fY7*cyr+>u z0K!X<2xyXIVC9^5$hGJcF_gV{=e-X;diBZYAi)J6LWp7JVvZ7B^fAO3HKv$V)T!5? zQB{*>lQ;=-)u)hR(v(up5Sqa`V|Uh!iNZySE53vhi4-$RdGd+K>0)P@W<{0Jis9cknTY715KhS^8tzDA7>Y5>eE%w|$v z)G!_6WkIu?_=y=1V@E(dP6QCpJTbFM&hbRfOw4RzWQAvF=_fdiCSpL)bz(p0f!!0i z54aiR{XfNxUy(Bty8i+>GokwgxsSMgf?AvPz0N$eC~Pwgr&FyU{Xoz)vx0(utvA2A z;Wwk-jQ%H#MsWc{qj}icn;=c+0+&`r_1C$YpAvVap-L@bwTRd?R6;eco}BT7%3yJa z7(p93ymmqziPbl};9^)b&NFhp*e`nX9l@794KG{zFw`Sz`qsbAOWPU+mcB<^dam_* zCzCT+&oz3+&Uhp07a+6QhZpu;?bWL`O?zKDF@kTT zk^0p%$~0q@O*83T(^H4Cm0NqR$QOgI4~|@1VU@4vjl!vA92ZLn^#bt#kru5(q}gy( z)mq&^;Ow_(5%TyrelF^W?Zqm86kxfUY+Vr&Di_@VMQ{mB=5Iaf*yj<~v0STjP0#<>=L~TMaMx5LWnjrz{BQps^yiZ4c6X-bGoA&IN{)*$el!s-qxkXo;l#X67NC00000NkvXXu0mjfye|EC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage4.png b/src/main/resources/assets/unicopia/textures/block/oats_stage4.png new file mode 100644 index 0000000000000000000000000000000000000000..e608705dd4efcf20d6102a19fedc364930e40d4f GIT binary patch literal 1813 zcmV+w2kQ8VP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+TB-Mk|Ze({O1&V1cU^Lp z_t!>P6(mSVau2xZZ?UZMM~r*k-FOcq=7x#CDKSqfCSPYAaQ^D6YGR z*176Mm@4nwI zG)A2e5u(3X!7t|~4Kz{Y`5#gsgvQMyzW~1P*9XL65rNc%SrK5iWiL@Yy>pArBAOxS z(aKhi?JNL@VB5nPVlZF>v8O;bIv0t6qk^9d&m9|a1r(6?uE9$u%mL)6o3^17X~{b8 z_As^(i0~XZf||q`T#0xIMxrQkD0}wey$?Qm^~vYJL4pq<#4z__jvOWW7-EbXQ_RXL z>NRLo)uh=Zml%81r;uXOlv2(xnz3?*cGir6;tCfjzJwBsmQ->@`c$dDh8nBZRI_QW zag*j-Xt8NaEqCfjr7qp~&|}x0dLBr%!9#{0VZ@;$jr?M5v1&dz`;obyvqpzC5M~x< z0-?(qhGV=-&@3l@at6kn5Eze>0VK4WoLMCiH<>e&Gn*WCg?I4MPjVVf#=xL-a(>W@ zyEk(`@Mf^@|0!?o$()(g{R!sGr0yH$e&p>N*4nJ^b?!rp!Zx?z1l2OO9|XE)r;u>J z)|y{c_-xBr= z_vp5g={P0-1asyWp;$giK0bMzwcV3=@&*N@2io$z*dFcb<9cvf?(Ixh#B9;0#Tz*)!zm7s7`IYP1y|F!r+TL8?HICYw!UPL#niestwL>*fZQq^|*&y z3<%M?l@Pp^ZA5I(7`^USd>fpM!<@z3=ibn>F?CKQvv~muWulO-qSsc_2^hEi9fI1j z9S}Ir?q(i7VPZ4*X4^sIUI2vhot+n}GHwh37loYm911{>>HMg9ro_O9-^mHmG{jy# znHP+Kzz%+>CHjWQU$MF3%`3AK3$r(2=OX@;8OH5u4bMzX&3&Xoy&%+95&yzyc}MSr zr9Ljp4XM~IU(c4~Ptu?mUmjt$kMY*D>86cdKSgotYcD)2J@J$dPs|6PUN=2rgMWoI zZb%;AWwXS*v-=c1tfS`ajbrl$u^hYb=Iwk~2hL5ptaFFkdsr63;aw7Af2Ln{$CZ>& z=y@A&_-^0nl`NG50j{#%>|T7KLQhmme1Ao>0P%Pa%CXZjp zl1iu0X9mFS!kr3YtoD``S#t*^GbibF_*j0T6zj(Z{+Pq%IGO(fF`Oz&P08Nu0004u zNklr>JI;_2>(efeYgL6 z0!da_BS~`0Po14@Ek|OFNl8|iql3#qGEIR(!N9ODjIa5Y?B{0#)C_NG?p0=pj*o(L zco3{7Pfz+=7V{cl7y_kI8KLksOC zuH8XA=B3f#I9S!++AhfoD;CQDfVVeWz%T?t;TyKL+Dk&v=LnLlFd`cu0^%{R!zdvL znpT0XR{#L2YC=`*Gk3W-RuVnb(a~-LoWtef)p3Bug)RaBO*0_`5MA!3nMjUR^}s6? z3z69ztF=^%V^J@?zP@8|>48}mFgJhCgs>X_9suA2q#f48k%LH600000NkvXXu0mjf DgPV6* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage5_lower.png b/src/main/resources/assets/unicopia/textures/block/oats_stage5_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..de0f6502d51ec42bd1b0778ff31cd0e97a0a6cfd GIT binary patch literal 2450 zcmV;D32pX?P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b4w)Tz*dd6CzDtO6i3ZyfpU;Cub~1F#SxShd`oU|_NJh^U@EvBhQs z%~ul_a zwAVWC&M;C4KzI%u0ZrxttVFy7BT*7!sCf3`y$?S64TRE=;YS#8q>)FN2(`&mrk`QPnP#5lL2aXIzA*cV++U+c ziW&ej8#BS8iyDSwydr4PiC>rjF((AX<3a!d?G|P>k%(K!nT46n4q4$HwDb#{P75(0 zD1)4z^kDZv?gwrLdH?_7=HAGe1>HY^oLSKQg4|EsenG7-es3!eEr@NU;c}{Fq+jpF zrQ+%c0^)XQYZ1`yOWHRT93fQx4i-!8e3yo z|LPba7ff-r~g4i1myTr8HHtow)|pxFR5VfKHEE40p~{ z)t+dF`*RZZ?YESgbi1E3)W!~jXOzA@lq|~;($Wfwr309T&sZ0U#j5oMNabJg2(=VGuHzA|lR?>bR#AIw8(?{-DjM5l%>PHLp-KqrInIuWE&_g!_Vs}8Ieb}`s!0}c^qda)K9h9 zKBC4i4s#kA841iIdXhr;2T~rko2@DM7+I(pDWJnC z_Tna?`Kn=yK-i1W*3`3HY(vUvip-LKoCg7_nKY2bQEUYKI|4kiO#>eBGV(Nve6G2j zc=03VOiANP;Em&in~`wKWbRL=1M6{a1n9GuqbLu1Qn{>)4V`t|8@l8ULpz(6${X4H&SKQGIKc+_biilFh6 z7F`d8(l2gM*P83w^g&$#K@%VR*+6;WXR1)kqA1;MDH~En}hs)5yXeLnB7=hh7 zmaLX53+I`$kuQC$eE4YBr~91pV=lbs%(q#YUc7g*@kz$6b>_J8!DaegyA6U8Y`4gA zqrVD{)nYVK1F*5ZTvqeV`QmT#9^Ntk!<<*eJPZ<6`Hi>It%?hMFO7hL!OuQ_C>XQy zj)}+l@oUw9h%~%b^1G+Z zr+jyS7eP5U1i?6dT-v`|(af4QNrRRbWr@2K>q7g~4Amc;%uaP$Wwq18G-hp1mud>A zM!N#P>=^z{gyo)ru2Fj@kHf82+J(1$C-PU4=UerUrikWv!WmuJ_4dwUvwf&o;H%0j z6)`Y&uR;ozy@9+wWs866q=qmUQk4{ZA)Z8`oR8p8B##SBC-`=*&*sO6KHNqk?rvl$ zoX&aph-VMdaLJ$d% z6vcQpF>o**WX1RqMLg(1Ohkx=s9?YjGXl5sf0FI3S@WtwflOQ z-L@!(xy;P-%=^5b0~D==`3Sk^(UAsv`lOlu$GeLalZvXbVsi3z3uUtw5{Wbp)U@Gm z9-FDZe6f!8ML-dv$4@e8XIk(Sj_mx zX!`rax;qDe2lpE(9yf5b{R6vxt%ihH7CxV}&imA43rP}(qH4?);fkuUL?Q*#v;Y9M zP3Sm2!wxnbhR??V0B=8!0|4T2GcWdP=Anq7ueX{Gg^z$a^>uee)!6E41^|#urr@U8 z+V-9e57m=pQ6U9I)fkZgh=9J{>UD*3ADdzZSZKk!`6hN5cB^^(b0=sG{g7Um7yCPmelEC&Gqfj|icZtbQ}$d3ybzc2tOFBcu+(P#_+@bkwn z3=h?jX{_MH$#?ALjarIEmvCoz4+Vn~PMw}*0MOrGOQIubAy8TA&xeyr5o{Y69H=8n z@}RWTgJT^ZnXX$-7YLo5pV-|0s(K~8#@E@2hx`zVbaeQ QDF6Tf07*qoM6N<$f>7SDrvLx| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage5_upper.png b/src/main/resources/assets/unicopia/textures/block/oats_stage5_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..7e96e59d5a54c2b71b272dae805109887f44af12 GIT binary patch literal 946 zcmV;j15NyiP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|alI$o9{O1&N1hj!T4rYm%8_e-1!R6|$y5eng4++>MyuD;?&Hyz!rD7<-a z^$6{eo*@NNPUYR7EFgI`Al)TB(v!W@%iRsXiO4S?Mti02c6ad-%I!C2_lY@&Wvx{c z@{?|px~8&wFg%bL*~1cA#?R2tyA?E#HMT$+du;JQYgC9y;v}U`l_rfX8#RQeJUBx# zH6kuEMQjfV)de2;~;-?H5`ayae;OD2F3M(h@@&VOwWf#z&0 zMTFU3xk6mbiw0U*l=TlQ5JK}>N467uwf7f@1&Bu5X?9Go#^Z!Ij9%83giW--&>;03 zocj#`DS~f9FeG3gCK97WF*9c(swSppmMoiFv6>`lvXoLzYcJL;S+nJobM{O`EmUa`RSN4V}Am?bcJz z-FxYE(7;j}I&7qohmSJq#8R6wb=pibPoHJhJ8PTO@P@OG%spp~ZmfZ@usKs0U93T! z^94ccbz+M%Fvdz?JTC^Ypm}i?om6=-7Zzu+Fm{D8qO?U$r^Of;)In^M?%cgF_kp*7 zeg9qF_%(B3QTG$fg+<*1=05WFfVIBf?``eFh!@-1hAXL2u>D{#yt2cBzb3<12mAv4 z0{sI00{wr1=AmhKXKbTOz}tD<@zI;Oe?P47BjF&L@FU^W711*{f8b?SNhi=O_=L*H ze2yBZnZFZL_+ly^#5nOuK7nR2#B|Kl=y03~{HP~Dj)UWVfaAhV%0L;vZJXdTej10* ztUr?vQP$L+qP!c0df<#x6!qS1nkcu1;|O7dqhBg0lhW#vjf_%g3XTcuZW_uN-%n75 zJ&_9tbzt&y+#r-9xmnlk;P6bJji#yT=8RFagp3+`-*#Vh&LfDYey)e%X%skbbev_w zzmaW}w|Zk4UjP6ABuPX;R5;6HU>F6XU=+|EJi9paKOr?tlv=`s&$dm+mJoCi0AW)M U4h@U!N&o-=07*qoM6N<$g4GVYIRF3v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage6_lower.png b/src/main/resources/assets/unicopia/textures/block/oats_stage6_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8a3e21e01ef08b79a2a7b2515ccbb5f09446c8 GIT binary patch literal 2408 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage7_lower.png b/src/main/resources/assets/unicopia/textures/block/oats_stage7_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..604f41cc9d89a7a4ca8c4aa77fac81fa5124132b GIT binary patch literal 2363 zcmV-B3B>k^P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvk}M|-{O1%t0uo|74r_#O;Nv?1QC%}{ot?VZZtgz(vw16w(>+u}-m2o9oY%?Ub+h!}SMwytLog~z$(4?{NjT&4O9vpFJ zZtQkja*;DPXB{~)PMpx>=(6iBId+YQb7ldRy2+gY_zX872_Ya7L5y7YhbHWCTt;a<5^wE|xn`noD z9(OsDV^;%!2y1&dLk*DOfkoj zT$1EdNHL|9Q!$ydL#+B7a?B~`TnZK~uv{>^q=JUZ)m5p!h8k?s`FB%b_q zAvBq?-Xz)GD99piw;(ztq{69yh`#Qeu{8|e&o#PY2b~dPC983sxsKABoke)R&%AIR zVct$zokoiGdgQxy9AfKbk1EZk(;rr?TD{PO8@s8C#FG1-(X9apS>GCl`*AEJ+uCv3 zQaHAX<+2B2v(=w%+t$zCsv*j)U9*y%`s7%y9eZXsQP5CV>7u5X3bP>vivY_W7dunR zQ~2V}q4@(=!9+d|K;mbsNLkyy0V~AnanRjo%juXYDIJ7SvM*7j2F^-&-~O59AQGA~ zfKnk73o8K?fzXw#kycFTz=WNaV=)wjU178LWv}s}y-}#<5&C&qJJ07iB>U)#R9CRy zno+3~3o_N`pe({YrEX=6a)=5@#;!d4CsHU4kYV7fwp)cK(?#t?rna&6{*t>_ai{6) zStLNnlTAEttD=;np^8j^7*4N6+1O6G!K|!6<|rmYEZzLc(ct!j#kvdLT$WIL)E&D1XXpnIOiF6r_f5SNp(0N zy`)kB*X6>&^)QTNolj;F8+Ma{OuFi|HUC6!o2RV;sS|^44b*5Y8o~H&Q+3o?vI-7q zDC^QTCb>Eih@j3_dC_!Skt*d0U-KzCH{)HWZFo{wo;USqm9aKzpFPDS<23S3#9tPV z$!h5DEK&3AYbe1f+&&Isa9;GP{!Ufx<1~96Z8z0U$r=p}e;VGhm?+IBXeSN`i0^dk zVX(bD1?RmlEhCou@eDPN6(#dg^-75Rvu}gFu<7DZ>g*O2Hn$W4c0lWSmi?a^jDkelf{lv)+}$A8#FiJ9Cl7v-o|ZObEhHh0&NeRzKoHg8m04iVxD@b0&<9j+|H>N_nXRF_DJ@FaiPv zj0vbeKp8l3q!BR2gprP%K^O?FgnL`sd(U=oZma*mGdbt%?CiDHUV8&DF@8oS#?K1C zld*OI*xJa+^3p{CSeWk=fESCM^5*p=0eC*$Apm-8v|X-UzKK!*)b7@{jN02P15hZG z05~`ZxPIe7Yu`E&(QIwxq_Ht>16mV_ zXaJ0Xp@%2sZy^{NJ|(?n`g z0odKyWngeUged~xc@>m`QYok*@9$SEgL1_N9mncUBqCI8tW>P5`g(`Kd+SPTcsgP2 z_I)8Ymlg*xVe?doX1n|9{Y#87ynB09y1G}CwOE5Pp<4>q^>JdcXsvnSBmmGqu%>cz zY3b@-QKKWLMJWgZL$=q-i$4W#f1xEjQ!urd{n;+o-I&!$Wrpc<%mW#3V1yHtv2te)L}fY hOfng*u~p&P{sE$(FB%I0L&^XE002ovPDHLkV1f zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>cJwF?{m&|92?z-g%i(#>?4XxF7b90CRY~Sc zciX3ejX|$_B@{RR`tNf8!4*RAPGZ(nQu4T@NC_1W>YvxNv3S4sv*1TIM~_wHK7F{K z2=`a>0V8ANGx^ZRTM&QPkRBs_HBa$no*!z$CyVqJ6mWl-r}fF%V~YLO8oJ=K+pDEY zLVS`rb-QvsVPQjH_}Z3mXZ#|b^K}>8>Z|XL#1G$n!`-P+Aoh!d231-#ud!2yi4tbW z7(?iRuQ}x$O6csFSR4xrt&q9!VCBF)OlHi6hb?sJEtk4Z3dMu4G7y9jc3ii+AO7k6 zrJ%L?4iUloJ65m@tOE?RqsaR&R>=i~@hDyazVFuyz(R;%)ef`5!Rp%)(IP#$#qI){ zu`ptkvpEkFfDl1?AZmKrw~^D}yj6fTLmS#-2>q z+7QE;MhXFl$cZzcDO`b-NR;Fxi-JQna+DZjiaBa5u_jKEVoE8eor^VdmK<}+IcqMt zDywMJq*+yqR#!q{eed6%#EqZqi~)EjMkY)eib}>9MDtyY|wn z8)5K}5l0$%=qRI3nxN8@8E2Y#>MXM^P;K#&6<1n$=_;!}P`gldpD=qz?q}4lp^pp6(1lu02j zdSLfN?hQAGy#Kqng^$R&4c)(ioZHZSf!sT8U!XR2eeXLDJqp`S!yQ!5NIxu?T7zOm z_}%FIYLc$!<@+2ATlPz6qqFLtOLKoq{oA;j`&Z1V+oGS;{6dR+?5b?L3JAk9hqG(q zg!mJi+%H4%t&Q$!wcwJmg!X*KF4_8YC^Gbbe82ZQT}>w=WQg^#Dx-diC>|j zoMe-dzqHqVA0WM!ivK@e+9vmPSYKj3;nnpw%?!!PDQozQfN8BWw zbKm)jquG3Q`v~mwCbZDEA|71mIOLP%1KNR#;8^JqhReq%nz zd0Oc5UrLyJtyQ*Z?smR4BVGsbIG&fSYL#gc(OSHf+Ue^D8RLVDPpVNBP4h$yw4LCi z(dv4rR*9O00j;o{?@-4E2d1hw%2nh~Fg6rTSa&R{T@s%)ZKsl*A5}*G-Wr%{$qRPY zcY0dDKeYW|nrUn^E`#?Z|?bf|}v zS|7CVr+B(kJ;(77rR7m{<5}3YqWFWNao*e%q!QnC?oK)2_Nm0f0NIjlRM1axz$6X=uU;LdhzISs2)n>L6$JBv!NfzG;`O)YS zb`~9R4rdr!35+G=I*(2e=Byh%hsR5;6HU>F6196Y-? z^FJXqOq5zeJp-^gchj*Y1ib_|KuSNI5m~|9IrjgBgg6MgfDzerDgAUt6c=pt`2YL& zUxs(@elmEQM>C+y6Lj9XweJ71iDQkOEt@_6uUPK#f7wzOxa6AEZUi+m!32K({LAq9 z^Dl;|=sk?{<~sbJH`o6E%a`9UH0`;t0)@}Sz`($;V7|luSFgS?q^2EW?CvuE4>9aF o13NnlitU>>dHiQ#VL}OT0JoZJ*v&~}-v9sr07*qoM6N<$g2QQPwEzGB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage8_lower.png b/src/main/resources/assets/unicopia/textures/block/oats_stage8_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7fbe9e14cbad9b4b4a28ccd7aebefe12df58f5 GIT binary patch literal 2242 zcmV;z2tD_SP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>k~FCe{Ld+T1P}tmad<}T4fgm>9;&XMZ^GeN zyDMgj<{>1dlv11V_g~Ze3m@`U42L8!$7u24%$W)XVn3g8-`U!^#*9CA=iIZ)nXd&M zIXu736W$(geV-8(|$4@vBfsy*mm1&#nW7N^9Ve52t#X6ezz?R)dSt~tTQ-C-v=2y-~GAESf+ z_4!rMoNc+t!Fu%-^ded?xaCE^{$m#aaZ}?cYzOP}^8;WZgt2S6SzutX^@ym!ePYX- z4YbF`fH$ARsb2wb5$+C9#(5xMqw~QV1QId#cDJE0)$kmWzPFZr!rQp&6$pxp26iigAzH$vU)>NhDS{lNqaSJWB z)THHBOsDQU_t0ZcU3%_ixPed_Ji>@04HtZRL`5gV|iu?^`D?4&^(^p;PwaQ&B!D7xwo>&U^ ziZHfZ=v%@T6f9zKn_0xp+|Iod;o z_i97D#pAQ;T)#?mi{Q!^*tYKaIM8Qt24L&m*cvVfU=TX8dSicpUe2FE&u$-vj|Yt_ z`3X6D&JJ;_Sl=TSX$+I}Hd-k<)0eyjruhKoUVu%|*(c7ux_y*08j(QMM|o7KdIX^{ zkaMbt9E33UHY2~y7;x})VTJ=VZ%~dz0b&bCHkPVN7}sUs$4`___i{3<-T;_mc1#D3 zVsYQic~AWuMyRx|hof7EuL+Y10HSr9SqZUXLA6?;P)mP;s3ktsk`RIM`n;oW{dVe) z6!GU`v0XGlJ&Mt}e{}z>m)IP&GH3i*imqaf;g2NRx5mOg6+i#J3^vZzJweDN<|JPKHU zrl_I?@cEuA0(Urbsj>LQtVMNWnB((RCK1<@T)Zf(z8MT$c{Z8B4QDQi4Iy5&??v0a zk85d%rH$wT0&BVxUNBg+@qKWPkBjJN2nKoJxVkOeM!J3&g`2V84%E22EV8oW!`v%| zMR|98v%UGIdksk>X35C&hm$gbPAjlQ7Fsg6z z7G-o~y!~Q>p}}kr%~>lcDbwDz0shy{jmJ~NtyV0p7__p*D5aFmMM{ntKYSf2dwE5w zJyZ5(O1r&iH39i@M6o$VunHzJHdIei^ zL45}|TF_F^g*){ztS)U9R^3=>>Q1pOYHUGJpFmx>S1c72go3WzRSMdsLhm%my_w@; zl01V8XEQTr&Ybi8=jZ<7qynt1o>ze8!Wjkl`L(6@=1(iYVsmozHarh^Q>`8WVB%N` zKs}vcW%;5WKQ$w1dK7?Kt<2J+b6T%gxP9l703?Y8z_#0M0KR|w0l@CgE;r{k1ON^I za4ts#I-NelwZESOV0w87T5ABPR!a;e~@t#V_lxLruD?hB#^s< zfE1MtH)cPIa|OS5I&5z{hIG~%)>bd5_u+nZ=DqycbD==xP(X57&>lqw0T!BHL_
p QxBvhE07*qoM6N<$f?be1t^fc4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage8_upper.png b/src/main/resources/assets/unicopia/textures/block/oats_stage8_upper.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec47213ce110059d2475e752c3159252d89d0b6 GIT binary patch literal 1746 zcmV;@1}*uCP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+TB-Kk{l@v{pS>O1SBDr0J7zO2hl4L?~Fk08eLunv!cef-7y-xw_p_-rP%%g!S{ zemiwsxn>|N2#j289#6oZVjiw1;fXfeYRK7Ut1WmcC1Mgg$WfzAgZedAsxZ-U=YWy9 zvRrFX0w=Cwg~S&-3~Nun^)vHNza?V76t6C`$L-5_179AXJQQ zF^9GVAVkouFopyOSWlwl$p+>?gg8dvlVLfFaa;fasd9sr>_j}ki9B_KC(uR9%4->0 z2tcTK34kU^23F3g!(Iz6B8ReyI#u-=G-}f9#XGOw`{3tZ%t3++8hi*Lh7@v?=%Pj+ zLyR%SY!WBIUe)ANNHL|9Gn8gX&fv~5W1(=7;))huLWw1nT#-K2Rjs~;8f&WAG;Y#d z)8<=fv89$fb)-^vUAyn0$DVo~NVOru4IO@j5l0&NhT4UydBW@?a=%86HfjLOT$ni! z9n`QK!Vy8Uoan?1h_NFe9wq`vXr7qaNY3#@&P>c~V(bcKSg8}7MiVh0=sK|ux?y)m z?gMTH`~FXH<45Gogzj%3XC`!Sko$<+8`RpY?{)4&i^4Xy;S8!3Y(Eh6m^p%izc!k$ zGW;I}jpF<@9k%u+fMdRJX;mUJ!Tc3-?573&#+*C_eczl*i}|IRFW6@Oi0ciL`4;yB zlgYBV5_Y%rz>BNnIR8@U&2M#m(qQu}WuSI!0~IYoS8_^R~;(ubOgt^EEx?;*+OKnt9;@!^Jfi77{A&k`Yr*mDfwPI85qtL_^aQ zC%gF*?XSwEU4o$9Lc6XMD3;2_Z2_a#8|L@)9C>HUz;T%E4l<7HAv>Z&adyRT#ps24 zxsT?W#$rkpXJuH?%NB=GS!d122`G0Qw`+@Zb*&!D^U|mhrsi#`>u4bwTC7WK#Mzq$ zZNa@$bt~9YH_pgKRWp^;+D@PTv-ElO*cx3#mSWPr!;R+Qn$?I~(-w)VlV7XoC-$Oa z-Wt�h)d)hpWFXMhMB-(iV8-u!Df0C9~P`ya{}6zeTqdd)Ia%AcCfjuv3)Li1e{> zsx1}j_M|Vv^Vg`9dr*d~V9ylt6Bpi$wIJd{!pSebKI(xZmE@NxaB*j?*=ak_5j~Y$ zeJHsjoG|)|+nLIGLusf(_KQg~!svf?s64JrJ=((;TfB8T13eu*geo7RDKD9Jq8(xJ?lj;YD?9qXXn;V(V#!YBTdno37 zjrbbI1E)Jqp#E&5-R1YQOUEN~xzxsqbitiw6)i;<9`3f*qtQ)!?4if8$h=TX5&5Ez z`QlDl5s$5wS7E^>L1TIdZJNoWCp~blHn^L~JqK@llG>i^4VLa_g0<3C1`*82ShpRt?YoI|+=084TGXh0w=3oE-0bfZ(K~y-)%~3s1!cY`F@0Fx+WbL2m zqA(dSLB%+m7#NI$HahF9i$ZkQkO&&%2YyG;4Hrp_Zt^Ec=+F>IDNxIGCAeu0pN*4OChTKTk`?Bf;5JI8 zX+hIkm=4DAx$c?x_0=Q|!UyJcm!G2SX@pLWBfa9~#f0Z$?f|Wpg?hb>SiHb8=`dx| zA*xgwUmg`+v#vV_fP?)oscHiYi;rx3D@Zn(2~qU9)bqJ0`FtFbtT2a!OR~Z=tqH@h z005m1VQIO@X2#|qiuNzxznlO7RMqH_-4qY)36hBb%|_-L!o0!O)&BENsg1~`Wx@U9(T oeQlWfM8M|82(7F>v#uWA0W00QriFxd_y7O^07*qoM6N<$f>!2Cz5oCK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/block/oats_stage9_lower.png b/src/main/resources/assets/unicopia/textures/block/oats_stage9_lower.png new file mode 100644 index 0000000000000000000000000000000000000000..a7635f20a4f9ac104cf825ef1477fa4d05af387b GIT binary patch literal 2161 zcmV-%2#)uOP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvlI%7P{O2ir1Ong!9*1kh++dFHTjJx12yYbmi=0ftC5S}~z)K31Fc6qkpFBa)th;hBzef;9=HsyTBXgc7tnWJ5H z0r3gPsq4ym!oY&S$eI>#MSMM;Pk6BZ-PSeLmE|LgVR zLSxh!B7*lfRp zR#B&3gGN0jdodZuk*K96Hj-4{8fl^98f-$o(~HbWj6e zW?|+q=%R+^81E7^<-||SfEYUh;&CDXLi5DTDmlj!IWsY{iIEkaVWpqoG@6J3LDz}> zpa;7Ta^G+>$oqeb8^4h=6T1Hga%MvJ19IPS`vJ8!^}WtKv=FwLhBK&Ekba=8C)9&F zD5p+kzcrf@jTvgZ`ynn=UotD~R;#cWkEYfsj&n#rq`L08FvL+0V=u&{X-GNixDF;X zqO)bCGCNIs_ga5?8x=d&p2@(v=ICmsreJm9_#TUx#~vr=PkmgVe@&@)i_q$snUyFX0z)suNEr0yWI5cF|ke)!}ZNI zH*C7TX;mO#`iXvmF1(_mb7p-xcSwMeQ4fb^MOkQwRLbUHDwBs(a@I_*t#0Pxz~E0- zxtW2-bs^oBJ7_JWZ^J(%OeGkI_A5kvl$$T9{1U!CZgL~B(br~*%uY%(w)Vt!uKU zK8geFe0YIMwwYZK;&g=>+PbwD+mzpHYdC2S4UIBkn15>UPv(dO1gGkrhoeU4n-5UX&do|ddR3h82TQ9c9MP2*a42PtfF-{C}VT4yMRGXj9 znJ2doc`c`Kf#8Qc^I&mQ6Eec%$~oHB;Iv#O<3RTuS(cqNAx?9!` zNpS$OPt#t_;*@T-7j4QUUzy}3lk(OUzI0AE%BKQ2DCf2ar-E?M4xwF@JF)}Df3LVc z-K0fKE&oP=}WqPsj~P>uoUv@2>ucPd-EsHAZWi==|^J#00E6jL_t(I%iWT(P8C5EhQBj+ z_R0cY3knK-2@?|nNTNOX7z%|ZavPpGjCnAvNzHd-fF_!6-RUZ>z zaIisLV_8Oo;bF_O=ikH_sB83I`Cn@+3eV#wU&J|&h_JUit+R9c5)CRkoiY7qjhBf~ n*Jw zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxk|ZY#{O1%t0w4k6I6NbK10UZ>A*!o;W@jC? zyJEIj9zs$|DU}(2{W;Aa_<8bdI3$TVMvEV3&c0wE_VpY3&eqN~X8bvwbN4Q1-WJZt z;rVXf<4t(ep1kj)C5Rpe;{A5t&Aae1Pxm$cO(QviJf7#gycxSy(Z4ynOxSGJZY~_* zpQuJ1Q?3y2#t{s1h5Fm^3B3k)o_ZV@%OS8S2F zfF^7Vc=JA-x(a}caCd+*j(~uTj)IHMChwDT@S^~q0?j=c_7xDg5PXN0o{1vB5x?%n zndGj$KKMP26ao-|A|*hRsQ@eHz|nAGK@62ZfkOx}q#z-O5-D;FF~$^EE|x@zQ%EtT zBq^sNBrHLqBoWC{O!k?Ot0BjnvgDjg!KDR~3r-g)n5e!|^lOu-zbS3|OKFojc;Q-=<(Dts2zs>S znrSb23rT8fkBC)B>SoI%3!GciQ=Kwafz1{PFiL7cwW)#(ncP(y^05Uf-YkQ}Zp%@{ zc-vUZa+XwuKiT1FAU?OVxb+sdAmmoL9Bh2;9+`s(+`D?C<59@1tbVs`^p8!5uCW(0 zDx4vJp%>-WECN=KB9Wn%u62+#iNd!kT&Ws*cKZ#v*6NNtmM8Fya+|P4g)$|#m%unl zT?vfa?K^WhZ;M5Y|Hi}WnCVvzwsEjwAZLDaRL;@1j`n_zW_ew{3eZjw1P1EYb%Yz- zx?KS#9ilN7kyE&1-SN^<{z09-c8C6lg>%Ak6y|I3+mn@ye0R!&-VeR z-V0zp-Of2W_~LI@u``u{|gSvkASxubedTTYqKkPnV#2Zf~z{ z)YPiV;rOJc*SE$qx086X824Rpbj78~mtO0sM!u~0Eyr~w)Kh1)(uv8gSA6j?-7+CFLx{ejsR6x2qw$00=K zp6#ow+xkeF9$rb4bys6V8sIDM4o{3yFe~P`aDcnkv0&s ztpF24&bUpYkxs3|#XO7V=*)$p@nb7!$!pyg1eEed=S3SIoN~${acn2`vNdf?y>qN2 zR=pdD%j>3skBOk9H}mk1a{e&Ipg)hNC%EG|kMZbd`W!FI-Mwj*#k&NOk-Nk^U6;Oi zE-LweXY&ryh@1)gie{sMb1wssmD*MzLgf(hZg?y`+M%KR2%4|C>Bi;_Hny$}2%}W)zo~%Uq0SzcI0gZ=u$g63~SK(jz&a#w_VE(fIOs+58-PU*;kal z47GQc#Z@g`AMVPO!PIkCnJPuQ1zh0uf`cqZqBkhVqVrJxHLE+;xWM;34AMyARpU?# zcW#BYn$%t%l-W-z=T+C5IcZ+5n)i&sJBHI~7se^K7b0WUM|c_KzlgGks69n?rB%AW z0zk##gi+VP;&iIKTw!8P_*SKDZ3;+ND)k#D_R5;6} zlTT|CQ5400?`1IBLZwm@m@hFKtsrO>Tl5Qv(k{e>4!X7~y09*^#jgB=61BD{m@HaF zK@f}^>!Ot|%*w7@2D&g)NE4@-%v=|fnNFIZ6z}G}d)|BJoO>@1{u1RMn|sgh7P7C z2j%SWc~q;aXf-Wcov_YeTDDqWcjJenW1rQN$4A8XWvc|!vXw{(h``k3poA)~0EjN< zKg|MAt9jIF&5$6K3T^iH?+F2|Nu_kF9GJLuAa0oN!`(Xv<;wVyYU!by%>dJ~Rix5r z_>5m&Qsq)k9LHti_KJ!|>v=w)+W$gN&t3oq_GbaeWCwWka70YYR@v-60D60O@!Aff~ R)ujLc002ovPDHLkV1mQ7UljlV literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/imported_oats.png b/src/main/resources/assets/unicopia/textures/item/imported_oats.png new file mode 100644 index 0000000000000000000000000000000000000000..b84d7de775176242829d082462c2a1e353f148ca GIT binary patch literal 1935 zcmV;A2XOd_P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SOKBwk)X){AU$j0vZ6Z9L95c2VTB|1nN%py8F5P z)e4QstkbK$@Up>8>r|@lFUdQkkjqD0yv`_Q7`s6=9_VJsu+l0+-t=6Iu z{)xw^Ysxdi!V1U8vn`?}`~t@5X&KFY@y(I??whY@jWRKbpQO~O(4_J7jT%%`9-PoK zHoSUEH8W|4mgq2JXM%eK*cL)Epy%jWP zTP`A4e|-hLm=_GRyeR8GRsj&2mq+1o@NM5801F|CRm;r=1B!2>3`6D3VXii3ol);8UPEi&L(EfI{F7Em=h(z%gEDV^5-IEeGDy z2q6FwBuWA_SqiXH4H}&$HE^f|2^vC(Aq5LLlqgYSh%u(PVzDGinnH>xB}+LK6H^No zEty%i;xcDJtcDzO%9e931&0<$F4$eHV4`xBsx{PDQ?;6FX`oNj7FuknS<9`s&Rx3p z&|^>CdhTV=0F{Q0FyctVMjmB?YE!1pFylmRhkb z#QX2P`!+!{w7xe=NnNR==MZp3a(&hWjGEs=7;-kccJ+%#VU(e*AA^2dNLit=cVbi* z|745o43*3JAGcMm5Jx!`|BCIYfv?*Yk0*>Cac+4o zGk>&p&$*%AF=2r_Iu zY-s~f{8h}oi?#4M*7{*{$phDh_~Gfp;TioDYviuh4JVZyWs2zR{DE}#QTE$_nMMb! zipz}O7`R={VD_EpS!8>Xwo`TA?^zEW@_9sPZ`mhRS5TxlT2pRDQ)GQMM&RTI7Cm< ziD$S8waG0(*>)&}47_rBg%xrOAJeABAIars55~{Sc!ZATesXrr!>`Tm(`wTjUGR^} zIK<#_gQSh^6gX>p0&H%Zz{Rc5xFJk%$Jd+^+Fw=dxzfOsk7hRo_hR25qsT@!GKqjDqRRtB)O6{f;R$G{2oHhiQb$VR^eLk# zMWU2>1ELs2#9tA93R}K+cPGUfY+^_iDO-(J=bSk@GXwwo$)6uZXGhD@At?w3096nH zqe7M`vbKB6OUB8Acds;U&XYdN0fjJZQEEii8u0P!ordP7=y$d?YcIlL6@tQa6KZvs zX~XOsug~n5=2|U`^lSv2G#JIfx zHR!&DK_7e#oPbqGEf~2!#7bqDxCMLw2P|*K9Ht~r#4AOq_Y2^L19uAc9Nc9ja~VgP z<`EXc0|Fx89Mqd|^bMA`zD#@}K( ViJ`xy%H99~002ovPDHLkV1hVKnU4Sf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/oat_seeds.png b/src/main/resources/assets/unicopia/textures/item/oat_seeds.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd7fc7f4542a15be37fd50736070e40d78fdffc GIT binary patch literal 1607 zcmV-N2Dtf&P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+SONClI182{O1&N1SBDr8kGO zpEmIdEDK2}m9oq9AO8;X4=%RW8K)uo4t9+#lsL|Jjh+N!9HH``i;@zz?sd|cG-F4 z$M1(ajF2i8$gQSTM-Ni5U`#^$&(Gtfe3kwz$YVe7UQ@80#fCMDA|d4fD?K8#-2c%E-NoF zCyaYg#Bm*nw)Oq8Ai>RTjqE1!42926Dd-2Yz_dfW^#T+EKpuvX_Vn`uJi7smN zF~k^C%qDRXa8;8}A;pwZ&TyJxIb(N@8G^z^iYr=t2_=?Paz*)6SGD>YYOJYd)3`}< zO`C6_#go&^$4-k(}d+oSB%}#9)OoqSOgaqlp+0be&iSo!DK- zz2IiR``^WlACWT?x<7%Onb5sK?iIH;sI}SO>*S$DW1BRbNwos{L7~UY5gPn!v-#Bx zUmI#+&RkM#wvW6?E1KBgydE?wseUwP{!BcVp~rYia7tjbtsTfud9T8DQ^0%U{cKKw zG+n!f)Q$?FWjTnP8od1Xbji-yeDEVJA7&lQ`gMbDRdu(P??IYpSI>df6_{f?{MuM7 zS{p4iJRd#`ob=FkTtrg*Dy<{iynC|n4C2iv*;E%OZOQc!M5np5$4s@ixzZLVC3Vw- zeop%V3sKLT*l0kQRAkd(N;Pdp&;_LC-LJj3>K`$`o3SfNt=5ypX85wR%r)0t-ch{@z^}95 z#jNf~+hdCMsxYf8dR-a8Ct38ej6nZNLLFrlQT9Pz%B_)_l{)Y9r(6fwO?XP@&YpK+ z>S2|!xz({<_!RX2yzldPFZeE1iFKPXlwqD_0l8n z9IyDO`6{@3;g~!1J~Hne<8HHgQ;WYf|J{c0k5xH+}v|=?(aR|FDj=dVVTCSv~d8)rsLSZzG44oHq!Kd_%(c$somg|~|r{|ZjxAD)gOat?!i$=Y|w>uxYrlQpug)<2{=$Z=K z@sLqcg8v!wrHf;50*P(Mi%uZ&Xg90a?tCdxyIJKIF`Ld-*!bV;#-es6F(t|
YJ zOIJ!66G7$Fq_hszF*pGLvB3S^4SL-gml%l7{o#bU>mW3yn$A{Ix+?}h-@ zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=KHcH}4whTmDmECJmREC+KrXLc~lpC4maC8_G^ z$xJ`Ci35>^5c-7dgz?v(GyH*z3UN^LoJvX&mliEtG05?GjjJy)&NWutbjj$UMd8zf zdqimO%N9P?lVwOgOh}KO-pR?n$mOvNfAT2bh8XRGd>oG@o~~T?oIOwMIV^3h znh>9KZR+02IfCMWz{oi*p*e2D*w0qba;&ih(%55*2U=UvCyA4kI#rr9&c0EDi^_u? zJ#%9@Wm%jHH;F=`K~$6`yAmVfS~e;1~14Kr4!}enSgDXx@2bXMpea^#WKJQE06&XKb*>W1BdPp1CFA1T9cB z^tvZ|zYHKmSli$X2?)eQVw5O4vlAhX8GI@{X9>y&5Re&nc*!b~04MWW8*`jaT{hlg z93g-(N#a0Lq=J>IX$tC^kwewQ)Xb8(Wh+*bBu$o5^0dxkb#Zm`R@F9mDcBI3Pe3YX$q)*dkEj4esl~zONE?v9z z)V=3kdL1;7N<)W@G<@VyMx98tDO0D-G=1h-W_?gQsfJI?UdjD4HM*z)SU8y}lx}Je zyWb{gl@nXcK#Y|@+!p~PG%sc`lPWKAVKIw^aVm`Ar7bv}7BLXiL2Q#A?4IOaxCNa1 z|H_R&k_!vnuOJr|x;NxrxxJy*SAB2m97YtjbqrTfqu}^KVdTmg8vMOJe0RccL%$9E z5<{~d^&AeC{E(Kg6Iq$9p2Ah@6+iLrQPNNjFtpyh@+mY_nJ<0#(Sy5pJI;}phDtOw zZKKJvZWYaWc@T1~REnQ6l&a3BV-;Uqv`2W?9JW1*u7sD!`U}-Xy$##8XpB%=*=i$~ zmcHwsZ2xK*L2|jQ#&nA*rLl*oO|&C~;%7UIhcYV9wk)&(I9qq|&R{Ig57h-&6_9*z= zTd%T33HZ{#;r-Hw+w8@2;9dMojw=Im#A27XSjRs5vRw(Ee0geo+o$mJ5WMmAHB2dd zKN|nlqu+*pp&`Ks6aMiHe*ijp_7yE;0xHnRa_JtYC&3qO=>>=P7R5Tlbd+9 zd%5S_d+vdM{2EGL^WwH40SwbXH}s^xv#~cduciyf7P8ZAOS589oGIcCT%tI{4Tg9< zpH8n;;MECz{^|6Q$JP!^z=DfYZj)k0BF|sGhPp_n=DkdL?HKx z>noN#x;f|mPx# literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/oats.png b/src/main/resources/assets/unicopia/textures/item/oats.png new file mode 100644 index 0000000000000000000000000000000000000000..3b069977a14f483f16632f072694c29e8b8a480b GIT binary patch literal 2346 zcmV+_3Dx$AP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bt1c5G+2DCA)%`WM7}5ZMJr*Vo|yqIXrLuRKHyIn4;e~dz!ejS+k`` zfPaEs>Rx5PVPb`2crOchBEBB)aX%SPvc)z-V!Lg&;%Su05!*>ZoeE7FyKU59qPXEA zTIZVM-IqAJ>>67p7Q@0q(?!nQIkDsB1~YoyV+-wb^FFRo!oi&|(-Af!tk{paFaPWF z<3@9~0E)bvD*S z+H;+EryCRk5S{}^K$E!uD-kc?T9kwsDxSS~?}Lv%`Rq&JAi;+aVpv=(k)uQ(LyR%S z982OP$)}KFN-3vevdavv`W$l1Dd$`Y4lUTZV0B3a9o1E?Qhg0I)>LyX4dK(I`4(Di zspVEocb&U*-$Rc*_1w##flwMU{0JkCH1a4Dp*DHS^fSyj)6BCxsBKiu7tFpR_t&VA zq6Was#!N8jqK57m?-sP=#4pT%m=glxaUp<7369C92tT$Vmw1V;6iQ>0J5hwpB-P@SMcU7qdnkbZwZ=l<@^{ho7zmFY@>Q>4IVJ>E&yC-T?5js?H?s&;8*V+f;-&{j()ak zt=nmQc^zuY+-CXge!s>z_V%$-$ni!)D4AYd?FAe9CM*tfI5@_3UdX_nzoE+{+JZIe>7QWRI|c8J;Al>$9_?@tHVk+^lIk=h|7bdCq9Ar3R?wCU|I?y;e& z4LQwVXHbr|j5FTZtL8137d5Vv1CfGlTb(eb{~J@=_z=I?g6XirlC=hRoN)ZcTK5Jd>DRS4fEyWVw zIHHaL+~z}ZMpIY<_ryI9)h2MbDW!|F_keLHg3V@JOrk!i8LXglCcY!7VRW!1S;pkES6$qMf+6hMORf`eSB6bsPHD zBVSRQ-Dsnul0d)`sEO3$&|*WB8(r#rwn_`RvkDAwT{buex+!JC~s z&AE~Az=ZmmFq#X>HDo6xjD*)AulPP)_+KO@Rm>h%xP+^H$SJ6r&OI$^fU0t0Ls9yn zlP>~>THf18f;ZKzaCdoeyWiAXBaeVuYX3sP^x}s-SA&Y5&32|7Fzd3(xuhPpuyCZQ zVcu3rq}q!-3S$+u{6fvki&0M|bSheQ{V#LOvk02julfx(qd^cghYe)R3>8$Duk?_< zCThJGC>`!Cat=!!%*kbl;(CR)r=evHs*#+=e3R+VvgZ|_CS4++8oBAt#x~R)1#$Vz zm_hM{()HxWBg_&1X6ZFDiofK>6857H&*?L(dL8Lb5+@! zMW~u@wPE=K0Od>1EA3@f$mR8{gmiqv@K0M7O{E4vB3?CFb;L&fHupnGs?r8z4CR)K zVj_IrZdw^3{8nN8U2FbsLYyefGba8Qqg_X^1GaD@0007cNklYLh_=zi6l}Y5CQ`)yzHVRjJz;WQIUuu zWX>cQA)86iQi)G;ZJ+z6>vS=d_PFoPnN5?YDg_y%W3S+C3+1v98E_b!Cwgs*xm8!j=j{5@A z)u8ev=*MPPnP2i#Wk@l%xQel~ib!xmDgd6^8p=&+^hCauu1AxSR3>&7b~_yaqVcqY zWK@%7_I4ov)<4bwFg^AZ^`xDLPo`vD^$z@i zQVw2vJ^9<~yc*L15RuRVMn%eGR0F^q_AxiR%9;-DHizi#AE5X4O#rm`UV_DZ0>!9E zsf4D8T0E5Qy*8V(m_}1djK2-!;DZ{xqcaF7;qRNmVDZR`^%1rYJ28iS%rCA2;BI#C zFA0Eb8%k)3-Q#T}qZ*?xM#P^WYX!7+4QGBMKjeLyU!)NZRY;i^ QDF6Tf07*qoM6N<$g5NlHcK`qY literal 0 HcmV?d00001 diff --git a/src/main/resources/data/unicopia/advancements/recipes/food/oatmeal.json b/src/main/resources/data/unicopia/advancements/recipes/food/oatmeal.json new file mode 100644 index 00000000..1bcf0711 --- /dev/null +++ b/src/main/resources/data/unicopia/advancements/recipes/food/oatmeal.json @@ -0,0 +1,30 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "unicopia:oatmeal" + ] + }, + "criteria": { + "has_ingredients": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { "tag": "unicopia:oats" } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "unicopia:oatmeal" + } + } + }, + "requirements": [ + [ + "has_ingredients", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/oats.json b/src/main/resources/data/unicopia/loot_tables/blocks/oats.json new file mode 100644 index 00000000..3adf5caf --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/oats.json @@ -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": "unicopia:oats", + "condition": "minecraft:block_state_property", + "properties": { + "age": "11" + } + } + ], + "name": "unicopia:oats" + }, + { + "type": "minecraft:item", + "name": "unicopia:oat_seeds" + } + ] + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "unicopia:oats", + "condition": "minecraft:block_state_property", + "properties": { + "age": "11" + } + } + ], + "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": "unicopia:oat_seeds" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/oats_crown.json b/src/main/resources/data/unicopia/loot_tables/blocks/oats_crown.json new file mode 100644 index 00000000..4d3e6bd0 --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/oats_crown.json @@ -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": "unicopia:oats_crown", + "condition": "minecraft:block_state_property", + "properties": { + "age": "1" + } + } + ], + "name": "unicopia:oats" + }, + { + "type": "minecraft:item", + "name": "unicopia:oat_seeds" + } + ] + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "unicopia:oats_crown", + "condition": "minecraft:block_state_property", + "properties": { + "age": "1" + } + } + ], + "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": "unicopia:oat_seeds" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/oats_stem.json b/src/main/resources/data/unicopia/loot_tables/blocks/oats_stem.json new file mode 100644 index 00000000..5cadc205 --- /dev/null +++ b/src/main/resources/data/unicopia/loot_tables/blocks/oats_stem.json @@ -0,0 +1,64 @@ +{ + "type": "minecraft:block", + "functions": [ + { + "function": "minecraft:explosion_decay" + } + ], + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "block": "unicopia:oats_stem", + "condition": "minecraft:block_state_property", + "properties": { + "age": "6" + } + } + ], + "name": "unicopia:oats" + } + ] + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "unicopia:oats_stem", + "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": "unicopia:oat_seeds" + } + ], + "rolls": 1.0 + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/unicopia/recipes/oatmeal.json b/src/main/resources/data/unicopia/recipes/oatmeal.json new file mode 100644 index 00000000..14a6d641 --- /dev/null +++ b/src/main/resources/data/unicopia/recipes/oatmeal.json @@ -0,0 +1,11 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { "item": "unicopia:oats" }, + { "item": "unicopia:oats" }, + { "item": "unicopia:oats" }, + { "item": "minecraft:milk_bucket" }, + { "item": "minecraft:bowl" } + ], + "result": { "item": "unicopia:oatmeal" } +} diff --git a/src/main/resources/data/unicopiamc/loot_tables/blocks/grass.json b/src/main/resources/data/unicopiamc/loot_tables/blocks/grass.json new file mode 100644 index 00000000..b4294034 --- /dev/null +++ b/src/main/resources/data/unicopiamc/loot_tables/blocks/grass.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "bonus_rolls": 0, + "entries": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune", + "chances": [ + 0.05, 0.052222223, 0.055, 0.066666665, 0.1 + ] + } + ], + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "min": 1.0, + "max": 2.0, + "type": "minecraft:uniform" + } + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "unicopia:oat_seeds" + } + ] + } + ] +} \ No newline at end of file