diff --git a/Common/src/main/java/me/hypherionmc/craterlib/Constants.java b/Common/src/main/java/me/hypherionmc/craterlib/CraterConstants.java similarity index 90% rename from Common/src/main/java/me/hypherionmc/craterlib/Constants.java rename to Common/src/main/java/me/hypherionmc/craterlib/CraterConstants.java index 8232c1d..12b9a36 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/Constants.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/CraterConstants.java @@ -3,7 +3,7 @@ package me.hypherionmc.craterlib; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -public class Constants { +public class CraterConstants { public static final String MOD_ID = "craterlib"; public static final String MOD_NAME = "CraterLib"; public static final Logger LOG = LogManager.getLogger(MOD_NAME); diff --git a/Common/src/main/java/me/hypherionmc/craterlib/client/events/ColorRegistrationEvent.java b/Common/src/main/java/me/hypherionmc/craterlib/client/events/ColorRegistrationEvent.java index c494627..bd8f6b7 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/client/events/ColorRegistrationEvent.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/client/events/ColorRegistrationEvent.java @@ -7,6 +7,7 @@ import net.minecraft.client.color.item.ItemColors; /** * @author HypherionSA * @date 17/06/2022 + * A wrapped event to allow Block and Item Color Registration */ public class ColorRegistrationEvent { diff --git a/Common/src/main/java/me/hypherionmc/craterlib/client/gui/tabs/CreativeTabBuilder.java b/Common/src/main/java/me/hypherionmc/craterlib/client/gui/tabs/CreativeTabBuilder.java index a0861a3..bf972de 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/client/gui/tabs/CreativeTabBuilder.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/client/gui/tabs/CreativeTabBuilder.java @@ -3,13 +3,13 @@ package me.hypherionmc.craterlib.client.gui.tabs; import me.hypherionmc.craterlib.platform.Services; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import java.util.function.Supplier; /** * @author HypherionSA * @date 16/06/2022 + * Provides a wrapper around Forge/Fabric to create a new Creative Tab */ public class CreativeTabBuilder { diff --git a/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java b/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java index 998870f..c48c3a9 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/client/rendering/ItemColorHandler.java @@ -1,6 +1,7 @@ package me.hypherionmc.craterlib.client.rendering; import me.hypherionmc.craterlib.api.rendering.ItemDyable; +import me.hypherionmc.craterlib.util.RenderUtils; import net.minecraft.client.color.item.ItemColor; import net.minecraft.world.item.ItemStack; @@ -28,7 +29,7 @@ public class ItemColorHandler implements ItemColor { */ private int getColorFromStack(ItemStack stack) { if (stack.getItem() instanceof ItemDyable itemDyable) { - return itemDyable.getColor(stack).getMaterialColor().col; + return RenderUtils.renderColorFromDye(itemDyable.getColor(stack)); } return 0; } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/common/config/ConfigController.java b/Common/src/main/java/me/hypherionmc/craterlib/common/config/ConfigController.java index 7bdaa9c..f1f85b5 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/common/config/ConfigController.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/common/config/ConfigController.java @@ -1,6 +1,6 @@ package me.hypherionmc.craterlib.common.config; -import me.hypherionmc.craterlib.Constants; +import me.hypherionmc.craterlib.CraterConstants; import me.hypherionmc.nightconfig.core.file.FileWatcher; import java.io.Serializable; @@ -23,19 +23,19 @@ public class ConfigController implements Serializable { */ static void register_config(ModuleConfig config) { if (monitoredConfigs.containsKey(config)) { - Constants.LOG.error("Failed to register " + config.getConfigPath().getName() + ". Config already registered"); + CraterConstants.LOG.error("Failed to register " + config.getConfigPath().getName() + ". Config already registered"); } else { FileWatcher configWatcher = new FileWatcher(); try { configWatcher.setWatch(config.getConfigPath(), () -> { - Constants.LOG.info("Sending Reload Event for: " + config.getConfigPath().getName()); + CraterConstants.LOG.info("Sending Reload Event for: " + config.getConfigPath().getName()); config.configReloaded(); }); } catch (Exception e) { - Constants.LOG.error("Failed to register " + config.getConfigPath().getName() + " for auto reloading. " + e.getMessage()); + CraterConstants.LOG.error("Failed to register " + config.getConfigPath().getName() + " for auto reloading. " + e.getMessage()); } monitoredConfigs.put(config, configWatcher); - Constants.LOG.info("Registered " + config.getConfigPath().getName() + " successfully!"); + CraterConstants.LOG.info("Registered " + config.getConfigPath().getName() + " successfully!"); } } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java b/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java index 8383b19..e3a0858 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/common/item/BlockItemDyable.java @@ -2,18 +2,16 @@ package me.hypherionmc.craterlib.common.item; import me.hypherionmc.craterlib.api.rendering.DyableBlock; import me.hypherionmc.craterlib.api.rendering.ItemDyable; +import me.hypherionmc.craterlib.platform.Services; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.util.StringUtil; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.EnumProperty; import net.minecraft.world.level.block.state.properties.Property; -import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -25,6 +23,7 @@ public class BlockItemDyable extends BlockItem implements ItemDyable { public BlockItemDyable(Block block, Properties properties) { super(block, properties); + Services.CLIENT_HELPER.registerItemProperty(this, "color"); } /** @@ -47,7 +46,7 @@ public class BlockItemDyable extends BlockItem implements ItemDyable { ); } - private DyeColor getColorFromNBT(ItemStack stack) { + public DyeColor getColorFromNBT(ItemStack stack) { CompoundTag tag = stack.getOrCreateTag(); if (tag.contains("color")) { return DyeColor.byName(tag.getString("color"), DyeColor.BLACK); @@ -71,4 +70,5 @@ public class BlockItemDyable extends BlockItem implements ItemDyable { } return state != null && this.canPlace(ctx, state) ? state : null; } + } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/platform/Services.java b/Common/src/main/java/me/hypherionmc/craterlib/platform/Services.java index 3f7f387..d57cc2d 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/platform/Services.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/platform/Services.java @@ -1,14 +1,13 @@ package me.hypherionmc.craterlib.platform; -import me.hypherionmc.craterlib.Constants; -import me.hypherionmc.craterlib.platform.services.IPlatformHelper; +import me.hypherionmc.craterlib.CraterConstants; import me.hypherionmc.craterlib.platform.services.LibClientHelper; import java.util.ServiceLoader; public class Services { - public static final IPlatformHelper PLATFORM = load(IPlatformHelper.class); + //public static final IPlatformHelper PLATFORM = load(IPlatformHelper.class); public static final LibClientHelper CLIENT_HELPER = load(LibClientHelper.class); @@ -17,7 +16,7 @@ public class Services { final T loadedService = ServiceLoader.load(clazz) .findFirst() .orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName())); - Constants.LOG.debug("Loaded {} for service {}", loadedService, clazz); + CraterConstants.LOG.debug("Loaded {} for service {}", loadedService, clazz); return loadedService; } } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/platform/services/LibClientHelper.java b/Common/src/main/java/me/hypherionmc/craterlib/platform/services/LibClientHelper.java index b813f12..71959b1 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/platform/services/LibClientHelper.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/platform/services/LibClientHelper.java @@ -1,5 +1,6 @@ package me.hypherionmc.craterlib.platform.services; +import me.hypherionmc.craterlib.common.item.BlockItemDyable; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; @@ -13,4 +14,6 @@ public interface LibClientHelper { public CreativeModeTab tabBuilder(String modid, String tabid, Supplier icon, String backgroundSuf); + public void registerItemProperty(BlockItemDyable item, String property); + } diff --git a/Common/src/main/java/me/hypherionmc/craterlib/util/ColorPropertyFunction.java b/Common/src/main/java/me/hypherionmc/craterlib/util/ColorPropertyFunction.java new file mode 100644 index 0000000..adfe18f --- /dev/null +++ b/Common/src/main/java/me/hypherionmc/craterlib/util/ColorPropertyFunction.java @@ -0,0 +1,35 @@ +package me.hypherionmc.craterlib.util; + +import me.hypherionmc.craterlib.common.item.BlockItemDyable; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.item.ClampedItemPropertyFunction; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.DyeColor; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +/** + * @author HypherionSA + * @date 03/07/2022 + */ +public class ColorPropertyFunction implements ClampedItemPropertyFunction { + + private final BlockItemDyable item; + + public ColorPropertyFunction(BlockItemDyable item) { + this.item = item; + } + + @Override + public float call(ItemStack itemStack, @Nullable ClientLevel clientLevel, @Nullable LivingEntity livingEntity, int i) { + return Mth.clamp(this.unclampedCall(itemStack, clientLevel, livingEntity, i), 0.0F, 15.0F); + } + + @Override + public float unclampedCall(ItemStack itemStack, @Nullable ClientLevel clientLevel, @Nullable LivingEntity livingEntity, int i) { + DyeColor color = item.getColorFromNBT(itemStack); + return color.getId(); + } + +} diff --git a/Common/src/main/java/me/hypherionmc/craterlib/util/RenderUtils.java b/Common/src/main/java/me/hypherionmc/craterlib/util/RenderUtils.java index b8fe9e6..8339b13 100644 --- a/Common/src/main/java/me/hypherionmc/craterlib/util/RenderUtils.java +++ b/Common/src/main/java/me/hypherionmc/craterlib/util/RenderUtils.java @@ -3,6 +3,7 @@ package me.hypherionmc.craterlib.util; import com.mojang.math.Vector4f; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; +import net.minecraft.world.item.DyeColor; public class RenderUtils { @@ -51,4 +52,8 @@ public class RenderUtils { return pPackedColor & 255; } } + + public static int renderColorFromDye(DyeColor color) { + return color.getMaterialColor().col | 0xFF000000; + } } diff --git a/Common/src/main/resources/craterlib.aw b/Common/src/main/resources/craterlib.aw index 9155d3a..54b896c 100644 --- a/Common/src/main/resources/craterlib.aw +++ b/Common/src/main/resources/craterlib.aw @@ -1,3 +1,4 @@ accessWidener v1 named accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo +accessible method net/minecraft/client/renderer/item/ItemProperties register (Lnet/minecraft/world/item/Item;Lnet/minecraft/resources/ResourceLocation;Lnet/minecraft/client/renderer/item/ClampedItemPropertyFunction;)V diff --git a/Fabric/src/main/java/me/hypherionmc/craterlib/CraterLibInitializer.java b/Fabric/src/main/java/me/hypherionmc/craterlib/CraterLibInitializer.java index c603cf8..09c5ece 100644 --- a/Fabric/src/main/java/me/hypherionmc/craterlib/CraterLibInitializer.java +++ b/Fabric/src/main/java/me/hypherionmc/craterlib/CraterLibInitializer.java @@ -1,14 +1,17 @@ package me.hypherionmc.craterlib; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.resource.ResourceManagerHelper; -import net.minecraft.server.packs.PackType; +import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint; -public class CraterLibInitializer implements ModInitializer { +public class CraterLibInitializer implements ModInitializer, PreLaunchEntrypoint { + + @Override + public void onPreLaunch() { + + } @Override public void onInitialize() { - var resources = ResourceManagerHelper.get(PackType.CLIENT_RESOURCES); } } diff --git a/Fabric/src/main/java/me/hypherionmc/craterlib/client/FabricClientHelper.java b/Fabric/src/main/java/me/hypherionmc/craterlib/client/FabricClientHelper.java index c1b1f1c..aa42aba 100644 --- a/Fabric/src/main/java/me/hypherionmc/craterlib/client/FabricClientHelper.java +++ b/Fabric/src/main/java/me/hypherionmc/craterlib/client/FabricClientHelper.java @@ -1,7 +1,12 @@ package me.hypherionmc.craterlib.client; +import me.hypherionmc.craterlib.common.item.BlockItemDyable; import me.hypherionmc.craterlib.platform.services.LibClientHelper; +import me.hypherionmc.craterlib.util.ColorPropertyFunction; +import net.fabricmc.api.EnvType; import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; +import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; +import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; @@ -12,8 +17,7 @@ import java.util.function.Supplier; * @author HypherionSA * @date 16/06/2022 */ -class FabricClientHelper implements LibClientHelper { - +public class FabricClientHelper implements LibClientHelper { @Override public CreativeModeTab tabBuilder(String modid, String tabid, Supplier icon, String backgroundSuf) { @@ -30,4 +34,11 @@ class FabricClientHelper implements LibClientHelper { } return tab1; } + + @Override + public void registerItemProperty(BlockItemDyable item, String property) { + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) { + FabricModelPredicateProviderRegistry.register(item, new ResourceLocation(property), new ColorPropertyFunction(item)); + } + } } diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index b936bf0..475dcfb 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -16,6 +16,9 @@ "icon": "assets/modid/icon.png", "environment": "*", "entrypoints": { + "preLaunch": [ + "me.hypherionmc.craterlib.CraterLibInitializer" + ], "main": [ "me.hypherionmc.craterlib.CraterLibInitializer" ], diff --git a/Forge/src/main/java/me/hypherionmc/craterlib/CraterLib.java b/Forge/src/main/java/me/hypherionmc/craterlib/CraterLib.java index 1c7c12d..7034e07 100644 --- a/Forge/src/main/java/me/hypherionmc/craterlib/CraterLib.java +++ b/Forge/src/main/java/me/hypherionmc/craterlib/CraterLib.java @@ -2,7 +2,7 @@ package me.hypherionmc.craterlib; import net.minecraftforge.fml.common.Mod; -@Mod(Constants.MOD_ID) +@Mod(CraterConstants.MOD_ID) public class CraterLib { public CraterLib() { diff --git a/Forge/src/main/java/me/hypherionmc/craterlib/client/ForgeClientHelper.java b/Forge/src/main/java/me/hypherionmc/craterlib/client/ForgeClientHelper.java index c6114d8..eb9ba90 100644 --- a/Forge/src/main/java/me/hypherionmc/craterlib/client/ForgeClientHelper.java +++ b/Forge/src/main/java/me/hypherionmc/craterlib/client/ForgeClientHelper.java @@ -1,8 +1,13 @@ package me.hypherionmc.craterlib.client; +import me.hypherionmc.craterlib.common.item.BlockItemDyable; import me.hypherionmc.craterlib.platform.services.LibClientHelper; +import me.hypherionmc.craterlib.util.ColorPropertyFunction; +import net.minecraft.client.renderer.item.ItemProperties; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.fml.loading.FMLEnvironment; import java.util.function.Supplier; @@ -31,4 +36,10 @@ class ForgeClientHelper implements LibClientHelper { return tab; } + @Override + public void registerItemProperty(BlockItemDyable item, String property) { + if (FMLEnvironment.dist.isClient()) { + ItemProperties.register(item, new ResourceLocation(property), new ColorPropertyFunction(item)); + } + } } diff --git a/Forge/src/main/java/me/hypherionmc/craterlib/client/gui/widgets/FluidStackWidget.java b/Forge/src/main/java/me/hypherionmc/craterlib/client/gui/widgets/FluidStackWidget.java new file mode 100644 index 0000000..bbe97fb --- /dev/null +++ b/Forge/src/main/java/me/hypherionmc/craterlib/client/gui/widgets/FluidStackWidget.java @@ -0,0 +1,100 @@ +package me.hypherionmc.craterlib.client.gui.widgets; + +/** + * @author HypherionSA + * @date 03/07/2022 + */ + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import me.hypherionmc.craterlib.util.LangUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.renderer.texture.TextureAtlas; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.FastColor; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.templates.FluidTank; + +import java.util.Arrays; +import java.util.function.Supplier; + +/** Copied from https://github.com/SleepyTrousers/EnderIO-Rewrite/blob/dev/1.18.x/enderio-machines/src/main/java/com/enderio/machines/client/FluidStackWidget.java*/ +public class FluidStackWidget extends AbstractWidget { + + private final Screen displayOn; + private final Supplier getFluid; + + private final String toolTipTitle; + + public FluidStackWidget(Screen displayOn, Supplier getFluid, int pX, int pY, int pWidth, int pHeight, String toolTipTitle) { + super(pX, pY, pWidth, pHeight, Component.empty()); + this.displayOn = displayOn; + this.getFluid = getFluid; + this.toolTipTitle = toolTipTitle; + } + + @Override + public void updateNarration(NarrationElementOutput pNarrationElementOutput) {} + + @Override + public void renderButton(PoseStack pPoseStack, int pMouseX, int pMouseY, float pPartialTicks) { + Minecraft minecraft = Minecraft.getInstance(); + RenderSystem.setShader(GameRenderer::getPositionTexShader); + RenderSystem.defaultBlendFunc(); + RenderSystem.enableDepthTest(); + FluidTank fluidTank = getFluid.get(); + if (!fluidTank.isEmpty()) { + FluidStack fluidStack = fluidTank.getFluid(); + ResourceLocation still = fluidStack.getFluid().getAttributes().getStillTexture(fluidStack); + if (still != null) { + AbstractTexture texture = minecraft.getTextureManager().getTexture(TextureAtlas.LOCATION_BLOCKS); + if (texture instanceof TextureAtlas atlas) { + TextureAtlasSprite sprite = atlas.getSprite(still); + RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS); + + int color = fluidStack.getFluid().getAttributes().getColor(); + RenderSystem.setShaderColor( + FastColor.ARGB32.red(color) / 255.0F, + FastColor.ARGB32.green(color) / 255.0F, + FastColor.ARGB32.blue(color) / 255.0F, + FastColor.ARGB32.alpha(color) / 255.0F); + RenderSystem.enableBlend(); + + int stored = fluidTank.getFluidAmount(); + float capacity = fluidTank.getCapacity(); + float filledVolume = stored / capacity; + int renderableHeight = (int)(filledVolume * height); + + int atlasWidth = (int)(sprite.getWidth() / (sprite.getU1() - sprite.getU0())); + int atlasHeight = (int)(sprite.getHeight() / (sprite.getV1() - sprite.getV0())); + + pPoseStack.pushPose(); + pPoseStack.translate(0, height-16, 0); + for (int i = 0; i < Math.ceil(renderableHeight / 16f); i++) { + int drawingHeight = Math.min(16, renderableHeight - 16*i); + int notDrawingHeight = 16 - drawingHeight; + blit(pPoseStack, x, y + notDrawingHeight, displayOn.getBlitOffset(), sprite.getU0()*atlasWidth, sprite.getV0()*atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight); + pPoseStack.translate(0,-16, 0); + } + + RenderSystem.setShaderColor(1, 1, 1, 1); + pPoseStack.popPose(); + } + } + renderToolTip(pPoseStack, pMouseX, pMouseY); + } + } + @Override + public void renderToolTip(PoseStack pPoseStack, int pMouseX, int pMouseY) { + if (isActive() && isHovered) { + displayOn.renderTooltip(pPoseStack, Arrays.asList(LangUtils.getTooltipTitle(toolTipTitle).getVisualOrderText(), Component.literal((int) (((float)this.getFluid.get().getFluidAmount() / this.getFluid.get().getCapacity()) * 100) + "%").getVisualOrderText()), pMouseX, pMouseY); + } + } +} diff --git a/Forge/src/main/java/me/hypherionmc/craterlib/systems/energy/ForgeCustomEnergyStorage.java b/Forge/src/main/java/me/hypherionmc/craterlib/systems/energy/ForgeCustomEnergyStorage.java new file mode 100644 index 0000000..9f32c15 --- /dev/null +++ b/Forge/src/main/java/me/hypherionmc/craterlib/systems/energy/ForgeCustomEnergyStorage.java @@ -0,0 +1,48 @@ +package me.hypherionmc.craterlib.systems.energy; + +import net.minecraftforge.energy.IEnergyStorage; + +/** + * @author HypherionSA + * @date 03/07/2022 + * Forge Energy Support on top of the custom system + */ +public class ForgeCustomEnergyStorage extends CustomEnergyStorage implements IEnergyStorage { + + + public ForgeCustomEnergyStorage(int capacity) { + super(capacity); + } + + public ForgeCustomEnergyStorage(int powerCapacity, int maxTransfer) { + super(powerCapacity, maxTransfer); + } + + public ForgeCustomEnergyStorage(int powerCapacity, int maxInput, int maxOutput) { + super(powerCapacity, maxInput, maxOutput); + } + + public ForgeCustomEnergyStorage(int capacity, int maxInput, int maxOutput, int initialPower) { + super(capacity, maxInput, maxOutput, initialPower); + } + + @Override + public int getEnergyStored() { + return this.getPowerLevel(); + } + + @Override + public int getMaxEnergyStored() { + return this.getPowerCapacity(); + } + + @Override + public boolean canExtract() { + return this.maxOutput > 0; + } + + @Override + public boolean canReceive() { + return this.maxInput > 0; + } +} diff --git a/gradle.properties b/gradle.properties index eca00b0..2a45f09 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # Project version_major=1 version_minor=0 -version_patch=7d +version_patch=8d group=me.hypherionmc.craterlib # Common