From 7fcd4d752a44d4de3d14474f5455c501c5adc76c Mon Sep 17 00:00:00 2001 From: Kori <77476049+Kori-A@users.noreply.github.com> Date: Sat, 8 May 2021 21:16:15 -0400 Subject: [PATCH 1/3] Update Splashes.java --- .../java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java index abdb188d..d39af0a3 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java @@ -38,6 +38,8 @@ private void addSplashes(CallbackInfoReturnable cir) { splashTexts.add("Based on real pizza!"); // Honoring ChocolateFrog using a real pizza as a texture reference // Miscellaneous splashTexts.add("Now Catering!"); + splashTexts.add("We do not condone the eating of kiwi skin"); + splashTexts.add("Kroi can't tyep sommtines but that' sokya"); splashTexts.add("Respect your food delivery drivers!"); splashTexts.add("A la minecarte!"); if (field_18934 != null && RANDOM.nextFloat() < 0.25) { From c07b0db705e0c908d6b9195499f9451d2c427d80 Mon Sep 17 00:00:00 2001 From: hugeblank Date: Sun, 2 May 2021 04:48:53 -0700 Subject: [PATCH 2/3] Twoops... v0.3.2 Fix Mill block bricking servers --- gradle.properties | 2 +- .../java/dev/elexi/hugeblank/bagels_baking/Baking.java | 5 +++++ .../dev/elexi/hugeblank/bagels_baking/ClientBaking.java | 8 +------- .../hugeblank/bagels_baking/screen/MillScreenHandler.java | 5 ++--- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/gradle.properties b/gradle.properties index 006edaaf..91c6f31b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.16.5+build.6 loader_version=0.11.3 # Mod Properties -mod_version = 0.3.1 +mod_version = 0.3.2 maven_group = dev.elexi.hugeblank archives_base_name = bagels_baking diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java index 86384cb2..0872a0e7 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java @@ -6,12 +6,14 @@ import dev.elexi.hugeblank.bagels_baking.entity.VillagerTrades; import dev.elexi.hugeblank.bagels_baking.item.*; import dev.elexi.hugeblank.bagels_baking.recipe.MillingRecipe; +import dev.elexi.hugeblank.bagels_baking.screen.MillScreenHandler; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.biome.v1.BiomeSelectionContext; import net.fabricmc.fabric.api.biome.v1.BiomeSelectors; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; +import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.minecraft.block.*; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; @@ -23,6 +25,7 @@ import net.minecraft.recipe.CuttingRecipe; import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.RecipeType; +import net.minecraft.screen.ScreenHandlerType; import net.minecraft.sound.BlockSoundGroup; import net.minecraft.sound.SoundEvent; import net.minecraft.sound.SoundEvents; @@ -233,6 +236,7 @@ private static boolean never(BlockState state, BlockView world, BlockPos pos) { public static final Identifier INTERACT_WITH_MILL = new Identifier(ID, mill_stat); public static RecipeType MILLING; public static RecipeSerializer MILLING_SERIALIZER = RecipeSerializer.register(mill_rtype_id, new CuttingRecipe.Serializer(MillingRecipe::new)); + public static ScreenHandlerType MILL_SCREEN; // Ingredients public static final Item SALT = basicIngredient(); @@ -500,6 +504,7 @@ public void onInitialize() { Stats.CUSTOM.getOrCreateStat(INTERACT_WITH_MILL, StatFormatter.DEFAULT); Registry.register(Registry.BLOCK, MILL_ID, MILL); Registry.register(Registry.ITEM, MILL_ID, MILL_ITEM); + MILL_SCREEN = ScreenHandlerRegistry.registerSimple(Baking.MILL_ID, MillScreenHandler::new); // Cups registerItem("cup", CUP); diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/ClientBaking.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/ClientBaking.java index 9b7c3f89..02ca8686 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/ClientBaking.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/ClientBaking.java @@ -3,26 +3,21 @@ import dev.elexi.hugeblank.bagels_baking.entity.TomatoEntity; import dev.elexi.hugeblank.bagels_baking.network.TomatoSpawnPacket; import dev.elexi.hugeblank.bagels_baking.screen.MillScreen; -import dev.elexi.hugeblank.bagels_baking.screen.MillScreenHandler; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.fabricmc.fabric.api.client.screenhandler.v1.ScreenRegistry; import net.fabricmc.fabric.api.network.ClientSidePacketRegistry; -import net.fabricmc.fabric.api.screenhandler.v1.ScreenHandlerRegistry; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.entity.FlyingItemEntityRenderer; import net.minecraft.entity.Entity; -import net.minecraft.screen.ScreenHandlerType; import net.minecraft.util.math.Vec3d; import java.util.UUID; public class ClientBaking implements ClientModInitializer { - public static ScreenHandlerType MILL_SCREEN; - @Override public void onInitializeClient() { BlockRenderLayerMap.INSTANCE.putBlock(Baking.HALITE, RenderLayer.getTranslucent()); @@ -39,8 +34,7 @@ public void onInitializeClient() { BlockRenderLayerMap.INSTANCE.putBlock(Baking.CORN_STALK, RenderLayer.getCutout()); BlockRenderLayerMap.INSTANCE.putBlock(Baking.RICE_PLANT, RenderLayer.getCutout()); - MILL_SCREEN = ScreenHandlerRegistry.registerSimple(Baking.MILL_ID, MillScreenHandler::new); - ScreenRegistry.register(MILL_SCREEN, MillScreen::new); + ScreenRegistry.register(Baking.MILL_SCREEN, MillScreen::new); EntityRendererRegistry.INSTANCE.register(Baking.TOMATO_THROWABLE, (dispatcher, context) -> new FlyingItemEntityRenderer(dispatcher, context.getItemRenderer())); diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/screen/MillScreenHandler.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/screen/MillScreenHandler.java index 90f7de01..d12fd05c 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/screen/MillScreenHandler.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/screen/MillScreenHandler.java @@ -2,7 +2,6 @@ import com.google.common.collect.Lists; import dev.elexi.hugeblank.bagels_baking.Baking; -import dev.elexi.hugeblank.bagels_baking.ClientBaking; import dev.elexi.hugeblank.bagels_baking.recipe.MillingRecipe; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -44,7 +43,7 @@ public MillScreenHandler(int syncId, PlayerInventory playerInventory) { } public MillScreenHandler(int syncId, PlayerInventory playerInventory, ScreenHandlerContext context) { - super(ClientBaking.MILL_SCREEN, syncId); + super(Baking.MILL_SCREEN, syncId); this.selectedRecipe = Property.create(); this.availableRecipes = Lists.newArrayList(); this.inputStack = ItemStack.EMPTY; @@ -169,7 +168,7 @@ private void populateResult() { } public ScreenHandlerType getType() { - return ClientBaking.MILL_SCREEN; + return Baking.MILL_SCREEN; } @Environment(EnvType.CLIENT) From 6f3e2275d5c86548e12a74ba94bed1f615c8d7c0 Mon Sep 17 00:00:00 2001 From: hugeblank Date: Tue, 11 May 2021 05:41:42 -0700 Subject: [PATCH 3/3] Corn is now Corn is now Corn - 2 block tall crops (corn) now extend from CropBlock thereby resolving some mod compat issues - Expanded animal breeding with crops beyond chickens --- gradle.properties | 2 +- .../elexi/hugeblank/bagels_baking/Baking.java | 1 + .../bagels_baking/block/DoubleCropBlock.java | 121 +------------- .../bagels_baking/entity/FeedItems.java | 33 ++++ .../bagels_baking/mixin/Splashes.java | 5 +- .../mixin/entity/ChickenSeeds.java | 31 ---- .../entity/passive/AnimalBreedItems.java | 22 +++ .../mixin/entity/passive/ChickenSeeds.java | 17 ++ .../mixin/entity/passive/CowFeed.java | 17 ++ .../mixin/entity/passive/PigFeed.java | 17 ++ .../mixin/entity/passive/SheepFeed.java | 17 ++ .../entity/{ => passive}/TrickyRabbit.java | 2 +- .../entity/villager/FarmerVillagerAITask.java | 17 -- src/main/resources/bagels_baking.mixins.json | 8 +- .../loot_tables/blocks/corn.json | 157 ------------------ 15 files changed, 142 insertions(+), 325 deletions(-) create mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/entity/FeedItems.java delete mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/ChickenSeeds.java create mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/AnimalBreedItems.java create mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/ChickenSeeds.java create mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/CowFeed.java create mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/PigFeed.java create mode 100644 src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/SheepFeed.java rename src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/{ => passive}/TrickyRabbit.java (98%) diff --git a/gradle.properties b/gradle.properties index 91c6f31b..462e8d9e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.16.5+build.6 loader_version=0.11.3 # Mod Properties -mod_version = 0.3.2 +mod_version = 0.3.3 maven_group = dev.elexi.hugeblank archives_base_name = bagels_baking diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java index 0872a0e7..1040918c 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/Baking.java @@ -559,6 +559,7 @@ public void onInitialize() { ((BasicCropBlock)RICE_PLANT).setSeed(WILD_RICE); registerItem("rice", RICE); registerBlock("corn", CORN_STALK); + ((BasicCropBlock)CORN_STALK).setSeed(CORN_SEEDS); registerItem("corn", CORN); registerItem("cooked_corn", COOKED_CORN); registerItem("corn_seeds", CORN_SEEDS); diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/block/DoubleCropBlock.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/block/DoubleCropBlock.java index 554b1aec..b9046e45 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/block/DoubleCropBlock.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/block/DoubleCropBlock.java @@ -1,13 +1,8 @@ package dev.elexi.hugeblank.bagels_baking.block; import net.minecraft.block.*; -import net.minecraft.block.entity.BlockEntity; import net.minecraft.block.enums.DoubleBlockHalf; -import net.minecraft.entity.Entity; -import net.minecraft.entity.mob.RavagerEntity; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemPlacementContext; -import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; import net.minecraft.state.StateManager; import net.minecraft.state.property.EnumProperty; @@ -15,14 +10,15 @@ import net.minecraft.state.property.Properties; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -import net.minecraft.util.math.MathHelper; import net.minecraft.util.shape.VoxelShape; -import net.minecraft.world.*; +import net.minecraft.world.BlockView; +import net.minecraft.world.WorldAccess; +import net.minecraft.world.WorldView; import org.jetbrains.annotations.Nullable; import java.util.Random; -public class DoubleCropBlock extends PlantBlock implements Fertilizable { +public class DoubleCropBlock extends BasicCropBlock implements Fertilizable { public static final EnumProperty HALF = Properties.DOUBLE_BLOCK_HALF; public static final IntProperty AGE = Properties.AGE_7; @@ -74,46 +70,10 @@ public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random protected static float getAvailableMoisture(Block block, BlockView world, BlockPos pos) { if (world.getBlockState(pos).get(HALF) == DoubleBlockHalf.UPPER) { BlockState lowerState = world.getBlockState(pos.down()); - return getAvailableMoisture(lowerState.getBlock(), world, pos.down()); - } - float f = 1.0F; - BlockPos blockPos = pos.down(); - - for(int i = -1; i <= 1; ++i) { - for(int j = -1; j <= 1; ++j) { - float g = 0.0F; - BlockState blockState = world.getBlockState(blockPos.add(i, 0, j)); - if (blockState.isOf(Blocks.FARMLAND)) { - g = 1.0F; - if (blockState.get(FarmlandBlock.MOISTURE) > 0) { - g = 3.0F; - } - } - - if (i != 0 || j != 0) { - g /= 4.0F; - } - - f += g; - } - } - - BlockPos blockPos2 = pos.north(); - BlockPos blockPos3 = pos.south(); - BlockPos blockPos4 = pos.west(); - BlockPos blockPos5 = pos.east(); - boolean bl = block == world.getBlockState(blockPos4).getBlock() || block == world.getBlockState(blockPos5).getBlock(); - boolean bl2 = block == world.getBlockState(blockPos2).getBlock() || block == world.getBlockState(blockPos3).getBlock(); - if (bl && bl2) { - f /= 2.0F; + return CropBlock.getAvailableMoisture(lowerState.getBlock(), world, pos.down()); } else { - boolean bl3 = block == world.getBlockState(blockPos4.north()).getBlock() || block == world.getBlockState(blockPos5.north()).getBlock() || block == world.getBlockState(blockPos5.south()).getBlock() || block == world.getBlockState(blockPos4.south()).getBlock(); - if (bl3) { - f /= 2.0F; - } + return CropBlock.getAvailableMoisture(block, world, pos.down()); } - - return f; } public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { @@ -124,38 +84,9 @@ public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos po } } - public void onBreak(World world, BlockPos pos, BlockState state, PlayerEntity player) { - if (!world.isClient) { - if (player.isCreative()) { - onBreakInCreative(world, pos, state, player); - } else { - dropStacks(state, world, pos, null, player, player.getMainHandStack()); - } - } - - super.onBreak(world, pos, state, player); - } - - public void afterBreak(World world, PlayerEntity player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) { - super.afterBreak(world, player, pos, Blocks.AIR.getDefaultState(), blockEntity, stack); - } - - protected static void onBreakInCreative(World world, BlockPos pos, BlockState state, PlayerEntity player) { - DoubleBlockHalf doubleBlockHalf = state.get(HALF); - if (doubleBlockHalf == DoubleBlockHalf.UPPER) { - BlockPos blockPos = pos.down(); - BlockState blockState = world.getBlockState(blockPos); - if (blockState.getBlock() == state.getBlock() && blockState.get(HALF) == DoubleBlockHalf.LOWER) { - world.setBlockState(blockPos, Blocks.AIR.getDefaultState(), 35); - world.syncWorldEvent(player, 2001, blockPos, Block.getRawIdFromState(blockState)); - } - } - - } - public boolean canPlaceAt(BlockState state, WorldView world, BlockPos pos) { BlockState lower = world.getBlockState(pos.down()); - return state.get(HALF) == DoubleBlockHalf.LOWER ? lower.isOf(Blocks.FARMLAND) : (lower.getBlock() == this && state.get(HALF) == DoubleBlockHalf.UPPER); + return state.get(HALF) == DoubleBlockHalf.LOWER ? super.canPlaceAt(state, world, pos) : (lower.getBlock() == this && state.get(HALF) == DoubleBlockHalf.UPPER && lower.get(AGE) > 3); } public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState newState, WorldAccess world, BlockPos pos, BlockPos posFrom) { @@ -163,36 +94,9 @@ public BlockState getStateForNeighborUpdate(BlockState state, Direction directio if (doubleBlockHalf == DoubleBlockHalf.LOWER && direction == Direction.UP && (state.get(AGE) > 3 && world.getBlockState(pos.up()).getBlock() == Blocks.AIR)) { return Blocks.AIR.getDefaultState(); } else { - return direction == Direction.DOWN && !state.canPlaceAt(world, pos) ? Blocks.AIR.getDefaultState() : super.getStateForNeighborUpdate(state, direction, newState, world, pos, posFrom); - } - } - public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { - if (entity instanceof RavagerEntity && world.getGameRules().getBoolean(GameRules.DO_MOB_GRIEFING)) { - world.breakBlock(pos, true, entity); + return direction == Direction.DOWN && !state.canPlaceAt(world, pos) ? Blocks.AIR.getDefaultState() : super.getStateForNeighborUpdate(state, direction, newState, world, pos, posFrom); } - - super.onEntityCollision(state, world, pos, entity); - } - - public IntProperty getAgeProperty() { - return AGE; - } - - public int getMaxAge() { - return 7; - } - - protected int getAge(BlockState state) { - return state.get(this.getAgeProperty()); - } - - public BlockState withAge(int age) { - return this.getDefaultState().with(this.getAgeProperty(), age); - } - - public boolean isMature(BlockState state) { - return state.get(this.getAgeProperty()) >= this.getMaxAge(); } @Override @@ -209,15 +113,6 @@ protected void appendProperties(StateManager.Builder builder) builder.add(HALF, AGE); } - @Override - public boolean canGrow(World world, Random random, BlockPos pos, BlockState state) { - return true; - } - - protected int getGrowthAmount(World world) { - return MathHelper.nextInt(world.random, 2, 5); - } - @Override public void grow(ServerWorld world, Random random, BlockPos pos, BlockState state) { if (state.get(HALF) == DoubleBlockHalf.LOWER) { diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/entity/FeedItems.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/entity/FeedItems.java new file mode 100644 index 00000000..03d68563 --- /dev/null +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/entity/FeedItems.java @@ -0,0 +1,33 @@ +package dev.elexi.hugeblank.bagels_baking.entity; + +import dev.elexi.hugeblank.bagels_baking.Baking; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.recipe.Ingredient; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.stream.Stream; + +public class FeedItems { + public static Item[] COW = {Baking.CORN}; + public static Item[] PIG = {Baking.CORN, Baking.TOMATO}; + public static Item[] CHICKEN = {Baking.CORN_MEAL, Baking.CORN_SEEDS, Baking.WILD_RICE, Baking.RICE}; + + public static ArrayList getList(Object[] objs) { + Stream items = Arrays.stream(objs); + ArrayList stacks = new ArrayList<>(); + items.forEach((Object item) -> { + stacks.add(((Item)item).getDefaultStack()); + }); + return stacks; + } + + public static Ingredient set(Item[] a, Object[] b) { + ArrayList out = getList(a); + out.addAll(getList(b)); + + return Ingredient.ofStacks(out.stream()); + } +} + diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java index d39af0a3..f7f026e3 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/Splashes.java @@ -42,7 +42,7 @@ private void addSplashes(CallbackInfoReturnable cir) { splashTexts.add("Kroi can't tyep sommtines but that' sokya"); splashTexts.add("Respect your food delivery drivers!"); splashTexts.add("A la minecarte!"); - if (field_18934 != null && RANDOM.nextFloat() < 0.25) { + if (field_18934 != null && RANDOM.nextFloat() < 0.1) { switch (field_18934.getUsername()) { // Surprises for my friends :) case "rwr": cir.setReturnValue("Betreucia killed Broseph!"); @@ -53,7 +53,7 @@ private void addSplashes(CallbackInfoReturnable cir) { case "roger109z": cir.setReturnValue("poger! :)"); return; - case "KoriA": + case "Kori_A": cir.setReturnValue("Korea? No, KoriA."); return; case "He_Is_Man": @@ -70,7 +70,6 @@ private void addSplashes(CallbackInfoReturnable cir) { return; case "ChocolateFrog18": cir.setReturnValue("Any British frogs?"); - return; } } } diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/ChickenSeeds.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/ChickenSeeds.java deleted file mode 100644 index 8307a092..00000000 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/ChickenSeeds.java +++ /dev/null @@ -1,31 +0,0 @@ -package dev.elexi.hugeblank.bagels_baking.mixin.entity; - -import dev.elexi.hugeblank.bagels_baking.Baking; -import net.minecraft.entity.passive.ChickenEntity; -import net.minecraft.item.Items; -import net.minecraft.recipe.Ingredient; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ChickenEntity.class) -public class ChickenSeeds { - - @Mutable - @Final - @Shadow - private static Ingredient BREEDING_INGREDIENT; - - @Inject(at = @At("HEAD"), method = "", cancellable = true) - private static void validSeeds(CallbackInfo ci) { - BREEDING_INGREDIENT = Ingredient.ofItems( - Items.WHEAT_SEEDS, Items.MELON_SEEDS, Items.PUMPKIN_SEEDS, Items.BEETROOT_SEEDS, Baking.CORN_SEEDS, - Baking.RICE, Baking.TEA_SEEDS, Baking.CORN_MEAL - ); - ci.cancel(); - } -} diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/AnimalBreedItems.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/AnimalBreedItems.java new file mode 100644 index 00000000..0ce3689d --- /dev/null +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/AnimalBreedItems.java @@ -0,0 +1,22 @@ +package dev.elexi.hugeblank.bagels_baking.mixin.entity.passive; + +import dev.elexi.hugeblank.bagels_baking.Baking; +import net.minecraft.entity.passive.AnimalEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.recipe.Ingredient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AnimalEntity.class) +public class AnimalBreedItems { + + private static final Ingredient breedingItems = Ingredient.ofItems(Items.WHEAT, Baking.CORN); + + @Inject(at = @At("HEAD"), method = "isBreedingItem(Lnet/minecraft/item/ItemStack;)Z", cancellable = true) + public void isBreedingItem(ItemStack stack, CallbackInfoReturnable cir) { + cir.setReturnValue(breedingItems.test(stack)); + } +} diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/ChickenSeeds.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/ChickenSeeds.java new file mode 100644 index 00000000..66b9c7aa --- /dev/null +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/ChickenSeeds.java @@ -0,0 +1,17 @@ +package dev.elexi.hugeblank.bagels_baking.mixin.entity.passive; + +import dev.elexi.hugeblank.bagels_baking.entity.FeedItems; +import net.minecraft.entity.passive.ChickenEntity; +import net.minecraft.item.ItemConvertible; +import net.minecraft.recipe.Ingredient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ChickenEntity.class) +class ChickenSeeds { + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/Ingredient;ofItems([Lnet/minecraft/item/ItemConvertible;)Lnet/minecraft/recipe/Ingredient;", ordinal = 0), method = "") + private static Ingredient validSeeds(ItemConvertible[] items) { + return FeedItems.set(FeedItems.CHICKEN, items); + } +} diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/CowFeed.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/CowFeed.java new file mode 100644 index 00000000..91a62cd3 --- /dev/null +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/CowFeed.java @@ -0,0 +1,17 @@ +package dev.elexi.hugeblank.bagels_baking.mixin.entity.passive; + +import dev.elexi.hugeblank.bagels_baking.entity.FeedItems; +import net.minecraft.entity.passive.CowEntity; +import net.minecraft.item.ItemConvertible; +import net.minecraft.recipe.Ingredient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(CowEntity.class) +class CowFeed { + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/Ingredient;ofItems([Lnet/minecraft/item/ItemConvertible;)Lnet/minecraft/recipe/Ingredient;", ordinal = 0), method = "initGoals()V") + private Ingredient breedItems(ItemConvertible[] items) { + return FeedItems.set(FeedItems.COW, items); + } +} diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/PigFeed.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/PigFeed.java new file mode 100644 index 00000000..e45bf562 --- /dev/null +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/PigFeed.java @@ -0,0 +1,17 @@ +package dev.elexi.hugeblank.bagels_baking.mixin.entity.passive; + +import dev.elexi.hugeblank.bagels_baking.entity.FeedItems; +import net.minecraft.entity.passive.PigEntity; +import net.minecraft.item.ItemConvertible; +import net.minecraft.recipe.Ingredient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(PigEntity.class) +class PigFeed { + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/Ingredient;ofItems([Lnet/minecraft/item/ItemConvertible;)Lnet/minecraft/recipe/Ingredient;", ordinal = 0), method = "") + private static Ingredient breedItems(ItemConvertible[] items) { + return FeedItems.set(FeedItems.PIG, items); + } +} diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/SheepFeed.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/SheepFeed.java new file mode 100644 index 00000000..8d182229 --- /dev/null +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/SheepFeed.java @@ -0,0 +1,17 @@ +package dev.elexi.hugeblank.bagels_baking.mixin.entity.passive; + +import dev.elexi.hugeblank.bagels_baking.entity.FeedItems; +import net.minecraft.entity.passive.SheepEntity; +import net.minecraft.item.ItemConvertible; +import net.minecraft.recipe.Ingredient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(SheepEntity.class) +class SheepFeed { + @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/recipe/Ingredient;ofItems([Lnet/minecraft/item/ItemConvertible;)Lnet/minecraft/recipe/Ingredient;", ordinal = 0), method = "initGoals()V") + private Ingredient breedItems(ItemConvertible[] items) { + return FeedItems.set(FeedItems.COW, items); + } +} diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/TrickyRabbit.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/TrickyRabbit.java similarity index 98% rename from src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/TrickyRabbit.java rename to src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/TrickyRabbit.java index 29e3c899..cd2e159a 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/TrickyRabbit.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/passive/TrickyRabbit.java @@ -1,4 +1,4 @@ -package dev.elexi.hugeblank.bagels_baking.mixin.entity; +package dev.elexi.hugeblank.bagels_baking.mixin.entity.passive; import dev.elexi.hugeblank.bagels_baking.Baking; import net.minecraft.entity.EntityType; diff --git a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/villager/FarmerVillagerAITask.java b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/villager/FarmerVillagerAITask.java index be9dcdb2..c7cb35c9 100644 --- a/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/villager/FarmerVillagerAITask.java +++ b/src/main/java/dev/elexi/hugeblank/bagels_baking/mixin/entity/villager/FarmerVillagerAITask.java @@ -1,10 +1,8 @@ package dev.elexi.hugeblank.bagels_baking.mixin.entity.villager; import dev.elexi.hugeblank.bagels_baking.Baking; -import dev.elexi.hugeblank.bagels_baking.block.DoubleCropBlock; import net.minecraft.block.Block; import net.minecraft.block.BlockState; -import net.minecraft.block.FarmlandBlock; import net.minecraft.entity.ai.brain.task.FarmerVillagerTask; import net.minecraft.entity.passive.VillagerEntity; import net.minecraft.inventory.SimpleInventory; @@ -17,7 +15,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(FarmerVillagerTask.class) @@ -32,20 +29,6 @@ private void executeTask() { doTask = true; } - @Inject(at = @At("RETURN"), method = "isSuitableTarget(Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/server/world/ServerWorld;)Z", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) - private void cornIsSuitableIPromise(BlockPos pos, ServerWorld world, CallbackInfoReturnable cir, BlockState blockState, Block block, Block block2) { - if (block instanceof DoubleCropBlock) { - cir.setReturnValue(((DoubleCropBlock) block).isMature(blockState) || blockState.isAir() && block2 instanceof FarmlandBlock); - } - } - - @Inject(at = @At(ordinal = 1, value = "INVOKE_ASSIGN", target = "Lnet/minecraft/block/BlockState;getBlock()Lnet/minecraft/block/Block;"), method = "keepRunning(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/passive/VillagerEntity;J)V", locals = LocalCapture.CAPTURE_FAILHARD) - private void harvestCrop(ServerWorld serverWorld, VillagerEntity villagerEntity, long l, CallbackInfo ci, BlockState blockState, Block block, Block block2) { - if (block instanceof DoubleCropBlock && ((DoubleCropBlock)block).isMature(blockState)) { - serverWorld.breakBlock(currentTarget, true, villagerEntity); - } - } - @Inject(at = @At(ordinal = 0, value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getItem()Lnet/minecraft/item/Item;"), method = "keepRunning(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/passive/VillagerEntity;J)V", locals = LocalCapture.CAPTURE_FAILHARD) private void farmTask(ServerWorld serverWorld, VillagerEntity villagerEntity, long l, CallbackInfo ci, BlockState blockState, Block block, Block block2, SimpleInventory simpleInventory, int i, ItemStack itemStack, boolean bl) { if (itemStack.getItem() == Baking.TOMATO) { diff --git a/src/main/resources/bagels_baking.mixins.json b/src/main/resources/bagels_baking.mixins.json index f9e664eb..f0151868 100644 --- a/src/main/resources/bagels_baking.mixins.json +++ b/src/main/resources/bagels_baking.mixins.json @@ -11,10 +11,14 @@ "brewing.BrewingSlotsClient", "composting.Composting", "crafting.MultiCraft", - "entity.ChickenSeeds", "entity.LivingEntityTeaDamage", "entity.PlayerTick", - "entity.TrickyRabbit", + "entity.passive.AnimalBreedItems", + "entity.passive.ChickenSeeds", + "entity.passive.CowFeed", + "entity.passive.PigFeed", + "entity.passive.SheepFeed", + "entity.passive.TrickyRabbit", "entity.villager.FarmerVillagerAITask", "entity.villager.FarmerVillagerAIWorkTask", "entity.villager.VillagerEntityFarming", diff --git a/src/main/resources/data/bagels_baking/loot_tables/blocks/corn.json b/src/main/resources/data/bagels_baking/loot_tables/blocks/corn.json index eed88497..517129ab 100644 --- a/src/main/resources/data/bagels_baking/loot_tables/blocks/corn.json +++ b/src/main/resources/data/bagels_baking/loot_tables/blocks/corn.json @@ -16,48 +16,6 @@ "properties": { "half": "lower" } - }, - { - "condition": "minecraft:location_check", - "predicate": { - "block": { - "block": "bagels_baking:corn", - "state": { - "half": "upper" - } - } - }, - "offsetY": 1 - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "bagels_baking:corn_seeds" - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "bagels_baking:corn", - "properties": { - "half": "upper" - } - }, - { - "condition": "minecraft:location_check", - "predicate": { - "block": { - "block": "bagels_baking:corn", - "state": { - "half": "lower" - } - } - }, - "offsetY": -1 } ] }, @@ -88,18 +46,6 @@ "half": "lower", "age": 7 } - }, - { - "condition": "minecraft:location_check", - "predicate": { - "block": { - "block": "bagels_baking:corn", - "state": { - "half": "upper" - } - } - }, - "offsetY": 1 } ] }, @@ -119,109 +65,6 @@ "half": "lower", "age": 7 } - }, - { - "condition": "minecraft:location_check", - "predicate": { - "block": { - "block": "bagels_baking:corn", - "state": { - "half": "upper" - } - } - }, - "offsetY": 1 - } - ], - "functions": [ - { - "function": "minecraft:set_count", - "count": { - "min": 0.0, - "max": 2.0, - "type": "minecraft:uniform" - } - }, - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:uniform_bonus_count", - "parameters": { - "bonusMultiplier": 1 - } - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:apply_bonus", - "enchantment": "minecraft:fortune", - "formula": "minecraft:binomial_with_bonus_count", - "parameters": { - "extra": 3, - "probability": 0.5714286 - } - } - ], - "name": "bagels_baking:corn" - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "bagels_baking:corn", - "properties": { - "half": "upper", - "age": 3 - } - }, - { - "condition": "minecraft:location_check", - "predicate": { - "block": { - "block": "bagels_baking:corn", - "state": { - "half": "lower" - } - } - }, - "offsetY": -1 - } - ] - }, - { - "rolls": 1.0, - "entries": [ - { - "type": "minecraft:item", - "name": "bagels_baking:corn_seeds" - } - ], - "conditions": [ - { - "condition": "minecraft:block_state_property", - "block": "bagels_baking:corn", - "properties": { - "half": "upper", - "age": 3 - } - }, - { - "condition": "minecraft:location_check", - "predicate": { - "block": { - "block": "bagels_baking:corn", - "state": { - "half": "lower" - } - } - }, - "offsetY": -1 } ], "functions": [