Implement Item Properties and get Forge Version up to date
This commit is contained in:
@@ -3,7 +3,7 @@ package me.hypherionmc.craterlib;
|
|||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
public class Constants {
|
public class CraterConstants {
|
||||||
public static final String MOD_ID = "craterlib";
|
public static final String MOD_ID = "craterlib";
|
||||||
public static final String MOD_NAME = "CraterLib";
|
public static final String MOD_NAME = "CraterLib";
|
||||||
public static final Logger LOG = LogManager.getLogger(MOD_NAME);
|
public static final Logger LOG = LogManager.getLogger(MOD_NAME);
|
@@ -7,6 +7,7 @@ import net.minecraft.client.color.item.ItemColors;
|
|||||||
/**
|
/**
|
||||||
* @author HypherionSA
|
* @author HypherionSA
|
||||||
* @date 17/06/2022
|
* @date 17/06/2022
|
||||||
|
* A wrapped event to allow Block and Item Color Registration
|
||||||
*/
|
*/
|
||||||
public class ColorRegistrationEvent {
|
public class ColorRegistrationEvent {
|
||||||
|
|
||||||
|
@@ -3,13 +3,13 @@ package me.hypherionmc.craterlib.client.gui.tabs;
|
|||||||
import me.hypherionmc.craterlib.platform.Services;
|
import me.hypherionmc.craterlib.platform.Services;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author HypherionSA
|
* @author HypherionSA
|
||||||
* @date 16/06/2022
|
* @date 16/06/2022
|
||||||
|
* Provides a wrapper around Forge/Fabric to create a new Creative Tab
|
||||||
*/
|
*/
|
||||||
public class CreativeTabBuilder {
|
public class CreativeTabBuilder {
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package me.hypherionmc.craterlib.client.rendering;
|
package me.hypherionmc.craterlib.client.rendering;
|
||||||
|
|
||||||
import me.hypherionmc.craterlib.api.rendering.ItemDyable;
|
import me.hypherionmc.craterlib.api.rendering.ItemDyable;
|
||||||
|
import me.hypherionmc.craterlib.util.RenderUtils;
|
||||||
import net.minecraft.client.color.item.ItemColor;
|
import net.minecraft.client.color.item.ItemColor;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
@@ -28,7 +29,7 @@ public class ItemColorHandler implements ItemColor {
|
|||||||
*/
|
*/
|
||||||
private int getColorFromStack(ItemStack stack) {
|
private int getColorFromStack(ItemStack stack) {
|
||||||
if (stack.getItem() instanceof ItemDyable itemDyable) {
|
if (stack.getItem() instanceof ItemDyable itemDyable) {
|
||||||
return itemDyable.getColor(stack).getMaterialColor().col;
|
return RenderUtils.renderColorFromDye(itemDyable.getColor(stack));
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package me.hypherionmc.craterlib.common.config;
|
package me.hypherionmc.craterlib.common.config;
|
||||||
|
|
||||||
import me.hypherionmc.craterlib.Constants;
|
import me.hypherionmc.craterlib.CraterConstants;
|
||||||
import me.hypherionmc.nightconfig.core.file.FileWatcher;
|
import me.hypherionmc.nightconfig.core.file.FileWatcher;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
@@ -23,19 +23,19 @@ public class ConfigController implements Serializable {
|
|||||||
*/
|
*/
|
||||||
static void register_config(ModuleConfig config) {
|
static void register_config(ModuleConfig config) {
|
||||||
if (monitoredConfigs.containsKey(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 {
|
} else {
|
||||||
FileWatcher configWatcher = new FileWatcher();
|
FileWatcher configWatcher = new FileWatcher();
|
||||||
try {
|
try {
|
||||||
configWatcher.setWatch(config.getConfigPath(), () -> {
|
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();
|
config.configReloaded();
|
||||||
});
|
});
|
||||||
} catch (Exception e) {
|
} 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);
|
monitoredConfigs.put(config, configWatcher);
|
||||||
Constants.LOG.info("Registered " + config.getConfigPath().getName() + " successfully!");
|
CraterConstants.LOG.info("Registered " + config.getConfigPath().getName() + " successfully!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,18 +2,16 @@ package me.hypherionmc.craterlib.common.item;
|
|||||||
|
|
||||||
import me.hypherionmc.craterlib.api.rendering.DyableBlock;
|
import me.hypherionmc.craterlib.api.rendering.DyableBlock;
|
||||||
import me.hypherionmc.craterlib.api.rendering.ItemDyable;
|
import me.hypherionmc.craterlib.api.rendering.ItemDyable;
|
||||||
|
import me.hypherionmc.craterlib.platform.Services;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.util.StringUtil;
|
|
||||||
import net.minecraft.world.item.BlockItem;
|
import net.minecraft.world.item.BlockItem;
|
||||||
import net.minecraft.world.item.DyeColor;
|
import net.minecraft.world.item.DyeColor;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.context.BlockPlaceContext;
|
import net.minecraft.world.item.context.BlockPlaceContext;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
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 net.minecraft.world.level.block.state.properties.Property;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.apache.commons.lang3.text.WordUtils;
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -25,6 +23,7 @@ public class BlockItemDyable extends BlockItem implements ItemDyable {
|
|||||||
|
|
||||||
public BlockItemDyable(Block block, Properties properties) {
|
public BlockItemDyable(Block block, Properties properties) {
|
||||||
super(block, 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();
|
CompoundTag tag = stack.getOrCreateTag();
|
||||||
if (tag.contains("color")) {
|
if (tag.contains("color")) {
|
||||||
return DyeColor.byName(tag.getString("color"), DyeColor.BLACK);
|
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;
|
return state != null && this.canPlace(ctx, state) ? state : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -1,14 +1,13 @@
|
|||||||
package me.hypherionmc.craterlib.platform;
|
package me.hypherionmc.craterlib.platform;
|
||||||
|
|
||||||
import me.hypherionmc.craterlib.Constants;
|
import me.hypherionmc.craterlib.CraterConstants;
|
||||||
import me.hypherionmc.craterlib.platform.services.IPlatformHelper;
|
|
||||||
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
|
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
|
||||||
|
|
||||||
import java.util.ServiceLoader;
|
import java.util.ServiceLoader;
|
||||||
|
|
||||||
public class Services {
|
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);
|
public static final LibClientHelper CLIENT_HELPER = load(LibClientHelper.class);
|
||||||
|
|
||||||
@@ -17,7 +16,7 @@ public class Services {
|
|||||||
final T loadedService = ServiceLoader.load(clazz)
|
final T loadedService = ServiceLoader.load(clazz)
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElseThrow(() -> new NullPointerException("Failed to load service for " + clazz.getName()));
|
.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;
|
return loadedService;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
package me.hypherionmc.craterlib.platform.services;
|
package me.hypherionmc.craterlib.platform.services;
|
||||||
|
|
||||||
|
import me.hypherionmc.craterlib.common.item.BlockItemDyable;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
|
||||||
@@ -13,4 +14,6 @@ public interface LibClientHelper {
|
|||||||
|
|
||||||
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf);
|
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf);
|
||||||
|
|
||||||
|
public void registerItemProperty(BlockItemDyable item, String property);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -3,6 +3,7 @@ package me.hypherionmc.craterlib.util;
|
|||||||
import com.mojang.math.Vector4f;
|
import com.mojang.math.Vector4f;
|
||||||
import net.minecraft.ChatFormatting;
|
import net.minecraft.ChatFormatting;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.world.item.DyeColor;
|
||||||
|
|
||||||
public class RenderUtils {
|
public class RenderUtils {
|
||||||
|
|
||||||
@@ -51,4 +52,8 @@ public class RenderUtils {
|
|||||||
return pPackedColor & 255;
|
return pPackedColor & 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int renderColorFromDye(DyeColor color) {
|
||||||
|
return color.getMaterialColor().col | 0xFF000000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
accessWidener v1 named
|
accessWidener v1 named
|
||||||
|
|
||||||
accessible class net/minecraft/client/renderer/LevelRenderer$RenderChunkInfo
|
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
|
||||||
|
@@ -1,14 +1,17 @@
|
|||||||
package me.hypherionmc.craterlib;
|
package me.hypherionmc.craterlib;
|
||||||
|
|
||||||
import net.fabricmc.api.ModInitializer;
|
import net.fabricmc.api.ModInitializer;
|
||||||
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
|
import net.fabricmc.loader.api.entrypoint.PreLaunchEntrypoint;
|
||||||
import net.minecraft.server.packs.PackType;
|
|
||||||
|
|
||||||
public class CraterLibInitializer implements ModInitializer {
|
public class CraterLibInitializer implements ModInitializer, PreLaunchEntrypoint {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPreLaunch() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onInitialize() {
|
public void onInitialize() {
|
||||||
var resources = ResourceManagerHelper.get(PackType.CLIENT_RESOURCES);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,12 @@
|
|||||||
package me.hypherionmc.craterlib.client;
|
package me.hypherionmc.craterlib.client;
|
||||||
|
|
||||||
|
import me.hypherionmc.craterlib.common.item.BlockItemDyable;
|
||||||
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
|
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.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.resources.ResourceLocation;
|
||||||
import net.minecraft.world.item.CreativeModeTab;
|
import net.minecraft.world.item.CreativeModeTab;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
@@ -12,8 +17,7 @@ import java.util.function.Supplier;
|
|||||||
* @author HypherionSA
|
* @author HypherionSA
|
||||||
* @date 16/06/2022
|
* @date 16/06/2022
|
||||||
*/
|
*/
|
||||||
class FabricClientHelper implements LibClientHelper {
|
public class FabricClientHelper implements LibClientHelper {
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf) {
|
public CreativeModeTab tabBuilder(String modid, String tabid, Supplier<ItemStack> icon, String backgroundSuf) {
|
||||||
@@ -30,4 +34,11 @@ class FabricClientHelper implements LibClientHelper {
|
|||||||
}
|
}
|
||||||
return tab1;
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,9 @@
|
|||||||
"icon": "assets/modid/icon.png",
|
"icon": "assets/modid/icon.png",
|
||||||
"environment": "*",
|
"environment": "*",
|
||||||
"entrypoints": {
|
"entrypoints": {
|
||||||
|
"preLaunch": [
|
||||||
|
"me.hypherionmc.craterlib.CraterLibInitializer"
|
||||||
|
],
|
||||||
"main": [
|
"main": [
|
||||||
"me.hypherionmc.craterlib.CraterLibInitializer"
|
"me.hypherionmc.craterlib.CraterLibInitializer"
|
||||||
],
|
],
|
||||||
|
@@ -2,7 +2,7 @@ package me.hypherionmc.craterlib;
|
|||||||
|
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
@Mod(Constants.MOD_ID)
|
@Mod(CraterConstants.MOD_ID)
|
||||||
public class CraterLib {
|
public class CraterLib {
|
||||||
|
|
||||||
public CraterLib() {
|
public CraterLib() {
|
||||||
|
@@ -1,8 +1,13 @@
|
|||||||
package me.hypherionmc.craterlib.client;
|
package me.hypherionmc.craterlib.client;
|
||||||
|
|
||||||
|
import me.hypherionmc.craterlib.common.item.BlockItemDyable;
|
||||||
import me.hypherionmc.craterlib.platform.services.LibClientHelper;
|
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.CreativeModeTab;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
|
import net.minecraftforge.fml.loading.FMLEnvironment;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@@ -31,4 +36,10 @@ class ForgeClientHelper implements LibClientHelper {
|
|||||||
return tab;
|
return tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerItemProperty(BlockItemDyable item, String property) {
|
||||||
|
if (FMLEnvironment.dist.isClient()) {
|
||||||
|
ItemProperties.register(item, new ResourceLocation(property), new ColorPropertyFunction(item));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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<FluidTank> getFluid;
|
||||||
|
|
||||||
|
private final String toolTipTitle;
|
||||||
|
|
||||||
|
public FluidStackWidget(Screen displayOn, Supplier<FluidTank> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
@@ -1,7 +1,7 @@
|
|||||||
# Project
|
# Project
|
||||||
version_major=1
|
version_major=1
|
||||||
version_minor=0
|
version_minor=0
|
||||||
version_patch=7d
|
version_patch=8d
|
||||||
group=me.hypherionmc.craterlib
|
group=me.hypherionmc.craterlib
|
||||||
|
|
||||||
# Common
|
# Common
|
||||||
|
Reference in New Issue
Block a user