Some code changes I don't remember and port to 1.19.4
This commit is contained in:
@@ -11,10 +11,11 @@ dependencies {
|
||||
mappings loom.officialMojangMappings()
|
||||
modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
|
||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_version}"
|
||||
include 'me.hypherionmc.night-config:toml:3.6.5_custom'
|
||||
include 'me.hypherionmc.night-config:core:3.6.5_custom'
|
||||
implementation project(":Common")
|
||||
|
||||
include "me.hypherionmc.moon-config:core:${moon_config}"
|
||||
include "me.hypherionmc.moon-config:toml:${moon_config}"
|
||||
|
||||
modApi("com.terraformersmc:modmenu:${mod_menu_version}") {
|
||||
exclude(group: "net.fabricmc.fabric-api")
|
||||
}
|
||||
|
@@ -1,13 +1,37 @@
|
||||
package me.hypherionmc.craterlib;
|
||||
|
||||
import me.hypherionmc.craterlib.common.FabricCommonHelper;
|
||||
import me.hypherionmc.craterlib.systems.internal.CreativeTabRegistry;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CraterLibInitializer implements ModInitializer {
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
ServerLifecycleEvents.SERVER_STARTING.register(server -> FabricCommonHelper.server = server);
|
||||
|
||||
CreativeTabRegistry.getTABS().forEach(tab -> {
|
||||
CreativeModeTab finalTab = FabricItemGroup.builder(tab.getResourceLocation())
|
||||
.title(Component.translatable("itemGroup." +
|
||||
tab.getResourceLocation().toString().replace(":", ".")
|
||||
))
|
||||
.displayItems((featureFlagSet, output) -> {
|
||||
CreativeTabRegistry
|
||||
.getTabItems()
|
||||
.stream().filter(t -> t.getLeft() == tab)
|
||||
.map(Pair::getRight).forEach(itm -> output.accept(itm.get()));
|
||||
})
|
||||
.icon(tab.getIcon())
|
||||
.build();
|
||||
|
||||
tab.setTab(finalTab);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -9,12 +9,14 @@ import me.hypherionmc.craterlib.util.ColorPropertyFunction;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.client.rendering.v1.BlockEntityRendererRegistry;
|
||||
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
||||
import net.minecraft.network.Connection;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
@@ -23,6 +25,8 @@ import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.function.Function;
|
||||
@@ -90,4 +94,9 @@ public class FabricClientHelper implements LibClientHelper {
|
||||
public static void registerCreativeItems(CreativeModeTab tab, FabricItemGroupEntries entries) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerBlockEntityRenderer(BlockEntityType<? extends BlockEntity> blockEntityType, BlockEntityRendererProvider blockEntityRendererFactory) {
|
||||
BlockEntityRendererRegistry.register(blockEntityType, blockEntityRendererFactory);
|
||||
}
|
||||
}
|
||||
|
@@ -3,7 +3,6 @@ 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;
|
||||
@@ -15,9 +14,8 @@ 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.Component;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
@@ -38,8 +36,7 @@ public class FluidStackWidget extends AbstractWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderButton(PoseStack matrices, int mouseX, int mouseY, float delta) {
|
||||
Minecraft minecraft = Minecraft.getInstance();
|
||||
public void renderWidget(@NotNull PoseStack matrices, int mouseX, int mouseY, float delta) {
|
||||
RenderSystem.setShader(GameRenderer::getPositionTexShader);
|
||||
RenderSystem.defaultBlendFunc();
|
||||
RenderSystem.enableDepthTest();
|
||||
@@ -71,7 +68,8 @@ public class FluidStackWidget extends AbstractWidget {
|
||||
for (int i = 0; i < Math.ceil(renderableHeight / 16f); i++) {
|
||||
int drawingHeight = Math.min(16, renderableHeight - 16 * i);
|
||||
int notDrawingHeight = 16 - drawingHeight;
|
||||
blit(matrices, getX(), getY() + notDrawingHeight, displayOn.getBlitOffset(), still.getU0() * atlasWidth, still.getV0() * atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
|
||||
// TODO Double Check this
|
||||
blit(matrices, getX(), getY() + notDrawingHeight, 0, still.getU0() * atlasWidth, still.getV0() * atlasHeight + notDrawingHeight, this.width, drawingHeight, atlasWidth, atlasHeight);
|
||||
matrices.translate(0, -16, 0);
|
||||
}
|
||||
|
||||
|
@@ -1,5 +1,7 @@
|
||||
package me.hypherionmc.craterlib.common;
|
||||
|
||||
import me.hypherionmc.craterlib.api.blockentities.caps.CapabilityHandler;
|
||||
import me.hypherionmc.craterlib.api.blockentities.caps.ICraterCapProvider;
|
||||
import me.hypherionmc.craterlib.network.CraterNetworkHandler;
|
||||
import me.hypherionmc.craterlib.network.CraterPacket;
|
||||
import me.hypherionmc.craterlib.network.FabricNetworkHandler;
|
||||
@@ -8,6 +10,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerFactory;
|
||||
import net.fabricmc.fabric.api.screenhandler.v1.ExtendedScreenHandlerType;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
@@ -19,9 +22,11 @@ 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.MenuType;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import org.apache.commons.lang3.function.TriFunction;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
@@ -79,4 +84,11 @@ public class FabricCommonHelper implements LibCommonHelper {
|
||||
return new ExtendedScreenHandlerType<>(constructor::apply);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Optional<T> getCapabilityHandler(BlockEntity entity, Direction side, CapabilityHandler capability) {
|
||||
if (entity instanceof ICraterCapProvider capProvider) {
|
||||
return capProvider.getCapability(capability, side);
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,67 @@
|
||||
package me.hypherionmc.craterlib.common;
|
||||
|
||||
import me.hypherionmc.craterlib.platform.services.LibFluidHelper;
|
||||
import me.hypherionmc.craterlib.systems.fluid.*;
|
||||
import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
|
||||
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidConstants;
|
||||
import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariant;
|
||||
import net.fabricmc.fabric.impl.transfer.fluid.FluidVariantImpl;
|
||||
import net.fabricmc.fabric.mixin.transfer.BucketItemAccessor;
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.BucketItem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class FabricFluidHelper implements LibFluidHelper {
|
||||
|
||||
@Override
|
||||
public CraterFluidTank createFluidTank(int capacity) {
|
||||
return new FluidTank(capacity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraterFluidTank createFluidTank(int capacity, Fluid... validFluids) {
|
||||
return new FluidTank(capacity, (variant) -> Arrays.stream(validFluids).allMatch(f -> f.isSame(variant.getFluid())));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean interactWithFluidHandler(Player player, InteractionHand hand, ICraterFluidHandler fluidHandler) {
|
||||
ItemStack stack = player.getItemInHand(hand);
|
||||
if (stack.getItem() instanceof BucketItem bucketItem) {
|
||||
FluidVariant fluidVariant = new FluidVariantImpl(((BucketItemAccessor) bucketItem).fabric_getFluid(), stack.getTag());
|
||||
if (fluidVariant.isBlank())
|
||||
return false;
|
||||
if (fluidHandler.insert(new FluidHolder(fluidVariant.getFluid(), 1000), ICraterFluidHandler.FluidAction.EXECUTE) > 0) {
|
||||
player.level.playSound(null, player.getOnPos(), SoundEvents.BUCKET_EMPTY, SoundSource.BLOCKS, 1.0f, 1.0f);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean interactWithFluidHandler(@NotNull Player player, @NotNull InteractionHand hand, @NotNull Level level, @NotNull BlockPos pos, @Nullable Direction side) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getFluidTexture(FluidHolder fluidHolder) {
|
||||
return FabricFluidUtils.getFluidTexture(FluidVariant.of(fluidHolder.getFluid()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFluidColor(Fluid fluid) {
|
||||
return FluidVariantRendering.getColor(FluidVariant.of(fluid));
|
||||
}
|
||||
}
|
@@ -0,0 +1,13 @@
|
||||
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;
|
||||
|
||||
public class FabricFluidUtils {
|
||||
|
||||
public static TextureAtlasSprite getFluidTexture(FluidVariant fluidStack) {
|
||||
return FluidVariantRendering.getSprite(fluidStack);
|
||||
}
|
||||
|
||||
}
|
@@ -5,59 +5,35 @@ 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.transaction.TransactionContext;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
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 class FluidTank extends CraterFluidTank implements Storage<FluidVariant>, StorageView<FluidVariant> {
|
||||
|
||||
public FluidTank(long capacity) {
|
||||
this(capacity, e -> true);
|
||||
}
|
||||
|
||||
public FluidTank(long capacity, Predicate<FluidVariant> validFluid) {
|
||||
this.capacity = capacity;
|
||||
this.validFluid = validFluid;
|
||||
super((int) capacity, (p) -> validFluid.test(FluidVariant.of(p.getFluid())));
|
||||
}
|
||||
|
||||
public boolean isFluidValid(FluidVariant variant) {
|
||||
return validFluid.test(variant);
|
||||
return isValidFluid(new FluidHolder(variant.getFluid(), 0));
|
||||
}
|
||||
|
||||
@Override
|
||||
public long insert(FluidVariant resource, long maxAmount, TransactionContext transaction) {
|
||||
StoragePreconditions.notBlankNotNegative(resource, maxAmount);
|
||||
if (this.fluid.isBlank() || this.fluid.equals(resource)) {
|
||||
long inserted = Math.min(maxAmount, capacity - level);
|
||||
if (inserted > 0) {
|
||||
level += inserted;
|
||||
this.fluid = resource;
|
||||
}
|
||||
return inserted;
|
||||
}
|
||||
return 0;
|
||||
return insert(new FluidHolder(resource.getFluid(), (int) maxAmount), FluidAction.EXECUTE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long extract(FluidVariant resource, long maxAmount, TransactionContext transaction) {
|
||||
StoragePreconditions.notBlankNotNegative(resource, maxAmount);
|
||||
if (resource.equals(fluid)) {
|
||||
long extracted = Math.min(maxAmount, level);
|
||||
if (extracted > 0) {
|
||||
level -= extracted;
|
||||
if (level == 0) {
|
||||
this.fluid = FluidVariant.blank();
|
||||
}
|
||||
}
|
||||
return extracted;
|
||||
}
|
||||
return 0;
|
||||
FluidHolder extracted = extract(new FluidHolder(resource.getFluid(), (int) maxAmount), FluidAction.EXECUTE);
|
||||
return extracted.getAmount();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -68,32 +44,21 @@ public class FluidTank implements Storage<FluidVariant>, StorageView<FluidVarian
|
||||
|
||||
@Override
|
||||
public boolean isResourceBlank() {
|
||||
return fluid.isBlank();
|
||||
return isTankEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FluidVariant getResource() {
|
||||
return fluid;
|
||||
return FluidVariant.of(getFluidInTank().getFluid());
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getAmount() {
|
||||
return level;
|
||||
return getTankLevel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getCapacity() {
|
||||
return capacity;
|
||||
}
|
||||
|
||||
public CompoundTag writeNbt(CompoundTag compound) {
|
||||
FluidUtils.putFluid(compound, "fluid", getResource());
|
||||
compound.putLong("amt", level);
|
||||
return compound;
|
||||
}
|
||||
|
||||
public void readNbt(CompoundTag nbtCompound) {
|
||||
fluid = FluidUtils.getFluidCompatible(nbtCompound, "fluid");
|
||||
level = nbtCompound.getLong("amt");
|
||||
return getTankCapacity();
|
||||
}
|
||||
}
|
||||
|
@@ -1,55 +0,0 @@
|
||||
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.core.registries.BuiltInRegistries;
|
||||
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(BuiltInRegistries.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 BuiltInRegistries.FLUID.get(new ResourceLocation(tag.getString("ObjName")));
|
||||
} else {
|
||||
return Fluids.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
public static TextureAtlasSprite getFluidTexture(FluidVariant fluidStack) {
|
||||
return FluidVariantRendering.getSprite(fluidStack);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1 @@
|
||||
me.hypherionmc.craterlib.common.FabricFluidHelper
|
@@ -16,9 +16,6 @@
|
||||
"icon": "assets/modid/icon.png",
|
||||
"environment": "*",
|
||||
"entrypoints": {
|
||||
"preLaunch": [
|
||||
"me.hypherionmc.craterlib.CraterLibInitializer"
|
||||
],
|
||||
"main": [
|
||||
"me.hypherionmc.craterlib.CraterLibInitializer"
|
||||
],
|
||||
|
Reference in New Issue
Block a user