Skip to content

Commit e7232b2

Browse files
feat: add roost logic
1 parent 1449c57 commit e7232b2

12 files changed

Lines changed: 374 additions & 17 deletions

File tree

src/client/java/com/tcm/MineTale/MineTaleClient.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.tcm.MineTale;
22

3-
import com.tcm.MineTale.block.workbenches.menu.BlacksmithsWorkbenchMenu;
43
import com.tcm.MineTale.block.workbenches.screen.*;
54
import com.tcm.MineTale.network.ClientboundNearbyInventorySyncPacket;
65

src/client/java/com/tcm/MineTale/block/workbenches/screen/FurnitureWorkbenchScreen.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.tcm.MineTale.MineTale;
44
import com.tcm.MineTale.block.workbenches.menu.AbstractWorkbenchContainerMenu;
5-
import com.tcm.MineTale.block.workbenches.menu.BlacksmithsWorkbenchMenu;
65
import com.tcm.MineTale.block.workbenches.menu.FurnitureWorkbenchMenu;
76
import com.tcm.MineTale.mixin.client.ClientRecipeBookAccessor;
87
import com.tcm.MineTale.network.CraftRequestPayload;

src/client/java/com/tcm/MineTale/datagen/ModBlockTagProvider.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package com.tcm.MineTale.datagen;
22

33
import com.tcm.MineTale.registry.ModBlocks;
4-
import com.tcm.MineTale.util.ModTags;
54
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
65
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
76
import net.minecraft.core.HolderLookup;
87
import net.minecraft.tags.BlockTags;
9-
import net.minecraft.world.level.block.Block;
10-
import net.minecraft.world.level.block.Blocks;
118

129
import java.util.concurrent.CompletableFuture;
1310

src/client/java/com/tcm/MineTale/datagen/ModItemTagProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import net.minecraft.core.HolderLookup;
88
import net.minecraft.world.item.Item;
99
import net.minecraft.world.item.Items;
10-
import net.minecraft.world.level.block.Blocks;
1110

1211
import java.util.concurrent.CompletableFuture;
1312

src/client/java/com/tcm/MineTale/datagen/ModModelProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import net.minecraft.client.renderer.block.model.VariantMutator;
1515
import net.minecraft.core.Direction;
1616
import net.minecraft.resources.Identifier;
17-
import net.minecraft.world.item.Items;
1817
import net.minecraft.world.level.block.Block;
1918
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
2019
import net.minecraft.world.level.block.state.properties.DoubleBlockHalf;

src/client/java/com/tcm/MineTale/datagen/recipes/AlchemistRecipes.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package com.tcm.MineTale.datagen.recipes;
22

3-
import com.tcm.MineTale.datagen.builders.WorkbenchRecipeBuilder;
4-
import com.tcm.MineTale.registry.ModBlocks;
5-
import com.tcm.MineTale.registry.ModItems;
6-
import com.tcm.MineTale.registry.ModRecipeDisplay;
7-
import com.tcm.MineTale.registry.ModRecipes;
83
import net.minecraft.core.HolderLookup;
94
import net.minecraft.data.recipes.RecipeOutput;
105
import net.minecraft.data.recipes.RecipeProvider;

src/client/java/com/tcm/MineTale/datagen/recipes/FarmerRecipes.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.tcm.MineTale.datagen.recipes;
22

3-
import com.tcm.MineTale.datagen.ModItemTagProvider;
43
import com.tcm.MineTale.datagen.builders.WorkbenchRecipeBuilder;
54
import com.tcm.MineTale.registry.ModBlocks;
65
import com.tcm.MineTale.registry.ModItems;

src/main/java/com/tcm/MineTale/block/ChickenCoopBlock.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.tcm.MineTale.block;
22

33
import com.mojang.serialization.MapCodec;
4+
import com.tcm.MineTale.block.entity.ChickenCoopEntity;
5+
import com.tcm.MineTale.registry.ModBlockEntities;
46
import com.tcm.MineTale.util.CoopPart;
57

68
import net.minecraft.core.BlockPos;
@@ -15,14 +17,17 @@
1517
import net.minecraft.world.level.ScheduledTickAccess;
1618
import net.minecraft.world.level.block.Block;
1719
import net.minecraft.world.level.block.Blocks;
20+
import net.minecraft.world.level.block.EntityBlock;
1821
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
1922
import net.minecraft.world.level.block.entity.BlockEntity;
23+
import net.minecraft.world.level.block.entity.BlockEntityTicker;
24+
import net.minecraft.world.level.block.entity.BlockEntityType;
2025
import net.minecraft.world.level.block.state.BlockState;
2126
import net.minecraft.world.level.block.state.StateDefinition;
2227
import net.minecraft.world.level.block.state.properties.EnumProperty;
2328
import org.jetbrains.annotations.Nullable;
2429

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

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

43+
@Nullable
44+
@Override
45+
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> type) {
46+
// 1. Only tick on server side
47+
if (level.isClientSide()) return null;
48+
49+
// 2. Only tick if this is the correct part of the coop
50+
if (state.getValue(PART) != CoopPart.BOTTOM_FRONT_CENTER) return null;
51+
52+
// 3. Link to the static tick method in your Entity class
53+
return type == ModBlockEntities.CHICKEN_COOP_BE
54+
? (lvl, pos, st, be) -> ChickenCoopEntity.tick(lvl, pos, st, (ChickenCoopEntity) be)
55+
: null;
56+
}
57+
58+
@Nullable
59+
@Override
60+
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
61+
// Only the center-front part gets the "brain"
62+
if (state.getValue(PART) == CoopPart.BOTTOM_FRONT_CENTER) {
63+
return new ChickenCoopEntity(pos, state);
64+
}
65+
return null;
66+
}
67+
3868
@Override
3969
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
4070
builder.add(FACING, PART);

0 commit comments

Comments
 (0)