Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/client/java/com/tcm/MineTale/MineTaleClient.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.tcm.MineTale;

import com.tcm.MineTale.block.workbenches.menu.BlacksmithsWorkbenchMenu;
import com.tcm.MineTale.block.workbenches.screen.*;
import com.tcm.MineTale.network.ClientboundNearbyInventorySyncPacket;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.tcm.MineTale.MineTale;
import com.tcm.MineTale.block.workbenches.menu.AbstractWorkbenchContainerMenu;
import com.tcm.MineTale.block.workbenches.menu.BlacksmithsWorkbenchMenu;
import com.tcm.MineTale.block.workbenches.menu.FurnitureWorkbenchMenu;
import com.tcm.MineTale.mixin.client.ClientRecipeBookAccessor;
import com.tcm.MineTale.network.CraftRequestPayload;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package com.tcm.MineTale.datagen;

import com.tcm.MineTale.registry.ModBlocks;
import com.tcm.MineTale.util.ModTags;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.minecraft.core.HolderLookup;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;

import java.util.concurrent.CompletableFuture;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import net.minecraft.core.HolderLookup;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Blocks;

import java.util.concurrent.CompletableFuture;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import net.minecraft.client.renderer.block.model.VariantMutator;
import net.minecraft.core.Direction;
import net.minecraft.resources.Identifier;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package com.tcm.MineTale.datagen.recipes;

import com.tcm.MineTale.datagen.builders.WorkbenchRecipeBuilder;
import com.tcm.MineTale.registry.ModBlocks;
import com.tcm.MineTale.registry.ModItems;
import com.tcm.MineTale.registry.ModRecipeDisplay;
import com.tcm.MineTale.registry.ModRecipes;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.recipes.RecipeOutput;
import net.minecraft.data.recipes.RecipeProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.tcm.MineTale.datagen.recipes;

import com.tcm.MineTale.datagen.ModItemTagProvider;
import com.tcm.MineTale.datagen.builders.WorkbenchRecipeBuilder;
import com.tcm.MineTale.registry.ModBlocks;
import com.tcm.MineTale.registry.ModItems;
Expand Down
67 changes: 64 additions & 3 deletions src/main/java/com/tcm/MineTale/block/ChickenCoopBlock.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.tcm.MineTale.block;

import com.mojang.serialization.MapCodec;
import com.tcm.MineTale.block.entity.ChickenCoopEntity;
import com.tcm.MineTale.registry.ModBlockEntities;
import com.tcm.MineTale.util.CoopPart;

import net.minecraft.core.BlockPos;
Expand All @@ -15,14 +17,17 @@
import net.minecraft.world.level.ScheduledTickAccess;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityTicker;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import org.jetbrains.annotations.Nullable;

public class ChickenCoopBlock extends HorizontalDirectionalBlock {
public class ChickenCoopBlock extends HorizontalDirectionalBlock implements EntityBlock {
public static final EnumProperty<CoopPart> PART = EnumProperty.create("part", CoopPart.class);

public static final MapCodec<ChickenCoopBlock> CODEC = simpleCodec(ChickenCoopBlock::new);
Expand All @@ -35,6 +40,31 @@ public ChickenCoopBlock(Properties properties) {
.setValue(PART, CoopPart.BOTTOM_FRONT_LEFT));
}

@Nullable
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
// 1. Only tick on server side
if (level.isClientSide()) return null;

// 2. Only tick if this is the correct part of the coop
if (state.getValue(PART) != CoopPart.BOTTOM_FRONT_CENTER) return null;

// 3. Link to the static tick method in your Entity class
return type == ModBlockEntities.CHICKEN_COOP_BE
? (lvl, pos, st, be) -> ChickenCoopEntity.tick(lvl, pos, st, (ChickenCoopEntity) be)
: null;
}

@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
// Only the center-front part gets the "brain"
if (state.getValue(PART) == CoopPart.BOTTOM_FRONT_CENTER) {
return new ChickenCoopEntity(pos, state);
}
return null;
}

@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(FACING, PART);
Expand Down Expand Up @@ -198,8 +228,39 @@ private BlockPos calculateOffset(BlockPos origin, Direction facing, int x, int z
.above(y);
}

@Override
@Override
protected MapCodec<? extends HorizontalDirectionalBlock> codec() {
return CODEC;
}
}

@Override
protected ItemInteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hit) {
if (level.isClientSide()) return ItemInteractionResult.SUCCESS;

Direction facing = state.getValue(FACING);
CoopPart part = state.getValue(PART);

// 1. Find the Brain (Bottom Front Center)
// We reverse the offset from the clicked part to find the origin (0,0,0)
// Then we add the specific offset for the Bottom Front Center (1,0,0)
BlockPos origin = pos.subtract(calculateOffset(BlockPos.ZERO, facing, part.getXOffset(), part.getZOffset(), part.getYOffset()));
BlockPos brainPos = calculateOffset(origin, facing, 1, 0, 0);

if (level.getBlockEntity(brainPos) instanceof ChickenCoopBlockEntity be) {
if (be.takeEgg() > 0) {
// Give player the egg
ItemStack eggStack = new ItemStack(Items.EGG);
if (!player.getInventory().add(eggStack)) {
player.drop(eggStack, false);
}

// Visual/Sound feedback
level.playSound(null, pos, SoundEvents.ITEM_PICKUP, SoundSource.PLAYERS, 0.2f, (level.random.nextFloat() - level.random.nextFloat()) * 0.7f + 1.2f);
return ItemInteractionResult.CONSUME;
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Outdated
}
}

return ItemInteractionResult.PASS;
}

}
Loading
Loading