Skip to content

Commit

Permalink
refactor and add different color variants
Browse files Browse the repository at this point in the history
Thepigcat76 committed Apr 30, 2024
1 parent 5bfe4b5 commit 6a3ab2e
Showing 6 changed files with 64 additions and 60 deletions.
Original file line number Diff line number Diff line change
@@ -1,22 +1,19 @@
package com.leclowndu93150.invertedbed;

import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.renderer.blockentity.BedRenderer;
import net.minecraft.world.level.block.Blocks;
import com.leclowndu93150.invertedbed.block.InvertedBedRenderer;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.event.ModelEvent;

import static com.leclowndu93150.invertedbed.Main.*;

@Mod.EventBusSubscriber(modid = Main.MODID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public class IBEvents {
public class IBClientEvents {

@SubscribeEvent
public static void registerBERenderer(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(INVERTED_BED_BE.get() , InvertedBedRenderer::new);
event.registerBlockEntityRenderer(INVERTED_BED.get() , InvertedBedRenderer::new);
}

@SubscribeEvent
Original file line number Diff line number Diff line change
@@ -1,44 +1,41 @@
package com.leclowndu93150.invertedbed;

import net.minecraft.client.multiplayer.ClientLevel;
import com.leclowndu93150.invertedbed.block.InvertedBedBlock;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.bus.api.Event;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.event.entity.player.PlayerWakeUpEvent;
import net.neoforged.neoforge.event.entity.player.SleepingLocationCheckEvent;
import net.neoforged.neoforge.event.entity.player.SleepingTimeCheckEvent;
import net.neoforged.neoforge.event.level.SleepFinishedTimeEvent;

import static com.leclowndu93150.invertedbed.Main.INVERTED_BED;
import static com.leclowndu93150.invertedbed.Main.MODID;

@Mod.EventBusSubscriber(modid = MODID)
public class SleepingLogic {
public class IBServerEvents {
@SubscribeEvent
public static void onTrySleep(PlayerWakeUpEvent event) {
if (!event.getEntity().level().isClientSide){
((ServerLevel) event.getEntity().level()).setDayTime(13000);
if (!event.getEntity().level().isClientSide()) {
ServerLevel level = ((ServerLevel) event.getEntity().level());
BlockState blockState = event.getEntity().level().getBlockState(event.getEntity().getSleepingPos().get());
if (blockState.getBlock() instanceof InvertedBedBlock)
level.setDayTime(13000);
}
}

@SubscribeEvent
public static void onCheckTime(SleepingTimeCheckEvent event) {
if (event.getEntity().level().getBlockState(event.getSleepingLocation().get()).is(INVERTED_BED)) {
BlockState blockState = event.getEntity().level().getBlockState(event.getSleepingLocation().get());
if (blockState.getBlock() instanceof InvertedBedBlock)
event.setResult(event.getEntity().level().isDay() ? Event.Result.ALLOW : Event.Result.DENY);
}
System.out.println("checking time: " + event.getSleepingLocation());
}

@SubscribeEvent
public static void onBedCheck(SleepingLocationCheckEvent event) {
if (event.getEntity().level().getBlockState(event.getSleepingLocation()).getBlock().equals(INVERTED_BED)) {
BlockState blockState = event.getEntity().level().getBlockState(event.getSleepingLocation());
if (blockState.getBlock() instanceof InvertedBedBlock)
event.setResult(Event.Result.ALLOW);
}
System.out.println("checking location: " + event.getSleepingLocation());
}

}
56 changes: 41 additions & 15 deletions src/main/java/com/leclowndu93150/invertedbed/Main.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,24 @@
package com.leclowndu93150.invertedbed;

import com.leclowndu93150.invertedbed.block.InvertedBedBlock;
import com.leclowndu93150.invertedbed.block.InvertedBedBlockEntity;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.util.valueproviders.UniformInt;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.DropExperienceBlock;
import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

import static net.minecraft.world.item.Items.registerBlock;
@@ -37,19 +35,49 @@ public class Main {
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID);

// Creates a new Block with the id "examplemod:example_block", combining the namespace and path
public static final DeferredBlock<Block> INVERTED_BED = BLOCKS.register("inverted_bed", () -> new InvertedBedBlock(DyeColor.RED, BlockBehaviour.Properties.of().destroyTime(0.3F).sound(SoundType.WOOD)));
public static final List<DeferredBlock<InvertedBedBlock>> INVERTED_BEDS = registerBeds();

public static final DeferredRegister<BlockEntityType<?>> BLOCKENTITIES = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE,MODID);
public static final DeferredHolder<BlockEntityType<?>, BlockEntityType<InvertedBedBlockEntity>> INVERTED_BED_BE = BLOCKENTITIES.register("inverted_bed", () -> BlockEntityType.Builder.of(InvertedBedBlockEntity::new, INVERTED_BED.get()).build(null));

public static final DeferredItem<BlockItem> INVERTED_BED_ITEM = ITEMS.registerSimpleBlockItem("inverted_bed", INVERTED_BED);
public static final DeferredRegister<BlockEntityType<?>> BLOCKENTITIES = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, MODID);
public static final Supplier<BlockEntityType<InvertedBedBlockEntity>> INVERTED_BED =
BLOCKENTITIES.register("inverted_bed", () ->
BlockEntityType.Builder.of(InvertedBedBlockEntity::new,
bedsToArray(INVERTED_BEDS)).build(null));

public static final DeferredHolder<CreativeModeTab, CreativeModeTab> INVERTED_TAB = CREATIVE_MODE_TABS.register("inverted_tab", () -> CreativeModeTab.builder()
.title(Component.translatable("itemGroup.invertedbed"))
.withTabsBefore(CreativeModeTabs.COMBAT)
.icon(() -> INVERTED_BED_ITEM.get().getDefaultInstance())
.displayItems((parameters, output) -> output.accept(INVERTED_BED_ITEM.get())).build());
.icon(() -> INVERTED_BEDS.get(14).toStack())
.displayItems((parameters, output) -> {
for (DeferredBlock<InvertedBedBlock> bedBlock : INVERTED_BEDS) {
output.accept(bedBlock);
}
}).build());

private static List<DeferredBlock<InvertedBedBlock>> registerBeds() {
List<DeferredBlock<InvertedBedBlock>> bedBlocks = new ArrayList<>();
DyeColor[] values = DyeColor.values();
for (DyeColor color : values) {
bedBlocks.add(newBed(color));
}
return bedBlocks;
}

private static InvertedBedBlock[] bedsToArray(List<DeferredBlock<InvertedBedBlock>> bedBlocks) {
InvertedBedBlock[] blocks = new InvertedBedBlock[16];
int bedSize = bedBlocks.size();
for (int i = 0; i < bedSize; i++) {
blocks[i] = bedBlocks.get(i).value();
}
return blocks;
}

private static DeferredBlock<InvertedBedBlock> newBed(DyeColor color) {
DeferredBlock<InvertedBedBlock> tempBlock = BLOCKS.register(color.getName() + "_inverted_bed", () -> new InvertedBedBlock(color, BlockBehaviour.Properties.of()
.destroyTime(0.3F)
.sound(SoundType.WOOD)));
ITEMS.registerSimpleBlockItem(color.getName()+"_inverted_bed", tempBlock);
return tempBlock;
}

public Main(IEventBus modEventBus) {

@@ -63,7 +91,5 @@ public Main(IEventBus modEventBus) {

}



}

Original file line number Diff line number Diff line change
@@ -1,22 +1,15 @@
package com.leclowndu93150.invertedbed;
package com.leclowndu93150.invertedbed.block;


import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.npc.Villager;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BedBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BedPart;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.Vec3;

import java.util.List;

Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
package com.leclowndu93150.invertedbed;
package com.leclowndu93150.invertedbed.block;

import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import com.leclowndu93150.invertedbed.Main;
import net.minecraft.core.BlockPos;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.block.BedBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;

import static com.leclowndu93150.invertedbed.Main.INVERTED_BED_BE;

public class InvertedBedBlockEntity extends BlockEntity {
private DyeColor color;

public InvertedBedBlockEntity(BlockPos pPos, BlockState pBlockState) {
super(INVERTED_BED_BE.get(), pPos, pBlockState);
this.color = ((BedBlock)pBlockState.getBlock()).getColor();
this(pPos, pBlockState, ((BedBlock) pBlockState.getBlock()).getColor());
}

public InvertedBedBlockEntity(BlockPos pPos, BlockState pBlockState, DyeColor pColor) {
super(INVERTED_BED_BE.get(), pPos, pBlockState);
super(Main.INVERTED_BED.get(), pPos, pBlockState);
this.color = pColor;
}

Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.leclowndu93150.invertedbed;
package com.leclowndu93150.invertedbed.block;

import com.leclowndu93150.invertedbed.Main;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis;
import it.unimi.dsi.fastutil.ints.Int2IntFunction;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.CubeListBuilder;
@@ -20,12 +20,8 @@
import net.minecraft.core.Direction;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.BedBlock;
import net.minecraft.world.level.block.ChestBlock;
import net.minecraft.world.level.block.DoubleBlockCombiner;
import net.minecraft.world.level.block.entity.BedBlockEntity;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BedPart;

@@ -81,7 +77,7 @@ public void render(InvertedBedBlockEntity pBlockEntity, float pPartialTick, Pose
if (level != null) {
BlockState blockstate = pBlockEntity.getBlockState();
DoubleBlockCombiner.NeighborCombineResult<? extends InvertedBedBlockEntity> neighborcombineresult = DoubleBlockCombiner.combineWithNeigbour(
Main.INVERTED_BED_BE.get(),
Main.INVERTED_BED.get(),
InvertedBedBlock::getBlockType,
InvertedBedBlock::getConnectedDirection,
ChestBlock.FACING,

0 comments on commit 6a3ab2e

Please sign in to comment.