Skip to content

Commit 6ab0de0

Browse files
KaupenjoeKaupenjoe
authored andcommitted
sittable block
1 parent 28e498e commit 6ab0de0

5 files changed

Lines changed: 95 additions & 0 deletions

File tree

src/main/java/net/kaupenjoe/tutorialmod/TutorialMod.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.kaupenjoe.tutorialmod.effect.ModEffects;
66
import net.kaupenjoe.tutorialmod.enchantment.ModEnchantmentEffects;
77
import net.kaupenjoe.tutorialmod.entity.ModEntities;
8+
import net.kaupenjoe.tutorialmod.entity.client.ChairRenderer;
89
import net.kaupenjoe.tutorialmod.entity.client.GeckoRenderer;
910
import net.kaupenjoe.tutorialmod.entity.client.TomahawkProjectileRenderer;
1011
import net.kaupenjoe.tutorialmod.item.ModCreativeModeTabs;
@@ -100,6 +101,8 @@ public static void onClientSetup(FMLClientSetupEvent event) {
100101

101102
EntityRenderers.register(ModEntities.GECKO.get(), GeckoRenderer::new);
102103
EntityRenderers.register(ModEntities.TOMAHAWK.get(), TomahawkProjectileRenderer::new);
104+
105+
EntityRenderers.register(ModEntities.CHAIR_ENTITY.get(), ChairRenderer::new);
103106
}
104107
}
105108
}

src/main/java/net/kaupenjoe/tutorialmod/block/custom/ChairBlock.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,30 @@
11
package net.kaupenjoe.tutorialmod.block.custom;
22

33
import com.mojang.serialization.MapCodec;
4+
import net.kaupenjoe.tutorialmod.entity.ModEntities;
5+
import net.kaupenjoe.tutorialmod.entity.custom.ChairEntity;
6+
import net.minecraft.client.multiplayer.ClientLevel;
47
import net.minecraft.core.BlockPos;
8+
import net.minecraft.server.level.ServerLevel;
9+
import net.minecraft.world.InteractionResult;
10+
import net.minecraft.world.entity.Entity;
11+
import net.minecraft.world.entity.MobSpawnType;
12+
import net.minecraft.world.entity.player.Player;
513
import net.minecraft.world.item.context.BlockPlaceContext;
614
import net.minecraft.world.level.BlockGetter;
15+
import net.minecraft.world.level.Level;
716
import net.minecraft.world.level.block.Block;
817
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
918
import net.minecraft.world.level.block.state.BlockState;
1019
import net.minecraft.world.level.block.state.StateDefinition;
20+
import net.minecraft.world.phys.AABB;
21+
import net.minecraft.world.phys.BlockHitResult;
1122
import net.minecraft.world.phys.shapes.CollisionContext;
1223
import net.minecraft.world.phys.shapes.VoxelShape;
1324
import org.jetbrains.annotations.Nullable;
1425

26+
import java.util.List;
27+
1528
public class ChairBlock extends HorizontalDirectionalBlock {
1629
public static final MapCodec<ChairBlock> CODEC = simpleCodec(ChairBlock::new);
1730
private static final VoxelShape SHAPE = Block.box(3.0, 0.0, 3.0, 13.0, 16.0, 13.0);
@@ -20,6 +33,23 @@ public ChairBlock(Properties properties) {
2033
super(properties);
2134
}
2235

36+
@Override
37+
protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) {
38+
if(!level.isClientSide()) {
39+
Entity entity = null;
40+
List<ChairEntity> entities = level.getEntities(ModEntities.CHAIR_ENTITY.get(), new AABB(pos), chair -> true);
41+
if(entities.isEmpty()) {
42+
entity = ModEntities.CHAIR_ENTITY.get().spawn(((ServerLevel) level), pos, MobSpawnType.TRIGGERED);
43+
} else {
44+
entity = entities.get(0);
45+
}
46+
47+
player.startRiding(entity);
48+
}
49+
50+
return InteractionResult.SUCCESS;
51+
}
52+
2353
@Override
2454
protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
2555
return SHAPE;

src/main/java/net/kaupenjoe/tutorialmod/entity/ModEntities.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.kaupenjoe.tutorialmod.entity;
22

33
import net.kaupenjoe.tutorialmod.TutorialMod;
4+
import net.kaupenjoe.tutorialmod.entity.custom.ChairEntity;
45
import net.kaupenjoe.tutorialmod.entity.custom.GeckoEntity;
56
import net.kaupenjoe.tutorialmod.entity.custom.TomahawkProjectileEntity;
67
import net.minecraft.core.registries.BuiltInRegistries;
@@ -23,6 +24,10 @@ public class ModEntities {
2324
ENTITY_TYPES.register("tomahawk", () -> EntityType.Builder.<TomahawkProjectileEntity>of(TomahawkProjectileEntity::new, MobCategory.MISC)
2425
.sized(0.5f, 1.15f).build("tomahawk"));
2526

27+
public static final Supplier<EntityType<ChairEntity>> CHAIR_ENTITY =
28+
ENTITY_TYPES.register("chair_entity", () -> EntityType.Builder.of(ChairEntity::new, MobCategory.MISC)
29+
.sized(0.5f, 0.5f).build("chair_entity"));
30+
2631

2732
public static void register(IEventBus eventBus) {
2833
ENTITY_TYPES.register(eventBus);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package net.kaupenjoe.tutorialmod.entity.client;
2+
3+
import net.kaupenjoe.tutorialmod.entity.custom.ChairEntity;
4+
import net.minecraft.client.renderer.culling.Frustum;
5+
import net.minecraft.client.renderer.entity.EntityRenderer;
6+
import net.minecraft.client.renderer.entity.EntityRendererProvider;
7+
import net.minecraft.resources.ResourceLocation;
8+
9+
public class ChairRenderer extends EntityRenderer<ChairEntity> {
10+
public ChairRenderer(EntityRendererProvider.Context context) {
11+
super(context);
12+
}
13+
14+
@Override
15+
public ResourceLocation getTextureLocation(ChairEntity chairEntity) {
16+
return null;
17+
}
18+
19+
@Override
20+
public boolean shouldRender(ChairEntity livingEntity, Frustum camera, double camX, double camY, double camZ) {
21+
return true;
22+
}
23+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package net.kaupenjoe.tutorialmod.entity.custom;
2+
3+
import net.minecraft.nbt.CompoundTag;
4+
import net.minecraft.network.syncher.SynchedEntityData;
5+
import net.minecraft.world.entity.Entity;
6+
import net.minecraft.world.entity.EntityType;
7+
import net.minecraft.world.level.Level;
8+
9+
public class ChairEntity extends Entity {
10+
public ChairEntity(EntityType<?> entityType, Level level) {
11+
super(entityType, level);
12+
}
13+
14+
@Override
15+
protected void defineSynchedData(SynchedEntityData.Builder builder) {
16+
17+
}
18+
19+
@Override
20+
protected void readAdditionalSaveData(CompoundTag compoundTag) {
21+
22+
}
23+
24+
@Override
25+
protected void addAdditionalSaveData(CompoundTag compoundTag) {
26+
27+
}
28+
29+
@Override
30+
protected void removePassenger(Entity passenger) {
31+
super.removePassenger(passenger);
32+
this.kill();
33+
}
34+
}

0 commit comments

Comments
 (0)