diff --git a/build.gradle b/build.gradle index edeb5a9..bd33444 100644 --- a/build.gradle +++ b/build.gradle @@ -115,6 +115,9 @@ dependencies { implementation files("libs/immersive_portals-6.0.3.jar") implementation files("libs/cloth-config-15.0.140-neoforge.jar") + implementation files("libs/veil-neoforge-1.21.1-1.0.0.80.jar") + + // Example optional mod dependency with JEI // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime diff --git a/gradle.properties b/gradle.properties index 9addfb4..72cabe8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,7 @@ org.gradle.configuration-cache=true # you can also find the latest versions at: https://parchmentmc.org/docs/getting-started parchment_minecraft_version=1.21 parchment_mappings_version=2024.07.28 +veil_version=1.0.0.80 # Environment Properties # You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge # The Minecraft version must agree with the Neo version to get a valid artifact diff --git a/libs/veil-neoforge-1.21.1-1.0.0.80.jar b/libs/veil-neoforge-1.21.1-1.0.0.80.jar new file mode 100644 index 0000000..aded8fa Binary files /dev/null and b/libs/veil-neoforge-1.21.1-1.0.0.80.jar differ diff --git a/settings.gradle b/settings.gradle index ada876e..27149a6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,6 +3,10 @@ pluginManagement { mavenLocal() gradlePluginPortal() maven { url = 'https://maven.neoforged.net/releases' } + maven { + name = 'BlameJared Maven (CrT / Bookshelf)' + url = 'https://maven.blamejared.com' + } } } diff --git a/src/main/java/net/mc3699/backrooms/BackroomsMod.java b/src/main/java/net/mc3699/backrooms/BackroomsMod.java index 610fb39..a65d2ce 100644 --- a/src/main/java/net/mc3699/backrooms/BackroomsMod.java +++ b/src/main/java/net/mc3699/backrooms/BackroomsMod.java @@ -1,5 +1,6 @@ package net.mc3699.backrooms; +import foundry.veil.Veil; import net.mc3699.backrooms.blocks.ModBlockEntities; import net.mc3699.backrooms.blocks.ModBlocks; import net.mc3699.backrooms.blocks.blockRenderer.PlasmaRenderer; @@ -13,6 +14,7 @@ import net.mc3699.backrooms.sound.ModSounds; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.client.renderer.entity.EntityRenderers; +import org.lwjgl.opengl.GLDebugMessageCallback; import org.slf4j.Logger; import com.mojang.logging.LogUtils; @@ -28,6 +30,10 @@ import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.server.ServerStartingEvent; +import java.lang.module.Configuration; +import java.util.logging.LogManager; + +import static org.lwjgl.opengl.GL43.*; // The value here should match an entry in the META-INF/neoforge.mods.toml file @Mod(BackroomsMod.MODID) public class BackroomsMod @@ -56,8 +62,7 @@ public BackroomsMod(IEventBus modEventBus, ModContainer modContainer) NeoForge.EVENT_BUS.addListener(BackroomsGeneration::backroomsChunkGen); } - private void commonSetup(final FMLCommonSetupEvent event) - { + private void commonSetup(final FMLCommonSetupEvent event) { } @@ -70,6 +75,7 @@ public static void onClientSetup(FMLClientSetupEvent event) EntityRenderers.register(ModEntities.HOWLER_ENTITY, HowlerRenderer::new); EntityRenderers.register(ModEntities.LIFEFORM_ENTITY, LifeformRenderer::new); + BlockEntityRenderers.register(ModBlockEntities.NULLZONE_BLOCK_ENTITY.get(), NullzoneBlockEntityRenderer::new); } } diff --git a/src/main/java/net/mc3699/backrooms/blocks/LightingTestBlock.java b/src/main/java/net/mc3699/backrooms/blocks/LightingTestBlock.java new file mode 100644 index 0000000..4af6228 --- /dev/null +++ b/src/main/java/net/mc3699/backrooms/blocks/LightingTestBlock.java @@ -0,0 +1,21 @@ +package net.mc3699.backrooms.blocks; + +import net.mc3699.backrooms.blocks.entity.LightTestBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class LightingTestBlock extends Block implements EntityBlock { + + public LightingTestBlock(Properties properties) { + super(properties); + } + + @Override + public @Nullable BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new LightTestBlockEntity(blockPos, blockState); + } +} diff --git a/src/main/java/net/mc3699/backrooms/blocks/ModBlockEntities.java b/src/main/java/net/mc3699/backrooms/blocks/ModBlockEntities.java index 27c68df..a04e7a2 100644 --- a/src/main/java/net/mc3699/backrooms/blocks/ModBlockEntities.java +++ b/src/main/java/net/mc3699/backrooms/blocks/ModBlockEntities.java @@ -1,10 +1,7 @@ package net.mc3699.backrooms.blocks; import net.mc3699.backrooms.BackroomsMod; -import net.mc3699.backrooms.blocks.entity.BeamInitiatorBlockEntity; -import net.mc3699.backrooms.blocks.entity.LaserBlockEntity; -import net.mc3699.backrooms.blocks.entity.NullzoneBlockEntity; -import net.mc3699.backrooms.blocks.entity.PrototypeBlockEntity; +import net.mc3699.backrooms.blocks.entity.*; import net.minecraft.core.registries.Registries; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -35,6 +32,11 @@ public class ModBlockEntities { ModBlocks.LASER_TEST.get() ).build(null)); + public static final Supplier> LIGHT_TEST_BLOCK_ENTITY = BLOCK_ENTITIES.register("light_test_entity", + () -> BlockEntityType.Builder.of( + LightTestBlockEntity::new, + ModBlocks.LIGHT_TEST.get() + ).build(null)); public static final Supplier> BEAM_INIT_ENTITY = BLOCK_ENTITIES.register("beam_init_entity", () -> BlockEntityType.Builder.of( diff --git a/src/main/java/net/mc3699/backrooms/blocks/ModBlocks.java b/src/main/java/net/mc3699/backrooms/blocks/ModBlocks.java index 7d160e3..3365161 100644 --- a/src/main/java/net/mc3699/backrooms/blocks/ModBlocks.java +++ b/src/main/java/net/mc3699/backrooms/blocks/ModBlocks.java @@ -67,6 +67,9 @@ public class ModBlocks { public static final DeferredBlock THRESHOLD_BACKPLANE = registerBlock("threshold_backplane", () -> new Block(BlockBehaviour.Properties.of().sound(SoundType.STONE))); + public static final DeferredBlock LIGHT_TEST = registerBlock("light_test", + () -> new LightingTestBlock(BlockBehaviour.Properties.of())); + public static final DeferredBlock AUDITORY_GUIDEPOST = registerBlock("auditory_guidepost", () -> new AuditoryGuidepostBlock(BlockBehaviour.Properties.of().sound(SoundType.METAL).noCollission())); diff --git a/src/main/java/net/mc3699/backrooms/blocks/entity/LightTestBlockEntity.java b/src/main/java/net/mc3699/backrooms/blocks/entity/LightTestBlockEntity.java new file mode 100644 index 0000000..fae5bdf --- /dev/null +++ b/src/main/java/net/mc3699/backrooms/blocks/entity/LightTestBlockEntity.java @@ -0,0 +1,57 @@ +package net.mc3699.backrooms.blocks.entity; + +import foundry.veil.api.client.render.VeilRenderSystem; +import foundry.veil.api.client.render.light.PointLight; +import foundry.veil.api.client.render.light.renderer.LightRenderer; +import net.mc3699.backrooms.blocks.ModBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.entity.TickingBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.neoforged.neoforge.attachment.AttachmentType; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; +import java.util.function.Supplier; + +public class LightTestBlockEntity extends BlockEntity { + + private final LightRenderer lightRenderer = VeilRenderSystem.renderer().getLightRenderer(); + private PointLight light; + + public LightTestBlockEntity(BlockPos pos, BlockState blockState) { + super(ModBlockEntities.LIGHT_TEST_BLOCK_ENTITY.get(), pos, blockState); + } + + @Override + public void onLoad() { + if(light == null && getLevel().isClientSide()) + { + createLight(); + light.setPosition(worldPosition.getX()+0.5, worldPosition.getY()+2, worldPosition.getZ()+0.5); + light.setRadius(10); + light.setColor(0,255,0); + light.setBrightness(0.002f); + light.markDirty(); + lightRenderer.addLight(light); + } + super.onLoad(); + } + + @Override + public void setRemoved() { + if(level.isClientSide() && light != null) + { + lightRenderer.removeLight(light); + } + super.setRemoved(); + + } + + public void createLight() + { + light = new PointLight(); + } + +} diff --git a/src/main/java/net/mc3699/backrooms/dimension/BackroomsGeneration.java b/src/main/java/net/mc3699/backrooms/dimension/BackroomsGeneration.java index 212f9fe..b8d11e4 100644 --- a/src/main/java/net/mc3699/backrooms/dimension/BackroomsGeneration.java +++ b/src/main/java/net/mc3699/backrooms/dimension/BackroomsGeneration.java @@ -8,6 +8,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.level.ChunkEvent; diff --git a/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsL2.java b/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsL2.java index 8024a05..4d67d2c 100644 --- a/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsL2.java +++ b/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsL2.java @@ -39,4 +39,5 @@ public static void generateChunk(ChunkAccess chunk) GenUtil.generateBasicWalls(chunk, L2_FLOOR_HEIGHT, L2_CEILING_HEIGHT, blockList.get(random.nextInt(blockList.size()))); GenUtil.generateLights(chunk, L2_CEILING_HEIGHT); } + } diff --git a/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsPitfallZone.java b/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsPitfallZone.java new file mode 100644 index 0000000..acaa3c1 --- /dev/null +++ b/src/main/java/net/mc3699/backrooms/dimension/levels/BackroomsPitfallZone.java @@ -0,0 +1,8 @@ +package net.mc3699.backrooms.dimension.levels; + +import net.mc3699.backrooms.dimension.util.GenUtil; +import net.minecraft.world.level.chunk.ChunkAccess; + +public class BackroomsPitfallZone { + +} diff --git a/src/main/java/net/mc3699/backrooms/entity/behavior/CornerPeekGoal.java b/src/main/java/net/mc3699/backrooms/entity/behavior/CornerPeekGoal.java new file mode 100644 index 0000000..1e70efc --- /dev/null +++ b/src/main/java/net/mc3699/backrooms/entity/behavior/CornerPeekGoal.java @@ -0,0 +1,40 @@ +package net.mc3699.backrooms.entity.behavior; + +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; + +public class CornerPeekGoal extends Goal { + + private static final double MAX_DISTANCE = 30; + + public CornerPeekGoal(Monster mob) { + this.mob = mob; + } + + private final Monster mob; + private Player targetPlayer; + + @Override + public boolean canUse() { + return false; + } + + @Override + public void start() { + mob.getNavigation().stop(); + } + + @Override + public void tick() { + if(targetPlayer != null) + { + mob.getLookControl().setLookAt(targetPlayer, 10f,10f); + PathNavigation navigation = mob.getNavigation(); + navigation.moveTo(targetPlayer, 0.4f); + } else { + mob.getNavigation().stop(); + } + } +} diff --git a/src/main/java/net/mc3699/backrooms/entity/behavior/HowlerEntity.java b/src/main/java/net/mc3699/backrooms/entity/behavior/HowlerEntity.java index 4537355..7bfbd72 100644 --- a/src/main/java/net/mc3699/backrooms/entity/behavior/HowlerEntity.java +++ b/src/main/java/net/mc3699/backrooms/entity/behavior/HowlerEntity.java @@ -1,5 +1,6 @@ package net.mc3699.backrooms.entity.behavior; +import foundry.veil.api.client.render.light.PointLight; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.entity.*; @@ -22,10 +23,16 @@ public class HowlerEntity extends Monster { private Player targetPlayer; + public HowlerEntity(EntityType entityType, Level level) { super(entityType, level); } + @Override + public void tick() { + super.tick(); + } + @Override protected void registerGoals() { super.registerGoals(); @@ -54,7 +61,6 @@ private class StalkPlayerGoal extends Goal private StalkPlayerGoal(Monster mob) { this.mob = mob; } - @Override public boolean canUse() { targetPlayer = mob.level().getNearestPlayer(mob, 100d);