16 Commits

57 changed files with 1263 additions and 77 deletions

View File

@@ -24,7 +24,7 @@ minecraft {
dependencies {
compileOnly group:'org.spongepowered', name:'mixin', version:'0.8.5'
compileOnly("me.hypherionmc.craterlib:CraterLib-common-1.19.1:${craterlib_version}")
compileOnly("me.hypherionmc.craterlib:CraterLib-common-${minecraft_version}:${craterlib_version}")
compileOnly("com.lowdragmc.shimmer:Shimmer-common-1.19.1:${shimmer_version}")
}

View File

@@ -0,0 +1,8 @@
package me.hypherionmc.hyperlighting.api;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public interface SwitchModule {
}

View File

@@ -31,6 +31,7 @@ public class HyperLightingClientConfig extends ModuleConfig {
public HyperLightingClientConfig() {
super(Constants.MOD_ID, "hyperlighting-client");
registerAndSetup(this);
}
@Override

View File

@@ -0,0 +1,70 @@
package me.hypherionmc.hyperlighting.client.gui;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import me.hypherionmc.hyperlighting.Constants;
import me.hypherionmc.hyperlighting.common.blockentities.BatteryNeonBlockEntity;
import me.hypherionmc.hyperlighting.common.containers.BatteryNeonContainer;
import net.minecraft.ChatFormatting;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Inventory;
import java.util.ArrayList;
import java.util.List;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class BatteryNeonScreen extends AbstractContainerScreen<BatteryNeonContainer> {
private static final ResourceLocation TEXTURE = new ResourceLocation(Constants.MOD_ID, "textures/gui/neon_light.png");
private final Inventory player;
private final BatteryNeonBlockEntity te;
public BatteryNeonScreen(BatteryNeonContainer container, Inventory inventory, Component title) {
super(container, inventory, title);
this.te = container.getBlockEntity();
this.player = inventory;
}
@Override
protected void renderBg(PoseStack poseStack, float v, int i, int i1) {
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.setShaderTexture(0, TEXTURE);
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
blit(poseStack, this.leftPos, this.topPos, 0, 0, this.imageWidth, this.imageHeight);
blit(poseStack, this.leftPos + 47, this.topPos + 20, 0, 198, (int) (((float) this.te.getEnergyStorage().getPowerLevel() / this.te.getEnergyStorage().getPowerCapacity()) * 110), 16);
if (this.te.isCharging()) {
blit(poseStack, this.leftPos + 26, this.topPos + 38, 185, 17, 4, 4);
}
}
@Override
protected void renderLabels(PoseStack matrixStack, int mouseX, int mouseY) {
super.renderLabels(matrixStack, mouseX, mouseY);
this.drawPowerToolTip(matrixStack, mouseX, mouseY, leftPos + this.menu.slots.get(0).x, topPos + this.menu.slots.get(0).y, 16, 16, ChatFormatting.YELLOW + "Power Slot", "Place a wireless battery", "module in this slot", "linked to a solar panel", "to charge the light");
this.drawPowerToolTip(matrixStack, mouseX, mouseY, leftPos + this.menu.slots.get(1).x, topPos + this.menu.slots.get(1).y, 16, 16, ChatFormatting.YELLOW + "Dye Slot", "Place dye here to", "change the color of the", "light");
this.drawPowerToolTip(matrixStack, mouseX, mouseY, this.leftPos + 47, this.topPos + 20, 110, 16, ChatFormatting.YELLOW + "Power Level", ChatFormatting.BLUE + "" + (int) (((float) this.te.getEnergyStorage().getPowerLevel() / this.te.getEnergyStorage().getPowerCapacity()) * 100) + "%", (te.isCharging() ? ChatFormatting.GREEN + "Charging" : ChatFormatting.RED + "Not Charging"));
}
private void drawPowerToolTip(PoseStack stack, int mouseX, int mouseY, int startX, int startY, int sizeX, int sizeY, String title, String... description) {
int k = (this.width - this.imageWidth) / 2;
int l = (this.height - this.imageHeight) / 2;
if (mouseX > startX && mouseX < startX + sizeX) {
if (mouseY > startY && mouseY < startY + sizeY) {
List<Component> list = new ArrayList<>();
list.add(Component.translatable(title));
for (String desc : description) {
list.add(Component.translatable(desc));
}
renderComponentTooltip(stack, list, mouseX - k, mouseY - l);
}
}
}
}

View File

@@ -1,15 +1,16 @@
package me.hypherionmc.hyperlighting.client.init;
import me.hypherionmc.craterlib.api.rendering.CustomRenderType;
import me.hypherionmc.craterlib.client.events.ColorRegistrationEvent;
import me.hypherionmc.craterlib.client.registry.ClientRegistry;
import me.hypherionmc.craterlib.events.CraterEventBus;
import me.hypherionmc.craterlib.platform.Services;
import me.hypherionmc.craterlib.platform.ClientPlatform;
import me.hypherionmc.hyperlighting.client.gui.BatteryNeonScreen;
import me.hypherionmc.hyperlighting.common.init.HLBlocks;
import me.hypherionmc.hyperlighting.common.init.HLContainers;
import me.hypherionmc.hyperlighting.common.init.HLItems;
import me.hypherionmc.hyperlighting.common.init.HLPackets;
import me.hypherionmc.hyperlighting.integration.HyperLightingIntegrations;
import net.minecraft.client.renderer.ItemBlockRenderTypes;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import me.hypherionmc.hyperlighting.mixin.access.MenuScreensAccess;
/**
* @author HypherionSA
@@ -18,8 +19,11 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
public class ClientRegistration {
public void registerAll() {
Services.CLIENT_HELPER.registerCustomRenderTypes(HLBlocks.BLOCKS.getEntries(), HLItems.ITEMS.getEntries());
ClientPlatform.CLIENT_HELPER.registerCustomRenderTypes(HLBlocks.BLOCKS.getEntries(), HLItems.ITEMS.getEntries());
HyperLightingIntegrations.registerClient();
MenuScreensAccess.crater_register(HLContainers.BATTERY_NEON.get(), BatteryNeonScreen::new);
HLPackets.registerClient();
}
public void registerEvents() {

View File

@@ -0,0 +1,140 @@
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.SimpleInventory;
import me.hypherionmc.craterlib.systems.energy.CustomEnergyStorage;
import me.hypherionmc.hyperlighting.common.blocks.BatteryNeon;
import me.hypherionmc.hyperlighting.common.init.HLBlockEntities;
import me.hypherionmc.hyperlighting.common.items.WirelessBattery;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.Containers;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.item.DyeItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import java.util.Optional;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class BatteryNeonBlockEntity extends CraterBlockEntity implements ITickable {
private final CustomEnergyStorage energyStorage = new CustomEnergyStorage(500, 20, 0);
private final SimpleInventory inventory = new SimpleInventory(2, 1);
private boolean isCharging = false;
public BatteryNeonBlockEntity(BlockPos pos, BlockState state) {
super(HLBlockEntities.BATTERY_NEON.get(), pos, state);
}
@Override
protected void saveAdditional(CompoundTag tag) {
super.saveAdditional(tag);
tag.putBoolean("isCharging", isCharging);
energyStorage.writeNBT(tag);
inventory.writeNBT(tag);
}
@Override
public void load(CompoundTag tag) {
super.load(tag);
this.isCharging = tag.getBoolean("isCharging");
this.energyStorage.readNBT(tag);
inventory.clearContent();
inventory.readNBT(tag);
}
public boolean isCharging() {
return isCharging;
}
public CustomEnergyStorage getEnergyStorage() {
return energyStorage;
}
public SimpleInventory getInventory() {
return inventory;
}
@Override
public void sendUpdates() {
BlockState state = level.getBlockState(this.getBlockPos());
if (inventory.getItemHandler().getItem(1).getItem() instanceof DyeItem dyeItem) {
if (state.getValue(BatteryNeon.COLOR) != dyeItem.getDyeColor()) {
state = state.setValue(BatteryNeon.COLOR, dyeItem.getDyeColor());
level.setBlock(this.getBlockPos(), state, 2);
}
} else {
state = state.setValue(BatteryNeon.COLOR, DyeColor.WHITE);
level.setBlock(this.getBlockPos(), state, 2);
}
this.level.blockEntityChanged(this.getBlockPos());
this.level.sendBlockUpdated(this.getBlockPos(), this.level.getBlockState(this.getBlockPos()), state, 3);
this.setChanged();
}
@Override
public void tick(Level level, BlockPos blockPos, BlockState blockState, BlockEntity blockEntity) {
if (level.getGameTime() % 20L == 0L) {
ItemStack stack = inventory.getItemHandler().getItem(0);
if (!stack.isEmpty() && stack.getItem() instanceof WirelessBattery battery) {
if (battery.isLinked(stack, level)) {
BlockPos pos = battery.getLinkedPos(stack);
if (level.getBlockEntity(pos) instanceof SolarPanelBlockEntity solarPanel) {
CustomEnergyStorage storage = solarPanel.getEnergyStorage();
if (storage.extractEnergy(20, true) > 0 && this.energyStorage.receiveEnergy(20, true) > 0) {
this.isCharging = true;
storage.extractEnergy(this.energyStorage.receiveEnergy(20, false), false);
} else {
this.isCharging = false;
}
}
} else {
isCharging = false;
}
}
}
if (level.getGameTime() % 40L == 0L) {
if (level.getBlockState(blockPos).getValue(BatteryNeon.LIT)) {
this.energyStorage.extractEnergy(1, false);
}
}
this.sendUpdates();
}
@Override
public void setRemoved() {
dropInventory();
super.setRemoved();
}
public void dropInventory() {
if (!inventory.getItemHandler().getItem(0).isEmpty()) {
Containers.dropItemStack(level, worldPosition.getX(), worldPosition.getY(), worldPosition.getZ(), inventory.getItemHandler().getItem(0));
}
if (!inventory.getItemHandler().getItem(1).isEmpty()) {
Containers.dropItemStack(level, worldPosition.getX(), worldPosition.getY(), worldPosition.getZ(), inventory.getItemHandler().getItem(1));
}
}
@Override
public <T> Optional<T> getForgeCapability(ForgeCapability capability, Direction side) {
if (capability == ForgeCapability.ENERGY && side == null) {
return (Optional<T>) Optional.of(energyStorage);
}
return Optional.empty();
}
}

View File

@@ -0,0 +1,73 @@
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 <T> Optional<T> getForgeCapability(ForgeCapability forgeCapability, Direction direction) {
if (forgeCapability == ForgeCapability.ENERGY && (direction == Direction.DOWN || direction == null)) {
return (Optional<T>) Optional.of(energyStorage);
}
return Optional.empty();
}
public CustomEnergyStorage getEnergyStorage() {
return energyStorage;
}
}

View File

@@ -0,0 +1,174 @@
package me.hypherionmc.hyperlighting.common.blocks;
import me.hypherionmc.craterlib.api.rendering.DyableBlock;
import me.hypherionmc.craterlib.common.item.BlockItemDyable;
import me.hypherionmc.craterlib.util.BlockStateUtils;
import me.hypherionmc.hyperlighting.Constants;
import me.hypherionmc.hyperlighting.common.blockentities.BatteryNeonBlockEntity;
import me.hypherionmc.hyperlighting.common.init.CommonRegistration;
import me.hypherionmc.hyperlighting.common.init.HLItems;
import me.hypherionmc.hyperlighting.network.OpenGuiPacket;
import net.minecraft.ChatFormatting;
import net.minecraft.client.color.block.BlockColor;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.*;
import net.minecraft.world.item.context.BlockPlaceContext;
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.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import net.minecraft.world.level.material.Material;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import javax.annotation.Nullable;
import java.util.List;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class BatteryNeon extends BaseEntityBlock implements DyableBlock {
public static final BooleanProperty LIT = BlockStateProperties.LIT;
public static final DirectionProperty FACING = BlockStateProperties.FACING;
public static final EnumProperty<DyeColor> COLOR = EnumProperty.create("color", DyeColor.class);
private static final VoxelShape DOWN_BOUNDING_BOX = Block.box(0, 0.005, 7, 16, 3.005, 9);
private static final VoxelShape UP_BOUNDING_BOX = Block.box(0, 12.995, 7, 16, 15.995, 9);
private static final VoxelShape SOUTH_BOUNDING_BOX = Block.box(0, 7, 12.995, 16, 9, 15.995);
private static final VoxelShape EAST_BOUNDING_BOX = Block.box(12.995, 7, 0, 15.995, 9, 16);
private static final VoxelShape WEST_BOUNDING_BOX = Block.box(0.005, 7, 0, 3.005, 9, 16);
private static final VoxelShape NORTH_BOUNDING_BOX = Block.box(0, 7, 0.005, 16, 9, 3.005);
public BatteryNeon(String name) {
super(Properties.of(Material.GLASS).sound(SoundType.GLASS).lightLevel(BlockStateUtils.createLightLevelFromLitBlockState(14)));
this.registerDefaultState(this.defaultBlockState().setValue(FACING, Direction.NORTH).setValue(COLOR, DyeColor.WHITE));
HLItems.ITEMS.register(name, () -> new BlockItemDyable(this, new Item.Properties().tab(CommonRegistration.LIGHTS_TAB)));
}
@Override
public VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) {
return switch (state.getValue(FACING)) {
case UP -> DOWN_BOUNDING_BOX;
case DOWN -> UP_BOUNDING_BOX;
case NORTH -> SOUTH_BOUNDING_BOX;
case EAST -> WEST_BOUNDING_BOX;
case WEST -> EAST_BOUNDING_BOX;
case SOUTH -> NORTH_BOUNDING_BOX;
};
}
@Override
public InteractionResult use(BlockState state, Level worldIn, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) {
if (worldIn.isClientSide) {
if (Screen.hasControlDown()) {
OpenGuiPacket openGUIPacket = new OpenGuiPacket(11, pos);
CommonRegistration.networkHandler.sendToServer(openGUIPacket);
return InteractionResult.SUCCESS;
}
} else {
if (state.getValue(LIT)) {
sendBlockUpdate(state, pos, worldIn, false);
return InteractionResult.SUCCESS;
} else {
if (worldIn.getBlockEntity(pos) != null && worldIn.getBlockEntity(pos) instanceof BatteryNeonBlockEntity be && be.getEnergyStorage().getPowerLevel() > 0) {
sendBlockUpdate(state, pos, worldIn, true);
return InteractionResult.SUCCESS;
} else {
sendBlockUpdate(state, pos, worldIn, false);
player.displayClientMessage(Component.literal("Out of power"), true);
return InteractionResult.SUCCESS;
}
}
}
return InteractionResult.SUCCESS;
}
@Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(LIT, FACING, COLOR);
super.createBlockStateDefinition(builder);
}
@Nullable
@Override
public BlockState getStateForPlacement(BlockPlaceContext context) {
return this.defaultBlockState().setValue(FACING, context.getClickedFace()).setValue(LIT, false).setValue(COLOR, DyeColor.WHITE);
}
@Override
public RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL;
}
@Override
public BlockColor dyeHandler() {
return (state, world, pos, tintIndex) -> {
if (state.getValue(LIT)) {
return state.getValue(COLOR).getMaterialColor().col;
} else {
return DyeColor.BLACK.getMaterialColor().col;
}
};
}
@Override
public DyeColor defaultDyeColor() {
return DyeColor.WHITE;
}
@Override
public void appendHoverText(ItemStack stack, @Nullable BlockGetter worldIn, List<Component> tooltip, TooltipFlag flagIn) {
tooltip.add(Component.literal(ChatFormatting.YELLOW + "Dyable"));
tooltip.add(Component.literal(ChatFormatting.GREEN + "Color: " + defaultDyeColor().name()));
tooltip.add(Component.literal(ChatFormatting.BLUE + "Colored Lighting Supported"));
super.appendHoverText(stack, worldIn, tooltip, flagIn);
}
@Nullable
@Override
public BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return new BatteryNeonBlockEntity(pos, state);
}
@Nullable
@Override
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState p_153213_, BlockEntityType<T> p_153214_) {
return (level1, blockPos, blockState, t) -> {
if (!level.isClientSide()) {
if (t instanceof BatteryNeonBlockEntity tile) {
tile.tick(level1, blockPos, blockState, tile);
}
}
};
}
private void sendBlockUpdate(BlockState state, BlockPos pos, Level worldIn, boolean litState) {
BlockState oldState = state;
state = state.setValue(LIT, litState);
worldIn.setBlock(pos, state, 2);
worldIn.sendBlockUpdated(pos, oldState, state, 4);
}
}

View File

@@ -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 <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState state, BlockEntityType<T> 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;
}
}

View File

@@ -0,0 +1,109 @@
package me.hypherionmc.hyperlighting.common.containers;
import me.hypherionmc.craterlib.systems.SimpleInventory;
import me.hypherionmc.hyperlighting.common.blockentities.BatteryNeonBlockEntity;
import me.hypherionmc.hyperlighting.common.init.HLContainers;
import me.hypherionmc.hyperlighting.common.items.WirelessBattery;
import net.minecraft.core.BlockPos;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.world.Container;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.SimpleContainerData;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.DyeItem;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class BatteryNeonContainer extends AbstractContainerMenu {
private final BatteryNeonBlockEntity blockEntity;
public BatteryNeonContainer(int windowID, Inventory inventory, FriendlyByteBuf buf) {
this(windowID, inventory.player.level, buf.readBlockPos(), inventory);
}
public BatteryNeonContainer(int windowID, Level level, BlockPos pos, Inventory inventory) {
super(HLContainers.BATTERY_NEON.get(), windowID);
this.blockEntity = (BatteryNeonBlockEntity) level.getBlockEntity(pos);
Container inventory1 = blockEntity.getInventory().getItemHandler();
this.addSlot(new Slot(inventory1, 0, 27, 20));
this.addSlot(new Slot(inventory1, 1, 7, 20));
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 9; x++) {
this.addSlot(new Slot(inventory, x + y * 9 + 9, 8 + x * 18, 84 + y * 18));
}
}
for (int x = 0; x < 9; x++) {
this.addSlot(new Slot(inventory, x, 8 + x * 18, 142));
}
}
@Override
public boolean stillValid(Player playerIn) {
return true;
}
@Override
public void broadcastChanges() {
super.broadcastChanges();
}
@Override
public ItemStack quickMoveStack(Player playerIn, int index) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = this.slots.get(index);
if (slot != null && slot.hasItem()) {
ItemStack itemstack1 = slot.getItem();
itemstack = itemstack1.copy();
if (index == 0) {
if (!this.moveItemStackTo(itemstack1, 1, 38, true)) {
return ItemStack.EMPTY;
}
slot.onQuickCraft(itemstack1, itemstack);
} if (index == 1) {
if (!this.moveItemStackTo(itemstack1, 2, 38, true)) {
return ItemStack.EMPTY;
}
slot.onQuickCraft(itemstack1, itemstack);
} else {
if (itemstack1.getItem() instanceof DyeItem) {
if (!this.moveItemStackTo(itemstack1, 0, 1, false)) {
return ItemStack.EMPTY;
}
} else if (itemstack1.getItem() instanceof WirelessBattery) {
if (!this.moveItemStackTo(itemstack1, 1, 2, false)) {
return ItemStack.EMPTY;
}
}
}
if (itemstack1.isEmpty()) {
slot.set(ItemStack.EMPTY);
} else {
slot.setChanged();
}
if (itemstack1.getCount() == itemstack.getCount()) {
return ItemStack.EMPTY;
}
slot.onTake(playerIn, itemstack1);
}
return itemstack;
}
public BatteryNeonBlockEntity getBlockEntity() {
return blockEntity;
}
}

View File

@@ -1,6 +1,8 @@
package me.hypherionmc.hyperlighting.common.init;
import me.hypherionmc.craterlib.client.gui.tabs.CreativeTabBuilder;
import me.hypherionmc.craterlib.network.CraterNetworkHandler;
import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.hyperlighting.client.config.HyperLightingClientConfig;
import me.hypherionmc.hyperlighting.integration.HyperLightingIntegrations;
import net.minecraft.world.item.CreativeModeTab;
@@ -12,6 +14,9 @@ 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 CraterNetworkHandler networkHandler = Platform.COMMON_HELPER.createPacketHandler(MOD_ID);
public static void registerAll() {
HLSounds.loadAll();
@@ -20,7 +25,9 @@ public class CommonRegistration {
HLItems.loadAll();
HLBlockEntities.loadAll();
HLEntities.loadAll();
HLContainers.loadAll();
HyperLightingIntegrations.registerCommon();
HLPackets.registerServer();
}
}

View File

@@ -4,6 +4,8 @@ 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.BatteryNeonBlockEntity;
import me.hypherionmc.hyperlighting.common.blockentities.SolarPanelBlockEntity;
import net.minecraft.core.Registry;
import net.minecraft.world.level.block.entity.BlockEntityType;
@@ -17,5 +19,9 @@ public class HLBlockEntities {
public static RegistryObject<BlockEntityType<AdvancedCampfireBlockEntity>> CAMPFIRE = BE.register("campfire", () -> BlockEntityType.Builder.of(AdvancedCampfireBlockEntity::new, HLBlocks.ADVANCED_CAMPFIRE.get()).build(null));
public static RegistryObject<BlockEntityType<SolarPanelBlockEntity>> SOLAR_PANEL = BE.register("solar_panel", () -> BlockEntityType.Builder.of(SolarPanelBlockEntity::new, HLBlocks.SOLAR_PANEL.get()).build(null));
public static RegistryObject<BlockEntityType<BatteryNeonBlockEntity>> BATTERY_NEON = BE.register("battery_neon", () -> BlockEntityType.Builder.of(BatteryNeonBlockEntity::new, HLBlocks.BATTERY_NEON.get()).build(null));
public static void loadAll() {}
}

View File

@@ -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,13 @@ public class HLBlocks {
/* Candles */
public static BlockRegistryObject<Block> ADVANCED_CANDLE = register("advanced_candle", () -> new AdvancedCandleBlock("advanced_candle", DyeColor.ORANGE, CommonRegistration.LIGHTS_TAB));
/* Machines */
public static BlockRegistryObject<Block> SOLAR_PANEL = register("solar_panel", () -> new SolarPanel("solar_panel"));
/* Other */
public static BlockRegistryObject<Block> BATTERY_NEON = register("battery_neon", () -> new BatteryNeon("battery_neon"));
public static void loadAll() {}
public static <B extends Block> BlockRegistryObject<B> register(String name, Supplier<? extends B> block) {

View File

@@ -0,0 +1,27 @@
package me.hypherionmc.hyperlighting.common.init;
import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.craterlib.systems.reg.RegistrationProvider;
import me.hypherionmc.craterlib.systems.reg.RegistryObject;
import me.hypherionmc.hyperlighting.Constants;
import me.hypherionmc.hyperlighting.common.containers.BatteryNeonContainer;
import net.minecraft.core.Registry;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class HLContainers {
public static RegistrationProvider<MenuType<?>> CONTAINERS = RegistrationProvider.get(Registry.MENU, Constants.MOD_ID);
public static final RegistryObject<MenuType<BatteryNeonContainer>> BATTERY_NEON = register("battery_neon", Platform.COMMON_HELPER.createMenuType(BatteryNeonContainer::new));
public static <T extends AbstractContainerMenu> RegistryObject<MenuType<T>> register(String key, MenuType<T> builder) {
return CONTAINERS.register(key, () -> builder);
}
public static void loadAll() {}
}

View File

@@ -3,7 +3,9 @@ package me.hypherionmc.hyperlighting.common.init;
import me.hypherionmc.craterlib.systems.reg.RegistrationProvider;
import me.hypherionmc.craterlib.systems.reg.RegistryObject;
import me.hypherionmc.hyperlighting.Constants;
import me.hypherionmc.hyperlighting.common.items.CandleInAJar;
import me.hypherionmc.hyperlighting.common.items.LighterTool;
import me.hypherionmc.hyperlighting.common.items.WirelessBattery;
import net.minecraft.core.Registry;
import net.minecraft.world.item.Item;
@@ -15,6 +17,12 @@ public class HLItems {
/* Tools */
public static RegistryObject<Item> TORCH_TOOL = register("lighter_tool", LighterTool::new);
/* Machines */
public static RegistryObject<Item> WIRELESS_BATTERY = register("wireless_battery", WirelessBattery::new);
/* Lights */
public static RegistryObject<Item> CANDLE_IN_A_JAR = register("candle_jar", CandleInAJar::new);
public static void loadAll() {}
public static <T extends Item> RegistryObject<T> register(String name, Supplier<? extends T> item) {

View File

@@ -0,0 +1,20 @@
package me.hypherionmc.hyperlighting.common.init;
import me.hypherionmc.craterlib.network.PacketDirection;
import me.hypherionmc.hyperlighting.network.OpenGuiPacket;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class HLPackets {
public static void registerServer() {
CommonRegistration.networkHandler.registerPacket(OpenGuiPacket.class, OpenGuiPacket::new, PacketDirection.TO_SERVER);
}
public static void registerClient() {
}
}

View File

@@ -0,0 +1,19 @@
package me.hypherionmc.hyperlighting.common.items;
import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.hyperlighting.common.init.CommonRegistration;
import net.minecraft.world.item.Item;
/**
* @author HypherionSA
* @date 25/09/2022
*/
public class CandleInAJar extends Item {
private static final Properties shimmerLoaded = new Properties().tab(CommonRegistration.LIGHTS_TAB);
public CandleInAJar() {
super(Platform.LOADER.isModLoaded("shimmer") ? shimmerLoaded : new Properties());
}
}

View File

@@ -0,0 +1,78 @@
package me.hypherionmc.hyperlighting.common.items;
import me.hypherionmc.hyperlighting.api.SwitchModule;
import me.hypherionmc.hyperlighting.common.blocks.SolarPanel;
import me.hypherionmc.hyperlighting.common.init.CommonRegistration;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class WirelessBattery extends Item implements SwitchModule {
public WirelessBattery() {
super(new Properties().tab(CommonRegistration.MACHINES_TAB).stacksTo(1));
}
@Override
public void onCraftedBy(ItemStack stack, Level level, Player player) {
super.onCraftedBy(stack, level, player);
if (!stack.hasTag()) {
stack.setTag(new CompoundTag());
}
}
@Override
public InteractionResult useOn(UseOnContext context) {
Level level = context.getLevel();
Player player = context.getPlayer();
BlockPos pos = context.getClickedPos();
InteractionHand hand = context.getHand();
if (!level.isClientSide()) {
if (player.getItemInHand(hand).getItem() instanceof WirelessBattery) {
ItemStack stack = player.getItemInHand(hand);
CompoundTag tag = stack.getOrCreateTag();
tag.put("linked_pos", NbtUtils.writeBlockPos(pos));
stack.setTag(tag);
player.displayClientMessage(Component.literal("Linked to " + pos), false);
} else {
ItemStack stack = player.getItemInHand(hand);
if (isLinked(stack, level)) {
player.displayClientMessage(Component.literal("Linked to block " + getLinkedPos(stack)), false);
} else {
player.displayClientMessage(Component.literal("Not linked"), false);
}
return InteractionResult.PASS;
}
}
return InteractionResult.SUCCESS;
}
public boolean isLinked(ItemStack stack, Level level) {
CompoundTag compound = stack.getOrCreateTag();
if (compound.getCompound("linked_pos") != null && stack.getItem() instanceof WirelessBattery) {
BlockPos pos = getLinkedPos(stack);
return level.getBlockState(pos).getBlock() instanceof SolarPanel;
} else {
return false;
}
}
public BlockPos getLinkedPos(ItemStack stack) {
CompoundTag compound = stack.getOrCreateTag();
return NbtUtils.readBlockPos(compound.getCompound("linked_pos"));
}
}

View File

@@ -1,6 +1,6 @@
package me.hypherionmc.hyperlighting.integration;
import me.hypherionmc.craterlib.platform.Services;
import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.hyperlighting.integration.shimmer.HyperLightingShimmer;
/**
@@ -14,7 +14,7 @@ public class HyperLightingIntegrations {
}
public static void registerClient() {
if (Services.PLATFORM.isModLoaded("shimmer")) {
if (Platform.LOADER.isModLoaded("shimmer")) {
HyperLightingShimmer.registerAll();
}
}

View File

@@ -5,10 +5,12 @@ import com.lowdragmc.shimmer.client.light.LightManager;
import me.hypherionmc.craterlib.common.item.BlockItemDyable;
import me.hypherionmc.craterlib.util.RenderUtils;
import me.hypherionmc.hyperlighting.common.blocks.AdvancedCampfire;
import me.hypherionmc.hyperlighting.common.blocks.AdvancedCandleBlock;
import me.hypherionmc.hyperlighting.common.blocks.AdvancedLanternBlock;
import me.hypherionmc.hyperlighting.common.blocks.AdvancedTorchBlock;
import me.hypherionmc.hyperlighting.common.init.CommonRegistration;
import me.hypherionmc.hyperlighting.common.init.HLBlocks;
import me.hypherionmc.hyperlighting.common.init.HLItems;
import net.minecraft.world.item.DyeColor;
/**
@@ -25,6 +27,8 @@ public class HyperLightingShimmer {
private static void registerItems() {
LightManager.INSTANCE.registerItemLight(HLBlocks.ADVANCED_TORCH.asItem(), stack -> new ColorPointLight.Template(stack.getCount() / 10 + 6, RenderUtils.alphaColorFromDye(((BlockItemDyable)stack.getItem()).getColor(stack), 1f)));
LightManager.INSTANCE.registerItemLight(HLBlocks.ADVANCED_LANTERN.asItem(), stack -> new ColorPointLight.Template(stack.getCount() / 10 + 6, RenderUtils.alphaColorFromDye(((BlockItemDyable)stack.getItem()).getColor(stack), 1f)));
LightManager.INSTANCE.registerItemLight(HLItems.CANDLE_IN_A_JAR.get(), stack -> new ColorPointLight.Template(10, RenderUtils.alphaColorFromDye(DyeColor.WHITE, 1f)));
}
private static void registerBlocks() {
@@ -51,6 +55,14 @@ public class HyperLightingShimmer {
}
return null;
});
LightManager.INSTANCE.registerBlockLight(HLBlocks.ADVANCED_CANDLE.get(), (state, blockPos) -> {
if (state.getValue(AdvancedCandleBlock.LIT) && CommonRegistration.config.candleConfig.coloredLighting) {
DyeColor color = state.getValue(AdvancedCandleBlock.COLOR);
return new ColorPointLight.Template(10, RenderUtils.alphaColorFromDye(color, 1f));
}
return null;
});
}
}

View File

@@ -0,0 +1,23 @@
package me.hypherionmc.hyperlighting.mixin.access;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.MenuAccess;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
/**
* @author HypherionSA
* @date 24/09/2022
*/
@Mixin(MenuScreens.class)
public interface MenuScreensAccess {
@Invoker("register")
static <M extends AbstractContainerMenu, U extends Screen & MenuAccess<M>> void crater_register(MenuType<? extends M> p_216911_0_, MenuScreens.ScreenConstructor<M, U> p_216911_1_) {
throw new Error("Mixin did not apply!");
}
}

View File

@@ -0,0 +1,20 @@
package me.hypherionmc.hyperlighting.mixin.access;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.MenuType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
/**
* @author HypherionSA
* @date 24/09/2022
*/
@Mixin(MenuType.class)
public interface MenuTypeAccess {
@Invoker("<init>")
static <T extends AbstractContainerMenu> MenuType<T> crater_create(MenuType.MenuSupplier<T> menuSupplier) {
throw new Error("Mixin did not apply!");
}
}

View File

@@ -0,0 +1,78 @@
package me.hypherionmc.hyperlighting.network;
import me.hypherionmc.craterlib.network.CraterPacket;
import me.hypherionmc.craterlib.platform.Platform;
import me.hypherionmc.hyperlighting.common.blockentities.BatteryNeonBlockEntity;
import me.hypherionmc.hyperlighting.common.containers.BatteryNeonContainer;
import net.minecraft.core.BlockPos;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.level.block.entity.BlockEntity;
import org.jetbrains.annotations.Nullable;
/**
* @author HypherionSA
* @date 24/09/2022
*/
public class OpenGuiPacket implements CraterPacket<OpenGuiPacket> {
private BlockPos posToSet;
private int guiid;
public OpenGuiPacket() {}
public OpenGuiPacket(int id, BlockPos pos) {
this.posToSet = pos;
this.guiid = id;
}
@Override
public void write(FriendlyByteBuf friendlyByteBuf) {
friendlyByteBuf.writeBlockPos(posToSet);
friendlyByteBuf.writeInt(guiid);
}
@Override
public void read(FriendlyByteBuf friendlyByteBuf) {
this.posToSet = friendlyByteBuf.readBlockPos();
this.guiid = friendlyByteBuf.readInt();
}
@Override
public PacketHandler createHandler() {
return new PacketHandler() {
@Override
public void handle(CraterPacket packet, Player player, Object o) {
BlockEntity be = player.level.getBlockEntity(posToSet);
MenuProvider containerProvider = new MenuProvider() {
@Override
public Component getDisplayName() {
if (be instanceof BatteryNeonBlockEntity) {
return Component.translatable("block.hyperlighting.battery_neon");
}
return null;
}
@Nullable
@Override
public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) {
if (be instanceof BatteryNeonBlockEntity) {
return new BatteryNeonContainer(i, player.level, posToSet, inventory);
}
return null;
}
};
if (containerProvider.getDisplayName() != null) {
Platform.COMMON_HELPER.openMenu((ServerPlayer) player, containerProvider, buf -> buf.writeBlockPos(posToSet));
}
}
};
}
}

View File

@@ -1,7 +1,5 @@
{
"variants": {
"facing=up,lit=true,color=white": {"model": "hyperlighting:block/candle/white_candle"},
"facing=up,lit=false,color=white": {"model": "hyperlighting:block/candle/white_candle"},
"facing=east,lit=true,color=white": {"model": "hyperlighting:block/candle/white_candle"},
"facing=east,lit=false,color=white": {"model": "hyperlighting:block/candle/white_candle"},
"facing=south,lit=true,color=white": {"model": "hyperlighting:block/candle/white_candle", "y": 90},
@@ -10,8 +8,6 @@
"facing=west,lit=false,color=white": {"model": "hyperlighting:block/candle/white_candle", "y": 180},
"facing=north,lit=true,color=white": {"model": "hyperlighting:block/candle/white_candle", "y": 270},
"facing=north,lit=false,color=white": {"model": "hyperlighting:block/candle/white_candle", "y": 270},
"facing=up,lit=true,color=orange": {"model": "hyperlighting:block/candle/orange_candle"},
"facing=up,lit=false,color=orange": {"model": "hyperlighting:block/candle/orange_candle"},
"facing=east,lit=true,color=orange": {"model": "hyperlighting:block/candle/orange_candle"},
"facing=east,lit=false,color=orange": {"model": "hyperlighting:block/candle/orange_candle"},
"facing=south,lit=true,color=orange": {"model": "hyperlighting:block/candle/orange_candle", "y": 90},
@@ -20,8 +16,6 @@
"facing=west,lit=false,color=orange": {"model": "hyperlighting:block/candle/orange_candle", "y": 180},
"facing=north,lit=true,color=orange": {"model": "hyperlighting:block/candle/orange_candle", "y": 270},
"facing=north,lit=false,color=orange": {"model": "hyperlighting:block/candle/orange_candle", "y": 270},
"facing=up,lit=true,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle"},
"facing=up,lit=false,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle"},
"facing=east,lit=true,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle"},
"facing=east,lit=false,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle"},
"facing=south,lit=true,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle", "y": 90},
@@ -30,8 +24,6 @@
"facing=west,lit=false,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle", "y": 180},
"facing=north,lit=true,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle", "y": 270},
"facing=north,lit=false,color=magenta": {"model": "hyperlighting:block/candle/magenta_candle", "y": 270},
"facing=up,lit=true,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle"},
"facing=up,lit=false,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle"},
"facing=east,lit=true,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle"},
"facing=east,lit=false,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle"},
"facing=south,lit=true,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle", "y": 90},
@@ -40,8 +32,6 @@
"facing=west,lit=false,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle", "y": 180},
"facing=north,lit=true,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle", "y": 270},
"facing=north,lit=false,color=light_blue": {"model": "hyperlighting:block/candle/light_blue_candle", "y": 270},
"facing=up,lit=true,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle"},
"facing=up,lit=false,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle"},
"facing=east,lit=true,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle"},
"facing=east,lit=false,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle"},
"facing=south,lit=true,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle", "y": 90},
@@ -50,8 +40,6 @@
"facing=west,lit=false,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle", "y": 180},
"facing=north,lit=true,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle", "y": 270},
"facing=north,lit=false,color=yellow": {"model": "hyperlighting:block/candle/yellow_candle", "y": 270},
"facing=up,lit=true,color=lime": {"model": "hyperlighting:block/candle/lime_candle"},
"facing=up,lit=false,color=lime": {"model": "hyperlighting:block/candle/lime_candle"},
"facing=east,lit=true,color=lime": {"model": "hyperlighting:block/candle/lime_candle"},
"facing=east,lit=false,color=lime": {"model": "hyperlighting:block/candle/lime_candle"},
"facing=south,lit=true,color=lime": {"model": "hyperlighting:block/candle/lime_candle", "y": 90},
@@ -60,8 +48,6 @@
"facing=west,lit=false,color=lime": {"model": "hyperlighting:block/candle/lime_candle", "y": 180},
"facing=north,lit=true,color=lime": {"model": "hyperlighting:block/candle/lime_candle", "y": 270},
"facing=north,lit=false,color=lime": {"model": "hyperlighting:block/candle/lime_candle", "y": 270},
"facing=up,lit=true,color=pink": {"model": "hyperlighting:block/candle/pink_candle"},
"facing=up,lit=false,color=pink": {"model": "hyperlighting:block/candle/pink_candle"},
"facing=east,lit=true,color=pink": {"model": "hyperlighting:block/candle/pink_candle"},
"facing=east,lit=false,color=pink": {"model": "hyperlighting:block/candle/pink_candle"},
"facing=south,lit=true,color=pink": {"model": "hyperlighting:block/candle/pink_candle", "y": 90},
@@ -70,8 +56,6 @@
"facing=west,lit=false,color=pink": {"model": "hyperlighting:block/candle/pink_candle", "y": 180},
"facing=north,lit=true,color=pink": {"model": "hyperlighting:block/candle/pink_candle", "y": 270},
"facing=north,lit=false,color=pink": {"model": "hyperlighting:block/candle/pink_candle", "y": 270},
"facing=up,lit=true,color=gray": {"model": "hyperlighting:block/candle/gray_candle"},
"facing=up,lit=false,color=gray": {"model": "hyperlighting:block/candle/gray_candle"},
"facing=east,lit=true,color=gray": {"model": "hyperlighting:block/candle/gray_candle"},
"facing=east,lit=false,color=gray": {"model": "hyperlighting:block/candle/gray_candle"},
"facing=south,lit=true,color=gray": {"model": "hyperlighting:block/candle/gray_candle", "y": 90},
@@ -80,8 +64,6 @@
"facing=west,lit=false,color=gray": {"model": "hyperlighting:block/candle/gray_candle", "y": 180},
"facing=north,lit=true,color=gray": {"model": "hyperlighting:block/candle/gray_candle", "y": 270},
"facing=north,lit=false,color=gray": {"model": "hyperlighting:block/candle/gray_candle", "y": 270},
"facing=up,lit=true,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle"},
"facing=up,lit=false,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle"},
"facing=east,lit=true,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle"},
"facing=east,lit=false,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle"},
"facing=south,lit=true,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle", "y": 90},
@@ -90,8 +72,6 @@
"facing=west,lit=false,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle", "y": 180},
"facing=north,lit=true,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle", "y": 270},
"facing=north,lit=false,color=light_gray": {"model": "hyperlighting:block/candle/light_gray_candle", "y": 270},
"facing=up,lit=true,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle"},
"facing=up,lit=false,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle"},
"facing=east,lit=true,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle"},
"facing=east,lit=false,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle"},
"facing=south,lit=true,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle", "y": 90},
@@ -100,8 +80,6 @@
"facing=west,lit=false,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle", "y": 180},
"facing=north,lit=true,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle", "y": 270},
"facing=north,lit=false,color=cyan": {"model": "hyperlighting:block/candle/cyan_candle", "y": 270},
"facing=up,lit=true,color=purple": {"model": "hyperlighting:block/candle/purple_candle"},
"facing=up,lit=false,color=purple": {"model": "hyperlighting:block/candle/purple_candle"},
"facing=east,lit=true,color=purple": {"model": "hyperlighting:block/candle/purple_candle"},
"facing=east,lit=false,color=purple": {"model": "hyperlighting:block/candle/purple_candle"},
"facing=south,lit=true,color=purple": {"model": "hyperlighting:block/candle/purple_candle", "y": 90},
@@ -110,8 +88,6 @@
"facing=west,lit=false,color=purple": {"model": "hyperlighting:block/candle/purple_candle", "y": 180},
"facing=north,lit=true,color=purple": {"model": "hyperlighting:block/candle/purple_candle", "y": 270},
"facing=north,lit=false,color=purple": {"model": "hyperlighting:block/candle/purple_candle", "y": 270},
"facing=up,lit=true,color=blue": {"model": "hyperlighting:block/candle/blue_candle"},
"facing=up,lit=false,color=blue": {"model": "hyperlighting:block/candle/blue_candle"},
"facing=east,lit=true,color=blue": {"model": "hyperlighting:block/candle/blue_candle"},
"facing=east,lit=false,color=blue": {"model": "hyperlighting:block/candle/blue_candle"},
"facing=south,lit=true,color=blue": {"model": "hyperlighting:block/candle/blue_candle", "y": 90},
@@ -120,8 +96,6 @@
"facing=west,lit=false,color=blue": {"model": "hyperlighting:block/candle/blue_candle", "y": 180},
"facing=north,lit=true,color=blue": {"model": "hyperlighting:block/candle/blue_candle", "y": 270},
"facing=north,lit=false,color=blue": {"model": "hyperlighting:block/candle/blue_candle", "y": 270},
"facing=up,lit=true,color=brown": {"model": "hyperlighting:block/candle/brown_candle"},
"facing=up,lit=false,color=brown": {"model": "hyperlighting:block/candle/brown_candle"},
"facing=east,lit=true,color=brown": {"model": "hyperlighting:block/candle/brown_candle"},
"facing=east,lit=false,color=brown": {"model": "hyperlighting:block/candle/brown_candle"},
"facing=south,lit=true,color=brown": {"model": "hyperlighting:block/candle/brown_candle", "y": 90},
@@ -130,8 +104,6 @@
"facing=west,lit=false,color=brown": {"model": "hyperlighting:block/candle/brown_candle", "y": 180},
"facing=north,lit=true,color=brown": {"model": "hyperlighting:block/candle/brown_candle", "y": 270},
"facing=north,lit=false,color=brown": {"model": "hyperlighting:block/candle/brown_candle", "y": 270},
"facing=up,lit=true,color=green": {"model": "hyperlighting:block/candle/green_candle"},
"facing=up,lit=false,color=green": {"model": "hyperlighting:block/candle/green_candle"},
"facing=east,lit=true,color=green": {"model": "hyperlighting:block/candle/green_candle"},
"facing=east,lit=false,color=green": {"model": "hyperlighting:block/candle/green_candle"},
"facing=south,lit=true,color=green": {"model": "hyperlighting:block/candle/green_candle", "y": 90},
@@ -140,8 +112,6 @@
"facing=west,lit=false,color=green": {"model": "hyperlighting:block/candle/green_candle", "y": 180},
"facing=north,lit=true,color=green": {"model": "hyperlighting:block/candle/green_candle", "y": 270},
"facing=north,lit=false,color=green": {"model": "hyperlighting:block/candle/green_candle", "y": 270},
"facing=up,lit=true,color=red": {"model": "hyperlighting:block/candle/red_candle"},
"facing=up,lit=false,color=red": {"model": "hyperlighting:block/candle/red_candle"},
"facing=east,lit=true,color=red": {"model": "hyperlighting:block/candle/red_candle"},
"facing=east,lit=false,color=red": {"model": "hyperlighting:block/candle/red_candle"},
"facing=south,lit=true,color=red": {"model": "hyperlighting:block/candle/red_candle", "y": 90},
@@ -150,8 +120,6 @@
"facing=west,lit=false,color=red": {"model": "hyperlighting:block/candle/red_candle", "y": 180},
"facing=north,lit=true,color=red": {"model": "hyperlighting:block/candle/red_candle", "y": 270},
"facing=north,lit=false,color=red": {"model": "hyperlighting:block/candle/red_candle", "y": 270},
"facing=up,lit=true,color=black": {"model": "hyperlighting:block/candle/black_candle"},
"facing=up,lit=false,color=black": {"model": "hyperlighting:block/candle/black_candle"},
"facing=east,lit=true,color=black": {"model": "hyperlighting:block/candle/black_candle"},
"facing=east,lit=false,color=black": {"model": "hyperlighting:block/candle/black_candle"},
"facing=south,lit=true,color=black": {"model": "hyperlighting:block/candle/black_candle", "y": 90},
@@ -160,4 +128,4 @@
"facing=west,lit=false,color=black": {"model": "hyperlighting:block/candle/black_candle", "y": 180},
"facing=north,lit=true,color=black": {"model": "hyperlighting:block/candle/black_candle", "y": 270},
"facing=north,lit=false,color=black": {"model": "hyperlighting:block/candle/black_candle", "y": 270} }
}
}

View File

@@ -0,0 +1,16 @@
{
"variants": {
"facing=up,lit=true": { "model": "hyperlighting:block/solar_neon", "uvlock": true },
"facing=down,lit=true": { "model": "hyperlighting:block/solar_neon", "uvlock": true, "x": 180 },
"facing=east,lit=true": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true, "y": 270 },
"facing=west,lit=true": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true, "y": 90 },
"facing=south,lit=true": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true },
"facing=north,lit=true": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true, "x": 180 },
"facing=up,lit=false": { "model": "hyperlighting:block/solar_neon", "uvlock": true },
"facing=down,lit=false": { "model": "hyperlighting:block/solar_neon", "uvlock": true, "x": 180 },
"facing=east,lit=false": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true, "y": 270 },
"facing=west,lit=false": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true, "y": 90 },
"facing=south,lit=false": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true },
"facing=north,lit=false": { "model": "hyperlighting:block/solar_neon_wall", "uvlock": true, "x": 180 }
}
}

View File

@@ -0,0 +1,5 @@
{
"variants": {
"": { "model": "hyperlighting:block/solar_panel" }
}
}

View File

@@ -3,17 +3,31 @@
"block.hyperlighting.advanced_lantern": "Advanced Lantern (%s)",
"block.hyperlighting.advanced_candle": "Advanced Candle (%s)",
"block.hyperlighting.advanced_campfire": "Advanced Campfire (%s)",
"block.hyperlighting.solar_panel": "Solar Panel",
"block.hyperlighting.battery_neon": "Battery Fluorescent Light",
"item.hyperlighting.lighter_tool": "Torch Lighter Tool",
"item.hyperlighting.wireless_battery": "Wireless Battery",
"item.hyperlighting.candle_jar": "Candle In A Jar",
"subtitles.torch_ignite": "Flame Ignite Sound",
"entity.hyperlighting.neonfly": "Neon Fly",
"cl.hyperlightingconfig.title": "Hyper Lighting Config",
"cl.hyperlightingclientconfig.title": "Hyper Lighting Config",
"cl.torchconfig.litbydefault": "Lit when Placed",
"cl.torchconfig.requirestool": "Requires Torch Lighter",
"cl.torchconfig.coloredlighting": "Shimmer Integration",
"cl.lanternconfig.litbydefault": "Lit when Placed",
"cl.lanternconfig.requirestool": "Requires Torch Lighter",
"itemGroup.hyperlighting.lighting": "Hyper Lighting (Lights)"
"cl.lanternconfig.coloredlighting": "Shimmer Integration",
"cl.campfireconfig.litbydefault": "Lit when Placed",
"cl.campfireconfig.requirestool": "Requires Torch Lighter",
"cl.campfireconfig.coloredlighting": "Shimmer Integration",
"cl.candleconfig.litbydefault": "Lit when Placed",
"cl.candleconfig.requirestool": "Requires Torch Lighter",
"cl.candleconfig.coloredlighting": "Shimmer Integration",
"itemGroup.hyperlighting.lighting": "Hyper Lighting (Lights)",
"itemGroup.hyperlighting.machines": "Hyper Lighting (Machines)"
}

View File

@@ -0,0 +1,56 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "hyperlighting:block/metal_base_disco_ball",
"2": "hyperlighting:block/dmx_top_on",
"particle": "hyperlighting:block/metal_base_disco_ball"
},
"elements": [
{
"from": [14, 0.05, 7],
"to": [16, 3.05, 9],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 1.25, 8]},
"faces": {
"north": {"uv": [0, 0, 3, 4], "texture": "#0"},
"east": {"uv": [0, 0, 3, 4], "texture": "#0"},
"south": {"uv": [0, 0, 3, 4], "texture": "#0"},
"west": {"uv": [0, 0, 3, 4], "texture": "#0"},
"up": {"uv": [0, 0, 3, 3], "texture": "#0"},
"down": {"uv": [0, 0, 3, 3], "texture": "#0"}
}
},
{
"from": [0, 0.05, 7],
"to": [2, 3.05, 9],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 1.25, 8]},
"faces": {
"north": {"uv": [0, 0, 3, 4], "texture": "#0"},
"east": {"uv": [0, 0, 3, 4], "texture": "#0"},
"south": {"uv": [0, 0, 3, 4], "texture": "#0"},
"west": {"uv": [0, 0, 3, 4], "texture": "#0"},
"up": {"uv": [0, 0, 3, 3], "texture": "#0"},
"down": {"uv": [0, 0, 3, 3], "texture": "#0"}
}
},
{
"from": [2, 1.05, 7],
"to": [14, 3.05, 9],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 1.25, 8]},
"faces": {
"north": {"uv": [0, 0, 12, 2], "texture": "#2", "tintindex": 0},
"east": {"uv": [0, 0, 2, 2], "texture": "#2", "tintindex": 0},
"south": {"uv": [0, 0, 12, 2], "texture": "#2", "tintindex": 0},
"west": {"uv": [0, 0, 2, 2], "texture": "#2", "tintindex": 0},
"up": {"uv": [0, 0, 12, 2], "texture": "#2", "tintindex": 0},
"down": {"uv": [0, 0, 12, 2], "texture": "#2", "tintindex": 0}
}
}
],
"groups": [
{
"name": "group",
"origin": [10, 9, 15],
"children": [0, 1, 2]
}
]
}

View File

@@ -0,0 +1,56 @@
{
"credit": "Made with Blockbench",
"textures": {
"0": "hyperlighting:block/metal_base_disco_ball",
"2": "hyperlighting:block/dmx_top_on",
"particle": "hyperlighting:block/metal_base_disco_ball"
},
"elements": [
{
"from": [14, 7, 0.05],
"to": [16, 9, 3.05],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 1.25]},
"faces": {
"north": {"uv": [0, 0, 3, 3], "rotation": 180, "texture": "#0"},
"east": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#0"},
"south": {"uv": [0, 0, 3, 3], "texture": "#0"},
"west": {"uv": [0, 0, 3, 4], "rotation": 90, "texture": "#0"},
"up": {"uv": [0, 0, 3, 4], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 0, 3, 4], "texture": "#0"}
}
},
{
"from": [0, 7, 0.05],
"to": [2, 9, 3.05],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 1.25]},
"faces": {
"north": {"uv": [0, 0, 3, 3], "rotation": 180, "texture": "#0"},
"east": {"uv": [0, 0, 3, 4], "rotation": 270, "texture": "#0"},
"south": {"uv": [0, 0, 3, 3], "texture": "#0"},
"west": {"uv": [0, 0, 3, 4], "rotation": 90, "texture": "#0"},
"up": {"uv": [0, 0, 3, 4], "rotation": 180, "texture": "#0"},
"down": {"uv": [0, 0, 3, 4], "texture": "#0"}
}
},
{
"from": [2, 7, 1.05],
"to": [14, 9, 3.05],
"rotation": {"angle": 0, "axis": "x", "origin": [8, 8, 1.25]},
"faces": {
"north": {"uv": [0, 0, 12, 2], "rotation": 180, "texture": "#2", "tintindex": 0},
"east": {"uv": [0, 0, 2, 2], "rotation": 270, "texture": "#2", "tintindex": 0},
"south": {"uv": [0, 0, 12, 2], "texture": "#2", "tintindex": 0},
"west": {"uv": [0, 0, 2, 2], "rotation": 90, "texture": "#2", "tintindex": 0},
"up": {"uv": [0, 0, 12, 2], "rotation": 180, "texture": "#2", "tintindex": 0},
"down": {"uv": [0, 0, 12, 2], "texture": "#2", "tintindex": 0}
}
}
],
"groups": [
{
"name": "group",
"origin": [10, 9, 15],
"children": [0, 1, 2]
}
]
}

View File

@@ -0,0 +1,48 @@
{
"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"}
}
}
],
"display": {
"thirdperson_righthand": {
"translation": [0, 3.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"thirdperson_lefthand": {
"translation": [0, 3.75, 0],
"scale": [0.5, 0.5, 0.5]
},
"firstperson_righthand": {
"rotation": [56, 0, 0]
},
"firstperson_lefthand": {
"rotation": [56, 0, 0]
},
"ground": {
"translation": [0, 5.5, 0]
},
"gui": {
"rotation": [90, 0, 0]
},
"fixed": {
"rotation": [-90, 0, 0],
"translation": [0, 0, -7.5]
}
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "hyperlighting:block/solar_neon"
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "hyperlighting:item/handheld_lantern"
}
}

View File

@@ -0,0 +1,3 @@
{
"parent": "hyperlighting:block/solar_panel"
}

View File

@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "hyperlighting:item/battery"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -2,4 +2,6 @@ accessWidener v1 named
accessible class net/minecraft/client/particle/ParticleEngine$SpriteParticleRegistration
accessible method net/minecraft/world/entity/SpawnPlacements register (Lnet/minecraft/world/entity/EntityType;Lnet/minecraft/world/entity/SpawnPlacements$Type;Lnet/minecraft/world/level/levelgen/Heightmap$Types;Lnet/minecraft/world/entity/SpawnPlacements$SpawnPredicate;)V
Accessible class net/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier
accessible class net/minecraft/world/level/block/entity/BlockEntityType$BlockEntitySupplier
accessible class net/minecraft/world/inventory/MenuType$MenuSupplier
Accessible class net/minecraft/client/gui/screens/MenuScreens$ScreenConstructor

View File

@@ -4,8 +4,10 @@
"package": "me.hypherionmc.hyperlighting.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
"access.MenuTypeAccess"
],
"client": [
"access.MenuScreensAccess"
],
"server": [
],

View File

@@ -17,7 +17,7 @@ dependencies {
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
implementation project(":Common")
modApi("me.hypherionmc.craterlib:CraterLib-fabric-1.19.1:${craterlib_version}") {
modApi("me.hypherionmc.craterlib:CraterLib-fabric-${minecraft_version}:${craterlib_version}") {
exclude(group: "net.fabricmc.fabric-api")
}
@@ -26,11 +26,11 @@ dependencies {
}
// Sodium
modImplementation ("curse.maven:sodium-394468:${sodium_version}") {
/*modImplementation ("curse.maven:sodium-394468:${sodium_version}") {
exclude(group: "net.fabricmc.fabric-api")
}
// This is a dependency of Sodium....
implementation 'org.joml:joml:1.10.4'
implementation 'org.joml:joml:1.10.4'*/
// Shimmer
modImplementation ("com.lowdragmc.shimmer:Shimmer-fabric-1.19.1:${shimmer_version}") {

View File

@@ -13,7 +13,6 @@ import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
import net.minecraft.client.particle.ParticleEngine;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleType;

View File

@@ -43,7 +43,7 @@ public class TOPCampfireInfoProvider implements IBlockDisplayOverride {
.item(stack)
.horizontal()
.progress(
(int) ((float) tileCampFire.cookingTime[i] / tileCampFire.cookingProgress[i] * 100),
(int) ((float) tileCampFire.cookingProgress[i] / tileCampFire.cookingTime[i] * 100),
100,
iProbeInfo.defaultProgressStyle().suffix(" %").alignment(ElementAlignment.ALIGN_TOPLEFT));
}

View File

@@ -5,7 +5,13 @@ import mcp.mobius.waila.api.IWailaPlugin;
import mcp.mobius.waila.api.TooltipPosition;
import me.hypherionmc.hyperlighting.Constants;
import me.hypherionmc.hyperlighting.common.blockentities.AdvancedCampfireBlockEntity;
import me.hypherionmc.hyperlighting.common.blockentities.SolarPanelBlockEntity;
import me.hypherionmc.hyperlighting.common.blocks.AdvancedCampfire;
import me.hypherionmc.hyperlighting.common.blocks.SolarPanel;
import me.hypherionmc.hyperlighting.common.integration.wthit.dataproviders.CampfireDataProvider;
import me.hypherionmc.hyperlighting.common.integration.wthit.dataproviders.SolarPanelDataProvider;
import me.hypherionmc.hyperlighting.common.integration.wthit.providers.CampfireProvider;
import me.hypherionmc.hyperlighting.common.integration.wthit.providers.SolarPanelProvider;
/**
* @author HypherionSA
@@ -18,7 +24,12 @@ public class HLWTHITPlugin implements IWailaPlugin {
Constants.LOG.info("Registering WTHIT Plugins");
//registrar.addComponent(new FogMachineProvider(), TooltipPosition.BODY, FogMachineBlock.class);
// Campfire
registrar.addBlockData(new CampfireDataProvider(), AdvancedCampfireBlockEntity.class);
registrar.addComponent(new CampfireProvider(), TooltipPosition.BODY, AdvancedCampfire.class);
// Solar Panel
registrar.addBlockData(new SolarPanelDataProvider(), SolarPanelBlockEntity.class);
registrar.addComponent(new SolarPanelProvider(), TooltipPosition.BODY, SolarPanel.class);
}
}

View File

@@ -1,4 +1,4 @@
package me.hypherionmc.hyperlighting.common.integration.wthit;
package me.hypherionmc.hyperlighting.common.integration.wthit.dataproviders;
import mcp.mobius.waila.api.IPluginConfig;
import mcp.mobius.waila.api.IServerAccessor;

View File

@@ -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<SolarPanelBlockEntity> {
@Override
public void appendServerData(CompoundTag data, IServerAccessor<SolarPanelBlockEntity> accessor, IPluginConfig config) {
CompoundTag tag = new CompoundTag();
accessor.getTarget().saveAdditional(tag);
data.put("hl_solar", tag);
}
}

View File

@@ -1,4 +1,4 @@
package me.hypherionmc.hyperlighting.common.integration.wthit;
package me.hypherionmc.hyperlighting.common.integration.wthit.providers;
import mcp.mobius.waila.api.IBlockAccessor;
import mcp.mobius.waila.api.IBlockComponentProvider;

View File

@@ -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 + "%"));
}
}

View File

@@ -36,7 +36,7 @@
"depends": {
"fabricloader": ">=0.14",
"fabric": "*",
"minecraft": "1.19.1",
"minecraft": "1.19.2",
"java": ">=17",
"craterlib": "*"
},

View File

@@ -83,16 +83,19 @@ dependencies {
minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}"
compileOnly project(":Common")
annotationProcessor 'org.spongepowered:mixin:0.8.4-SNAPSHOT:processor'
implementation fg.deobf("me.hypherionmc.craterlib:CraterLib-forge-1.19.1:${craterlib_version}")
implementation fg.deobf("me.hypherionmc.craterlib:CraterLib-forge-${minecraft_version}:${craterlib_version}")
// Rubidium
implementation fg.deobf("curse.maven:rubidium-574856:${ribidium_version}")
//implementation fg.deobf("curse.maven:rubidium-574856:${ribidium_version}")
// Shimmer
implementation fg.deobf("com.lowdragmc.shimmer:Shimmer-forge-1.19.1:${shimmer_version}")
// The One Probe
implementation "mcjty.theoneprobe:theoneprobe:${top_version}:api"
//implementation "mcjty.theoneprobe:theoneprobe:${top_version}:api"
implementation fg.deobf("mcjty.theoneprobe:theoneprobe:${top_version}") {
transitive = false
}
}

View File

@@ -1,6 +1,5 @@
package me.hypherionmc.hyperlighting;
import me.hypherionmc.craterlib.client.gui.config.CraterConfigScreen;
import me.hypherionmc.hyperlighting.client.init.ClientRegistration;
import me.hypherionmc.hyperlighting.client.renderer.blockentity.AdvancedCampfireRenderer;
import me.hypherionmc.hyperlighting.client.renderer.entity.NeonFlyRenderer;
@@ -14,9 +13,7 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.entity.EntityRenderers;
import net.minecraft.world.entity.SpawnPlacements;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraftforge.client.ConfigScreenHandler;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;

View File

@@ -0,0 +1,2 @@
public net.minecraft.world.inventory.MenuType$MenuSupplier
public net.minecraft.client.gui.screens.MenuScreens$ScreenConstructor

View File

@@ -1,5 +1,5 @@
modLoader="javafml"
loaderVersion="[42,)"
loaderVersion="[43,)"
license="MIT"
#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/"
@@ -19,20 +19,20 @@ Not your average Lighting & Decoration Mods
[[dependencies.hyperlighting]]
modId="forge"
mandatory=true
versionRange="[42,)"
versionRange="[43,)"
ordering="NONE"
side="BOTH"
[[dependencies.hyperlighting]]
modId="minecraft"
mandatory=true
versionRange="[1.19.1,1.20)"
versionRange="[1.19.2,1.20)"
ordering="NONE"
side="BOTH"
[[dependencies.hyperlighting]]
modId="craterlib"
mandatory=true
versionRange="1.0.x"
versionRange="0.0.x"
ordering="AFTER"
side="BOTH"

View File

@@ -5,18 +5,18 @@ version_patch=1
group=me.hypherionmc.hyperlighting
# Common
minecraft_version=1.19.1
minecraft_version=1.19.2
common_runs_enabled=false
common_client_run_name=Common Client
common_server_run_name=Common Server
# Forge
forge_version=42.0.1
//forge_ats_enabled=true
forge_version=43.1.25
forge_ats_enabled=true
# Fabric
fabric_version=0.58.5+1.19.1
fabric_loader_version=0.14.8
fabric_version=0.61.0+1.19.2
fabric_loader_version=0.14.9
# Mod options
mod_name=HyperLighting2
@@ -28,11 +28,11 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
#dependencies
craterlib_version=1.0.6d
mod_menu_version=4.0.5
shimmer_version=0.1.11d
sodium_version=3820973
ribidium_version=3864138
craterlib_version=0.0.5d
mod_menu_version=4.0.6
shimmer_version=0.1.12
sodium_version=3957319
ribidium_version=3973894
top_version=1.19-6.2.0-6
top_fabric=1.19-6.0.0
wthitVersion=5.11.3
wthitVersion=5.12.0