From 6c22a10e930490267485f75a85e5f4c2ba566e92 Mon Sep 17 00:00:00 2001 From: HypherionMC Date: Sat, 24 Sep 2022 13:25:29 +0200 Subject: [PATCH] Solar Panel re-implementation --- .../blockentities/SolarPanelBlockEntity.java | 69 ++++++++++++++++++ .../common/blocks/SolarPanel.java | 63 ++++++++++++++++ .../common/init/CommonRegistration.java | 2 + .../common/init/HLBlockEntities.java | 3 + .../hyperlighting/common/init/HLBlocks.java | 9 ++- .../blockstates/solar_panel.json | 5 ++ .../models/block/solar_panel.json | 22 ++++++ .../models/item/solar_panel.json | 3 + .../hyperlighting/textures/block/solar.png | Bin 0 -> 781 bytes .../dataproviders/SolarPanelDataProvider.java | 21 ++++++ .../wthit/providers/SolarPanelProvider.java | 24 ++++++ gradle.properties | 2 +- 12 files changed, 218 insertions(+), 5 deletions(-) create mode 100644 Common/src/main/java/me/hypherionmc/hyperlighting/common/blockentities/SolarPanelBlockEntity.java create mode 100644 Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/SolarPanel.java create mode 100644 Common/src/main/resources/assets/hyperlighting/blockstates/solar_panel.json create mode 100644 Common/src/main/resources/assets/hyperlighting/models/block/solar_panel.json create mode 100644 Common/src/main/resources/assets/hyperlighting/models/item/solar_panel.json create mode 100644 Common/src/main/resources/assets/hyperlighting/textures/block/solar.png create mode 100644 Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/dataproviders/SolarPanelDataProvider.java create mode 100644 Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/providers/SolarPanelProvider.java diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/blockentities/SolarPanelBlockEntity.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/blockentities/SolarPanelBlockEntity.java new file mode 100644 index 0000000..c458e1f --- /dev/null +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/blockentities/SolarPanelBlockEntity.java @@ -0,0 +1,69 @@ +package me.hypherionmc.hyperlighting.common.blockentities; + +import me.hypherionmc.craterlib.api.blockentities.ITickable; +import me.hypherionmc.craterlib.api.blockentities.caps.ForgeCapability; +import me.hypherionmc.craterlib.common.blockentity.CraterBlockEntity; +import me.hypherionmc.craterlib.systems.energy.CustomEnergyStorage; +import me.hypherionmc.hyperlighting.common.blocks.SolarPanel; +import me.hypherionmc.hyperlighting.common.init.HLBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.Optional; + +/** + * @author HypherionSA + * @date 18/09/2022 + */ +public class SolarPanelBlockEntity extends CraterBlockEntity implements ITickable { + + private CustomEnergyStorage energyStorage = new CustomEnergyStorage(2000, 50, 1000); + + public SolarPanelBlockEntity(BlockPos pos, BlockState state) { + super(HLBlockEntities.SOLAR_PANEL.get(), pos, state); + } + + @Override + public void tick(Level level, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity) { + if (this.getBlockState().getBlock() instanceof SolarPanel && level.isDay() && level.canSeeSky(blockPos)) { + int i = level.getBrightness(LightLayer.SKY, blockPos) - level.getSkyDarken(); + float f = level.getSunAngle(1.0F); + + if (i > 8 && this.energyStorage.getPowerLevel() < this.energyStorage.getPowerCapacity()) { + float f1 = f < (float) Math.PI ? 0.0F : ((float) Math.PI * 2F); + f = f + (f1 - f) * 0.2F; + i = Math.round((float) i * Mth.cos(f)); + i = Mth.clamp(i, 0, 15); + this.energyStorage.receiveEnergyInternal(i, false); + } + this.sendUpdates(); + } + } + + @Override + public void load(CompoundTag tag) { + super.load(tag); + this.energyStorage.readNBT(tag); + } + + @Override + public void saveAdditional(CompoundTag tag) { + super.saveAdditional(tag); + this.energyStorage.writeNBT(tag); + } + + @Override + public Optional getForgeCapability(ForgeCapability forgeCapability, Direction direction) { + if (forgeCapability == ForgeCapability.ENERGY && (direction == Direction.DOWN || direction == null)) { + return (Optional) Optional.of(energyStorage); + } + + return Optional.empty(); + } +} diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/SolarPanel.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/SolarPanel.java new file mode 100644 index 0000000..53d6649 --- /dev/null +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/blocks/SolarPanel.java @@ -0,0 +1,63 @@ +package me.hypherionmc.hyperlighting.common.blocks; + +import me.hypherionmc.hyperlighting.common.blockentities.SolarPanelBlockEntity; +import me.hypherionmc.hyperlighting.common.init.CommonRegistration; +import me.hypherionmc.hyperlighting.common.init.HLItems; +import net.minecraft.core.BlockPos; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseEntityBlock; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +/** + * @author HypherionSA + * @date 18/09/2022 + */ +public class SolarPanel extends BaseEntityBlock { + + private final VoxelShape BOUNDS = Block.box(0, 0, 0, 16, 1.92, 16); + + public SolarPanel(String name) { + super(Properties.of(Material.GLASS).sound(SoundType.GLASS).noCollission().noOcclusion()); + + HLItems.register(name, () -> new BlockItem(this, new Item.Properties().tab(CommonRegistration.MACHINES_TAB))); + } + + @Override + public VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + return BOUNDS; + } + + @Nullable + @Override + public BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType blockEntityType) { + return (level1, blockPos, blockState1, t) -> { + if (!level1.isClientSide() && t instanceof SolarPanelBlockEntity be) { + be.tick(level1, blockPos, blockState1, be); + } + }; + } + + @Nullable + @Override + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new SolarPanelBlockEntity(blockPos, blockState); + } + + @Override + public RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } +} diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/CommonRegistration.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/CommonRegistration.java index cf1e1da..cd564ee 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/CommonRegistration.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/CommonRegistration.java @@ -12,6 +12,8 @@ public class CommonRegistration { public static HyperLightingClientConfig config = new HyperLightingClientConfig(); public static final CreativeModeTab LIGHTS_TAB = CreativeTabBuilder.builder(MOD_ID, "lighting").setIcon(() -> new ItemStack(HLBlocks.ADVANCED_LANTERN)).build(); + public static final CreativeModeTab MACHINES_TAB = CreativeTabBuilder.builder(MOD_ID, "machines").setIcon(() -> new ItemStack(HLBlocks.ADVANCED_TORCH)).build(); + public static void registerAll() { HLSounds.loadAll(); diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlockEntities.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlockEntities.java index 57dc7d5..97e273a 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlockEntities.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlockEntities.java @@ -4,6 +4,7 @@ import me.hypherionmc.craterlib.systems.reg.RegistrationProvider; import me.hypherionmc.craterlib.systems.reg.RegistryObject; import me.hypherionmc.hyperlighting.Constants; import me.hypherionmc.hyperlighting.common.blockentities.AdvancedCampfireBlockEntity; +import me.hypherionmc.hyperlighting.common.blockentities.SolarPanelBlockEntity; import net.minecraft.core.Registry; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -17,5 +18,7 @@ public class HLBlockEntities { public static RegistryObject> CAMPFIRE = BE.register("campfire", () -> BlockEntityType.Builder.of(AdvancedCampfireBlockEntity::new, HLBlocks.ADVANCED_CAMPFIRE.get()).build(null)); + public static RegistryObject> SOLAR_PANEL = BE.register("solar_panel", () -> BlockEntityType.Builder.of(SolarPanelBlockEntity::new, HLBlocks.SOLAR_PANEL.get()).build(null)); + public static void loadAll() {} } diff --git a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java index 27180b0..3d9b936 100644 --- a/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java +++ b/Common/src/main/java/me/hypherionmc/hyperlighting/common/init/HLBlocks.java @@ -3,10 +3,7 @@ package me.hypherionmc.hyperlighting.common.init; import me.hypherionmc.craterlib.systems.reg.BlockRegistryObject; import me.hypherionmc.craterlib.systems.reg.RegistrationProvider; import me.hypherionmc.hyperlighting.Constants; -import me.hypherionmc.hyperlighting.common.blocks.AdvancedCandleBlock; -import me.hypherionmc.hyperlighting.common.blocks.AdvancedCampfire; -import me.hypherionmc.hyperlighting.common.blocks.AdvancedLanternBlock; -import me.hypherionmc.hyperlighting.common.blocks.AdvancedTorchBlock; +import me.hypherionmc.hyperlighting.common.blocks.*; import net.minecraft.core.Registry; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; @@ -30,6 +27,10 @@ public class HLBlocks { /* Candles */ public static BlockRegistryObject ADVANCED_CANDLE = register("advanced_candle", () -> new AdvancedCandleBlock("advanced_candle", DyeColor.ORANGE, CommonRegistration.LIGHTS_TAB)); + /* Machines */ + public static BlockRegistryObject SOLAR_PANEL = register("solar_panel", () -> new SolarPanel("solar_panel")); + + public static void loadAll() {} public static BlockRegistryObject register(String name, Supplier block) { diff --git a/Common/src/main/resources/assets/hyperlighting/blockstates/solar_panel.json b/Common/src/main/resources/assets/hyperlighting/blockstates/solar_panel.json new file mode 100644 index 0000000..674fc04 --- /dev/null +++ b/Common/src/main/resources/assets/hyperlighting/blockstates/solar_panel.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "hyperlighting:block/solar_panel" } + } +} diff --git a/Common/src/main/resources/assets/hyperlighting/models/block/solar_panel.json b/Common/src/main/resources/assets/hyperlighting/models/block/solar_panel.json new file mode 100644 index 0000000..e1b2fe9 --- /dev/null +++ b/Common/src/main/resources/assets/hyperlighting/models/block/solar_panel.json @@ -0,0 +1,22 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [16, 32], + "textures": { + "0": "hyperlighting:block/solar", + "particle": "hyperlighting:block/solar" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 2, 16], + "faces": { + "north": {"uv": [0, 8, 16, 10], "texture": "#0"}, + "east": {"uv": [0, 8, 16, 10], "texture": "#0"}, + "south": {"uv": [0, 8, 16, 10], "texture": "#0"}, + "west": {"uv": [0, 8, 16, 10], "texture": "#0"}, + "up": {"uv": [0, 0, 16, 8], "texture": "#0"}, + "down": {"uv": [0, 8, 16, 16], "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/Common/src/main/resources/assets/hyperlighting/models/item/solar_panel.json b/Common/src/main/resources/assets/hyperlighting/models/item/solar_panel.json new file mode 100644 index 0000000..b462f73 --- /dev/null +++ b/Common/src/main/resources/assets/hyperlighting/models/item/solar_panel.json @@ -0,0 +1,3 @@ +{ + "parent": "hyperlighting:block/solar_panel" +} diff --git a/Common/src/main/resources/assets/hyperlighting/textures/block/solar.png b/Common/src/main/resources/assets/hyperlighting/textures/block/solar.png new file mode 100644 index 0000000000000000000000000000000000000000..a4de82742132bb931c07b312002fc20453dd401f GIT binary patch literal 781 zcmV+o1M>WdP)Fz^_G0e6K0ANPEZS{qf|Um%HZxe_CgT-4h24)8Uy^Qd-Tg zNqz4KVurG#;n8*;wj>Yp;uV*JmMxH)m+I^ z9iuf48yTdKgaic@Y(j^F7*&%p>+Fj+e9I`4htbzU6`UMJl*k(;wL)E0sv7AkO&wK{ z`~N&`Z93s~4<&)#SJ(ZV0Q&ZUdd+ozPhGcu1_WM!YqRAqQ%a%c}Vw=TAUxo1W+nI6ML-X@7X*4{~d0 zKMD>vBLDyZ32;bRa{vG?BLDy{BLR4&KXw2B0YXVcK~zXf?US);!cY{3Pi!Q`Y~5T$ zX&l6*@8wboQU^r}4t0?(zCf2gMIl>W!qP?Bp+PO8CW|Tmp*JM=9xn4fB`Yk05M+7NDg54=&0>1;svcaLYa;bcTMs@~ogxnfDfL3-W# zJ0csgu3KKt;A@o_+VV3pG;9(R9O9#KTDaO9+HMz-6$C*7C!ByH*S(}h{eoeI>mwm1 z3Ok<5DUl8bKuZ%y5OwWoJ~m+Y`hEEd5-_lmV2cnXVB3AwfQV~wALz~!#O23EOkh9+ zn49hu140s*VYHhyek!n-a{^3?06Pis6r3X6nSMsS6D5d}##aE{A`m68NMJp`ymBYP z4PB^)v{vu3b+&3rWs*Alnr7Eob2YC>1%J^>1EP{a$pHV%|M$TUOeo;*erw1r00000 LNkvXXu0mjfq2pM8 literal 0 HcmV?d00001 diff --git a/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/dataproviders/SolarPanelDataProvider.java b/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/dataproviders/SolarPanelDataProvider.java new file mode 100644 index 0000000..bcdc4a9 --- /dev/null +++ b/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/dataproviders/SolarPanelDataProvider.java @@ -0,0 +1,21 @@ +package me.hypherionmc.hyperlighting.common.integration.wthit.dataproviders; + +import mcp.mobius.waila.api.IPluginConfig; +import mcp.mobius.waila.api.IServerAccessor; +import mcp.mobius.waila.api.IServerDataProvider; +import me.hypherionmc.hyperlighting.common.blockentities.SolarPanelBlockEntity; +import net.minecraft.nbt.CompoundTag; + +/** + * @author HypherionSA + * @date 18/09/2022 + */ +public class SolarPanelDataProvider implements IServerDataProvider { + + @Override + public void appendServerData(CompoundTag data, IServerAccessor accessor, IPluginConfig config) { + CompoundTag tag = new CompoundTag(); + accessor.getTarget().saveAdditional(tag); + data.put("hl_solar", tag); + } +} diff --git a/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/providers/SolarPanelProvider.java b/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/providers/SolarPanelProvider.java new file mode 100644 index 0000000..899b68b --- /dev/null +++ b/Fabric/src/main/java/me/hypherionmc/hyperlighting/common/integration/wthit/providers/SolarPanelProvider.java @@ -0,0 +1,24 @@ +package me.hypherionmc.hyperlighting.common.integration.wthit.providers; + +import mcp.mobius.waila.api.IBlockAccessor; +import mcp.mobius.waila.api.IBlockComponentProvider; +import mcp.mobius.waila.api.IPluginConfig; +import mcp.mobius.waila.api.ITooltip; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; + +/** + * @author HypherionSA + * @date 18/09/2022 + */ +public class SolarPanelProvider implements IBlockComponentProvider { + + @Override + public void appendBody(ITooltip tooltip, IBlockAccessor accessor, IPluginConfig config) { + CompoundTag compound = accessor.getServerData().getCompound("hl_solar"); + int powerLevel = compound.getInt("powerLevel"); + int level = (int) (((float) powerLevel / 2000) * 100); + tooltip.addLine(Component.literal("Power Level : " + ChatFormatting.YELLOW + level + "%")); + } +} diff --git a/gradle.properties b/gradle.properties index 800d237..246c739 100644 --- a/gradle.properties +++ b/gradle.properties @@ -28,7 +28,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false #dependencies -craterlib_version=0.0.2d +craterlib_version=0.0.3d mod_menu_version=4.0.6 shimmer_version=0.1.12 sodium_version=3957319