From 6a3ab2edf9c4f52d8f613660fd01ca8b02082449 Mon Sep 17 00:00:00 2001 From: thepigcat Date: Tue, 30 Apr 2024 18:33:04 +0200 Subject: [PATCH] refactor and add different color variants --- .../{IBEvents.java => IBClientEvents.java} | 9 +-- ...SleepingLogic.java => IBServerEvents.java} | 27 ++++----- .../com/leclowndu93150/invertedbed/Main.java | 56 ++++++++++++++----- .../{ => block}/InvertedBedBlock.java | 9 +-- .../{ => block}/InvertedBedBlockEntity.java | 13 ++--- .../{ => block}/InvertedBedRenderer.java | 10 +--- 6 files changed, 64 insertions(+), 60 deletions(-) rename src/main/java/com/leclowndu93150/invertedbed/{IBEvents.java => IBClientEvents.java} (72%) rename src/main/java/com/leclowndu93150/invertedbed/{SleepingLogic.java => IBServerEvents.java} (52%) rename src/main/java/com/leclowndu93150/invertedbed/{ => block}/InvertedBedBlock.java (74%) rename src/main/java/com/leclowndu93150/invertedbed/{ => block}/InvertedBedBlockEntity.java (67%) rename src/main/java/com/leclowndu93150/invertedbed/{ => block}/InvertedBedRenderer.java (94%) diff --git a/src/main/java/com/leclowndu93150/invertedbed/IBEvents.java b/src/main/java/com/leclowndu93150/invertedbed/IBClientEvents.java similarity index 72% rename from src/main/java/com/leclowndu93150/invertedbed/IBEvents.java rename to src/main/java/com/leclowndu93150/invertedbed/IBClientEvents.java index dc2af15..02f9660 100644 --- a/src/main/java/com/leclowndu93150/invertedbed/IBEvents.java +++ b/src/main/java/com/leclowndu93150/invertedbed/IBClientEvents.java @@ -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 diff --git a/src/main/java/com/leclowndu93150/invertedbed/SleepingLogic.java b/src/main/java/com/leclowndu93150/invertedbed/IBServerEvents.java similarity index 52% rename from src/main/java/com/leclowndu93150/invertedbed/SleepingLogic.java rename to src/main/java/com/leclowndu93150/invertedbed/IBServerEvents.java index 0844129..1d6414b 100644 --- a/src/main/java/com/leclowndu93150/invertedbed/SleepingLogic.java +++ b/src/main/java/com/leclowndu93150/invertedbed/IBServerEvents.java @@ -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()); } } diff --git a/src/main/java/com/leclowndu93150/invertedbed/Main.java b/src/main/java/com/leclowndu93150/invertedbed/Main.java index c75fcf6..9b5003d 100644 --- a/src/main/java/com/leclowndu93150/invertedbed/Main.java +++ b/src/main/java/com/leclowndu93150/invertedbed/Main.java @@ -1,16 +1,13 @@ 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; @@ -18,9 +15,10 @@ 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 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 INVERTED_BED = BLOCKS.register("inverted_bed", () -> new InvertedBedBlock(DyeColor.RED, BlockBehaviour.Properties.of().destroyTime(0.3F).sound(SoundType.WOOD))); + public static final List> INVERTED_BEDS = registerBeds(); - public static final DeferredRegister> BLOCKENTITIES = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE,MODID); - public static final DeferredHolder, BlockEntityType> INVERTED_BED_BE = BLOCKENTITIES.register("inverted_bed", () -> BlockEntityType.Builder.of(InvertedBedBlockEntity::new, INVERTED_BED.get()).build(null)); - - public static final DeferredItem INVERTED_BED_ITEM = ITEMS.registerSimpleBlockItem("inverted_bed", INVERTED_BED); + public static final DeferredRegister> BLOCKENTITIES = DeferredRegister.create(BuiltInRegistries.BLOCK_ENTITY_TYPE, MODID); + public static final Supplier> INVERTED_BED = + BLOCKENTITIES.register("inverted_bed", () -> + BlockEntityType.Builder.of(InvertedBedBlockEntity::new, + bedsToArray(INVERTED_BEDS)).build(null)); public static final DeferredHolder 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 bedBlock : INVERTED_BEDS) { + output.accept(bedBlock); + } + }).build()); + + private static List> registerBeds() { + List> bedBlocks = new ArrayList<>(); + DyeColor[] values = DyeColor.values(); + for (DyeColor color : values) { + bedBlocks.add(newBed(color)); + } + return bedBlocks; + } + private static InvertedBedBlock[] bedsToArray(List> 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 newBed(DyeColor color) { + DeferredBlock 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) { } - - } diff --git a/src/main/java/com/leclowndu93150/invertedbed/InvertedBedBlock.java b/src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedBlock.java similarity index 74% rename from src/main/java/com/leclowndu93150/invertedbed/InvertedBedBlock.java rename to src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedBlock.java index 7969171..9ee0312 100644 --- a/src/main/java/com/leclowndu93150/invertedbed/InvertedBedBlock.java +++ b/src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedBlock.java @@ -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; diff --git a/src/main/java/com/leclowndu93150/invertedbed/InvertedBedBlockEntity.java b/src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedBlockEntity.java similarity index 67% rename from src/main/java/com/leclowndu93150/invertedbed/InvertedBedBlockEntity.java rename to src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedBlockEntity.java index 3acb104..949947f 100644 --- a/src/main/java/com/leclowndu93150/invertedbed/InvertedBedBlockEntity.java +++ b/src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedBlockEntity.java @@ -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; } diff --git a/src/main/java/com/leclowndu93150/invertedbed/InvertedBedRenderer.java b/src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedRenderer.java similarity index 94% rename from src/main/java/com/leclowndu93150/invertedbed/InvertedBedRenderer.java rename to src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedRenderer.java index 34c621f..3448ca6 100644 --- a/src/main/java/com/leclowndu93150/invertedbed/InvertedBedRenderer.java +++ b/src/main/java/com/leclowndu93150/invertedbed/block/InvertedBedRenderer.java @@ -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 neighborcombineresult = DoubleBlockCombiner.combineWithNeigbour( - Main.INVERTED_BED_BE.get(), + Main.INVERTED_BED.get(), InvertedBedBlock::getBlockType, InvertedBedBlock::getConnectedDirection, ChestBlock.FACING,