Add missed files

This commit is contained in:
2022-05-12 00:20:18 +02:00
parent 16c24ce795
commit a49903cc69
40 changed files with 728 additions and 367 deletions

View File

@@ -1,2 +1,11 @@
package me.hypherionmc.craterlib;public class CraterLibInitializer {
package me.hypherionmc.craterlib;
import net.fabricmc.api.ModInitializer;
public class CraterLibInitializer implements ModInitializer {
@Override
public void onInitialize() {
}
}

View File

@@ -1,2 +1,11 @@
package me.hypherionmc.craterlib.client;public class CraterLibClientInitializer {
package me.hypherionmc.craterlib.client;
import net.fabricmc.api.ClientModInitializer;
public class CraterLibClientInitializer implements ClientModInitializer {
@Override
public void onInitializeClient() {
}
}

View File

@@ -1,2 +1,95 @@
package me.hypherionmc.craterlib.client.gui.widgets;public class FluidStackWidget {
package me.hypherionmc.craterlib.client.gui.widgets;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import me.hypherionmc.craterlib.systems.fluid.FluidTank;
import me.hypherionmc.craterlib.util.LangUtils;
import me.hypherionmc.craterlib.util.RenderUtils;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
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.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.network.chat.TextComponent;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Supplier;
/**
* Modified 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, TextComponent.EMPTY);
this.displayOn = displayOn;
this.getFluid = getFluid;
this.toolTipTitle = tooltipTitle;
}
@Override
public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) {
Minecraft minecraft = Minecraft.getInstance();
RenderSystem.setShader(GameRenderer::getPositionTexShader);
RenderSystem.defaultBlendFunc();
RenderSystem.enableDepthTest();
FluidTank fluidTank = getFluid.get();
if (!fluidTank.getResource().isBlank()) {
FluidVariant fluidStack = fluidTank.getResource();
TextureAtlasSprite still = FluidVariantRendering.getSprite(fluidStack);
if (still != null) {
RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_BLOCKS);
int color = FluidVariantRendering.getColor(fluidStack);
RenderSystem.setShaderColor(
RenderUtils.ARGB32.red(color) / 255.0F,
RenderUtils.ARGB32.green(color) / 255.0F,
RenderUtils.ARGB32.blue(color) / 255.0F,
RenderUtils.ARGB32.alpha(color) / 255.0F);
RenderSystem.enableBlend();
long stored = fluidTank.getAmount();
float capacity = fluidTank.getCapacity();
float filledVolume = stored / capacity;
int renderableHeight = (int) (filledVolume * height);
int atlasWidth = (int) (still.getWidth() / (still.getU1() - still.getU0()));
int atlasHeight = (int) (still.getHeight() / (still.getV1() - still.getV0()));
matrices.pushPose();
matrices.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(matrices, x, y + notDrawingHeight, displayOn.getBlitOffset(), still.getU0() * atlasWidth, still.getV0() * atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
matrices.translate(0, -16, 0);
}
RenderSystem.setShaderColor(1, 1, 1, 1);
matrices.popPose();
}
renderToolTip(matrices, mouseX, mouseY);
}
}
@Override
public void renderToolTip(PoseStack poseStack, int mouseX, int mouseY) {
if (this.visible && this.isFocused() && isHoveredOrFocused()) {
displayOn.renderTooltip(poseStack, Arrays.asList(LangUtils.getTooltipTitle(toolTipTitle), new TextComponent((int) (((float) this.getFluid.get().getAmount() / this.getFluid.get().getCapacity()) * 100) + "%")), Optional.empty(), mouseX, mouseY);
}
}
@Override
public void updateNarration(NarrationElementOutput narrationElementOutput) {
}
}

View File

@@ -1,29 +1,28 @@
package me.hypherionmc.hyperlighting.api.fluid;
package me.hypherionmc.craterlib.systems.fluid;
import me.hypherionmc.hyperlighting.utils.ModUtils;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.fabricmc.fabric.api.transfer.v1.storage.Storage;
import net.fabricmc.fabric.api.transfer.v1.storage.StoragePreconditions;
import net.fabricmc.fabric.api.transfer.v1.storage.StorageView;
import net.fabricmc.fabric.api.transfer.v1.storage.base.SingleViewIterator;
import net.fabricmc.fabric.api.transfer.v1.transaction.TransactionContext;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.CompoundTag;
import java.util.Iterator;
import java.util.function.Predicate;
public class FluidStorageTank implements Storage<FluidVariant>, StorageView<FluidVariant> {
public class FluidTank implements Storage<FluidVariant>, StorageView<FluidVariant> {
private final long capacity;
private final Predicate<FluidVariant> validFluid;
private long level = 0;
private FluidVariant fluid = FluidVariant.blank();
public FluidStorageTank(long capacity) {
public FluidTank(long capacity) {
this(capacity, e -> true);
}
public FluidStorageTank(long capacity, Predicate<FluidVariant> validFluid) {
public FluidTank(long capacity, Predicate<FluidVariant> validFluid) {
this.capacity = capacity;
this.validFluid = validFluid;
}
@@ -87,14 +86,14 @@ public class FluidStorageTank implements Storage<FluidVariant>, StorageView<Flui
return SingleViewIterator.create(this, transaction);
}
public NbtCompound writeNbt(NbtCompound compound) {
ModUtils.putFluid(compound, "fluid", getResource());
public CompoundTag writeNbt(CompoundTag compound) {
FluidUtils.putFluid(compound, "fluid", getResource());
compound.putLong("amt", level);
return compound;
}
public void readNbt(NbtCompound nbtCompound) {
fluid = ModUtils.getFluidCompatible(nbtCompound, "fluid");
public void readNbt(CompoundTag nbtCompound) {
fluid = FluidUtils.getFluidCompatible(nbtCompound, "fluid");
level = nbtCompound.getLong("amt");
}
}

View File

@@ -1,2 +1,54 @@
package me.hypherionmc.craterlib.systems.fluid;public class FluidUtils {
package me.hypherionmc.craterlib.systems.fluid;
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.core.Registry;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.material.Fluid;
import net.minecraft.world.level.material.Fluids;
public class FluidUtils {
public static int fluidColorFromDye(DyeColor color) {
return color.getMaterialColor().col | 0xFF000000;
}
public static void putFluid(CompoundTag compound, String key, FluidVariant fluidVariant) {
CompoundTag savedTag = new CompoundTag();
savedTag.put("fk", fluidVariant.toNbt());
compound.put(key, savedTag);
}
public static FluidVariant getFluidCompatible(CompoundTag tag, String key) {
if (tag == null || !tag.contains(key))
return FluidVariant.blank();
if (tag.get(key) instanceof StringTag) {
return FluidVariant.of(Registry.FLUID.get(new ResourceLocation(tag.getString(key))));
} else {
CompoundTag compound = tag.getCompound(key);
if (compound.contains("fk")) {
return FluidVariant.fromNbt(compound.getCompound("fk"));
} else {
return FluidVariant.of(readLbaTag(tag.getCompound(key)));
}
}
}
private static Fluid readLbaTag(CompoundTag tag) {
if (tag.contains("ObjName") && tag.getString("Registry").equals("f")) {
return Registry.FLUID.get(new ResourceLocation(tag.getString("ObjName")));
} else {
return Fluids.EMPTY;
}
}
public static TextureAtlasSprite getFluidTexture(FluidVariant fluidStack) {
return FluidVariantRendering.getSprite(fluidStack);
}
}

View File

@@ -1,12 +1,11 @@
{
"required": true,
"minVersion": "0.8",
"package": "com.example.examplemod.mixin",
"package": "me.hypherionmc.craterlib.mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [
],
"client": [
"ExampleFabricMixin"
],
"server": [
],
@@ -14,4 +13,3 @@
"defaultRequire": 1
}
}

View File

@@ -1,10 +1,10 @@
{
"schemaVersion": 1,
"id": "modid",
"id": "craterlib",
"version": "${version}",
"name": "Example Mod",
"description": "This is an example description! Tell everyone what your mod is about!",
"name": "CraterLib",
"description": "A library mod used by HypherionSA's Mods",
"authors": [
"Me!"
],
@@ -12,21 +12,24 @@
"homepage": "https://fabricmc.net/",
"sources": "https://github.com/FabricMC/fabric-example-mod"
},
"license": "CC0-1.0",
"license": "MIT",
"icon": "assets/modid/icon.png",
"environment": "*",
"entrypoints": {
"main": [
"com.example.examplemod.ExampleMod"
"me.hypherionmc.craterlib.CraterLibInitializer"
],
"client": [
"me.hypherionmc.craterlib.client.CraterLibClientInitializer"
]
},
"mixins": [
"multiloader.mixins.json",
"multiloader.fabric.mixins.json"
"craterlib.mixins.json",
"craterlib.fabric.mixins.json"
],
"depends": {
"fabricloader": ">=0.12",
"fabric": "*",
@@ -37,4 +40,3 @@
"another-mod": "*"
}
}